# Task 14 report: integrated TechLog parity and release verification ## Status `DONE_WITH_CONCERNS`. The migrated UI, committed browser evidence, source-to-target comparison, sample-removal gate, focused suites, static gates, and production build pass. The only concern is the repository's pre-existing restricted-runner `test:all` baseline: child-process-heavy tests cannot spawn in the managed sandbox, and 19 provider-environment cases remain red even when isolated with the required process scope. The isolation and exact counts below prove that no TechLog test is among those failures. The work remains on `feature/techlog-ui-migration`. It was not merged, pushed, finished with GitFlow, or deleted. Task 14 is committed by this report's commit, `test: prove TechLog UI migration parity`. ## Evidence files Added or replaced product evidence: - `tests/visual/tech-log.visual.spec.ts` and 111 target-only PNG snapshots. The suite has 112 cases because canonical and state coverage for the 1440-pixel `/studio/publications` screen deliberately share the same reviewed image. - `tests/e2e/tech-log-public-discovery.spec.ts`, `tests/e2e/tech-log-accessibility.spec.ts`, and `tests/e2e/tech-log-responsive.spec.ts`. - `tests/support/browser/tech-log-fixtures.ts` and the external, manually run `tests/support/browser/verify-tech-log-source-parity.ts` evidence harness. - Focused regressions in `tests/unit/vite-route-chunks.test.ts`, `tests/unit/design-system-source.test.ts`, the bounded-body reader tests, the router component suite, and TechLog feature suites. - Governed registry, dependency, release, CI, and operations evidence in `config/contracts`, `config/security`, `config/ci`, the generated Gitea workflow, `README.md`, and `docs/operations/techlog-ui-migration-baseline.md`. Removed starter-only evidence: - `tests/e2e/compact-smoke.spec.ts`, `tests/e2e/design-system-interactions.spec.ts`, `tests/e2e/i18n.spec.ts`, and `tests/e2e/theme.spec.ts`. - `tests/visual/platform.visual.spec.ts` and all five platform visual PNGs. The retained `app-shell`, registry-wide accessibility, and responsive suites were rewritten around TechLog. No stale starter browser or visual snapshot is left referenced. ## Source-to-target visual method and result The supplied source at `/home/donghyeon/workspace/techlog-studio-frontend` was never written. It was copied to `/tmp/techlog-source-parity.I0CBK7`; build and Vinext runtime caches were created only in that temporary copy. The source production server and target Vite preview were opened by one Playwright Chromium instance with two fresh contexts and the following identical controls: - device scale factor 1, light color scheme, `ko-KR`, `Asia/Seoul`, reduced motion, service workers blocked, 1000-pixel viewport height, and full-page screenshots; - fixed clock `2026-08-14T01:00:00.000Z`, deterministic in-memory data, `document.fonts.ready`, matching Pretendard/IBM Plex Mono font-face state, and zero-duration animation, transition, and caret styles; - no masks and no tolerance: exact RGBA pixel comparison, product-subtree tag/class/text/ARIA projection, layout diagnostics, and console/page/request failure collection. The final external comparison command was: ```bash TECH_LOG_SOURCE_URL=http://127.0.0.1:4275 TECH_LOG_TARGET_URL=http://127.0.0.1:4274 corepack pnpm exec tsx tests/support/browser/verify-tech-log-source-parity.ts ``` Result: **112/112 passed**, 0 failed, `totalDifferentPixels=0`, every DOM/class/ text/ARIA projection equal, and 0 unexplained source/target errors. Source screenshots were temporary comparison inputs; none was copied into target snapshots. The no-update target visual run also passed 112/112 with `maxDiffPixels=0` and `maxDiffPixelRatio=0`. The comparison found and corrected actual integration defects rather than accepting drift: the TechLog Tailwind bootstrap is loaded exactly once in the same cascade order as source; the starter theme import is removed; CSS-module class mapping, shell navigation/focus, publication labels and states, router 404 handling, and generated Vite route-chunk lookup now follow source. All five source/target CSS pairs pass `cmp -s`; their hashes are recorded in the operations baseline. Source production returns missing dynamic slugs and an unmatched Public path as HTTP 404, `text/plain`, with the exact nine-byte body `Not Found`. Curl and Chromium regression evidence therefore fixes the target to that shell-free response. This is an observed source-production contract and satisfies the planned prohibition on a generic runtime error; it is not a redesign. ## Route, viewport, and state inventory The 27 canonical contract routes were each compared at 360 and 1440 pixels: - Public: `/`, `/explore`, `/explore/:kind`, `/cases/:slug`, `/references/:slug`, `/questions/:slug`, `/topics/:slug`, `/projects`, `/projects/:slug`, the `records`, `decisions`, and `activity` project views, `/releases`, `/releases/:version`, `/profile`, `/search`, and `*`. - Studio: `/studio`, `/studio/documents`, `/studio/documents/new`, the `edit`, `validation`, `preview`, and `publish` document views, `/studio/publications`, publication-event preview, and `/studio/*`. All known Public fixtures were exercised: two cases, two references, two open questions, three topics, both projects and all three nested views, and release `0.1.0`. Ten unknown Public dynamic shapes were also compared at both widths. The 112-case matrix is 54 canonical-route captures, 12 home breakpoints (1180, 1179, 1050, 1024, 980, 900, 820, 768, 767, 420, 390, and 375), 19 Studio states, 20 unknown-Public captures, and 7 interactions. Studio states cover the dashboard, list/new, Case/Reference/Question/conflict editors, valid/invalid validation, current/missing/expired previews, ready/blocked publish, publications/snapshot, missing document/publication, and unknown Studio route. Interactions cover Public search, Studio mobile menu, immediate preview, dirty-leave dialog, newly created current preview, unpublish confirmation, and warning acknowledgement through publish-ready state. ## Browser, responsive, and accessibility outcomes - Required four-spec Chromium command: **48/48 passed**. It covers Public discovery, the full Studio workflow, responsive behavior, and accessibility. - Responsive plus accessibility focused command: **26/26 passed**. - Exact target visual command: **112/112 passed** in 2.5 minutes with no masks and zero pixel tolerance. - Keyboard/focus checks cover Public search dismissal/restoration, Studio mobile navigation, dirty-leave and unpublish dialogs, labels, heading/landmark order, and focus-visible behavior. Axe reports no violations in the required route and state inventory. Overflow assertions pass at the compact and transition widths, and no unexpected console, page, or request error remains. Commands: ```bash corepack pnpm exec playwright test tests/e2e/tech-log-public-discovery.spec.ts tests/e2e/tech-log-studio-workflow.spec.ts tests/e2e/tech-log-responsive.spec.ts tests/e2e/tech-log-accessibility.spec.ts --project=chromium corepack pnpm exec playwright test tests/e2e/tech-log-responsive.spec.ts tests/e2e/tech-log-accessibility.spec.ts --project=chromium corepack pnpm exec playwright test tests/visual/tech-log.visual.spec.ts --config=playwright.visual.config.ts --project=chromium corepack pnpm test:visual ``` ## Registry and supply-chain governance The initial no-baseline registry artifact reported 23 migration-owned breaking IDs. Each now has owner `tech-log-frontend`, a TechLog contract-version reason, atomic route/runtime/manifest installation, same-release compatibility, and rollback to `05e3d50ba01f01c27f257d2e9040c2bc413ea053`: - Contract: `$contract:{allowedValues,breakingFields,fieldTypes,requiredFields}`. - Removed route rows: `APP_HOME`, `EXAMPLES_AUTH`, `EXAMPLES_PLATFORM`, `EXAMPLES_STATES`, `EXAMPLES_UI`, `REFERENCE_RESOURCE_DETAIL`, `REFERENCE_RESOURCE_FORM`, `REFERENCE_RESOURCE_LIST`, and `REFERENCE_RESOURCE_STATUS`. - Runtime removals: the same nine route IDs. - Runtime change: `NOT_FOUND:moduleId:field-changed`. The governed update used exactly: ```bash REGISTRY_BASELINE_OWNER=tech-log-frontend REGISTRY_BASELINE_REASON="Install approved TechLog Public and Studio route contract" node scripts/update-registry-baseline.ts artifacts/quality/registries.json corepack pnpm check:registries ``` Final result: 11 registries pass, compatibility `none`, no unacknowledged change. Approved snapshot digest: `428479ac5845374a82dd7d02a0c59a713106405f031cdc153789174f14c1405b`. Six direct dependency additions have evidence owner `tech-log-frontend`, reviewer `frontend-platform-security`, product-specific reason, and atomic rollback: `@fontsource/ibm-plex-mono@5.3.0`, `pretendard@1.3.9`, `remark-directive@4.0.0`, `remark-gfm@4.0.1`, `remark-parse@11.0.0`, and `unified@11.0.5`. The dependency policy recognizes the font packages' OFL-1.1 license. Supply-chain generation covered 641 packages. The pre-existing dependency baseline was not promoted; the denied promotion was unnecessary for the regular verification path, which passes with the committed evidence. ## Sample removal and fresh verification The final staged-candidate command passed: ```bash corepack pnpm test:sample-removal ``` Result: **PASS (13 checks, no fixture IDs)**. Its internal evidence included types; reduced architecture (383 modules/1,173 dependencies, 12 graph checks, 9 forbidden fixtures); 11 registry checks; runtime schema 3 files/40 tests; unit 115/1,247; component 18/124; integration 8/74; recipes 2/17; coverage 164 files/1,653 tests at 77.41% statements, 73.26% branches, 83.89% functions, and 80.03% lines; risk coverage 382/382 with 76 thresholds; source evidence 198 files/111 baselines; artifact/CI checks; router smoke 9/9; and production build. Fresh completion commands and results: | Command | Result | | --- | --- | | `corepack pnpm exec vitest run tests/features/tech-log` | 21 files, 170 tests passed | | required four-spec Chromium command above | 48 tests passed | | `corepack pnpm test:visual` | 112 tests passed | | `corepack pnpm check:types` | app/node/test/recipes/web-worker/service-worker passed | | `corepack pnpm lint` | passed with 0 warnings | | `corepack pnpm check:architecture` | 392 modules, 1,215 dependencies, 12 graph checks, 9 forbidden fixtures passed | | `corepack pnpm check:design-system` | 48 tokens and vendor boundaries passed | | `corepack pnpm check:i18n` | 194 keys across 4 locales passed | | `corepack pnpm check:registries` | 11 registries passed; compatibility `none` | | `corepack pnpm check:browser-security` | injection rejected; Public source maps absent | | `corepack pnpm build` | 2,352 modules transformed; build and manifest completed | | `git diff --check` | passed | The exact managed-workspace `corepack pnpm test:all` passed runtime schema 3/40, then its unit phase passed 117 files/1,738 tests and failed 50 tests in only three child-process-heavy files due to `spawnSync ... EPERM`: 39 `ci-artifact-contract`, 2 `ci-workflow-generation`, and 9 `http-scenario-evidence`. No TechLog test failed. The exact isolated command: ```bash corepack pnpm exec vitest run tests/unit/ci-artifact-contract.test.ts tests/unit/ci-workflow-generation.test.ts tests/unit/http-scenario-evidence.test.ts ``` ran 3 files/529 tests: 510 passed; all 407 CI-workflow and all 14 HTTP-scenario tests passed; the remaining 19 pre-existing CI-artifact provider/cgroup, RLIMIT/EMFILE, umask, `/tmp`, timing, and identity cases failed. Direct runs of the aggregate's remaining phases passed: component 18/124, integration 11/82 under the required child-process scope, reference feature 4/13, and recipes 2/17. This environment-only baseline is also recorded in the operations baseline. ## Fixes, branch audit, and handoff Root-cause-driven fixes added regressions for generated Vite manifest chunk resolution, source-compatible raw 404 responses, palette-source detection, and abort rejection. Presentation integration corrections preserve source DOM, ARIA, copy, assets, CSS, workflow state, and focus behavior; no design was introduced. The branch-wide audit of `05e3d50ba01f01c27f257d2e9040c2bc413ea053..HEAD` found no migrated presentation import of adapters, Next.js, Vinext, or Cloudflare. The 27 route chunks are present in the release manifest and derive from actual Vite output, not hard-coded generated filenames. Before the Task 14 commit, the full migration range contains the 21 prior commits from baseline establishment through `c5c8b94` and changes 352 files (26,025 insertions, 3,467 deletions). This report's commit adds the integrated parity evidence and fixes with the exact message `test: prove TechLog UI migration parity`. Final status and range are checked again after the commit; integration remains explicitly deferred.