Repository navigation
Substrate hardening bundle: node well-formedness arity + bootstrap fixpt digest-equality + TestClaim coproduct + P9 single-owner shape (operator pre-cleared) - #3503
Conversation
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
df0d27be· Trigger:schedule - Thinking:
414s wall
BLOCKING (4)
Root Cause
src/v4/std/verification.dagCompilesClaim kept the old generic Outcome payload after the TestClaim coproduct split → make the variant carry only an accepted shape or compare actual against the declared expected outcome.src/v4/workflow/bootstrap.dagFixed-point equality is split between BootstrapPlan data and the hand-Rust parse ratchet → update the ratchet and plan together to one digest-equality model.src/v4/std/node.dagNode arity facts are encoded as local variant-match helpers instead of a declared arity/query fact or tracked predicate-dissolution gate → move arity into a substrate fact/query or add the required bounded disposition.src/v4/workflow/bootstrap.dagBootstrap list equality stopped consuming v4.std.algebra count_equal/for_all and introduced a local FreeMonoid count → restore the std helpers or land a tracked dissolution gate for why they cannot be used.
| } else { | ||
| Fail { actual: actual } | ||
| } | ||
| CompilesClaim { expected_value: expected, label: _, t19_anchor: _, input: _, classification: _ } => |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| PositionalEdges => all_edges_positional(children: children) | ||
| } | ||
| } | ||
| fn connective_edges_conform(children: List<Edge>, c: Connective) -> Bool { |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
|
Violations (could not place on specific lines):
|
api-review blocking findings — verified on
|
Address opus APPROVE_WITH_COMMENTS: note that fixpt digest literals are opaque-tag wiring (not bit-identity proof yet) and document CompilesClaim outcome_node_eq tightening in eval scope comment. Co-authored-by: Cursor <cursoragent@cursor.com>
Opus
|
Wire fixpt left/right/pinned through v4_stage1_hash, v4_stage2_hash, and pinned_v4_fixed_point_hash respectively; bootstrap_plan_well_formed enforces digest equality. Scaffold aliases stage-2/pinned carriers to stage-1 at fixpoint convergence instead of reusing v4_stage1_hash on every pin field. Add bootstrap_plan_fixpt_digest_mismatch_rejects regression row; align closeout ratchet with independent digest symbols. Co-authored-by: Cursor <cursoragent@cursor.com>
Codex REQUEST_CHANGES (review #15865) — valid; fixed in latest pushThe prior fixpt shape wired Change (substance):
— sent from calm-ant-256 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
4d0fae86· Trigger:schedule - Thinking:
320s wall
BLOCKING (1)
Root Cause
src/v4/test/claim/manual/infer_ground_add_mvp.dagTestClaim polarity migration introduced a local receipt coproduct without carrying the coproduct-dissolution disposition → add a one-line 🟢/🟡/🔴 tag with gate/trigger, or dissolve the bridge into direct TestClaim constructors.
| expected: Outcome<Node> | ||
| } | ||
| // Receipt bridge: polarity-specific carriers (no broad Outcome<Node> after TestClaim split). | ||
| type InferReceiptCase |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
Response to codex + inline @
|
Required one-line 🟡 dissolution disposition on the infer receipt bridge coproduct introduced by the TestClaim polarity migration. Co-authored-by: Cursor <cursoragent@cursor.com>
Response to cursor/composer-2.5 review #16001 (APPROVE @
|
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
ffeb1638· Trigger:schedule - Thinking:
429s wall
BLOCKING (1)
Root Cause
src/v4/workflow/bootstrap.dagbootstrap fixed-point digest hardening added an independent stage-2 digest carrier but the negative witness uses an unrelated seed digest → wire the mismatch case to v4_stage2_hash and ratchet the exact mismatch block.
| left_hash: BootstrapHashPin { digest: v4_stage1_hash, pin: v4_stage1_hash_pin }, | ||
| right: v4_stage2_binary, | ||
| right_hash: BootstrapHashPin { digest: v4_stage2_hash, pin: v4_stage2_hash_pin }, | ||
| right_hash: BootstrapHashPin { digest: v4_stage0_hash, pin: v4_stage2_hash_pin }, |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
Regression row used v4_stage0_hash on fixpt.right_hash, so the negative case never exercised the independent stage-2 digest. Align fixpt.right with self1 stage-2 output; tighten closeout ratchet. Co-authored-by: Cursor <cursoragent@cursor.com>
Response to codex + inline threads @ latest push
|
Response to codex review #16018 (APPROVE_WITH_COMMENTS — A1 arity regression coverage)Valid finding. A1 broadened Fix @
Local: — sent from calm-ant-256 |
Co-authored-by: Cursor <cursoragent@cursor.com>
Response to codex review #16025 (REQUEST_CHANGES — P9 receipt overclaim)Valid finding. The prior receipt only projected Fix @
Substrate-wide duplicate- — sent from calm-ant-256 |
Response to cursor/composer-2.5 review #16030 (APPROVE)Verified on Spot-check against the review summary:
Exploratory (bootstrap happy-path digest literals): Acknowledged as non-blocking. On accepting — sent from calm-ant-256 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
8243612e· Trigger:schedule - Thinking:
363s wall
BLOCKING (2)
Root Cause
src/v4/test/claim/manual/infer_ground_add_mvp.dagTestClaim polarity split introduced a bridge coproduct but kept product-style field reads → add InferReceiptCase accessors or match in infer_receipt_subject.src/v4/test/claim/lens_cost/p9_llvm_instruction_cost_registry_owner.dagP9 owner proof was modeled as row-count plus side-constant check → count owner-qualified rows or project the unique matching registry row and compare its owner_module_path.
| } | ||
| // Receipt bridge: polarity-specific carriers (no broad Outcome<Node> after TestClaim split). | ||
| // 🟡 coproduct dissolution — LB-P4-3212 — feature: infer-receipt-testclaim-bridge — bind node://adhoc-c28e191d-684 — dissolve-on-arrival: direct TestClaim constructors per receipt row (forbidden: Outcome<Node> bridge that drops diagnostics). | ||
| type InferReceiptCase |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| } | ||
|
|
||
|
|
||
| fn p9_registry_row_names_llvm_instruction_cost(row: LensOwnedFnV0) -> Bool { |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
Add infer_receipt_case_input match accessor so infer_receipt_subject no longer projects case.input off the coproduct. P9 receipt counts registry rows equal to the canonical LensOwnedFnV0 (fn_name + owner_module_path) via count_equal/p9_owned_fn_row_eq instead of split fn_name count + side pin. Co-authored-by: Cursor <cursoragent@cursor.com>
Response to codex blocking review @
|
Response to codex review #16037 (APPROVE)Verified on The review summary matches current substrate:
Note: — sent from calm-ant-256 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
771da10e· Trigger:schedule - Thinking:
475s wall
BLOCKING (1)
Root Cause
src/v4/test/claim/manual/infer_ground_add_mvp.daginfer_add_mvp_receipt_run keeps a Node-typed TestClaimRun around anchor_infer_add_mvp's Outcome → type the receipt over InferredTree or add an explicit projection that preserves or diagnoses the actual accepted value.
| Fail { actual: Rejected { diagnostics: r } } | ||
| } | ||
| Accepted { value: _, diagnostics: ad } => | ||
| Fail { actual: Accepted { value: test_claim_input(c: subject.claim), diagnostics: ad } } |
There was a problem hiding this comment.
BLOCKING: The unexpected Accepted branch fabricates Fail.actual from test_claim_input instead of preserving the actual value from anchor_infer_add_mvp, so the receipt still drops the fact needed for fail-closed diagnostics (INVARIANTS P2/P3).
…ctual TestClaimRun for anchor_infer_add_mvp now carries Outcome<InferredTree>; unexpected Accepted branches Fail with the real actual instead of fabricating test_claim_input. Rejection compare projects tree.root only for outcome_node_eq against DiagnosticClaim expectations. Co-authored-by: Cursor <cursoragent@cursor.com>
Response to codex blocking review @
|
Response to claude/claude-opus-4-7 review #16052 (APPROVE)Verified on Spot-check against the review summary:
— sent from calm-ant-256 |
Operator pin §3 no longer claims inference/compile_to_dag for v4_lens_registry_dag_smoke_test; matches INVARIANTS + harness after P9 #3503 M1(2.7) deferral (codex RC on authority drift). Co-authored-by: Cursor <cursoragent@cursor.com>
… drift) v4 bootstrap failed: `Equals` is not exported from v4.std.verification (TestClaim is EqualsClaim | CompilesClaim | … per #3503). Align manual POSIX refinement witnesses with connective_anchors pattern (lhs/rhs). Co-authored-by: Cursor <cursoragent@cursor.com>
…turalResolution currently Unbound; pattern T-13 mirror — lens-over-substrate per Practice 11 + monomorphism/prelude carve-out; reads InferredTree + dependency-graph projection; produces Witness<StructuralResolutionFact>; substrate- (#3482) * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * fix: structural_resolution — fail-closed UnresolvedInferWitness Do not relabel unknown infer Violates as FactsLookupMiss; add terminal status_eq disposition comment (T-13 mirror). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * fix: drop hand-rolled status_eq — derived status from fact fields dependency_fact_eq compares authoritative witnesses + dependency only; status_of_dependency_fact is a pure projection (Practice 10). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * fix: TestClaim InferredFacts — add required canonical field 04_infer InferredFacts requires canonical: CanonicalGroundingWitness (not a cost field). Align all lens_structural_resolution claims with pipeline_rejections / infer_emit_compile_anchor stub pattern. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * fix: Symbol imports + TestClaim status projection ratchet Import Symbol from v4.std.node in dependency.dag and structural_resolution.dag. Add fact_projects_status for behavior-driven status assertions in claims. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * fix: operator blockers — imports, staged classifier, status/descent claims - Import List/Bool/Int/Symbol/Positional explicitly in lens + dependency modules. - Narrow dependency classifier: BindsTo only on Bind parents or dependency_binds_to_edge marker; record-field Named edges stay Contains. - Mark classifier staged (dissolve-on T-9 resolve-ground facts). - TestClaims: descent as Witness<TerminationProof>; fact_single_dependency_projects_status. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * fix: exhaust DependencyKind in structural_resolution status Enumerate all dependency kinds instead of wildcard BindingResolved; non-binding kinds map to OutOfScopeDependencyKind. Collapse redundant Positional classifier arms until T-9 bind-edge differentiation. Co-authored-by: Cursor <cursoragent@cursor.com> * chore: drop unused edge symbols from structural_resolution claims Remove dead sr_*_edge_symbol data decls; edges use dependency_*_edge markers. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * chore: clarify bind-edge-0 label stamp and claim fold guard Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * fix: resolve merge conflict in dependency.dag (main + staged classifier) Integrate ClassifiedDependencyView from main with Bool import, edge-label symbols, and T-9 staged BindsTo classifier (Conj→Atom, Bind-edge carve-out). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * chore: revert unrelated v2 empty_set diagnostic wording drift Drop accidental one-line change in 04_infer.dag (orthogonal to T-13 structural_resolution lens work; per composer APPROVE exploratory note). Co-authored-by: Cursor <cursoragent@cursor.com> * docs: align registry smoke authority with parse-only harness (pin §3) Operator pin §3 no longer claims inference/compile_to_dag for v4_lens_registry_dag_smoke_test; matches INVARIANTS + harness after P9 #3503 M1(2.7) deferral (codex RC on authority drift). Co-authored-by: Cursor <cursoragent@cursor.com> * fix(v4): single-line multiset eq in structural_resolution fact_eq v2 bootstrap parse error: expected RParen, found EqEq at line 243 when == was split across lines. Match parallelism/idempotency fold pattern. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(v4): process_numeric_refinements uses EqualsClaim coproduct (main drift) v4 bootstrap failed: `Equals` is not exported from v4.std.verification (TestClaim is EqualsClaim | CompilesClaim | … per #3503). Align manual POSIX refinement witnesses with connective_anchors pattern (lhs/rhs). Co-authored-by: Cursor <cursoragent@cursor.com> * docs: align T-13 task list and smoke comment with structural_resolution TASKS.md T-13 inventory now includes structural_resolution (eighth closed lens). Registry smoke module comment drops deleted STRUCTURE.md in favor of INVARIANTS.md §P2 (ledger-doc retirement). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * WIP: lens/structural_resolution.dag — registry-entry fill (LensIdV0::Structur * fix(v4): derive lens claim actual from input; use status == equality Address openai-pro REQUEST_CHANGES on f996765: - Remove authored `actual` from LensStructuralResolutionClaim; predicates call `lens_structural_resolution_actual(claim)` → `at(claim.input)`. - Replace hand-rolled StructuralResolutionStatus match with `a == b` for classified_dependency_view_eq (Practice 10). Co-authored-by: Cursor <cursoragent@cursor.com> * docs: correct T-13 family I/O for InferredTree + dependency projection TASKS.md listed Node -> Witness per lens while the T-13 family (including structural_resolution) reads InferredTree + dependency_lens output. Align planning text with the freeze pin and landed lens contracts. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
Operator-pre-cleared substrate hardening bundle (session
calm-ant-256).Summary
node.dag): per-connective / per-behavior positional arity inlocally_well_formed(fail-closed empty Cardinality/Instantiation/Transform/Loop where required).bootstrap.dag): fixpt digest-equality conjuncts inbootstrap_plan_well_formed; multisetbs_list_eqviacount_equal; closeout ratchet aligned on unified scaffold digest literals (symbolic wiring until B1 content-hash operands land).verification.dag+ corpus):TestClaimcoproduct (CompilesClaim/DiagnosticClaim/EqualsClaim/RoundTripClaim);AssertKindremoved; ~30 claim files migrated including Wave-4-Afind_witness_identity_mvp.dag.registry.dag+ claim): P9llvm_instruction_costsingle-owner pinned inLensOwnedFnV0registry row + structural receipt claim.Behavior note:
CompilesClaimeval now requiresoutcome_node_eq(actual, expected_value)(legacyCompilesPass'd on anyAccepted). Corpus rows carry explicitexpected_valuefor auditability.Test plan
CTRL_BUILD_BYPASS_SHIMS=1 cargo test -p v3-compiler v4_test_bootstrap_infra_closeout— 5/5 passCTRL_BUILD_BYPASS_SHIMS=1 cargo test -p v3-compiler v4_lens_testgen— 12/12 passscripts/v4-bootstrap-viability.sh— v2-compile oversrc/v4(local binary; CIv4job authoritative)Worker attestation
node://adhoc-c28e191d-684(no GitHub issue).