test: prove TechLog UI migration parity
This commit is contained in:
@@ -0,0 +1,243 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user