feat(orchestrator): S5.2 drain, suspend and resume chosen agents

The Day/Night menu lists every claimed agent with a checkbox and an All box; Drain, Suspend and Resume act on the ticked agents only, are disabled when none is ticked, and the agent popup carries the same three buttons for that one agent. Each action is passkey-signed with its agent list, night.py takes --target per session and keeps a per-agent part, and each chosen agent gets a call naming the action and its skill. The night skills say how to read a per-agent night.

🎯 Fix: 90 %
💥 Break: 5 %
💸 Cost: 106 %
⏱️ Time: 100 %
🛡️ Security: 100 %
🏆 Score: 81
🚦 Gate: ⚠️ cost 106 % > 100: operator approved the commit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kevin Veen-BirkenbachandClaude Opus 5.5 committed 2026-11-11 07:45:49 +00:00
1 parent 57ab29eb0d
commit 995c7cb214
21 files changed
+430 -65

No files matched your search

@@ -303,6 +303,15 @@ from three views down to any agent, branch or artefact.
time-agent-depth layout.
58. **Steady 3D camera**: the 3D view fits the graph once per build; state
refreshes keep the operator's camera.
59. **Day/Night per agent** (operator 2026-11-10, decisions 59 and 60): the
Day/Night menu lists "All" and one checkbox per claimed agent. All ticked
runs the global drain, suspend or resume as before; a subset runs it only
for the ticked sessions (`night.py --target`), the passkey signs the
board item with those sessions, and the radio call reaches only them.
Rejected: a second menu for single agents.
60. **Agent panel Day/Night**: every agent panel shows the agent's part and,
for a claimed agent, Drain, Suspend and Resume for that agent alone, by
day too. Rejected: single-agent parts only during a night.
## Approach
@@ -741,6 +750,20 @@ flowchart TD
- [x] Two state refreshes after a manual camera move leave the 3D camera
where the operator put it.
### Phase 6: Day/Night per agent (S5.2)
- [ ] `night.py drain|suspend|resume --target=<id>` sets and lifts one
session's part by day and during a mode, and `night.py status` prints
it as the `you:` line (`tests/test_night.py`).
- [ ] The Day/Night menu lists "All" and one checkbox per claimed agent; all
ticked sends the unchanged board item, a subset signs and runs only for
the ticked sessions, and none ticked disables the three buttons.
- [ ] A proof for one set of agents is refused for another set and for all,
and an unclaimed session is refused before anything runs
(`tests/test_hub_board.py`).
- [ ] Every agent panel shows the agent's part and Drain, Suspend and Resume
for that agent alone.
### Tests
- **Unit**
@@ -764,6 +787,9 @@ flowchart TD
business value signature (forged, replayed, altered), sort orders.
- [x] S5.1: regression and velocity trend with their forecast dates, point
tooltips, ETA in both modes, radio settings stored from the gear.
- [ ] S5.2: night.py targets by day and during a mode, the signed board
item with agents (forged set, unclaimed session), the parts in the
state.
- **Integration**
- [ ] Two scratch sessions exchange `post` and `call` through the real hook
entry points (JSON on stdin): the post appears only on the callee's
@@ -792,3 +818,6 @@ flowchart TD
- [x] S5.1: radio spot (send, gear, cancel mayday), Day/Night tooltips,
one-row Tasks toolbar, trend and point tooltips, ETA column, Tasks
3D and a steady 3D camera, each at 1920, 1366 and 390 px.
- [ ] S5.2: agent checkboxes in the Day/Night menu and the agent panel's
buttons, signed in Chromium and refused unsigned in Firefox, each at
1920, 1366 and 390 px.