fix(t24): CORRECTION — the Scaffolding orchestration path already exists; MiMo bypasses it

My earlier conclusion in this document was WRONG and is withdrawn here.

I concluded 'one missing seam: no construction-session composition exists, so
one must be built'. Runtime evidence disproves it. ConstructionInterface - the
documented ONE builder boundary - already exposes the full construction-session
API (discover_active_contract, submit_need, inspect_decision, get_scope,
get_obligations, report_observation, verify, transition, close, resume,
amend_scope, capabilities), and submit_need ALREADY composes the structural
machinery:

  submit_need -> cd.make_decision(need, authorities=...)   [decision, impact,
                                                             completeness]
              -> cd.generate_contract(...)                  [contract]
              -> self.scaffold.commit(doc, 'submit_need')

The structural half lives in construction_decision (resolve_affected_surface,
check_completeness, obligations_from_trace, layout_obligations_for,
research_route). My earlier audit searched for an iteration.py importer and
concluded impact was unreachable; iteration.py is the behaviour-ledger/retest
side, and the decision-side machinery IS composed, by construction_interface.

THE REAL DEFECT: construction_activation.mint_bounded_contract calls
scaffold.new_contract DIRECTLY, so the MiMo path creates contracts WITHOUT a
decision trace, WITHOUT affected-surface resolution and WITHOUT auto-derived
obligations. The MiMo seam goes AROUND the existing orchestration path. That is
BYPASSED / DUPLICATE_AUTHORITY, not a missing lifecycle.

MINIMAL INTEGRATION DELTA (an adapter, not a new layer):
1. activate_from_text -> ConstructionInterface.submit_need instead of
   scaffold.new_contract via mint_bounded_contract;
2. post-mutation seam -> report_observation so observed impact is canonical;
3. completion -> route through the interface's close/verify rather than the
   parallel request_completion.
No new lifecycle wrapper, no new ledgers, no parallel Spine. The T23
enforcement edge stays at the tool boundary.

This vindicates the original T23 mission (complete the integration between
already-built Scaffolding V1 and MiMoCode) and confirms the recent direction
was drifting toward a redesign that is not needed.
This commit is contained in:
conductor committed 2026-09-24 20:55:57 +01:00
1 parent 9c5b74988b
commit a66dc44415
1 file changed
+99
@@ -166,3 +166,102 @@ Sections I, J, K, L, Q, R, S, T, U, V and the §9 structural-backbone
experiment were **not** executed. They need the repair first — running them now
would measure a lifecycle that does not yet exist. Recorded as not-done rather
than inferred.
---
# CORRECTION — the orchestration path already exists
**My earlier conclusion in this document was WRONG and is withdrawn.**
§X/Y concluded "one missing seam: no construction-session composition exists,
so one must be built." Runtime evidence disproves that. An orchestration path
**already exists** and was always the canonical one.
## The existing Rune-native orchestration path
`ConstructionInterface` — the documented ONE builder boundary — exposes a
complete construction-session API:
```
discover_active_contract · submit_need · inspect_decision · get_scope
get_obligations · report_observation · verify · transition · close
resume · amend_scope · capabilities
```
and `submit_need` **already composes the structural machinery**:
```
submit_need
→ cd.make_decision(need, authorities=…) ← decision, affected-surface
resolution, completeness
→ cd.generate_contract(…) ← contract generation
→ self.scaffold.commit(doc, what="submit_need")
```
`construction_decision` is where the structural half actually lives —
`resolve_affected_surface` (predictive impact), `check_completeness`,
`obligations_from_trace` (post-change obligations), `layout_obligations_for`,
`research_route`. My earlier audit searched for an `iteration.py` importer and
concluded the impact machinery was unreachable. `iteration.py` is the
behaviour-ledger/retest side; the **decision-side impact machinery is
`construction_decision`, and it is composed** — by `construction_interface`,
which imports it.
## The real defect: MiMo BYPASSES the orchestration path
| Stage | Rune-native owner | How invoked | MiMo today | Class |
|---|---|---|---|---|
| intent | `construction_intent` | TUI/operator/hook | hook | ALREADY_CONNECTED |
| mode | `construction_mode.classify_mode` | same | same | ALREADY_CONNECTED |
| **decision + impact + completeness** | **`construction_decision.make_decision`** | **`ConstructionInterface.submit_need`** | **not invoked** | **BYPASSED** |
| **contract generation** | **`cd.generate_contract`** | **`submit_need`** | **`scaffold.new_contract` called directly by `mint_bounded_contract`** | **BYPASSED / DUPLICATE** |
| **auto-derived obligations** | **`cd.obligations_from_trace`** | **`submit_need` / patterns** | **none** | **BYPASSED** |
| scope | `Scaffold.check_scope` | interface + guard | guard | ALREADY_CONNECTED |
| observed impact | `report_observation` | interface | not invoked | MISSING_ADAPTER |
| verification | interface `verify` | interface | not invoked | MISSING_ADAPTER |
| completion | interface `close` + governed gate | interface | `request_completion` (separate) | DUPLICATE path |
| amendment | interface `amend_scope` | interface | revision/supersede via resume only | MISSING_ADAPTER |
| resume/continuation | `discover_active_contract` / `resume` | interface | `activate_from_text` resume | ALREADY_CONNECTED |
| contextual Spine | `_auto_structural_awareness` | activation (PROJECT_BUILD) | same | ALREADY_CONNECTED |
**Diagnosis corrected:** `construction_activation.mint_bounded_contract`
constructs contracts with `scaffold.new_contract` **directly**, so the MiMo
path creates a contract *without* a decision trace, *without* affected-surface
resolution, and *without* auto-derived obligations. That is not a missing
lifecycle — it is the MiMo seam **going around** the existing one.
## Minimal integration delta (the adapter, not a new layer)
Target, as the mandate specifies:
```
MiMo intent/tools
→ thin MiMo↔Rune adapter
→ EXISTING ConstructionInterface (submit_need / report_observation /
verify / close / amend_scope / resume)
→ existing decision / impact / obligations / contract / Scaffold machinery
+ MiMo mutation enforcement retained at the tool boundary
```
Concretely, three small changes:
1. `activate_from_text` → call `ConstructionInterface.submit_need` (which
already does decision → contract → commit) instead of `scaffold.new_contract`
via `mint_bounded_contract`. Keeps resume-by-idempotent-mint behaviour.
2. MiMo's post-mutation seam → call `report_observation` so observed impact is
the canonical observed set, not a private one.
3. Completion → route through the interface's `close`/verify rather than the
parallel `request_completion`, or make `request_completion` delegate to it.
**No new lifecycle wrapper. No new ledgers. No parallel Spine.** The enforcement
edge built and qualified in T23 stays exactly where it is, at the tool boundary.
## Consequence for the verdict
`FULL_SCAFFOLDING_HARNESS_PARTIAL` stands, but for the corrected reason: the
lifecycle exists and composes; **MiMo is not connected to it**. The verdict
would become PROVEN by wiring the adapter, not by building a layer.
This also vindicates the original T23 mission — *complete the integration
between already-built Scaffolding V1 and MiMoCode* — and confirms that the
recent direction of travel was drifting toward a redesign that is not needed.