Conversation
Flips ADR-022 from proposed to accepted per the acceptance procedure in docs/adr/README.md: the Test Contract's four items now cite tests/test_prompt_ontology.py directly (no longer deferred, since #1726 landed as 96a450a), and the README index row is updated to match. Rewrites the Status section to name current truth instead of the issue's 2026-09-18 snapshot: eleven follow-ups closed and deployed, plus #1729/#1745/#1748 landed since, plus #1750-#1753 still open (named, not claimed done). Adds three decisions (7-9) the issue said were recorded nowhere: - Budget unit: stated in tokens (98,304-token window), enforced in characters (no tokenizer on the i386 host); cites the #1754 eeepc measurement (prompt+completion max 83,836 of 98,304 tokens). - "Code does not author" scopes to the loop profile only; the interactive profile's ContextBuilder._get_identity(loop_profile=False) deliberately keeps its own template, verified against nanobot/agent/context.py. - The SOUL.md/USER.md filename collision (release root vs. nanobot/templates/) is kept, not resolved; verified against the repo. Does not add #1750's ratchet-vs-migration principle -- that section is being written by another agent working #1750 concurrently. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Owner
Author
|
Rebased onto
75 passed, 1 skipped, 5 xfailed across Separately, for the record: this PR's working-tree edits also landed in the main checkout |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #1756. Flips
docs/adr/ADR-022-context-ontology.mdfromstatus: proposedtoaccepted, following the acceptance procedure added under #1712 (docs/adr/README.md, "Acceptance" section, enforced bytests/test_adr_acceptance.py): every Test Contract item now names an existing test that citesADR-022, and the README index row is updated to match the frontmatter.What changed in the Status section (current truth, not the issue's snapshot)
20260918T002450Z-canonical-023a38f7), as the issue said.roles/*.md, merged824cac9e, deployed in20260918T162023Z-canonical-824cac9e, health gate CLEAN-EXIT,system_prompt_charspresent on post-flip rows), search_memory status contract is stated twice: OPERATING.md Tools section and MemoryStore.MEMORY_SEARCH_POINTER #1745 (search_memorycontract duplication, fixedd3dd4aa6), Outcome rows cannot answer 'was this a real failure', so every replay of that class expires with the result artifacts (~29 days) #1748 (real-failure criterion on outcome rows, fixedada86014).The three decisions (7-9) added to the Decision section
prompt_tokensmax 79,804,completion_tokenscapped at exactly 8,192 (clientmax_tokens), prompt+completion max 83,836 against 98,304 — 14,468 tokens headroom.nanobot/agent/context.py—ContextBuilder._get_identity(loop_profile=False)(interactive profile) deliberately keeps the original nanobot template as a code literal (role sentence,## Platform Policy,## nanobot Guidelines, the closingmessage-tool line). Rule 2 binds only the loop-profile path.tests/test_ontology_loader.py::test_no_forbidden_loop_prose_in_context_or_subagent_sourcechecks this scoping directly.rg -n "SOUL.md|USER.md" --type py .—nanobot/templates/SOUL.md/USER.mdare package-bundled interactive-workspace scaffolding (copied in bysync_workspace_templatesonly when missing), distinct from the operator-owned release-rootSOUL.md/USER.mdthe loop reads. Decision: keep the collision (renaming is a stated non-goal); the two profiles disambiguate by directory/loader path, not filename. This matches the issue's own description of the collision — no discrepancy found.Note on #1750
The principle from #1750 ("a bound introduced over existing content ships with either a migration commit or a ratchet clause") is not added by this PR — another agent is working #1750 against this same ADR concurrently (worktree
T:/Code/.worktrees/ratchet-1750already exists). Do not merge this PR in a way that discards that incoming section; it will need a rebase/merge reconciliation with whichever lands second.Files changed
docs/adr/ADR-022-context-ontology.mddocs/adr/README.mdTest plan
Ran the four files the ADR's Test Contract requires, per the acceptance procedure, nothing else:
tests/test_prompt_ontology.py— pass (40 passed / 1 xfail across the four files combined; the singlexfail(strict=True)istest_agents_md_scope_violations_against_real_instance_fixture, expected until Instance AGENTS.md is truncated on 49 of 49 cycles: rewrite it to repository layout in one commit #1752 shrinks the real instanceAGENTS.md)tests/test_operating_md.py— passtests/test_ontology_loader.py— passtests/test_release_ontology_files.py— passAlso ran
tests/test_adr_acceptance.py(not one of the four, but the mechanism that enforces the acceptance procedure this PR relies on) to confirm the flip doesn't regress it: 28 passed, 1 skipped, 4 xfailed — clean, no drift between the README index and ADR-022's frontmatter, no unmapped Test Contract item.🤖 Generated with Claude Code