docs: record TechLog migration evidence
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -96,39 +96,82 @@ the resulting browser comparison is pixel-identical.
|
||||
The source was copied to `/tmp/techlog-source-parity.I0CBK7` before build and
|
||||
runtime caches were created. The supplied source directory was used only for
|
||||
read-only file comparison; it was not edited. The temp-copy Vinext production
|
||||
server and the target Vite preview were captured by one Playwright Chromium
|
||||
instance with two fresh contexts under identical conditions:
|
||||
server on `4375` and the target `dist/server.mjs` production artifact on `4174`
|
||||
were captured by one Playwright Chromium instance with two fresh contexts
|
||||
under identical conditions:
|
||||
|
||||
- `ko-KR`, `Asia/Seoul`, light color scheme, reduced motion, device scale 1,
|
||||
service workers blocked, and a fixed `2026-08-14T01:00:00.000Z` clock;
|
||||
- 1000-pixel viewport height, full-page screenshots, `document.fonts.ready`,
|
||||
Pretendard/IBM Plex font checks, zero-duration animation/transition/caret;
|
||||
- no screenshot masks; exact RGBA pixel comparison plus product-subtree
|
||||
tag/class/text/ARIA projection and console/request failure comparison.
|
||||
- no screenshot masks; exact RGBA pixel comparison plus normalized recursive
|
||||
product-subtree tags, ordered children, complete classes, relevant
|
||||
attributes, text/ARIA relationships, response metadata, boot lifecycle, and
|
||||
console/request failure comparison.
|
||||
|
||||
The only attributes omitted by name after concrete diagnostics are React
|
||||
Router `data-discover`, Next Image `data-nimg`/`decoding`/`srcset`, and Next SSR
|
||||
`selected`; generated React IDs and CSS-module hashes are normalized by value.
|
||||
No broad attribute class is omitted.
|
||||
|
||||
| Evidence group | Cases |
|
||||
| --- | ---: |
|
||||
| 27 canonical routes at 360 and 1440 pixels | 54 |
|
||||
| Every additional known Public fixture slug/version | 18 |
|
||||
| Public home breakpoint transitions | 12 |
|
||||
| Studio screen/state fixtures | 19 |
|
||||
| Ten unknown Public dynamic shapes at 360 and 1440 pixels | 20 |
|
||||
| Search/menu/preview/dialog/publication interactions | 7 |
|
||||
| **Total** | **112** |
|
||||
| **Total** | **130** |
|
||||
|
||||
Result: 112/112 passed, zero failed, zero different pixels, all DOM/class/text/
|
||||
ARIA projections equal, and zero unexplained source or target console/request
|
||||
errors. The target-only visual regression suite exercises the same 112 cases
|
||||
against 111 committed PNGs; the canonical and Studio-state 1440-pixel
|
||||
Result: 130/130 passed, zero failed, zero different pixels, all recursive
|
||||
DOM/class/attribute/text/ARIA trees and HTTP response metadata equal, and zero
|
||||
unexplained source or target console/request errors. The target-only visual
|
||||
regression suite exercises the same 130 cases against 129 committed PNGs; the
|
||||
canonical and Studio-state 1440-pixel
|
||||
`/studio/publications` cases intentionally share one identical snapshot.
|
||||
Source screenshots were temporary comparison inputs and were not copied into
|
||||
the target snapshot directory.
|
||||
|
||||
The checked clean-checkout command is
|
||||
`TZ=Asia/Seoul corepack pnpm verify:tech-log-source-parity`; it runs directly
|
||||
under the installed Node 24 runtime and has no `tsx` dependency. Durable
|
||||
evidence is committed at
|
||||
`docs/operations/evidence/tech-log-source-parity.json`. It records 178 source
|
||||
checksums with tree digest
|
||||
`6724c2f898eefc62d2fc0ee695bccc3ae61a69c5153ed43c69f2cf99ee45bca5`,
|
||||
target candidate `3a7c5deca06679fb9b8710da2cce87bbca07ce8a`, build-manifest digest
|
||||
`3579650faa482f566553c00d8b4a05a05b4f7a1ab93b83e48676289bbcf02984`,
|
||||
Vite-manifest digest
|
||||
`cfd583ed7b6c27dce7f47389447608636b6b9df3e28df00c6416674da2c7c46d`,
|
||||
case inventory digest
|
||||
`5689bcdb5d5637205cdeb92b7c57f72d99f0b039818b8f90afdde526bbafe0ac`,
|
||||
and evidence payload digest
|
||||
`f046047beded19ce468be607dcf99c6b74d4e07323457ec7145c56d2f67d2c79`.
|
||||
|
||||
The production source responds to both a missing dynamic slug such as
|
||||
`/projects/missing-project` and an unmatched path such as
|
||||
`/definitely-not-a-product-route` with HTTP 404, `text/plain`, and the exact
|
||||
nine-byte body `Not Found`. The target intentionally removes the Public shell
|
||||
for those paths and matches that response in curl and Chromium regressions;
|
||||
this is the observed production source contract, not a generic runtime error.
|
||||
`/definitely-not-a-product-route` with HTTP 404,
|
||||
`text/plain;charset=UTF-8`, and the exact nine-byte body `Not Found`. The
|
||||
target production server intentionally removes the Public shell for those
|
||||
paths and matches that response in direct HTTP and Chromium regressions. Known
|
||||
Public routes and all known Studio routes remain SPA-served; `/studio/*`
|
||||
unknown paths preserve the source's in-shell HTML with HTTP 404. This is the
|
||||
observed production source contract, not a generic runtime error.
|
||||
|
||||
## Accessibility review boundary
|
||||
|
||||
Automated Chromium `@a11y` coverage passes 29/29. The source-controlled manual
|
||||
inventory contains exactly the 27 installed route IDs and removes the obsolete
|
||||
starter records. Every human record remains `pending-manual-review` until one
|
||||
reviewer evaluates keyboard, focus, modal/error behavior, color, reduced
|
||||
motion, and screen-reader output against immutable candidate
|
||||
`3a7c5deca06679fb9b8710da2cce87bbca07ce8a`. Therefore
|
||||
`corepack pnpm review:a11y-manual` intentionally exits nonzero with 27
|
||||
incomplete records and `release IDs do not match`; neither the manual gate nor
|
||||
`FE-GATE-009` is represented as passing. The exact completion format is in
|
||||
`docs/accessibility/manual-checklist.md`, and signed evidence must be committed
|
||||
separately after it cites the candidate SHA.
|
||||
|
||||
## Governed route migration
|
||||
|
||||
@@ -148,11 +191,15 @@ The exact repository aggregate command was run in the managed workspace:
|
||||
corepack pnpm test:all
|
||||
```
|
||||
|
||||
Its runtime-schema phase passed 3 files/40 tests. The unit phase passed 117
|
||||
files/1,738 tests and reported 50 failures in three child-process-heavy files:
|
||||
39 `ci-artifact-contract`, 2 `ci-workflow-generation`, and 9
|
||||
`http-scenario-evidence`. Every failure was rooted in `spawnSync ... EPERM` in
|
||||
the restricted process sandbox; no `tests/features/tech-log` test failed.
|
||||
Its fresh staged-candidate runtime-schema phase passed 3 files/40 tests. The
|
||||
unit phase passed 122 files/1,773 tests and reported 19 failures, all in the
|
||||
pre-existing `ci-artifact-contract` provider/cgroup, RLIMIT/EMFILE,
|
||||
restrictive-umask, `/tmp`, timing, and identity environment cases. No
|
||||
`tests/features/tech-log` test failed. A pre-staging diagnostic run also found
|
||||
39 `APP_HOME` release-inventory failures because new serving files were not yet
|
||||
visible to `git ls-files`; staging the complete candidate fixed that test
|
||||
precondition, and all 39 disappeared. The same run's one guardian aggregate
|
||||
timeout passed 1/1 in isolation and 21/21 in the fresh staged aggregate.
|
||||
|
||||
The failing files were then reproduced in isolation outside that child-process
|
||||
restriction:
|
||||
@@ -161,14 +208,13 @@ restriction:
|
||||
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
|
||||
```
|
||||
|
||||
Result: 3 files/529 tests, 510 passed and the pre-existing 19 environment-only
|
||||
Result: 3 files/529 tests, 510 passed and the same 19 environment-only
|
||||
`ci-artifact-contract` cases failed. The 407 `ci-workflow-generation` and 14
|
||||
`http-scenario-evidence` tests all passed. The remaining exact 19 are the
|
||||
documented provider lifecycle/cgroup, RLIMIT/EMFILE, restrictive-umask, and
|
||||
`/tmp` timing/identity cases; they contain no TechLog code or test. The
|
||||
aggregate phases after unit were also run directly: component 18 files/124
|
||||
tests, integration 11 files/82 tests under the required child-process scope,
|
||||
reference feature 4 files/13 tests, and recipes 2 files/17 tests all passed.
|
||||
`http-scenario-evidence` tests all passed. These 19 contain no TechLog code or
|
||||
test. The aggregate phases after unit were also run directly: component 18
|
||||
files/124 tests, integration 11 files/82 tests under the required child-process
|
||||
scope, reference feature 4 files/13 tests, and recipes 2 files/17 tests all
|
||||
passed.
|
||||
|
||||
The inventories in this document are human review baselines. Automated
|
||||
coverage is intentionally limited to the two SVG byte contracts, evidence
|
||||
|
||||
Reference in New Issue
Block a user