# NOW-SIGNAL W2 — #44 attachment channel + #45 away alerts — DELIVERED (todlando, 2026-08-30)

**STATUS: BUILT, COMMITTED, HANDED TO DOYLE'S GATE. Not landed. Awaiting his verdict.**

- sha **`081be523`** on `feat/ns23-w2-attachment-channel`, base `343df76e`
- lane worktree `.worktrees/ns23-w1`, pool `ns23-w2` **still claimed — do not reap or take it**
- 16 files, +1900/-50. `NS23-W2-JIT.md` deliberately NOT committed (lane scratch).

## What shipped

`REQ-ATTACH-LINK-PUSH` (doc/impl/unit/int) + `REQ-ATTACH-AWAY-ALERTS` (doc/impl/unit), both
covered — `traceable-reqs check` = 0.

- `EVENT_TYPE_ATTACH` (`spt-proto/src/event.rs`) + `compose_attach_frame` (`shellchan.rs`):
  `controlled` / `controller-node` / `viewers` / `viewer-nodes` / `changed`, empty body.
- `DriveHub` third slot class: `KIND_ATTACH_WRITE`, `write_attach` / `take_attach` /
  `has_attach_slot`, `clear` reaches all three, `DriveResult.attach` additive on the wire.
- `ViewerSink.origin_node` retained IN-MEMORY only; durable triple untouched.
- **`crates/spt-daemon/src/attachment.rs`** — the whole mechanism. One BROKER-hosted
  reconciler, sibling-verbatim to `activity.rs`. Also carries #45.
- `crates/spt/tests/attach_link_push_e2e.rs` — real-daemon capstone, 5 clauses, registered in
  the HEAVY set (BOTH strings: `.config/nextest.toml` + `golden.yml`).

## The one deviation, HANDED BACK AND APPROVED (doyle, 2026-08-30)

Ruled shape was broker-push + a thin brain-side observer asking the broker. Collapsed to ONE
broker-hosted reconciler after measuring that the link-set read (`shellinfo::list_shells` +
`is_shell_online` + `read_link_token`) is not brain-specific. Every ground of the ruling
survives strengthened: single-writer BY CONSTRUCTION, identity off disk AND off the wire,
constraint (a) structural (attach/evict paths untouched — an `AtomicBool` raised from the four
existing stamp sites), constraint (b) unchanged. doyle: "that is the right kind of deviation,
handed back the right way."

## Gate figures — every one from the LEG's own exit file

- `xtask check` 0 · `traceable-reqs check` 0 · `clippy --workspace --all-targets -D warnings` 0
- battery env-scrubbed, lane `spt.exe` reaped by PATH before AND after:
  **phase A 3198/3198** (9 leaky, hertz's filed pattern) · **phase B 210/210** (1 slow)
- `xtask gen` run; `docs-site/src/cli/reference.md` regenerated and committed. Verified
  POSITIVELY (a known-drift control returns exit 1) rather than assumed.

## Two measured corrections banked this lane

1. My first e2e red was MY assertion, not the product: one `spt rc --view` seats TWO viewer
   rows (probe conn + established viewport), so `viewer-nodes` honestly listed the node twice.
   Relaxed to multiset membership.
2. I told doyle `xtask check` does not gate reference.md drift. FALSE — it does. The green I
   read came from a STALE `target/debug/spt.exe` (neither `cargo build -p spt-daemon` nor
   `cargo check` links the `spt` bin). Corrected to him unprompted; banked in memory
   `cli-command-docs-drift.md` §5. doyle's gate driver prebuilds `--workspace --bins`, so it
   could not have fired there.

## Next

1. **Doyle's gate verdict on `081be523`.** Respin here if red — the lane and pool stay warm.
2. **W3 = #133 shell `[hints]`** — not yet scoped by me. Read the ticket, measure its premise
   BEFORE planning (that discipline has paid three times this milestone), JIT it, build it.
3. Then #11/#14 verify-close evidence + the operator referral brief (#11c flags, #16 gap,
   #17/#246) — doyle's framing, verify-don't-build.

Milestone end goal: close #245, #18, #11b (done), #113 (landed `aa5f80f6`), #44, #45, #133.
