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
22 changes: 20 additions & 2 deletions data/outstanding-issues-snapshot.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,15 +2,15 @@
"version": "outstanding-issues-snapshot-v1",
"ledger_revision": {
"sha": "707b965965a9b843c13deb6b5c9ddd158fe2631d",
"committed_at": "2026-08-25T17:45:01Z"
"committed_at": "2026-08-25T17:45:01+00:00"
},
"counts": {
"open": 91,
"p1": 1,
"p2": 57,
"p3": 33,
"queued": 9,
"pending": 4,
"pending": 7,
"resolved": 412
},
"queue": [
Expand DownExpand Up@@ -942,6 +942,12 @@
"summary": "Cancel request 8b2a3f89-9bdb-4fb1-8fd0-35165d050263: Implemented the requested local source-card width constant in this owning answer-page change.",
"created_at": "2026-08-25"
},
{
"request_id": "40ff11ca-52f3-4b95-9118-5e0c107e68f0",
"action": "cancel",
"summary": "Cancel request 970b4089-9e76-4bcf-821e-2e70e16a3617: Superseded before reconciliation: the original wording incorrectly implied every component metric belongs in :root. The replacement distinguishes module-local one-consumer constants from shared CSS custom properties.",
"created_at": "2026-08-26"
},
{
"request_id": "485bdac6-7f79-4539-9d90-347866604b35",
"action": "add",
Expand All@@ -954,6 +960,18 @@
"summary": "The answer source-rail card carries three hardcoded pixel measurements, one of them duplicated",
"created_at": "2026-08-25"
},
{
"request_id": "970b4089-9e76-4bcf-821e-2e70e16a3617",
"action": "add",
"summary": "Component metrics stay in :root, not @theme — record the rule where reviewers read it, because bots keep re-raising it",
"created_at": "2026-08-26"
},
{
"request_id": "b85ad821-4c9b-4925-b86b-2d5767052b20",
"action": "add",
"summary": "Scope the component-metric rule: keep one-consumer values local; use :root only for shared off-scale CSS custom properties, not @theme",
"created_at": "2026-08-26"
},
{
"request_id": "d2a6122a-4fcd-4429-92a7-6004fa19eb24",
"action": "add",
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
{
"version": 2,
"id": "40ff11ca-52f3-4b95-9118-5e0c107e68f0",
"createdOn": "2026-08-26",
"action": "cancel",
"payload": {
"requestId": "970b4089-9e76-4bcf-821e-2e70e16a3617",
"reason": "Superseded before reconciliation: the original wording incorrectly implied every component metric belongs in :root. The replacement distinguishes module-local one-consumer constants from shared CSS custom properties."
}
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
{
"version": 2,
"id": "970b4089-9e76-4bcf-821e-2e70e16a3617",
"createdOn": "2026-08-26",
"action": "add",
"payload": {
"pri": "P3",
"type": "rec",
"summary": "Component metrics stay in :root, not @theme — record the rule where reviewers read it, because bots keep re-raising it",
"detail": "Review bots have now asked twice, on consecutive PRs, to move a component metric into the Tailwind 4 @theme block: cardTextWidth (max-w-[158px], PR #2374) and --answer-message-gutter (calc(2.75rem + 1px), PR #2377). Both were declined for the same reason and the reasoning currently lives only in a code comment beside --answer-mark-* in src/app/globals.css, which the bots do not read, so the cost repeats every PR that adds one. THE RULE, as already practised: a value that is a component metric rather than a step on a design scale stays a :root custom property. @theme generates a whole utility family from each token (p-, m-, w-, gap-) and implies a scale step, so a one-consumer or off-grid value there reads as a design decision that was never made; --answer-message-gutter is deliberately off the 4px grid because its 1px compensates for a transparent border, and no existing spacing token equals it. It also couples: tests/tailwind-merge-config.test.ts requires every @theme --spacing-* token to have a matching CLINICAL_TWMERGE_THEME.spacing entry, so the move is never one line. NEXT ACTION (small, docs-only): add a prohibition-table row to docs/design-system/GATES.md section 3 stating the :root-versus-@theme boundary and naming both declined instances, in the same shape as the #336 breakpoint decision recorded there. That is the artifact a reviewer or a future session will actually find. Do NOT convert either value as part of it. Worth pairing with .coderabbit.yaml path instructions if the suggestion recurs after the doc lands.",
Comment thread
BigSimmo marked this conversation as resolved.
"source": "session 2026-08-26, PRs #2374 and #2377 (CodeRabbit nitpicks declined twice with the same reasoning)",
"issueUlid": "01M0XX7KC1Z1AG1WQAH2SBH5HD"
}
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
{
"version": 2,
"id": "b85ad821-4c9b-4925-b86b-2d5767052b20",
"createdOn": "2026-08-26",
"action": "add",
"payload": {
"pri": "P3",
"type": "rec",
"summary": "Scope the component-metric rule: keep one-consumer values local; use :root only for shared off-scale CSS custom properties, not @theme",
"detail": "The earlier pending request overgeneralised the :root-versus-@theme boundary. Correct rule: keep a one-consumer component metric local to its owning JS/TS module, such as cardTextWidth (max-w-[158px] in src/components/clinical-dashboard/answer-source-rail.tsx); do not promote it to a global CSS custom property or an @theme token. Apply the :root-versus-@theme decision only when a shared CSS custom property is needed by multiple non-nested consumers: a shared off-scale metric such as --answer-message-gutter (calc(2.75rem + 1px), including its transparent-border compensation) belongs in :root, while @theme is reserved for deliberate design-scale tokens that should generate a utility family. NEXT ACTION (small, docs-only): add a prohibition-table row to docs/design-system/GATES.md section 3 that states this three-way boundary (module-local component constant vs shared :root custom property vs @theme scale token), names both prior examples accurately, and explicitly does not convert either value. The existing tailwind-merge coupling still applies to any deliberate @theme --spacing-* token: tests/tailwind-merge-config.test.ts requires CLINICAL_TWMERGE_THEME.spacing coverage.",
"source": "PR #2381 review thread PRRT_kwDOSh5Fis6cUDDj, reviewing request 970b4089-9e76-4bcf-821e-2e70e16a3617; prior instances #2374 and #2377",
"issueUlid": "01M0XNVN00HX1KSZ3K6AVD9KXZ"
}
}
Loading