control-chief-of-staff: exit 0; ℹ tests 10 ℹ pass 10 ℹ fail 0 
control-assistant: exit 0; ℹ tests 7 ℹ pass 7 ℹ fail 0 
control-role: exit 0; ℹ tests 13 ℹ pass 13 ℹ fail 0 
control-business: exit 0; ℹ tests 15 ℹ pass 15 ℹ fail 0 
control-tools: exit 0; ℹ tests 13 ℹ pass 13 ℹ fail 0 
control-bundle: exit 0; ℹ tests 9 ℹ pass 9 ℹ fail 0 
control-launcher: exit 0; ℹ tests 17 ℹ pass 17 ℹ fail 0 
control-reads: exit 0; ℹ tests 10 ℹ pass 10 ℹ fail 0 
m1a-chief-drops-launch: exit 1; ℹ tests 10 ℹ pass 3 ℹ fail 7 
  failed: ✖ a business grant of a gated action through limits does not widen the role
  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 and message.send; every other action is gated
  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
m1b-chief-drops-launch: exit 1; ℹ tests 13 ℹ pass 3 ℹ fail 10 
  failed: ✖ a coder gets no launch, no resolve_decision, and no task tools without a tracker
  failed: ✖ a coder with a tracker gets its own task tools and no task_reassign
  failed: ✖ an action outside the instance's authority has no tool
  failed: ✖ failing tests:
  failed: ✖ launch only when the business's launch block names the instance as launcher
  failed: ✖ list_requirements reads the requirement ids, for a task.create holder with a tracker
  failed: ✖ list_tasks takes the broker's filters and pages; get_task takes a task_ref
  failed: ✖ the assistant gets send_message and the reads, no launch
  failed: ✖ the chief of staff gets launch and send_message, and no task verbs
  failed: ✖ the PM gets its task verbs and the reads, and no launch
  failed: ✖ the review loop: push_working and request_review for the coder, fetch_review and review_verdict for the reviewer, none for the PM
m1c-chief-drops-launch: exit 1; ℹ tests 9 ℹ pass 0 ℹ fail 9 
  failed: ✖ a bundle is written once: an existing file refuses
  failed: ✖ a chief-of-staff bundle lists launch among the bus tools and the manifest's typed tools
  failed: ✖ a claude-code bundle adds the wrapped gate hook and the MCP config
  failed: ✖ a path with a single quote can't go into the hook command
  failed: ✖ a pi bundle: prompt, policy, tools and manifest, 0600 in a 0700 directory
  failed: ✖ failing tests:
  failed: ✖ sessionModel: agent vars win, then the system's execution settings
  failed: ✖ the prompt explains the review loop to a role with push_working, and reviews to one with fetch_review
  failed: ✖ the prompt names the project clones in the workspace, and none when there are none
  failed: ✖ the prompt's built-in tools line is the harness's own names, as the manifest lists them
m1d-chief-drops-launch: exit 1; ℹ tests 17 ℹ pass 1 ℹ fail 14 
  failed: ✖ a Claude Code launch with no session credential refuses before it starts
  failed: ✖ a host that died hard leaves its sessions to the next host, which finds one already exited (23) and ends their runs so the role can be launched again
  failed: ✖ a host that died hard leaves its sessions to the next host, which kills them and ends their runs so the role can be launched again
  failed: ✖ a launch client that never closes its side doesn't hold the host's close
  failed: ✖ a malformed sessions.json refuses the host start with exit 3 and stays as it was
  failed: ✖ a missing or failing bwrap refuses sandbox-unavailable before anything starts; there is no unconfined fallback
  failed: ✖ an over-long launch request is refused at once, not at the 10 s idle timeout
  failed: ✖ a pi launch needs no session credential: pi logs in through its own ENV_ALLOW variables
  failed: ✖ a project clone that can't be made refuses checkout-failed, from --chief and from a session, with no run and no clone left
  failed: ✖ a real Claude Code coder's shell can't read a stand-in secret or anything else its sandbox doesn't hold
  failed: ✖ a runner killed from the host ends its launch as killed, not failed
  failed: ✖ a runner that ignores SIGTERM is killed when the host closes
  failed: ✖ a runner that stops at once ends its launch with the runner's reason
  failed: ✖ bus start --pm: the launcher instance (the chief of staff) runs under its own PID namespace, registered, with a manifest
  failed: ✖ each launch makes sure the workspace has a clone of the project: cloned, fast-forwarded, or fetched and logged
  failed: ✖ failing tests:
  failed: ✖ the chief of staff launches a coder through its launch tool; the coder answers; refusals name their code
m1e-chief-drops-launch: exit 1; ℹ tests 10 ℹ pass 9 ℹ fail 1 
  failed: ✖ business: names, vars on the allowlist, authority, credential metadata only
  failed: ✖ failing tests:
m1f-chief-drops-launch: exit 1; ℹ tests 15 ℹ pass 6 ℹ fail 9 
  failed: ✖ a role without Vikunja takes no tracker block
  failed: ✖ failing tests:
  failed: ✖ launch
  failed: ✖ loadBusiness: file checks
  failed: ✖ loading writes nothing
  failed: ✖ names that are Object.prototype properties don't count as declared
  failed: ✖ the fixture business validates and comes back frozen
  failed: ✖ the shipped example refuses as written and validates once filled in
  failed: ✖ two instances may share a definition
  failed: ✖ Vikunja bots
m2a-pm-regains-launch: exit 1; ℹ tests 10 ℹ pass 8 ℹ fail 2 
  failed: ✖ a launch block whose by is the pm instance is refused
  failed: ✖ failing tests:
  failed: ✖ the pm does not hold role.launch
m2b-pm-regains-launch: exit 1; ℹ tests 13 ℹ pass 12 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ shipped authority follows the note's table
m2c-pm-regains-launch: exit 0; ℹ tests 13 ℹ pass 13 ℹ fail 0 
m2d-pm-regains-launch: exit 0; ℹ tests 9 ℹ pass 9 ℹ fail 0 
m2e-pm-regains-launch: exit 0; ℹ tests 10 ℹ pass 10 ℹ fail 0 
m3-assistant-launch: exit 1; ℹ tests 7 ℹ pass 4 ℹ fail 3 
  failed: ✖ a launch block whose by is the assistant is refused
  failed: ✖ failing tests:
  failed: ✖ the assistant's authority is message.send within role and nothing else
  failed: ✖ the shipped file is exactly the approved list
m4-assistant-write: exit 1; ℹ tests 7 ℹ pass 6 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ the shipped file is exactly the approved list
m5-assistant-crossrole: exit 1; ℹ tests 7 ℹ pass 5 ℹ fail 2 
  failed: ✖ failing tests:
  failed: ✖ the assistant's authority is message.send within role and nothing else
  failed: ✖ the shipped file is exactly the approved list
m6-assistant-credential: exit 1; ℹ tests 7 ℹ pass 1 ℹ fail 6 
  failed: ✖ a business grant through limits does not widen the role
  failed: ✖ a launch block whose by is the assistant is refused
  failed: ✖ failing tests:
  failed: ✖ the assistant's authority is message.send within role and nothing else
  failed: ✖ the instance takes no credential references and no tracker
  failed: ✖ the role file loads and resolves through loadBusiness
  failed: ✖ the shipped file is exactly the approved list
m7-chief-write: exit 1; ℹ tests 10 ℹ pass 8 ℹ fail 2 
  failed: ✖ failing tests:
  failed: ✖ the resolved record matches the approved list, so a widened file fails
  failed: ✖ the shipped file is exactly the approved list
m8-chief-credential: 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 and message.send; 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
m9a-validator-accepts-any-launcher: exit 1; ℹ tests 10 ℹ pass 9 ℹ fail 1 
  failed: ✖ a launch block whose by is the pm instance is refused
  failed: ✖ failing tests:
m9b-validator-accepts-any-launcher: exit 1; ℹ tests 7 ℹ pass 6 ℹ fail 1 
  failed: ✖ a launch block whose by is the assistant is refused
  failed: ✖ failing tests:
m9c-validator-accepts-any-launcher: exit 1; ℹ tests 15 ℹ pass 14 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ launch
m10-pm-contract-launches: exit 1; ℹ tests 10 ℹ pass 9 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ the contract names no duty to talk to the human and the pm contract no launch
m11-chief-contract-talks: exit 1; ℹ tests 10 ℹ pass 9 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ the contract names no duty to talk to the human and the pm contract no launch
m12-assistant-contract-directs: exit 1; ℹ tests 7 ℹ pass 6 ℹ fail 1 
  failed: ✖ failing tests:
  failed: ✖ the contract passes work to the chief of staff and directs no one
m13a-assistant-contract-missing: exit 1; ℹ tests 13 ℹ pass 12 ℹ fail 1 
  failed: ✖ every role file in roles/ loads through the validator, and a v2 contract exists
  failed: ✖ failing tests:
m13b-assistant-contract-missing: exit 1; ℹ tests 7 ℹ pass 1 ℹ fail 6 
  failed: ✖ a business grant through limits does not widen the role
  failed: ✖ a launch block whose by is the assistant is refused
  failed: ✖ failing tests:
  failed: ✖ the assistant's authority is message.send within role and nothing else
  failed: ✖ the instance takes no credential references and no tracker
  failed: ✖ the role file loads and resolves through loadBusiness
  failed: ✖ the shipped file is exactly the approved list
done
