Skip to content

Merge-admission actuator: ci_failure_class consumption (READY, activation HELD) - #5974

Merged
briansrls merged 3 commits into
mainfrom
session/vivid-ibex-actuator
Jun 30, 2026
Merged

briansrls merged 3 commits into
mainfrom
session/vivid-ibex-actuator

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Slice B follow-on to Model merge-admission authority: KeyedReceipt keyed on (base_tree_hash, gate_roster_hash) #5973: authors merge-admission actuator consumption in gunbc.ci_failure_class.
  • classify_merge_admission_verdict, merge_admission_would_block, merge_admission_blocks_merge wired through existing merge_freshness_gating_status.
  • Activation HELD: GatingComputedDeferred unchanged — verdict computed, consumed by nothing that blocks real merges (same pattern as floor_exit_blocks_merge).
  • Floor witnesses in merge_admission_actuator_witness_test.dag (7 test fns).

Test plan

Made with Cursor

@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review June 29, 2026 22:36
@gunbai-bot
gunbai-bot Bot marked this pull request as draft June 29, 2026 22:38
@briansrls
briansrls force-pushed the session/vivid-ibex-actuator branch 2 times, most recently from 61920f3 to a6b14ca Compare June 29, 2026 23:11
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review June 29, 2026 23:34
@briansrls
briansrls force-pushed the session/vivid-ibex-actuator branch 2 times, most recently from 5b164cb to 9f3d2a0 Compare June 29, 2026 23:55
@gunbai-bot
gunbai-bot Bot marked this pull request as draft June 29, 2026 23:56
@briansrls
briansrls force-pushed the session/vivid-ibex-actuator branch from 9f3d2a0 to 0806fbd Compare June 30, 2026 00:02
@briansrls
briansrls marked this pull request as ready for review June 30, 2026 00:04
Base automatically changed from session/vivid-ibex-882 to main June 30, 2026 01:21
briansrls and others added 2 commits June 30, 2026 01:23
Wire receipt_is_admissible consumption through ci_failure_class:
classify_merge_admission_verdict, merge_admission_would_block,
merge_admission_blocks_merge gated on GatingComputedDeferred.
Floor-enrolled actuator witnesses in merge_admission_actuator_witness_test.dag.

Co-authored-by: Cursor <cursoragent@cursor.com>
…dmissible

Move MergeAdmissionVerdict + classify_merge_admission_verdict to
merge_admission.dag; receipt_is_admissible derives from classify ==
MergeAdmitted. ci_failure_class keeps only merge_admission_blocks_merge
(gating consumption). Drop redundant alignment witness.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls
briansrls force-pushed the session/vivid-ibex-actuator branch from 0806fbd to 863126f Compare June 30, 2026 01:24
@gunbai-bot

gunbai-bot Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor Author

DO-NOT-MERGE / hold-as-draft — gate guard from jolly-cat-29 (§5 self-host lane).

This actuator is operator-SHAPE-gated: the GatingComputedDeferred activation model (how a computed merge-admission verdict becomes a real merge block) needs the operator's shape sign-off before this is merge-eligible. Activation is correctly HELD in the diff (verdict computed, consumed by nothing that blocks real merges — benign like #5977), so this is not red on main if it lands, but it should not merge ahead of the shape ruling. Flipping back to draft until that sign-off lands and I cold-exec-gate.

Lane convention (now standard): anything awaiting an operator shape ruling or my cold-exec gate stays DRAFT with a visible guard until signed — the operator manual-merges green+approved PRs in parallel, so a child-side hold is invisible. — sent from jolly-cat-29

@gunbai-bot
gunbai-bot Bot marked this pull request as draft June 30, 2026 01:37
@gunbai-bot

gunbai-bot Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor Author

GATE PASS — guard lifted. jolly-cat-29 cold-exec gate on head 863126f (cold build, "Compiling v1-compiler" 2m46s).

  • compile-clean: 650 modules resolved, 0 diagnostics.
  • 6/6 actuator witnesses GREEN (enforcement_policy_is_keyed_receipt, denies_stale_base, denies_stale_roster, admits_fresh, red_on_revert_stale_base, activation_deferred_blocks_merge_false_for_stale).
  • Held-ness confirmed BY EXECUTION and load-bearing: activation_deferred_blocks_merge_false_for_stale = true under GatingComputedDeferred; perturbing the production authority to GatingEnforced flips it RED (false) — so the held-ness is real, not vacuous. merge_admission_blocks_merge short-circuits on gating_is_enforced(GatingComputedDeferred)=false, so it blocks NO real merge in this state.
  • §3: classify_merge_admission_verdict is the single authority both receipt_is_admissible and merge_admission_would_block read — no parallel-authority fork.

