Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
98cf39b
fix(document-viewer): remove the CSP-blocked native PDF reader
claude Aug 8, 2026
e50cf8b
feat(document-viewer): one toolbar instead of three stacked control bars
claude Aug 8, 2026
ec72656
fix(document-viewer): revive pinch-to-zoom and stop iOS blanking the …
claude Aug 8, 2026
fd98a13
feat(document-viewer): put the source first on phones
claude Aug 8, 2026
ef50546
perf(document-viewer): stop refetching the detail window on every pag…
claude Aug 8, 2026
389e47b
perf(document-viewer): fetch PDF bytes on demand and release the raster
claude Aug 8, 2026
a2a129a
perf(document-viewer): stop lazy-loading the source image and dedupli…
claude Aug 8, 2026
98b799a
docs: record the viewer follow-ups and correct the DocumentFrame owne…
claude Aug 8, 2026
0336538
docs(ledger): record document-viewer phone/PWA rework for PR #1741
claude Aug 8, 2026
66c6f6d
merge(main): sync PR #1741 with origin/main
cursoragent Aug 8, 2026
f91af2d
fix(document-viewer): close review P1/P2 races on PR #1741
cursoragent Aug 8, 2026
b503ff1
fix(document-frame): clear design-system tap and shadow debt
cursoragent Aug 8, 2026
fb25d14
fix(signed-image-url): narrow cached payload url for typecheck
cursoragent Aug 8, 2026
94ec9f4
test: expect effect-local pdf page cleanup in boundary contract
cursoragent Aug 8, 2026
381a0d4
Merge branch 'main' into claude/document-viewer-optimization-tu8tnj
BigSimmo Aug 8, 2026
23dfb95
fix(document-viewer): clear Production UI phone blockers and clamp ro…
cursoragent Aug 8, 2026
454e4da
fix(document-viewer): key signed-URL dedupe on lowercase authorization
cursoragent Aug 8, 2026
9e23384
fix(document-frame): expose phone overflow toggle as a button role
cursoragent Aug 8, 2026
f20e908
merge(main): sync PR #1741 with origin/main (#1737)
cursoragent Aug 8, 2026
b0bb88d
merge(main): sync PR #1741 with origin/main
cursoragent Aug 8, 2026
a1ec8b1
merge(main): sync PR #1741 with origin/main (phone Choose mode #1723)
cursoragent Aug 8, 2026
2d6fee3
fix(document-frame): keep mobile toolbar in normal flow (position sta…
cursoragent Aug 8, 2026
4edd208
Merge branch 'main' into claude/document-viewer-optimization-tu8tnj
BigSimmo Aug 8, 2026
32a6e6b
fix(document-viewer): unblock PR #1741 CI and sync main
cursoragent Aug 8, 2026
21fa284
merge: reconcile remote unblock tip with visual baseline adopt
cursoragent Aug 8, 2026
3c582e0
test(ui-smoke): restore static toolbar position assertion after produ…
cursoragent Aug 8, 2026
b5ca10d
test(ui-smoke): assert static toolbar after DocumentFrame product fix
cursoragent Aug 8, 2026
8d01991
chore(lighthouse): refresh budget baseline for Chrome/151 CI drift
cursoragent Aug 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/branch-review-ledger.md
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,8 @@ Records before 2026-07-28 were written by hand and had drifted: 146 lines carrie
| 2026-08-08 | claude/ds-tap-and-linkaction | 6916c80526603514d91bd29d224959dd420af59c | M5 LinkAction tone refusal plus re-measured corrections to outstanding-issues #270, #118 and #269 — final reviewed head, adds the tone?: never fix, its type-contract test and both regenerated manifests | PR #1720, superseding the 824c1b74a record. Codex found the Omit form still accepted tone through a spread; verified with a focused tsc probe before changing anything (Omit accepted the spread with no diagnostic, tone?: never rejected it with TS2345), because excess-property checking only fires on object literals. Fixed with tone?: never plus a type-level contract test that stops compiling if the prop widens back. CodeRabbit's future-dated finding fixed in ff307cc5b. CodeRabbit's ledger-scope finding does not apply: that row records a different ref and head and was accurate as written, but a superseding row for the final #1719 head was appended anyway since its scope grew after the review pass | tsc -p tsconfig.typecheck.json --noEmit exit 0 zero diagnostics; lint exit 0; check:design-system-contract exit 0 (676 production files, legacy shadow aliases 228 confirming the #262 re-measure, adoption 53 components 55 roots, design-sync 53 components and 7 guidelines); check-icon-scale.mjs --strict exit 0; vitest threads pool 3 files 164 tests passed; check:outstanding-issues pass; check:branch-review-ledger pass; prettier --check . pass whole-tree; main merged in with merge-tree proven clean first and an id-set proof over both merge parents showing 274 ids each side, none lost, none invented |
| 2026-08-08 | claude/ds-close-276 (PR #1724) | 75c89993f3ea23b70a250f605b21437b4ea9aac8 | PR #1724 review-and-fix | fixed Codex P2 wrong #118 Lighthouse cause (150 overwrite vs 151 pin); dispositioned CodeRabbit #276 archive claim as false (issues:done move); merge-tree clean; required CI was green on prior tip 8ae8c48f; no Bugbot findings | check:outstanding-issues pass; prettier --check docs/outstanding-issues.md pass; no provider-backed checks |
| 2026-08-08 | claude/ds-close-276 (PR #1724) | 4baa9a1b42fa05731a6f983b3e0d0ebbd37f5271 | PR #1724 review-and-fix | synced origin/main (#1725 conflict on outstanding-issues resolved by preferring main queue then re-applying #276 done + corrected #118 diagnosis); Codex P2 fixed; CodeRabbit #276 archive claim dispositioned false; merge-tree clean after sync | check:outstanding-issues pass; prettier --check docs/outstanding-issues.md pass; merge-tree clean vs origin/main; no provider-backed checks |
| 2026-08-08 | PR #1740 / claude/inpage-nav-info-pages-v8rhnd | b67f33f65e00529eb0dd1682d6925e708243ee93 | Extract InPageNavHeader (default in-page nav template) + convert differentials detail; PR 1 of 3 | HANDOFF. Template extracted from the duplicated DocumentViewer/differential-detail markup into src/components/in-page-nav/ (InPageNavHeader, PageSection/toDocumentSections, usePageSectionWeights); differential-detail-page converted (-207 lines), behaviour-neutral. section-index.ts untouched so document tests unaffected. DocumentViewer deliberately NOT converged (owns h1, edge-glass-header, visual baselines) - follow-up. Anchor-offset hook generalisation deferred to PR 2 where it is consumed. 3 source-scanning contracts + addon-slot guard updated to follow the markup and additionally assert adoption; addon-slot scan widened to InPageNavHeader or it would go silent for every future adopter. Single failing test (pr-handoff-stop) is a root-uid artifact: chmod 0555 does not block root, reproduced with work stashed on clean tree. | verify:cheap 5618 passed/1 failed (root artifact); verify:pr-local same, short-circuits at test so build not reached; build run separately - Compiled successfully in 53s + client bundle secret check passed; verify:phone-chrome EXIT=0 (stage1 119 passed, stage2 7 passed 23.5s, full UI policy auto not selected); lint/typecheck/prettier --check . clean. No provider-backed gates. Deps installed with engine check relaxed (user-approved; Node 24.13.0 vs jsdom floor 24.15) - lockfile untouched. |
| 2026-08-08 | claude/document-viewer-optimization-tu8tnj | 98b799a372b1e341c86e8807d5cf37e987413e49 | document viewer phone/PWA rework: CSP-blocked native reader removed, one toolbar, fit-mode pinch, canvas pixel budget, source-first phone order, in-window detail-refetch guard, pdf.js on-demand fetch + teardown, image/signed-URL wins | ship: PR #1741 | lint, typecheck, test 5625 pass (1 pre-existing root-container failure), build, check:rag:fixtures, check:bundle-budget 1499.8 KiB vs base 1500.0 KiB, check:runtime, check:installed-lock-parity, format:changed; verify:ui not run (container Chromium 141 cannot raster pdfjs 6, see #278) |
| 2026-08-08 | claude/document-viewer-optimization-tu8tnj | 2359e158cb7bca5954e9c5ee84ca0766964ad901 | PR #1741 document-viewer phone/PWA review-and-fix | supersede: fixed Production UI phone Zoom/section-trigger; handlePdfLoadSuccess clamp; prior P1/P2 fixes retained; merge-tree clean | prior verify:cheap+pr-local green; ui-smoke selectors fixed for overflow Zoom + revealPhoneHeaderControl; no provider gates |
| 2026-08-08 | claude/document-image-mobile-view-30xzw8 | 2394d903a6ca1ba7a84e380c9ed5cada038fa5c0 | document-viewer phone image layout + lightbox geometry (PR #1737) | implemented: capped rail/body grid tracks, removed aspect-ratio min-height transfer, rebuilt phone image viewer (legible open scale, rotation re-fit, clamped pan, double-tap, footer controls) | lint, typecheck, test (5647 pass / 1 pre-existing fail), build, eval:rag:offline, check:bundle-budget, all verify:pr-local static steps by hand; browser gates blocked by #255 |
| 2026-08-08 | claude/document-image-mobile-view-30xzw8 | d257df7e11913db1d367535171fac726f47e7f1c | PR #1737 document-viewer phone image review-and-fix | fixed P1 expand fixture/threshold + P2 double-tap stage coords/pointer-up + resize re-clamp; Production UI timeout root cause cleared; merge-tree clean | verify:pr-local PASS (525 files/5653 tests); lint; typecheck; focused vitest 64/64; Production UI delegated to CI |
| 2026-08-08 | PR #1740 / claude/inpage-nav-info-pages-v8rhnd | b67f33f65e00529eb0dd1682d6925e708243ee93 | Extract InPageNavHeader (default in-page nav template) + convert differentials detail; PR 1 of 3 | HANDOFF. Template extracted from the duplicated DocumentViewer/differential-detail markup into src/components/in-page-nav/ (InPageNavHeader, PageSection/toDocumentSections, usePageSectionWeights); differential-detail-page converted (-207 lines), behaviour-neutral. section-index.ts untouched so document tests unaffected. DocumentViewer deliberately NOT converged (owns h1, edge-glass-header, visual baselines) - follow-up. Anchor-offset hook generalisation deferred to PR 2 where it is consumed. 3 source-scanning contracts + addon-slot guard updated to follow the markup and additionally assert adoption; addon-slot scan widened to InPageNavHeader or it would go silent for every future adopter. Single failing test (pr-handoff-stop) is a root-uid artifact: chmod 0555 does not block root, reproduced with work stashed on clean tree. | verify:cheap 5618 passed/1 failed (root artifact); verify:pr-local same, short-circuits at test so build not reached; build run separately - Compiled successfully in 53s + client bundle secret check passed; verify:phone-chrome EXIT=0 (stage1 119 passed, stage2 7 passed 23.5s, full UI policy auto not selected); lint/typecheck/prettier --check . clean. No provider-backed gates. Deps installed with engine check relaxed (user-approved; Node 24.13.0 vs jsdom floor 24.15) - lockfile untouched. |
8 changes: 5 additions & 3 deletions docs/design-system/ADOPTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,11 @@ src/components/DocumentViewer.tsx
```

`DocumentFrame` is **built** (`src/components/ui/document-frame.tsx`) and used by
`DocumentViewer` as a shell-only surround (no `controls` toolbar — PDF chrome stays on
`PdfCanvasViewer`). It is not yet design-sync registered among the 53 published visual
exports. Do not invent a second frame or add inversion/filters; route document renders through
`DocumentViewer` as the single owner of viewing chrome: the `controls` toolbar carries page
navigation, zoom, fit, rotation, the viewing aid and fullscreen, and `PdfCanvasViewer` renders
source pixels only. There is exactly one toolbar and one page readout in the viewer, and the
contract test `tests/document-frame-contract.test.ts` holds that. It is not yet design-sync
registered among the 53 published visual exports. Do not invent a second frame or add inversion/filters; route document renders through
the existing viewer + frame. Keep every `role="alert"` semantic; route announcements through
the announcer policy rather than deleting roles, because many `role="status"` sites are
implicit polite live regions with no `aria-live` attribute and removing the role without an
Expand Down
Loading
Loading