Files
tech-log-frontend/docs/operations/techlog-ui-migration-baseline.md
T

8.6 KiB
Raw Blame History

TechLog UI migration baseline

Source provenance

  • Source path: /home/donghyeon/workspace/techlog-studio-frontend
  • Inspected: 2026-08-15 (Asia/Seoul)
  • Git revision/status: unavailable. The supplied source directory is an exported checkout with no .git metadata; both git rev-parse HEAD and git status --short report that it is not a Git repository. The source path and the byte checksums below are the reproducible provenance available for this baseline.

Approved copied assets

Source and target-relative path SHA-256
public/favicon.svg e6d2e59b7b5bbb0342e0fb496dfc262decbfe4426bbb7b047aec8d467d1dc6f7
public/media/fetch-strategy-boundary.svg b07926823ed77fc200f962a1f64a440e130cefa6bed31144b611612af9b02606

Only these two SVGs are approved for this baseline. They must remain exact byte-for-byte copies of the source assets. The evidence key fetch-strategy-boundary resolves to /media/fetch-strategy-boundary.svg with dimensions 1080 × 420, trigger label Fetch Join과 Batch Fetch 비교 다이어그램 크게 보기, and dialog label Fetch Join과 Batch Fetch의 페이징 경계 확대.

Required dependency pins

Package Exact version
pretendard 1.3.9
@fontsource/ibm-plex-mono 5.3.0
unified 11.0.5
remark-parse 11.0.0
remark-gfm 4.0.1
remark-directive 4.0.0

No Next.js, Vinext, or Cloudflare package is part of the migration baseline.

Expected route inventory

Layout Route ID Path
PUBLIC TECH_LOG_HOME /
PUBLIC TECH_LOG_EXPLORE /explore
PUBLIC TECH_LOG_EXPLORE_KIND /explore/:kind
PUBLIC TECH_LOG_CASE /cases/:slug
PUBLIC TECH_LOG_REFERENCE /references/:slug
PUBLIC TECH_LOG_QUESTION /questions/:slug
PUBLIC TECH_LOG_TOPIC /topics/:slug
PUBLIC TECH_LOG_PROJECTS /projects
PUBLIC TECH_LOG_PROJECT /projects/:slug
PUBLIC TECH_LOG_PROJECT_RECORDS /projects/:slug/records
PUBLIC TECH_LOG_PROJECT_DECISIONS /projects/:slug/decisions
PUBLIC TECH_LOG_PROJECT_ACTIVITY /projects/:slug/activity
PUBLIC TECH_LOG_RELEASES /releases
PUBLIC TECH_LOG_RELEASE /releases/:version
PUBLIC TECH_LOG_PROFILE /profile
PUBLIC TECH_LOG_SEARCH /search
STUDIO TECH_LOG_STUDIO_HOME /studio
STUDIO TECH_LOG_STUDIO_DOCUMENTS /studio/documents
STUDIO TECH_LOG_STUDIO_DOCUMENT_NEW /studio/documents/new
STUDIO TECH_LOG_STUDIO_DOCUMENT_EDIT /studio/documents/:id/edit
STUDIO TECH_LOG_STUDIO_DOCUMENT_VALIDATION /studio/documents/:id/validation
STUDIO TECH_LOG_STUDIO_DOCUMENT_PREVIEW /studio/documents/:id/preview
STUDIO TECH_LOG_STUDIO_DOCUMENT_PUBLISH /studio/documents/:id/publish
STUDIO TECH_LOG_STUDIO_PUBLICATIONS /studio/publications
STUDIO TECH_LOG_STUDIO_PUBLICATION_PREVIEW /studio/publications/:publicationEventId/preview
STUDIO TECH_LOG_STUDIO_NOT_FOUND /studio/*
PUBLIC NOT_FOUND *

Source stylesheet inventory

  • app/globals.csspresentation/styles/globals.css901205054ee96fe15062aaef7ff39c701985fdece15b58f7656776d0b744e607
  • app/studio.csspresentation/styles/studio.cssd0d958baeb55b74796988d8c0967a7c62d211e595224e07912aa1f884e466fdd
  • app/studio-editor.csspresentation/styles/studio-editor.cssae9a473192d24465021d021cd42a5a84f9bdf4c3af0664537b4e10006ca1f889
  • components/studio/workflow.module.csspresentation/styles/workflow.module.css8eaa478a88ef4d16429c7f6a32bb33631acb47deef0b40838edd0a72748f124e
  • components/studio/publication-flow.module.csspresentation/styles/publication-flow.module.css5b1fdebeb27248b5cebc700b12d15cf11fe70471a394c9dc643a98c4569e8674

All five source/target pairs passed cmp -s and have identical SHA-256 digests. Production parity testing corrected the provisional bootstrap assumption in the design: the target loads the byte-identical TechLog globals.css, including its first-byte @import "tailwindcss";, exactly once and does not load the starter theme.css. This reproduces the source cascade; the resulting browser comparison is pixel-identical.

Source-to-target browser parity

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:

  • 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.
Evidence group Cases
27 canonical routes at 360 and 1440 pixels 54
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

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 /studio/publications cases intentionally share one identical snapshot. Source screenshots were temporary comparison inputs and were not copied into the target snapshot directory.

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.

Governed route migration

The migration records 23 TechLog-owned breaking-change evidence IDs with owner tech-log-frontend, an atomic same-release route/runtime/manifest migration, and rollback to 05e3d50ba01f01c27f257d2e9040c2bc413ea053. The accepted registry snapshot digest is 428479ac5845374a82dd7d02a0c59a713106405f031cdc153789174f14c1405b; its approval reason is Install approved TechLog Public and Studio route contract. Final compatibility impact is none with no unacknowledged change.

Restricted-environment test baseline

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.

The failing files were then reproduced in isolation outside that child-process 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 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.

The inventories in this document are human review baselines. Automated coverage is intentionally limited to the two SVG byte contracts, evidence asset lookup behavior, package manager frozen-lockfile verification, committed target visual regressions, and governed registry/release gates. The external source path is never required by committed CI tests.