INSTANCE-AXES grill — Round 1

Retrieved from doyle session 0fe9417f, messages at 04:15Z, 05:17Z and 05:19Z on 2026-09-25. Your answers save in this browser as you type. "Copy answers" puts them on the clipboard as Markdown to paste back.

What you've settled so far

Code facts from the lookup (05:19Z)

Round 1 questions

Q1Which state does a wake land in, by cause?

You said attaching alone never makes an instance active, but waking from suspended does. That conflicts when the wake is caused by an attach. Each cause needs its own landing state:

Recommended: (a) dormant — attach is a controlled-axis event, and the first user input then makes it active. (b) active — the user asked for it. (e) dormant — device contact is not agent activity; the device's own user-msg, if one follows, makes it active.

Q2Which inbound traffic counts as "a message" that steals active?

Recommended: only msg and user-msg sent by another endpoint steal active. System frames, owned-shell traffic, psyche and self-sends never do — otherwise a pacer nudge or an update notice would move active onto a seat nobody is using.

Q3What does "agent idle" read for auto-suspend?

Recommended: the activity sentinel (busy|idle, adapter-reported) — the same axis W10 made the only input to the delivery window. One activity signal, used in two places.

Q4Boot rule wording

You said it comes up active only if a trigger fires "shortly after bringup", or it has no siblings and its previous state was active.

Recommended: (a) No window. Come up dormant; any trigger at any later time makes it active. (b) "No active sibling", so the id is never left with no active instance just because a dormant one exists.

Q5What does a dormant instance get refused, and how?

Recommended: covers only peer msg to endpoints other than its own active sibling. Own shells, psyche and spt-core API calls untouched. Refusal is loud and names the way out: SEND_REFUSED_DORMANT: <id@node> is dormant; message your active sibling <id@node2>, or send --handoff through it. A dormant instance can still take active through its own user input.

Q6Handoff edge cases

Recommended: (a) Yes, only active. (b) Yes. (c) Refuse, sender stays active, so active never lands on a seat that can't take it. (d) Yes, a normal body; the swap is a flag on the send, not a separate verb.

Q7Is controlled replicated? — DROPPED

Already answered by the code: Instance.controlled exists and replicates (registry.rs:215). No answer needed.

Q8Auto-suspend configuration

Recommended: yes to all four. Keep the chain, keep disable default, migrate old values to dormant-enable (closest to today's behaviour).

Q9How are the requests cut in the new milestone?

B depends on A, and #345's active-preference rung only means anything once A exists.

Recommended: three requests, build order A → #345 → B, B allowed to slip without blocking the release. Milestone name: INSTANCE-AXES.

+Anything else