편집기는 탭이었다. 고친 것이 어떻게 보이는지 확인하려면 편집하던 자리를 화면에서
치워야 했고, 돌아오면 스크롤 위치도 잃었다. 두 패널을 나란히 두면 그 왕복이 통째로
없어진다.
작업 상태와 저장·게시는 오른쪽 세로 rail 이었다. 그 자리는 편집기와 미리보기가 함께
쓸 가로 폭을 가져갔고, 편집 칸이 길어질수록 rail 은 위에 붙은 채 본문만 멀어졌다.
화면 아래에 고정하면 폭을 돌려주면서 스크롤 위치와 무관하게 손이 닿는다.
탭을 없앴으므로 각 패널이 스스로 이름을 가져야 한다. `aria-labelledby` 로 제목을
가리켜 landmark 로 만든다 — 탭 목록이 하던 "여기는 편집, 저기는 미리보기" 안내를
대신한다. `aside` 와 「작업 상태」라는 이름은 그대로 둔다. 자리가 바뀐 것이지 이
묶음이 무엇인지가 바뀐 것은 아니다.
미리보기가 늘 떠 있게 되면서 Picker 테스트의 단언도 함께 고쳤다. 「Picker 가
좁아졌는가」를 화면 전체에 묻고 있었는데, 이제는 미리보기 쪽의 같은 Asset 까지
세게 된다. 그 김에 `.studio-asset-panel` 의 `aria-labelledby` 가 role 없는 div 에서
아무 이름도 만들지 못하던 것도 `role="group"` 으로 실효화했다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0189NzCryfeqDzS81EWidnBx
`/studio/assets` was the one route in the TechLog route contract missing
from `TECH_LOG_CANONICAL_ROUTES` and `TECH_LOG_STUDIO_STATE_PATHS`, so it
had no golden, no responsive-overflow check, and no Axe scan. That gap was
not hypothetical: the responsive overflow just fixed in the Asset search row
shipped in two places and was only caught in the Picker, which has a golden;
the Library's identical copy would have gone unseen.
Verifying the render before capturing anything turned up a second defect.
`studioSpaPathPatterns` in the production serving contract never listed
`/studio/assets`, so a hard navigation or reload of that URL was answered
with the in-shell Studio 404 -- the screen was reachable only by client-side
navigation from another Studio page. A golden taken then would have frozen a
404. With the pattern added, the route serves 200 text/html like its
siblings, and the page renders correctly at both breakpoints:
scrollWidth == clientWidth == viewport at 360 and 1440, `main` and the `h1`
visible, the search label/input/button all inside the 360px viewport, and no
critical or serious Axe violations in chromium.
Three new goldens, no existing golden regenerated:
tech-log-studio-assets-{360,1440} from the canonical route list and
tech-log-studio-asset-library-1440 from the Studio state list, matching how
every other Studio route appears in both. `pnpm test:visual` is 133 passed,
up from 130.
The demo profile seeds no assets, so the golden captures the empty state --
which still covers the header, heading, search row and status region, the
surface the overflow regression lived on.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Stale because of the search UI this task added to the CASE editor's asset
panel, so they belong to this work. Each diff was inspected before
regenerating; every difference is attributable to the added control.
Four render `.../edit` for a CASE (2999 -> 3066px tall, +67px):
document-edit-1440, case-editor-1440, conflict-editor-1440,
dirty-leave-dialog-1440 -- the comparator flags one 401x95 region at
(131,2795), the "Asset 검색" label, input and 검색 button. Above it the
maximum per-channel delta is 1/255, i.e. visually unchanged.
conflict-editor was not in my first estimate: document ...115 is a CASE
too, so it renders the same panel.
document-edit-360 (3627 -> 3694px, +67px) shows more because the layout
is single-column: byte-identical above y=3032, then the added control,
then the status rail below translated down (67px, 68px past the 저장
button -- sub-pixel rounding, same content).
Its width returns to 360 here; the previous run captured it at 382,
which was the overflow fixed in d2574a3, not a golden to bake in.
`corepack pnpm test:visual`: 130 passed. `git diff --stat` for this
commit lists exactly these five PNGs.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The prior commit (ef17bca) fixed the 7 of 13 test:visual failures that
were a pure dimensional consequence of 79e9aa8's evidence-figure width
rule. The other 6 were left failing pending investigation of their own
diffs rather than being folded into that theory.
Per-file inspection of each diff/expected/actual triple confirms all 6
are stale content from 0355b64 ("feat: add TechLog project decision
authoring"), also an ancestor of main's merge-base -- a "Decision"
document type was added without refreshing the affected goldens:
tech-log-studio-documents-360 360x2883 (unchanged) -- subtitle
copy gained ", Decision" before "을 찾고", rewrapping the sentence.
tech-log-studio-documents-1440 1440x1493 (unchanged) -- same
subtitle copy change, no wrap at this width.
tech-log-studio-document-list-1440 1440x1493 (unchanged) -- same
page/route as documents-1440 (identical diff), same copy change.
tech-log-studio-document-new-360 360x1000 -> 360x1130 -- a new
"Decision" radio option/row added to the document-type picker;
narrow viewport can't absorb the extra row without growing.
tech-log-studio-document-new-1440 1440x1000 (unchanged) -- same
new "Decision" radio row; existing bottom whitespace absorbs it at
this width.
tech-log-studio-new-document-1440 1440x1000 (unchanged) -- same
page/route as document-new-1440 (identical diff), same new row.
None of the 6 diffs show anything resembling a rendering defect (no
overlap, no clipped/broken layout) -- each is legitimate new copy or a
legitimate new control from the shipped feature.
test:visual: 124 passed/6 failed -> 130 passed/0 failed. lint and
check:types unaffected.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
79e9aa8 ("fix: align TechLog article content widths") narrowed
.evidence-figure/.code-block/.data-table-wrap from
min(61rem, calc(100% + 15rem)) to min(var(--body-copy), 100%), shrinking
every page whose article body contains an evidence-figure diagram. The
goldens were never refreshed after that commit landed, so test:visual
carried 13 failures inherited from main.
Per-failure diff inspection (not just the aggregate count) showed the 13
split into two unrelated causes:
- 7 are a pure dimensional consequence of the width rule -- full-page
diffs starting at the evidence-figure diagram, page height down by a
fixed ~93px offset in matched pairs. Regenerated here:
tech-log-case-1440 6506 -> 6412
tech-log-public-fixture-cases-collection-... 6506 -> 6412
tech-log-studio-document-preview-1440 1904 -> 1811
tech-log-studio-current-preview-1440 1904 -> 1811
tech-log-studio-publication-preview-1440 1687 -> 1594
tech-log-studio-publication-snapshot-1440 1687 -> 1594
tech-log-studio-immediate-preview-1440 1733 -> 1640
- 6 are unrelated content staleness from a later commit
(0355b64, "feat: add TechLog project decision authoring") that added a
"Decision" document type/option without refreshing its goldens. These
are left failing intentionally -- they are not a dimensional
consequence of 79e9aa8 and regenerating them here would silently bake
an unreviewed content change into the baseline:
tech-log-studio-documents-360/1440,
tech-log-studio-document-new-360/1440,
tech-log-studio-document-list-1440, tech-log-studio-new-document-1440
test:visual: 13 failed/117 passed -> 124 passed/6 failed (the 6 above).
lint and check:types unaffected.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Attribution was measured, not inferred: the visual suite was run at the
merge-base `9e5fbd1` in a detached checkout (13 failed / 117 passed) and the
`-actual.png` each run produced was compared by SHA-256 against HEAD's. For
13 of the 18 failures the rendered bytes at HEAD and at the merge-base are
identical, so those failures belong to `main`, not here.
Regenerated (all Case-editor surfaces, all grown by the Task 10 Asset panel;
the +293px band was inspected in the new golden and is the "EVIDENCE / 본문에
Asset 삽입" panel):
tech-log-studio-document-edit-360 360x3313 -> 360x3627
tech-log-studio-document-edit-1440 1440x2706 -> 1440x2999
tech-log-studio-case-editor-1440 1440x2706 -> 1440x2999
tech-log-studio-conflict-editor-1440 1440x2706 -> 1440x2999
tech-log-studio-dirty-leave-dialog-1440 1440x2706 -> 1440x2999
`--update-snapshots` was restricted to those five tests with `--grep`; a
blanket update would have absorbed the 13 inherited failures and destroyed
the distinction. `test:visual` now reports 13 failed / 117 passed, exactly
the merge-base's set.
Two earlier records are corrected in the spec: the five "pixel-only, not
investigated" failures are all inherited, and `TECH_LOG_STUDIO_DOCUMENT_NEW`
360px was wrongly attributed to the Asset Picker -- it fails at the
merge-base with the identical 28,413 differing pixels.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>