teknium1
304cf75bbd
fix(review): a second tenant's host gateway never attaches, refuses, or reports as ours ( #121352 )
...
The PR filtered a foreign tenant root only in hermes_cli.gateway.host_multiplexer_serving; the
seam `gateway run` actually goes through had no cross-tenant path, so tenant B's gateway still
never started: host_attach.decide() answered ATTACH (exit 0, nothing running) on tenant A's
record "serving default", and run._claim_host_gateway_role lost the per-OS-user host lock to A
and refused 75 forever (a race B can never win).
* gateway/host_attach.py: one predicate, launched_by_other_tenant(owner_home, our_home), used by
decide() (foreign owner -> START), by the lock-loss branch of _claim_host_gateway_role (start
beside it, WARNING), by host_multiplexer_serving (replaces its inline copy) and by
host_topology._from_host_record (doctor / cron status / dashboard ladder no longer report a
foreign tenant's process as this tenant's host gateway).
* gateway/host_topology.py + gateway/status.py: HostGatewayTopology carries the launch home, and
multiplexer_liveness_for_profile reads the multiplexer's gateway_state.json from THAT home, so a
named-hosted multiplexer no longer projects a stale standalone record from the default root.
* hermes_cli/gateway_multiplex_mode.py: recorded_standalone_warning_lines gates on gateway_state
+ live PID only; a paused/wedged-heartbeat live gateway still warns.
* docs: `hermes -p X gateway restart` on a parked profile with no live gateway behaves as start.
Tests: one regression per finding (decide()+lock loss; topology home+tenant filter), both red on
the PR head. tests/gateway/test_host_gateway_lock_refusal.py publishes its record from the
process home instead of an arbitrary tmp dir (the home was never consulted before; assertions
unchanged). test_gateway_multiplex_mode case 3 flips to "stale heartbeat + live PID still warns".
2026-09-28 13:30:57 -07:00
..
2026-09-28 10:21:41 -07:00
2026-09-28 12:36:05 -05:00
2026-09-28 12:43:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 13:30:57 -07:00
2026-09-24 14:47:06 -04:00
2026-09-28 06:42:00 -07:00
2026-09-24 06:03:29 -04:00
2026-09-25 17:57:38 -05:00
2026-09-27 03:37:09 -07:00
2026-09-27 02:55:39 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 03:37:09 -07:00
2026-09-24 18:06:48 +05:30
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-25 21:27:06 +05:30
2026-09-27 18:37:01 +05:30
2026-09-28 10:21:41 -07:00
2026-09-26 21:38:28 +05:30
2026-09-28 10:21:41 -07:00
2026-09-25 14:22:12 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-25 12:07:32 -05:00
2026-09-28 10:21:41 -07:00
2026-09-27 18:19:17 +05:30
2026-09-28 12:43:03 -07:00
2026-09-24 22:32:57 +05:30
2026-09-25 13:49:31 -05:00
2026-09-28 12:33:01 -07:00
2026-09-28 10:21:41 -07:00
2026-09-27 00:56:11 +05:30
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-26 22:19:53 -05:00
2026-09-24 13:13:35 -04:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-26 17:15:30 -05:00
2026-09-24 13:10:14 -04:00
2026-09-24 00:17:13 -07:00
2026-09-28 03:34:07 -07:00
2026-09-25 21:27:06 +05:30
2026-09-28 10:21:41 -07:00
2026-09-28 12:33:01 -07:00
2026-09-28 02:00:41 -07:00
2026-09-28 12:33:01 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 04:04:23 -07:00
2026-09-28 02:00:41 -07:00
2026-09-28 13:30:57 -07:00
2026-09-27 02:33:57 +05:30
2026-09-28 10:21:41 -07:00
2026-09-28 04:44:29 -07:00
2026-09-26 21:43:07 -05:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 06:42:00 -07:00
2026-09-27 22:04:26 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 13:30:57 -07:00
2026-09-28 12:23:25 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-27 01:04:39 +05:30
2026-09-28 04:04:23 -07:00
2026-09-28 13:30:57 -07:00
2026-09-28 13:30:57 -07:00
2026-09-27 02:57:28 -07:00
2026-09-28 13:30:57 -07:00
2026-09-28 10:21:41 -07:00
2026-09-27 15:27:43 -05:00
2026-09-28 10:21:41 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 10:56:47 -05:00
2026-09-28 10:21:41 -07:00
2026-09-28 03:37:09 -07:00
2026-09-27 18:29:18 +05:30
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-27 18:29:18 +05:30
2026-09-28 03:37:09 -07:00
2026-09-28 03:37:09 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 12:24:52 -05:00
2026-09-28 19:02:20 +05:30
2026-09-25 14:22:12 -04:00
2026-09-25 14:22:12 -04:00
2026-09-28 04:44:29 -07:00
2026-09-25 16:28:14 -05:00
2026-09-27 11:44:31 -07:00
2026-09-28 06:42:00 -07:00
2026-09-28 12:53:29 -05:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-26 17:04:25 -05:00
2026-09-24 11:50:30 -04:00
2026-09-24 14:08:21 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 05:37:55 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-27 18:31:33 -05:00
2026-09-28 10:21:41 -07:00
2026-09-29 01:54:35 +05:30
2026-09-24 09:40:41 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-27 17:06:55 -07:00
2026-09-28 10:21:41 -07:00
2026-09-24 02:03:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-24 05:10:12 -04:00
2026-09-25 14:22:12 -04:00
2026-09-24 14:08:21 -04:00
2026-09-24 11:50:29 -04:00
2026-09-27 06:26:52 -05:00
2026-09-24 11:50:29 -04:00
2026-09-28 12:43:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-24 11:50:29 -04:00
2026-09-25 21:19:04 +05:30
2026-09-27 01:42:52 +05:30
2026-09-28 10:21:41 -07:00
2026-09-28 04:04:23 -07:00
2026-09-28 10:21:41 -07:00
2026-09-25 14:22:12 -04:00
2026-09-27 01:42:52 +05:30
2026-09-25 14:22:12 -04:00
2026-09-28 10:21:41 -07:00
2026-09-24 16:17:16 -04:00
2026-09-27 06:26:52 -05:00
2026-09-27 21:29:39 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 04:04:23 -07:00
2026-09-28 10:21:41 -07:00
2026-09-25 14:25:16 -05:00
2026-09-28 04:59:38 -07:00
2026-09-28 12:43:03 -07:00
2026-09-27 03:41:42 -07:00
2026-09-27 00:56:11 +05:30
2026-09-28 10:21:41 -07:00
2026-09-28 04:44:29 -07:00
2026-09-28 03:34:07 -07:00
2026-09-28 10:21:41 -07:00
2026-09-24 11:50:30 -04:00
2026-09-24 12:30:00 -04:00
2026-09-26 20:40:40 -05:00
2026-09-25 10:46:54 -05:00
2026-09-28 15:54:01 +05:30
2026-09-26 21:12:19 -04:00
2026-09-27 20:49:04 +05:30
2026-09-24 18:08:24 +05:30
2026-09-27 20:49:04 +05:30
2026-09-28 08:33:43 +00:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:33:01 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-25 20:00:57 -05:00
2026-09-28 10:21:41 -07:00
2026-09-28 06:42:00 -07:00
2026-09-27 01:36:34 +05:30
2026-09-27 02:54:03 -07:00
2026-09-24 14:23:48 -04:00
2026-09-25 14:22:12 -04:00
2026-09-28 10:21:41 -07:00
2026-09-27 07:43:23 -05:00
2026-09-28 12:33:01 -07:00
2026-09-28 19:02:20 +05:30
2026-09-24 11:12:27 -04:00
2026-09-28 10:21:41 -07:00
2026-09-26 17:09:16 -05:00
2026-09-27 23:53:40 -07:00
2026-09-24 16:17:16 -04:00
2026-09-28 10:21:41 -07:00
2026-09-26 21:00:12 -04:00
2026-09-27 14:09:15 -05:00
2026-09-28 03:08:56 -07:00
2026-09-28 04:44:29 -07:00
2026-09-26 20:07:47 +05:30
2026-09-25 14:22:12 -04:00
2026-09-28 04:44:29 -07:00
2026-09-28 03:08:56 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 05:33:25 -07:00
2026-09-28 04:44:29 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-24 14:08:22 -04:00
2026-09-27 02:57:28 -07:00
2026-09-28 04:44:29 -07:00
2026-09-28 10:21:41 -07:00
2026-09-25 14:22:12 -04:00
2026-09-28 05:33:25 -07:00
2026-09-28 12:43:03 -07:00
2026-09-27 14:09:15 -05:00
2026-09-27 03:38:52 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 16:23:22 +05:30
2026-09-28 12:43:03 -07:00
2026-09-28 12:33:01 -07:00
2026-09-28 05:37:55 -07:00
2026-09-28 12:18:58 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:18:58 -07:00
2026-09-28 12:18:58 -07:00
2026-09-25 12:09:37 -05:00
2026-09-28 12:43:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 16:23:22 +05:30
2026-09-24 15:38:22 +05:30