Skip to content

fix(readme): restore the canonical hypermnesia-mcp-viz identity anchor - #510

Merged
cdeust merged 1 commit into
mainfrom
fix/readme-viz-identity-anchor
Sep 8, 2026
Merged

cdeust merged 1 commit into
mainfrom
fix/readme-viz-identity-anchor

Conversation

@cdeust

@cdeust cdeust commented Sep 8, 2026

Copy link
Copy Markdown
Owner

main is red, and it is my defect

Run 34238410970 on 089361ad — the #509 merge — failed on Test (3.10), (3.11), (3.12), (3.13) and Test (SQLite backend). 7663 passed, 1 failed:

FAILED tests_py/scripts/test_codex_plugin_contract.py::
       test_current_companion_docs_use_canonical_publication_identities
assert '<a href="https://github.com/cdeust/cortex-viz">hypermnesia-mcp-viz</a>' in readme

Collapsing the seven-line four-piece-stack block in #509 dropped that anchor. My replacement line said "visualization and reasoning-agent companions" in prose, naming neither.

The assertion is not decorative. The repository is named cortex-viz; the published plugin identity is hypermnesia-mcp-viz. That test is the mechanical guard that the README keeps naming the canonical published identity rather than the repo slug — the same class of guard the sibling test test_readme_carries_the_complete_viz_and_spec_identity_migrations enforces for the spec migration. I deleted the thing it protects.

The fix

Name both companions with their links instead of alluding to them. That satisfies the contract and reads better than the vague form it replaces:

…memory (this), [code graph], [spec verification] — alongside the [hypermnesia-mcp-viz] visualization companion and the [zetetic-team-subagents] reasoning agents.

Verification — failure reproduced, then fixed

On origin/main, before 1 failed, 7 passed in that file
After 8 passed
tests_py/scripts/ whole directory 879 passed, 0 failed (8 errors in test_groomer.py, an optional-dependency gap in this container — CI passes those, they are in the 7663)
check_doc_claims.py, check_version_surfaces.py, ruff format --check clean

Why this reached main — a real gap, filed separately

The CI changes filter classifies *.md out of code:

code:
  - '**'
  - '!{*.md,docs/**/*.md,…}'

So a README-only PR sets code=false and every test job is skipped — while test_codex_plugin_contract.py's input is README.md. The guard is gated off exactly when its subject changes. #509 was therefore merged on a green PR that had never run the test its diff would break.

That is the root cause, and it will recur on the next README edit. I have not widened this PR with it: main is red now and this fix is the minimal thing that clears it. I'll raise the filter gap separately so it gets its own review — the cheap shape is a small docs-triggered job running just the doc-contract tests, rather than the full matrix on every prose change, which would undo the CI-efficiency work in #475–#481.

🤖 Generated with Claude Code

https://claude.ai/code/session_01StMBvNd7eVJGtpnC2zNsx1


Generated by Claude Code

main went red on 089361a: tests_py/scripts/test_codex_plugin_contract.py
::test_current_companion_docs_use_canonical_publication_identities failed
across Test (3.10/3.11/3.12/3.13) and Test (SQLite backend). 7663 passed,
this one failed.

My own defect, from #509. Collapsing the seven-line four-piece-stack block
at the top of the README dropped the anchor

  <a href="https://github.com/cdeust/cortex-viz">hypermnesia-mcp-viz</a>

which that test asserts on. The assertion is not decorative: the repo is
named cortex-viz while the published plugin identity is
hypermnesia-mcp-viz, and the test is the mechanical guard that the README
keeps naming the canonical published identity rather than the repo slug.
The replacement line said "visualization and reasoning-agent companions"
in prose, naming neither.

The fix names both companions with their links instead of alluding to
them, which satisfies the contract and reads better than the vague form
it replaces.

Reproduced before fixing: the test fails on origin/main and passes after,
8 passed in that file. check_doc_claims.py and check_version_surfaces.py
both clean.

Note for a follow-up, not fixed here: this reached main because the CI
`changes` filter excludes '*.md' from `code`, so a README-only PR skips
every test job — yet this test's input IS README.md. The guard is gated
off exactly when its subject changes. Filed separately rather than
widening this fix.
@cdeust
cdeust marked this pull request as ready for review September 8, 2026 15:27
@cdeust
cdeust merged commit 2e2a1db into main Sep 8, 2026
25 checks passed
@cdeust
cdeust deleted the fix/readme-viz-identity-anchor branch September 8, 2026 16:01
pull Bot pushed a commit to asleekgeek/Cortex that referenced this pull request Sep 8, 2026
Root cause of the cdeust#509 -> cdeust#510 incident. The `changes` filter classifies
'*.md' out of `code`:

    code:
      - '**'
      - '!{*.md,docs/**/*.md,...}'

so a README-only PR sets code=false and every test job is skipped. But
part of that suite takes documentation as its INPUT:
tests_py/scripts/test_codex_plugin_contract.py reads README.md and
asserts on the canonical published identities (the hypermnesia-mcp-viz
anchor, the viz/spec migration strings).

The guards were therefore switched OFF exactly when their subject
changed. cdeust#509 was a README-only diff, every test job skipped, it merged
green, and the push to main went red on that test across five jobs (run
34238410970 — 7663 passed, 1 failed). cdeust#510 fixed the symptom; this fixes
the reason it could reach main at all.

Adds `docs` to test-sqlite's predicate only, not to the 3.10-3.13 matrix:
test-sqlite already runs THE FULL SUITE in one ~5-minute job, so it
covers the doc-contract tests at the smallest cost that closes the gap.
Waking the whole matrix on every prose edit would undo cdeust#475-cdeust#481.

scripts/check_ci_gate_results.py mirrors ci.yml's predicates — its own
check_policy docstring requires the workflow and the executable policy to
stay "in exact agreement". Changing only the workflow would have left two
sources of truth disagreeing about when test-sqlite may skip, so
_required_jobs gains the same condition and both files carry the same
note. Caught by re-reading the diff, not by CI.

Its two docs-only tests are updated to the new policy, and the first is
turned into a named regression test that asserts skipping test-sqlite on
a docs-only PR is NOT justified — the exact hole cdeust#509 fell through.

Verified: actionlint 1.7.12 (the pinned version) clean on ci.yml;
check_ci_gate_complete.py OK; both gate test files 38 passed, 159
subtests; craftsmanship, ruff check, ruff format, doc-claims all clean.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01StMBvNd7eVJGtpnC2zNsx1
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.

2 participants