greenfield(fomo-lin): session 6 — promotion E2E BLOCKED at #1124; findings #1123/#1124 + live wedge
Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
@@ -291,3 +291,38 @@ prevent-memory-write blocked an operator write), and the F9 probe shim sits in
|
||||
|
||||
Not executed yet — current install (next lane + prototype) is the substrate Fred's W-F1
|
||||
fixtures target. First full cycle runs when the next testable artifact lands.
|
||||
|
||||
## Session 6 (2026-08-08 night) — promotion-branch E2E (Fred-directed, first fomo-lin full E2E)
|
||||
|
||||
Branch feat/lease-promotion-and-harness-isolation (rebased on next), built from source
|
||||
(pnpm --filter '@mosaicstack/mosaic...' build), CLI packed + installed globally, branch
|
||||
framework installed to ~/.config/mosaic. Transcript:
|
||||
scratchpad/promote-e2e-transcript.md. Verdict: **BLOCKED at step 3, NOT VERIFIED (not faked).**
|
||||
|
||||
Findings this session (all filed under scooby's own Gitea account):
|
||||
|
||||
- **#1123** — TS activation capability probe hardcodes a 2000ms timeout; `node cli.js
|
||||
__lease-capability` cold-start on fomo-lin is 5.1–5.5s, so `leaseEnforcementActivatable()`
|
||||
returns false and the gate REFUSES to wire via the sanctioned path. The Python-side
|
||||
F9/#1118 override does NOT apply to this TS probe. Worked around by bumping only the
|
||||
installed dist timeout (reversible; can't mask a bad capability).
|
||||
- **LIVE WEDGE (F4 reproduced, un-recoverable):** hand-wiring the gated template into a live
|
||||
BARE session's own runtime home hot-reloads the gate and bricks the session with
|
||||
GATE_UNAVAILABLE (no lease). Every self-recovery path is closed (Bash/Read gated;
|
||||
Write/Edit blocked by stale-guard needing a gated Read). Required an EXTERNAL shell to
|
||||
restore settings. Exactly HARNESS-HOMES' "a live unpromoted session that gains the gate
|
||||
cannot self-recover." Lesson applied: gated seats must be a SEPARATE mosaic claude process
|
||||
in its own CLAUDE_CONFIG_DIR (~/.config/mosaic/.claude), never the operator's ~/.claude.
|
||||
- **#1124 — the critical link, proven to fail:** `mosaic promote` transport reads the lease
|
||||
session id from `pane_pid`'s /proc/environ, but `execRuntime()` (launch.js:883) uses
|
||||
`spawnSync` (NOT the exec-replace its own comment claims), so pane_pid = node(mosaic)
|
||||
[no lease env] and the lease env is on the claude CHILD. resolve() never walks to the
|
||||
child → 'no readable lease session' → UNVERIFIED exit 1, before injection. Fails for every
|
||||
real `mosaic claude` seat; unit tests pass only via a mocked environmentReader. This is
|
||||
the exact link terra couldn't test (detached pane).
|
||||
|
||||
E2E scorecard: Step 1 (build/install) PASS. Step 2 (gated seat, real lease, mutator DENIED
|
||||
MUTATOR_UNVERIFIED, file not created) PASS. Step 3 (promote → VERIFIED) BLOCKED (#1124).
|
||||
Steps 4–5 not reached; failure-path sub-case (unresolvable seat → UNVERIFIED exit 1, no
|
||||
hang) incidentally confirmed. The branch does NOT pass E2E on a real host as-is; #1124 gates
|
||||
its merge.
|
||||
|
||||
Reference in New Issue
Block a user