Base directory for this skill: C:\Users\decid\.claude\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


<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.


Communing to Psyche before next session. First, download current Psyche context to diff the delta:


Bash

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

Download current 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="main" head_sha="c84daff6a172808749c0a63518300be116334ae8" head_subject="docs(forum): ratify always-on endpoint kind + #-sigil addressing (ADR-00…" commits_since="0" commits_unpulled="83"/>
Gen 48 active, 2026-06-22T08:08:37Z. Major gate-escape on translate-proof PR#28 Windows CI — **fixture bin collision** discovered + fixed, awaiting full cross-crate matrix verification before push.

## Translate-proof — GATE ESCAPE FOUND & FIXED
Windows CI RED on PR#28 (real bug, not flake). ROOT: my spt-crate fixture named `xlate_choreo_fixture` collided with spt-daemon's same-named `src/bin/xlate_choreo_fixture.rs` — both emitted `target/debug/xlate_choreo_fixture.exe`, clobbering. Daemon's `g3_content_free_ping_never_duplicates` test resolved `CARGO_BIN_EXE_xlate_choreo_fixture` to my emit-only fixture (stdin-log/ping stripped) → no ping logged → FAIL. My local `-p spt` run never saw collision; doyle's gate missed it too (shared-seam class miss).

**Fix applied**: Renamed spt fixture to `translate_proof_fixture` everywhere (Cargo.toml [[bin]], sibling_bin() ref in translate_proof.rs, CARGO_BIN_EXE_ env var, fixture header with inline must-be-distinct rationale). All functional refs updated; remaining `xlate_choreo_fixture` strings are doc refs to daemon bin (correct).

**Verification**: Running full cross-crate matrix (collision-check build + daemon g1–g4 + spt translate_proof tests + clippy/traceable/drift all crates). Will push + notify doyle evidence only when g3 + g-suite green again — discipline required after gate-escape.

**doyle's ruling**: Holding, approves approach. Will re-gate (rename diff + grep no other consumer touched). Then v0.13.1 expedite cut on green-both-runners. Correctness over speed.

## Prev state
v0.13.0 COMPLETE (delivered). translate-proof was at gate (a05ef2c) pending doyle's cut word + CI-green.

## Next
Matrix verification completes → push → doyle re-gates → v0.13.1 cut.<project-context-resolved name="spt-core"/>
## Translate-proof ADR-0022 — EMIT-half delivery on final gate

**State**: gate re-pass (doyle) + merge gate (CI pending).

**doyle's verdict**: consistent rename, zero daemon scope creep, full matrix validates the fix. Branch is merge-ready pending CI green both runners.

**Gating path forward**: CI green → merge PR#28 → doyle + deployah notified → v0.13.1 expedite cut (approved by doyle).

**Lesson**: gate-escape root was local test isolation (ran spt only, never daemon suite). Amended commit to `aa5fa2a` on push (broke commit never reached gate). Both saved to future working memory.


Psyche is at Gen-48 — has the collision fix + "matrix running, pre-push," but **not** the delta since: matrix green → pushed `aa5fa2a` → doyle re-gate PASS → CI green both runners (handoff flake cleared on rerun) → **PR #28 MERGED `c7096e9`** → deployah firing v0.13.1. Writing only that delta + resume next-steps, two-slice (project="spt-core" → both envelopes):


Write

<live-context>
DELTA since Gen-48 snapshot (which ended at "collision fix applied, matrix running, pre-push"):

