Skip to content

fix(kanban): home guard honours caller session's profile as assignee; --operator override (t_7a8ec7c9) - #1074

Merged
Kyzcreig merged 1 commit into
mainfrom
daedalus/t_7a8ec7c9-home-guard-assignee
Sep 25, 2026
Merged

Kyzcreig merged 1 commit into
mainfrom
daedalus/t_7a8ec7c9-home-guard-assignee

Conversation

@Kyzcreig

@Kyzcreig Kyzcreig commented Sep 25, 2026 •

Copy link
Copy Markdown
Collaborator

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:

  • session_owner_profile(sid): the profile whose state.db holds the caller session. The assignee check now uses the bound profile plus the session owners. It runs only on the mismatch path, read-only and fail-open.
  • --operator "<who: why>" on the guarded CLI verbs, for operator profiles (default/apollo, aegis). It records an operator_override event and posts no comment. A non-operator caller or a reason without who: why is refused.
  • The CLI refusal message names --operator.

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.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

…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.
@Kyzcreig

Copy link
Copy Markdown
Collaborator Author

🤖 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

@Kyzcreig
Kyzcreig added this pull request to the merge queue Sep 25, 2026
@Kyzcreig

Copy link
Copy Markdown
Collaborator Author

🤖 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

@Kyzcreig

Copy link
Copy Markdown
Collaborator Author

🤖 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

@Kyzcreig

Copy link
Copy Markdown
Collaborator Author

🤖 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)

Merged via the queue into main with commit ec53e4f Sep 25, 2026
58 checks passed
@Kyzcreig
Kyzcreig deleted the daedalus/t_7a8ec7c9-home-guard-assignee branch September 25, 2026 19:31
@Kyzcreig Kyzcreig added the fleetreview:post-merge Ask FleetReview to review this MERGED pull (merge commit vs first parent) label Sep 25, 2026
@ang-prism

ang-prism Bot commented Sep 25, 2026

Copy link
Copy Markdown

FleetReview

Post-merge review (fleetreview:post-merge override): this reviewed the merge commit against its first parent — the bytes that already shipped. It is not a pre-merge gate pass.

Reviewed with 2 of 3 model families — openai unavailable.

Findings

  • P1 hermes_cli/kanban_db.py:5226 — Spoofable profile identity
  • P1 hermes_cli/kanban_db.py:5505 — --operator gate trusts the profile env, which the PR itself says is spoofable via a root-home repoint

_FleetReview provenance · _

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fleetreview:post-merge Ask FleetReview to review this MERGED pull (merge commit vs first parent)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant