Skip to content

Record v2 convergence angles with FINAL admission disabled - #1058

Merged
seathatflowsinourveins merged 10 commits into
mainfrom
codex/ns2604-angle-records-20261012
Oct 15, 2026
Merged

seathatflowsinourveins merged 10 commits into
mainfrom
codex/ns2604-angle-records-20261012

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

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.

  • Base commit: f165498aa6340860ef52de3a720ca2981eced062.
  • Lane: lane:foundation.
  • Owned paths: angle records/schema/README; angle, landscape, matrix, review-gate and final-stack readers; verdict/architecture consumers and affected tests; pinned URI dependency; dated decision/protocol supersession; source/check receipts; generated matrix/final-stack and owning evidence registry.

SOTA sources

Resulting behavior

  • Angle weights, chronology, citations and sourced scores are validated and v2 convergence is re-derived. Missing records remain explicit gaps. Licence and entitlement metadata do not score or disqualify a candidate.
  • A shared refusal checks catalog terminal fields and the verdict_status alias before registration classification, schema checks, wave filtering/discovery, matrix projection and recorder no-lane replay. The one reason remains exposed as final_stack.FINAL_ADMISSION_REFUSAL, re-exported from the shared policy in landscape; 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.
  • --write and --check return 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.
  • The retained catalog currently has 35 layers and zero FINAL claims. No layer loses a current FINAL qualification. Historical admission predicates and fixtures provide inputs for a later redesign; they do not establish admission readiness here.
  • Unrun registrations keep Prepare rules for unrun pending scope registrations #1130's native history/schema rules and no-wave result. FINAL refuses before those checks, and a FINAL-marked row is neither projected by the matrix nor preserved by recorder replay. The shared policy adds no dependency on final-stack or angle-validation modules to registration consumers, preserving the verdict gate's existing trust closure. The separate final-stack helper-API import issue remains deferred.

Evidence-class table

Claim Evidence class Command / receipt
Pinned validation and retained-input mechanisms source_review Primary sources above and registered source-read receipts
Parent permits the two unretained-return probes local_integration Synthetic CLI fixtures at acc89dbb: each --write returns 0 with terminal FINAL, status current and one FINAL layer
FINAL refuses before registration consumers and at final-stack entry points local_integration tests.test_final_registration_refusal and tests.test_final_disabled, using native test fixtures
Candidate lifecycle and V2 test inputs synthetic Fixture data; no candidate qualification, performance comparison or model invocation is claimed
Ordinary current catalog generation/checks local_integration Final-stack checks on retained repository inputs

Local commands run

The two reader probes were run before changing production: both not_retained and not_returned, with nonempty votes_note and no discovery_ref, returned --write rc 0 and terminal FINAL at acc89dbb. Their regression methods are:

  • FinalDisabledTests.test_not_retained_post_anchor_returns_refuse_admission
  • FinalDisabledTests.test_not_returned_post_anchor_returns_refuse_admission

The registration correction includes the reader's original test_terminal_claim_refuses_before_unrun_filter and test_alias_claim_refuses_before_unrun_filter, extended with classification/schema, full landscape, wave CLI discovery, matrix and no-lane recorder controls. On unchanged 65b6f118, 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:

$ systemd-run --user --scope -p CPUWeight=idle --quiet -- python3 -m unittest tests.test_angle_records tests.test_angle_records_fix1 tests.test_angle_records_fix3 tests.test_final_admission tests.test_final_ordering tests.test_final_disabled tests.test_final_registration_refusal tests.test_final_stack tests.test_verdict_review_gate tests.test_local_pages_architecture_manifest tests.test_landscape tests.test_component_matrix tests.test_layer_verdicts tests.test_resolution_protocol_docs tests.test_gap_closeouts tests.test_local_pages_policy_grants tests.test_local_pages_source_policy tests.test_local_pages_architecture_inventory tests.test_registration_rules tests.test_pending_catalog_registration tests.test_record_verdicts tests.test_validate_shards tests.test_foundation_catalog tests.test_new_host_grand_list tests.test_provenance_digest_custody
Ran 910 tests in 259.858s
OK; exit 0
$ python3 tools/sota-convergence/build_verdicts.py --check
exit 0
$ python3 scripts/final_stack.py --check
$ python3 scripts/final_stack.py --check --today 2026-10-15
both exit 0; 35 layers, zero FINAL claims
$ python3 scripts/validate.py
exit 0; 71 components, 12080 hashed files, 4 profiles, 240 receipts
$ git diff --check f165498a..HEAD
exit 0
$ gitleaks git --pre-commit --staged --redact --no-banner
exit 0; no leaks
$ gitleaks git --log-opts=f165498a..HEAD --redact --no-banner
exit 0; no leaks

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.md retains 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_records CONVERGED 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.

  • First step-2 PR, opened after Record v2 convergence angles with FINAL admission disabled #1058 lands: bind screened A1 evidence to the candidate's current repository and resolved pin (angle_records.py:132). A fail-first regression must change the repository, or only the pin, while retaining the A1 citations; the resulting candidate must not validate as CONVERGED. The regression must fail at this head before the identity-binding fix.
  • Second step-2 item, in the same PR or the next: accept resolved provider/model identities in the A1 pin check (angle_records.py:112). The commit-or-numeric-version expression rejects documented route identities when screening completes. Add a fail-first model-route control while preserving software commit/version checks.

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:

The unfiltered rows = [...] comprehension was inherited pre-#1058 context, not a #1058-owned deletion. #1130 added if 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-aware row_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.

  • Admission redesign, separate PR after this one lands: require retained discovery returns before treating an empty post-anchor layer as unchanged; validate missing/inconsistent V2 projections against retained native evidence; carry forward all remaining admission-review findings. Its author and final scope are assigned separately.
  • The redesign also owns the structural no-date oracle's blind spots: helpers outside final_*, the ordinary date-filter seam in build_document, ordering through sorted/min/max keys and a nonempty-scope assertion. Existing helper tests do not qualify those boundaries.
  • Preserve the remaining admission fixture/contract issues for that redesign: statuses rejected upstream before reaching FINAL enforcement; weak covering-layer assertions; mixed unknown/earlier/later disposition refs; duplicate-anchor rows; ambiguous manifests shared by stopped/completed runs. The disabled gate makes no admission claim for them.
  • E2E receipt citation URI fields still use the schema/normalization seam, which can discard malformed suffixes such as /%ZZ. Apply the supported URI validator there with malformed-escape/missing-host controls before admission relies on those citations.
  • Retained snapshots and historical aliases still need downstream consumer qualification. No-lane recorder replay now refuses an explicit FINAL-marked input, while a refused rebuild/check preserves prior output bytes. Require a successful current admission/check result before treating restored evidence as current qualification, and exercise recorder → matrix → final-stack → consumer refusal/retry/recovery in the separate redesign.
  • Admission-redesign item 12a: qualify the recorder's --append-rows skip 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.
  • Admission-redesign items 11a/12b: defer the eager angle-validator import at final_stack.py:38 to generation. Read-only helper consumers currently load validation dependencies before calling their helper. This is outside Record v2 convergence angles with FINAL admission disabled #1058's resolution and is tracked in the separate redesign.
  • Complete independent captures remain bounded: the URI package's full wheel/sdist, original registry/vendor/API responses and installation bytes. Selected fields/excerpts and hashes do not authenticate unavailable full responses or candidate execution.
  • Historical source locators remain pinned history. At jsonschema v4.26.0 _format.py:307 is the import and :313 the call; refresh retained historical locators and registrations/tests before promoting them to current evidence.
  • Invocation timestamps still require UTC 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.
  • The four-angle admission policy remains a research queue item requiring a pinned reference implementation and comparative workload evidence. OSV dependency maintenance remains separately owned.

Checklist

  • No new action, model-call, secret or paid-service surface introduced.
  • Source review, synthetic controls and actual local execution remain distinct.
  • Both unretained-return probes are measured before the change and become refusal regressions.
  • Previous FINAL-positive fixtures require disabled-admission refusal.
  • Peer-owned files and worktrees are preserved.
  • Both suites, the fail-first composition test, generator checks and full publication validation pass; superseded lines are listed for redesign.

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Oct 12, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-12T22:49:11.452823Z df5f32f Manual request
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread scripts/final_stack.py Resolved
Comment thread scripts/final_stack.py Resolved
Comment thread scripts/angle_records.py Resolved
@seathatflowsinourveins
seathatflowsinourveins force-pushed the codex/ns2604-angle-records-20261012 branch from df5f32f to fe64079 Compare October 13, 2026 03:16
@seathatflowsinourveins seathatflowsinourveins changed the title Record v2 angle evidence and enforce FINAL requirements Record v2 angles and enforce complete, measured FINAL evidence Oct 13, 2026
@seathatflowsinourveins
seathatflowsinourveins force-pushed the codex/ns2604-angle-records-20261012 branch 3 times, most recently from 252babe to e698c7b Compare October 14, 2026 22:46
@seathatflowsinourveins seathatflowsinourveins changed the title Record v2 angles and enforce complete, measured FINAL evidence Record v2 convergence angles with FINAL admission disabled Oct 15, 2026
@seathatflowsinourveins
seathatflowsinourveins force-pushed the codex/ns2604-angle-records-20261012 branch 3 times, most recently from bf55af5 to 92e4290 Compare October 15, 2026 11:48
@seathatflowsinourveins
seathatflowsinourveins marked this pull request as draft October 15, 2026 12:11
@seathatflowsinourveins
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
seathatflowsinourveins force-pushed the codex/ns2604-angle-records-20261012 branch from 92e4290 to 611ee63 Compare October 15, 2026 12:23
@seathatflowsinourveins
seathatflowsinourveins merged commit 51279d4 into main Oct 15, 2026
32 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the codex/ns2604-angle-records-20261012 branch October 15, 2026 13:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant