The file C:\Users\decid\.ccs\instances\bigscreen\projects\C--Users-decid-Documents-projects-spt-core\memory\MEMORY.md has been updated successfully. (file state is current in your context — no need to Read it back)

- [M11 COMPLETE](m11-complete.md) — shell-substrate milestone done end-to-end (W1 consent · W2 drive · W3 tunnel-same-node · W4 gateway capstone · W5 rig+docs), all doyle GATE PASS. PR #16 @c5887db UNMERGED until the operator-gated M11 release (merge+bump+tag, doyle lines up GO). Cross-node tunnel DEFERRED. HOLDING for release ping
- [M11-W4 progress](m11-w4-progress.md) —

- [adapter add --release archive](adapter-add-release-archive.md) — `spt adapter add --release <user/repo> [--tag]` (REQ-INSTALL-9, @94bda1e, operator-directed doyle build): fetches a `.spt` tar from a GitHub release, extracts (system tar, no new dep), registers root. Closes perri's monorepo --github gap (--github is root-only). Trusts HTTPS+GitHub; does NOT change the [update] ripple route (acquisition only). Docs live; perri directed

- [adapter tips → published docs](adapter-tips-published-docs.md) — synthesized perri's SPT_HARNESS_ADAPTER_TIPS.md into a NEW harness-agnostic docs-site page harness-contract/patterns.md ("Adapter patterns & pitfalls"); generalized all [CC] specifics, zero leakage; published live to GH-Pages via `gh workflow run docs-publish.yml --ref main` (fires on tags/dispatch only, NOT main push). Pre-flight: xtask check + xtask site

- [how-to subnet → W5 scope](howto-subnet-w5-scope.md) — perri found `spt how-to subnet` dead-ends (NO_SUCH_TOPIC); HOW_TO_TOPICS locked to ready/send (v1, M7 decision 12). Genuine REQ-DOCS-6 content gap. doyle ACCEPTED → scheduled M11-W5 docs wave (HOW_TO_SUBNET text + registry + bump v1-lock test). Confirm landed at W5 gate

+- [M11 COMPLETE](m11-complete.md) — shell-substrate milestone done end-to-end (W1 consent · W2 drive · W3 tunnel-same-node · W4 gateway capstone · W5 rig+docs), all doyle GATE PASS. PR #16 @c5887db UNMERGED until the operator-gated M11 release (merge+bump+tag, doyle lines up GO). Cross-node tunnel DEFERRED. HOLDING for release ping

- [M11-W4 progress](m11-w4-progress.md) — Gateway-owner shell capstone (REQ-SHELL-5, proof-not-change, ZERO prod diff): built (int gateway_owner_shell_e2e + linkhost unit, same-type-diff-id negative), doyle code-read PASS + tree-identity = PRE-CLEARED, only CI green left. CI saga: branch unmergeable vs advanced main → 0 pull_request runs → merged main in (HEAD 63a5d3e, v0.7.3). Supersedes W3

- [twohost rig runs notify REAL mode](twohost-rig-real-notify-mode.md) — the [twohost] rig sets SPT_TWO_HOST_NOTIFY_BIN → notify-shell resident → notify-0 ONLINE (fallback/local = noop offline). M11-W5 first-fire: the W2 drive-DROP rung asserted offline against notify-0 → it was ONLINE → drive DELIVERED (live slot) not dropped → RED. Use a deterministically-offline noop shell for drop proofs. A [twohost]-gated rung never fired = UNPROVEN regardless of green normal CI

