Repository navigation
fix: align Claude and Codex backend selection and verify shared handoff - #600
Conversation
|
ZETETIC-REVIEW: APPROVE Reviewed at head db22b16 (branch Move 0: Ledger / seen-defect checkNo un-issued seen-defect rationalizations found. The body explicitly enumerates what it does NOT cover ("full suite has not been run locally", "no Windows coverage", "no PostgreSQL handoff", "no mutation campaign") without dismissing any observed defect. These are honest scope disclaimers, not bypassed failures. Proceeding. Stakes: MediumTouches a production entry point ( 1. Import-time side effect: verified safe, evidence below
So the suppression is exactly as narrow as it can be. It hides nothing new; it only re-permits imports that were already only accidentally exempt (via the Does importing
Verdict: no observed or theoretically reachable cross-test leakage. 2. Precedence: verified against
|
|
Review verdict is APPROVE (see the review comment above). Two things are missing before this merges, both repo convention rather than defects, and the owner's call is that this branch carries them. An ADR. Every decision of this kind is recorded as a wiki ADR, and the last five PRs merged to A CHANGELOG entry, under One non-blocking nit from the review worth folding in while you are there: the file-wide Unrelated to the diff, and already handled on my side: this branch's worktree sits at |
|
The ADR and the CHANGELOG entry are there, thank you. One blocking collision before this can merge, and it is not about the content. ADR-1076 is taken. PR #599 ( Both branches took 1076 because both were cut when The cheaper renumber is yours: 1078, or whatever Renumbering by hand means the page, the mirror (including its generated header comment), the On merge order once that is settled: the two branches merge cleanly in either order, verified on a scratch clone before your update, with disjoint line ranges in The file-wide I am re-running the review on this head, since the previous verdict was posted on |
|
ZETETIC-REVIEW: REQUEST_CHANGES Re-verified at new head fe45317 (previous review was on db22b16, posted as #600 (comment), APPROVE). This is a fresh pass, not a diff of my old comment. Worked in What changed since db22b16
The blocking finding: ADR number collision, confirmed independentlyI re-derived this myself before reading the coordinator's note, then cross-checked: it holds. PR #599 ( PR #600 at fe45317 also allocates ADR-1076, for an unrelated decision (backend resolution). Its own footprint is 3 files, all documentation-layer: Root cause matches the coordinator's diagnosis: both branches were cut when I agree renumbering PR #600's ADR to 1078 is the right resolution and the right direction. Renumbering the 3-file, doc-only footprint here is strictly cheaper and lower-risk than renumbering PR #599's 14-file footprint, which includes I checked whether anything else in either tree currently assumes ADR-1076 means one decision or the other: nothing does. This is what drives the verdict to REQUEST_CHANGES. Everything else about this head is sound (below), but merging PR #600 as-is, in either order relative to #599, corrupts the shared ADR index: Items 1 to 5, checked as askedADR content accuracy. Read CHANGELOG entry. Under Mirror parity and manifest. Gates and full suite, re-run on fe45317. The new FindingsBlocking
Non-blocking
Commands run (this round)VerdictREQUEST_CHANGES, driven entirely by the ADR number collision (section above), not by code quality. The production code, tests, CHANGELOG entry, and ADR content are all sound and accurately described; the full suite is green (8670/0, matching the prior run); the file-wide noqa now explains itself. I agree with the coordinator's resolution (renumber PR #600's 3-file footprint to 1078 rather than touch PR #599's 14-file footprint), and confirmed nothing else in either open branch or in merged |
The project's rule puts every worktree at .claude/worktrees/<name>/, which .gitignore already covers. Codex uses .Codex/worktrees/ instead, and that path was tracked: reviewing PR #600 found a 60-entry checkout sitting there, one `git add -A` away from being committed. Verified with a probe file under .Codex/worktrees/: untracked before, matched by the rule after (`git check-ignore -v` names .gitignore:66). Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
|
ZETETIC-REVIEW: APPROVE Re-verified at head The single blocking finding from round 2 — the ADR-1076 collision with PR #599 — is resolved. One factual correction to the merge-interaction prediction is below; it is not blocking. 1. The renumber is complete and consistent
All three places the round-2 comment named are updated, including the generated header comment and the front-matter field. Grep for On the four files the request asked me to check for citations: none of them cites the new number, and none needs to. 2. Mirror parity and manifestDirect 3. The diff touches only the renumbering
4. Merge interaction with PR #599 — the manifest still conflicts, in both ordersI simulated this on a scratch clone against
The cause is textual adjacency, not the numbers: both branches insert immediately after the
All three ADR keys survive in both orders and nothing is lost either way. Recommended order: merge #599 first, then #600. Resolving the union in that direction leaves the manifest keys already in numeric order; the reverse leaves 5. Gates on
|
|
Review verdict is APPROVE on 4a46e2f, and the renumbering to ADR-1078 checked out completely. PR #599 has merged first as recommended, main is now dd29c89, and this branch conflicts with it in exactly one file: The cause is textual adjacency, not a key collision. Both branches inserted their entry right after After the rebase, |
4a46e2f to
54371ba
Compare
|
ZETETIC-REVIEW: APPROVE Scope: independent rebase delta review of Cortex PR #600 at 54371ba, compared with previously approved 4a46e2f. This verdict applies to the rebase delta; merge remains dependent on CI at the final head. No blocking findings in the reviewed delta. Evidence independently verified:
Validation supplied by coordinator, not rerun in this review: 59 targeted tests pass on this exact final tree; Ruff check/format, wiki and craftsmanship checks pass; E402 count remains 14. No duplicate test execution was warranted by the inspected rebase delta. Remote CI status was not independently queried by this reviewer. No repository mutation, commit, GitHub comment, or merge performed. |
Codex was folded into "local stdio hosts" although its plugin starts the server with --profile lean (ten named tools, no hooks) while a direct codex mcp add gets the full surface. The table now has a column for each, says which tools lean lacks (predictions, wiki writes, ingestion), where the shared backend selection lives (#600), and which worktree directory doctor checks per host. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH
…and Codex (#603) * docs(readme): predictions and calibration, one store for Claude Code and Codex The README described what Cortex remembers and never that it can record what it expected (#597, ADR-1076): a section under "Keep context useful" shows predict, resolve_prediction and calibration with their real return shapes and says what the Brier score means against the 0.25 of a constant 0.5 forecast. The host table gains the row, and the Codex paragraph says the plugin reads the same saved backend selection as the Claude launcher (#600). The unreleased changelog had two "### Added" headings; one now. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH * docs(readme): one column per host in the capability table Codex was folded into "local stdio hosts" although its plugin starts the server with --profile lean (ten named tools, no hooks) while a direct codex mcp add gets the full surface. The table now has a column for each, says which tools lean lacks (predictions, wiki writes, ingestion), where the shared backend selection lives (#600), and which worktree directory doctor checks per host. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH * docs(readme): the calibration band the code can return, and the release hedge for Codex BAND_EDGES steps by 0.2, so the illustrative reliability row shows [0.6, 0.8]. The Codex paragraph names CORTEX_BACKEND between the two variables it already named and says the shared backend selection reaches the plugin with the release after 4.22.0, since the plugin launches the published package. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH * docs(readme): the worktree row states the convention, not a doctor check The doctor check for worktree locations is PR #602, not merged. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH * docs(readme): the lean profile's real reason, and each worktree cell sourced to what names it ADR-0693 records why the Codex plugin starts lean: the full surface is the largest fixed token cost a session pays, not a startup-time limit. The worktree row cites docs/agent-guidance.md for the Claude Code directory only; the Codex directory is observed behaviour that #601 gitignored. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH --------- Co-authored-by: Claude Fable 5.1 <[email protected]>
Promotes the Unreleased section to 4.23.0 and moves the seventeen version surfaces (pyproject, manifest, plugin and marketplace manifests, Codex and Gemini manifests, package.json and lock, server.json, badge, uv.lock). Since 4.22.0: session hooks inject only the session's project and global memories (#604), one saved backend for Claude Code and Codex (#600), prediction records and calibration (#597), the wiki draft tools over MCP (#579), procedural skills on SQLite (#596) with a transcript-fed tool sequence (#591), the console entry point and Codex event adapter for the lifecycle hooks (#605, #608), the doctor worktree check (#602), and the launcher fixes (#573, #575, #582). The marketplace pin for zetetic-team-subagents moves to its released 2.42.0. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH
* release: 4.23.0 Promotes the Unreleased section to 4.23.0 and moves the seventeen version surfaces (pyproject, manifest, plugin and marketplace manifests, Codex and Gemini manifests, package.json and lock, server.json, badge, uv.lock). Since 4.22.0: session hooks inject only the session's project and global memories (#604), one saved backend for Claude Code and Codex (#600), prediction records and calibration (#597), the wiki draft tools over MCP (#579), procedural skills on SQLite (#596) with a transcript-fed tool sequence (#591), the console entry point and Codex event adapter for the lifecycle hooks (#605, #608), the doctor worktree check (#602), and the launcher fixes (#573, #575, #582). The marketplace pin for zetetic-team-subagents moves to its released 2.42.0. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH * release: the zetetic-team-subagents pin fetches the 2.42.0 tree it advertises The review of this cut found version 2.42.0 beside ref v2.41.0 and the 2.41.0 sha; installs would have checked out 77b4f785 under a 2.42.0 label. ref and sha now name the v2.42.0 tag commit 96454db1, as the earlier deliveries (#553, #554) moved all three fields together. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH * docs(changelog): name the consolidation launcher that shipped The ADR-1082 entry cited a consolidate_launch module the craftsmanship gate refused; the shipped design relaunches session_lifecycle with --consolidate <mode>, as ADR-1082 and the code say. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH --------- Co-authored-by: Claude Fable 5.1 <[email protected]>
Summary
Direct Cortex MCP startup now applies the saved backend selection before settings-dependent imports, matching the Claude launcher. Previously, a saved SQLite selection could be honoured by Claude while the Codex console entry point selected a reachable PostgreSQL server, sending the two hosts to different stores.
Adds independent-process tests for shared SQLite persistence and project ADR handoff, plus documentation of the common storage/root contract. The Codex plugin retains its existing ten-tool lean profile; ADR authoring requires an explicitly configured full-profile server.
Type of change
Test plan
git diff --check: passed.Commands, using the repository Python environment and
CORTEX_MEMORY_STORE_BACKEND=sqlite:Tests cover exact ADR retrieval, denied lean authoring, explicitly linked follow-up decisions, concurrent ADR submissions, separation between explicit project roots, visibility of acknowledged SQLite writes, and persistence after reopening. Child processes have bounded protocol waits and cleanup.
The full suite has not been run locally. These are local macOS/POSIX results, not Windows coverage. Installed Claude/Codex clients, semantic retrieval quality, PostgreSQL handoff, global ADR-to-database pointer integration, and automatic host capture remain outside this verification. Concurrent submissions do not prove every possible race absent. No mutation campaign was run.
Audit notes
Coding-standards compliance
Production change reuses the existing ADR-0505 resolver before settings load; explicit backend, alias, and database URL precedence remain unchanged. No new retrieval algorithm or tuning constant. Test timeout budgets are documented as liveness limits. Layer/size/source checks passed the craftsmanship gate.
Breaking changes
No tool-profile or schema changes. Direct startup now honours an existing saved backend selection when no higher-priority override is supplied. Users who previously relied on that selection being ignored should configure their intended backend explicitly. Existing stores are not migrated or merged.
Screenshots / logs
The checks and limitations are documented in
docs/shared-host-memory.md. Tests use disposable roots; no live host configuration or personal memory data is part of the diff.Reviewer checklist