Per loyal-bee-794: this held/inert actuator shape was already operator-signed; it is merge-eligible in its HELD state. The do-not-merge guard above is LIFTED. (The separate enforcement-flip to GatingEnforced is a FUTURE PR that still needs its own operator sign-off + my gate; the guard discipline applies there.) — sent from jolly-cat-29

@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review June 30, 2026 01:45
@briansrls
briansrls merged commit d5dd68a into main Jun 30, 2026
2 checks passed
@briansrls
briansrls deleted the session/vivid-ibex-actuator branch June 30, 2026 02:59
briansrls pushed a commit that referenced this pull request Jul 1, 2026
briansrls pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
#5974)

Wire floor-emitted MergeAdmissionReceipt stamping (base_tree_hash, gate_roster_hash,
floor conclusion) and a required ci.yml merge-admission gate step that reads
merge_admission_blocks_merge. Keep GatingComputedDeferred until CI proves the
produce→consume path; flip to GatingEnforced is the follow-on activation step.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
Remove current_gate_roster_hash and merge_admission_blocks_merge from the
unwired_model grandfather roster so quiet-hawk's clean_holds stays green
once #6078 lands first and this branch wires the producer/consumer path.
merge_admission_enforcement_policy stays (still test-only).

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
Complete merge-admission activation: merge_admission_blocks_merge now
consumes receipt_is_admissible at merge time. Dissolve enforcement
scaffolds to Terminal and update witnesses to assert enforced blocking
for stale-base receipts.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls pushed a commit that referenced this pull request Jul 1, 2026
Complete merge-admission activation: merge_admission_blocks_merge now
consumes receipt_is_admissible at merge time. Dissolve enforcement
scaffolds to Terminal and update witnesses to assert enforced blocking
for stale-base receipts.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
#5974)

Wire floor-emitted MergeAdmissionReceipt stamping (base_tree_hash, gate_roster_hash,
floor conclusion) and a required ci.yml merge-admission gate step that reads
merge_admission_blocks_merge. Keep GatingComputedDeferred until CI proves the
produce→consume path; flip to GatingEnforced is the follow-on activation step.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
Remove current_gate_roster_hash and merge_admission_blocks_merge from the
unwired_model grandfather roster so quiet-hawk's clean_holds stays green
once #6078 lands first and this branch wires the producer/consumer path.
merge_admission_enforcement_policy stays (still test-only).

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
Complete merge-admission activation: merge_admission_blocks_merge now
consumes receipt_is_admissible at merge time. Dissolve enforcement
scaffolds to Terminal and update witnesses to assert enforced blocking
for stale-base receipts.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
#5974)

Wire floor-emitted MergeAdmissionReceipt stamping (base_tree_hash, gate_roster_hash,
floor conclusion) and a required ci.yml merge-admission gate step that reads
merge_admission_blocks_merge. Keep GatingComputedDeferred until CI proves the
produce→consume path; flip to GatingEnforced is the follow-on activation step.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
Remove current_gate_roster_hash and merge_admission_blocks_merge from the
unwired_model grandfather roster so quiet-hawk's clean_holds stays green
once #6078 lands first and this branch wires the producer/consumer path.
merge_admission_enforcement_policy stays (still test-only).

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
Complete merge-admission activation: merge_admission_blocks_merge now
consumes receipt_is_admissible at merge time. Dissolve enforcement
scaffolds to Terminal and update witnesses to assert enforced blocking
for stale-base receipts.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
#5974)

Wire floor-emitted MergeAdmissionReceipt stamping (base_tree_hash, gate_roster_hash,
floor conclusion) and a required ci.yml merge-admission gate step that reads
merge_admission_blocks_merge. Keep GatingComputedDeferred until CI proves the
produce→consume path; flip to GatingEnforced is the follow-on activation step.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
Remove current_gate_roster_hash and merge_admission_blocks_merge from the
unwired_model grandfather roster so quiet-hawk's clean_holds stays green
once #6078 lands first and this branch wires the producer/consumer path.
merge_admission_enforcement_policy stays (still test-only).

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
Complete merge-admission activation: merge_admission_blocks_merge now
consumes receipt_is_admissible at merge time. Dissolve enforcement
scaffolds to Terminal and update witnesses to assert enforced blocking
for stale-base receipts.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
#5974)

