From 0f0bfb039b484151d32d7dcb28e5934adf010174 Mon Sep 17 00:00:00 2001 From: type-two Date: Wed, 29 Jul 2026 13:21:58 +1000 Subject: [PATCH] [orchestrator] round 7 review: ratify the airborne ruling, expose the dev sim handle CONTRACTS v9 notes: 'sealed' jam reason documented; SIM's firewalls-catch-only- what-walks departure RATIFIED (UI measured the alternative as rung 3 not existing); unitCleared queued as round 8's first contract item. main.ts DEV block now exposes window.__fktrySim so testkit verbs can drive an in-browser review the way lane tests drive headless ones - used today to verify the full Phase 1 loop live: band 4, three simultaneous notices, gunship tether + real mirrored theft (sky placard + ledger + ticker + toast), auditor SECTOR LOCK with hash countdown, THE SCREEN held at HOLD with zero feed-time cost. Co-Authored-By: Claude Fable 5 --- fktry/CONTRACTS.md | 12 ++++++++++++ fktry/src/main.ts | 3 +++ 2 files changed, 15 insertions(+) diff --git a/fktry/CONTRACTS.md b/fktry/CONTRACTS.md index fbacfc9..5fe6e8f 100644 --- a/fktry/CONTRACTS.md +++ b/fktry/CONTRACTS.md @@ -81,3 +81,15 @@ batches them between rounds. Until granted, work around locally inside your lane signpost an unfound relic: RENDER draws the subtle shimmer, UI shows nothing until `found`. Discoverability budget: wandering + curiosity. That's the design. - New jam reason string: `'no seam'` (extractor off-seam). + +## v9 notes + +- Jam reason `'sealed'` joins `'no seam'` in the sim's vocabulary: a warden-sealed + machine stalls with it until the `pry` command clears the seal. UI translates it + as a document, not a fault. +- RULING (round 7, ratifying SIM's departure): firewalls catch only what WALKS. + Gunships are airborne and immune — UI measured rung 3 being deleted entirely + otherwise. Pinned by SIM's regression test (a gunship must reach tether and emit + `mirrored` in the shipped demo). +- Round-8 backlog, first item: a `unitCleared` event — the firewall's victory + currently fires nine times in the demo and is silent to SCREEN/audio/RENDER. diff --git a/fktry/src/main.ts b/fktry/src/main.ts index b19ae1a..ccd1bd4 100644 --- a/fktry/src/main.ts +++ b/fktry/src/main.ts @@ -205,6 +205,9 @@ async function boot() { // research-gated ids, so it is a post-research save by definition: grant the techs // it needs first (testkit rides the public save/load API), then dispatch. if (import.meta.env.DEV) { + // the page's live sim, so testkit verbs (chargeDebt, spawnCorrectionUnit, ...) can + // drive an in-browser review session the same way lane tests drive headless ones + (window as any).__fktrySim = sim; (window as any).__fktryDemo = async () => { const { referenceFactory, referenceFactoryTech } = await import('./sim/reference'); const techs = referenceFactoryTech(data);