Finish the PsychSift rename across the repository's living surfaces - #2461
Conversation
The app was renamed to PsychSift, but the rename stopped at the product code. The repo front page, the security policy, the container image labels and the living reference docs still advertised the retired name — including a worker runbook quoting a startup log line the worker has not emitted since the rename. Renames only surfaces that describe the system as it is now. Dated reports, plans, specs, ledgers and archives keep the old name: they record what was true when they were written, and rewriting history to match a later name makes the record less accurate, not more. `Clinical KB Database` and `Clinical KB Staging` stay throughout — those are the live Supabase projects' real names, pinned by AGENTS.md, not product names. Two codebase-index references that meant the database rather than the product are now explicit about which they mean. Extends the existing retired-name guard with a `userFacingProductSurfaces` list so these files cannot silently revert, and adds the Staging project to the regex's negative lookaheads. The guard-the-guard fixture moves from AGENTS.md, which is now clean, to a frozen quarterly archive that carries the old name by design. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XHamg4hw5vg7EiNTjk1yu6
|
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: Pro Plus 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 |
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_3405e0d4-c1ca-40f6-85d4-0fe90bf0e1ca) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b4e1a67db9
ℹ️ 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".
|
@codex resolve actionable Codex review findings for this pull request and current head using the repository instructions. This is the pull request's single automatic repair pass: do not perform a fresh review, create new standalone findings, or request another review. Work only the existing unresolved Codex threads on the current head. The only repository destination is BigSimmo/Database, and the only branch destination is the pull request head branch claude/psychsift-rename-logo-5cq3nw at starting commit b4e1a67; never publish fixes to a detached or synthetic work branch and never create a stacked pull request. Use the authenticated GitHub connector to commit each approved fix to BigSimmo/Database:claude/psychsift-rename-logo-5cq3nw, then verify that the pull request head contains the published commit before reporting success. Always fix P0 and P1 findings. For P2 and lower findings, fix only clear, scoped, low-risk issues; otherwise disposition them with a concise reason. For a fixed thread, reply with as the first line and as the second line. For a no-code disposition, use followed by . These result markers authorize the workflow to close that exact thread only after it verifies a fixed commit is the pull request head; a local-only commit is not a fix. If publication or verification fails, do not use either result marker, do not claim success, and leave the thread open with the blocker. If human input or new authorization is required, do the same. Finish only after every actionable thread is fixed or dispositioned and closed, or explicitly left open for a human decision. Do not update the branch from main, address unrelated reviews, broaden scope, or create more than one scoped fix commit. Do not use external APIs, paid services, credentials, dependency changes, or broad refactors unless explicitly authorized. Add targeted tests where behavior changes and run the narrowest relevant validation. |
Codex review on #2461 found the guard list covered the app Dockerfile while Dockerfile.worker still shipped the retired name in both published OCI labels, and that the list omitted most of the surfaces this rename had already touched — so they could regress silently. Both parts were correct. The root cause was a truncated sweep: the original repository-wide search was piped through `head -30`, which cut off Dockerfile.worker, and the resulting partial list was treated as complete. Renames the three remaining occurrences in Dockerfile.worker, plus three more living surfaces the same truncation hid: CONTEXT.md, .design-sync/NOTES.md and .design-sync/conventions.md. Expands userFacingProductSurfaces from a 12-file sample to all 34 living surfaces this rename touches, so the guard's coverage matches its stated purpose. LICENSE stays out deliberately — its protected-names clause keeps the former name alongside the current one. Adds a test that enumerates Dockerfile* from disk and asserts each is guarded, so a second published image cannot again be renamed without its guard entry. Verified it fails without the fix. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XHamg4hw5vg7EiNTjk1yu6
|
Codex Review: Didn't find any major issues. More of your lovely PRs please. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
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". |
|
| run 1 | run 2 | |
|---|---|---|
| pinned system clock | Tests 17 passed (17) |
Tests 17 passed (17) |
unpinned (current main) |
Tests 2 failed | 15 passed |
Tests 1 failed | 16 passed |
This also explains a second, intermittent failure in the same file — "refuses the next move rather than guessing a version the service did not confirm" — which appears in some unpinned runs and never in pinned ones. One root cause, two symptoms. Worth noting because that one would otherwise get filed as an unrelated flake and re-run until green.
Not a flake, and not fixable by waiting. It is a fixed-date fixture that the calendar has caught up with, so it will keep failing and will worsen: the file also carries CONTACT_DAY = "2026-08-31", which rolls into September tomorrow.
Why the fix is not in this PR
Per AGENTS.md, a failure in code unrelated to the change gets a proposed patch rather than a widened PR — this is a product-rename PR, and Caring Contacts scheduling is a clinical-adjacent surface that deserves its own review rather than riding along in a docs change. No fix PR for it exists yet (the only other open PRs are #2296 and #2297, both Dependabot), so there is nothing to port.
The patch above is two lines plus imports, test-only, and verified. I can raise it as its own PR on request; once it lands, this branch goes green with no change of its own.
Everything else on this PR is green
Build, PR policy, PR mergeability, Change scope, Semgrep, Gitleaks, GitGuardian all pass on 0ac2621, and the one Codex review finding is fixed and resolved. Unit coverage is the only thing standing between this PR and the auto-merge that is already armed.
Generated by Claude Code
CI triageCI failed on this PR. Automated classification of the 2 failed job(s):
Compared with main CI run #14502 (failure). 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_1e7feec4-5e24-4fca-afce-ac842fde9a37) |
Unit coverage baseline fix publishedCurrent head
A full local |
Summary
docs/worker-deploy-runbook.md, which told an operator to look for the startup log lineClinical KB worker started.worker/main.ts:2057has emittedPsychSift worker startedsince the rename, so the runbook pointed at a string the worker never prints.docs/codebase-index.mdreferences that said "Clinical KB" but meant the Supabase project rather than the product. Both now nameClinical KB Databaseexplicitly.LICENSE, keeping "Clinical KB" alongside it — the former name still warrants the same no-endorsement protection.scripts/list-database-skills.mjswith auserFacingProductSurfaceslist covering all 34 living surfaces this rename touches, and addsClinical KB Stagingto the regex's negative lookaheads next toClinical KB Database.Dockerfile*from disk and asserts each is guarded, so a second published image cannot be renamed again without its guard entry.Deliberately not renamed, so the omissions do not read as misses:
Clinical KB DatabaseandClinical KB Stagingare those databases' real names, pinned byAGENTS.md. Renaming them in prose would point readers at projects that do not exist.LICENSE. Excluded from the guard on purpose: its protected-names clause keeps the former name alongside the current one, so guarding it would force out a name that belongs there.clinical-kb-*storage keys, cache prefixes, tool ids and directory paths are addresses, not names. Renaming the localStorage keys would silently reset saved theme, last-mode and guide-progress state for anyone already using the app.No user-visible application behaviour changes in this PR. The app's name, icons, manifest and PWA metadata were already PsychSift on
mainand are already live onpsychiatry.tools.Review findings addressed
Codex raised one P2 on
b4e1a67— the guard covered the appDockerfilewhileDockerfile.workerstill shipped the retired name in both published OCI labels, and the list omitted most renamed surfaces. Both parts were correct and are fixed in0ac2621(thread, resolved).Root cause, recorded because it explains the shape of the miss: the original repo-wide sweep was piped through
head -30, truncating output beforeDockerfile.worker, and the partial list was treated as complete. Re-running it untruncated surfaced three further living surfaces the same truncation hid —CONTEXT.md,.design-sync/NOTES.md,.design-sync/conventions.md— now also renamed. The guard list is now built from the diff rather than sampled.Verification
npm run verify:pr-local— ran onb4e1a67; result reported honestly:EXIT=1,failed: test (exit 1). 24 of 24 static, docs, workflow, lint and typecheck gates completed clean (Test Files 3 failed | 929 passed (932),Tests 3 failed | 11718 passed | 1 skipped (11722)).buildand the RAG/medication fixture checks were not reached.The three failures are pre-existing on
main, not introduced here. Verified by checking outorigin/main(95b5c1b) into a clean worktree and running the same three files: identicalTest Files 3 failed (3) / Tests 3 failed | 22 passed (25). They are environmental — this container holds a shallow clone, andtests/rag-plan-package-parity.test.tsfails explicitly withmanifest reconciledBase is unavailable locally: f3d1a3cce2c943ad3083425ed9c7c46dbef23087;tests/clinical-hazard-controls.test.tsandtests/privacy-readiness-contract.test.tsfail from the same missing local state. GitHub'sUnit coveragejob runs against a full clone and is the authoritative signal for these.Note on the exit code: the wrapper reported success while the gate itself exited 1. Exit code alone was not proof here — the decisive line was, which is why the summary above is quoted rather than summarised.
Focused evidence on the current head (
0ac2621):npx vitest run tests/database-skills.test.ts— 13 passed (13), including the newDockerfile*coverage assertion.npx vitest run tests/database-skills.test.ts tests/repo-hygiene.test.ts tests/codebase-index-coverage.test.ts— 78 passed (78).Dockerfile.workerremoved from the array:AssertionError: Dockerfile.worker publishes OCI labels and must be guarded— the test fails without the fix, so it is a real guard.node scripts/list-database-skills.mjs --check— "Database skill system valid: 35 canonical skills, 8 aliases, 67 repository SKILL.md files across 4 surfaces."npm run format:changed— "All matched files use Prettier code style!"node scripts/check-docs-links.mjs— "docs link check passed: 4710 repo path references resolve."npx eslint scripts/list-database-skills.mjs tests/database-skills.test.ts— clean.Scope note: the selector fails closed to the heavy route (
lint,typecheck, full unit suite,build) because the diff touchesscripts/list-database-skills.mjsandtests/database-skills.test.tsalongside the documentation. That routing is correct for executable scope and was not narrowed.npm run verify:ui— UI verification not run: no UI, routing, styling, browser-behaviour, reduced-motion or forced-colors change.classifyPullRequestFilesreportsui: false.npm run verify:release— not run: no release or handoff-confidence claim is being made here.npm run eval:retrieval:quality— not applicable: no retrieval, ranking, selection, chunking or scoring behaviour changed (ragRanking: false).npm run eval:rag/npm run eval:quality— not applicable: no answer generation, synthesis prompt or answer post-processing changed.npm run check:production-readiness— not run: no clinical workflow, privacy, environment, Supabase, source-governance or deployment behaviour changed.docs/privacy-impact-assessment.mdanddocs/clinical-governance.mdare touched, but only to replace the product's retired name in prose; every assessed data flow, boundary and retention statement is byte-identical apart from that noun.npm run check:deployment-readiness— not run: see the container-image note under Risk below.Risk and rollout
DockerfileandDockerfile.worker: a leading comment and theorg.opencontainers.image.title/image.descriptionOCI labels in each. Labels are descriptive metadata read by registry tooling; they do not affect the build graph, layer contents, entrypoint, or runtime. NoFROM,RUN,COPY,USER,EXPOSEorSTOPSIGNALinstruction is touched in either file, so both produced images are functionally identical. TheContainer images / build-and-verifyjob exercises this.GETof the already-publicpsychiatry.toolsHTML, manifest and icon endpoints, to confirm production already serves the PsychSift name and the current mark; it mutated nothing.src/lib/rag/**, retrieval RPCs, golden fixtures and ranking tests are all outside this diff;classifyPullRequestFilesreportsragRanking: false).Clinical Governance Preflight
Not applicable to this diff, and stated rather than left as silent unchecked boxes.
classifyPullRequestFilesreportsclinicalRisk: false: the change touches no ingestion, answer-generation, search/ranking, source-rendering, document-access, privacy or production-environment behaviour. Two clinical-governance documents are edited, but only to replace the product's retired name in prose — no assessed data flow, boundary, retention period, review status or conservative-failure statement is altered. Worth recording explicitly all the same:Clinical KB Database(sjrfecxgysukkwxsowpy). This PR deliberately preserves that name everywhere it appears, and the guard's negative lookaheads now protect both it andClinical KB Stagingfrom a future rename sweep.Notes
The rename's original blind spot is worth naming, because it is the reason a guard now exists rather than just a corrected file. #2452/#2453 renamed the product everywhere a user reads it and added a check for the plugin metadata that skill routing matches on. Nothing covered the surfaces a reader meets first — the repo front page, the security policy, the container labels, the reference docs — so those drifted quietly for weeks, the worker runbook drifted into being actively wrong, and a published image kept the retired name in its OCI labels.
The
userFacingProductSurfaceslist closes that gap without overreaching into the historical record, and theDockerfile*enumeration test closes the narrower gap that a hand-maintained list of any length can silently fall behind the thing it guards.Note
Low Risk
Mostly documentation and OCI label text plus an offline skills hygiene check; no runtime, auth, data, or deployment instruction changes beyond descriptive image metadata.
Overview
Completes the PsychSift product rename on the repository surfaces readers hit first—README, agent orientation, security policy, design-sync notes, and a broad set of maintained docs—while leaving live Supabase project names (
Clinical KB Database,Clinical KB Staging) and historical archives unchanged.Container metadata on both
DockerfileandDockerfile.workernow use PsychSift in comments and OCItitle/descriptionlabels (descriptive only; no build/runtime graph changes).docs/worker-deploy-runbook.mdis updated to expect the startup logPsychSift worker started, matching current worker output.LICENSEadds PsychSift to the protected-names clause and keeps Clinical KB for no-endorsement coverage.scripts/list-database-skills.mjsgains auserFacingProductSurfaceslist (34 paths) checked bynpm run check:skills, with regex lookaheads so database project names are not flagged;tests/database-skills.test.tsasserts every rootDockerfile*is on that list.Unrelated:
tests/caring-contacts-contact-time-adjustment.dom.test.tsxpins fake timers for stability. No application behaviour, routing, or RAG changes.Reviewed by Cursor Bugbot for commit 489fd86. Configure here.