244 lines
13 KiB
Markdown
244 lines
13 KiB
Markdown
# 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.
|