docs: five ledger items — stale D4 pointer, prettierignore rationale, docs-link gate proof, Caring Contacts Phase 3 plan, Ward Flow phase assignments - #2520
Conversation
#CTA8CR. The two sites the ledger named and the third it cited as the convention all carry the superseded pointer already; one bare instance survived at the Phase 4 production-push step, where the pre-flight's "exactly the four new versions" reading is offered as confirmation that auto-deploy is off. That is precisely the inference §D4 refutes — it tested deploy-while-open, not deploy-on-merge — so it gets the same one-line forward pointer the document already uses elsewhere. The claim itself stays standing: this is a forensics record, and the convention is to point forward rather than rewrite history. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X1iWKAYSJ3J7CPjHaNVbcP
… ignored #DVRZA4. The asymmetry the ledger recorded is already gone — both generated snapshots under data/ are listed — but the newer entry justified itself by claiming parity with the older one, and that claim is not true of it. data/outstanding-issues-snapshot.json genuinely disagrees with Prettier, so its entry is load-bearing; the repo-awareness snapshot passes Prettier today and its entry is forward-looking insurance. The comment now names the actual mechanism: the generator writes JSON.stringify(_, null, 2), which always expands arrays, and the two only agree because every array in this schema holds multi-field objects, which Prettier never collapses. A scalar-only or empty-object array field would reopen the gap. The ledger's suggested direction — removing the older entry — is wrong and was not taken: Prettier reflows that file, so removing it would cause exactly the regeneration churn the entry exists to prevent. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X1iWKAYSJ3J7CPjHaNVbcP
…cognised prefix
#ZM8902. The checker itself already resolves relative markdown links
against the file containing them, so the class the ledger reported as
unfailable does fail today. What was missing was the half the row
actually turns on — "a check that cannot fail" — because nothing pinned
that behaviour. tests/check-docs-links.test.ts covered only the two
helper exports, leaving the link classification a silent refactor away
from reopening.
Extract main()'s per-document collection into an exported
collectDocumentFailures({ target, markdown, targetAnchorsCache }),
returning failures and the checked count, so main() and the tests run
one implementation. Three tests pin the exact shape that escaped: a
spec under docs/superpowers/specs/ linking to
../../caring-contacts/design-handoff.md is reported; the same shape
resolving to a real file is not; and the checked count rises when the
link is present, so "resolved" cannot be confused with "skipped".
Gate output is unchanged at 4736 references.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X1iWKAYSJ3J7CPjHaNVbcP
#875H6T. All six accepted 2026-08-26 and unassigned since. Each goes to the phase whose existing description already covers it, or the one its dependencies force it into; no new phase, no rewritten phase. - Guided tour and named demo-clock moments -> Phase 6. Every beat the tour scripts already exists after Phase 5 (priority queue, coordinator screen, discharge confirmation, egress board), so it needs nothing built first and serves exactly what Phase 6 was promoted for. - "Why not here?" and the out-of-area ledger -> Phase 8. The first is the inverse of decision 14's can-take-them overlay and needs Phase 7's bed-type matching plus Phase 8's distance; the second is placed where its own text already puts it. - Prediction track record and "waiting since" -> Phase 9. Phase 9 is the trust phase and already names waiting-time equity; the track record additionally needs accumulated history Phase 6 does not have, and a sixth figure would reopen decision 13. Each assignment carries its reason, under the file's own rule that an assignment with no reason attached gets moved by the next person who finds it inconvenient. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X1iWKAYSJ3J7CPjHaNVbcP
#4STSM1. The ledger row says the implementation plan is unwritten and names part one as the next step. Verified against main at 45a3dca, that is stale: part one's plan is docs/superpowers/plans/2026-08-19-caring-contact-domain-and-datastore.md with its eleven test-first tasks, and both it and Phase 2's plan landed. The domain layer, eight migrations, the production workspace routes and 73 test files are on main. What was never planned is Phase 3 — spec §10, §2.9 and the rehearsed demonstration path. Spec §13 said Phase 3 folds into the Phase 2 pull request "unless it grows"; Phase 2B merged without it, so it grew. Eleven test-first tasks in five groups: the advanceable clock and its production-absence proof; the seed extended from five patients to twelve across all nine required states; the §2.9 bounded plan summary with its exclusions asserted as absences; training mode isolated at the store seam rather than at the screen; and the five-minute path as a tracked document plus an executable journey. The scope table is a verified inventory of main, not a restatement of the spec, so no task rebuilds something already merged. Six rulings are recorded with what each costs if wrong, and four questions are left for the owner — none blocking Task 1. Plan only. No code. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X1iWKAYSJ3J7CPjHaNVbcP
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Immutable inbox requests only; the canonical ledger is untouched and these apply on the next `npm run issues:reconcile` after this PR lands. - #CTA8CR, #ZM8902, #875H6T: closed, each outcome naming what was already on main before this session and what actually remained, so the re-scoping is checkable rather than asserted. - #4STSM1: updated rather than closed. Its stated condition is met — all three phases now have plans — but the Phase 3 *build* is still outstanding and would have vanished from the ledger on a close. The new summary and detail carry the verified inventory of what landed, what Phase 3 covers, and the four owner questions the plan leaves open. - #DVRZA4: a done request was queued and then withdrawn as a duplicate. An earlier pending request already closes that row with the same verdict, and two pending mutations on one row make reconcile refuse — which also crashes `docs:check-links`, since it validates links against the projected ledger. The cancellation note keeps the extra measured evidence that the surviving request predates. Both the superseded request and its cancellation are committed: cancel targets a pending request by id, so withholding the request it names would leave the cancellation dangling. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X1iWKAYSJ3J7CPjHaNVbcP
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_2aa14053-3c75-42f4-85fa-30362eae380e) |
…-ec3ll5 # Conflicts: # data/repo-awareness-snapshot.json
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d380a1e809
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…iness gate Both findings from the Codex review of #2520, verified before acting. The demo clock's gate copied `mockupsEnabled()` wholesale, including its production opt-in via NEXT_PUBLIC_MOCKUPS_ENABLED. Spec §10.1 says both "never present in a production build" AND "the same environment-gate pattern as mockupsEnabled", and those clauses conflict — the pattern ships in production when the flag is set. The plan had already called a demo clock reaching production a clinical-safety defect, so it contradicted itself. It now takes the gate's shape without its escape hatch: production denies unconditionally, and the production-absence test must fail with the flag set to true, since the flag is the failure mode the test exists to prevent. Recorded as Ruling 7. The verification plan excluded `check:production-readiness` as provider-backed, quoting spec §11. The deciding fact is that scripts/production-readiness.ts validates configuration and makes no live OpenAI or Supabase call, so the provider boundary is not what that exclusion protects, while docs/agents/verification-gates.md requires the check for environment and clinical-output changes — Phase 3's §2.9 document and gated demo clock are both. It now runs once at the closing gate with its output recorded, including a failure that is only absent local configuration. Recorded as Ruling 8, which the owner can strike. Plan text only. No code, and no change to what Phase 3 builds. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X1iWKAYSJ3J7CPjHaNVbcP
…-ec3ll5 # Conflicts: # data/repo-awareness-snapshot.json
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_2a054987-8040-41b5-a958-4c1df3cc9d90) |
…anch's requests The snapshot is generated from the ledger plus the pending inbox, and this branch adds six inbox requests that were not represented in it. I twice reverted this regeneration to keep the diff tight, reasoning that the file is a known merge-conflict surface. That was the wrong call: `#Y090R5` records that every inbox PR must regenerate it, so the conflict is the accepted cost of the file, not a reason to skip it. Leaving it uncommitted also left a permanently dirty working tree, which is what made the pre-push guard warn that lint and typecheck had been run against a tree that did not match the pushed commit. `check:outstanding-issues-snapshot` passes either way — it compares the ledger-derived content, not the pending listing — so this changes no gate result. It makes the branch self-consistent: the snapshot now lists the six requests the branch actually carries. Regenerated with `npm run snapshot:repo-awareness`'s sibling generator, never by hand. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X1iWKAYSJ3J7CPjHaNVbcP
…-ec3ll5 # Conflicts: # data/outstanding-issues-snapshot.json # data/repo-awareness-snapshot.json
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_296f6bf2-68f0-448e-90a1-a49f885878c2) |
1 similar comment
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_296f6bf2-68f0-448e-90a1-a49f885878c2) |
main advanced to a68f34a (#2520, five ledger items) and conflicted on data/repo-awareness-snapshot.json only. Regenerated that snapshot and docs/branch-review-index.md with their own generators; .prettierignore auto-merged, since #2520 added a rationale comment beside the entry this branch contributes rather than changing it. Auto-merge is armed on this PR and is user-owned, so this is an ordinary merge-main-in sync to unblock it: no force-push, no history rewrite, no change to the auto-merge state or the base. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AxPVZhAvzE2YupMiDz8sqF
main advanced two more commits (#2520, #2526). One conflict, again in the generated data/repo-awareness-snapshot.json, resolved by regenerating with npm run docs:update rather than by hand. Re-checked that check:diff-integrity survived the merge and is still in verify:cheap:internal. Gates: docs:check-inventory, docs:check-scripts, docs:check-index, docs:check-links, check:gate-manifest, check:verification-plan, check:diff-integrity, check:repo-awareness-snapshot, check:outstanding-issues, check:outstanding-issues-snapshot, check:pr-policy and check:ci-scope pass; lint clean, typecheck clean, unit suite 949 files / 12,171 passed, 1 skipped. check:ledger-write-discipline is re-run below, since it refuses a verdict while the merge is uncommitted. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0193brbqFWHbpVnLfgDBkVNP
Summary
#CTA8CR—docs/audit/live-drift-forensics-2026-08.mdcarried one remaining bare "D4 auto-deploy is off" claim, at the Phase 4 production-push step, where the pre-flight's "exactly the four new versions" reading is offered as confirmation. That is the inference §D4 refutes (it tested deploy-while-open, not deploy-on-merge), so it now carries the same one-line superseded pointer the document already uses at its three other D4 sites. The claim itself stays standing — this is a forensics record and the convention is to point forward, not rewrite. The two sites the ledger named, anddocs/database-remediation-coordination.md, were already corrected onmain; that is recorded in the commit rather than re-done.#DVRZA4— the.prettierignoreasymmetry was already resolved in the "add the newer entry" direction, but the newer entry justified itself by claiming parity with the older one and that claim is untrue of it.data/outstanding-issues-snapshot.jsongenuinely disagrees with Prettier, so its entry is load-bearing;data/repo-awareness-snapshot.jsonpasses today and its entry is forward-looking insurance. The comment now names the real mechanism: the generator writesJSON.stringify(…, null, 2), which always expands arrays, and the two agree only because every array in that schema holds multi-field objects, which Prettier never collapses. The ledger's suggested direction — removing the older entry — is wrong and was not taken.#ZM8902— the checker already resolves relative markdown links against the file containing them, so the class reported as unfailable does fail today; what was missing was the half the row turns on, "a check that cannot fail".main()'s per-document collection is extracted into an exportedcollectDocumentFailures({ target, markdown, targetAnchorsCache }), so the gate and the tests run one implementation, and three tests pin the exact shape that escaped: a spec underdocs/superpowers/specs/linking to../../caring-contacts/design-handoff.mdis reported; the same shape resolving to a real file is not; and the checked count rises when the link is present, so "resolved" cannot be confused with "skipped". Watched failing under a deliberate mutation before being trusted. Gate output unchanged at 4736 references.#4STSM1— the ledger says the implementation plan is unwritten and names part one as the next step; verified againstmain, that is stale. Part one's plan isdocs/superpowers/plans/2026-08-19-caring-contact-domain-and-datastore.mdwith its eleven test-first tasks, and both it and Phase 2's plan landed. What was never planned is Phase 3 (spec §10, §2.9 and the rehearsed demonstration path), which spec §13 said folds into the Phase 2 pull request "unless it grows" — Phase 2B merged without it. New plan: eleven test-first tasks in five groups, built on a verified inventory ofmainso no task rebuilds merged work, with six rulings and four questions left for the owner. Plan only, no code.#875H6T— the six Ward Flow enhancements agreed 2026-08-26 are assigned: guided tour and named demo-clock moments to Phase 6 (every beat they script already exists after Phase 5); "why not here?" and the out-of-area ledger to Phase 8 (the first is the inverse of decision 14's can-take-them overlay and needs Phase 7's bed-type matching plus Phase 8's distance); prediction track record and "waiting since" to Phase 9 (the trust phase, which already names waiting-time equity). Each assignment carries its reason, under the file's own rule that an assignment with no reason attached gets moved by the next person who finds it inconvenient. No new phase, no rewritten phase description.A sixth commit records the outcome of all five rows as immutable inbox requests. It edits no canonical ledger file and applies on the next
npm run issues:reconcileafter this lands.#CTA8CR,#ZM8902and#875H6Tclose.#4STSM1is updated rather than closed — its stated condition is met now that all three phases have plans, but the Phase 3 build is still outstanding and a close would have deleted it from the ledger.#DVRZA4's closure was queued and then withdrawn as a duplicate: an earlier pending request already closes that row with the same verdict, and two pending mutations on one row make reconcile refuse — which also crashesdocs:check-links, since it validates links against the projected ledger. The withdrawn request and its cancellation are both committed, because a cancellation targets a pending request by id and would otherwise dangle; the cancellation note carries the measured evidence the surviving request predates.Verification
npm run verify:pr-localRun twice — once on the five item commits and again on the ledger commit. Both times all 19 selected steps completed and none failed:
check:runtime,check:installed-lock-parity,format:changed,sitemap:check,check:repo-awareness-snapshot,docs:check-index,docs:check-inventory,docs:check-scripts,docs:check-links,check:branch-review-ledger,check:outstanding-issues,check:ledger-write-discipline,lint,typecheck,test,build,check:rag:fixtures,check:medication-interactions,check:medication-lexicon-report. The decisive lines:format:changedescalated to a whole-tree check because a Prettier policy file changed and reportedAll matched files use Prettier code style!;docs:check-linksreporteddocs link check passed: 4736 repo path references resolve.;check:rag:fixturesreportedOffline RAG fixture and manifest validation passed (36 golden cases, 26 suites).Focused evidence for the changed gate:
npx vitest run tests/check-docs-links.test.ts→Test Files 1 passed (1)/Tests 7 passed (7), and under a deliberate mutation that skips links with no recognised prefix the three new tests failed (3 failed | 4 passed (7)) before the mutation was reverted.One thing worth knowing about the first run.
testinitially failed ontests/clinical-hazard-controls.test.tsandtests/rag-plan-package-parity.test.ts. Both were the shallow clone, not this diff: each names a commit (883f1007a…,f3d1a3cce…) thatgit cat-file -econfirmed absent locally. Aftergit fetch --deepen=2000both pass (Test Files 2 passed (2)/Tests 19 passed (19)), and the runs above are green.npm run verify:uiwhen UI, routing, styling, browser behavior, reduced-motion, or forced-colors behavior changedUI verification not run: no component, route, style, or browser-behaviour file is touched. The diff is three documents, one Prettier ignore comment, one Node script and its Vitest file, a regenerated snapshot, and six immutable ledger records.
npm run verify:releasebefore release or handoff confidence claims — not a release or handoff-confidence change.npm run eval:retrieval:quality— not run; no retrieval, ranking, selection, chunking or scoring behaviour changed, and it is provider-backed.npm run eval:rag -- --limit 15+npm run eval:quality -- --rag-only— not run; no answer generation, synthesis prompt or answer post-processing changed, and both are provider-backed.npm run check:production-readiness— not run; no clinical workflow, privacy, environment, Supabase, source-governance or deployment behaviour changed.npm run check:deployment-readiness— not run; no deployment startup, hosting or rollout behaviour changed.Risk and rollout
scripts/check-docs-links.mjsthat leaves the gate's stdout, stderr and exit code identical, evidenced by the unchanged 4736-reference count before and after.data/repo-awareness-snapshot.jsonis regenerated by its own generator, not hand-edited.Clinical Governance Preflight
This section is completed because
data/repo-awareness-snapshot.jsonsits underdata/, whichclassifyPullRequestFilestreats as clinical-risk. It is a regenerated developer-hub metadata snapshot describing the repository itself, and carries no clinical content.No change to citation requirements, source verification or provenance anywhere; linked-source verification before clinical use is untouched by this diff.
No patient-data handling, privacy controls or document-access behavior is introduced or expanded. The Caring Contacts plan is a plan document and adds no workflow; its own text forbids real patient data.
Clinical KB Database(sjrfecxgysukkwxsowpy)The configured Supabase project/target is unchanged; no migration, environment value or connection setting is touched.
No service-role credentials are read, moved or exposed, and private document access stays server-side only.
Demo and synthetic content stays separated from real clinical sources. The Caring Contacts plan reinforces that separation rather than weakening it, requiring synthetic patients to be obviously fictional and their numbers drawn only from the designated fictional set.
Source metadata, review status and outdated/unknown-source behavior are unchanged and remain conservative; nothing in this diff reaches the source-governance surface.
SaMD/TGA assessment considered and not triggered: no clinical decision-support behaviour changes in this diff.
Notes
mainand what remained, so the re-scoping is checkable rather than implied.data/outstanding-issues-snapshot.jsononmainrecordspending: 0while the inbox holds real pending requests.check:outstanding-issues-snapshotis content-based and reports in step regardless, so nothing is failing; regenerating it inside this PR would have swept in unrelated entries and made the file a merge-conflict surface, which is the churn#Y090R5records.🤖 Generated with Claude Code
https://claude.ai/code/session_01X1iWKAYSJ3J7CPjHaNVbcP
Note
Low Risk
Documentation and ledger metadata dominate; the only code change is a refactor of the docs link checker with unchanged gate behavior (4736 references).
Overview
Closes five outstanding-issues ledger rows via append-only inbox JSON (reconcile later): stale D4 “auto-deploy off” wording in live-drift forensics gets a superseded pointer;
.prettierignoredocuments whyrepo-awareness-snapshot.jsonis ignored (generatorJSON.stringifyvs Prettier array collapse); Ward Flow assigns all six 2026-08-26 enhancements to Phases 6/8/9 with stated reasons; #4STSM1 is updated to reflect Phases 1–2 shipped and Phase 3 still to build.Adds a DRAFT Caring Contacts Phase 3 plan (
make it demonstrable: demo clock, twelve-patient seed, §2.9 summary, training mode, five-minute path) and regeneratesdata/repo-awareness-snapshot.jsonto index it.scripts/check-docs-links.mjsextracts per-document checking into exportedcollectDocumentFailures, shared bymain()and new Vitest cases that prove relative../../links are checked (not silently skipped) when targets are missing vs present.Reviewed by Cursor Bugbot for commit 0ec859d. Configure here.