audit fixes (P11): correct the documentation that describes routes, gates and scripts that no longer exist - #2632
Conversation
…(L72) Defect: ingestion-state-machine.md, worker-deploy-runbook.md and deployment-architecture.md still said the ingestion lease has no heartbeat and that any job over WORKER_STALE_AFTER_MINUTES is reclaimed while its worker is alive. The worker has refreshed locked_at (guarded by locked_by = workerId) since 2026-07-08 and the completion/failure RPCs are fenced on p_worker_id, so the 45-minute window is a liveness signal. Trigger: reading any of the three documents for replica-sizing or incident diagnosis. Proof: docs-only; `npm run docs:check-links` and `npm run docs:check-scripts` pass on the edited files. The state-machine document now carries a dated status banner and marks each historical "no heartbeat" statement as closed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
…amed links (L77) Defect: docs/README.md, which CLAUDE.md names as the categorised map of maintained docs, had no entry for the binding Care Plan design spec, glossary, plan or ledgers; and claude-build-handover-2026-08-21.md linked three files under their pre-rename `ed-care-plans` names, which no longer exist. Trigger: a resuming agent following the handover's "Existing planning artifacts" table, or looking for the Care Plan product authority from the docs index. Proof: docs-only; `npm run docs:check-links` resolves the three repaired links and the new index row (5466 references). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
…re-sandbox world (L79) Defect: ward-management-mode-map.md said the role-first design "has not been built yet" and listed 8 of 17 routes as "what is currently live"; ward-flow-context.md listed `/ward-management` paths that 404 everywhere since the sandbox move; the Phase 3 workspace README claimed 32 files where the directory holds 50. Trigger: any route-coverage or navigation reasoning that starts from those documents. Proof: docs-only. The added table names the nine Phase 3-5 routes from `src/components/ward-management/ward-nav.ts` (the source of truth `tests/ward-landmarks.test.ts` already pins at 17); `npm run docs:check-links` resolves every cited path. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
…t-only (L83) Defect: mockups/README.md "Production behavior" and the generated site-map caveat said /mockups/favourites-hub and /mockups/medication-prescribing forward in production. Both are page redirect() calls; src/proxy.ts returns 404 for every non-developer-gated /mockups/** path before a page renders, so only /mockups/document-search-command (in staticRouteRedirects) still redirects in production. Trigger: a production request to either path, or a reader relying on the documented compatibility guarantee. Proof: docs and generator string only; `npm run sitemap:update` then `npm run sitemap:check` pass with the regenerated docs/site-map.md. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
… policy (L84) Defect: the generator's "Known caveats" line said robots.txt disallows indexing of /mockups and that every /mockups route 404s in production. robots.txt (PRIVATE_APP_ROBOTS_TXT) allows everything; the control is the per-response X-Robots-Tag: noindex, nofollow header in next.config.ts, and the four developer-gated subtrees are exempt from the production 404. Trigger: every `npm run sitemap:update`, which re-emitted the false statement into docs/site-map.md. Proof: generator string only; `npm run sitemap:update` regenerated docs/site-map.md and `npm run sitemap:check` passes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
…gate orientation (L85) Defect: mockups/README.md described the pre-#1779 bundle gate (one total, +9.4% against 10%), carried a hard-coded folder count, and said only Favourites/Tools mockups hide the composer and that standalone mockups must move outside /mockups. mockups-layout-client.tsx is now the suppression registry with dozens of route rules and two shell bypasses (Ward Flow, Developer Hub), and bundle-budget.json keeps mockups in a separate 25% bucket. Trigger: anyone adding a mockup or reasoning about why a scratch route was deleted. Proof: prose only; statements checked against src/app/mockups/mockups-layout-client.tsx, bundle-budget.json and commit 89245e7 (#1779). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
…e-test pin with it (L86) Defect: public/llms.txt still called the product "Clinical Guide" (last edited 2026-07-07, before the 2026-08-28 rename) and described /services, /forms and /differentials as opening records although each bare path is a proxy redirect to /?mode=<id> or, when submitted, to <mode>/search. tests/ui-smoke.spec.ts pinned the stale name, so the file could not be corrected alone. Trigger: any agent or crawler reading /llms.txt for product orientation. Proof: the one ui-smoke assertion now expects the brand name (BRAND_NAME in src/lib/brand.ts); route statements checked against src/lib/consolidated-mode-home-redirect.ts and the (search-app) route tree. No unit test covers public/llms.txt; the brand-copy test scans src/ only and is outside this change's owned files. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
…n practice (L87) Defect: docs/pwa.md said /apple-icon is served stale-while-revalidate from the shell cache. Next emits the generated Apple icon as /apple-icon?<contenthash>, and public/sw.js rejects every request with a query string before the allow-list is consulted, so the browser's actual request is never cached. Trigger: reviewing the cache contract or the manual icon checklist against observed service-worker behaviour. Proof: docs-only; traced through public/sw.js (hasSensitiveRequestSignals: url.search !== "") and Next's next-metadata-image-loader hashQuery. `npm run docs:check-links` passes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
…(L89)
Defect: docs/scripts-index.md said every top-level script was named
below, but 44 top-level .mjs/.ts scripts — including gate scripts the
repo depends on (check-diff-integrity, check-ledger-write-discipline,
check-privacy-readiness, check-dead-code-candidate, ledger-inbox) — had
no entry, so the doc's live/infra/one-shot triage convention was
unreliable for them.
Trigger: retirement triage or orientation from the scripts index.
Proof: a basename/stem scan of scripts/*.{mjs,ts,cjs} against the doc
now reports zero misses; every npm script name cited exists in
package.json; `npm run docs:check-scripts`, `docs:check-inventory` and
`docs:check-links` pass.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
… defines them (L96)
Defect: README.md listed verify:cheap as six named gates plus
lint/typecheck/test and said static-pr always runs action-pin, lint and
typecheck; docs/process-hardening.md listed verify:cheap as
check:runtime, sitemap:check, lint, typecheck and unit tests. The chain
runs 37 static gates before lint/typecheck/test (check:gate-manifest
pins the count), and static-pr's unconditional baseline is runtime,
installed-lock parity, the CI-scope and verification-plan self-tests,
diff integrity and changed-file format; lint/typecheck are scope-gated.
Trigger: a reader sizing local verification or CI coverage for a
docs/workflow-only PR.
Proof: prose only; counts checked against `node
scripts/check-gate-manifest.mjs` ("37 static gates") and the `if:`
conditions on each static-pr step in .github/workflows/ci.yml.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
…od (L101) Defect: branch-review-archival-policy.md stated the records directory totals 2.4 MB with no method, two lines above its own rule that a figure must carry its method; 2.4 MB is the allocated-block size, the apparent size is 0.39 MB. The src/docs comparison figures had also drifted. Trigger: any reader of the "Growth is the price of the design" section. Proof: prose only; figures re-measured on this branch with `du -sh` and `du -sh --apparent-size`, entry count with `ls | wc -l`, tracked Markdown count with `git ls-files docs`. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
…superseded (L97) Defect: design-qa.md at the repository root reported "final result: passed" for a constellation view that Phase 2 retired to a redirect stub, and cited untracked artifacts/ and workstation-local evidence paths; no gate scans root files other than README.md and AGENTS.md. Trigger: a reader taking the root QA verdict as current. Proof: a dated superseded banner naming the retirement and the untracked evidence; the file is kept in place (not moved or deleted) per the package notes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
…rator fallback (L100) Defect: docs/site-map.md rendered "Route discovered from app directory" for /forms/search, /formulation/search, /services/search, /specifiers/search and the five Sources catalogue routes, because the generator's description map had no entry for them; sitemap:check passed because the placeholder is the generator's own output. Trigger: every `npm run sitemap:update` since the Sources mode landed. Proof: descriptions taken from each page's metadata in src/app/(search-app)/**/page.tsx and added to the generator's source of truth; `npm run sitemap:update` regenerated docs/site-map.md and `npm run sitemap:check` passes; no non-mockup, non-API route carries the fallback text now. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
Defect: CLAUDE.md sends readers to docs/README.md for "every maintained doc, categorised", but the index listed 115 of 587 documents; the 18 docs/agents rule files AGENTS.md delegates to, 30 root-level maintained docs (operations runbooks, database remediation, RAG evaluation, design and filter contracts, the Ward Flow context and ledgers) and every sub-folder document were reachable only by directory listing. Trigger: any reader or agent starting from the documentation index. Proof: an "Also catalogued" list under each existing category names every remaining tracked document, one line each, with the document's own title and opening sentence; the candidate list was generated from the repo-awareness snapshot's document inventory and re-checked against the index's link targets (zero uncatalogued documents besides the index itself, which now lists itself). `npm run docs:check-links`, `docs:check-scripts`, `docs:check-index` and `check:skills` pass. `check:repo-awareness-snapshot` reports the committed snapshot behind the index; that snapshot is regenerated by the ledger-housekeeping package, not here. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FSPY4VSqg7WVukCvmHQP9t
… map main landed the Sources mode redesign (#2593) with route descriptions that match the new behaviour; this branch still described the pre-redesign structure. Kept main's Sources block and this branch's /services/search entry, took main's ward-flow README count line (same 50, with its provenance), and regenerated docs/site-map.md with npm run sitemap:update rather than resolving it by hand. npm run sitemap:check passes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHSyfuC6mS98ystWFiitAR
…L89)
Defect: docs/scripts-index.md claims "Every top-level .mjs/.ts/.cjs script is
named below," but check-chain-mirror-parity.ts, check-dependency-drift.mjs,
check-design-drift-ratchet.mjs, stamp-service-worker.mjs, check-ward-data.mjs
and run-ward-tests.mjs landed on main (2026-09-03/04, after the L89 commit)
and were never added, making the doc's own completeness claim false again on
this branch. github-action-pins.mjs is left out deliberately: it is a data
module imported only by the already-catalogued check-github-action-pins.mjs,
matching the doc's own "small shared helpers grouped rather than itemised"
carve-out.
Trigger: reviewing L89 by re-deriving the uncatalogued set against this
branch's actual scripts/ directory rather than trusting the commit message.
Proof: npm run docs:check-scripts and npm run docs:check-inventory both pass
after the edit; a script re-diffing docs/scripts-index.md against
scripts/*.{mjs,ts,cjs} finds one remaining top-level file (the deliberately
grouped helper above).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DHSyfuC6mS98ystWFiitAR
Defect: README.md and docs/process-hardening.md said verify:cheap runs 37 static/consistency gates, matching the count at the time L96 was fixed (2026-09-02). A gate landed on main since then (the chain now runs check:runtime through check:owner-scope inclusive, 38 gates before lint/typecheck/test), and npm run check:gate-manifest already asserts 38 — so the two prose copies were wrong again on this branch. CLAUDE.md already said 38 and needed no change. Trigger: reviewing L96 by re-running check:gate-manifest against this branch's package.json rather than trusting the commit's counted total. Proof: `npm run check:gate-manifest` reports "the 38 static gates are documented consistently" after this edit; `node -e` confirms check:owner-scope is gate index 38 of 41 in verify:cheap:internal, immediately before lint. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHSyfuC6mS98ystWFiitAR
…its method (L101)" The programme's own scope table excludes docs/branch-review-* from this package's owned files, and docs/branch-review-archival-policy.md matches that pattern. The content of the reverted change was verified accurate and the repository's ledger guards (check:branch-review-ledger, check:ledger-write-discipline) both pass on it, so this is a scope decision, not a correctness one: L101 is listed in this package's findings while its file is excluded from its owned list. Deferring to the boundary rather than deciding unilaterally on a ledger-adjacent file. L101 is reported to the owner for a ruling and can be re-applied in one commit if it is judged in scope. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHSyfuC6mS98ystWFiitAR
A large merge from origin/main expanded Ward Flow from 17 to 32 routes (31 renderable + 1 redirect) and renamed /mockups/ward-flow/patients/[patientId] to /mockups/ward-flow/movements/[movementId], but ward-management-mode-map.md and ward-flow-context.md still said 17 routes and cited the old path. Verified against, in order: (1) tests/ward-landmarks.test.ts's RENDERABLE_ROUTES (31 entries) + REDIRECT_ONLY_ROUTES (1) and its own route-count assertions; (2) a direct filesystem scan of src/app/mockups/ward-flow (32 page.tsx files, including the constellation redirect), which matched the test's list exactly; (3) docs/site-map.md on this branch, which lists the same 32 routes with the same paths. All three sources agreed, so no route was invented. Updated the coordinator-view/role-screen/specialist-board tables and route counts in both docs, replaced every /patients/[patientId] reference with /movements/[movementId], and corrected the "Routes today" summary in ward-flow-context.md to list the full current route set instead of the Phase 3-5-only subset. Left the historical Phase-status narrative (§4's worktree/phase table, §9-§11) untouched — it documents a past build checkpoint, not a current-state claim, and is outside this finding's scope. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHSyfuC6mS98ystWFiitAR
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHSyfuC6mS98ystWFiitAR
… catalogued docs The L99 and L89 fixes in this package catalogue every tracked document under docs/ and the previously uncatalogued top-level scripts. data/repo-awareness-snapshot.json records a catalogued flag per document, so those fixes make the committed snapshot stale and check:repo-awareness-snapshot fails closed on it. Regenerated with npm run snapshot:repo-awareness; the diff is the catalogued flags flipping to true plus the captured revision, with no route or module changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHSyfuC6mS98ystWFiitAR
…st pins (L83/L84) The L83/L84 caveat rewrite replaced "legacy compatibility route" with "page-level compatibility redirects", which is more accurate but drops the exact phrase tests/site-map.test.ts:207 pins. That test file is not owned by this package, so the caveat now carries both: the routes are named legacy compatibility routes, and the sentence still says their redirects work in development only while production returns 404 first. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHSyfuC6mS98ystWFiitAR
# Conflicts: # data/repo-awareness-snapshot.json # docs/site-map.md # scripts/generate-site-map.ts
…n merge The snapshot records the revision it was captured at, so regenerating it before the merge commit left it pointing at a sha that is no longer HEAD and check:repo-awareness-snapshot failed closed on it. Regenerated on the merged tree. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHSyfuC6mS98ystWFiitAR
|
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 |
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
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_6f8faa5b-e7bb-454d-becd-44ed9cae500e) |
…ND_NAME pin Main's PsychSift rename reached public/llms.txt independently and shortened the Purpose line, dropping "private, local-first" and the sentence saying this is a clinical reference prototype and not validated clinical decision support. That disclaimer is the repository's own framing of what the product is, so the fuller description is kept rather than main's shorter one. The smoke-test pin goes the other way: main replaced the hardcoded product name with the BRAND_NAME constant, which cannot drift, so that side wins. The site map and repo-awareness snapshot are regenerated from the merged tree. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHSyfuC6mS98ystWFiitAR
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_9edb5054-6ba1-4887-9751-99d5ff2d204f) |
CI triageCI failed on this PR. Automated classification of the 2 failed job(s):
Compared with main CI run #15708 (cancelled). That run's conclusion is an aggregate and did not exercise Classification is evidence routing, not permission to ignore a failure. Exact quarantined Playwright identities remain governed by the flake ledger. |
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_da208789-94cc-4a8f-95cb-be39a0bb87e3) |
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_c5b67097-d181-4025-9ef0-88ca4a38ce3d) |
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_084834ea-4df0-4ba6-b8f4-87fbf7307f5b) |
Summary
Audit remediation package P11 — Documentation drift, from
docs/audit/full-repository-audit-2026-09-02.md(PR #2573). Findings:L72,L77,L79,L83,L84,L85,L86,L87,L89,L96,L97,L99,L100,L101.Every fix corrects a statement that was true once and is not true now. The pattern the audit found is that a document describes a route, gate count, script inventory or caveat that the code has since moved past, and nothing ages the claim — so a reader trusts it.
Two commits are consequences rather than findings, and both are worth a reviewer's eye:
828aaad9f—data/repo-awareness-snapshot.jsonrecords acataloguedflag per document, so theL99andL89fixes make the committed snapshot stale andcheck:repo-awareness-snapshotfails closed on it. Regenerated with the repo's own generator; the diff is those flags flipping totrueplus the captured revision, with no route or module change.3882b3644— theL83/L84caveat rewrite replaced the phrase "legacy compatibility route" with "page-level compatibility redirects", which is more accurate but drops a substringtests/site-map.test.ts:207pins word for word. That test file is not in this package's owned list, so rather than edit it the caveat now carries both: the routes are named legacy compatibility routes, and the sentence still says their redirects work in development only while production returns 404 first.Tests 7 passed (7).652a9d571reverts theL101fix (quoting the records-directory size with its method) pending a ruling on whetherdocs/branch-review-archival-policy.mdis in this package's scope.L101is therefore not fixed here.Merge conflict resolved against main
Main's Sources redesign (#2593) and the
/medicationsconsolidation both landed while this branch was open, conflicting inscripts/generate-site-map.tsand its two generated outputs. Resolved as a union: this branch's new/formulation/search,/forms/search,/services/searchand/specifiers/searchroute descriptions are kept, and main's newer/medicationsdescription wins ("Compatibility redirect to the shared Medication (prescribing) home"), because main changed it for a reason this branch predates.docs/site-map.mdanddata/repo-awareness-snapshot.jsonwere then regenerated from the resolved generator rather than hand-merged.RAG impact: none
Verification
npm run verify:pr-local— result:- completed: check:runtime, check:installed-lock-parity, format:changed, check:diff-integrity, 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, check:github-actions, check:ci-scope, check:gitleaks-pinned, check:ci-triage, check:pr-policy, check:gate-manifest, check:skills, check:pr-mergeability, check:verification-plan, lint, typecheck, test, build, check:rag:fixtures, check:medication-interactions, check:medication-lexicon-report·- failed: (none)·- not reached: (none)·Tests 15135 passed | 2 expected fail | 3 skipped (15140)(the gate runner recorded exit code 0)npm run check:diff-integrity—[diff-integrity] PASS — 1 changed test file(s), 91 -> 91 test case(s), against base 33c2dc161.No test case removed, no floor raised.npm run docs:check-links—docs link check passed: 7144 repo path references resolve.This gate ran on the merged tree, after the conflict resolution above — not on the pre-merge branch.
Verification not run:
npm run verify:ui— one Playwright spec is touched (tests/ui-smoke.spec.ts, thellms.txtbrand pin forL86); browser proof is left to CI and no narrowed run is claimed as the full gate.Verification not run:
npm run verify:release, and every provider-backed gate — all work was offline.Risk and rollout
public/llms.txtwith its matching test pin. No runtime behaviour changes.L101is deliberately unresolved pending the scope ruling above.Notes
docs/codebase-index.mdandCLAUDE.md, both outside its owned list — are recorded in PR audit fixes (P5): close the developer-hub gate gaps and bound the administrator ingestion routes #2624's body as P5's residual.🤖 Generated with Claude Code
https://claude.ai/code/session_01DHSyfuC6mS98ystWFiitAR
Generated by Claude Code
Note
Low Risk
Docs and generated snapshot/metadata only; no runtime, auth, or data-path changes in the shown diff.
Overview
Documentation drift remediation (audit P11): README now matches how verification and CI actually behave —
verify:cheapis described as 38 static/consistency gates (throughcheck:owner-scope, discoverable viacheck:gate-manifest) plus lint/typecheck/test, and thestatic-prsection explains a small always-on baseline with action-pin, lint, typecheck, and other static gates selected by change scope rather than always running the full static set.design-qa.mdgains a prominent superseded notice: the Ward Flow constellation QA is historical (constellation route is redirect-only; cited PNG evidence is not in the repo).data/repo-awareness-snapshot.jsonis regenerated socataloguedflags and counts reflect the bulk docs indexing work (~590 catalogued vs ~268 still uncatalogued) and an updated captured revision — no application route/module changes in that file beyond metadata.Reviewed by Cursor Bugbot for commit 4bfbff8. Configure here.