MECH-342: Maintenance-time readiness-driven commitment-release coupling
Claim ID: MECH-342 Subject: control_plane.commit_maintenance_release Status: IMPLEMENTED Registered: 2026-06-02 Depends on: MECH-090 (commit-entry predicate / R-c readiness conjunction; beta-gate latch + CommitReadiness signal) Blocks: V3-EXQ-592f reach-axis retest (pending_retest_after_substrate); the implicit “R-c governs maintenance/release too” claim that 592f localised as a substrate gap.
Problem
V3-EXQ-592f (controlled state-machine probe, 2026-06-01; FAIL_NO_RELEASE_AUTHORITY) confirmed that the MECH-090 R-c readiness conjunction is admission-only. The two readiness predicates – BetaGate.should_admit_elevation (within-tick decisiveness / score_margin) and CommitReadiness.is_above_floor (across-tick nav_competence) – gate beta_gate.elevate() only on commit entry (bistable: result.committed AND NOT beta_gate.is_elevated). When execution readiness degrades while the agent is already beta-elevated, the predicates still fire as diagnostics (nav_blocks advanced 6/stage in 592f stages C/D) but neither calls beta_gate.release() nor clears e3._committed_trajectory. 592f measured zero state-occupancy suppression and zero decommit transitions across stages B/C/D.
The MECH-090 release-path audit (evidence/planning/mech090_release_path_audit_2026-06-02.md) ruled out (B1) all four existing release pathways covering this degraded-readiness- mid-commitment case:
| Pathway | Trigger | Covers degraded readiness? |
|---|---|---|
| ARC-028 / MECH-105 hippocampal-completion | completion_signal >= 0.75 (options GOOD) | NO – directionally opposite (degraded readiness pushes the signal AWAY from release) |
| MECH-091 urgency-interrupt | z_harm_a/z_harm_un.norm() > threshold | NO – threat axis only |
| V_s commit-release (MECH-269/284/287) | committed anchor key dropped (schema staleness); use_vs_commit_release default OFF | NO – schema axis, not readiness |
| SD-034 closure operator | rule_state stabilised (positive completion) | NO – rule-stability axis |
The motor-program-cessation lit-pull (evidence/literature/targeted_review_mech_090_release_motor_cessation/SYNTHESIS.md) returned verdict B3b: open a NEW substrate for a graded/online, targeted, R-c/beta-gate-level maintenance-time release on degraded decisiveness. Anchors:
- Resulaj/Kiani/Wolpert/Shadlen 2009 (Nature) – changes-of-mind: an already-initiated action is reversed by continued internal evidence. Commitment is NOT an irreversible latch; the TRIGGER is a bounded accumulation of evidence.
- Cavanagh/Frank et al. 2011 (Nat Neurosci) – the STN (REE’s beta-gate substrate) dynamically and bidirectionally modulates the commitment threshold; disabling it produces impulsive under-commitment, not stable holding. An admission-only beta gate is a lesioned STN. (REFUTES “admission-only is correct”.)
- Falasconi/Kanodia/Arber 2025 (Nature) – BG output (SNr) bidirectionally and movement-specifically licenses/suppresses ongoing motor programs in real time; a distinct, faster substrate than slow goal-level disengagement.
- Wessel/Diesburg et al. 2022 (Curr Biol) – the canonical stop-signal STN brake is external-cue-triggered and non-selective – the WRONG model/scope. Already covered in REE by MECH-091 (the threat analog).
This is the autopsy’s option (a) (“a new R-c-level release coupling”) resurfacing under B3b – but the biology adds two binding constraints the naive option-(a) sketch lacked (graded-online, not a Schmitt flag; targeted + hysteretic with a reengagement path).
Solution
A NEW pure-arithmetic regulator, CommitMaintenanceRelease (ree-v3/ree_core/policy/commit_maintenance_release.py), and a release branch in REEAgent.select_action that mirrors the MECH-091 urgency-interrupt template. The SAME two R-c readiness signals that MECH-090 AND-composes to admit a commitment here drive a graded, bounded-accumulation release of an already-elevated beta latch when they degrade mid-commitment.
Accumulator dynamics (per maintenance tick, only while beta is elevated)
deficit_d = clip((score_margin_floor - score_margin) / score_margin_floor, 0, 1)
# within-tick DECISIVENESS axis (Hanes & Schall accumulator reading;
# 0 when margin healthy OR no decisiveness signal -> inert axis)
deficit_n = clip((nav_floor - nav_competence) / nav_floor, 0, 1)
# across-tick MOTOR-READINESS axis (Cisek-Kalaska affordance prep +
# Roesch premature-commit; 0 when no nav signal -> inert axis)
combined = max(deficit_d, deficit_n)
# OR-composition: EITHER axis failing drives release pressure.
# The De Morgan dual of the MECH-090 AND admission, conflict-graded
# by the worse axis (Cavanagh/Frank).
recovered = (margin >= score_margin_reengage OR no margin signal)
AND (nav >= nav_reengage OR no nav signal)
if combined > 0: pressure += accumulation_rate * combined # drift-to-bound (Resulaj)
elif recovered: pressure = max(0, pressure - leak_rate) # reengagement path
else: pressure unchanged # dead-band hold (contested phase)
pressure = clip(pressure, 0, pressure_cap)
fire = pressure >= release_bound # on fire, pressure resets to 0
On fire the caller releases the specific committed program (targeted, not a global brake): beta_gate.release(); _committed_step_idx = 0; _committed_anchor_keys = None; e3._committed_trajectory = None. Pressure is reset to 0 at commit entry (each committed program accumulates independently) and on fire.
Why this satisfies the binding constraints
- Graded / online, not a one-shot Schmitt flag. A single below-floor tick does not release; pressure drifts to the bound over
release_bound / accumulation_rateticks at maximum deficit (5 at defaults), and proportionally more ticks at smaller deficits (conflict-scaled). This is Resulaj bounded accumulation + Cavanagh conflict-graded threshold, and it honours the Brandstaetter/Klinger contested-phase warning that disengagement is an extended phase, not a flag. - Targeted + hysteretic with a reengagement path. The release touches only the active beta latch + committed trajectory (Falasconi movement-specific, not Wessel non-selective). The separate
reengagelevels (above the floors) create a hysteresis band: a transient dip that recovers leaks pressure back to 0 (reengagement) rather than committing to abort, guarding the premature-abort pole (Resulaj failure signature). The dead-band between floor and reengage holds pressure (the contested phase).
Config (REEConfig; all default no-op)
| Param | Default | Purpose |
|---|---|---|
use_maintenance_release | False | master switch (bit-identical OFF) |
maintenance_release_score_margin_floor | 0.05 | decisiveness failing at/below |
maintenance_release_score_margin_reengage | 0.10 | decisiveness recovered at/above |
maintenance_release_nav_floor | 0.3 | nav_competence failing at/below |
maintenance_release_nav_reengage | 0.5 | nav_competence recovered at/above |
maintenance_release_accumulation_rate | 0.2 | per-tick drift scale (conflict-scaled) |
maintenance_release_leak_rate | 0.1 | reengagement leak per recovered tick |
maintenance_release_bound | 1.0 | release threshold |
maintenance_release_pressure_cap | 1.5 | accumulator clamp |
All surfaced through REEConfig.from_dims. Floors mirror the MECH-090 admission floors (commit_readiness_floor=0.05, mech090_readiness_floor=0.3).
Data flow
[e3.last_scores (last completed E3 selection, REE lower-is-better)] -> score_margin (decisiveness axis)
[CommitReadiness EMA (MECH-090 nav signal)] -> nav_competence (nav axis)
-> CommitMaintenanceRelease.tick(score_margin, n_candidates, nav_competence)
-> [pressure >= release_bound?]
-> beta_gate.release() + reset _committed_step_idx + clear _committed_anchor_keys + clear e3._committed_trajectory
The release branch lives in the select_action release block immediately after the MECH-091 urgency block, reading self.e3.last_scores (available every tick, including between-E3-tick steps; a controlled state-machine probe sets it directly) and self.commit_readiness.get_readiness() (None when CommitReadiness is not instantiated – the nav axis is then inert and only decisiveness drives).
Architecture context — distinctness (falsifiable)
MECH-342 must NOT collapse into any existing mechanism. The falsifiable distinctions the substrate respects:
- vs MECH-090 admission predicate: that gate fires on commit ENTRY and is AND-composed; MECH-342 fires during MAINTENANCE and is OR-composed (the De Morgan dual). MECH-090’s admission axis (V3-EXQ-592d 4-arm validator) is not reopened.
- vs MECH-091 urgency-interrupt: fires on internal decisiveness/nav decay with
z_harm_aBELOW threshold (no harm-stream input). - vs ARC-028 / MECH-105 completion: fires when
completion_signalis LOW (poor options) – the opposite regime (no completion-signal input). - vs MECH-269b / V_s commit-release: fires with a STABLE world schema (no anchor-set input).
- vs MECH-340 ghost-goal persistence/efficacy gate: operates on the ACTIVE beta-gate commitment at motor-program timescale, not the ghost-goal bank at goal-appraisal timescale.
What this enables
- Closes the V3-EXQ-592f reach gap: the maintenance-time release authority the 592f probe measured as zero (state-occupancy suppression + decommit transition).
- The 592f manifest’s
pending_retest_after_substratestays TRUE until this substrate lands AND a 592f-style successor probe (V3-EXQ-592g) validates the maintenance-time release.
MECH-094
tick(simulation_mode=True) is a no-op (no pressure advance, returns False). A replay / DMN tick must not abort a committed motor program. Matches the SD-035 / MECH-279 / MECH-313 / MECH-320 / commit_readiness simulation_mode pattern.
Phased training
Not applicable. Pure-arithmetic regulator; no learned parameters, no gradient flow, no encoder head. Same class as MECH-313 / MECH-320 / commit_readiness.
Validation experiment
V3-EXQ-592g (queued via /queue-experiment): a 592f-style controlled state-machine probe with use_maintenance_release=True. Forces beta elevated + E3 committed pointer present + degraded readiness sustained, and verifies the new coupling now produces state-occupancy suppression + a decommit transition (the quantities 592f measured as exactly zero), with no false abort under healthy readiness (the premature-abort guard).
Related claims
MECH-090 (parent; commit-entry predicate / R-c admission conjunction), MECH-091 (urgency-interrupt; sibling release pathway, threat axis), ARC-028 / MECH-105 (hippocampal-completion release; opposite regime), MECH-269b / MECH-284 (V_s commit-release; schema axis), SD-034 (closure operator; rule-stability axis), MECH-340 / ARC-079 / Q-053 (goal-level disengagement; ghost-goal bank timescale), MECH-094 (simulation-mode call-site scoping).