Last updated: 2026-04-04
Three Lean modules forming a layered stack. Each layer feeds the next.
┌─────────────────────────────────────────────────────┐
│ Layer 3: PersistenceModel.lean │
│ Governance-channel dynamics: rollback depletion, │
│ external repair, three-way recovery distinction │
│ (10 invariants) │
├─────────────────────────────────────────────────────┤
│ Layer 2: BranchSelector.lean │
│ Closure-family selection: dual-budget model, │
│ susceptibility/priming, burn profiles │
│ (6 invariants) │
├─────────────────────────────────────────────────────┤
│ Layer 1: TaxonomyGraph.lean │
│ Static topology: domains, edges, reachability, │
│ role coherence, closure classification │
│ (terminal set, closure map, role coherence) │
└─────────────────────────────────────────────────────┘
Layer 1 shows branching precursors reach multiple terminal families. Layer 2 explains which family wins (budget depletion race). Layer 3 handles what happens once the governance channel fires.
| File | Contents |
|---|---|
LeanProofs/TaxonomyGraph.lean |
Static taxonomy: 15 domains, roles, edges, reachability, role coherence, closure map |
LeanProofs/BranchSelector.lean |
Closure-family selection: dual-budget susceptibility model |
LeanProofs/PersistenceModel.lean |
Δc→Δh dynamics: rollback depletion, external repair, recovery distinction |
dc_dh_persistence.py |
Python persistence model (10 scenarios) |
branch_selector.py |
Python branch-selector model (7 scenarios) |
RESULTS-2026-04-03.md |
Full results memo |
CLAIM-REGISTER.md |
Prose claim audit (10 claims, 3 rewrites done) |
| Class | Members | Terminals reached |
|---|---|---|
| isTerminal | Δg, Δa, Δx, Δh | none |
| reachesHOnly | Δw, Δc, Δe | Δh |
| reachesGAOnly | Δs, Δm | Δg, Δa |
| reachesXOnly | Δk | Δx |
| reachesGAH | Δn, Δo, Δb, Δp, Δr | Δg, Δa, Δh |
Three terminal families, not one universal sink. The coupling family {Δk, Δx} is graph-isolated.
10/11 roles structurally coherent. One mismatch: Δx labeled crossScaleTrans but has no outgoing edges (structurally identical to terminal). Left unresolved — the mismatch is data.
Branching precursors (Δn, Δo, Δb, Δp, Δr) are dual-channel degraders. Closure family is selected by the interaction of burn profile and pre-existing budget asymmetry, not by precursor type alone.
| Budget | Degradation channel | Terminal family |
|---|---|---|
| model_quality | → Δm → Δg/Δa | Gain/actuation |
| authority_coupling | → Δw/Δc → Δh | Hysteresis |
| Precursor | Model burn | Authority burn | Character |
|---|---|---|---|
| Δn (namespace) | 2 | 2 | Balanced cross-channel |
| Δo (observability) | 3 | 1 | Model-heavy |
| Δb (boundary) | 2 | 2 | Balanced cross-channel |
| Δp (polarity) | 3 | 1 | Model-heavy |
| Δr (recursion) | 1 | 3 | Governance-heavy |
| # | Name | What it proves |
|---|---|---|
| 1 | determined_absorbing |
Once closure is selected, no further events change it |
| 2 | same_events_different_outcomes |
Same burns + different budgets → different families |
| 3 | same_state_different_burns |
Same budgets + different burns → different families |
| 4 | priming_overrides_burn_profile |
Pre-existing damage overrides nominal burn tendency |
| 5 | balanced_simultaneous |
Equal burns on equal budgets → simultaneous (explicit) |
| 6 | model_nonincreasing / authority_nonincreasing |
Both budgets monotone non-increasing |
Pre-existing budget damage is the real selector:
| # | Name | What it proves |
|---|---|---|
| 1 | capacity_nonincreasing_internal |
Capacity never increases under internal events |
| 2 | idle_preserves_capacity |
Idle steps don’t burn capacity (idleBurn=0) |
| 3 | hysteretic_absorbing_internal |
No internal event exits HYSTERETIC |
| 4 | reattach_from_hysteretic_fails |
REATTACH can’t restore ALIGNED from HYSTERETIC |
| 5 | hysteresis_without_warn |
HYSTERETIC reachable without DETACHED_WARN |
| 6 | warn_requires_prolonged |
DETACHED_WARN needs commit count ≥ τ |
| 7 | external_repair_exits_hysteretic |
EXTERNAL_REPAIR → RESTRUCTURED |
| 8 | repair_produces_restructured_not_aligned |
Repair ≠ restoration |
| 9 | restructured_can_fail_again |
aligned → hysteretic → restructured → hysteretic |
| 10 | repair_capacity_is_configured |
After repair, capacity = repairCapacity |
| Category | Mechanism | Outcome |
|---|---|---|
| Internally recoverable | REATTACH from detached states | → ALIGNED (while capacity > 0) |
| Externally repairable | EXTERNAL_REPAIR from HYSTERETIC | → RESTRUCTURED (less capacity) |
| Locked in | No internal event exits HYSTERETIC | Requires external intervention |
External repair restores operability, not resilience.