oblique-weave
The standing goal: maintain one weird-but-actionable product experiment per
cycle (a SurprisingBetMemo with a cheap kill test) by running a programmable
novelty-pressure system. The interesting part is not "many agents." It is who
sees what: four adversarial roles, each a first-class subscriber with a
different masked viewport of the same truth, and a terminal auditor that can
re-weave who sees what next epoch without ever creating a graph cycle.
One-line scenario: a Product Signal Inbox gateway feeds a deduped
Signal Ledger; a Viewport Policy projects one masked view per role
(Analogist, Adversary, Constraint Breaker, Weirdness Keeper); the roles fan into an
Oblique Thread Ledger → Surprising Bet Memo → terminal Novelty Auditor. A new
signal that touches only one role's masked slice wakes only that role; the
auditor's recommended viewport shift returns as a new explicit Weave Config
receipt the next epoch.
This is the worked, executable demonstration of hidden-context adversarial role composition: roles as first-class subscribers each with a different masked viewport, and a terminal recommendation that closes the loop across an epoch boundary, DAG-preserving.
The DAG
Product Signal Inbox (gateway) Weave Config (gateway)
│ @atomic │ @atomic
▼ │ (the auditor's re-weave re-enters HERE next epoch)
Signal Ledger ──────────┐ │
▼ ▼
Viewport Policy ── one MASKED FACET per role
┌───────────────┼───────────────┬───────────────┐
view:analogist view:adversary view:constraint-breaker view:weirdness-keeper
▼ ▼ ▼ ▼
Analogist Adversary Constraint Breaker Weirdness Keeper
└───────────────┴─────────┬─────────┴─────────────────────┘
▼
Oblique Thread Ledger (diamond fan-in; minorities preserved)
│ @atomic
▼
Surprising Bet Memo
│ @atomic
▼
Novelty Auditor (TERMINAL, no edge back; emits a recommended
viewport shift applied as a NEW Weave Config next epoch)
Eleven nodes, fourteen edges, two external-driven entry gateways, over one
shared ledger. Each role subscribes to its own view:<role> masked facet (a
named facet, never "*"), so it wakes if and only if its slice moved.
The beat arc
| epoch | what happens | who renders | the lesson |
|---|---|---|---|
| cold | the config + the first signal delivery land | the whole weave lights once | a standing responsibility is compiled + run |
| quiet | an identical signal re-delivery | signals:skipped (nothing downstream wakes) |
the marquee skipped · moved[] · fresh 0 frame |
| surprise | a new founder hunch routes to ONE role | only the Analogist re-renders; three siblings stay DARK | a role wakes IFF its masked viewport moved (hidden context) |
| re-weave | the auditor's recommended seed bump arrives as a NEW Weave Config | the viewport re-routes; the affected roles re-render | the terminal recommendation closes the loop across an epoch boundary (no same-epoch cycle) |
The surprise epoch is the marquee: a new anomaly perturbs exactly one role's masked facet, so exactly one role re-renders and the other three burn zero fresh. You cannot wake a role by re-waking a fixed-contract entry node; to deliver fresh external truth you move the entry node's memo key (each delivery is a new gateway contract epoch), and the masked viewport is what then decides who wakes.
Conformance expectations
A conforming harness proves zero-fresh quiet replay, one-role masked-facet wake, dark sibling roles, wake-source cost attribution, chain verification, and an auditor re-weave applied only through a new epoch while the graph stays acyclic.
A run leaves a keyless state on disk that any conforming harness can replay:
dispositions rendered=... · skipped=... · failed=0
surprise-cause external=... · input=...
cost rollup (tokens) fresh=... chain-verify ok
What to try
- Re-deliver the same signal and watch
total.freshstay flat; the entry node memo-skips and nothing downstream wakes. - Land a new anomaly and watch only the one role whose masked viewport it routes to re-render; confirm the other three roles stayed dark.
- Apply the auditor's
recommended_viewport_shiftas a new Weave Config delivery and watch the viewport re-route; the loop closes across the epoch boundary, the mounted graph still acyclic. - Confirm
cost.surprise_cause === wake.sourceon every receipt; the cause of the spend is the wake that drove it, read offctx.wake.source, never hardcoded.
How it's built & exercised
src/*.prose.md: the harness-neutral contracts: two gateways (the Product Signal Inbox + the Weave Config, each### Continuity: external-driven), the Signal Ledger, the Viewport Policy (with#### view:<role>masked-facet sub-headings), the four roles, the Oblique Thread Ledger, the Surprising Bet Memo, and the terminal Novelty Auditor.- A run writes a keyless, chain-verifiable state: a flat
receipts.json,compile/topology.json+compile/labels.json, andworld-models/<hexNodeId>/{published.json, versions/sha256_*.bin}: one harness's replay layout. The skill's native layout isstate/world-model/{node}/with a per-nodereceipts.jsonl(state/filesystem.md).