PRD 1.6 REQ-ROLE-2 gains Mos's two sentences (sage-0545): the chief ends the assistant with no decision, and any revoke of it is a hard wait. Checked against broker.mjs; the code already does both. New candidate: patch a5f21ead, manifest a4c5657f. Both PRD-reading tests pass; repro OK. Co-Authored-By: Claude Opus 5.5 <[email protected]>
5.8 KiB
PRD version 1.6 text, row 139 (#1633), for Mos
Written by Dewey for Sage to send to Mos (sage-0528, sage-0539). It records Jason's ruling Q169.
The candidate (manifest a4c5657f…, base 5661bd233) carries this text in docs/prd/mosaic-stack.md.
Mos answered in sage-0545: readings 1 to 4 are accepted, and the text is approved with the two
REQ-ROLE-2 sentences Mos added (below). The version Mos checked was sha256 e5226044…, before that
addition.
Q169, verbatim: "The only agent that should be able to remove the assistant role is the chief of staff. The COS and the user should have the ability to (re)configure the assistant role and seat name. The user via WebUI or CLI, the COS via the proper tooling."
The changed text
Status line. "approved, version 1.5" becomes "approved, version 1.6". This sentence goes in after the Q167 sentence and before "It is never edited in place":
Version 1.6 records Jason's ruling Q169 of 2026-10-16, on who removes and who configures the assistant.
New source block, before the version 1.5 source:
- Version 1.6 source, Jason's ruling Q169 (DECISIONS, brain repo, 2026-10-16): "The only agent that should be able to remove the assistant role is the chief of staff. The COS and the user should have the ability to (re)configure the assistant role and seat name. The user via WebUI or CLI, the COS via the proper tooling."
REQ-ROLE-2. These sentences are added after "and the revoke cites it.":
The assistant is the exception here too (version 1.6, Q169): the chief of staff is the only agent that removes it. The chief of staff removes it by ending its runs, and that end needs no decision. A revoke of the assistant, the chief's included, is a hard wait under REQ-WAIT-1. Anyone else's revoke of the assistant must cite a decision the human resolved through the CLI. A decision an arbiter resolved doesn't count, and that revoke is refused.
The second and third sentences are Mos's addition (sage-0545), checked against broker.mjs: a chief's
role.revokewith a reason consumesrole.end(line 1171), which is routed, not a hard wait (lines 55, 62-63), and within-role for the chief, so it returns with no decision (line 659), and#protectedEndexempts the chief (line 502, called at 1173). A raise to revoke the assistant is classifiedgatedby#hardWait(lines 494, 508) whoever raises it,#hardWaitdoesn't read the raiser, and line 1232 keeps it from the arbiter, so it goes to the human (line 1233).
REQ-ROLE-4. These sentences are added after "Jason's may be named Mos.":
Since version 1.6 (Q169), the user and the chief of staff can configure the assistant's role entry and its seat name: the user through the WebUI or the CLI, the chief of staff through its broker tools, which log each change. No other role can, and a change can't remove the assistant's protection under REQ-ROLE-2.
REQ-WAIT-1. These sentences are added after "REQ-ROLE-2 still requires a resolved decision for a revoke.":
Since version 1.6 (Q169), a
role.revokeof the assistant is a hard wait: its raise goes to the human, cited or not, and no arbiter resolves it. Every other cited revoke routes by REQ-DEC-2.
Notes, a new "Version 1.6" item:
- Version 1.6:
- The 1.5 text of REQ-ROLE-2 ended at "and the revoke cites it." The 1.5 text of REQ-ROLE-4 ended at "Jason's may be named Mos." The 1.5 text of REQ-WAIT-1 ended at "REQ-ROLE-2 still requires a resolved decision for a revoke."
- Removing the assistant, in this version, means ending or revoking its runs. Deleting the instance from the organization file is not covered. The protected definitions are
END_PROTECTEDinpackages/bus/src/broker.mjs, which holdsassistant.- Configuring the assistant covers its organization entry's
varsandtracker, and itsdefinitionamong those the broker treats as the assistant.holderandcredentialsare not covered.- Where each part is built: the refusal and the hard wait are row 139 (#1633). Configuring the assistant and its seat name, and making the chief of staff's end or a human-approved revoke stop an assistant run, are row 155 (#1649), using row 141's (#1635) instance names. Until row 155 lands, the assistant's runs hold thread claims that the end and revoke paths don't read, so neither can stop one. The human stops one with
mosaic stop <run>.
Readings Mos should confirm
Q169 doesn't settle these points. The text above takes one reading of each.
- A human-approved revoke by another role. Q169 says the chief of staff is the only agent that removes the assistant. The text still lets another role revoke it when the revoke cites a decision the human resolved. That is sage-0528's item 1: the human decides, and the agent only carries the decision out. The stricter reading refuses every revoke of the assistant by a role other than the chief, approved or not.
- "Through the CLI". The broker records
via 'cli'for every human session's resolve (broker.mjs, decision.resolve). The WebUI has no resolve path in packages/webui/src today, so the CLI is the only way a human resolves now. If the WebUI gains one through the human session, it recordsclitoo. "Through the CLI" therefore means "by the human", not "not the WebUI". - Scope of "configure". The text covers vars, tracker, the definition among assistant definitions, and the seat name. It leaves out holder and credentials. Q169 says "(re)configure the assistant role and seat name" and doesn't list fields. Row 155 builds against this list.
- Scope of "remove". The text means ending or revoking the assistant's runs. It doesn't cover deleting the instance from the organization file. REQ-ROLE-3 already limits writes to that file to the user and the chief.