docs: point the spec at canonical-source.json instead of a stale digest
§상태 pinned `sha256:85a65004…` / revision `0ec5582` while the canonical yaml that actually shipped is `sha256:99f54f56…` / `ce2e748` -- the value `canonical-source.json` records, the value the contract contribution imports, and the value the spec's own Task 12 table already quotes. The canonical source moved during implementation and only one of the two places was updated. The spec no longer carries the values at all: it names `contracts/studio/canonical-source.json` as the single record, which is what the contract contribution reads and what `check:tech-log-contract` verifies, so the two cannot drift apart again. Task 12 row 3 also records that the drift gate is now wired into FE-GATE-010 and `test:all`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
6085af51b6
commit
172497591f
@@ -7,8 +7,15 @@
|
||||
- 원본 요구: `/home/donghyeon/workspace/tech-log-alignment-design/01-tech-log-frontend-alignment-design.md`
|
||||
- Canonical 계약: `/home/donghyeon/workspace/tech-log-design-package/contracts/openapi/studio-v1.yaml`
|
||||
- Specification Version `2.0.0`
|
||||
- 계약 digest `sha256:85a65004f29880334b9a0a3b54089450a898f1a815f679b2985b87ed8723df5b`
|
||||
- 설계 패키지 revision `0ec5582`
|
||||
- **digest·revision의 단일 기록처는 `src/features/tech-log/contracts/studio/canonical-source.json`이다.**
|
||||
이 문서는 그 값을 복제하지 않는다. 승인 시점에 여기 적혀 있던
|
||||
`sha256:85a65004…` / revision `0ec5582`은 구현 중 canonical yaml이 갱신되면서
|
||||
무효가 됐고, 실제로 vendor·고정된 값은 `canonical-source.json`이 기록한
|
||||
`sha256:99f54f56…` / revision `ce2e748`이다(Task 12 표 3행의 `ce2e748`과 동일).
|
||||
- 계약 기여(`tech-log-studio-contract-contribution.ts`)는 그 파일을 import해서
|
||||
`EXTERNAL_PACKAGE` provenance를 채우고, `check:tech-log-contract`가 vendor
|
||||
사본·`generated.ts`와의 일치를 검증한다. 두 곳이 다시 갈라질 수 있는 지점은
|
||||
없다.
|
||||
- 결정: 현재 Public/Studio UI 기준선을 고정하고, Studio 계약·전송 경계와 Asset capability를 canonical 계약에 정합시킨다. Public 조회의 HTTP 전환은 이 사이클에서 제외한다.
|
||||
|
||||
### Task 12 완료 상태 (2026-08-18)
|
||||
@@ -20,7 +27,7 @@
|
||||
|---|---|---|---|
|
||||
| 1 | 현재 Public UI·라우트가 변경되지 않는다 | 충족 | Public 화면 테스트(`public-document-screens.test.tsx` 등) 무변경 통과; `case-body-renderer.tsx`/`evidence-figure.tsx`는 `9e5fbd1..HEAD` 사이 diff가 비어 있어 렌더러 코드에 변경이 없다(`check:architecture`/`check:registries`는 import 그래프·레지스트리 정합만 보고 Public 렌더 출력을 관찰하지 않으므로 이 판정의 근거가 아니다). `test:visual`의 Public 스냅샷 실패는 이 브랜치가 아니라 `main`의 `79e9aa8`에서 물려받은 것이다(아래 §Task 12 참고) |
|
||||
| 2 | 현재 Studio 작업 흐름이 변경되지 않는다 | 충족 | 기본 `MOCK`에서 `test:tech-log`(36 files/303 tests) 전부 PASS; `tech-log-studio-workflow.spec.ts` chromium 2/2 PASS |
|
||||
| 3 | Studio 계약이 canonical에서 생성되고 digest 고정·drift 게이트 동작 | 충족 | `check:tech-log-contract`: "in sync: @tech-log/studio-contract@2.0.0 (ce2e748), 19 operations" |
|
||||
| 3 | Studio 계약이 canonical에서 생성되고 digest 고정·drift 게이트 동작 | 충족 | `check:tech-log-contract`: "in sync: @tech-log/studio-contract@2.0.0 (ce2e748), 19 operations". 최종 fix wave에서 이 명령을 `config/ci/gates.json`의 FE-GATE-010과 `test:all`에 연결했다 — 그전까지는 손으로 칠 때만 실행돼 drift 게이트가 실질적으로 비어 있었다 |
|
||||
| 4 | `StudioGateway` 전체 operation이 HTTP 어댑터로 구현·MSW 검증 | 충족 | `test:unit`/`test:integration`의 HTTP·MSW 계약 스위트 PASS (환경 요인 실패 1건 제외, 아래 참고) |
|
||||
| 5 | WorkingCopy 저장이 Public Projection을 변경하지 않는다 | 충족 | `studio-publication-flow.test.tsx`, `public-document-screens.test.tsx` PASS |
|
||||
| 6 | Validation/Preview/Publish가 version·dependency revision으로 묶인다 | 충족 | `studio-validation-preview.test.tsx` PASS |
|
||||
@@ -128,13 +135,18 @@ canonical yaml을 저장소에 vendor하고, 타입을 생성하고, **계약
|
||||
`InstalledContractPackageIdentity`(`external-contract-runtime.ts:173`)는 이미 이 목적에 맞는 필드를 요구한다.
|
||||
|
||||
```text
|
||||
packageId tech-log-studio-contract
|
||||
packageId @tech-log/studio-contract
|
||||
version 2.0.0 (canonical info.version, exact SemVer)
|
||||
digest sha256:85a65004… (canonical studio-v1.yaml의 SHA-256)
|
||||
digest canonical studio-v1.yaml의 SHA-256
|
||||
runtimeProtocolVersion 1
|
||||
sourceRevision 0ec5582 (설계 패키지 git revision)
|
||||
sourceRevision 설계 패키지 git revision
|
||||
```
|
||||
|
||||
`digest`·`sourceRevision`의 실제 값은 이 문서가 아니라
|
||||
`contracts/studio/canonical-source.json`에 기록한다(§상태 참고). 계약 기여가 그
|
||||
파일을 직접 읽으므로, 문서에 값을 복제하면 갱신을 한쪽에서만 하다가 어긋난다 —
|
||||
승인본이 실제로 그렇게 어긋났다.
|
||||
|
||||
`assertPackageIdentity`는 shape을 검증하므로 npm 레지스트리 없이 지금 사용할 수 있다. 실제 패키지 배포로 승격할 때 같은 필드를 그대로 채운다.
|
||||
|
||||
drift 방지는 저장소 관례(`generate:*` / `check:*`)를 따르는 스크립트 한 쌍으로 강제한다.
|
||||
|
||||
Reference in New Issue
Block a user