- Full cross-crate matrix came back GREEN: no collision warning; both `xlate_choreo_fixture.exe` (daemon) + `translate_proof_fixture.exe` (spt) coexist; spt-daemon g1–g4 PASS incl **g3 (the victim) back to PASS**; spt translate_proof int+units PASS; clippy both crates clean; traceable 0; xtask drift OK.
- Pushed the fix. NOTE: first push (bf6b3b7) was botched — a `git add` on a stale (git-mv'd-away) pathspec fatal'd and staged nothing but the rename, so it captured 0 content edits (broken, unbuildable). Caught it on the diffstat ("1 file, 0 insertions"), staged the 4 edits, amended → **aa5fa2a**, force-pushed (--force-with-lease; bf6b3b7 never gated).
- doyle RE-GATE: PASS @ aa5fa2a (zero daemon paths touched, rename consistent, distinct output filename, matrix green). Gave the MERGE WORD.
- CI on aa5fa2a: Windows `test` leg RED once — the **handoff `brain_restart_survives_gaplessly` load-flake** (>240s timeout on hammered hfenduleam; handoff.rs untouched by my diff; passed ×3 this session). doyle confirmed unrelated. Ran clean `gh run rerun 27938921262 --failed` (Windows only, no re-push) → GREEN both runners.
- **MERGED PR #28** → main (squash → **c7096e9**). doyle confirmed main stacks clean (his cfb25b7 changelog + 2cdb8c8 doc + #28, no revert). Notified doyle + deployah.

IMMEDIATE NEXT STEPS (resume here next session):
1. Await deployah's v0.13.1 publish ping (hashes + counter, expect 28). Ack/relay when it lands.
2. Then perri's IMTB dogfood unblocks (`spt update fetch` was rejecting Rollback{27,27} — no release carried translate-proof). Watch for her result against claude-spt + the \r/{commit} resolution.
3. Else idle — await next dispatch.

Reflection: three refusals held the bar and were all doyle-confirmed — (a) refused doyle's wedge root misread #3 (io_timeout, not connect), (b) refused to make the proof diverge from the broker on perri's \r report, (c) refused "fixed" on units alone after the collision (ran the full cross-crate matrix). Two near-misses (broken commit, bin collision) caught + corrected; both saved to working memory.
</live-context>
<project-context>
## spt-core release state (2026-06-22)

**v0.13.0 — SHIPPED** (delivery-control wedge fixes + ADR-0022 translation-binary). My contribution: `@45cc479` env-tunable per-IPC-call deadline (`attach_ipc_deadline`/`SPT_ATTACH_IPC_DEADLINE_MS`) for the inject_control_wedge `request_attach` ack-starvation flake — corrected the root that had been misread 3× (the `cold_start_pump` Duration is `io_timeout`/per-call READ deadline, NOT a connect bound; the flake bites at `request_attach`→`net_open_stream`'s journaled ack).

**v0.13.1 — CUTTING NOW** (deployah, operator-expedited). Carries `spt adapter translate-proof` (REQ-ADAPTER-TRANSLATE-PROOF), merged to main as **c7096e9**. deployah is driving: bump 0.13.0→0.13.1 → [0.13.1] changelog → push → CI both runners → tag v0.13.1 → sign → publish (counter expect 28). Will ping hashes+counter.

**translate-proof** = author-time EMIT-half proof for `[message-idle-translation-binary]`, symmetric to `spt adapter digest-proof`. Drives the REAL `spt_daemon::translation` driver verbatim (anti-drift). EMIT-half only (no atomic PTY apply — W2 inject_control_wedge int owns that).

## OPEN ITEM — IMTB contract (perri ⇄ doyle, not mine to close)
perri's claude-spt translation binary submits via trailing `\r` inside `{text}` with NO explicit `{commit}` → translate-proof correctly exit-1's it (NO_COMMIT). doyle RULED: **`{commit}` stays mandatory** (an `enter` is a keystroke INSIDE the choreography, not its terminator — implicit-commit would sever a trailing `ctrl+s`, breaking stash/restore coexistence). So: perri's binary is non-conformant (must emit trailing `{commit:true}`) — she's fixing it. The real systemic miss is the DOC: `manifest.md [message-idle-translation-binary]` omits `{commit}` from the vocabulary + has a faulting degenerate example — **doyle owns + is republishing** that. Proof + broker unchanged (correct as-is).

## End goal
spt-core = harness-independent core for an agent ecosystem (messaging, live-agent lifecycle, terminal hosting, P2P networking, runtime-manifest harness contract); single `spt` binary; clean-room rebuild of claude_skill_owl. Current arc: v0.13.x hardening of idle-delivery (ADR-0022 translation binary) + the inject/attach wedge class. spt-claude-code adapter (perri) is the gating consumer dogfooding the IMTB loop.
</project-context>


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


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>
DELTA since Gen-48 snapshot (which ended at "collision fix applied, matrix running, pre-push"):

- Full cross-crate matrix came back GREEN: no collision warning; both `xlate_choreo_fixture.exe` (daemon) + `translate_proof_fixture.exe` (spt) coexist; spt-daemon g1–g4 PASS incl **g3 (the victim) back to PASS**; spt translate_proof int+units PASS; clippy both crates clean; traceable 0; xtask drift OK.
- Pushed the fix. NOTE: first push (bf6b3b7) was botched — a `git add` on a stale (git-mv'd-away) pathspec fatal'd and staged nothing but the rename, so it captured 0 content edits (broken, unbuildable). Caught it on the diffstat ("1 file, 0 insertions"), staged the 4 edits, amended → **aa5fa2a**, force-pushed (--force-with-lease; bf6b3b7 never gated).
- doyle RE-GATE: PASS @ aa5fa2a (zero daemon paths touched, rename consistent, distinct output filename, matrix green). Gave the MERGE WORD.
- CI on aa5fa2a: Windows `test` leg RED once — the **handoff `brain_restart_survives_gaplessly` load-flake** (>240s timeout on hammered hfenduleam; handoff.rs untouched by my diff; passed ×3 this session). doyle confirmed unrelated. Ran clean `gh run rerun 27938921262 --failed` (Windows only, no re-push) → GREEN both runners.
- **MERGED PR #28** → main (squash → **c7096e9**). doyle confirmed main stacks clean (his cfb25b7 changelog + 2cdb8c8 doc + #28, no revert). Notified doyle + deployah.

IMMEDIATE NEXT STEPS (resume here next session):
1. Await deployah's v0.13.1 publish ping (hashes + counter, expect 28). Ack/relay when it lands.
2. Then perri's IMTB dogfood unblocks (`spt update fetch` was rejecting Rollback{27,27} — no release carried translate-proof). Watch for her result against claude-spt + the \r/{commit} resolution.
3. Else idle — await next dispatch.

Reflection: three refusals held the bar and were all doyle-confirmed — (a) refused doyle's wedge root misread #3 (io_timeout, not connect), (b) refused to make the proof diverge from the broker on perri's \r report, (c) refused "fixed" on units alone after the collision (ran the full cross-crate matrix). Two near-misses (broken commit, bin collision) caught + corrected; both saved to working memory.
</live-context>
<project-context>
## spt-core release state (2026-06-22)

**v0.13.0 — SHIPPED** (delivery-control wedge fixes + ADR-0022 translation-binary). My contribution: `@45cc479` env-tunable per-IPC-call deadline (`attach_ipc_deadline`/`SPT_ATTACH_IPC_DEADLINE_MS`) for the inject_control_wedge `request_attach` ack-starvation flake — corrected the root that had been misread 3× (the `cold_start_pump` Duration is `io_timeout`/per-call READ deadline, NOT a connect bound; the flake bites at `request_attach`→`net_open_stream`'s journaled ack).

**v0.13.1 — CUTTING NOW** (deployah, operator-expedited). Carries `spt adapter translate-proof` (REQ-ADAPTER-TRANSLATE-PROOF), merged to main as **c7096e9**. deployah is driving: bump 0.13.0→0.13.1 → [0.13.1] changelog → push → CI both runners → tag v0.13.1 → sign → publish (counter expect 28). Will ping hashes+counter.

**translate-proof** = author-time EMIT-half proof for `[message-idle-translation-binary]`, symmetric to `spt adapter digest-proof`. Drives the REAL `spt_daemon::translation` driver verbatim (anti-drift). EMIT-half only (no atomic PTY apply — W2 inject_control_wedge int owns that).

## OPEN ITEM — IMTB contract (perri ⇄ doyle, not mine to close)
perri's claude-spt translation binary submits via trailing `\r` inside `{text}` with NO explicit `{commit}` → translate-proof correctly exit-1's it (NO_COMMIT). doyle RULED: **`{commit}` stays mandatory** (an `enter` is a keystroke INSIDE the choreography, not its terminator — implicit-commit would sever a trailing `ctrl+s`, breaking stash/restore coexistence). So: perri's binary is non-conformant (must emit trailing `{commit:true}`) — she's fixing it. The real systemic miss is the DOC: `manifest.md [message-idle-translation-binary]` omits `{commit}` from the vocabulary + has a faulting degenerate example — **doyle owns + is republishing** that. Proof + broker unchanged (correct as-is).

## End goal
spt-core = harness-independent core for an agent ecosystem (messaging, live-agent lifecycle, terminal hosting, P2P networking, runtime-manifest harness contract); single `spt` binary; clean-room rebuild of claude_skill_owl. Current arc: v0.13.x hardening of idle-delivery (ADR-0022 translation binary) + the inject/attach wedge class. spt-claude-code adapter (perri) is the gating consumer dogfooding the IMTB loop.
</project-context>


Commune written (two-slice: live-context delta + project-context release state). Verifying ingestion (file disappears on success):


Bash

sleep 6; ls /c/Users/decid/Documents/projects/spt-core/.claude/todlando-commune.md 2>&1 && echo "STILL PRESENT (will ingest on next Self poll; content persists on disk as resume note regardless)" || echo "INGESTED (consumed by Psyche wrapper)"

Check commune ingestion


/c/Users/decid/Documents/projects/spt-core/.claude/todlando-commune.md
STILL PRESENT (will ingest on next Self poll; content persists on disk as resume note regardless)


Communed — `.claude/todlando-commune.md` written and queued (Self will ingest on its next poll; content is durable on disk meanwhile). Two-slice body: **live-context** = the delta since Gen-48 (matrix green → `aa5fa2a` → re-gate PASS → CI green after the handoff-flake rerun → **PR #28 merged `c7096e9`** → deployah cutting v0.13.1) + the 3 immediate resume steps; **project-context** = v0.13.0 shipped / v0.13.1 cutting / the open IMTB `{commit}` contract item (perri⇄doyle) / end goal.

## Resume pointer for next session

1. Await deployah's **v0.13.1 publish** ping (hashes + counter ~28) → ack/relay.
2. Then perri's `spt update fetch` unblocks → watch her translate-proof dogfood against claude-spt + the `\r`/`{commit}` resolution (her binary fix + doyle's manifest.md doc republish).
3. Else idle — next dispatch.

Everything from this session is delivered and in main; the v0.13.1 cut is deployah's. Briefed and ready to resume. 🦉