Skip to content

docs: plan failing integration tests for catalog↔xorq coexistence + reset#50

Merged
paddymul merged 2 commits into
mainfrom
docs/catalog-xorq-integration-plan
Jun 14, 2026
Merged

docs: plan failing integration tests for catalog↔xorq coexistence + reset#50
paddymul merged 2 commits into
mainfrom
docs/catalog-xorq-integration-plan

Conversation

@paddymul

Copy link
Copy Markdown
Contributor

What

Adds a single planning document (plans/catalog-xorq-integration-tests.md) for a
follow-up test-only PR. No code or test changes here — this is the design for
review before the failing tests are written.

Why

Issue #48 (tallyman commits aliases.json/alias_history.json into the xorq
catalog repo → assert_consistency fails → every xorq catalog add after the
first silently no-ops) shipped through all of V0 because the only integration
test exercising real xorq catalog add adds exactly one entry and never crosses
the checkpoint that commits those files.

Reproducing the real demo flow (genesis → catalog_create → catalog_create → reset_to) surfaced a second, distinct bug: reset ↔ xorq-catalog divergence.
A back→forward reset round-trips the tallyman entries/<hash>/ dir through the
bullpen, but the durable xorq .zip recipe is reconciled by a different
mechanism (git reset) and is never regained. "Git-backed, recompute from
history" is false for any entry after the first, and reset_to never
re-validates the xorq catalog.

The plan

A new tests/test_catalog_xorq_integration.py, all @pytest.mark.integration
(CI integration job), driven through the real MCP surfaces so the checkpoint
wrapper fires as in production:

All Group A/B/D tests fail today. The reset_rolls_back_alias_state guard
passes today and is deferred to the fix PR (a test passing today is never
bundled into a failing-tests commit).

Relates to #48.

🤖 Generated with Claude Code

paddymul and others added 2 commits June 14, 2026 16:57
…eset

Plans a test-only PR pinning two bugs surfaced while reviewing #48:
the multi-entry catalog-add silent no-op (#48 core), and the reset↔xorq
divergence where a back→forward reset restores the tallyman entry dir from
the bullpen but never regains the durable xorq .zip recipe. Both hid because
the only catalog-add integration test adds a single entry and never crosses
the checkpoint that commits the bookkeeping files.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add tests/test_catalog_xorq_integration.py implementing the plan from the
preceding docs commit. All seven tests fail today, driven through the real
MCP catalog_create surface so the dispatch-boundary checkpoint wrapper fires
as in production — the actual #48 trigger.

Group A (#48 core):
- every entry's .zip registers (only the first does today)
- catalog stays openable after a checkpoint (assert_consistency fails today)
- aliases.json/alias_history.json are not git-tracked in the xorq repo

Group B (reset ↔ xorq-catalog divergence):
- reset keeps the xorq catalog openable
- tracked .zip set matches tallyman entry_hashes pointers (1 vs 2 today)
- back→forward reset restores the durable xorq recipe, not just the bullpen dir

Group D (silent swallow):
- a failed registration is observable (loose catalog_registered=False signal)

The reset_rolls_back_alias_state guard passes today and is deferred to the fix
PR, per the rule that a test passing today is never bundled with failing tests.

Relates to #48.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@paddymul paddymul merged commit 6cb0b46 into main Jun 14, 2026
3 of 4 checks passed
paddymul added a commit that referenced this pull request Jun 15, 2026
#48 fixed (PR #57): alias bookkeeping now catalog.yaml keys (alias_map/
alias_history), #53 sidecar rejected, #48 closed. Mark stage-1 item 1 done.
Surfacing partly done — remainder tracked as #56 (catalog_registered dies in
_run_and_record; set_alias discards add_alias bool). #52 (reset divergence)
is now the live stage-1 fix; PR #50 Group B stays red until it lands. Reframe
#49 per #54: authored state belongs in catalog.yaml (fix durability, not
relocate). Rebuild script unblocked on the #48 side.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
paddymul added a commit that referenced this pull request Jun 15, 2026
#48 fixed (PR #57): alias bookkeeping now catalog.yaml keys (alias_map/
alias_history), #53 sidecar rejected, #48 closed. Mark stage-1 item 1 done.
Surfacing partly done — remainder tracked as #56 (catalog_registered dies in
_run_and_record; set_alias discards add_alias bool). #52 (reset divergence)
is now the live stage-1 fix; PR #50 Group B stays red until it lands. Reframe
#49 per #54: authored state belongs in catalog.yaml (fix durability, not
relocate). Rebuild script unblocked on the #48 side.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
paddymul added a commit that referenced this pull request Jun 18, 2026
#48 fixed (PR #57): alias bookkeeping now catalog.yaml keys (alias_map/
alias_history), #53 sidecar rejected, #48 closed. Mark stage-1 item 1 done.
Surfacing partly done — remainder tracked as #56 (catalog_registered dies in
_run_and_record; set_alias discards add_alias bool). #52 (reset divergence)
is now the live stage-1 fix; PR #50 Group B stays red until it lands. Reframe
#49 per #54: authored state belongs in catalog.yaml (fix durability, not
relocate). Rebuild script unblocked on the #48 side.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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