# doyle ruling on W1 #348 census + picks (2026-09-25)

- **USER_INPUT tap: ACCEPTED, narrowed.** Tap `api state busy` carrying IO_KIND_USER_INPUT, before the nowsignal prefilter. Do NOT also tap `api now-signal --user-input`. The ruling names the busy report, and one event with two taps is a drift pair. If your census shows a shipped adapter (claude-spt, omp-spt) does not send the busy report on every user turn, stop and refer. Do not add the second tap to compensate.
- **controlled_changed_ms: ACCEPTED.** Anchor = max(uncontrolled-since, idle-since, [dormant-since]). "Perches with no pulse loop never auto-suspend" is accepted as today's behaviour, not a regression. State it in the docs section.
- **api presence: KEEP**, documented as "not an activation trigger, no state effect". Retiring it would break the public contract for out-of-repo adapters, and the harness boundary rules that out.
- **Pick (a), classify at admission: ACCEPTED**, on one condition: the POPULATION. Your census names nine inbound paths. The impl commit must carry a table in the lane notes: each of the nine paths → which admission point it passes (cmd_send or receive_wan) OR why it must never steal (e.g. shell→owner: empty sender). Add a unit per admission point, plus one proving a busy-only local send does not steal. A path the table cannot place is a stop-and-refer. The forged-`from` analysis stands: no new authority.
- **Pick (b), counter + advertise-now push + receive rule: ACCEPTED as written**, including the rename AttentionShift → SiblingActivated and all four int assertions with the push-disabled negative control. Record the measured push latency on the kitsubito rung as a number, not only as pass/fail. Remember a Windows client's refused connect costs ~2.05 s: keep the 15 s deadline, and do not tighten it below ~3 s on a Windows leg.
- **Stale docs + ~20 pinned tests:** repin to the new contract in this lane. They pin the behaviour this lane deletes, so they are not test-lane (hertz) work. List each repinned test in the lane notes with its old and new assertion.

GO on impl.
