Claude
4f0cf12713
feat(cluster): signed command channel to nodes (Phase 4, COMMANDS flow)
...
CommandBus queues typed, panel-signed (`cmd`) commands per node in
cluster_commands: FIFO by seq, dedupe_key for desired state, expiry,
pruned by cron:cluster. New ops: `commands` (long-poll after the node's
high-water, held up to 20 s; frozen while quarantined) and `ack` (own
commands only; raises cluster_nodes.cmd_seq).
For nodes with the COMMANDS flow on (toggled on Cluster Nodes),
ClusterRoute sends NodeRpc::request() as a signed node.rpc and waits for
its ack, and NodeRpc::broadcast() / SignalDispatcher::kill() queue
commands; other nodes and every LB keep the legacy transport.
On the node, `console.php cluster:exec` checks a command again against
the panel key the agent pinned and runs node.rpc through the legacy /api
handlers (InternalApiController::runCommand, NodeRpc::ACTIONS only) or
conn.kill_worker. Root actions stay on the signals table for now.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DcNdxHieZuUh3EnMUKt7zf
2026-09-25 13:24:24 +00:00
..
2026-09-13 14:14:23 +03:00
2026-09-13 14:14:23 +03:00
2026-09-12 21:43:59 +00:00
2026-09-17 08:07:02 +00:00
2026-09-17 07:42:42 +00:00
2026-09-13 08:49:06 +00:00
2026-09-13 21:17:06 +03:00
2026-09-18 15:10:43 +03:00
2026-09-13 14:42:08 +03:00
2026-09-13 21:17:06 +03:00
2026-09-18 15:10:43 +03:00
2026-09-24 19:30:49 +03:00
2026-06-25 20:57:37 +03:00
2026-09-18 09:57:17 +00:00
2026-09-13 17:27:42 +03:00
2026-09-13 14:42:08 +03:00
2026-09-25 10:28:53 +00:00
2026-09-21 18:37:33 +03:00
2026-09-20 20:40:55 +03:00
2026-09-13 21:21:09 +03:00
2026-08-31 20:58:23 +03:00
2026-09-25 13:24:24 +00:00
2026-09-25 10:28:53 +00:00
2026-09-25 10:28:53 +00:00
2026-09-25 13:03:07 +00:00
2026-09-25 12:39:13 +00:00
2026-09-25 13:24:24 +00:00
2026-09-25 10:28:53 +00:00
2026-09-25 12:54:40 +00:00
2026-09-25 13:03:07 +00:00
2026-09-25 10:28:53 +00:00
2026-09-25 12:54:40 +00:00
2026-09-25 10:28:53 +00:00
2026-09-25 10:28:53 +00:00
2026-06-24 22:18:52 +03:00
2026-09-25 09:26:52 +00:00
2026-09-22 22:28:46 +03:00
2026-06-25 20:57:37 +03:00
2026-09-18 15:45:34 +03:00
2026-09-16 17:23:33 +03:00
2026-09-25 00:20:41 +00:00
2026-09-25 09:04:26 +00:00
2026-06-25 19:03:39 +03:00
2026-09-13 16:05:56 +03:00
2026-09-12 22:40:36 +00:00
2026-09-13 14:39:43 +03:00
2026-09-25 00:56:05 +00:00
2026-09-13 08:49:06 +00:00
2026-09-18 15:10:43 +03:00
2026-06-24 22:18:52 +03:00
2026-09-13 14:14:23 +03:00
2026-09-18 00:45:37 +00:00
2026-09-18 07:40:43 +00:00
2026-09-25 10:07:46 +00:00
2026-09-13 14:16:29 +03:00
2026-06-25 18:55:35 +03:00
2026-09-13 14:45:12 +03:00
2026-09-21 19:03:39 +03:00
2026-09-13 14:16:29 +03:00
2026-09-10 16:11:29 +03:00
2026-09-25 10:07:47 +00:00
2026-09-11 16:19:22 +01:00
2026-09-13 14:22:55 +03:00
2026-09-11 16:19:50 +01:00
2026-09-18 09:57:17 +00:00
2026-09-11 16:17:09 +01:00
2026-09-17 07:45:48 +00:00
2026-09-25 09:10:04 +00:00
2026-08-11 21:41:11 +03:00
2026-09-25 10:07:46 +00:00
2026-09-25 01:14:19 +00:00
2026-09-25 00:56:05 +00:00
2026-09-25 12:18:06 +00:00
2026-09-18 15:32:50 +03:00
2026-06-24 22:18:52 +03:00
2026-09-24 23:46:54 +00:00
2026-09-25 10:07:47 +00:00
2026-09-13 08:34:00 +00:00
2026-09-13 21:17:06 +03:00
2026-09-25 10:07:47 +00:00
2026-09-24 22:12:44 +03:00
2026-09-24 18:04:45 +03:00
2026-06-30 22:41:46 +03:00
2026-06-24 22:18:52 +03:00
2026-07-03 20:12:01 +03:00
2026-09-22 20:56:43 +03:00
2026-09-13 14:51:45 +03:00
2026-09-13 14:26:46 +03:00
2026-06-24 22:23:42 +03:00
2026-07-03 20:10:41 +03:00
2026-09-13 17:27:42 +03:00
2026-07-29 19:37:43 +03:00
2026-09-09 22:32:37 +03:00
2026-09-25 09:04:26 +00:00
2026-09-25 10:07:47 +00:00
2026-09-12 21:59:27 +00:00
2026-09-25 00:56:05 +00:00
2026-09-17 07:48:24 +00:00
2026-09-25 00:04:16 +00:00
2026-09-21 19:11:10 +03:00
2026-09-12 21:27:38 +00:00
2026-09-25 09:05:42 +00:00
2026-06-24 21:15:06 +03:00
2026-09-13 18:57:54 +03:00
2026-09-13 18:33:02 +03:00
2026-09-13 18:57:54 +03:00
2026-08-31 20:58:23 +03:00
2026-09-24 22:12:44 +03:00
2026-09-13 14:39:43 +03:00
2026-09-13 14:29:54 +03:00
2026-08-31 20:58:23 +03:00
2026-09-17 07:45:14 +00:00
2026-09-22 22:29:06 +03:00
2026-09-24 18:04:45 +03:00
2026-09-12 22:42:10 +00:00
2026-09-25 10:07:47 +00:00
2026-09-25 00:56:05 +00:00
2026-09-25 12:54:40 +00:00
2026-09-13 16:10:40 +03:00
2026-09-25 00:56:05 +00:00
2026-06-24 22:13:35 +03:00
2026-09-18 11:32:15 +03:00
2026-09-13 09:02:40 +00:00
2026-09-13 14:39:43 +03:00
2026-09-13 14:51:45 +03:00
2026-09-25 09:13:51 +00:00
2026-08-09 13:01:57 +03:00
2026-09-25 09:28:03 +00:00
2026-09-25 10:28:53 +00:00
2026-09-22 18:19:45 +03:00
2026-08-31 20:58:23 +03:00
2026-09-21 19:44:23 +03:00
2026-09-25 10:07:47 +00:00
2026-06-25 18:39:28 +03:00
2026-06-24 21:32:10 +03:00
2026-09-11 16:19:02 +01:00
2026-08-07 19:31:18 +03:00
2026-08-07 21:01:59 +03:00
2026-09-17 08:41:26 +00:00
2026-09-17 07:51:18 +00:00
2026-09-11 16:19:02 +01:00
2026-09-11 11:03:06 +00:00
2026-09-25 00:10:15 +00:00
2026-09-25 10:07:47 +00:00
2026-09-22 18:19:45 +03:00
2026-06-25 18:39:28 +03:00
2026-09-18 09:57:17 +00:00
2026-09-25 10:07:46 +00:00
2026-09-13 21:17:06 +03:00
2026-09-09 22:32:37 +03:00
2026-09-25 00:10:15 +00:00
2026-09-25 00:20:41 +00:00
2026-09-25 00:20:41 +00:00
2026-08-31 20:58:23 +03:00
2026-09-22 16:32:39 +03:00
2026-06-24 22:35:33 +03:00
2026-09-21 21:32:19 +03:00
2026-09-13 14:45:12 +03:00
2026-09-13 14:26:46 +03:00
2026-09-21 18:55:17 +03:00
2026-09-25 00:04:16 +00:00
2026-09-25 10:28:53 +00:00
2026-09-13 14:39:43 +03:00