fix(kanban): home guard honours caller session's profile as assignee; --operator override (t_7a8ec7c9) - #1074
Conversation
…nee; add --operator override (t_7a8ec7c9)
The assignee exemption compared only the profile env. An operator script that
repoints the home at the root board (to reach ~/.hermes/kanban.db) resolves
as "default" from inside another profile's session, so the assignee clause
never matched (aegis session 20260924_045144 -> actor_profile=default).
- session_owner_profile(): profile whose state.db holds the caller session;
the guard's assignee check uses {bound profile} U {session owners}.
Mismatch path only, read-only, fail-open.
- --operator "<who: why>" on every guarded CLI verb, for operator profiles
(default/apollo, aegis): records an operator_override event, posts no
comment (pages nothing). Non-operator or malformed reason is refused.
- CLI refusal message names the --operator override.
Verified: tests/hermes_cli/test_kanban_home_session.py 7 new tests RED on
fork/main (7 failed), GREEN with the fix (81 passed);
test_kanban_worker_fanout_guard.py 13 passed.
|
🤖 merged-by: aegis · lane: breakglass · gate: BYPASS: FleetReview PAUSED since 2026-09-22; Ace 09-24 12:42 standing bypass; Argus skipped by Ace order · why: t_7a8ec7c9: home-session guard admits the assignee + operator profiles (default/apollo/aegis) applying a relayed human decision, audited; Aegis-verified RED 7 fail on base -> GREEN 81/81 |
|
🤖 merged-by: apollo · lane: kanban-t_7a8ec7c9 · gate: BYPASS: FR PAUSED by Ace ruling 2026-09-22 (state/fleetreview-pause-20260922.md); Apollo-reviewed lands via bypass · why: Apollo review PASS: home-session guard treats the caller session's own profile as its identity (assignee can act on its card) + --operator '<who: why>' override on guarded verbs for operator profiles; CI 40 green |
|
🤖 merged-by: apollo · lane: boil-ocean · gate: BYPASS: FR PAUSED by Ace ruling 2026-09-22 (state/fleetreview-pause-20260922.md); Apollo-reviewed lands via bypass · why: home guard honours caller session profile as assignee + relayed human decisions (t_7a8ec7c9); CI 40 green, clean |
|
🤖 merged-by: apollo · lane: discord · gate: BYPASS: FR paused by Ace 2026-09-22; Argus off card review (Ace 09-24 13:08); gate = CI green + Apollo read · why: kanban home-session guard: actor identity = bound profile + owner profile of each caller session (not the CLI env), so an assignee acts on its own card; --operator for relayed human decisions; OPERATOR_PROFILES default/apollo/aegis; CI green (t_7a8ec7c9) |
FleetReviewPost-merge review ( Reviewed with 2 of 3 model families — openai unavailable. Findings
_FleetReview provenance · _ |
Card t_7a8ec7c9.
Root cause (measured): events written by aegis session 20260924_045144_37e0e2 carry actor_profile=default. Aegis's act scripts export the home dir as ~/.hermes to reach the root board, so the profile env resolves to 'default' and the assignee clause never matches. Separately, t_3510860e had been reassigned to daedalus at 04:10, before the 04:3x complete, so that specific refusal was correct under the current assignee rule.
Changes:
Tests: 7 new tests in tests/hermes_cli/test_kanban_home_session.py. On fork/main: 7 failed. With the fix: 81 passed. test_kanban_worker_fanout_guard.py: 13 passed.
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.