Skip to content

release: 4.23.1 - #616

Merged
cdeust merged 2 commits into
mainfrom
release/4.23.1
Sep 22, 2026
Merged

cdeust merged 2 commits into
mainfrom
release/4.23.1

Conversation

@cdeust

@cdeust cdeust commented Sep 22, 2026

Copy link
Copy Markdown
Owner

Summary

Promotes CHANGELOG's Unreleased section to 4.23.1 and bumps the 17 version surfaces this repo's own check_version_surfaces.py enforces (pyproject.toml, manifest.json, both plugin manifests, marketplace.json's metadata and its self-hosted plugin entry, gemini-extension.json, package.json/package-lock.json, server.json, the Codex plugin manifest, the version badge SVG and its README alt text, uv.lock).

Since 4.23.0, this release ships only the fix for #611. A deliberate decision written under an agent context was still marked is_global after #604/ADR-1080 shipped, so it kept crossing project boundaries by that separate path. See #613 for the fix itself, already on main.

Type of change

  • Documentation only (version/changelog bump; no source change)

Test plan

  • python3 scripts/check_version_surfaces.py, all 17 sites agree with pyproject.toml.
  • python3 scripts/check_marketplace_pins.py, no SELF_PIN_MISMATCH or split. The one remaining PIN_VERSION_UNPUBLISHED notice is expected pre-merge (no v4.23.1 tag exists yet; ci.yml's auto-tag job creates it once this lands on main and CI is green).
  • python3 scripts/check_doc_claims.py, OK.
  • python3 scripts/check_craftsmanship.py --base origin/main, OK.
  • python3 scripts/generate_repo_badges.py reports 0 changes against the hand-updated badge, so it matches the generator exactly.

Audit notes

No source files change. Merging this to main with CI green triggers ci.yml's existing auto-tag step, which pushes v4.23.1 and hands off to release.yml for the GitHub release, PyPI publish, and MCP registry update.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NLvPnrr8Ab6cKPK1Kt3K7f

Promotes the Unreleased section to 4.23.1 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.23.0: team decisions stay inside their own project (#611,
ADR-1083). A deliberate decision written under an agent context was
still marked is_global after #604/ADR-1080, so it kept crossing project
boundaries by that separate path; a new is_team_decision marker fixes it
without weakening an explicitly cross-project memory.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NLvPnrr8Ab6cKPK1Kt3K7f
Signed-off-by: cdeust <[email protected]>
@cdeust

cdeust commented Sep 22, 2026

Copy link
Copy Markdown
Owner Author

ZETETIC-REVIEW: REQUEST_CHANGES

Verified in the worktree at .claude/worktrees/release-4.23.1 against origin/main (d02917d) and the reference release commit 24c68c4 ("release: 4.23.0", #609).

Blocking

  1. manifest.json:18 has an unintended content diff, not just a version bump. git diff origin/main...HEAD -- manifest.json shows 2 changed line-pairs, not 1: the expected version bump at line 88 (4.23.0 to 4.23.1), plus an unrelated change at line 18 where display_name moved from the JSON-escaped form (backslash-u-2014) to the literal em-dash character (U+2014). The reference commit 24c68c4 touched only the version line in this file (1 line changed, confirmed with git show 24c68c4a -- manifest.json). This is the same collateral-diff class the PR description says was already caught and reverted in gemini-extension.json during authoring; this second instance was not. Both encodings are JSON-equivalent and the file still parses to the same string, so there is no functional break, but the PR's own stated scope ("no source changes... only version strings moved") is violated. Fix: revert manifest.json line 18 to the escaped form so the diff against origin/main is version-only, matching the other 12 files (package-lock.json, server.json, uv.lock, pyproject.toml, package.json, .claude-plugin/marketplace.json, .claude-plugin/plugin.json, README.md, assets/badge-version.svg, gemini-extension.json, plugins/hypermnesia-mcp-codex/.codex-plugin/plugin.json, CHANGELOG.md), all of which diffed clean against 24c68c4's pattern.

Non-blocking, for the record

  1. check_marketplace_pins.py output is two lines, not one. Ran it myself: it prints a NOTICE: registry: io.github.cdeust/hypermnesia-mcp serves 4.23.0, repo is 4.23.1 line (from the ADR-0756 PENDING_REGISTRY table, pre-existing, unrelated to this PR) in addition to the PIN_VERSION_UNPUBLISHED failure line, exit code 1. The PR's test-plan line says "no SELF_PIN_MISMATCH or split. The one remaining PIN_VERSION_UNPUBLISHED notice is expected pre-merge," which is correct as far as it goes but omits the NOTICE line. Precedent: release: 4.23.0 #609's body explicitly documented the identical PIN_VERSION_UNPUBLISHED-until-tag pattern ("as it did for release: 4.22.0 #570"), so this is expected pre-merge behavior, not a defect. Wording nit only.

  2. Auto-tag mechanism is sound by code reading but not empirically proven for the prior release. ci.yml's release-gate job (needs: [ci-green], runs only on push to main, ci.yml:1055-1189) resolves the version, checks for an existing v{VERSION} tag, and if absent creates and pushes it, gated behind RELEASE_TAG_SSH_KEY (skips cleanly and stays manual if that secret is absent, ci.yml:1099-1112). release.yml triggers on push: tags (release.yml:73-75) and runs the GitHub Release, PyPI publish, and MCP-registry-publish jobs. This matches the PR's audit-notes claim. However, git for-each-ref refs/tags/v4.23.0 shows that tag was created by cdeust <[email protected]>, not github-actions[bot], so the automated path was not the one that actually fired for the 4.23.0 release; the mechanism is correct by inspection but the "as it worked for 4.23.0" framing would be overclaiming if stated. docs/agent-guidance.md's Releasing section (around line 60) describes the pin-bump-and-registry-cross-check ending step, not the auto-tag step itself; the auto-tag source is ci.yml under ADR-0802, cited separately, not from that doc section.

  3. SemVer classification: patch bump is correct. d02917d ("fix: keep team decisions scoped to their project", fix: keep team decisions scoped to their project #613) adds an internal is_team_decision field (mcp_server/handlers/remember.py:335, computed via core.team_scope.is_team_decision()) and a team_decision: bool = False parameter to an internal helper (remember_helpers.py), plus schema/infrastructure changes to persist it and a reclassification script. None of this is exposed as a new parameter on the public remember MCP tool surface, no behavior is added for callers, and the change is a scope-isolation bug fix with no breaking change. Patch stands.

Confirmed clean

  • check_version_surfaces.py: OK, 17 sites agree with pyproject.toml.
  • check_doc_claims.py: OK (1 declared exemption, CONTRIBUTING.md:36, pre-existing).
  • check_craftsmanship.py --base origin/main: OK.
  • generate_repo_badges.py: 0 of 4 badges changed, matches the hand-updated badge.
  • CHANGELOG.md:9-24: the new ## [4.23.1] - 2026-09-22 entry accurately reflects d02917d's fix, including the Session-start and per-prompt injection ignore the project: memories of other projects reach every session #604/ADR-1080 cross-reference and the "narrows existing global rows... every other global row... is left alone and reported, not cleared" language, which matches the fix commit's later "undo only the ADR-0200 promotion, keep every other global row" amendment. Diffed against origin/main's CHANGELOG.md directly: nothing lost or duplicated, the prior Unreleased/Fixed block was promoted intact with added context, not rewritten destructively.
  • package-lock.json, server.json, uv.lock (the two-occurrence files): both version occurrences in each changed and nothing else, confirmed against the 24c68c4 pattern.
  • git log origin/main..HEAD: exactly one commit, cab7ca0, on top of d02917d which is already on origin/main. No source files in the diff.
  • gh pr checks 616: 16 pass, 8 pending (Python 3.10-3.13 test matrix + fuzz jobs, consistent with the stated ~9 min runtime), 3 skipping (Docker image builds and scheduled fuzz, expected for a docs-only change), 0 failing at time of review.

Ranked severity: finding 1 (manifest.json drift) is the blocking one. Findings 2-4 are informational/wording, not release blockers on their own.

Review finding on PR 616: the version bump script's json.dumps rewrite of
manifest.json changed display_name's escaped u2014 sequence to a literal
em dash character. JSON-equivalent, no functional break, but it widened
the diff beyond the version-only scope this release PR states. The
reference release commit (24c68c4) touched only the version line here;
this one now does too.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NLvPnrr8Ab6cKPK1Kt3K7f
Signed-off-by: cdeust <[email protected]>
@cdeust

cdeust commented Sep 22, 2026

Copy link
Copy Markdown
Owner Author

ZETETIC-REVIEW: APPROVE

Reviewed head commit 7515ed8 ("fix(release): revert an unintended em-dash unescape in manifest.json") on branch release/4.23.1.

Re-verification of the previously blocking finding:

  • git diff origin/main...HEAD -- manifest.json now shows exactly 1 line-pair changed (the version bump, "4.23.0" to "4.23.1"), matching the pattern of every other file in this PR and matching the reference release commit 24c68c4's manifest.json diff. The stray display_name unescape is gone.
  • python3 scripts/check_version_surfaces.py: still OK, 17 sites agree with pyproject.toml.
  • Overall diff stat: still 13 files changed, now 31 insertions / 23 deletions (was 32/24 before this fix), consistent with removing exactly the one unintended line-pair and nothing else.

The three non-blocking items from the prior review are unchanged and do not affect this verdict: the check_marketplace_pins.py NOTICE-plus-PIN_VERSION_UNPUBLISHED wording is expected pre-tag behavior (precedented in #609/#570), the v4.23.0 tag having been pushed by a human rather than the automated ci.yml release-gate path is a note for future evidence, not a defect in this PR, and the patch-level SemVer classification was already confirmed correct (team_decision is an internal field, not a new public remember tool parameter).

gh pr checks 616 -R cdeust/Cortex at review time: 2 pass, 6 pending (CI restarted on the new commit, Python matrix and fuzz jobs in progress), 1 skipping, 0 failing.

No blocking issues remain.

@cdeust
cdeust merged commit 0e9693f into main Sep 22, 2026
29 checks passed
@cdeust
cdeust deleted the release/4.23.1 branch September 22, 2026 07:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant