control-bus: exit 0; ℹ tests 13 ℹ pass 13 ℹ fail 0 
control-business: exit 0; ℹ tests 10 ℹ pass 10 ℹ fail 0 
m1-role-end-unchecked: exit 1; ℹ tests 13 ℹ pass 10 ℹ fail 3 
  failed: ✖ failing tests:
  failed: ✖ REQ-COS-1, REQ-ROLE-2: the chief of staff ends a run with a reason and no decision, and the reason is logged
  failed: ✖ REQ-COS-1: the chief of staff cannot end its own run or the assistant's through role.end
  failed: ✖ REQ-ROLE-2: a role without role.end still needs a resolved decision to revoke
m2-reason-and-decision-accepted: exit 1; ℹ tests 13 ℹ pass 12 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ REQ-ROLE-2: a reason is required, bounded, and never sent with a decision
m3-reason-unbounded: exit 1; ℹ tests 13 ℹ pass 12 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ REQ-ROLE-2: a reason is required, bounded, and never sent with a decision
m4-self-end-allowed: exit 1; ℹ tests 13 ℹ pass 12 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ REQ-COS-1: the chief of staff cannot end its own run or the assistant's through role.end
m5-assistant-end-allowed: exit 1; ℹ tests 13 ℹ pass 12 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ REQ-COS-1: the chief of staff cannot end its own run or the assistant's through role.end
m6-reason-not-stored: exit 1; ℹ tests 13 ℹ pass 9 ℹ fail 4 
  failed: ✖ failing tests:
  failed: ✖ REQ-COS-1, REQ-ROLE-2: the chief of staff ends a run with a reason and no decision, and the reason is logged
  failed: ✖ REQ-COS-1: the chief of staff cannot end its own run or the assistant's through role.end
  failed: ✖ REQ-ROLE-2: a reason is required, bounded, and never sent with a decision
  failed: ✖ REQ-ROLE-2, REQ-COS-1: the 3c→3d migration lets the chief of staff end a held role with a reason; neither is still refused
m7-reason-not-logged: exit 1; ℹ tests 13 ℹ pass 12 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ REQ-COS-1, REQ-ROLE-2: the chief of staff ends a run with a reason and no decision, and the reason is logged
m8-decision-path-wrong-action: exit 1; ℹ tests 13 ℹ pass 12 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ REQ-ROLE-2: a role without role.end still ends a run through a resolved decision, which is recorded and has no reason
m9-organization-set-unchecked: exit 1; ℹ tests 13 ℹ pass 11 ℹ fail 2 
  failed: ✖ failing tests:
  failed: ✖ REQ-LIMIT-1, REQ-COS-1: a refused organization.set logs action.refused and no action.allowed, like a refused limits.set
  failed: ✖ REQ-LIMIT-1: the chief of staff is logged as allowed, and organization.set takes only the human's keys
m10-key-list-widened: exit 1; ℹ tests 13 ℹ pass 12 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ REQ-LIMIT-1: the chief of staff is logged as allowed, and organization.set takes only the human's keys
m11-revision-optional: exit 1; ℹ tests 13 ℹ pass 12 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ REQ-LIMIT-1: the chief of staff is logged as allowed, and organization.set takes only the human's keys
m12-wrong-actor: exit 1; ℹ tests 13 ℹ pass 11 ℹ fail 2 
  failed: ✖ failing tests:
  failed: ✖ REQ-LIMIT-1, REQ-COS-1: organization.set from the chief of staff reaches the shared writer, named as the actor
  failed: ✖ REQ-ROLE-3, REQ-LIMIT-1: a chief-of-staff change is validated, written and logged like a human's; an invalid one is refused
m13-limits-open-to-agents: exit 1; ℹ tests 13 ℹ pass 12 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ REQ-LIMIT-1: organization.set is refused for every caller whose role file lacks organization.change
m14-invalid-change-not-refused: exit 1; ℹ tests 13 ℹ pass 11 ℹ fail 2 
  failed: ✖ failing tests:
  failed: ✖ REQ-LIMIT-1, REQ-COS-1: a refused organization.set logs action.refused and no action.allowed, like a refused limits.set
  failed: ✖ REQ-ROLE-3, REQ-LIMIT-1: a chief-of-staff change is validated, written and logged like a human's; an invalid one is refused
m22-consume-before-writer: exit 1; ℹ tests 13 ℹ pass 12 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ REQ-LIMIT-1, REQ-COS-1: a refused organization.set logs action.refused and no action.allowed, like a refused limits.set
m15-vocabulary-drops-role-end: exit 1; ℹ tests 10 ℹ pass 2 ℹ fail 8 
  failed: ✖ a business grant of a gated action through limits does not widen the role
  failed: ✖ a launch block whose by is the pm instance is refused
  failed: ✖ a limit that drops role.launch leaves the chief of staff with no launch block
  failed: ✖ failing tests:
  failed: ✖ the chief of staff holds role.launch, message.send, role.end and organization.change; every other action is gated
  failed: ✖ the instance takes no credential references and no tracker
  failed: ✖ the pm does not hold role.launch
  failed: ✖ the resolved record matches the approved list, so a widened file fails
  failed: ✖ the role file loads and resolves through loadBusiness
m16-chief-file-drops-role-end: exit 1; ℹ tests 13 ℹ pass 9 ℹ fail 4 
  failed: ✖ failing tests:
  failed: ✖ REQ-COS-1, REQ-ROLE-2: the chief of staff ends a run with a reason and no decision, and the reason is logged
  failed: ✖ REQ-COS-1: the chief of staff cannot end its own run or the assistant's through role.end
  failed: ✖ REQ-ROLE-2: a reason is required, bounded, and never sent with a decision
  failed: ✖ REQ-ROLE-2, REQ-COS-1: the 3c→3d migration lets the chief of staff end a held role with a reason; neither is still refused
m17-chief-file-drops-organization-change: exit 1; ℹ tests 13 ℹ pass 9 ℹ fail 4 
  failed: ✖ failing tests:
  failed: ✖ REQ-LIMIT-1, REQ-COS-1: a refused organization.set logs action.refused and no action.allowed, like a refused limits.set
  failed: ✖ REQ-LIMIT-1, REQ-COS-1: organization.set from the chief of staff reaches the shared writer, named as the actor
  failed: ✖ REQ-LIMIT-1: the chief of staff is logged as allowed, and organization.set takes only the human's keys
  failed: ✖ REQ-ROLE-3, REQ-LIMIT-1: a chief-of-staff change is validated, written and logged like a human's; an invalid one is refused
m18-chief-file-grants-role-revoke: exit 1; ℹ tests 10 ℹ pass 1 ℹ fail 9 
  failed: ✖ a business grant of a gated action through limits does not widen the role
  failed: ✖ a launch block whose by is the pm instance is refused
  failed: ✖ a limit that drops role.launch leaves the chief of staff with no launch block
  failed: ✖ failing tests:
  failed: ✖ the chief of staff holds role.launch, message.send, role.end and organization.change; every other action is gated
  failed: ✖ the instance takes no credential references and no tracker
  failed: ✖ the pm does not hold role.launch
  failed: ✖ the resolved record matches the approved list, so a widened file fails
  failed: ✖ the role file loads and resolves through loadBusiness
  failed: ✖ the shipped file is exactly the approved list
m19-trigger-decision-only: exit 1; ℹ tests 13 ℹ pass 8 ℹ fail 5 
  failed: ✖ failing tests:
  failed: ✖ REQ-COS-1, REQ-ROLE-2: the chief of staff ends a run with a reason and no decision, and the reason is logged
  failed: ✖ REQ-COS-1: the chief of staff cannot end its own run or the assistant's through role.end
  failed: ✖ REQ-ROLE-2: a reason is required, bounded, and never sent with a decision
  failed: ✖ REQ-ROLE-2, REQ-COS-1: the 3c→3d migration lets the chief of staff end a held role with a reason; neither is still refused
  failed: ✖ REQ-ROLE-2: storage accepts a revoke with a reason or a decision and aborts one with neither
m20-trigger-never-fires: exit 1; ℹ tests 13 ℹ pass 11 ℹ fail 2 
  failed: ✖ failing tests:
  failed: ✖ REQ-ROLE-2, REQ-COS-1: the 3c→3d migration lets the chief of staff end a held role with a reason; neither is still refused
  failed: ✖ REQ-ROLE-2: storage accepts a revoke with a reason or a decision and aborts one with neither
m21-step-empty: exit 1; ℹ tests 1 ℹ pass 0 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ packages/bus/tests/chief-of-staff.test.mjs
