Skip to content

No mechanism can observe a locally-authored instruction contradicting a provider-authored one (split from #4351) #4375

Description

@Trecek

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions