검증일: 2026-08-14 UTC
범위: T044–T068, 로컬 source·production build·브라우저·deployment 계약과 공개 배포
release metadata: harness-2026.08-foundation
RED → GREEN
- T044 RED: integration runner가 존재하지 않는
scripts/verify-content.tsimport에서 실패했다. GREEN: 전체 콘텐츠 validator 구현 뒤 route 4개, 계층 8개, 순서가 고정된 workflow 10단계, guide anchor, evidence/roadmap 참조와 날짜의 양·음수 계약이 통과했다. - T045 RED: health, robots, sitemap, 404 모듈이 없어 public route integration이 실패했다. GREEN: 최소 health JSON, indexable robots, 네 URL sitemap, canonical metadata, 보안 header와 복구 링크가 있는 실제 404가 integration과 browser에서 통과했다.
- T054 RED: 매뉴얼을 먼저 작성한 뒤 manual integration이 존재하지 않는
scripts/verify-manual.mjs에서 실패했다. GREEN: 실제 corpus와 의도적인 절대 경로, 이메일, secret assignment, 깨진 링크, 잘못된 npm script, 알 수 없는 route fixture가 모두 기대대로 판정됐다. - 명세 리뷰 RED: health의 근거 검증일 누락, bundle text의 source 참조 미검사,
quickstart의 blocking
npm run dev다음 browser 명령을 각각 새 회귀 테스트가 검출했다. GREEN: 검증된evidenceVerifiedOn추가, project-root만 허용하는 bundle text 경계 검사, Playwright 자체 서버를 쓰는 단일 browser 명령과 sequencing validator로 수정했다.
Fresh local checks
| 명령 | 결과 |
|---|---|
npm run test:unit |
PASS — 7/7 test files |
npm run test:integration |
PASS — 8/8 test files |
npm run typecheck |
PASS |
npm run lint |
PASS — warning 없음 |
npm run verify:evidence |
PASS — 공개 근거 19개, 검증일 2026-08-13 |
npm run verify:content |
PASS — 4 routes, 8 layers, 10 steps, links, refs, dates |
npm run verify:manual |
PASS — commands, relative links, routes, public URLs, leak checks |
npm run build |
PASS — validators 선행, 8 routes 생성, standalone boundary PASS |
npm run test:browser |
PASS — Chromium 49/49 |
npx playwright test tests/browser/public-routes.spec.ts |
PASS — 명세 리뷰 후 targeted 6/6 |
bash tests/deploy/build-release.test.sh |
PASS — packaging, manifest, root/ID safety, least privilege template |
bash tests/deploy/deploy.test.sh |
PASS — active manifest ID, candidate, activation, record, rollback |
Browser 49건은 네 공개 route의 WCAG A/AA axe 검사, JavaScript 비활성 핵심 콘텐츠,
reduced motion, 375/768/1024/1440px 전체 route matrix, keyboard/filter/disclosure,
dark mode, health/robots/sitemap/canonical/security header/static asset/404 계약을 포함한다.
동일한 네 폭에서 네 route의 full-page 화면 16장을 별도로 캡처해 제목 계층, 카드 배열,
코드 블록, footer, 모바일 내비게이션을 육안으로 확인했다. 핵심 콘텐츠 손실이나 수평
넘침은 없었다. 캡처에 보이는 작은 원형 N 표시는 Next.js 개발 모드 전용 도구이며
production build에는 포함되지 않는 제한으로 판정했다.
개발 모드 CSP는 React debugging에 필요한 eval을 개발에서만 허용하며 production CSP에는
포함하지 않는다. production은 self 기반 script/style/resource 경계를 유지한다.
Standalone 검사는 복사된 원본 content/evidence.json뿐 아니라 server·JSON·JavaScript
bundle text의 manifest literal과 parent/sibling 5240lab source 경로도 거부한다. Next.js
framework가 내부적으로 정확한 프로젝트 build 경로를 직렬화할 수 있어 그 프로젝트-root
prefix만 허용한다. 이 내부 경로는 공개 응답이 아니며 health나 페이지 콘텐츠에 노출하지
않는다. 런타임은 생성된 공개 snapshot만 사용한다. health 응답은 status, service,
releaseId, 검증된 evidenceVerifiedOn만 포함하며 캐시하지 않는다.
Phase 8에서는 실제 Next standalone release harness-local-20260813을 격리 root에 만들고
후보 포트 3631에서 --check-only smoke를 통과했다. fixture 훈련은 후보 health 실패 시
무활성화와 활성화 뒤 외부 smoke 실패 시 old-release 복구를 확인했다. 자세한 실행 경계는
deployment report에 기록했다.
External release evidence
2026-08-14 T064에서 DNS, systemd/Nginx, TLS, HTTP→HTTPS와 HSTS를 확인하고
harness-20260814-0b665e7-r2를 활성화했다. health의 release ID와 근거 검증일이 manifest와
일치했고 네 공개 페이지, robots, sitemap, 정적 자산과 404 외부 smoke가 PASS했다.
제품·매뉴얼 coordinated release gate도 재실행해 docs/manual-impact.md의 외부 공개 행을
검증 완료로 닫았다. 상세 명령과 시각은 배포 보고서에 있다.