docs(issues): close six verified-delivered Tier 1 design rows and refute the min-h-tap finding - #1838
Conversation
… min-h-tap finding Re-verified the Tier 1 design backlog against origin/main rather than implementing it. Six rows were already delivered and one was wrong. Archived as verified-delivered: - #171 documents filtering — one Filter panel; scope chips and utilityControls are gone, source-type kept as its own axis per #181's correction - #172 Sources relocated and renamed to "Browse all sources" - #174 facets now OR within a group and AND across groups - #181 the correction to #171 was applied, so it retires with it - #273 max-[413px] wrap threshold deleted (8374c3b) - #274 services Clear now clears the q param, both controls share one path, and the ui-tools URL assertion landed (8374c3b) - #302 style-contract exemption artifacts cleaned up Corrected #293: finding 1 is refuted. Controls carrying min-h-tap are not having the floor overridden by an unlayered class — they carry an explicit sm: step-down beside it, and the audit measures at the desktop viewport where that step-down is in force. services-navigator-page.tsx:217 and :286 are exact matches for the two 36px shapes via sm:h-9 sm:min-h-0. min-h-tap is a phone floor that desktop deliberately releases, so "fixing" these would pin every desktop control to 48px. Finding 2 stands and is the whole remaining task; the revised next step is to run the enumeration at a phone viewport on a deterministic surface. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 20 minutes Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
Comment |
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
…system rows Archived as verified-delivered or duplicate: #303, #284 (dup of #296), #149, #159, #286, #287, #288, #256, #261, #291. Re-scoped with re-measured evidence: #210 (gate was never missing; the defect is the .next/dev types include), #262 (aliases 228 -> 193), #266 (counts moved, 23 unadopted holds), #275 (premise 'only one implementation' is false — the values leaked to five files). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
…e-local rows Archived: #179 (compact catalogue restored AND gated at build-therapies-index .mjs:240-244). Re-measured: #213 (only 3 empty catches left), #180 (re-confirmed live with exact source/target lines), #275. Annotated four machine-local rows (#152, #169, #236, #260) so a cloud session cannot mistake a fresh container for evidence and close them wrongly. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
Archived #298: GATES.md:126 now records the '0 matches after a failed request' rule as implemented-blocking (11 Aug 2026) via errorStateCountProps and failedStateResultCounts at baseline 0, so the row's 'nothing enforces it' premise no longer holds. Adoption stays open under #299. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
…k9' into claude/design-issues-triage-wnr7k9
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
There was a problem hiding this comment.
Pull request overview
Updates the repository’s outstanding-issues ledger and branch review ledger to reflect re-verified “delivered” work on main, and corrects a misdiagnosis in issue #293 (the min-h-tap “0px” finding).
Changes:
- Archives several Tier 1 design rows as verified-delivered and records detailed closure evidence in
docs/outstanding-issues.md. - Refutes
#293finding (desktop viewport measured intendedsm:step-down behavior) and updates next steps toward a deterministic, phone-viewport audit surface. - Appends review-ledger entries documenting the verification pass(es).
Reviewed changes
Copilot reviewed 1 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| docs/outstanding-issues.md | Archives/updates multiple ledger rows with current-main verification evidence; refutes the #293 min-h-tap claim and adjusts follow-ups. |
| docs/branch-review-ledger.md | Adds ledger rows documenting the Tier 1 re-verification and a broader ledger sweep verification run. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
docs/outstanding-issues.md has no merge driver by design, so this conflicted in seven hunks. Resolved by taking main's file as the base — it carries main's own archives (#207, #226, #230, #261, #284, #296) — then re-applying all 23 of this branch's changes through scripts/outstanding-issues.mjs: 15 archives and 8 detail rewrites. Verified afterwards that every one landed and that the guard reports no ids deleted from base. Two rows are deliberately NOT resurrected. This branch's #302 (style-contract line-break artifacts) and #303 (issues:next-id sync) no longer exist anywhere on main under any id — main has since reused both numbers for entirely different live rows. Both of this branch's rows were verified-delivered trivia, so nothing actionable is lost, but the disappearance is itself evidence for #156/#168: a main-side merge dropped rows, which is the hazard those rows describe. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
Checked all 12 open PRs and mapped them to ledger rows. Twenty-four open rows are actively being fixed right now — #1835 (7 rows), #1840 (4), #1842 (6), #1841 (4), #1836 (2), #1837 (1), #1839 (1) — and none of those rows said so. This is the #292 failure mode with the safety off: a queued row that reads as unclaimed while a PR is open against it is how the same conversion shipped twice on 2026-08-09. Each row now names its PR and says not to start until that PR merges. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
…re-scope the wave plan Archived with source evidence: - #166 the verify-before-use caveat ships (verification-notice.tsx:52, rendered unconditionally by AnswerCard at answer-card.tsx:108). I reported this row as open twice before reading the code; the archive says so. - #208 buildAnswerClipboardText composes renderCopyText rather than replacing formatAnswerRenderCopyText (answer-copy-payload.ts:121-138). - #216 AnswerCard is adopted on the answer surface and the manifest agrees. Re-scoped #250: its wave plan names A1 rows that are now closed and hygiene rows that are in flight, so as written it misdirects. Recorded what actually remains (#147, #117, #118, #98, #189). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
…k9' into claude/design-issues-triage-wnr7k9
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
… rows Repairs. Two main-merges silently reverted edits from this branch, and the re-apply script missed them because it was hand-enumerated from round 1's second commit only: - #293 the entire min-h-tap refutation was gone (grep sm:min-h-0 returned 0); the row was back to asserting a defect that does not exist. Restored from a6bfc6f. This was the live hazard — as reverted it directed a reader to strip desktop step-downs and pin every control to 48px. - #266 restored the 2026-08-12 counts (54/31/23) over main's older 53/30/23. - #262 deliberately NOT restored: main's version is newer than mine and records --shadow-tight retired outright on 2026-08-10. - #289 archived; verified fixed in round 1 and never actually closed. Stamps. Sixteen rows were checked during the sweep, found correct, and left unchanged — which left no trace, so they were indistinguishable from rows nobody had opened. Each now carries VERIFIED CORRECT 2026-08-12 plus the measurement that settled it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
Archived #303: probed the real CLI rather than reading it — ledger:append now accepts a --scope value beginning with a double dash. (The probe row it wrote was removed immediately and the guard re-run clean.) #302 re-measured and WORSE, which strengthens it: the legacyShadowAliases ceiling is still pinned at 220 while the gate measures 193 — 27 units of unguarded slack, up from 3 when the row was written. Paying #262's debt down bought headroom instead of tightening the gate, which is exactly the row's thesis. #215 re-scoped: one of its three items is done (image-lightbox has decoding=async) and the row's path was misleading — the file is under clinical-dashboard/, so a root-level search reads as 'already fixed'. Twenty stamped VERIFIED CORRECT with the measurement that settled each. Coverage: 58 of 119 open rows now carry sweep evidence, up from 34. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
…d rows The conflict was one hunk. Resolved by keeping this branch's #302 (re-measured 2026-08-12, newer than main's) and all four of main's genuinely new rows (#304, #305, #306, #307), dropping only main's older #302 and its #303, which this branch had already archived as delivered after probing the CLI. Correcting an earlier claim in this branch's history: #302 and #303 were NOT lost by main. Main renumbered them to #306 and #307 after the id collision, which is exactly what the guard advises. Both are re-filings of work already done, and both are archived here with evidence — style-contracts.ts:352-354 is clean, and the marker reads 308 against a highest declared id of 307. The derived loss detector reports one exception, #262, which is intentional: main's version of that row is newer than this branch's. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
Measured, not assumed. Two independent runs of the offline harness this row specifies, on Chromium 141 — the same browser that produced the row's original figures, so before/after is like-for-like. Mobile CLS (run1/run2 vs recorded): /dsm 0.035 / 0.035 was 0.363 /documents/search 0.000 / 0.000 was 0.220 / 0.013 / 0.013 was 0.023 /forms 0.081 / 0.081 was 0.310 local /therapy-compass 0.000 / 0.000 was 0.240 local The 128px reserve round trip is gone. The cause was fixed by PR #1616, not by this session: use-phone-overlay-chrome-reserve.ts keeps the CSS seed until an observer candidate holds across an 80ms quiet window and publishes only via ResizeObserver — both remedies the row proposed — and its comment at :61 cites the row by number. Two controls make this a pass rather than the false clean the row warns about: values are not uniformly 0.000, so the observer is live; and the /dsm variance the row recorded (0.363 vs 0.219) has itself vanished, which is what you expect once the transient write causing it stopped. Also recorded: #118 updated — the Lighthouse browser drift is 141-vs-151, wider than the 150-vs-151 the row states, so the budget cannot grade from this container at all. New row #308 for desktop /documents/search CLS 0.119, stable against a 0.119 baseline, above threshold, and outside #147's mobile scope — which also makes the row's "desktop passes everywhere 0.016-0.097" stale. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017paT42ZVMf8jaLtkjFxdy5
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Summary
This started as an attempt to bundle the Tier 1 design defects into the minimum number of implementation PRs. Re-verifying each row against
origin/mainfirst found that most of the work was already done and one row was actively wrong, so the deliverable is a ledger correction rather than a code change. Nothing undersrc/is touched.Archived as verified-delivered, each checked against current
mainrather than taken from the row text:#171— documents filtering.document-search-results.tsxno longer referencesutilityControls,searchCommandSurfaceConfigorcommandScopes, so the scope chips are gone andSourceshas left the results bar. Source-type was not absorbed intoDocument type— per#181those are complementary axes — it stayed its own axis and now joins the same single panel, counting intoactiveFilterCountand rendering on the shared applied-filters shelf.#172—Sourcesrelocated and renamed rather than deleted, as its stop rule required:browseLibraryControlrenders as Browse all sources with the corpus count, shared across the filter-sheet footer and the zero-result empty state.#174— the decision this row asked for was made in favour of OR-within-group.filterDocumentsBySmartTagFacetIndexpartitions the selection by group and breaks on the first hit within a group, so two medications now means "either", not zero.#181— the correction to#171was applied, so it retires alongside it.#273— bothmax-[413px]:utilities deleted rather than re-thresholded, per the stop rule; the class no longer appears undersrc/(8374c3b).#274—clearServiceQuery()now resets local state and replaces the route withoutq, with the desktop Clear and the phone sheet'sonClearAllpointing at that one path. Theui-toolsURL assertion the row asked for landed in the same commit (8374c3b).#302— the three ticker exemptions are one clean line each with their reason text preserved; no escaped line-break artifacts remain.Corrected in place:
#293— finding 1 is refuted. The row asserted thatmin-h-tapcarriers have the floor "overridden to 0", blamed "likely an unlayered component class in globals.css", and treated the six shapes as a live 48px-floor defect. What actually zeroes the min-height is the source itself, deliberately: these sites carry an explicitsm:step-down besidemin-h-tap. The two 36px shapes are exact matches —services-navigator-page.tsx:217(grid min-h-tap min-w-tap … sm:h-9 sm:min-h-0) and:286(inline-flex min-h-tap min-w-[94px] … sm:h-9 sm:min-h-0);sm:min-h-0is the computed0pxandsm:h-9is the rendered 36px. Sevenmin-h-tapsites carrysm:min-h-0, andinline-flex min-h-tap items-centeralone appears withsm:min-h-0(4),sm:min-h-7(2),sm:min-h-8(2),sm:min-h-9(4),sm:min-h-10(8) andsm:min-h-12(1).min-h-tapis a phone floor that desktop deliberately releases, and the audit navigates at the desktop viewport, so it was measuring intended design and reporting it as an overridden floor. Removing those step-downs would pin every desktop control to 48px — a visual regression, not an accessibility improvement, since the phone contract already exceeds both WCAG 2.5.8 AA and 2.5.5 AAA. Finding 2 (the enumeration is non-deterministic on a live-search route) stands unchanged and is the whole remaining task; the revised next step is to run it at a phone viewport, where the floor is unreleased and the measurement is meaningful, on a deterministic surface.Ledger totals move from 145 open / 156 archived to 138 open / 163 archived. No row ids were deleted, and the queue entries for the archived rows were removed per the "a gap means completed" convention.
Verification
npm run verify:pr-localverify:pr-localclassified this as recognised low-risk docs scope and skipped lint, typecheck, the unit suite, the RAG fixture scan and the build. UI verification not run: nosrc/change — the claims about product behaviour are read againstorigin/mainat4587f78, not introduced here.One note on the run:
check:installed-lock-parityfailed on the first attempt because a localnpm run build(used while investigating#293) had mutatednode_modulesafter the trusted post-install stamp. That is the full-tree check from#149working as intended. Resolved withnpm ci --include=devrather than by re-stamping over the drift, then the gate was re-run clean.Risk and rollout
src/, schema, workflow or dependency change. The residual risk is editorial — if any "verified delivered" reading is wrong, a row is archived that should be open. Each is cited to a file:line or commit so it can be re-opened from the archive, which is why the rows are archived rather than deleted.git revertthis single commit; the archive rows carry their original type and summary text intact.Notes
Three Tier 1 rows were deliberately left open because they are not implementation work:
#281(two clinical-summary surfaces on the phone document route) — both surfaces still render, and the row's own stop rule says the difference between the two renderings is the decision. It needs a clinical-content judgement, not a layout merge.#290(ui-smokephone scroll-hide flaky onmain) — a root-cause investigation on the base branch, not a bundleable fix.#300— exists precisely so nobody converts the three sites it names; no action by design.#265still points at#293for gate 2 and now resolves to the corrected text, so no edit was needed there.Generated by Claude Code