docs(agents): tier the always-loaded instruction surface into a core plus reference files - #2523
Conversation
…plus reference files AGENTS.md (75,723 B) and CLAUDE.md (16,480 B) were loaded into every AI session before any code was read. The cost that mattered was not the token bill: the rules that prevent irreversible harm — merging a supabase/migrations PR reaches the live clinical database within seconds; the retrieval-ranking surfaces are protected — sat in the same undifferentiated wall as the rule about how Prettier treats a per-file check. This is a reorganisation, not a policy edit. All 662 non-blank lines of AGENTS.md survive byte-identical; nothing is reworded, narrowed or broadened. AGENTS.md is now a small always-loaded core: the Next.js block, an index of the reference files, the five irreversible-harm boundaries, and the sections a committed gate parses by exact text. Nine new files under docs/agents/ carry the rest, following the heading+pointer pattern established by PR f328372. Every heading stays in AGENTS.md as a pointer stub, so every external reference that names a section by heading (.claude/skills/run-pr, newtask, handoff, .claude/agents/pr-ci-fixer, .claude/hooks/pr-handoff-stop.sh) still resolves without edits. CLAUDE.md keeps its orientation role; only its restatements of AGENTS.md rules become pointers, and its two deep-structure sections move verbatim into docs/codebase-index.md, which it already designates as their home. Two guards that would otherwise have weakened are repaired in the same change: docs/agents is added to the workflow scope maps in ci-change-scope.mjs and productivity-core.mjs so rule edits keep the workflow CI lane, and the new reference files join userFacingProductSurfaces. Always-loaded surface: 92,203 -> 45,138 bytes (-51.0%). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ou4w8atP9kDKHVAXUvYPe
|
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 |
…iering branch Bundled into this PR rather than pushed as a separate ledger-only tip, matching how every recent review record landed (#2517, #2508, #2504). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ou4w8atP9kDKHVAXUvYPe
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_34ed20e8-d435-47cb-91d5-2dce410d1608) |
Resolves the two conflicts the PR mergeability check reported. Confirmed a real conflict with git merge-tree first rather than trusting the GitHub label, per the anti-churn guidance in AGENTS.md. docs/README.md: kept main's subdirectory table, which adds the agents/ row from the instruction-surface tiering (#2523), and re-inserted the branch-review-records/ row this branch adds, before archive/. data/repo-awareness-snapshot.json and docs/branch-review-index.md: regenerated with their own generators rather than hand-resolved. Main added review record 9b97c2e6, so the index genuinely needed rebuilding — the first live demonstration of the staleness this branch documents and deliberately does not gate. data/outstanding-issues-snapshot.json is left at main's committed version. Regenerating it here only rewrote the `pending` block to absorb the inbox request main added, and check:outstanding-issues excludes `pending` from comparison, so the regeneration was unrelated churn on a file two concurrent ledger PRs already contend over (#Y090R5). The gate reports it in step. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AxPVZhAvzE2YupMiDz8sqF
… new home `PR mergeability` went red on 8a184b5: main advanced by two commits and #2523 ("tier the always-loaded instruction surface into a core plus reference files") restructured AGENTS.md and CLAUDE.md, which this branch also edits. `git merge-tree` confirmed a real content conflict rather than mere staleness, so this is a merge, not a sync. Resolution takes main's structure everywhere and re-applies this branch's content on top: - AGENTS.md and CLAUDE.md resolve to main's tiered versions. The mockup gate-exemption block moved out of AGENTS.md into docs/agents/wiring-and-bundle-budget.md, so the correction this branch makes to it — the false CodeRabbit and knip exemptions, the rules mockups genuinely are exempt from, and the pointer to docs/mockup-retirement-policy.md — is ported there instead of being re-inserted into a file that no longer holds it. CLAUDE.md's own pointer already resolves to that file, so discoverability is unchanged. - CLAUDE.md's verify:cheap gate count returns to 35. Taking main's copy reverted it to 34, and check:gate-manifest caught that immediately, since this branch adds check:mockups to the chain. - data/repo-awareness-snapshot.json is generated, so it was regenerated rather than hand-merged. Verified on the merged tree: gate-manifest (38 gates, 35 static, consistent), check:mockups (all three modes), branch-review-ledger, docs:check-links, docs:check-index, sitemap:check, check:repo-awareness-snapshot, check:outstanding-issues, lint, typecheck, and the full unit suite at 947 files / 12100 passed / 4 skipped. The previous commit's .prettierignore fix earned itself here: `npm run format` ran twice over this merge and the content-addressed review record still hashes to its filename. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015UPvNZYvyuDxc1o7xfTGCS
Summary
AGENTS.md+CLAUDE.md: 92,203 → 45,138 bytes (−51.0%).AGENTS.mdsurvive byte-identical — machine-checked, not asserted (see Proof).AGENTS.mdbecomes the always-loaded core: the Next.js block, an index, the five irreversible-harm boundaries, and the sections a committed gate parses by exact text. Nine new files underdocs/agents/carry the rest, following the heading+pointer pattern PRf328372established.AGENTS.mdas a pointer stub, so every external reference that names a section by heading still resolves with no edit:.claude/skills/run-pr,newtask,handoff,.claude/agents/pr-ci-fixer.md,.claude/hooks/pr-handoff-stop.sh(×4),tests/claude-code-settings.test.ts.CLAUDE.mdkeeps its orientation role; only its restatements ofAGENTS.mdrules become pointers, and its two deep-structure sections move verbatim intodocs/codebase-index.md, whichCLAUDE.mditself designates as their home.docs/agentsjoins the workflow scope maps inci-change-scope.mjsandproductivity-core.mjs(so rule edits keep the workflow CI lane instead of dropping to docs-only), and the new files joinuserFacingProductSurfaces..claude/cloud-profile/memory/token-usage-hygiene.md, whose standing instruction "do not shrink or restructureAGENTS.md/CLAUDE.md" would otherwise push a future session to revert this.docs/branch-review-records/, bundled here rather than pushed as a separate ledger-only tip.Why
The token bill was the smaller cost. The rules that prevent irreversible harm — merging a
supabase/migrations/**PR reaches the live clinical database within seconds; the retrieval-ranking surfaces are live-validated and protected — sat in the same undifferentiated wall as the rule about how Prettier treats a per-file check. Everything was emphasised, so nothing was.Proof that nothing was lost
Every non-blank line of the pre-change
AGENTS.mdandCLAUDE.mdwas searched for, byte-for-byte, across the post-change tree:Those 48
CLAUDE.mdlines are the 13 bullets that restatedAGENTS.mdrules (the section's own opening line already read "Full text and rationale inAGENTS.md"), plus two lead-ins. Each is listed below with the file that carries its canonical text. This was the approved scope:CLAUDE.mdis the orientation layer and should not hold a second copy of the rules.What the core keeps, and why
AGENTS.md# This is NOT the Next.js you knownext dev; untouched, byte for byte, still first# Supabase project safety,# RAG ranking protection,# Railway project safety,# API and provider confirmation boundary,# Local server safety## Bare PR publication is not readiness work+ the format-before-push ruletests/bare-pr-publication-policy.test.tspins the heading and 9 literal sentences# Search chrome behaviourtests/ui-overlay-css-contract.test.tspins theBEGIN:search-chrome-behaviourmarker comment and "Hidden means zero reserve"## Anti-conflict and CI-speed operating procedure## Codex Cloud environmentcheck-codex-cloud-setup.mjsrequires/^## Codex Cloud environment$/gmexactly onceText a gate parses is code, not prose. Those sections were quarantined and left alone.
New reference files
docs/agents/verification-gates.mddocs/agents/pull-request-workflow.mdRun PR, babysit budget, review coverage, PR bundlingdocs/agents/upload-shortcut.mduploadshortcut and its eight subsectionsdocs/agents/wiring-and-bundle-budget.mddocs/agents/external-skill-precedence.mddocs/agents/claude-hook-scripts.md.claude/hooks/*.shcontractdocs/agents/dead-code-deletion.mddocs/agents/bug-hunter-shortcut.mdbug-huntershortcutdocs/agents/repository-skills-and-issues.md/issuesmemorydocs/agents/codex-cloud-environment.md(existing)Verification
npm run verify:cheap— the broad offline gate, chosen because the change is cross-cutting.The two failures are pre-existing and not caused by this change:
tests/clinical-hazard-controls.test.tsandtests/rag-plan-package-parity.test.tsboth need commits (883f1007…,f3d1a3cc…) that are absent from the authoring container's shallow clone (98 commits). Proven, not assumed — both fail identically in a worktree checked out at unmodifiedorigin/main(45a3dca):Every test and script that parses these documents passes:
(
bare-pr-publication-policy,guard-push,ui-overlay-css-contract,migration-history-guards,setup-codex-worktree,playwright-exit-code-contract,stale-resume-instructions,database-skills,productivity-workflow,route-reachability.)The ledger commit was verified with the smallest gate that covers an append-only record plus its regenerated index:
check:ledger-write-discipline,check:branch-review-ledger,check:ledger-stamp-retention,check:repo-awareness-snapshot,docs:check-links,format:check— all passed.npm run verify:cheap(withnpm run formatcommitted)npm run check:codex-cloud— not inverify:cheap; it carries the## Codex Cloud environmentheading-count assertionnpm run verify:pr-local—verify:cheapalready ran lint, typecheck and the full offline unit suite on this content, and re-running would buy the same verdict twice.npm run verify:uinot applicable: no UI, routing, styling, reduced-motion or forced-colors behaviour changed.eval:*,verify:release,check:supabase-project,test:live.Risk and rollout
AGENTS.mdand bydocs:check-linksverifying all 4,771 path references resolve.main, but no application runtime file changed, so it rebuilds the same application.# RAG ranking protectionsection stays in the always-loaded core, byte-identical.Clinical Governance Preflight
scripts/pr-policy.mjsclassifies this PR as clinical-risk because it touchesdata/repo-awareness-snapshot.json, anddata/**is a clinical-decision surface. That file is the generated documentation index, regenerated bynpm run snapshot:repo-awarenessbecause the change adds files underdocs/; it carries no clinical content. The classifier is deliberately conservative and cannot make that distinction, so the preflight is completed rather than worked around.Clinical KB Database(sjrfecxgysukkwxsowpy)Basis for each of the above, kept out of the checklist because
pr-policymatches those item strings exactly: no retrieval, answer-generation, citation, source-rendering, document, upload, ingestion, access, environment, key-handling or authorization code is touched by this diff. The Supabase target was verified — the# Supabase project safetysection stays in the always-loaded core byte-identical andnpm run check:migration-rolepassed. No clinical decision-support behaviour changed, so the deployment-classification/TGA SaMD question was checked and is not applicable: the diff is documentation plus three CI path lists (ci-change-scope.mjs,productivity-core.mjs,list-database-skills.mjs), and no application runtime file is modified.Notes
claude/instruction-tiering-n9vs14, offorigin/mainat45a3dca.docs/agents/is now registered indocs/README.md's subdirectory map, anddata/repo-awareness-snapshot.jsonregenerated.docs/agents/verification-gates.mdgained one new structural heading (## Gate selection) so the file does not open on a dangling bullet list. No rule text changed. This and the new# How these rules are organisedindex inAGENTS.mdare the only prose written for this change.AGENTS.mdsay "above"/"below" about the API-and-provider boundary. They were already one-right-one-wrong before this change; section order was deliberately preserved rather than "fixed", because correcting one would break the other and both are rule text.Rule inventory
Every heading and every top-level rule in the pre-change files, and where its full text lives now. Generated from
HEAD~1against the post-change tree, not written from memory.CLAUDE.mdrestatements that became pointersCLAUDE.md)AGENTS.md§# API and provider confirmation boundaryAGENTS.md§# This is NOT the Next.js you knowAGENTS.md§# RAG ranking protectionAGENTS.md§# Supabase project safetydocs/agents/codex-review-throttling.md(already linked fromAGENTS.md)localhost:3000.AGENTS.md§# Local server safetydocs/agents/external-skill-precedence.md§## Evidence and calibration are never compresseddocs/agents/wiring-and-bundle-budget.md§# Page and button wiringdocs/agents/wiring-and-bundle-budget.md§ New-route checklistdocs/agents/wiring-and-bundle-budget.md§ NavigationAGENTS.md§# Search chrome behaviour("One owner")docs/agents/external-skill-precedence.md§ PR titles and descriptions are parsed inputdocs/agents/wiring-and-bundle-budget.md§ Gates, and §# Bundle budget- **Design tokens, not hex.**has no counterpart in the rules layer and stays inCLAUDE.md, whole.Full rule-by-rule inventory
Every heading and every top-level rule (213 rules). A rule with no arrow went where its section went; an arrow marks an exception.
AGENTS.md# This is NOT the Next.js you know — stays in
AGENTS.md## Dependency shortcut — stays in
AGENTS.md## Bug-hunter shortcut — full text →
docs/agents/bug-hunter-shortcut.md(heading kept inAGENTS.mdas a pointer)bug-hunterskill first.## Codex review throttling and routing — stays in
AGENTS.md# Local server safety — stays in
AGENTS.mdrun, executenpm run ensureand return the printed URL.localhost:3000,localhost:3001, orlocalhost:3002./api/local-project-idconfirms it is this project.npm run ensurechoos…# Claude Code hook scripts — full text →
docs/agents/claude-hook-scripts.md(heading kept inAGENTS.mdas a pointer).gitattributessets* text=auto eol=lf; all hook blobs measure CR=0.timeout. The default is 60s, whichsession-start.shcan exceed on a cold# Codex Desktop worktree setup — stays in
AGENTS.md# Reasoning effort calibration — stays in
AGENTS.md# Process hardening phases — stays in
AGENTS.md## Bare PR publication is not readiness work — stays in
AGENTS.mdnpm run format, dependency installation or linking,npm run verify:pr-local, tests, …docs/agents/verification-gates.mdverify:cheapmerely because a chan… →docs/agents/verification-gates.mddocs/agents/verification-gates.mddocs/agents/verification-gates.mdnpm run verify:pr-local -- --dry-run --files… → **docs/agents/verification-gates.md`**docs/agents/verification-gates.mddocs/agents/verification-gates.mdnewtask… → **docs/agents/verification-gates.md`npm run ensur… → **docs/agents/verification-gates.md`**npm run formatand commit the result before push. This rule does not apply…npm run verify:releaseonce; this includes the full Playwright project set a… →docs/agents/verification-gates.mddocs/agents/verification-gates.mddocs/agents/verification-gates.mddocs/process-hardening.mdinstead of relying on… →docs/agents/verification-gates.md## Do not pay twice for the verdict GitHub is about to reach — full text →
docs/agents/verification-gates.md(heading kept inAGENTS.mdas a pointer)CIbeing set disables the arbiter outright. GitHub staysDEFERorPROVENverdict is a recommendation printed with# Deleting code you believe is dead — full text →
docs/agents/dead-code-deletion.md(heading kept inAGENTS.mdas a pointer)# Page and button wiring — full text →
docs/agents/wiring-and-bundle-budget.md(heading kept inAGENTS.mdas a pointer)onClick, atype="submit"router.push, or serverredirect()— nevereslint-rules/require-button-wiring.mjs(innpm run lint) fails on an un-wired# Bundle budget — full text →
docs/agents/wiring-and-bundle-budget.md(heading kept inAGENTS.mdas a pointer)production— every chunk a non-mockup route reaches, plus chunks no route manifest claimsroutes— client JavaScript referenced by/and/documents/search, the same journeysmockups— chunks reachable only from/mockups/**. Nobody downloads these, so this is a# Search chrome behaviour — stays in
AGENTS.md# External skill precedence — full text →
docs/agents/external-skill-precedence.md(heading kept inAGENTS.mdas a pointer)globals.cssintentionally override## Evidence and calibration are never compressed — full text →
docs/agents/external-skill-precedence.md(heading kept inAGENTS.mdas a pointer).github/workflows/pr-policy.yml# Supabase project safety — stays in
AGENTS.mdClinical KB Database.mainDEPLOYS TO PRODUCTION. The Supabase GitHub integration has **"Deploy tosjrfecxgysukkwxsowpy.qjgitjyhxrwxsrydablrbelongs toDatabase; treat it as stale and do not use it.supabase/schema.sql,supabase/roles.sql, CI, and deployment tooling must target role `postgr…npm run check:migration-roleafter changing Supabase SQL, migration tooling, CI replay, or disaster-recovery …npm run check:supabase-projectafter changing Supabase env values.supabase migration repair --status applied,# RAG ranking protection — stays in
AGENTS.mdsrc/lib/rag/**, clinical-search, retrieval-selection,pr-policywithout an explicitRAG impact:# Railway project safety — stays in
AGENTS.mdDatabase(5deaad0b-675a-4c13-978e-5ca2b5b877f9) in workspace `big…Database(Next.js app tier, serveshttps://psychiatry.tools) andworker(ingestion) auto-…clinical-kb(4361c04f-dd3c-4ee9-9e97-49e4e5707b70) is superseded with zero active dep…Clinical KB Databaseis the database/auth tier, not a Railway project; see "…RAILWAY_API_TOKEN(personal account token; see.env.example). The project-scoped `R…# API and provider confirmation boundary — stays in
AGENTS.mdnpm run check:supabase-project, live PR/CI tooling, answer-generation checks, ingestion checks against live servi…Run PRshortcut (see "## Run PR shortcut") is standing user confirmation for the specific GitHub a…#
uploadshortcut — full text →docs/agents/upload-shortcut.md(heading kept inAGENTS.mdas a pointer)## Protected and base branches — full text →
docs/agents/upload-shortcut.mdtemporarynororigin/temporaryexists, rungit switch -c temporary.temporaryexists and is not checked out in another worktree, switch to it only when it is clearly safe.origin/temporaryexists, use it only when it is clearly the matching intended branch.temporarybranch state is ambiguous, diverged, checked out elsewhere, or unsafe, stop and ask instead of o…## Required inspection — full text →
docs/agents/upload-shortcut.mdgit status## Safe actions allowed without further confirmation — full text →
docs/agents/upload-shortcut.md## Actions requiring explicit confirmation — full text →
docs/agents/upload-shortcut.mdgit reset --hardgit clean -fdor other destructive cleanupmain,master,develop,release/*, or any protected/base branch## Mixed, suspicious, or unsafe changes — full text →
docs/agents/upload-shortcut.md## Branch cleanup and reference updates — full text →
docs/agents/upload-shortcut.md## Syncing and verification — full text →
docs/agents/upload-shortcut.md## Final report — full text →
docs/agents/upload-shortcut.md## Open PR branch sync (anti-churn) — full text →
docs/agents/pull-request-workflow.md(heading kept inAGENTS.mdas a pointer)GITHUB_TOKENbranch updates are prohibited: bot-authored headsnpm run sync:pr-branches. Apply with the currentupdate-branchorgit merge origin/main,## Run PR shortcut — full text →
docs/agents/pull-request-workflow.md(heading kept inAGENTS.mdas a pointer)mainor another protected branch).main.mainor any protected branch, and never enable auto-merge; the sweep fixes and re…eval:rag,eval:quality,eval:retrieval:quality,verify:release, `check:sup…skip-codex-reviewlabel as a full per-PR opt-out.git merge origin/main; skip and …DIRTY/CONFLICTINGas a real conflict, confirm withgit merge-tree(see "## Open PR bra…## Babysit the pull request, then stop — full text →
docs/agents/pull-request-workflow.md(heading kept inAGENTS.mdas a pointer)npm run ledger:appendrow if it is still owed.gh pr checks|status|view|…,gh run …,## Automated review coverage (owner decision, 2026-08-22) — full text →
docs/agents/pull-request-workflow.md(heading kept inAGENTS.mdas a pointer)scripts/pr-policy.mjs…## PR bundling (reduce one-task-one-PR churn) — full text →
docs/agents/pull-request-workflow.md(heading kept inAGENTS.mdas a pointer)RAG impact:line together with one that does not.## Clinical Governance Preflighttogether with unrelated chores.## Anti-conflict and CI-speed operating procedure — stays in
AGENTS.md### Prevent conflicts before they start — stays in
AGENTS.mdorigin/mainworktree/branch (newtask); do not pile new work onto a stale head that already s…docs/branch-review-ledger.mdanddocs/outstanding-issues.mdare serial-only: normal PRs must not…DIRTY/CONFLICTINGa real conflict, rungit merge-tree --write-tree origin/main …. C…### Speed CI without skipping quality — stays in
AGENTS.mdnpm run format**and …PR mergeabilitycheck uses trustedpull_request_targetevents and r…gh pr checkscannot read ch…tests/flake-ledger.jsononly after three reproduct…### Operator sync (explicit only) — stays in
AGENTS.mdnpm run sync:pr-branches. Apply with confirmation and human/oper…## Codex productivity defaults — stays in
AGENTS.md## Repository productivity skills — full text →
docs/agents/repository-skills-and-issues.md(heading kept inAGENTS.mdas a pointer)plan: plan risk-scoped verification before non-trivial changes.fix: diagnose and repair local verification failures with the smallest reproducer.clinical: assemble clinical, privacy, source, and rollback evidence.ui: inspect the running app across routes, breakpoints, and accessibility modes.rag: validate retrieval and answer changes offline first, then prepare live-eval approval gates.operations: turn pending operator debt into a deduplicated, approval-gated batch.task: manage safe start, handoff, merge proof, and cleanup transitions.## Outstanding-work memory (
/issues) — full text →docs/agents/repository-skills-and-issues.md(heading kept inAGENTS.mdas a pointer)/issues, invoke theissuesskill (.claude/skills/issues/SKILL.md): run `npm run issues:re…/issues add|done|update|queue …queue immutable request files underdocs/outstanding-issues-inbox/. Ordinary br…SessionStarthook (.claude/hooks/issues-surface.sh, wired in.claude/settings.json) auto-surfaces the rec…## Codex GitHub review behavior — stays in
AGENTS.md## Codex Cloud environment — full text →
docs/agents/codex-cloud-environment.md(heading kept inAGENTS.mdas a pointer)bash scripts/setup-codex-cloud.sh && bash scripts/install-codex-cloud-command-shims.sh.CODEX_CLOUD_ACCESS_PROFILE=offlinefor ordinary/RAG work; useconnectedonly with explicit provider …bash scripts/check-codex-cloud-raw-env.sh,npm run check:codex-cloud, and `npm run check:codex-….github/workflows/authenticated-live-tests.ymlwith manual dispatch, never from …bash scripts/delete-codex-cloud-branch-with-pat.shis operator-only outside Cloud.## Cursor Cloud specific instructions (not Codex Cloud) — stays in
AGENTS.mdCLAUDE.md# PsychSift — orientation for AI assistants — stays in
CLAUDE.md## How the instruction files divide up — stays in
CLAUDE.md## Highest-consequence rules — heading stays in
CLAUDE.md; every bullet became a pointer (canonical text in the table above)Clinical KB Database, ref → restatement; canonical text listed abovelocalhost:3000. Usenpm run ensureand the URL it prints. → restatement; canonical text listed above## Stack and runtime — stays in
CLAUDE.md## Repository layout — full text →
docs/codebase-index.md§ Orientation summary (CLAUDE.mdkeeps a pointer)## The two flows that matter — full text →
docs/codebase-index.md§ Orientation summary (CLAUDE.mdkeeps a pointer)## Development workflow — stays in
CLAUDE.md## Conventions the gates enforce — heading stays in
CLAUDE.md; six of seven bullets became pointers, the seventh stays wholerouter.push/ serverredirect()— never a raw → restatement; canonical text listed aboveeslint-rules/no-hardcoded-hex.mjs, plus type-scale, — stays inCLAUDE.md, wholescripts/pr-policy.mjshard-blocks merges when a → restatement; canonical text listed abovesrc/app/mockups/**and*-mockups.tsx→ restatement; canonical text listed above## Repo-specific tooling — stays in
CLAUDE.md.claude/skills/):newtask(fresh worktree off latestmain),.claude/agents/):rag-retrieval-reviewer,.agents/skills/):npm run skillslists the canonical single-wordSessionStarthook surfaces the recommended queue from🤖 Generated with Claude Code
https://claude.ai/code/session_017ou4w8atP9kDKHVAXUvYPe