Skip to content

reconcile: CP2 binds the invoked export, and S23.4's Open guard is bounded - #118

Merged
The-Running-Dev merged 1 commit into
mainfrom
claude/reconcile-xay8x7
Sep 2, 2026
Merged

reconcile: CP2 binds the invoked export, and S23.4's Open guard is bounded#118
The-Running-Dev merged 1 commit into
mainfrom
claude/reconcile-xay8x7

Conversation

@The-Running-Dev

Copy link
Copy Markdown
Owner

Summary

A reconciliation pass against the tree at 9cf09d0. Two divergences found, both decided, both applied.

1. CP2's "writes nowhere else" contradicted the exporter's own signature. CP2 read "content/ has exactly one production writer, and it writes nowhere else", and § Public surface added that no parameter may make it write elsewhere or write a subset. exportContent(catalogEntries, outputDir) has both, one level below the command line, and the exporter's error table needs them — CampaignDidNotBuild and ValidationRejected want a catalog that fails, and WriteFailed wants a filesystem that rejects a real write, which the 2026-09-01 decision chose over a stub and which cannot be aimed at the published directory without publishing from it. Scoped the contract to the invoked surface (main() and the CLI), stated the seam and the obligation it carries, and corrected the evidence check's title and comment: it resolves writes to the binding spelled outputDir, which inside exportContent is the argument shadowing the module constant, so it proved less than its name read. Same move as the 2026-08-31 CP2/CP3 production-source scoping, one level down.

2. S23.4's ## Open guard guarded nothing. The bullet in ## Open says the S16.5 item is kept there after filing "because S23.4's test asserts this exact entry stays in ## Open". It sliced from ## Open to the next ## heading — and ## Open is the last one in the file, so the bound was -1 and the assertion searched all 93,055 of the log's 93,211 bytes. It has asserted nothing since it landed at 79da1c8. Bounded on the --- that closes the section.

Descriptive corrections alongside: agent.md pointed at CLAUDE.md for standing instructions and the graphify --update trap (both moved to AGENTS.md in the 2026-08-20 flip); its orientation said "game specs only", which the 2026-08-30 ownership decision contradicts; and 04-engine-specification.md's size was stated as ~104/~105 KB in agent.md and twice in AGENTS.md against an actual 114.5 KB, a figure agent.md uses for token budgeting.

Nothing in design/30-slices.md was touched, and no unlanded slice's criteria were edited.

Test plan

Verified by reverting, as the repository requires:

  • Finding 2's guard was confirmed vacuous by moving the S16.5 bullet down among the dated entries — the old test passed. The corrected guard passes as the log stands and fails with the bullet relocated to either of two positions among the entries.

Gates run, with what each reported:

Gate Result
tools/Test-SpecSet.ps1 exit 0 — Valid; 8 documents, 936 declarations, 2 mirror obligations checked, 8 references unresolvable
tools/Test-Companion.ps1 exit 0 — 23 cores, 0 companions
tools/Test-DesignState.ps1 0 findings; largest closure unit/document/design-20-contract at 14,417 of 16,384 bytes, unchanged. Exit 2 on TrackerUnavailable only
npm run check typecheck clean, 71 tests passed / 4 files, export byte-identical, content/ matches the sources
Invoke-Pester -Path tools 338 passed / 15 failed

What did not run cleanly, and why it is not this change: the 15 Pester failures are Wait-PullRequestCheck (12), Invoke-DoneHousekeeping worktree cases (3, counted within), Update-DesignProjection S7.10 and Test-DesignState S12.5/S18.6 — all of them needing gh or git-worktree support absent from this environment. The identical 15 fail on a pristine checkout of 9cf09d0, confirmed by stashing this branch's changes and re-running. Test-DesignState.ps1's exit 2 has the same cause and is the behaviour 20-contract.md § Could not evaluate specifies.

Two decision-log entries were appended with matching design/state/decisions/ records, and the projection regenerated before the checker ran, per AGENTS.md § Writing a design-state record. Neither id was added to a unit's Live: both write their terms into their site in this same change, which is step 4's absorption case — recorded in the site alone, since StatedIn is not in the pinned kit's record grammar (issue #113, blocked upstream).

No AI-attribution footer, per AGENTS.md § House conventions.


Generated by Claude Code

…unded

Two divergences found against the tree at 9cf09d0 and decided.

CP2 read "content/ has exactly one production writer, and it writes
nowhere else", and § Public surface forbade any parameter that writes
elsewhere or writes a subset. exportContent takes both as arguments, and
the exporter's error table needs them: CampaignDidNotBuild and
ValidationRejected want a failing catalog, WriteFailed a real filesystem
rejection that cannot be aimed at the published directory. Scoped the
contract to the invoked surface, stated the seam and the obligation it
carries, and corrected the evidence check's title and comment - it
resolves writes to the binding spelled outputDir, which inside
exportContent is the argument, not the module constant.

S23.4 asserted the S16.5 item is still in ## Open by slicing to the next
## heading, which does not exist - so it searched the whole 93 KB log and
passed with the item anywhere in it. Bounded on the --- that closes the
section. Verified by reverting: it now fails with the item relocated to
either of two positions among the dated entries.

Descriptive corrections: agent.md's instruction and graphify-trap
pointers named CLAUDE.md, which has been a pointer to AGENTS.md since the
2026-08-20 flip; its orientation said "game specs only", which the
2026-08-30 ownership decision contradicts; and the 04 size figure was
~104/~105 KB against an actual 114.5 KB.

Gates: Test-SpecSet 0, Test-Companion 0, Test-DesignState 0 findings
(exit 2 on TrackerUnavailable only - no gh here), npm run check clean,
Pester 338/353 with the same 15 environmental failures before and after.
@The-Running-Dev
The-Running-Dev merged commit c1df021 into main Sep 2, 2026
4 checks passed
@The-Running-Dev
The-Running-Dev deleted the claude/reconcile-xay8x7 branch September 2, 2026 18:59
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