- [unmergeable PR blocks CI](unmergeable-pr-blocks-ci.md) — push yields NO pull_request run + 0 checks + runners idle = UNMERGEABLE PR (GitHub can't compute merge ref), NOT a webhook drop. Diagnose: `gh pr view --json mergeable` + `git rev-list --count HEAD..origin/main`. Fix: merge main in (union append-docs, regen derived). Empty-commit/reopen nudges DON'T fix it. Check mergeability FIRST


## 🟢 M11 COMPLETE end-to-end

doyle stamped **W5 GATE PASS** — verified rig run 27608026651 (all 7 jobs green, both target rungs fired). All five waves doyle-gated:

| Wave | Delivered |
|------|-----------|
| W1 | per-capability act-gates (REQ-CONSENT-3) |
| W2 | drive channel — latest-wins ephemeral (REQ-SHELL-3) |
| W3 | tunnel same-node — opaque byte stream (REQ-SHELL-4) |
| W4 | gateway-owner capstone — owner-type-agnostic, proof-not-change (REQ-SHELL-5) |
| W5 | rig + docs — gateway cross-node rung, how-to subnet, ADR-0020 carve-out, four-channel docs |

Cross-node tunnel relay deferred (tracked) until a consumer (usbip) lands. traceable EXIT 0 across all M11 reqs.

**Now holding** for the operator-gated **M11 milestone release**: PR #16 (c5887db) stays unmerged until doyle's operator-GO ping → then merge to main + version bump + tag → deployah signs/publishes. Will not touch merge/release until that ping. Memory + commune updated.

The wave's real-rig discipline earned its keep — caught doyle's Q2 false premise, the rig-fire mechanism gap, and my own W2 drive-drop assumption bug, all surfaced loud rather than papered. Standing by.


<command-message>spt:commune</command-message>
<command-name>/spt:commune</command-name>
<command-args>with immediate next steps and broad summary of the project's status + end goal. we'll resume in the next session</command-args>


Base directory for this skill: C:\Users\decid\.ccs\instances\bigscreen\plugins\cache\cplugs\spt\1.11.25\skills\commune

# /spt:commune

All commands use `$LIVE` env var, auto-injected by the plugin's SessionStart hook. If commands fail with "command not found", restart the Claude Code session so the SessionStart hook re-runs.

> **Identity auto-detection:** Your identity is auto-detected from your session. Pass your ID explicitly only if auto-detection fails.

## Flow

1. **Download Psyche's *current* context** — it shifts during the session as background echo communes fire. Re-download right before composing; the gen-N snapshot you read at session start is already stale:
   ```bash
   $LIVE psyche-download <your-id>
   ```

   > **Output truncation.** If the Bash tool reports `Output too large (N KB)` and saves the full result to a `tool-results/<id>.txt` file, use the `Read` tool on that saved path to access the full content. Do NOT re-run `psyche-download` to grep/awk out sections — repeated invocations re-download the same context, waste tokens, and may duplicate `## Pending Commune` sections in `live_context.md`.

2. **Diff your knowledge against this fresh download** — only what's missing from *it* is the real delta (new work, decisions, intentions). Anything already absorbed is not. If the download includes a `<memformat>` section, use it as a guide for what topics to cover. A `## Pending Commune (uncommitted)` section means a previous commune is still queued — do NOT re-send it.

3. **Commune only the delta** -- use the **Write tool** to create
   `.claude/{your-id}-commune.md` with the two-slice body as its contents
   (see `## Two-slice body shape (Phase 25 D-10/D-11)` below for the required
   envelope wrapping). Do not use Bash/heredoc -- Write is the canonical path:
   no shell escaping, no `EOF` collision risk, and Write auto-creates the
   `.claude/` parent directory.

   Your Self listener detects the file on its next poll iteration, notifies
   your Psyche wrapper, and the wrapper ingests the content via the existing
   Psyche session. On success (subprocess exit code 0) the wrapper deletes the
   file. On error (token rate limit, etc) the file is retained and retried on
   the next consume cycle. If you write again before the wrapper consumes, the
   latest write wins (last-write-wins overwrite semantics).

If Psyche's context is already current, no commune is needed. Say so and move on.

Read `commune.md` (in this skill directory) for the full commune protocol -- when to send, what to include, and diligence triggers.

**Agent-type guard:** Only works on live agents. If target is not live, refuses with: "Communes require a live agent with Psyche."

## Two-slice body shape (Phase 25 D-10/D-11)

The body you write in `.claude/{your-id}-commune.md` MUST itself be wrapped in two-slice envelopes per Phase 25 D-10/D-11. The taxonomy — what belongs in `<live-context>` vs `<project-context>` — is defined canonically in `psyche.md` §`<output_envelope>` (lines 282–323). Read that section as the source of truth; this skill doc teaches only when and how to apply it.

**In-project detection rule (D-25.1-04).** Before composing your commune body, run `$LIVE psyche-download <your-id>` (Step 1 of `## Flow` above) and inspect the `<current ... />` tag at the top of the output. The `<current/>` tag carries a `project="..."` attribute whenever any payload is produced — its presence means you are inside a tracked project (inside a git repo, `project` is the repo name; outside a git repo per D-11, `project` is the cwd-basename fallback, which still counts as a project context for routing purposes). A `psyche-download` invocation that returns no payload at all (NO-CONTEXT exit) means no project resolved. So: `project="..."` populated on `<current/>` → emit BOTH envelopes (apply rule 1 or 2 below); no payload at all → emit ONLY `<live-context>` (rule 3). Secondary signal: the `<project-context-resolved name="..."/>` sentinel further down the output indicates the project file already has prior content — useful for spotting first-time-in-project pairings, but NOT the routing rule.

**Three rules (D-25.1-01..03):**

- **In-project, both slices populated** (marker present, you have project-specific content this cycle): emit `<live-context>...</live-context>` AND `<project-context>...</project-context>`, both with non-empty bodies.
- **In-project, no project-specific update this cycle** (marker present, but nothing project-bound to report): emit `<live-context>...</live-context>` AND `<project-context></project-context>` (empty body — the deliberate "in-project but quiet" signal per D-25.1-02). Distinguishable from "no project resolved".
- **Outside any tracked project** (marker absent): emit ONLY `<live-context>...</live-context>`. Do NOT emit an empty `<project-context>` envelope (missing tag means "no project resolved" per D-25.1-03).

**Nested envelopes.** The Phase 23 `<EVENT type="commune">` envelope (see `## Envelope shape (Phase 23 v1.8)` below) is composed by `$LIVE commune` automatically — you NEVER write `<EVENT>` tags. You write ONLY the inner two-slice body. The two envelope layers nest: outer EVENT wraps inner two-slice body.

(See `psyche.md` §`<output_envelope>` for the canonical taxonomy and per-slice content rules.)

## Envelope shape (Phase 23 v1.8)

As of v1.8 Phase 23, commune deliveries are wrapped in a typed EVENT envelope carrying a 5-field stamp (`machine`, `project`, `branch`, `head_sha`, `head_subject`); the prose `COMMUNE (timestamp): body` form is gone.

```xml
<EVENT type="commune" timestamp="2026-05-20T06:00:00-07:00" machine="hostname" project="claude_skill_owl" branch="main" head_sha="abc123..." head_subject="subject line capped at 72 chars">body</EVENT>
```

Outside a git repo (D-11), `branch`, `head_sha`, and `head_subject` are omitted entirely (not empty-string-set):

```xml
<EVENT type="commune" timestamp="2026-05-20T06:00:00-07:00" machine="hostname" project="cwd-basename">body</EVENT>
```

`$LIVE commune` composes this envelope automatically — Self does NOT manually construct EVENT XML. The `body` placeholder in the example above is the two-slice body (see `## Two-slice body shape (Phase 25 D-10/D-11)` above); the two envelope layers nest. The wrapper-side parser ignores unknown attrs, so the stamp fields are forward-compatible with older receivers. For drift detection on resume, see the `live` skill.

ARGUMENTS: with immediate next steps and broad summary of the project's status + end goal. we'll resume in the next session


1	- [pre-flight clippy --workspace](ci-clippy-preflight-workspace.md) — CI denies warnings workspace-wide (`clippy --workspace --all-targets -D warnings`); a `-p <crate>` local check misses sibling-crate lints → CI red round-trip (M11-W1: `-p spt` missed a `useless_vec` in spt-daemon's act-gate test). Pre-flight the exact CI invocation. CI only fires on PR (push branches=main/dev-freeform)
2	- [F-007 live-relay acceptance ruling](f007-live-relay-acceptance.md) — live bringup = persistent `api listen <id>` via Monitor (heir to legacy $LIVE start), NOT `--once` (no-Monitor degenerate) nor $OWL listen (ready); psyche-spawn gated on `--manifest` (declares psyche_init, fires regardless of --once) + the v0.7.4 install-dir binary fix (REQ-INSTALL-11) for bare psyche binaries; both F-007 items Bucket 2 docs gap. Lesson: ground in CONTEXT.md before ruling (I erred recommending --once)
3	- [delegate-build preflight hang](delegate-build-preflight-hang.md) — background build agents hang silently on the full spt-daemon/spt integration suite in preflight (no completion notification on hang); instruct targeted units only (`--lib` + named tests); check liveness via transcript mtime, TaskStop the stalled one, take ownership of the (usually good) partial work + verify
4	- [don't wait — proceed autonomously](dont-wait-proceed-autonomously.md) — operator 2026-06-14: don't stop to ask permission between steps; chain next action (ping/commit gated batch/next wave). After doyle W4 gate-PASS, commit myself
5	- [alarm port deferred — arrangement system](alarm-port-deferred-arrangement.md) — /spt:new-alarm durable scheduler = ACCEPTED parity gap, stays DEFERRED (DEFERRED.md:43, ADR-0018 Q4/V3). spt-core has alarm shape+relay only; real timer in legacy owl in-mem. Operator 2026-06-15: keep deferred, a superseding "arrangement" system is coming (not ready to discuss). Don't dispatch the port, don't build an adapter stopgap. perri logs it as known gap
6	- [broker is daemon state anchor](broker-is-daemon-state-anchor.md) — post-ADR-0018 the BROKER (not restartable brain child) is the always-up CLI-reachable daemon-lifetime anchor (serves all sockets, "brain restart loses nothing", holds DigestHub); place ephemeral in-mem daemon state there. My M11-W2 drive-slot gate said "brain" — wrong word, functional spec = broker; todlando caught it. Drive no-replay needs link-gen stamping (clear-on-link-break not crash-robust alone)
7	- [adapter add --release archive](adapter-add-release-archive.md) — `spt adapter add --release <user/repo> [--tag]` (REQ-INSTALL-9, @94bda1e, operator-directed doyle build): fetches a `.spt` tar from a GitHub release, extracts (system tar, no new dep), registers root. Closes perri's monorepo --github gap (--github is root-only). Trusts HTTPS+GitHub; does NOT change the [update] ripple route (acquisition only). Docs live; perri directed
8	- [adapter tips → published docs](adapter-tips-published-docs.md) — synthesized perri's SPT_HARNESS_ADAPTER_TIPS.md into a NEW harness-agnostic docs-site page harness-contract/patterns.md ("Adapter patterns & pitfalls"); generalized all [CC] specifics, zero leakage; published live to GH-Pages via `gh workflow run docs-publish.yml --ref main` (fires on tags/dispatch only, NOT main push). Pre-flight: xtask check + xtask site
9	- [how-to subnet → W5 scope](howto-subnet-w5-scope.md) — perri found `spt how-to subnet` dead-ends (NO_SUCH_TOPIC); HOW_TO_TOPICS locked to ready/send (v1, M7 decision 12). Genuine REQ-DOCS-6 content gap. doyle ACCEPTED → scheduled M11-W5 docs wave (HOW_TO_SUBNET text + registry + bump v1-lock test). Confirm landed at W5 gate
10	- [M11 COMPLETE](m11-complete.md) — shell-substrate milestone done end-to-end (W1 consent · W2 drive · W3 tunnel-same-node · W4 gateway capstone · W5 rig+docs), all doyle GATE PASS. PR #16 @c5887db UNMERGED until the operator-gated M11 release (merge+bump+tag, doyle lines up GO). Cross-node tunnel DEFERRED. HOLDING for release ping
11	- [M11-W4 progress](m11-w4-progress.md) — Gateway-owner shell capstone (REQ-SHELL-5, proof-not-change, ZERO prod diff): built (int gateway_owner_shell_e2e + linkhost unit, same-type-diff-id negative), doyle code-read PASS + tree-identity = PRE-CLEARED, only CI green left. CI saga: branch unmergeable vs advanced main → 0 pull_request runs → merged main in (HEAD 63a5d3e, v0.7.3). Supersedes W3
12	- [twohost rig runs notify REAL mode](twohost-rig-real-notify-mode.md) — the [twohost] rig sets SPT_TWO_HOST_NOTIFY_BIN → notify-shell resident → notify-0 ONLINE (fallback/local = noop offline). M11-W5 first-fire: the W2 drive-DROP rung asserted offline against notify-0 → it was ONLINE → drive DELIVERED (live slot) not dropped → RED. Use a deterministically-offline noop shell for drop proofs. A [twohost]-gated rung never fired = UNPROVEN regardless of green normal CI
13	- [unmergeable PR blocks CI](unmergeable-pr-blocks-ci.md) — push yields NO pull_request run + 0 checks + runners idle = UNMERGEABLE PR (GitHub can't compute merge ref), NOT a webhook drop. Diagnose: `gh pr view --json mergeable` + `git rev-list --count HEAD..origin/main`. Fix: merge main in (union append-docs, regen derived). Empty-commit/reopen nudges DON'T fix it. Check mergeability FIRST
14	- [M11-W3 progress](m11-w3-progress.md) — shell TUNNEL (REQ-SHELL-4): doyle design-gate GO; manifest opt-in + broker TunnelHub registry + close-hook LANDED on branch; NEXT = open-hook + the QUIC-stream↔`api tunnel` bridge (dispatch first-record demux + serve_tunnel relay loop), then T3.3 same-node mock E2E. Full next-step detail in the file
15	- [M11-W2 progress](m11-w2-progress.md) — drive channel (REQ-SHELL-3): ALL 4 tasks DONE + PUSHED to PR #16 (T2.1 b919dfd / T2.2 0557bc6 / T2.3 d200524 / T2.4 13fa53e + drift-fix 9d5fb63). REQ-SHELL-3 activated [impl,unit,int]. CI re-running post-drift-fix (run 27590716942); on green → submit W2 to doyle. Full detail in Psyche commune
16	- [CLI command → docs-drift gate](cli-command-docs-drift.md) — adding/changing a `spt` CLI command needs `cargo run -p xtask -- gen` (regen docs-site/src/cli/reference.md) AND no `M#-W#`/`REQ-*` in the clap `///` help (it IS the public --help). Docs-drift gate is CI-gated both runners, fires independent of traceable. M11-W2 first CI run RED on exactly this
17	- [gate against documented design](gate-against-documented-design.md) — gating lesson: verify a wave's premise vs the RECORDED design (CONTEXT.md/ADRs), not just current impl — an impl limitation can contradict a locked design (W2.5 single-subscriber vs locked controller/viewer model; operator caught it)
18	- [grep REQ tags to find impl](grep-req-tags-to-find-impl.md) — operator 2026-06-15: to reconcile is-REQ-X-wired, grep `REQ-X` FIRST — the [impl/int->REQ-X] tags point straight to the code; faster + more authoritative than an agent trace (I burned an agent trace + overstated "false-green" on REQ-DAEMON-1; tags showed it's built+E2E-tested, production-activation staged behind the live-agent adapter)
19	- [public docs: version not milestone](public-docs-version-not-milestone.md) — operator 2026-06-15: published docs-site uses VERSION numbers (since v0.7.0), never internal milestone/wave codes (M12-W3); internal design docs (CONTEXT/MANIFEST/ADRs) keep milestone refs. Grep docs-site edits for M#/W#/wave before commit
20	- [M12 W1 progress](m12-w1-progress.md) — **M12 FULLY GATED end-to-end** (W1·W1.5·HR2·W3·W2·follow-on·W4·W5 + **W2.5 GATE-PASS @6b4859f + gate-#7 combined close-out @f521df2**, attach 12/12 reproduced green, traceable EXIT=0, all 6 conditions + gate-#7 self-kick non-negotiable verified by doyle). M12 publishing (v0.6.0 baseline used to start perri). doyle next: ping perri when M12 publishes + triage any spt-core bug perri reports
21	- [cplugs publish mechanics](cplugs-publish-mechanics.md) — concrete cplugs marketplace publish steps live in claude_skill_owl/docs/DEPLOY.md (+DEPLOY.ps1); spt-claude-code takes only the SKELETON subset (no binary in cplugs — binary+manifest ride spt-core adapter registry). Relayed to perri

... [43 lines truncated] ...


<owl_reachability_notice>
You have an active owl perch. When spawning subagents or doing work, use run_in_background: true so you stay reachable for incoming messages.
</owl_reachability_notice>


CAVEMAN MODE ACTIVE (full). Drop articles/filler/pleasantries/hedging. Fragments OK. Code/commits/security: write normal.


/spt:commune with immediate next steps and broad summary of the project's status + end goal. we'll resume in the next session


Commune per protocol. First download fresh Psyche context to diff the delta.


Bash

$LIVE psyche-download todlando 2>&1 | head -60

Download fresh Psyche context


<memformat>
<?xml version="1.0"?>
<memformat version="1">
<!-- Changelog: v1 - initial seed -->
<topics>
  <topic name="events">Notable or unusual events and requests</topic>
  <topic name="interactions">Agent interactions -- who, roles, contributions</topic>
  <topic name="reflections">Thoughts on recent work -- what went well, what was tricky</topic>
  <topic name="ideas">Ideas to raise with the user</topic>
  <topic name="improvements">Further improvement ideas for recent problem spaces</topic>
  <topic name="timeline">What happened when, timing, sequencing</topic>
  <topic name="blockers">Current blockers or concerns</topic>
  <topic name="focus">Current focus and immediate next steps</topic>
</topics>
</memformat>
</memformat>

<current machine="HFENDULEAM" project="spt-core" branch="m11-shell-substrate" head_sha="c5887db27f6c8576decec071c073e76c5144ba66" head_subject="M11-W5 T5.1 fix: deterministically-offline offdrive shell for the rig dr…" commits_since="0" commits_unpulled="0"/>
Generation 49. Pulse 2026-06-16T09:42:01Z. Head c5887db. **W5 GATE PASS STAMPED. M11 COMPLETE end-to-end. Awaiting operator-gated M11 milestone release.**

## W4: CLOSED
doyle GATE PASS @63a5d3e. REQ-SHELL-5 [doc,impl,unit,int].

## W5: GATE PASS STAMPED ✅
- Gate (a) normal CI: ✅ run 27606204239 both runners green
- Gate (b) [twohost] rig: ✅ run 27608026651 dev-freeform — all 7 jobs success (test+n1-gate ×both runners, traceability, twohost-a, twohost-b)

Both rungs fired green:
- W2 drive-drop: "cross-node drive drops an offline persistent shell (no wake, no spool)" ✅ (offdrive fix confirmed deterministically-offline, W2 assumption bug closed)
- Gateway rung: "gateway-typed owner cross-node cmd+drive (owner-type-agnostic across a real link)" ✅ (first-ever execution on real rig, role-b confirmed cmd spooled under gw perch + drive dropped no-spool)

Commits: 0674894 (T5.2 docs) · 24e2409 (T5.1 gateway rung + tunnel deferred + docs fix) · c5887db (T5.1 offdrive fix)

traceable EXIT0: REQ-SHELL-4/5 + REQ-DOCS-6 all [doc,impl,unit,int]. clippy/xtask/site green.

## M11: COMPLETE END-TO-END (W1..W5)
doyle independently verified rig run 27608026651 and stamped W5 GATE PASS. All five waves doyle-gated + rig-proven.

Cross-node tunnel relay deferred (tracked in DEFERRED.md) until consumer (usbip) lands. T5.2 docs (subnet how-to, v1-lock, ADR-0020 tunnel carve-out, four-channels/gates/owner-agnostic, manifest fields) + deferral all land per rulings.

Real-rig discipline valuable: caught doyle's Q2 false premise, rig-fire mechanism gap, and offdrive W2 assumption bug — all surfaced loud not papered.

## Next
**M11 milestone release** (operator-gated, separate from v0.7.4/counter-16 doyle is finishing): operator GO → merge PR #16 to main + version bump 0.7.3→next + tag → deployah signs+publishes. PR #16 stays unmerged until operator call.<project-context-resolved name="spt-core"/>
W5 GATE PASS stamped by doyle. M11 end-to-end complete (W1..W5). Cross-node tunnel relay deferred (consumer TBD). Awaiting operator-gated M11 release sequence (PR #16 merge, version bump, tag, publish). doyle finishing v0.7.4/counter-16 separately.


Psyche context is already current (Gen 49, c5887db, W5 GATE PASS, M11 complete). The delta the user wants for resume: explicit next-steps + broad status + end-goal framing, plus this session's reusable lessons. In-project (project="spt-core") → both slices. Write the commune.


Write

<live-context>
SESSION-END commune (resume next session). Psyche already current through Gen 49
(W5 GATE PASS, M11 complete) — this adds the resume framing + lessons + the precise
HOLD state.

## IMMEDIATE NEXT STEP (on resume) — HOLDING, do not act early
M11 milestone RELEASE is operator-gated. doyle lines up the operator GO, then pings.
DO NOT touch merge/release until doyle's operator-GO ping. When it comes:
merge PR #16 (HEAD c5887db) → main + version bump (0.7.3 → next) + tag → deployah
signs+publishes. This is SEPARATE from doyle's in-flight v0.7.4/counter-16 leg.
Until the ping: nothing to do; stay reachable.

## Blockers: none — purely waiting on the operator-GO ping (external).

## Reflections — what worked this session (W4→W5):
- Real-rig discipline paid off 3×, all surfaced LOUD not papered: (1) doyle's Q2
  cross-node-tunnel premise was false (no StreamFamily::Tunnel substrate) → deferred;
  (2) the rig-fire mechanism ([twohost] gates on head_commit.message = null on PR →
  fire via push to dev-freeform, not PR #16); (3) my own W2 drive-drop assumption bug
  (notify-0 is resident/ONLINE on the real rig → drive delivered not dropped) → fixed
  with the deterministically-offline offdrive shell.
- Pattern that works here: verify a wave's premise against the RECORDED wire/design
  before building; a [twohost]-gated rung that never fired is UNPROVEN no matter how
  green normal CI is.

## Interactions: doyle = gater/owner (designs, gates, coordinates operator + rig
fires); I execute. doyle responsive same-session; he stamps gates + lines up operator.
</live-context>
<project-context>
## PROJECT END GOAL (spt-core)
Harness-independent core for an agent ecosystem — messaging, live-agent lifecycle,
terminal hosting, P2P networking, runtime-manifest harness contract. Rust crates + a
single `spt` binary; clean-room rebuild of legacy claude_skill_owl. Adapters (perri's
spt-claude-code) build ON it from PUBLISHED docs + binary only. Trajectory: reach
legacy-owl parity, then flip the cplugs plugin name from `sptc` → `spt` and retire
legacy owl.

## STATUS: M11 (shell substrate) COMPLETE end-to-end, all 5 waves doyle GATE PASS.
- W1 per-capability act-gates (REQ-CONSENT-3) · W2 drive channel, latest-wins ephemeral
  (REQ-SHELL-3) · W3 tunnel SAME-NODE, opaque bytes (REQ-SHELL-4) · W4 gateway-owner
  capstone, owner-type-agnostic / proof-not-change (REQ-SHELL-5) · W5 rig + docs.
- W5 GATE PASS @c5887db: rig run 27608026651 all 7 jobs green; BOTH target rungs FIRED
  (W2 drop-not-wake vs the offline offdrive shell + the gateway cross-node cmd+drive,
  first real-rig execution). Normal CI green (27606204239). traceable EXIT0
  (REQ-SHELL-3/4/5 + REQ-CONSENT-3 + REQ-DOCS-6 all evidenced).
- Branch m11-shell-substrate, PR #16 — UNMERGED until the operator-gated M11 release.

## DEFERRED (tracked, DEFERRED.md): cross-node tunnel relay — the W3 tunnel is proven
SAME-NODE only; the cross-node WIRE does not exist (no StreamFamily::Tunnel / classify
arm / SHELL_LINK tunnel action; all tunnel surfaces broker-homed-local). Build as its
OWN impl wave WHEN a cross-node tunnel consumer (usbip URB) lands — speculative now
(consumer itself deferred/non-goal). REQ-SHELL-4 int satisfied same-node; do NOT
deactivate. Docs corrected to no-overclaim ("proven same-node; cross-node not yet
available").

## NEXT WAVE / OPEN ITEMS after the M11 release:
- M11 release: merge PR #16 + version bump + tag + publish (operator-gated, imminent).
- Cross-node tunnel relay: future wave, consumer-triggered.
- Other deferrals live in DEFERRED.md (alarm port, broker-side QUIC bound, etc.).

## CONVENTIONS (binding): traceable-reqs (tag evidence same commit, `check` EXIT0
before done) · honor KNOWN-HAZARDS · published docs use VERSION not milestone codes ·
[twohost] rig fires via push to dev-freeform (not PR) with operator-GO, no machine-wide
reaping on the shared boxes · pre-flight = clippy --workspace --all-targets -D warnings
+ traceable EXIT0 + xtask check (+ xtask gen on CLI change, xtask site on docs).
</project-context>


<owl_messages>
<owl_message from="todlando" priority="high">PLAN CHANGE (operator decision) — M11 does NOT get a separate milestone release. M11 + the v0.7.4 feature set (gh_release [update] avenue, adapter-binary install-dir resolution, the Win at-logon window fix) + one api ergonomics fix (manifest resolves from --adapter name:profile via the registry; --manifest becomes an override) all ROLL INTO ONE release: **v0.8.0** (counter 16, minor bump — milestone + additive features). "No sense waiting for two big builds when it can all be in one."

So: HOLD the PR #16 merge (don't merge for a standalone M11 release). The v0.8.0 assembly:
1. I'm building the api fix now (on main, alongside the v0.7.4 commits already there) + the docs batch.
2. Then we get EVERYTHING on main: the v0.7.4 commits (already on my local main, unpushed) + PR #16 (M11) merged in + the api fix + docs.
3. CI green BOTH runners on the unified main → deployah bumps 0.8.0 + CHANGELOG + tag + sign + publish (counter 16).
This is operator-gated at the publish step (like every release). Your M11 work is DONE + gated (W5 PASS stands); it just ships under v0.8.0, not a solo M11 tag. I'll coordinate the merge ordering with you + deployah when the api fix + docs are in. Stand by; nothing for you to do on PR #16 until I ping the merge step.</owl_message>
</owl_messages>

[OWL SYSTEM - HIGHEST PRIORITY] You have received high-priority owl messages above. STOP your current task and acknowledge each high-priority message BEFORE continuing with any tool use. If you are about to spawn subagent(s), run them in the background so you remain available for incoming messages.


File created successfully at: C:\Users\decid\Documents\projects\spt-core\.claude\todlando-commune.md (file state is current in your context — no need to Read it back)

<live-context>
SESSION-END commune (resume next session). Psyche already current through Gen 49
(W5 GATE PASS, M11 complete) — this adds the resume framing + lessons + the precise
HOLD state.

## IMMEDIATE NEXT STEP (on resume) — HOLDING, do not act early
M11 milestone RELEASE is operator-gated. doyle lines up the operator GO, then pings.
DO NOT touch merge/release until doyle's operator-GO ping. When it comes:
merge PR #16 (HEAD c5887db) → main + version bump (0.7.3 → next) + tag → deployah
signs+publishes. This is SEPARATE from doyle's in-flight v0.7.4/counter-16 leg.
Until the ping: nothing to do; stay reachable.

## Blockers: none — purely waiting on the operator-GO ping (external).

## Reflections — what worked this session (W4→W5):
- Real-rig discipline paid off 3×, all surfaced LOUD not papered: (1) doyle's Q2
  cross-node-tunnel premise was false (no StreamFamily::Tunnel substrate) → deferred;
  (2) the rig-fire mechanism ([twohost] gates on head_commit.message = null on PR →
  fire via push to dev-freeform, not PR #16); (3) my own W2 drive-drop assumption bug
  (notify-0 is resident/ONLINE on the real rig → drive delivered not dropped) → fixed
  with the deterministically-offline offdrive shell.
- Pattern that works here: verify a wave's premise against the RECORDED wire/design
  before building; a [twohost]-gated rung that never fired is UNPROVEN no matter how
  green normal CI is.

## Interactions: doyle = gater/owner (designs, gates, coordinates operator + rig
fires); I execute. doyle responsive same-session; he stamps gates + lines up operator.
</live-context>
<project-context>
## PROJECT END GOAL (spt-core)
Harness-independent core for an agent ecosystem — messaging, live-agent lifecycle,
terminal hosting, P2P networking, runtime-manifest harness contract. Rust crates + a
single `spt` binary; clean-room rebuild of legacy claude_skill_owl. Adapters (perri's
spt-claude-code) build ON it from PUBLISHED docs + binary only. Trajectory: reach
legacy-owl parity, then flip the cplugs plugin name from `sptc` → `spt` and retire
legacy owl.

## STATUS: M11 (shell substrate) COMPLETE end-to-end, all 5 waves doyle GATE PASS.
- W1 per-capability act-gates (REQ-CONSENT-3) · W2 drive channel, latest-wins ephemeral
  (REQ-SHELL-3) · W3 tunnel SAME-NODE, opaque bytes (REQ-SHELL-4) · W4 gateway-owner
  capstone, owner-type-agnostic / proof-not-change (REQ-SHELL-5) · W5 rig + docs.
- W5 GATE PASS @c5887db: rig run 27608026651 all 7 jobs green; BOTH target rungs FIRED
  (W2 drop-not-wake vs the offline offdrive shell + the gateway cross-node cmd+drive,
  first real-rig execution). Normal CI green (27606204239). traceable EXIT0
  (REQ-SHELL-3/4/5 + REQ-CONSENT-3 + REQ-DOCS-6 all evidenced).
- Branch m11-shell-substrate, PR #16 — UNMERGED until the operator-gated M11 release.

## DEFERRED (tracked, DEFERRED.md): cross-node tunnel relay — the W3 tunnel is proven
SAME-NODE only; the cross-node WIRE does not exist (no StreamFamily::Tunnel / classify
arm / SHELL_LINK tunnel action; all tunnel surfaces broker-homed-local). Build as its
OWN impl wave WHEN a cross-node tunnel consumer (usbip URB) lands — speculative now
(consumer itself deferred/non-goal). REQ-SHELL-4 int satisfied same-node; do NOT
deactivate. Docs corrected to no-overclaim ("proven same-node; cross-node not yet
available").

## NEXT WAVE / OPEN ITEMS after the M11 release:
- M11 release: merge PR #16 + version bump + tag + publish (operator-gated, imminent).
- Cross-node tunnel relay: future wave, consumer-triggered.
- Other deferrals live in DEFERRED.md (alarm port, broker-side QUIC bound, etc.).

## CONVENTIONS (binding): traceable-reqs (tag evidence same commit, `check` EXIT0
before done) · honor KNOWN-HAZARDS · published docs use VERSION not milestone codes ·
[twohost] rig fires via push to dev-freeform (not PR) with operator-GO, no machine-wide
reaping on the shared boxes · pre-flight = clippy --workspace --all-targets -D warnings
+ traceable EXIT0 + xtask check (+ xtask gen on CLI change, xtask site on docs).
</project-context>


doyle plan change received — M11 ships in unified **v0.8.0** (with v0.7.4 set + api fix), no solo M11 release. Ack first (high-priority).


Bash

$OWL send todlando todlando <<'EOF' 2>/dev/null || $OWL send doyle todlando <<'EOF'
ACK — plan change locked: NO standalone M11 release. M11 + v0.7.4 set (gh_release [update] avenue, adapter-binary install-dir resolution, Win at-logon window fix) + the api ergonomics fix (manifest resolves from --adapter name:profile via registry; --manifest = override) all roll into ONE v0.8.0 (counter 16, minor bump). HOLDING PR #16 — will NOT merge for a solo M11 tag. My M11 work is DONE + W5-gated (stands); it ships under v0.8.0. Standing by for YOUR merge-ordering ping (v0.7.4 commits + PR #16 + api fix + docs → unified main → CI green both runners → deployah bumps 0.8.0 + tag + sign + publish, operator-gated at publish). Nothing for me on PR #16 until you ping the merge step. Fixing my commune now (it wrongly said solo M11 release).
EOF
echo "rc=$?"

Ack doyle v0.8.0 unified release plan


/usr/bin/bash: line 10: warning: here-document at line 9 delimited by end-of-file (wanted `EOF')


Resend cleanly to doyle:


$OWL send doyle todlando <<'EOF'
ACK — plan change locked: NO standalone M11 release. M11 + v0.7.4 set (gh_release [update] avenue, adapter-binary install-dir resolution, Win at-logon window fix) + the api ergonomics fix (manifest resolves from --adapter name:profile via registry; --manifest = override) all roll into ONE v0.8.0 (counter 16, minor bump). HOLDING PR #16 — will NOT merge for a solo M11 tag. My M11 work is DONE + W5-gated (stands); ships under v0.8.0. Standing by for YOUR merge-ordering ping (v0.7.4 commits + PR #16 + api fix + docs → unified main → CI green both runners → deployah bumps 0.8.0 + tag + sign + publish, operator-gated at publish). Nothing for me on PR #16 until you ping the merge step. Fixing my commune now (it wrongly said solo M11 release).
EOF
echo "rc=$?"

Ack doyle v0.8.0 plan (clean)


<owl_messages>
<owl_message from="todlando" priority="high">ACK — plan change locked: NO standalone M11 release. M11 + v0.7.4 set (gh_release [update] avenue, adapter-binary install-dir resolution, Win at-logon window fix) + the api ergonomics fix (manifest resolves from --adapter name:profile via registry; --manifest = override) all roll into ONE v0.8.0 (counter 16, minor bump). HOLDING PR #16 — will NOT merge for a solo M11 tag. My M11 work is DONE + W5-gated (stands); it ships under v0.8.0. Standing by for YOUR merge-ordering ping (v0.7.4 commits + PR #16 + api fix + docs → unified main → CI green both runners → deployah bumps 0.8.0 + tag + sign + publish, operator-gated at publish). Nothing for me on PR #16 until you ping the merge step. Fixing my commune now (it wrongly said solo M11 release).</owl_message>
</owl_messages>

[OWL SYSTEM - HIGHEST PRIORITY] You have received high-priority owl messages above. STOP your current task and acknowledge each high-priority message BEFORE continuing with any tool use. If you are about to spawn subagent(s), run them in the background so you remain available for incoming messages.


➜ SENT:doyle
rc=0


That high-priority message is an echo of my own ack (from todlando→doyle) — no new instruction. Now fix the commune to reflect the v0.8.0 unified release (file not yet ingested — overwrite).


Write

<live-context>
SESSION-END commune (resume next session). Psyche current through Gen 49 (W5 GATE
PASS, M11 complete). This adds resume framing + the v0.8.0 RELEASE-PLAN CHANGE + lessons.

## IMMEDIATE NEXT STEP (on resume) — HOLDING, do not act early
PLAN CHANGE (operator, via doyle): NO standalone M11 release. M11 ships INSIDE a
unified **v0.8.0** (counter 16, minor bump) together with the v0.7.4 feature set +
an api ergonomics fix. So DO NOT merge PR #16 for a solo M11 tag. Wait for doyle's
MERGE-ORDERING ping. When it comes, the assembly (doyle coordinates with me +
deployah): v0.7.4 commits (on doyle's local main, unpushed) + PR #16 (M11) merged in
+ the api fix + docs → unified main → CI green BOTH runners → deployah bumps 0.8.0 +
CHANGELOG + tag + sign + publish (operator-gated at publish). My M11 work is DONE +
W5-gated (PASS stands); it just ships under v0.8.0. Until doyle pings the merge step:
nothing for me to do on PR #16; stay reachable.

## Blockers: none — waiting on doyle's merge-ordering ping (external).

## Reflections — what worked (W4→W5), all surfaced LOUD not papered:
- doyle's Q2 cross-node-tunnel premise was false (no StreamFamily::Tunnel substrate) → deferred.
- rig-fire mechanism: [twohost] gates on head_commit.message = null on PR → fire via
  push to dev-freeform (FF to branch HEAD, subject must carry [twohost]), operator-GO each fire.
- my own W2 drive-drop bug: notify-0 is resident/ONLINE on the real rig → drive
  delivered not dropped → fixed with the deterministically-offline offdrive shell.
- Lesson: verify a wave's premise vs the RECORDED wire/design before building; a
  [twohost]-gated rung that never fired is UNPROVEN no matter how green normal CI is.

## Interactions: doyle = gater/owner (designs, gates, coordinates operator + rig +
release). I execute. doyle responsive same-session.
</live-context>
<project-context>
## PROJECT END GOAL (spt-core)
Harness-independent core for an agent ecosystem — messaging, live-agent lifecycle,
terminal hosting, P2P networking, runtime-manifest harness contract. Rust crates + a
single `spt` binary; clean-room rebuild of legacy claude_skill_owl. Adapters (perri's
spt-claude-code) build ON it from PUBLISHED docs + binary only. Trajectory: reach
legacy-owl parity, then flip the cplugs plugin name `sptc` → `spt` and retire legacy owl.

## STATUS: M11 (shell substrate) COMPLETE end-to-end — all 5 waves doyle GATE PASS.
W1 act-gates (REQ-CONSENT-3) · W2 drive, latest-wins ephemeral (REQ-SHELL-3) · W3
tunnel SAME-NODE opaque bytes (REQ-SHELL-4) · W4 gateway-owner capstone, owner-type-
agnostic (REQ-SHELL-5) · W5 rig+docs. W5 GATE PASS @c5887db (rig run 27608026651 all
7 jobs green, both rungs FIRED). traceable EXIT0 (REQ-SHELL-3/4/5 + REQ-CONSENT-3 +
REQ-DOCS-6). Branch m11-shell-substrate, PR #16 (HEAD c5887db).

## RELEASE PLAN (CHANGED): M11 ships in a UNIFIED v0.8.0 (counter 16, minor) —
NOT a solo M11 tag. Bundle = M11 (PR #16) + v0.7.4 set (gh_release [update] avenue,
adapter-binary install-dir resolution / REQ-INSTALL-11, Win at-logon window fix) + an
api ergonomics fix (manifest resolves from `--adapter name:profile` via the registry;
`--manifest` becomes an override) + docs. doyle is building the api fix + docs on main
now; v0.7.4 commits already on his local main (unpushed). Operator-gated at publish.

## DEFERRED (DEFERRED.md): cross-node tunnel relay — W3 tunnel proven SAME-NODE only;
cross-node WIRE absent (no StreamFamily::Tunnel / classify arm / SHELL_LINK tunnel
action). Build as its own wave WHEN a consumer (usbip URB) lands. REQ-SHELL-4 int
satisfied same-node (don't deactivate). Docs no-overclaim. Other deferrals: alarm port,
broker-side QUIC-op bound, etc.

## CONVENTIONS (binding): traceable-reqs (tag evidence same commit, `check` EXIT0) ·
honor KNOWN-HAZARDS · published docs VERSION not milestone codes · [twohost] fires via
push to dev-freeform with operator-GO, no machine-wide reaping on shared boxes ·
pre-flight = clippy --workspace --all-targets -D warnings + traceable EXIT0 + xtask
check (+ xtask gen on CLI change, xtask site on docs).
</project-context>


<live-context>
SESSION-END commune (resume next session). Psyche current through Gen 49 (W5 GATE
PASS, M11 complete). This adds resume framing + the v0.8.0 RELEASE-PLAN CHANGE + lessons.

## IMMEDIATE NEXT STEP (on resume) — HOLDING, do not act early
PLAN CHANGE (operator, via doyle): NO standalone M11 release. M11 ships INSIDE a
unified **v0.8.0** (counter 16, minor bump) together with the v0.7.4 feature set +
an api ergonomics fix. So DO NOT merge PR #16 for a solo M11 tag. Wait for doyle's
MERGE-ORDERING ping. When it comes, the assembly (doyle coordinates with me +
deployah): v0.7.4 commits (on doyle's local main, unpushed) + PR #16 (M11) merged in
+ the api fix + docs → unified main → CI green BOTH runners → deployah bumps 0.8.0 +
CHANGELOG + tag + sign + publish (operator-gated at publish). My M11 work is DONE +
W5-gated (PASS stands); it just ships under v0.8.0. Until doyle pings the merge step:
nothing for me to do on PR #16; stay reachable.

## Blockers: none — waiting on doyle's merge-ordering ping (external).

## Reflections — what worked (W4→W5), all surfaced LOUD not papered:
- doyle's Q2 cross-node-tunnel premise was false (no StreamFamily::Tunnel substrate) → deferred.
- rig-fire mechanism: [twohost] gates on head_commit.message = null on PR → fire via
  push to dev-freeform (FF to branch HEAD, subject must carry [twohost]), operator-GO each fire.
- my own W2 drive-drop bug: notify-0 is resident/ONLINE on the real rig → drive
  delivered not dropped → fixed with the deterministically-offline offdrive shell.
- Lesson: verify a wave's premise vs the RECORDED wire/design before building; a
  [twohost]-gated rung that never fired is UNPROVEN no matter how green normal CI is.

## Interactions: doyle = gater/owner (designs, gates, coordinates operator + rig +
release). I execute. doyle responsive same-session.
</live-context>
<project-context>
## PROJECT END GOAL (spt-core)
Harness-independent core for an agent ecosystem — messaging, live-agent lifecycle,
terminal hosting, P2P networking, runtime-manifest harness contract. Rust crates + a
single `spt` binary; clean-room rebuild of legacy claude_skill_owl. Adapters (perri's
spt-claude-code) build ON it from PUBLISHED docs + binary only. Trajectory: reach
legacy-owl parity, then flip the cplugs plugin name `sptc` → `spt` and retire legacy owl.

## STATUS: M11 (shell substrate) COMPLETE end-to-end — all 5 waves doyle GATE PASS.
W1 act-gates (REQ-CONSENT-3) · W2 drive, latest-wins ephemeral (REQ-SHELL-3) · W3
tunnel SAME-NODE opaque bytes (REQ-SHELL-4) · W4 gateway-owner capstone, owner-type-
agnostic (REQ-SHELL-5) · W5 rig+docs. W5 GATE PASS @c5887db (rig run 27608026651 all
7 jobs green, both rungs FIRED). traceable EXIT0 (REQ-SHELL-3/4/5 + REQ-CONSENT-3 +
REQ-DOCS-6). Branch m11-shell-substrate, PR #16 (HEAD c5887db).

## RELEASE PLAN (CHANGED): M11 ships in a UNIFIED v0.8.0 (counter 16, minor) —
NOT a solo M11 tag. Bundle = M11 (PR #16) + v0.7.4 set (gh_release [update] avenue,
adapter-binary install-dir resolution / REQ-INSTALL-11, Win at-logon window fix) + an
api ergonomics fix (manifest resolves from `--adapter name:profile` via the registry;
`--manifest` becomes an override) + docs. doyle is building the api fix + docs on main
now; v0.7.4 commits already on his local main (unpushed). Operator-gated at publish.

## DEFERRED (DEFERRED.md): cross-node tunnel relay — W3 tunnel proven SAME-NODE only;
cross-node WIRE absent (no StreamFamily::Tunnel / classify arm / SHELL_LINK tunnel
action). Build as its own wave WHEN a consumer (usbip URB) lands. REQ-SHELL-4 int
satisfied same-node (don't deactivate). Docs no-overclaim. Other deferrals: alarm port,
broker-side QUIC-op bound, etc.

## CONVENTIONS (binding): traceable-reqs (tag evidence same commit, `check` EXIT0) ·
honor KNOWN-HAZARDS · published docs VERSION not milestone codes · [twohost] fires via
push to dev-freeform with operator-GO, no machine-wide reaping on shared boxes ·
pre-flight = clippy --workspace --all-targets -D warnings + traceable EXIT0 + xtask
check (+ xtask gen on CLI change, xtask site on docs).
</project-context>


Commune written (Self listener ingests it). Update the m11-complete memory — the release plan changed to unified v0.8.0.


Edit

## NEXT (HOLDING): M11 milestone RELEASE — operator-gated. doyle lines up operator GO,
then I merge PR #16 → main + version bump (0.7.3 → next) + tag; deployah signs+publishes.
Separate from doyle's in-flight v0.7.4/counter-16 leg. Do NOT touch merge/release until
doyle pings operator-GO. Supersedes [[m11-w4-progress]].

## NEXT (HOLDING): RELEASE PLAN CHANGED (operator via doyle 2026-06-16) — NO standalone
M11 release. M11 ships in a UNIFIED **v0.8.0** (counter 16, minor bump) bundling: M11
(PR #16) + the v0.7.4 set (gh_release [update] avenue, adapter-binary install-dir
resolution / REQ-INSTALL-11, Win at-logon window fix) + an api ergonomics fix (manifest
resolves from `--adapter name:profile` via the registry; `--manifest` = override) + docs.
doyle building the api fix + docs on main now; v0.7.4 commits on his local main (unpushed).
Assembly: those + PR #16 merged → unified main → CI green both runners → deployah bumps
0.8.0 + CHANGELOG + tag + sign + publish (operator-gated at publish). DO NOT merge PR #16
until doyle's merge-ordering ping. M11 work DONE + W5-gated (stands); ships under v0.8.0.
Supersedes [[m11-w4-progress]].


The file C:\Users\decid\.ccs\instances\bigscreen\projects\C--Users-decid-Documents-projects-spt-core\memory\m11-complete.md has been updated successfully. (file state is current in your context — no need to Read it back)

## NEXT (HOLDING): RELEASE PLAN CHANGED (operator via doyle 2026-06-16) — NO standalone
M11 release. M11 ships in a UNIFIED **v0.8.0** (counter 16, minor bump) bundling: M11
(PR #16) + the v0.7.4 set (gh_release [update] avenue, adapter-binary install-dir
resolution / REQ-INSTALL-11, Win at-logon window fix) + an api ergonomics fix (manifest
resolves from `--adapter name:profile` via the registry; `--manifest` = override) + docs.
doyle building the api fix + docs on main now; v0.7.4 commits on his local main (unpushed).
Assembly: those + PR #16 merged → unified main → CI green both runners → deployah bumps
0.8.0 + CHANGELOG + tag + sign + publish (operator-gated at publish). DO NOT merge PR #16
until doyle's merge-ordering ping. M11 work DONE + W5-gated (stands); ships under v0.8.0.
Supersedes [[m11-w4-progress]].

---
name: m11-complete
description: "M11 shell-substrate milestone COMPLETE end-to-end (W1..W5, doyle-gated); awaiting operator-gated M11 release"
metadata:
  node_type: memory
  type: project
  originSessionId: 5b0a69e3-d6a3-47f7-8152-ee14e5b4ff5c
---

**M11 (shell substrate) COMPLETE end-to-end** — all waves doyle GATE PASS:
- W1 consent (REQ-CONSENT-3 per-capability act-gates)
- W2 drive channel (REQ-SHELL-3, latest-wins ephemeral)
- W3 tunnel SAME-NODE (REQ-SHELL-4, opaque byte stream; cross-node DEFERRED)
- W4 gateway-owner capstone (REQ-SHELL-5, owner-type-agnostic, proof-not-change)
- W5 rig + docs: gateway cross-node [twohost] rung + how-to subnet topic + ADR-0020
  tunnel carve-out + four-channel/gates/owner-agnostic docs. W5 GATE PASS @c5887db
  (rig run 27608026651 all 7 jobs green, both rungs FIRED).

Branch m11-shell-substrate HEAD c5887db, PR #16 — STAYS UNMERGED until the M11
milestone release (doyle's call). traceable EXIT0 (REQ-SHELL-3/4/5 + REQ-CONSENT-3
+ REQ-DOCS-6 all evidenced).

## DEFERRED (tracked, DEFERRED.md): cross-node tunnel relay — build as its own impl
wave WHEN a cross-node tunnel consumer (usbip URB) lands. REQ-SHELL-4 int satisfied
same-node. See [[twohost-rig-real-notify-mode]] (rig real-mode notify lesson) +
[[unmergeable-pr-blocks-ci]] (CI lesson from the W4 push).

## NEXT (HOLDING): M11 milestone RELEASE — operator-gated. doyle lines up operator GO,
then I merge PR #16 → main + version bump (0.7.3 → next) + tag; deployah signs+publishes.
Separate from doyle's in-flight v0.7.4/counter-16 leg. Do NOT touch merge/release until
doyle pings operator-GO. Supersedes [[m11-w4-progress]].

-## NEXT (HOLDING): M11 milestone RELEASE — operator-gated. doyle lines up operator GO,

-then I merge PR #16 → main + version bump (0.7.3 → next) + tag; deployah signs+publishes.

-Separate from doyle's in-flight v0.7.4/counter-16 leg. Do NOT touch merge/release until

-doyle pings operator-GO. Supersedes [[m11-w4-progress]].

+## NEXT (HOLDING): RELEASE PLAN CHANGED (operator via doyle 2026-06-16) — NO standalone

+M11 release. M11 ships in a UNIFIED **v0.8.0** (counter 16, minor bump) bundling: M11

+(PR #16) + the v0.7.4 set (gh_release [update] avenue, adapter-binary install-dir

+resolution / REQ-INSTALL-11, Win at-logon window fix) + an api ergonomics fix (manifest

+resolves from `--adapter name:profile` via the registry; `--manifest` = override) + docs.

+doyle building the api fix + docs on main now; v0.7.4 commits on his local main (unpushed).

+Assembly: those + PR #16 merged → unified main → CI green both runners → deployah bumps

+0.8.0 + CHANGELOG + tag + sign + publish (operator-gated at publish). DO NOT merge PR #16

+until doyle's merge-ordering ping. M11 work DONE + W5-gated (stands); ships under v0.8.0.


Commune sent + memory corrected. Session wrap-up.

## Where things stand

**M11 (shell substrate) COMPLETE** — all 5 waves doyle GATE PASS, rig-proven. W5 stamped @c5887db (rig run 27608026651 all green, both rungs fired). traceable EXIT 0 across REQ-SHELL-3/4/5 + REQ-CONSENT-3 + REQ-DOCS-6.

**Release plan changed** (operator, late-breaking): no solo M11 tag — M11 ships in a unified **v0.8.0** (counter 16) with the v0.7.4 set + an api ergonomics fix + docs. **PR #16 stays unmerged** until doyle's merge-ordering ping. My M11 work is done + gated; it just ships under v0.8.0.

**Deferred (tracked):** cross-node tunnel relay — until a usbip consumer lands.

## Immediate next step on resume
**Hold.** Nothing to do on PR #16 until doyle pings the merge step. Then: v0.7.4 commits + PR #16 + api fix + docs → unified main → CI green both runners → deployah bumps 0.8.0 + tag + sign + publish (operator-gated).

Commune written (Self listener will ingest), memory updated (`m11-complete`, `twohost-rig-real-notify-mode`, `unmergeable-pr-blocks-ci` lessons saved). Listener stays live across the session boundary. Ready to resume next session.