Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 2 additions & 1 deletion docs/branch-review-ledger.md
Original file line number Diff line number Diff line change
Expand Up @@ -712,7 +712,7 @@ Records before 2026-07-28 were written by hand and had drifted: 146 lines carrie
| 2026-08-07 | claude/handover-review-nlhuln | de8b74e2fb94d1ec9b1982c15a2dea43421c3eee | outstanding-issues ledger capture after the mode-nav rollout (PR #1685) | Confirmed #256's two remaining suspected section sets are dead (/forms/<slug> and /differentials/presentations/<slug> draw no section nav; form-decision-context-mobile is a testId not an id; ruled out sectionId indirection in both files). Added #261 (delete-or-keep the consumer-less action kind) and #262 (addon-slot single-owner rule held by two lists agreeing by coincidence). #207/#226/#231 reviewed and deliberately left untouched as existing P1 rows. | check:outstanding-issues passed (260 rows, 119 open, unique ids, no ids deleted from base 1ff9ed206456); prettier --check clean on the changed file; rows written via scripts/outstanding-issues.mjs, never hand-edited; no code gates run - docs-only diff |
| 2026-08-07 | claude/handover-review-nlhuln | de8b74e2fb94d1ec9b1982c15a2dea43421c3eee | outstanding-issues ledger capture after the mode-nav rollout (PR #1685) (supersedes 2026-08-07) | Confirmed #256's two remaining suspected section sets are dead (/forms/<slug> and /differentials/presentations/<slug> draw no section nav; form-decision-context-mobile is a testId not an id; ruled out sectionId indirection in both files). Added #271 (delete-or-keep the consumer-less action kind) and #272 (addon-slot single-owner rule held by two lists agreeing by coincidence) — renumbered from this PR's original #261/#262 because main claimed #261-#270 via PR #1678 design-system tracks in the interim. #207/#226/#231 reviewed and deliberately left untouched as existing P1 rows. | check:outstanding-issues passed (270 rows, 129 open, 141 archived, unique ids, next-id=273 above the highest, no ids deleted from base d32dd549a3dd); prettier --check clean on the changed file; rows written via scripts/outstanding-issues.mjs, never hand-edited; no code gates run - docs-only diff |
| 2026-08-07 | claude/search-bar-mobile-layout-buu0io | 9d64388c0ce530d0c20bb7efe8ffb32cd928319c | phone results-filter idiom: 7 modes off MobileResultFilterControl onto ResultFilterTrigger + ResultFilterSheet; band, docs, tests | changes-shipped | typecheck; lint; test 5538 passed (1 pre-existing pr-handoff-stop failure, baselined on unmodified tree); build; check:rag:fixtures; check:bundle-budget +6.3% within tolerance; targeted Playwright: ui-accessibility 16, ui-specifiers+ui-formulation 12, ui-tools 5, ui-smoke 2, ui-stress 3 |
| 2026-08-07 | claude/ds-a4-component-defects (PR #1712) | c6b2fbfd5ac45fe7f13fd786c40afa200a702051 | design-system Track A4 - COMPONENTS section 0.4 open-defect rows (#263) | Authored and self-verified, not an independent review. Eleven defects closed across ten registered components (Button ref+testId, Progress shimmer token, StageList step clamp and scoped live region, StatusMark app-type decoupling, PageHeader title floor, Disclosure print, AccessibleTable dense-header title and Button expander, Tabs invalid-value tab order, Pagination clamp/wrap/focus/announce, Links download and gap, Checkbox/RadioGroup raw dimensions). Three listed sub-defects re-measured as already fixed and were not work. Button left the reference-only adoption snapshot because AccessibleTable genuinely adopts it. Ratchets fell and none rose: edge conflicts 28 to 27, legacy shadow aliases 229 to 228; debt baseline deliberately not lowered. Merged origin/main (10 commits) and hand-resolved the docs/outstanding-issues.md conflict: id #273 had been taken on main, so the LinkAction finding was renumbered to #276; proved no id lost from either side and no duplicates. Auto-merge deliberately NOT armed - four surfaces change visibly and issue #118 means zero visual baselines, so CI compares no pixels; owner visual review requested before merge. | check:design-system-contract exit 0 (all three sub-checks); tsc --noEmit exit 0; lint exit 0 at --max-warnings 0; prettier --check . clean; verify:ui 407 passed (14.1m) exit 0 zero not-ok; 260 unit tests across 8 component/token suites plus 191 across 7 further suites; all re-run green after the main merge (135 passed). verify:pr-local aggregate NOT run - vitest fork workers would not start under box load; components run individually. |
| 2026-08-07 | cursor/remove-specifiers-back-arrow-f1c4 | 095791235d58a6309b21b139911a1aad9fe9086b | specifiers-search-results-breadcrumb | removed lone ← Specifiers crumb from search results; deep pages unchanged | format,typecheck,lint,ensure+phone-spot-check |
| 2026-08-07 | cursor/phone-mode-dense-production-05c0 (PR #1648) | 1091b17933beba655dac3e37f0e5c1bc4cdfb679 | Run PR sweep: CI fix + threads + drift | No action needed: PR required green, no unresolved review threads, not behind main. Only advisory Lighthouse job failing (never chased). | get_check_runs (PR required: success), get_review_comments (0 unresolved threads) |
| 2026-08-07 | cursor/tools-search-mockups-72e1 (PR #1653) | 1df72ba6119226aee92b203db8188f58851a6d3c | Run PR sweep: CI fix + threads + drift | No action needed: PR required green, no unresolved review threads, not behind main. Only advisory Lighthouse job failing (never chased). | get_check_runs (PR required: success), get_review_comments (0 unresolved threads) |
| 2026-08-07 | cursor/ship-first-redesign-mockups-2398 (PR #1654) | d6610b20a6b51bcfda266e1645fe695014c4b627 | Run PR sweep: CI fix + threads + drift | No action needed: PR required green, no unresolved review threads, not behind main. Only advisory Lighthouse job failing (never chased). | get_check_runs (PR required: success), get_review_comments (0 unresolved threads) |
Expand All @@ -727,5 +727,6 @@ Records before 2026-07-28 were written by hand and had drifted: 146 lines carrie
| 2026-08-07 | cursor/fix-lighthouse-chrome-pin (PR #1703) | 621180854248fcc10982f3fd58762229fee999d0 | Run PR sweep: CI fix + threads + drift | GitHub reported dirty/conflicting mergeable_state but git merge-tree and a real test merge in a worktree were clean (stale mergeability). Merged origin/main directly and pushed. No unresolved review threads. | git merge-tree (clean), real worktree merge (clean, no conflicts) |
| 2026-08-07 | cursor/document-citation-landing-7bc3 (PR #1705) | 8e62183dea5e07ac5ee4671d8d358937263c5de4 | Run PR sweep: CI fix + threads + drift | Merged origin/main (clean, just behind). Fixed the real CI failure (ui-smoke 'document viewer content disclosures...'): jumpToSection set inspectRevealKey when navigating to source-text but never cleared it navigating away, so IndexedTextPanel's React-controlled open prop stayed true and, sharing the native exclusive accordion group, silently closed whatever section was just navigated to. Same root cause independently flagged by Sentry and CodeRabbit review threads on this PR -- fixed once, replied to both, resolved both plus a 3rd (already-fixed) copilot thread. Declined to fix a 4th P3 CodeRabbit nitpick (edit an existing ledger row) since the ledger is append-only; replied with reasoning and resolved. | eslint on DocumentViewer.tsx (clean); local Playwright build blocked by environment-wide missing tailwind-merge dependency (Node 24.13.0 vs jsdom's required >=24.15.0, npm ci blocked by engine-strict) -- relying on CI |
| 2026-08-07 | cursor/viewer-phase2c-rail-filmstrip-1db8 (PR #1707) | af52b592bd22794f5cf96cbca0fb27f2d6bbb3e3 | Run PR sweep: CI fix + threads + drift | Not behind main, no merge needed (mergeable_state 'blocked' was just the failing required check). Fixed the real Unit coverage CI failure: tests/document-image-filmstrip.dom.test.tsx still asserted the stale aria-current='true' after the component was already fixed to emit 'page' for an earlier a11y review finding -- exactly matched an unresolved CodeRabbit finding, applied its suggested fix. Also fixed an unresolved LOW-severity Sentry finding (image metadata line could start with a leading ' · ' separator when image_type is falsy) by collecting parts into an array and filter+join instead of individually prefixing. All 4 review threads now resolved (2 new fixes + 2 already-fixed-on-branch copilot threads). | eslint on both fixed files (clean); local vitest blocked by environment-wide missing tailwind-merge dependency -- relying on CI |
| 2026-08-07 | claude/ds-a4-component-defects (PR #1712) | c6b2fbfd5ac45fe7f13fd786c40afa200a702051 | design-system Track A4 - COMPONENTS section 0.4 open-defect rows (#263) | Authored and self-verified, not an independent review. Eleven defects closed across ten registered components (Button ref+testId, Progress shimmer token, StageList step clamp and scoped live region, StatusMark app-type decoupling, PageHeader title floor, Disclosure print, AccessibleTable dense-header title and Button expander, Tabs invalid-value tab order, Pagination clamp/wrap/focus/announce, Links download and gap, Checkbox/RadioGroup raw dimensions). Three listed sub-defects re-measured as already fixed and were not work. Button left the reference-only adoption snapshot because AccessibleTable genuinely adopts it. Ratchets fell and none rose: edge conflicts 28 to 27, legacy shadow aliases 229 to 228; debt baseline deliberately not lowered. Merged origin/main (10 commits) and hand-resolved the docs/outstanding-issues.md conflict: id #273 had been taken on main, so the LinkAction finding was renumbered to #276; proved no id lost from either side and no duplicates. Auto-merge deliberately NOT armed - four surfaces change visibly and issue #118 means zero visual baselines, so CI compares no pixels; owner visual review requested before merge. | check:design-system-contract exit 0 (all three sub-checks); tsc --noEmit exit 0; lint exit 0 at --max-warnings 0; prettier --check . clean; verify:ui 407 passed (14.1m) exit 0 zero not-ok; 260 unit tests across 8 component/token suites plus 191 across 7 further suites; all re-run green after the main merge (135 passed). verify:pr-local aggregate NOT run - vitest fork workers would not start under box load; components run individually. |
| 2026-08-08 | claude/ds-a4-component-defects | a029a543f744eb80e608ec482aacdbdc5f5599c2 | unblock PR #1712 | Merged origin/main (ef28960e) to clear dirty mergeable_state: real conflict in docs/branch-review-ledger.md auto-merged via merge=ledger driver. Prior tip 9ba483d3 was 1 behind main. Static PR and PR required failures were dirty-state blockers (GitHub could not build refs/pull/1712/merge). Proved post-merge: merge-tree clean, check:branch-review-ledger, check:design-system-contract. | merge-tree clean; ledger:dedupe; check:branch-review-ledger; check:design-system-contract |
| 2026-08-08 | claude/ds-a4-component-defects | d3a697aa8784c9cbdecfba24402cf2269bfe15d4 | heavy review-and-fix PR #1712 | Lint blocker fixed (react-hooks/refs in Pagination); CodeRabbit threads dispositioned; synced main (4a9d81d3 Lighthouse pin); merge-tree clean; verify:cheap 5567 passed; verify:pr-local green; check:design-system-contract passed | lint; typecheck; prettier --check .; verify:cheap (5567 passed); verify:pr-local; check:design-system-contract; check:branch-review-ledger; vitest ui-v2-components.dom (75 passed) |
88 changes: 44 additions & 44 deletions lighthouse-budget.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,75 +20,75 @@
},
"baseline": {
"desktop-documents-search": {
"lcpMs": 887,
"cls": 0.119,
"tbtMs": 1,
"fcpMs": 404.55240000000003,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36"
"lcpMs": 790.8669,
"cls": 0.1192626548872241,
"tbtMs": 0,
"fcpMs": 390.7482,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/150.0.0.0 Safari/537.36"
},
"desktop-dsm": {
"lcpMs": 936,
"cls": 0.013,
"tbtMs": 0,
"fcpMs": 399.6637,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36"
"lcpMs": 836.0241999999998,
"cls": 0.01342963896133897,
"tbtMs": 14.999999999999886,
"fcpMs": 381.7212,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/150.0.0.0 Safari/537.36"
},
"desktop-forms": {
"lcpMs": 870,
"cls": 0.06,
"lcpMs": 870.6212000000005,
"cls": 0.05606642664873546,
"tbtMs": 0,
"fcpMs": 393.5287,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36"
"fcpMs": 383.5404,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/150.0.0.0 Safari/537.36"
},
"desktop-root": {
"lcpMs": 822,
"cls": 0.007,
"tbtMs": 3,
"fcpMs": 358.3345,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36"
"lcpMs": 812.1882499999992,
"cls": 0.006778250591016549,
"tbtMs": 16,
"fcpMs": 340.8753,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/150.0.0.0 Safari/537.36"
},
"desktop-therapy-compass": {
"lcpMs": 822,
"lcpMs": 895.1419000000001,
"cls": 0,
"tbtMs": 0,
"fcpMs": 397.3599,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36"
"fcpMs": 389.1834,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/150.0.0.0 Safari/537.36"
},
"mobile-documents-search": {
"lcpMs": 2311,
"lcpMs": 2314.371,
"cls": 0,
"tbtMs": 399,
"fcpMs": 2329.335,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36"
"tbtMs": 383.43999999999915,
"fcpMs": 2314.371,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/150.0.0.0 Safari/537.36"
},
"mobile-dsm": {
"lcpMs": 2319,
"lcpMs": 2339.109,
"cls": 0,
"tbtMs": 322,
"fcpMs": 2325.841,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36"
"tbtMs": 352.6870000000008,
"fcpMs": 2339.109,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/150.0.0.0 Safari/537.36"
},
"mobile-forms": {
"lcpMs": 2304,
"cls": 0.08,
"tbtMs": 324,
"fcpMs": 2291.215,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36"
"lcpMs": 2280.29,
"cls": 0.08045469317717091,
"tbtMs": 326.0409999999997,
"fcpMs": 2280.29,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/150.0.0.0 Safari/537.36"
},
"mobile-root": {
"lcpMs": 3274,
"lcpMs": 3929.966,
"cls": 0,
"tbtMs": 763,
"fcpMs": 3274,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36"
"tbtMs": 785.6220000000021,
"fcpMs": 3929.966,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/150.0.0.0 Safari/537.36"
},
"mobile-therapy-compass": {
"lcpMs": 2338,
"lcpMs": 2336.784,
"cls": 0,
"tbtMs": 302,
"fcpMs": 2327.357,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36"
"tbtMs": 333.18399999999883,
"fcpMs": 2336.784,
"chromeVersion": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/150.0.0.0 Safari/537.36"
}
},
"updatedAt": "2026-08-07T13:42:17.043Z"
"updatedAt": "2026-08-08T05:38:39.988Z"
}
22 changes: 16 additions & 6 deletions scripts/check-lighthouse-budget.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@
* Refresh the baseline from an intentional, known-good run:
* npm run check:lighthouse-budget -- --update
*
* `--update` deliberately ignores baseline-relative mismatches (a different Chrome
* user-agent, or a newly added route with no prior row). Those are exactly why the
* baseline is being refreshed; treating them as incomplete evidence made the
* documented remediation unreachable after a runner-image Chrome bump.
*
* Flags: --update, --json, --dir <path>, --require-reports (an empty directory is a
* failure, not a no-op — used by run-lighthouse-budget.mjs, which owns the reports).
*/
Expand Down Expand Up @@ -67,8 +72,12 @@ export function expectedBudgetRuns(budget) {
*
* Fails closed and is never downgraded by `enforce` — an ungraded route silently
* counted as a pass is exactly how unmeasured latency claims got acted on before.
*
* Pass `{ ignoreBaseline: true }` for `--update`: baseline-relative problems (missing
* prior row, Chrome user-agent drift) are the reason to refresh, not a reason to
* refuse the refresh. Measurement gaps still block.
*/
export function incompleteBudgetEvidence(rows, budget) {
export function incompleteBudgetEvidence(rows, budget, { ignoreBaseline = false } = {}) {
const tolerance = { ...DEFAULT_TOLERANCE, ...(budget?.tolerance ?? {}) };
const baseline = budget?.baseline ?? null;
const hasBaseline = Boolean(baseline) && Object.keys(baseline).length > 0;
Expand Down Expand Up @@ -100,7 +109,7 @@ export function incompleteBudgetEvidence(rows, budget) {
for (const metric of Object.keys(tolerance)) {
if (typeof row[metric] !== "number") problems.add(`${run}: report has no ${metric} number`);
}
if (!hasBaseline) continue;
if (ignoreBaseline || !hasBaseline) continue;
const before = baseline[run];
// A route or strategy added after the baseline was recorded has nothing to
// compare against, and gradeRun returns no breaches for a missing row — so an
Expand Down Expand Up @@ -320,10 +329,11 @@ function main() {
const result = compareToLighthouseBudget(rows, budget);

if (update) {
if (result.incomplete.length > 0) {
console.error(
`::error::refusing to update the baseline from incomplete evidence: ${result.incomplete.join("; ")}`,
);
// Only measurement gaps block a refresh. Browser drift / missing prior rows are
// why `--update` exists — see incompleteBudgetEvidence({ ignoreBaseline: true }).
const measurementGaps = incompleteBudgetEvidence(rows, budget, { ignoreBaseline: true });
if (measurementGaps.length > 0) {
console.error(`::error::refusing to update the baseline from incomplete evidence: ${measurementGaps.join("; ")}`);
process.exit(1);
}
const next = {
Expand Down
3 changes: 0 additions & 3 deletions src/components/specifiers/specifiers-home-page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import {
import {
CategoryTag,
ReviewStatusBadge,
SpecifierBreadcrumbs,
SpecifierDiagnosisFilter,
SpecifierFamilyFilterChips,
SpecifierMatchCard,
Expand Down Expand Up @@ -215,8 +214,6 @@ function SpecifierResults({ query }: { query: string }) {

return (
<SpecifierPageShell>
<SpecifierBreadcrumbs />

<SearchResultsHeaderBand
modeId="specifiers"
query={query}
Expand Down
Loading
Loading