Problem
Split out of #4351 during plan review to keep that ticket scoped to its own fix.
#4351 fixes one instance of a locally-authored instruction contradicting OpenAI Codex's shipped base_instructions. Its fix makes every injected intake rule declare a machine-checkable basis. One permitted basis value is "upstream-aligned" — but that is checked only for citation shape (the evidence string must look like openai/codex#27044). Nothing verifies that upstream actually says what we claim it says, or that it still says it.
That is the generalised form of #4351. The defect was never "someone wrote a bad sentence." It was that a locally-authored instruction and a provider-authored instruction can disagree, and no mechanism in this repository can observe the disagreement. Rewording our sentence does not change that; neither does the rule registry on its own.
The upstream text is obtainable offline and exactly
It is the session_meta record's payload.base_instructions.text in any Codex rollout JSONL — 17,766 bytes at CLI 0.145.0, and it already reproduces all four sentences #4351 quotes.
tests/execution/backends/_conformance_assertions.py:225-249 already parses that field — but only one-way, to assert our digest landed inside it. The proposed change turns that same parse into a two-way check.
Proposed direction
A provider-claim registry: verbatim sentences from the Codex CLI's shipped base_instructions, each pinned to the CLI version it was verified against, each bound by subject to the local rules that speak to it. Three layers:
| Layer |
Runs |
Catches |
Offline contract (tests/contracts/) |
every task test-check |
a new or edited rule contradicting a claimed provider position, or claiming alignment with a claim that does not exist |
| Live drift (conformance probe) |
when Codex conformance probes run |
upstream changing its text under us |
| Version pin (doctor check) |
every autoskillit doctor |
installed CLI moving past the version the claims were verified against |
A drafted plan already exists from the #4351 rectify session and should be treated as input, not gospel — it was written before this was split out:
.autoskillit/temp/rectify/rectify_codex_intake_discipline_digest_2026-07-26_154500_part_b.md (in the #4351 run clone)
Sequencing — read before starting
This must be sequenced after #4369. The plan registers a new doctor check (codex_provider_claims_verified), which forces:
tests/docs/test_doc_counts.py::test_doctor_check_count_is_49 → 50
- edits to
src/autoskillit/cli/doctor/__init__.py, src/autoskillit/cli/doctor/_doctor_runtime.py, tests/cli/test_doctor_runtime.py, docs/cli.md
#4369 is being worked on that same doctor surface. Two concurrent branches changing the doctor check count is a hard conflict, not a soft one — the count is a literal assertion.
Deliberately use a separate version pin. Do not reuse CODEX_LIMITS_LAST_VERIFIED_VERSION: it feeds PROBE_POLICY_IDENTITY (_probe_cache.py:68), so bumping it invalidates the probe cache and triggers ADR-0005's live-probe forward obligation. Re-verifying a sentence must not carry the cost of re-running the large-output probe suite.
Dependency
Requires #4351 Part A to have landed — the basis / evidence fields this builds on are introduced there. #4351 Part A was validated as complete and independently green without this work, so there is no half-built mechanism if this is deferred.
Wider context
Part of the coordinated program in the Codex context-consumption report, 2026-07-26 (.autoskillit/temp/audit-friction/codex_context_report_2026-07-26.html). Sibling tickets on the same instruction surface: #4351, #4365, #4372, #4373, #4265.
Classification
enhancement, recipe:implementation
Requirements
REQ-REG-001: A provider-claim registry must exist that stores verbatim sentences quoted from the Codex CLI's shipped base_instructions, each entry pinned to the CLI version at which it was verified.
REQ-REG-002: Each provider-claim registry entry must be bound by subject to the local intake rule(s) whose basis: "upstream-aligned" claim it substantiates.
REQ-REG-003: The registry's version pin must be a constant distinct from CODEX_LIMITS_LAST_VERIFIED_VERSION, so that updating it does not alter PROBE_POLICY_IDENTITY (_probe_cache.py:68) or invalidate the existing probe cache.
REQ-OFC-001: An offline contract test under tests/contracts/ must run on every task test-check and fail if a local rule declares basis: "upstream-aligned" citing a claim that does not exist in the provider-claim registry.
REQ-OFC-002: The offline contract test must fail if a new or edited local rule contradicts a provider position recorded in the registry.
REQ-DFT-001: When Codex conformance probes run, a live check must extend the existing one-way parse in tests/execution/backends/_conformance_assertions.py:225-249 of the session_meta record's payload.base_instructions.text into a two-way comparison that verifies each registered verbatim claim sentence is still present in the current upstream text.
REQ-DFT-002: The live drift check must identify and report which specific registry entries no longer match the current upstream text when base_instructions.text changes.
REQ-PIN-001: A doctor check named codex_provider_claims_verified must run on every autoskillit doctor invocation and warn when the installed Codex CLI version has moved past the version the registry's claims were last verified against.
REQ-PIN-002: Work on codex_provider_claims_verified must not begin until #4369 has landed, and the doctor-check-count assertion (tests/docs/test_doc_counts.py::test_doctor_check_count_is_49) must be updated to reflect exactly one net-new check, without reintroducing conflicts with #4369's concurrent edits to src/autoskillit/cli/doctor/__init__.py, src/autoskillit/cli/doctor/_doctor_runtime.py, tests/cli/test_doctor_runtime.py, and docs/cli.md.
REQ-DEP-001: The basis and evidence fields introduced by #4351 Part A must already exist in the codebase before this registry can bind claims to local rules.
Problem
Split out of #4351 during plan review to keep that ticket scoped to its own fix.
#4351 fixes one instance of a locally-authored instruction contradicting OpenAI Codex's shipped
base_instructions. Its fix makes every injected intake rule declare a machine-checkablebasis. One permitted basis value is"upstream-aligned"— but that is checked only for citation shape (the evidence string must look likeopenai/codex#27044). Nothing verifies that upstream actually says what we claim it says, or that it still says it.That is the generalised form of #4351. The defect was never "someone wrote a bad sentence." It was that a locally-authored instruction and a provider-authored instruction can disagree, and no mechanism in this repository can observe the disagreement. Rewording our sentence does not change that; neither does the rule registry on its own.
The upstream text is obtainable offline and exactly
It is the
session_metarecord'spayload.base_instructions.textin any Codex rollout JSONL — 17,766 bytes at CLI 0.145.0, and it already reproduces all four sentences #4351 quotes.tests/execution/backends/_conformance_assertions.py:225-249already parses that field — but only one-way, to assert our digest landed inside it. The proposed change turns that same parse into a two-way check.Proposed direction
A provider-claim registry: verbatim sentences from the Codex CLI's shipped
base_instructions, each pinned to the CLI version it was verified against, each bound by subject to the local rules that speak to it. Three layers:tests/contracts/)task test-checkautoskillit doctorA drafted plan already exists from the #4351 rectify session and should be treated as input, not gospel — it was written before this was split out:
.autoskillit/temp/rectify/rectify_codex_intake_discipline_digest_2026-07-26_154500_part_b.md(in the #4351 run clone)Sequencing — read before starting
This must be sequenced after #4369. The plan registers a new doctor check (
codex_provider_claims_verified), which forces:tests/docs/test_doc_counts.py::test_doctor_check_count_is_49→ 50src/autoskillit/cli/doctor/__init__.py,src/autoskillit/cli/doctor/_doctor_runtime.py,tests/cli/test_doctor_runtime.py,docs/cli.md#4369 is being worked on that same doctor surface. Two concurrent branches changing the doctor check count is a hard conflict, not a soft one — the count is a literal assertion.
Deliberately use a separate version pin. Do not reuse
CODEX_LIMITS_LAST_VERIFIED_VERSION: it feedsPROBE_POLICY_IDENTITY(_probe_cache.py:68), so bumping it invalidates the probe cache and triggers ADR-0005's live-probe forward obligation. Re-verifying a sentence must not carry the cost of re-running the large-output probe suite.Dependency
Requires #4351 Part A to have landed — the
basis/evidencefields this builds on are introduced there. #4351 Part A was validated as complete and independently green without this work, so there is no half-built mechanism if this is deferred.Wider context
Part of the coordinated program in the Codex context-consumption report, 2026-07-26 (
.autoskillit/temp/audit-friction/codex_context_report_2026-07-26.html). Sibling tickets on the same instruction surface: #4351, #4365, #4372, #4373, #4265.Classification
enhancement,recipe:implementationRequirements
REQ-REG-001: A provider-claim registry must exist that stores verbatim sentences quoted from the Codex CLI's shipped
base_instructions, each entry pinned to the CLI version at which it was verified.REQ-REG-002: Each provider-claim registry entry must be bound by subject to the local intake rule(s) whose
basis: "upstream-aligned"claim it substantiates.REQ-REG-003: The registry's version pin must be a constant distinct from
CODEX_LIMITS_LAST_VERIFIED_VERSION, so that updating it does not alterPROBE_POLICY_IDENTITY(_probe_cache.py:68) or invalidate the existing probe cache.REQ-OFC-001: An offline contract test under
tests/contracts/must run on everytask test-checkand fail if a local rule declaresbasis: "upstream-aligned"citing a claim that does not exist in the provider-claim registry.REQ-OFC-002: The offline contract test must fail if a new or edited local rule contradicts a provider position recorded in the registry.
REQ-DFT-001: When Codex conformance probes run, a live check must extend the existing one-way parse in
tests/execution/backends/_conformance_assertions.py:225-249of thesession_metarecord'spayload.base_instructions.textinto a two-way comparison that verifies each registered verbatim claim sentence is still present in the current upstream text.REQ-DFT-002: The live drift check must identify and report which specific registry entries no longer match the current upstream text when
base_instructions.textchanges.REQ-PIN-001: A doctor check named
codex_provider_claims_verifiedmust run on everyautoskillit doctorinvocation and warn when the installed Codex CLI version has moved past the version the registry's claims were last verified against.REQ-PIN-002: Work on
codex_provider_claims_verifiedmust not begin until #4369 has landed, and the doctor-check-count assertion (tests/docs/test_doc_counts.py::test_doctor_check_count_is_49) must be updated to reflect exactly one net-new check, without reintroducing conflicts with #4369's concurrent edits tosrc/autoskillit/cli/doctor/__init__.py,src/autoskillit/cli/doctor/_doctor_runtime.py,tests/cli/test_doctor_runtime.py, anddocs/cli.md.REQ-DEP-001: The
basisandevidencefields introduced by #4351 Part A must already exist in the codebase before this registry can bind claims to local rules.