작업 범위: T035–T043
기준일: 2026-08-13 UTC
상태: DONE
manual-impact: affected
매뉴얼 영향
공개 /roadmap을 placeholder에서 성숙도 기준선, 개선 과제, 매뉴얼 측정 정의와 재판정
예시를 제공하는 운영자용 페이지로 교체했다. 기존 /guide의 작업 흐름은 바꾸지
않았다. 개발자 README와 운영 매뉴얼은 T051/T052 범위이므로 이번 단계에서 수정하지
않았고, 이 보고서가 기능별 영향·검증 기록을 담당한다.
RED
production 모듈과 UI 전에 T035–T038 계약을 추가해 다음 실패를 확인했다.
| 명령 | 결과 |
|---|---|
node --import tsx --test tests/unit/maturity.test.ts |
FAIL — ../../lib/maturity 모듈 없음 |
node --import tsx --test tests/unit/roadmap-content.test.ts |
FAIL — ../../content/roadmap 모듈 없음 |
node --import tsx scripts/run-integration-tests.ts tests/integration/roadmap-page.test.tsx |
FAIL — roadmap 계약 실패, 기존 4개 integration file은 PASS |
npx playwright test tests/browser/roadmap.spec.ts |
FAIL — 6/6; placeholder에 disclosure와 maturity score 없음 |
node --import tsx --test tests/unit/maturity.test.ts (자체 리뷰 보완) |
FAIL — 잘못된 재판정 상태를 런타임에서 거부하지 않음 |
| unit + roadmap integration 명세 정정 | FAIL — 원인이 있는 음수 변화도 거부했고 상승·하락·유지 표시 원칙이 없었음 |
GREEN
| 명령 | 결과 |
|---|---|
node --import tsx --test tests/unit/maturity.test.ts tests/unit/roadmap-content.test.ts |
PASS — 2/2 files |
npm test |
PASS — unit 7/7, integration 5/5 files |
npm run typecheck |
PASS |
npm run lint |
PASS |
npx playwright test tests/browser/roadmap.spec.ts |
PASS — 6/6; 키보드, 상태 텍스트, dark, 375/768/1024/1440px |
npm run test:browser |
PASS — US1/US2 회귀 포함 18/18 |
npm run build |
PASS — 공개 근거 19개 재검증, /roadmap 정적 사전 렌더 |
git diff --check |
PASS |
명세 정정 뒤 maturity unit, integration 5/5, roadmap browser 6/6, typecheck,
lint, build와 diff check를 다시 통과했다. 병렬 최초 lint는 Playwright가
test-results를 교체하는 순간의 ENOENT로 종료됐으며 브라우저 종료 뒤 단독
재실행해 통과했다.
품질 리뷰의 검증 공백 보완에서도 테스트를 먼저 실패시킨 뒤 다음 계약을 추가했다.
- 공용 실제 달력 정규화를 재사용해
2026-02-31, 비윤년2025-02-29를 거부하고 윤년2024-02-29를 허용한다. - 재판정
passed는not-run뿐 아니라failed도 없이 모든 check가passed일 때만 허용한다. - 개선 항목의 안정·중복 없는 ID, 실제 재판정일, 한 개 이상의 비어 있지 않은 검증 조건과 snapshot 근거 참조를 검사한다. 예시 재판정은 알려진 개선 ID와 정확한 기준선 assessment ID, 별도의 현재 assessment ID와 유효 근거를 가져야 한다.
content/roadmap.tsimport 시validateImprovementItems와validateRoadmapReassessment를 모두 실행해 잘못된 정적 콘텐츠가 페이지 렌더 전에 실패한다.
보완 뒤 전체 unit 46/46, integration 17/17, typecheck, lint, build와 roadmap browser
6/6을 통과했다. 제한 실행의 Chromium은 sandbox host SIGTRAP으로 assertion 전에
종료되어 승인된 상위 실행에서 같은 browser file을 통과시켰다.
마지막 참조 리뷰에서는 afterAssessmentId의 문법만 검사하던 공백을 RED로 재현했다.
이제 별도의 알려진 현재 assessment ID 목록에 없는 값도 거부한다. 다섯 축 합계가
63점인 sampleAfterAssessment를 명시적인 예시 객체로 만들고 validateAssessment로
검증한 뒤, 예시 재판정이 그 ID를 참조하도록 연결했다. 이 객체는 실제 운영 측정이
아님을 limitations에 명시한다. focused unit 2/2, integration 5/5, typecheck, lint,
build와 diff check를 다시 통과했다.
구현 결과
- L0 미구성부터 L4 지속 개선까지 누적 근거 규칙을 정의했다. L2는 자동 강제, L3는 실행 기록, L4는 반복 개선 증거가 없으면 거부한다.
- 적용 범위·강제력·검증 가능성·추적성·운영 안전성을 각각 0–20 정수로 제한하고 표시 총점이 정확한 합계가 아니면 거부한다. 근거 ID는 생성 snapshot에 대해 검증한다.
- 2026-08-13 기준선을 59/100, 전체 L2로 판정했다. 선별 근거의 범위와 전수 CI, 운영 배포 안전, 매뉴얼 측정 부재를 한계로 공개해 상위 단계를 주장하지 않았다.
- 즉시·단기·중기·장기 개선에 기준선, 목표, 실행, 검증 조건, 근거, 상태와 재판정일을 포함했다. 비밀 값이나 숨은 설정 경로는 공개하지 않고 sanitized 검사로 표현했다.
- 세 매뉴얼 지표는 분자·분모를 정의하되 운영 기록이 없어 기준값을
null/미측정으로 표시했다. 전후 59→63(+4)는 실제 성과가 아닌 명시적 부분 통과 예시다. - 재판정 점수는 정확한 전후 차이를 검증하고 상승은
+4, 하락은-1, 유지는0으로 표시한다. 음수 변화는 숨기지 않고 비어 있지 않은 하락 원인이 있을 때만 수용한다. - 서버 컴포넌트와 native
details/summary로 핵심 콘텐츠와 키보드 상호작용을 제공한다. 상태는 색뿐 아니라 계획·진행 중·부분 통과·미실행 텍스트로 표시한다.
자체 리뷰와 남은 우려
- 재판정 하락은 원인과 함께 공개한다. 현재 UI의 본 예시는 +4이며, 실제 하락 데이터가
등록되면
scoreChangeReason을 함께 렌더하는 후속 콘텐츠가 필요하다. - 기준선 점수는 공개 snapshot에 대한 보수적 판단이지 전수 운영 측정값이 아니다. 새 자동 강제·실행 기록이 생성될 때 같은 축과 ID로 다시 검토해야 한다.
- 배포와 매뉴얼 지표는 아직 계획/미측정이다. 예시 재판정을 실제 결과로 바꾸려면 검증 실행 기록과 새 evidence ID가 필요하다.
- 작업은
lcy_harness내부 파일에만 적용했고 커밋하지 않았다.