Repository navigation
Record v2 convergence angles with FINAL admission disabled - #1058
Merged
seathatflowsinourveins merged 10 commits intoOct 15, 2026
Merged
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Collaborator
Author
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: df5f32f790
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
seathatflowsinourveins
force-pushed
the
codex/ns2604-angle-records-20261012
branch
from
October 13, 2026 03:16
df5f32f to
fe64079
Compare
5 tasks done
seathatflowsinourveins
force-pushed
the
codex/ns2604-angle-records-20261012
branch
3 times, most recently
from
October 14, 2026 22:46
252babe to
e698c7b
Compare
This was referenced Oct 15, 2026
seathatflowsinourveins
force-pushed
the
codex/ns2604-angle-records-20261012
branch
3 times, most recently
from
October 15, 2026 11:48
bf55af5 to
92e4290
Compare
seathatflowsinourveins
marked this pull request as draft
October 15, 2026 12:11
seathatflowsinourveins
marked this pull request as ready for review
October 15, 2026 12:11
Reject FINAL for every status outside current/converged. Compare each later covering sweep's requirement and platform hashes with the last covering sweep on or before the verdict; a later reversion does not clear the change. Add fail-first lifecycle controls and correct the historical fix3 control receipt to its final 11-test/15-failure set. Mechanism: 8f95f46 docs/decisions/2026-10-11-layer-resolution-protocol.md:62,107; scripts/saturation_ledger.py:1376-1379; docs/landscape-continuation.md:98. Validation: both new tests fail against the exact parent final_stack source (5 assertion/subtest failures, 0 errors) and pass after the fix; 635 named affected tests, registered-state validate and both final-stack checks pass. V2 refutations and citation URI validation remain recorded follow-ups.
Keep a missing pre-verdict covering sweep unknown. Later scope cannot establish unchanged requirements or platform profiles against that missing anchor or a missing baseline hash. Preserve a present unchanged baseline. Source: e698c7b docs/decisions/2026-10-11-layer-resolution-protocol.md:46,62; docs/landscape-continuation.md:91-99; scripts/saturation_ledger.py:1376-1379. Fail-first: two new fixture/CLI tests run on unchanged parent production with eight failing subcases and a passing unchanged-baseline control. Afterward all 637 named tests and both final-stack checks pass. Current validate exits 1 only for the nine inherited model-currency freshness records; publication follows the CI-wide incident disposition.
Identify the consumed covering sweep from its verdict-wave manifest. Replay every later covering ledger record in retained append order, with no date/status/cutoff projection. Admission allows only completed rows with both scope hashes present and unchanged, empty reopen evidence and no native material pending. Preserve cumulative unresolved dispositions. Source: 8d45672 tools/sota-convergence/build_verdicts.py:514-523; scripts/saturation_ledger.py:302-312,1022-1024,1369-1397; tests/test_saturation_ledger.py:1677; layer-resolution-protocol.md:74. Fail-first same-day controls: 9 subtest failures on unchanged production. Native converter/append/check cutoff and status controls: 3 failures on exact parent source, zero errors; full ledgers check with zero errors. Deferred V2 refutations, URI, recorder and other follow-ups stay recorded.
Carry the shared ledger index through consumed-anchor admission and survivor replay. Catalog settlement requires recorder-preserved evidence naming a known sweep at or after the last unresolved event; no verdict date or unsupported catalog field clears later survivors. Recompute native retained V2 screens and outcomes to recognize genuine refutations with complete source/role/repository/evidence bindings. Unknown or misbound votes remain unresolved. Source: 873acd8 scripts/saturation_ledger.py:388-512,1119-1243; tools/sota-convergence/record_verdicts.py:392-407,614-622; docs/decisions/2026-10-11-layer-resolution-protocol.md:73-76. Fail-first: four new same-day/structural/native-V2 methods produce nine assertion/subtest failures on unchanged parent production, zero errors. Earlier same-day, stopped-V2 and consumed-anchor controls remain covered. Current local validate reports only the nine inherited currency lines; currency repair is on main and branch rebasing remains cue-only.
Refuse every explicit FINAL claim with admission under redesign, both at terminal resolution and the direct enforcement entry point. Preserve ordinary record generation and checks; the historical admission predicates stay inactive. Add fail-first retained-return probes for not_retained and not_returned, plus complete-evidence markers, every catalog enforcement path and artifact-preserving refusals. Convert prior FINAL-positive fixtures to disabled-admission controls. Keep independent metadata hashing and non-FINAL validation tests active. Mechanism references at acc89db: - scripts/final_stack.py:594-599, terminal claim resolution - scripts/final_stack.py:829-845, FINAL enforcement entry point - catalogs/saturation/README.md:81-82, retained empty discovery returns - docs/decisions/2026-10-11-layer-resolution-protocol.md:45-54, missing returns do not adjudicate unresolved evidence The retained-return admission repair and wider evidence rules belong to the separate admission redesign. This commit only disables admission. Compose the landed registration rules at f165498. Preserve root-aware row_run_id, unrun-row exclusion and the native registration/schema/history rules. Guard the direct root-aware build_verdict path with the same FINAL refusal before classification; its remaining implementation is byte-identical to that pin. The new registration-fixture regression fails without this front guard. Sources at that pin: scripts/final_stack.py build_verdict; tools/sota-convergence/build_verdicts.py row_run_id/build_document; scripts/landscape.py is_unrun_registration/registration_history.
Use one refusal helper and the canonical final_stack.FINAL_ADMISSION_REFUSAL before unrun classification, landscape schema/generation, wave filtering and run discovery, matrix projection and recorder replay. Final-stack entry points use the same helper. Non-FINAL inputs keep the native registration rules. Re-export the reason from the shared policy so its public final-stack binding remains available without expanding the verdict gate's import trust closure. Add the reader's two wave regressions and extend them to native landscape, matrix and recorder paths. Preserve ordinary-registration positives, negative diagnostics, frozen wave bytes and no-lane row bytes. Update only FINAL-specific diagnostic/projection expectations in existing tests. Pinned mechanism source: native-agent-stack at 65b6f11: - scripts/final_stack.py:89, canonical refusal reason - scripts/landscape.py:60, :950, :1274, registration classification/consumers - tools/sota-convergence/build_verdicts.py:257, :504, wave filtering/discovery - scripts/component_matrix.py:581, direct row projection - tools/sota-convergence/record_verdicts.py:720, no-lane replay The non-FINAL registration contract follows the landed implementation at f165498. Dependency loading, retained-snapshot qualification and admission-policy research remain separate follow-ups.
seathatflowsinourveins
force-pushed
the
codex/ns2604-angle-records-20261012
branch
from
October 15, 2026 12:23
92e4290 to
611ee63
Compare
seathatflowsinourveins
deleted the
codex/ns2604-angle-records-20261012
branch
October 15, 2026 13:34
5 of 6 tasks
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.
Scope
Record sourced six-angle v2 convergence and retain the readers, checks and enforcement plumbing. FINAL admission is disabled for every layer: any explicit FINAL claim is refused with
admission under redesign, including an otherwise complete evidence fixture. Admission will be redesigned in a separate PR after this one lands.FINAL admission is disabled pending the admission redesign (CC LOOP STOP, addendum-03); no catalog layer can be admitted FINAL at this head.
f165498aa6340860ef52de3a720ca2981eced062.lane:foundation.SOTA sources
check_schema,iter_errorsandDraft202012Validator. Its _keywords.py:215 usesre.search; _format.py:307 imports the RFC 3986 validator and :313 calls it. pyproject.toml:64 declares it informat-nongpl.$and final newlines; Doc/library/urllib.parse.rst:416 states that URL parsers do not validate inputs.rfc3986_validator.py:93. Selected fields and the source excerpt are retained in the registeredfix2-source-reads.json; the package repository is UNMIRRORED. Runtime code calls the exported validator and CI installs the pinned package.acc89dbbba0b360609635a28346b57a771af6f65: terminal claim resolution, FINAL enforcement, retained discovery-return contract, and missing-return/cumulative-survivor protocol. The existing registration helper and unittest/CLI fixtures supply the implementation and verification path.scripts/landscape.pyregistration history/schema/classification;tools/sota-convergence/build_verdicts.pyroot-aware wave resolution and unrun-row exclusion; andscripts/final_stack.pyroot-aware verdict construction. The shared-refusal correction follows the canonical reason at 65b6f118d3d9e7e2b65105f3ca01d7745d14f65b and that pin's native registration, matrix, wave and recorder paths. Non-FINAL classification and outputs retain the landed behavior.Resulting behavior
verdict_statusalias before registration classification, schema checks, wave filtering/discovery, matrix projection and recorder no-lane replay. The one reason remains exposed asfinal_stack.FINAL_ADMISSION_REFUSAL, re-exported from the shared policy inlandscape; consumers use the same helper and reason. Final-stack terminal resolution, direct verdict construction and direct enforcement use that helper, including angle terminal claims. There is no enabling flag.--writeand--checkreturn 1 for a FINAL claim and preserve any previous output bytes. Ordinary non-FINAL records, source hashing and report-only status/run-pin/review gaps continue through the existing pipeline.Evidence-class table
acc89dbb: each--writereturns 0 with terminal FINAL, status current and one FINAL layertests.test_final_registration_refusalandtests.test_final_disabled, using native test fixturesLocal commands run
The two reader probes were run before changing production: both
not_retainedandnot_returned, with nonemptyvotes_noteand nodiscovery_ref, returned--writerc 0 and terminal FINAL atacc89dbb. Their regression methods are:FinalDisabledTests.test_not_retained_post_anchor_returns_refuse_admissionFinalDisabledTests.test_not_returned_post_anchor_returns_refuse_admissionThe registration correction includes the reader's original
test_terminal_claim_refuses_before_unrun_filterandtest_alias_claim_refuses_before_unrun_filter, extended with classification/schema, full landscape, wave CLI discovery, matrix and no-lane recorder controls. On unchanged65b6f118, the eight methods produce 12 failing assertions/subcases and zero errors; ordinary-registration controls pass. The original reader file independently gives 2 failures and zero errors before the correction and rc 0 after it. All 66 focused trust/refusal/registration controls pass, including the unchanged import-trust-closure control.Earlier FINAL-specific positive/diagnostic expectations now require the shared refusal before generation. Native non-FINAL registration tests remain unchanged; the only change to a #1130 test is its FINAL-specific expected diagnostic. Independent metadata hashing and native recorded/sealed-winner validation remain exercised on non-FINAL inputs. The combined suites include the earlier same-day, stopped-V2 and survivor scenarios.
Completed final verification:
All 11 file registrations owned by this resolution match current bytes/hashes; unrelated rows and non-file metadata remain unchanged. The native registration implementations retain their non-FINAL behavior after the shared front guard. Complete added-line, body and commit-message privacy scans pass. Commit-range scans and native publication guards remain enforced at publication. No repository-wide full-suite or candidate/model invoke was run.
Decision record
docs/decisions/2026-10-12-angle-records-final-check.mdretains the v2 adoption and historical enforcement rationale, alongside the protocol supersession. This PR now lands the records, checks and enforcement plumbing with FINAL admission disabled. Re-enabling admission requires a separately reviewed redesign after this PR lands.Host evidence
No new host acceptance receipt or platform-status promotion is claimed. Synthetic lifecycle/V2 fixtures do not authenticate upstream execution or model performance.
CI incident
The earlier nine-record model-currency freshness failure was inherited from the old base. #1124 landed its repair at
929bc3c3f3b6d1f890279ff14d3f500e2d4db592, and the current base includes it. Full publication validation on the composed tree returns 0. This PR changes no currency evidence or validator rule, and native publication guards remain enforced. Hosted CI and independent review at the new head remain landing gates.Follow-ups
The ordered step-2 scope is recorded in
angle-records-step2-pr-scope-20261015.md(2026-10-15).Until screened A1 evidence is bound to candidate identity, a convergence record using an
angle_recordsCONVERGED label as capability-at-the-pin evidence must first check the candidate's current pin by hand against its A1 citations. That record must name the pin read, the source/location where it was read and the time of the hand check.Composition with merged #1130 made these two actual source-resolution decisions against earlier #1058 head
c3ddfcfbdffd1faa12748de9fa001f6360878f6a. They are recorded as inputs to the separate admission redesign; landed non-FINAL registration behavior takes precedence:final_stack.build_document, the rootless call"verdict": build_verdict(row, matrix_row, registry, reopened_by) if is_landscape else None,is replaced by Prepare rules for unrun pending scope registrations #1130's call withroot=root.build_verdicts, the importfrom scripts.landscape import GRANDFATHERED_RUN_IDS, RECORDED_VERDICT_STATUSES # noqa: E402is replaced by the combined import that also retains Prepare rules for unrun pending scope registrations #1130'sis_unrun_registration.The unfiltered
rows = [...]comprehension was inherited pre-#1058 context, not a #1058-owned deletion. #1130 addedif not is_unrun_registration(row, root=root), and Git's automatic composition already preserved that filter. The earlier three-item ownership inventory was inaccurate. Root-awarerow_run_id, frozen-row checks and run-ID discovery remain as landed, now reaching the shared refusal before registration classification.No non-FINAL registration rule changes in the shared-refusal correction. The earlier direct-builder test remains a refusal control. The reader's original two wave-filter regressions now enter the suite unchanged in behavior, extended to classification/schema, full landscape generation, matrix projection, wave CLI discovery and recorder replay. Ordinary registrations, native negative diagnostics and frozen/no-lane bytes remain controls.
final_*, the ordinary date-filter seam inbuild_document, ordering throughsorted/min/maxkeys and a nonempty-scope assertion. Existing helper tests do not qualify those boundaries./%ZZ. Apply the supported URI validator there with malformed-escape/missing-host controls before admission relies on those citations.--append-rowsskip path. A FINAL-marked row outside the append set can remain unchanged in the ledger; fresh downstream landscape validation refuses it. Track that replay behavior with retained-snapshot qualification._format.py:307is the import and:313the call; refresh retained historical locators and registrations/tests before promoting them to current evidence.Z; define/canonicalize equivalent offsets before replaying offset-form receipts. Include the direct RFC3986 dependency in the supported CI requirements compile-input comment before recompiling the lock.Checklist