Wire floor-emitted MergeAdmissionReceipt stamping (base_tree_hash, gate_roster_hash,
floor conclusion) and a required ci.yml merge-admission gate step that reads
merge_admission_blocks_merge. Keep GatingComputedDeferred until CI proves the
produce→consume path; flip to GatingEnforced is the follow-on activation step.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
Remove current_gate_roster_hash and merge_admission_blocks_merge from the
unwired_model grandfather roster so quiet-hawk's clean_holds stays green
once #6078 lands first and this branch wires the producer/consumer path.
merge_admission_enforcement_policy stays (still test-only).

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 1, 2026
Complete merge-admission activation: merge_admission_blocks_merge now
consumes receipt_is_admissible at merge time. Dissolve enforcement
scaffolds to Terminal and update witnesses to assert enforced blocking
for stale-base receipts.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request Jul 1, 2026
…CI proof (#6080)

* WIP: Activate merge-admission gate (#5974): build the missing PRODUCER (stamp

* WIP: Activate merge-admission gate (#5974): build the missing PRODUCER (stamp

* WIP: Activate merge-admission gate (#5974): build the missing PRODUCER (stamp

* Activate merge-admission gate: in-repo producer + enforcement consumer (#5974)

Wire floor-emitted MergeAdmissionReceipt stamping (base_tree_hash, gate_roster_hash,
floor conclusion) and a required ci.yml merge-admission gate step that reads
merge_admission_blocks_merge. Keep GatingComputedDeferred until CI proves the
produce→consume path; flip to GatingEnforced is the follow-on activation step.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Revert ci.yml from commit — workflow file push blocked by GitHub App token

ci_workflow.dag authority updated; generated_artifact_drift_gate will require
regen via main_wet on merge (operator/workflows permission).

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: Activate merge-admission gate (#5974): build the missing PRODUCER (stamp

* WIP: COMPLETE merge-admission activation (royal-moth-238 archived mid-task, #

* WIP: Build a floor-enrolled lens that BANS UNWIRED MODELS: any declared type/

* WIP: Build a floor-enrolled lens that BANS UNWIRED MODELS: any declared type/

* chore(unwired_model): roster-trim merge_admission decls wired by #5974

Remove current_gate_roster_hash and merge_admission_blocks_merge from the
unwired_model grandfather roster so quiet-hawk's clean_holds stays green
once #6078 lands first and this branch wires the producer/consumer path.
merge_admission_enforcement_policy stays (still test-only).

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(ci): flip merge_freshness_gating_status to GatingEnforced (#5974)

Complete merge-admission activation: merge_admission_blocks_merge now
consumes receipt_is_admissible at merge time. Dissolve enforcement
scaffolds to Terminal and update witnesses to assert enforced blocking
for stale-base receipts.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(#6080): address review — roster scaffolds, shell exceptions, fail-closed git

- Add merge_admission_* Terminal disposition scaffolds to unwired_model_roster
  (peer pattern with gunbc_ci_footprint_granularity_disposition).
- Enroll merge_admission_produce + stamp/gate tools on
  medium_structure_exception_roster with dissolve-on trigger.
- Remove fail-open `2>/dev/null || true` from merge-target tree hash reads
  and gate fetch script (§5 stale-base path).

Co-authored-by: Cursor <cursoragent@cursor.com>

* revert(#6080): hold GatingEnforced flip until real CI floor proof

Restore GatingComputedDeferred, NOT-ENFORCING gate step scaffold, and
deferred witnesses. Flip to GatingEnforced is a follow-on after a real
CI run proves produce→consume (fresh admitted, stale/red blocked).

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(#6080): roster-enroll merge_admission metadata unwired decls

Add merge_admission_gating_activation_trigger and
merge_admission_receipt_schema to unwired_model_roster — self-tested
metadata strings with no production consumer (peer pattern with scaffold
disposition rows).

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(#6080): regen ci.yml — realize merge-admission producer + gate steps

Sync committed workflow with ci_spec/ci_workflow model: floor stamp tail
(FLOOR_EXIT + merge_admission_stamp) and merge-admission gate step.
Closes model↔workflow fork flagged by drift gate review.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(#6080): full wire round-trip + set +e for red-floor stamp path

- parse_receipt_wire reads head_sha (line 4) and pr_number (line 5);
  witness asserts full round-trip before GatingEnforced flip.
- set +e before claim_executor so FLOOR_EXIT is captured on red floor
  and Failure receipt is stamped (ci.yml regen).

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: COMPLETE merge-admission activation (royal-moth-238 archived mid-task, #

* fix(merge-admission): export CI_FLOOR_EXIT to stamp subprocess

Prefix CI_FLOOR_EXIT on the gunbc invocation line so the stamp tool
witnesses red floor exits instead of defaulting to Success (Absent env).

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(merge-admission): reject wire missing head_sha instead of fabricating zero

parse_receipt_wire now requires four lines (base, roster, conclusion,
head_sha) and returns Absent on short bodies — no minted 000…0 SHA.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(merge-admission): stamp main-tip tree hash to match gate

KeyedReceipt requires base_tree_hash == current main's tree at CI time.
The stamp was recording merge-base tree while the gate compared origin/main
tip — causing false MergeDeniedStaleBase on normal PRs.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(merge-admission): align stamp receipt fields and tidy shell nits

Parse PR number into stamp_floor_receipt so struct and wire agree; use
render_receipt_wire. Drop no-op concat tails; treat empty CI_FLOOR_EXIT as unset.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(merge-admission): trim shell stdout before receipt fields

git show / pwd / jq / rev-parse stdout carries trailing newlines that
double-split the wire and break gate tree-hash comparison at enforcement.
Single authority: shell_stdout_line in merge_admission_produce.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(merge-admission): fail-closed on partial wire and empty floor exit

Require five wire lines (incl. pr_number); unparseable pr → Absent.
Treat unset/empty CI_FLOOR_EXIT as failure, not green.

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: COMPLETE merge-admission activation (royal-moth-238 archived mid-task, #

* fix(ci): unblock compile-clean gate and merge-admission stamp

- Stamp: use shell.Exec printenv instead of shell.Env (v2 shell overlay
  shadows dsl and lacks Env when both source roots are active).
- v2/extdeps/shell: restore shell.Env service for primary-precedence
  compile-clean perturb receipt.
- Remove stale inert_lens_hygiene witness (superseded by unwired_model).

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: COMPLETE merge-admission activation (royal-moth-238 archived mid-task, #

* WIP: COMPLETE merge-admission activation (royal-moth-238 archived mid-task, #

* fix(merge-admission): use shell.Env.Get in stamp env_var helper

Consume the typed shell.Env transport instead of hand-built printenv
via shell.Exec — single authority for env reads (review 34244).

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ci): repair three floor witnesses broken by merge-admission wiring

- Bump ci job step-count witness 6→7 for merge-admission gate step.
- Trim stale unwired_model_roster entries wired on main since last census.
- Align zero-budget spawn-width witness with int_min fallback semantics.

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: COMPLETE merge-admission activation (royal-moth-238 archived mid-task, #

* fix(#6080): complete claude review — stamp witnesses + roster scaffold enrollment

- Witness STAMP_EXIT propagation and fail-closed CI_FLOOR_EXIT policy string.
- Enroll unwired_model roster scaffold decls + stamp policy on roster.
- Floor witness asserts owner/ceiling/dissolution-trigger documentation.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(#6080): clarify gate step name — receipt required, freshness held

Step label now distinguishes structural receipt checks (always enforced)
from freshness verdict blocking (held until GatingEnforced flip).

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ci): sync unwired_model_roster after main drift (#6066 ACL)

Enroll 12 Tailscale ACL unwired decls from main; trim 5 stale entries
for witnesses wired on main since last roster census.

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: COMPLETE merge-admission activation (royal-moth-238 archived mid-task, #

* WIP: COMPLETE merge-admission activation (royal-moth-238 archived mid-task, #

* fix(ci): sync unwired_model_roster after #6061 affected-set rebase

Enroll floor_host_scaffold_precompute_would_skip from main drift.

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: COMPLETE merge-admission activation (royal-moth-238 archived mid-task, #

* WIP: COMPLETE merge-admission activation (royal-moth-238 archived mid-task, #

* fix(ci): trim stale extdeps_shape_transport_policy roster entries

Remove two decls retired from the live unwired census when main landed

Co-authored-by: Cursor <cursoragent@cursor.com>
#6043; unwired_model_no_unrostered_or_stale was failing batch 2.

* WIP: COMPLETE merge-admission activation (royal-moth-238 archived mid-task, #

* fix(ci): sync unwired_model roster after main rebase (#deploy-access)

Rebase onto main renamed deploy access types and added GPU witness decls;
regenerate roster from live census and restore scaffold metadata decls.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant