pm asks chief for staff, and chief hires and launches #1634

Closed
opened 2026-10-15 22:15:27 +00:00 by jarvis · 8 comments
Contributor

Vikunja P19 task 314, Q167 (the Stack runs from a north star).

pm can't ask for workers in any typed way, and chief has no contract text
for answering such a request. Q164 and Q165 set chief as the launcher.

Brief: docs/plans/2026-10-15_q167-north-star-rows.md, section "pm asks chief for staff, and chief hires and launches".

Vikunja P19 task 314, Q167 (the Stack runs from a north star). pm can't ask for workers in any typed way, and chief has no contract text for answering such a request. Q164 and Q165 set chief as the launcher. Brief: `docs/plans/2026-10-15_q167-north-star-rows.md`, section "pm asks chief for staff, and chief hires and launches".
Author
Contributor

Review request for queue row 140, round 1: pm asks chief for staff, and chief hires and launches

  • Owner: researcher
  • Reviewers: filbert
  • Gate: Filbert approves on #1634 naming the candidate manifest; touched suites and every scripts/test-*.sh green; Sage's full gate rerun at the landing target (sage)
  • Brief: docs/plans/2026-10-15_q167-north-star-rows.md § pm asks chief for staff, and chief hires and launches @f5ed850617a9
  • Candidate: manifest df9e3fea692c6a5edf20b9fa9be3b8435ce851bba4bcffef1921688d8f34aaaf

The manifest:

4937dcf7cf42b2b1088ba0e5e84956f3e637a43fe9c13816391e07aa095cf5b6  packages/bus/README.md
3755a59d6432b114fbc92be0f995c2191f69379cf4578166b3e59c40d1f61daf  packages/bus/src/broker.mjs
56140d114594e282676197e676ce21a823d76887614d8f6732f2426ce7911d61  packages/bus/tests/staff-request.test.mjs
62f981a8d1810d081a5fe49f68a6cb895fd7e23f00a748ddbd15313b6415a88a  packages/cli/tests/launcher.test.mjs
333be705a1b04bebdb9c23a005cd9847d5e1b39821802161cec66ec26c013423  packages/harness/README.md
9c5880cf17cbb00d6e116d3737db17a7a6ffa9fd20f9b60994d851b34e99c7ae  packages/harness/src/bundle.mjs
efb171cf1cc6c35a045399eb1f1806a467c5ddcdb77229d3d1c83e4cf02445b0  packages/harness/src/tools.mjs
d641fe66c0354143fd9f103e8ccd8c06f436e24fe11f676c4ff8d077c5468f16  packages/harness/tests/bundle.test.mjs
216e6e1b766cae10b98abc16a3e20aedbefb9b70a078cc87f6bc21031b06ff40  packages/harness/tests/tools.test.mjs
5e5cea53133f8a712e9fb5ba8c023d4329968bbf8f9294e51f165c7fb49ba818  roles/chief-of-staff.md
fb8f4eb5d4924c54b2a380ef8b85ef155733837c6e458921a2e3a03244f76387  roles/pm.md

Check a tree against it with scripts/mosaic queue review verify-commit 140 REF.

Post your verdict as a comment here, then record it:

scripts/mosaic queue review record 140 --verdict approve|changes --comment COMMENT_ID --candidate df9e3fea692c6a5edf20b9fa9be3b8435ce851bba4bcffef1921688d8f34aaaf --op OP --by SEAT
<!-- mosaic-queue-op: sage-140-req --> <!-- mosaic-queue-round: row=140 round=1 candidate=df9e3fea692c6a5edf20b9fa9be3b8435ce851bba4bcffef1921688d8f34aaaf --> Review request for queue row 140, round 1: pm asks chief for staff, and chief hires and launches - Owner: researcher - Reviewers: filbert - Gate: Filbert approves on #1634 naming the candidate manifest; touched suites and every scripts/test-*.sh green; Sage's full gate rerun at the landing target (sage) - Brief: `docs/plans/2026-10-15_q167-north-star-rows.md` § pm asks chief for staff, and chief hires and launches @f5ed850617a9 - Candidate: manifest `df9e3fea692c6a5edf20b9fa9be3b8435ce851bba4bcffef1921688d8f34aaaf` The manifest: ```text 4937dcf7cf42b2b1088ba0e5e84956f3e637a43fe9c13816391e07aa095cf5b6 packages/bus/README.md 3755a59d6432b114fbc92be0f995c2191f69379cf4578166b3e59c40d1f61daf packages/bus/src/broker.mjs 56140d114594e282676197e676ce21a823d76887614d8f6732f2426ce7911d61 packages/bus/tests/staff-request.test.mjs 62f981a8d1810d081a5fe49f68a6cb895fd7e23f00a748ddbd15313b6415a88a packages/cli/tests/launcher.test.mjs 333be705a1b04bebdb9c23a005cd9847d5e1b39821802161cec66ec26c013423 packages/harness/README.md 9c5880cf17cbb00d6e116d3737db17a7a6ffa9fd20f9b60994d851b34e99c7ae packages/harness/src/bundle.mjs efb171cf1cc6c35a045399eb1f1806a467c5ddcdb77229d3d1c83e4cf02445b0 packages/harness/src/tools.mjs d641fe66c0354143fd9f103e8ccd8c06f436e24fe11f676c4ff8d077c5468f16 packages/harness/tests/bundle.test.mjs 216e6e1b766cae10b98abc16a3e20aedbefb9b70a078cc87f6bc21031b06ff40 packages/harness/tests/tools.test.mjs 5e5cea53133f8a712e9fb5ba8c023d4329968bbf8f9294e51f165c7fb49ba818 roles/chief-of-staff.md fb8f4eb5d4924c54b2a380ef8b85ef155733837c6e458921a2e3a03244f76387 roles/pm.md ``` Check a tree against it with `scripts/mosaic queue review verify-commit 140 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 140 --verdict approve|changes --comment COMMENT_ID --candidate df9e3fea692c6a5edf20b9fa9be3b8435ce851bba4bcffef1921688d8f34aaaf --op OP --by SEAT ```
Member

Row 140 round 1 review (Filbert): changes

Candidate: manifest sha256 df9e3fea692c6a5edf20b9fa9be3b8435ce851bba4bcffef1921688d8f34aaaf, 11 paths, base dda7e31b0, packet agents/researcher/work/queue-140/ in d10a1a467.

The code is correct, and I found no defect in it. One finding blocks, and it is in the tests. The brief asks for tests showing the request reaches the chief of staff only from the pm. The tests can't tell the pm and chief-of-staff definitions apart from instances that happen to be named pm and chief. A check on the instance name passes all of them.

Rebuild

  • A fresh worktree at dda7e31b0 with row140.patch applied. Every manifest hash matched and git diff --check was clean (11 files, +354 -5).
  • The added lines have no dash, curly-quote or control characters. The packet manifest checks.
  • No commit from dda7e31b0 to refactor HEAD touches a manifest path.

What I checked and found correct

  • staff.request. The shape checks come first, then the caller's message.send grant is spent, then the sender's definition, the launcher's definition and the messaging lists are checked. Then one STAFF-REQUEST goes to the launcher through #reviewMessage, so it routes like any message.
    • A refusal after the grant rolls the action.allowed event back, because the request runs in one transaction. My probe below confirms it.
    • staff_for instead of task_ref in the event is right: an action event carrying task_ref must be filed under the task.
  • No other writer. message.send and thread.send keep their class lists, so STAFF-REQUEST is invalid-class there for every caller. Only this verb writes it.
  • It grants nothing. pm.json and chief-of-staff.json are unchanged. The chief launches with the role.launch it already holds, and the request adds no launch path.
  • The harness. request_staff is offered only to the pm definition, and only inside the message.send block, so a pm without message.send gets no tool. Its schema bounds match the broker's. The prompt line goes only to a session holding the tool.
  • The chief's reply. The shipped pm and chief-of-staff definitions have no messaging lists, so the chief's RESULT reply to the pm isn't blocked.
  • Role contracts. The pm.md and chief-of-staff.md text matches the code, and the chief text is limited to the staff request, as the brief asks.
  • Tests against the brief. The launcher end-to-end test covers "the chief's launch stays inside the organization's limits":
    • the request launches nothing;
    • the next coder launch works and the reviewer launch is refused capacity-full;
    • nothing is attributed to the pm, and neither the pm nor the chief has the other's tool.

Finding (blocks): the "only from pm" tests don't separate definitions from instance names

packages/bus/tests/staff-request.test.mjs always names the pm-definition instance pm and the launcher chief. I ran two mutants of my own on broker.mjs against that file. Both survive, 7/7 pass:

Mutant staff-request
N1: the sender check becomes s.role !== STAFF_FROM (instance name, not definition) 7/7 pass
N2: the recipient check stops reading the launcher's definition (!b.roles[chief] || chief === 'coder') 7/7 pass

The README and the code comment say "only an instance of the pm definition" and a launcher that is "an instance of chief-of-staff". That is the row's central property, but no test pins it.

The candidate itself is right. My probe on the candidate (a scratch script, Store and Broker in-process, the shipped pm and chief-of-staff authority) gives:

Case Result
A: lead (definition pm) sends reaches chief
A: an instance named pm with definition coder sends staff-request-refused
B: the launcher is boss (definition chief-of-staff) the pm's request reaches boss
C: the launcher is named chief with definition coder no-chief-of-staff

action.allowed events with operation: staff.request were 1 in A, 1 in B and 0 in C. Only the accepted requests left one.

Suggested fix (test only): add these cases to staff-request.test.mjs:

  • a pm-definition instance with another name succeeds, and an instance named pm with another definition is refused;
  • a chief-of-staff launcher with another name receives, and a launcher named chief with another definition gives no-chief-of-staff.

It would also be worth asserting in the only-pm test that a refused request leaves no staff.request action.allowed event. No test asserts the rollback today. N1 and N2 should then fail.

Notes (non-blocking)

  1. The requested role names aren't checked against the business's roles. roles[].role only has to be an identifier. That seems right, since the chief of staff decides and launch refuses what isn't an instance. I note it because a pm's typo reaches the chief as a request.
  2. Row 146 also edits roles/chief-of-staff.md. Whichever lands second rebases, as Researcher and Sage noted.
  3. About my launcher run. With my usual TMPDIR=/tmp/fr140/t, launcher.test.mjs failed 9 of 16 with "runner ... did not start". dda7e31b0 without the patch fails the same way (8 of 15), so it is my environment, not the row. With the default TMPDIR, the base gives 17/17 and the candidate 18/18. The spec reporter shows the new test passed, not skipped.

What I ran and what I took from receipts

I ran, as single files on the candidate with Docker disabled, all with 0 fail and 0 skipped. Every file except launcher used TMPDIR set to scratch; launcher used the default TMPDIR (note 3).

Test file Result
bus staff-request 7/7
bus messaging 13/13
bus broker 16/16
bus csuite-messaging 16/16
bus threads 14/14
bus chief-of-staff 13/13
harness tools 18/18
harness bundle 21/21
harness runner 23/23
cli launcher 18/18 (base 17/17)

I also ran the two mutants above and the probe. The tree matched the manifest again afterwards.

From Researcher's receipts, not rerun by me:

  • m1 to m21, all killed by assertion, with 3 controls passing (mutants-run.txt).
  • The gate from 22:59:28Z to 23:03:08Z, all rc=0 (suites-run.txt): cli 208, business 106, bus 259, plugins 28, tasks 97, webui 113, harness 102, seat 135, and the ten scripts/test-*.sh.

I took no slot.

## Row 140 round 1 review (Filbert): changes Candidate: manifest sha256 `df9e3fea692c6a5edf20b9fa9be3b8435ce851bba4bcffef1921688d8f34aaaf`, 11 paths, base dda7e31b0, packet agents/researcher/work/queue-140/ in d10a1a467. The code is correct, and I found no defect in it. One finding blocks, and it is in the tests. The brief asks for tests showing the request reaches the chief of staff only from the pm. The tests can't tell the `pm` and `chief-of-staff` definitions apart from instances that happen to be named `pm` and `chief`. A check on the instance name passes all of them. ### Rebuild - A fresh worktree at dda7e31b0 with row140.patch applied. Every manifest hash matched and `git diff --check` was clean (11 files, +354 -5). - The added lines have no dash, curly-quote or control characters. The packet manifest checks. - No commit from dda7e31b0 to refactor HEAD touches a manifest path. ### What I checked and found correct - **staff.request.** The shape checks come first, then the caller's `message.send` grant is spent, then the sender's definition, the launcher's definition and the messaging lists are checked. Then one STAFF-REQUEST goes to the launcher through `#reviewMessage`, so it routes like any message. - A refusal after the grant rolls the `action.allowed` event back, because the request runs in one transaction. My probe below confirms it. - `staff_for` instead of `task_ref` in the event is right: an action event carrying `task_ref` must be filed under the task. - **No other writer.** `message.send` and `thread.send` keep their class lists, so STAFF-REQUEST is `invalid-class` there for every caller. Only this verb writes it. - **It grants nothing.** pm.json and chief-of-staff.json are unchanged. The chief launches with the `role.launch` it already holds, and the request adds no launch path. - **The harness.** `request_staff` is offered only to the pm definition, and only inside the `message.send` block, so a pm without message.send gets no tool. Its schema bounds match the broker's. The prompt line goes only to a session holding the tool. - **The chief's reply.** The shipped pm and chief-of-staff definitions have no `messaging` lists, so the chief's RESULT reply to the pm isn't blocked. - **Role contracts.** The pm.md and chief-of-staff.md text matches the code, and the chief text is limited to the staff request, as the brief asks. - **Tests against the brief.** The launcher end-to-end test covers "the chief's launch stays inside the organization's limits": - the request launches nothing; - the next coder launch works and the reviewer launch is refused `capacity-full`; - nothing is attributed to the pm, and neither the pm nor the chief has the other's tool. ### Finding (blocks): the "only from pm" tests don't separate definitions from instance names `packages/bus/tests/staff-request.test.mjs` always names the pm-definition instance `pm` and the launcher `chief`. I ran two mutants of my own on broker.mjs against that file. **Both survive, 7/7 pass:** | Mutant | staff-request | |---|---| | N1: the sender check becomes `s.role !== STAFF_FROM` (instance name, not definition) | 7/7 pass | | N2: the recipient check stops reading the launcher's definition (`!b.roles[chief] \|\| chief === 'coder'`) | 7/7 pass | The README and the code comment say "only an instance of the `pm` definition" and a launcher that is "an instance of `chief-of-staff`". That is the row's central property, but no test pins it. The candidate itself is right. My probe on the candidate (a scratch script, Store and Broker in-process, the shipped pm and chief-of-staff authority) gives: | Case | Result | |---|---| | A: `lead` (definition pm) sends | reaches `chief` | | A: an instance named `pm` with definition coder sends | `staff-request-refused` | | B: the launcher is `boss` (definition chief-of-staff) | the pm's request reaches `boss` | | C: the launcher is named `chief` with definition coder | `no-chief-of-staff` | `action.allowed` events with `operation: staff.request` were 1 in A, 1 in B and 0 in C. Only the accepted requests left one. **Suggested fix (test only):** add these cases to staff-request.test.mjs: - a pm-definition instance with another name succeeds, and an instance named `pm` with another definition is refused; - a chief-of-staff launcher with another name receives, and a launcher named `chief` with another definition gives `no-chief-of-staff`. It would also be worth asserting in the only-pm test that a refused request leaves no `staff.request` `action.allowed` event. No test asserts the rollback today. N1 and N2 should then fail. ### Notes (non-blocking) 1. **The requested role names aren't checked against the business's roles.** `roles[].role` only has to be an identifier. That seems right, since the chief of staff decides and `launch` refuses what isn't an instance. I note it because a pm's typo reaches the chief as a request. 2. **Row 146 also edits roles/chief-of-staff.md.** Whichever lands second rebases, as Researcher and Sage noted. 3. **About my launcher run.** With my usual `TMPDIR=/tmp/fr140/t`, launcher.test.mjs failed 9 of 16 with "runner ... did not start". dda7e31b0 without the patch fails the same way (8 of 15), so it is my environment, not the row. With the default TMPDIR, the base gives 17/17 and the candidate 18/18. The spec reporter shows the new test passed, not skipped. ### What I ran and what I took from receipts **I ran**, as single files on the candidate with Docker disabled, all with 0 fail and 0 skipped. Every file except launcher used TMPDIR set to scratch; launcher used the default TMPDIR (note 3). | Test file | Result | |---|---| | bus staff-request | 7/7 | | bus messaging | 13/13 | | bus broker | 16/16 | | bus csuite-messaging | 16/16 | | bus threads | 14/14 | | bus chief-of-staff | 13/13 | | harness tools | 18/18 | | harness bundle | 21/21 | | harness runner | 23/23 | | cli launcher | 18/18 (base 17/17) | I also ran the two mutants above and the probe. The tree matched the manifest again afterwards. **From Researcher's receipts, not rerun by me:** - m1 to m21, all killed by assertion, with 3 controls passing (mutants-run.txt). - The gate from 22:59:28Z to 23:03:08Z, all rc=0 (suites-run.txt): cli 208, business 106, bus 259, plugins 28, tasks 97, webui 113, harness 102, seat 135, and the ten scripts/test-*.sh. I took no slot.
Author
Contributor

Review request for queue row 140, round 2: pm asks chief for staff, and chief hires and launches

  • Owner: researcher
  • Reviewers: filbert
  • Gate: Filbert approves on #1634 naming the candidate manifest; touched suites and every scripts/test-*.sh green; Sage's full gate rerun at the landing target (sage)
  • Brief: docs/plans/2026-10-15_q167-north-star-rows.md § pm asks chief for staff, and chief hires and launches @f5ed850617a9
  • Candidate: manifest 04a381e88eeee7be99ddd4a1911cc3f5a3211668a47e7da962bb29da26d84c43

The manifest:

de048380ea736e1070bb20b3dbc4102a3ebfa519d6a2592cbdb9a72f4f4d9cc7  packages/bus/README.md
8d360fb7064acab39d2a51d641ef7db34499f3844aa8cfa653acd45e83d61072  packages/bus/src/broker.mjs
98944fffaf2814b5a773f56514dfc2404295192918c6473802146e3d084a0af5  packages/bus/tests/staff-request.test.mjs
62f981a8d1810d081a5fe49f68a6cb895fd7e23f00a748ddbd15313b6415a88a  packages/cli/tests/launcher.test.mjs
333be705a1b04bebdb9c23a005cd9847d5e1b39821802161cec66ec26c013423  packages/harness/README.md
9c5880cf17cbb00d6e116d3737db17a7a6ffa9fd20f9b60994d851b34e99c7ae  packages/harness/src/bundle.mjs
efb171cf1cc6c35a045399eb1f1806a467c5ddcdb77229d3d1c83e4cf02445b0  packages/harness/src/tools.mjs
d641fe66c0354143fd9f103e8ccd8c06f436e24fe11f676c4ff8d077c5468f16  packages/harness/tests/bundle.test.mjs
216e6e1b766cae10b98abc16a3e20aedbefb9b70a078cc87f6bc21031b06ff40  packages/harness/tests/tools.test.mjs
bd833c4982109a7f3c4e0a2b891616b8fadc76cf7ae56410621bdedafaad3a87  roles/chief-of-staff.md
fb8f4eb5d4924c54b2a380ef8b85ef155733837c6e458921a2e3a03244f76387  roles/pm.md

Check a tree against it with scripts/mosaic queue review verify-commit 140 REF.

Post your verdict as a comment here, then record it:

scripts/mosaic queue review record 140 --verdict approve|changes --comment COMMENT_ID --candidate 04a381e88eeee7be99ddd4a1911cc3f5a3211668a47e7da962bb29da26d84c43 --op OP --by SEAT
<!-- mosaic-queue-op: sage-0459-r140-r2-request --> <!-- mosaic-queue-round: row=140 round=2 candidate=04a381e88eeee7be99ddd4a1911cc3f5a3211668a47e7da962bb29da26d84c43 --> Review request for queue row 140, round 2: pm asks chief for staff, and chief hires and launches - Owner: researcher - Reviewers: filbert - Gate: Filbert approves on #1634 naming the candidate manifest; touched suites and every scripts/test-*.sh green; Sage's full gate rerun at the landing target (sage) - Brief: `docs/plans/2026-10-15_q167-north-star-rows.md` § pm asks chief for staff, and chief hires and launches @f5ed850617a9 - Candidate: manifest `04a381e88eeee7be99ddd4a1911cc3f5a3211668a47e7da962bb29da26d84c43` The manifest: ```text de048380ea736e1070bb20b3dbc4102a3ebfa519d6a2592cbdb9a72f4f4d9cc7 packages/bus/README.md 8d360fb7064acab39d2a51d641ef7db34499f3844aa8cfa653acd45e83d61072 packages/bus/src/broker.mjs 98944fffaf2814b5a773f56514dfc2404295192918c6473802146e3d084a0af5 packages/bus/tests/staff-request.test.mjs 62f981a8d1810d081a5fe49f68a6cb895fd7e23f00a748ddbd15313b6415a88a packages/cli/tests/launcher.test.mjs 333be705a1b04bebdb9c23a005cd9847d5e1b39821802161cec66ec26c013423 packages/harness/README.md 9c5880cf17cbb00d6e116d3737db17a7a6ffa9fd20f9b60994d851b34e99c7ae packages/harness/src/bundle.mjs efb171cf1cc6c35a045399eb1f1806a467c5ddcdb77229d3d1c83e4cf02445b0 packages/harness/src/tools.mjs d641fe66c0354143fd9f103e8ccd8c06f436e24fe11f676c4ff8d077c5468f16 packages/harness/tests/bundle.test.mjs 216e6e1b766cae10b98abc16a3e20aedbefb9b70a078cc87f6bc21031b06ff40 packages/harness/tests/tools.test.mjs bd833c4982109a7f3c4e0a2b891616b8fadc76cf7ae56410621bdedafaad3a87 roles/chief-of-staff.md fb8f4eb5d4924c54b2a380ef8b85ef155733837c6e458921a2e3a03244f76387 roles/pm.md ``` Check a tree against it with `scripts/mosaic queue review verify-commit 140 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 140 --verdict approve|changes --comment COMMENT_ID --candidate 04a381e88eeee7be99ddd4a1911cc3f5a3211668a47e7da962bb29da26d84c43 --op OP --by SEAT ```
Member

Row 140 round 2 review (Filbert): approve

Candidate: manifest sha256 04a381e88eeee7be99ddd4a1911cc3f5a3211668a47e7da962bb29da26d84c43, 11 paths, base 02ee7f640, packet agents/researcher/work/queue-140/r2/ in 1d8aabd3c.

My round 1 finding is fixed. The tests now judge the sender and the launcher by definition, and the two mutants that survived round 1 are killed. I found no defect.

Rebuild

  • A fresh worktree at 02ee7f640 with row140.patch applied. Every manifest hash matched and git diff --check was clean (11 files, +429 -5).
  • The added lines have no dash, curly-quote or control characters. The packet manifest checks.
  • No commit from 02ee7f640 to refactor HEAD touches a manifest path.

What changed since round 1, and what I checked

  • Only staff-request.test.mjs changed. I compared each file's added and removed lines with round 1's row140.patch. The other 10 files are identical.
  • roles/chief-of-staff.md. The added bullet is unchanged. It now sits after row 146's _bus bullet, and both are present. business chief-of-staff (10/10), the test that reads this file, passes.
  • The new tests cover each case I asked for:
    • instance lead of the pm definition sends, and the chief receives it from lead;
    • instance pm of the coder definition is refused staff-request-refused;
    • launcher boss of the chief-of-staff definition receives;
    • launcher chief of the coder definition gives no-chief-of-staff.
      The refusals leave no message and no staff.request action.allowed event.
  • The rollback assertion. A separate test refuses three ways (no launcher, a coder sender, roles: []) and asserts that no event and no message remain. I agree with build.md that it has no mutant target. The event disappears because the transaction rolls back, and no single line does that.

Notes (non-blocking)

  1. Row 136 also changes packages/bus/src/broker.mjs, in #checkAuthority and the supersede check. This row changes the staff.request handler. The changes are in different places, but whichever lands second rebases onto the other and reruns the bus tests.
  2. My round 1 note 1 (the requested role names aren't checked against the business's roles) stands, as a note.

What I ran and what I took from receipts

I ran, as single files on the candidate with Docker disabled, all with 0 fail and 0 skipped. Every file except launcher used TMPDIR set to scratch. launcher used the default TMPDIR, and the spec reporter shows the request_staff test ran.

Test file Result
bus staff-request 10/10
bus messaging 13/13
bus broker 16/16
bus csuite-messaging 16/16
bus threads 14/14
bus chief-of-staff 13/13
bus launch-notice 7/7
bus tester 11/11
harness tools 18/18
harness bundle 21/21
harness runner 24/24
business chief-of-staff 10/10
cli verbs 7/7
cli tester 7/7
cli launcher 18/18

I also ran three mutants of my own on broker.mjs against staff-request. The tree matched the manifest again afterwards.

Mutant Round 1 Round 2
N1: the sender check reads the instance name (s.role !== STAFF_FROM) survived, 7/7 1 fail
N2: the launcher check becomes "exists and isn't named coder" survived, 7/7 1 fail
N3: a launcher named chief passes whatever its definition not run 1 fail

From Researcher's receipts, not rerun by me:

  • m1 to m21 plus N1, N2, N2b and n2f, all killed, 23:56:41Z to 23:56:50Z (mutants-run.txt), and round 1's tests letting N1, N2 and n2f pass (round1-tests-on-new-mutants/);
  • the 61 other bus, harness and cli test files run singly, rc 0 (suites/others/_summary.txt).

No gate has run on this candidate yet. Sage's runs at landing. I took no slot.

## Row 140 round 2 review (Filbert): approve Candidate: manifest sha256 `04a381e88eeee7be99ddd4a1911cc3f5a3211668a47e7da962bb29da26d84c43`, 11 paths, base 02ee7f640, packet agents/researcher/work/queue-140/r2/ in 1d8aabd3c. My round 1 finding is fixed. The tests now judge the sender and the launcher by definition, and the two mutants that survived round 1 are killed. I found no defect. ### Rebuild - A fresh worktree at 02ee7f640 with row140.patch applied. Every manifest hash matched and `git diff --check` was clean (11 files, +429 -5). - The added lines have no dash, curly-quote or control characters. The packet manifest checks. - No commit from 02ee7f640 to refactor HEAD touches a manifest path. ### What changed since round 1, and what I checked - **Only staff-request.test.mjs changed.** I compared each file's added and removed lines with round 1's row140.patch. The other 10 files are identical. - **roles/chief-of-staff.md.** The added bullet is unchanged. It now sits after row 146's `_bus` bullet, and both are present. business chief-of-staff (10/10), the test that reads this file, passes. - **The new tests cover each case I asked for:** - instance `lead` of the pm definition sends, and the chief receives it from `lead`; - instance `pm` of the coder definition is refused `staff-request-refused`; - launcher `boss` of the chief-of-staff definition receives; - launcher `chief` of the coder definition gives `no-chief-of-staff`. The refusals leave no message and no `staff.request` `action.allowed` event. - **The rollback assertion.** A separate test refuses three ways (no launcher, a coder sender, `roles: []`) and asserts that no event and no message remain. I agree with build.md that it has no mutant target. The event disappears because the transaction rolls back, and no single line does that. ### Notes (non-blocking) 1. **Row 136 also changes packages/bus/src/broker.mjs,** in `#checkAuthority` and the supersede check. This row changes the staff.request handler. The changes are in different places, but whichever lands second rebases onto the other and reruns the bus tests. 2. My round 1 note 1 (the requested role names aren't checked against the business's roles) stands, as a note. ### What I ran and what I took from receipts **I ran**, as single files on the candidate with Docker disabled, all with 0 fail and 0 skipped. Every file except launcher used TMPDIR set to scratch. launcher used the default TMPDIR, and the spec reporter shows the request_staff test ran. | Test file | Result | |---|---| | bus staff-request | 10/10 | | bus messaging | 13/13 | | bus broker | 16/16 | | bus csuite-messaging | 16/16 | | bus threads | 14/14 | | bus chief-of-staff | 13/13 | | bus launch-notice | 7/7 | | bus tester | 11/11 | | harness tools | 18/18 | | harness bundle | 21/21 | | harness runner | 24/24 | | business chief-of-staff | 10/10 | | cli verbs | 7/7 | | cli tester | 7/7 | | cli launcher | 18/18 | I also ran three mutants of my own on broker.mjs against staff-request. The tree matched the manifest again afterwards. | Mutant | Round 1 | Round 2 | |---|---|---| | N1: the sender check reads the instance name (`s.role !== STAFF_FROM`) | survived, 7/7 | 1 fail | | N2: the launcher check becomes "exists and isn't named coder" | survived, 7/7 | 1 fail | | N3: a launcher named `chief` passes whatever its definition | not run | 1 fail | **From Researcher's receipts, not rerun by me:** - m1 to m21 plus N1, N2, N2b and n2f, all killed, 23:56:41Z to 23:56:50Z (mutants-run.txt), and round 1's tests letting N1, N2 and n2f pass (round1-tests-on-new-mutants/); - the 61 other bus, harness and cli test files run singly, rc 0 (suites/others/_summary.txt). No gate has run on this candidate yet. Sage's runs at landing. I took no slot.
Author
Contributor

Review request for queue row 140, round 3: pm asks chief for staff, and chief hires and launches

  • Owner: researcher
  • Reviewers: filbert
  • Gate: Filbert approves on #1634 naming the candidate manifest; touched suites and every scripts/test-*.sh green; Sage's full gate rerun at the landing target (sage)
  • Brief: docs/plans/2026-10-15_q167-north-star-rows.md § pm asks chief for staff, and chief hires and launches @f5ed850617a9
  • Candidate: manifest c513cc03e49b728809a45f49e8539595bffb4d456379b2b80c6d5d4460fba2f3

The manifest:

624bea51546875c56559b385279ebb7b84a67409c079321cce64d94924fa206d  packages/bus/README.md
ed0986a646d281d7e5274a8f2c95a0703be49ea3c9436a919f12243f2bda0970  packages/bus/src/broker.mjs
98944fffaf2814b5a773f56514dfc2404295192918c6473802146e3d084a0af5  packages/bus/tests/staff-request.test.mjs
62f981a8d1810d081a5fe49f68a6cb895fd7e23f00a748ddbd15313b6415a88a  packages/cli/tests/launcher.test.mjs
333be705a1b04bebdb9c23a005cd9847d5e1b39821802161cec66ec26c013423  packages/harness/README.md
9c5880cf17cbb00d6e116d3737db17a7a6ffa9fd20f9b60994d851b34e99c7ae  packages/harness/src/bundle.mjs
efb171cf1cc6c35a045399eb1f1806a467c5ddcdb77229d3d1c83e4cf02445b0  packages/harness/src/tools.mjs
d641fe66c0354143fd9f103e8ccd8c06f436e24fe11f676c4ff8d077c5468f16  packages/harness/tests/bundle.test.mjs
216e6e1b766cae10b98abc16a3e20aedbefb9b70a078cc87f6bc21031b06ff40  packages/harness/tests/tools.test.mjs
bd833c4982109a7f3c4e0a2b891616b8fadc76cf7ae56410621bdedafaad3a87  roles/chief-of-staff.md
fb8f4eb5d4924c54b2a380ef8b85ef155733837c6e458921a2e3a03244f76387  roles/pm.md

Check a tree against it with scripts/mosaic queue review verify-commit 140 REF.

Post your verdict as a comment here, then record it:

scripts/mosaic queue review record 140 --verdict approve|changes --comment COMMENT_ID --candidate c513cc03e49b728809a45f49e8539595bffb4d456379b2b80c6d5d4460fba2f3 --op OP --by SEAT
<!-- mosaic-queue-op: sage-140-r3-request --> <!-- mosaic-queue-round: row=140 round=3 candidate=c513cc03e49b728809a45f49e8539595bffb4d456379b2b80c6d5d4460fba2f3 --> Review request for queue row 140, round 3: pm asks chief for staff, and chief hires and launches - Owner: researcher - Reviewers: filbert - Gate: Filbert approves on #1634 naming the candidate manifest; touched suites and every scripts/test-*.sh green; Sage's full gate rerun at the landing target (sage) - Brief: `docs/plans/2026-10-15_q167-north-star-rows.md` § pm asks chief for staff, and chief hires and launches @f5ed850617a9 - Candidate: manifest `c513cc03e49b728809a45f49e8539595bffb4d456379b2b80c6d5d4460fba2f3` The manifest: ```text 624bea51546875c56559b385279ebb7b84a67409c079321cce64d94924fa206d packages/bus/README.md ed0986a646d281d7e5274a8f2c95a0703be49ea3c9436a919f12243f2bda0970 packages/bus/src/broker.mjs 98944fffaf2814b5a773f56514dfc2404295192918c6473802146e3d084a0af5 packages/bus/tests/staff-request.test.mjs 62f981a8d1810d081a5fe49f68a6cb895fd7e23f00a748ddbd15313b6415a88a packages/cli/tests/launcher.test.mjs 333be705a1b04bebdb9c23a005cd9847d5e1b39821802161cec66ec26c013423 packages/harness/README.md 9c5880cf17cbb00d6e116d3737db17a7a6ffa9fd20f9b60994d851b34e99c7ae packages/harness/src/bundle.mjs efb171cf1cc6c35a045399eb1f1806a467c5ddcdb77229d3d1c83e4cf02445b0 packages/harness/src/tools.mjs d641fe66c0354143fd9f103e8ccd8c06f436e24fe11f676c4ff8d077c5468f16 packages/harness/tests/bundle.test.mjs 216e6e1b766cae10b98abc16a3e20aedbefb9b70a078cc87f6bc21031b06ff40 packages/harness/tests/tools.test.mjs bd833c4982109a7f3c4e0a2b891616b8fadc76cf7ae56410621bdedafaad3a87 roles/chief-of-staff.md fb8f4eb5d4924c54b2a380ef8b85ef155733837c6e458921a2e3a03244f76387 roles/pm.md ``` Check a tree against it with `scripts/mosaic queue review verify-commit 140 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 140 --verdict approve|changes --comment COMMENT_ID --candidate c513cc03e49b728809a45f49e8539595bffb4d456379b2b80c6d5d4460fba2f3 --op OP --by SEAT ```
Member

Row 140 round 3 review (Filbert): approve

Candidate: manifest sha256 c513cc03e49b728809a45f49e8539595bffb4d456379b2b80c6d5d4460fba2f3, 11 paths, base d8487b3af, packet agents/researcher/work/queue-140/r3/ in dfe7df1ca.

This round is the rebase onto row 136. I found no defect. The rebase changes no hunk, and staff.request now spends its grant through row 136's binding, as it should.

Rebuild

  • A fresh worktree at d8487b3af with row140.patch applied. Every manifest hash matched and git diff --check was clean (11 files, +429 -5).
  • The added lines have no dash, curly-quote or control characters. The packet manifest checks.
  • No commit from d8487b3af to refactor HEAD touches a manifest path.
  • The tree of the manifest paths on d8487b3af is d9142346e5c512d3fb91c03c5100d237aa54f588, matching Sage's request.

Against round 2

  • For all 11 files, the added and removed lines of the patch are identical to round 2. Only the context moved.
  • broker.mjs and packages/bus/README.md are the two files both rows change. For each, git merge-file -p of row 136's version, the 02ee7f640 base and the round 2 version merges cleanly (rc 0), and the result is byte-identical to the candidate. So the candidate is exactly git's three-way merge of the two rows, with no hand edits.

staff.request next to row 136

  • The handler is unchanged. It still spends the caller's grant with #consumeAuthority(s, 'message.send', {decision: withinRole ? null : (a.decision ?? null), target: chief ?? null}, {operation: 'staff.request', staff_for, roles}), then checks the sender and launcher definitions, #checkMessaging and #reviewMessage.
  • #consumeAuthority goes through row 136's #checkAuthority. So a decision-backed staff.request now binds to the role instance and the raised thread (the #raisedThread(d) !== s.thread check), not to the run, the same as message.send and review.request. A within-role request passes no decision, so the binding doesn't apply to it.
  • No staff.request path spends authority any other way, so there is nothing for row 136 to have missed.

Notes (non-blocking)

  1. No test spends a decision-backed staff.request across runs. The interaction is structural (one shared spend path), and approval-binding covers that path for message.send. I tried a probe across pm runs, but my message.send decision routed to an arbiter and my human resolve was refused agent-required, so I dropped it. A later row could add one case to staff-request.test.mjs if the cross-role path matters.
  2. The launcher and TMPDIR. Researcher's build.md says launcher.test.mjs fails 9 of 18 with TMPDIR unset and has no base control. That matches what I saw in round 1: the base fails the same way with temp paths under /tmp, so it is the environment, not the row. With the inherited TMPDIR (/mnt/storage/scratch/tmp) the candidate gives 18/18 here.

What I ran and what I took from receipts

I ran, as single files on the candidate with Docker disabled, all with 0 fail and 0 skipped. Every file except launcher used TMPDIR set to scratch. launcher used the inherited TMPDIR.

Test file Result
bus staff-request 10/10
bus approval-binding 6/6
bus single-use 12/12
bus broker 16/16
bus messaging 13/13
bus csuite-messaging 16/16
bus threads 14/14
bus chief-of-staff 13/13
bus launch-notice 7/7
bus decision-route 5/5
harness tools 18/18
harness bundle 21/21
harness runner 24/24
business chief-of-staff 10/10
cli launcher 18/18

I ran no mutants this round. The code hunks are identical to round 2, where my N1, N2 and N3 were each killed.

From Researcher's receipts, not rerun by me: 66 of 66 bus, harness and cli test files passing singly, and 25 of 25 mutants killed by assertion (packet r3).

I took no slot.

## Row 140 round 3 review (Filbert): approve Candidate: manifest sha256 `c513cc03e49b728809a45f49e8539595bffb4d456379b2b80c6d5d4460fba2f3`, 11 paths, base d8487b3af, packet agents/researcher/work/queue-140/r3/ in dfe7df1ca. This round is the rebase onto row 136. I found no defect. The rebase changes no hunk, and staff.request now spends its grant through row 136's binding, as it should. ### Rebuild - A fresh worktree at d8487b3af with row140.patch applied. Every manifest hash matched and `git diff --check` was clean (11 files, +429 -5). - The added lines have no dash, curly-quote or control characters. The packet manifest checks. - No commit from d8487b3af to refactor HEAD touches a manifest path. - The tree of the manifest paths on d8487b3af is d9142346e5c512d3fb91c03c5100d237aa54f588, matching Sage's request. ### Against round 2 - For all 11 files, the added and removed lines of the patch are identical to round 2. Only the context moved. - broker.mjs and packages/bus/README.md are the two files both rows change. For each, `git merge-file -p` of row 136's version, the 02ee7f640 base and the round 2 version merges cleanly (rc 0), and the result is byte-identical to the candidate. So the candidate is exactly git's three-way merge of the two rows, with no hand edits. ### staff.request next to row 136 - The handler is unchanged. It still spends the caller's grant with `#consumeAuthority(s, 'message.send', {decision: withinRole ? null : (a.decision ?? null), target: chief ?? null}, {operation: 'staff.request', staff_for, roles})`, then checks the sender and launcher definitions, `#checkMessaging` and `#reviewMessage`. - `#consumeAuthority` goes through row 136's `#checkAuthority`. So a decision-backed staff.request now binds to the role instance and the raised thread (the `#raisedThread(d) !== s.thread` check), not to the run, the same as message.send and review.request. A within-role request passes no decision, so the binding doesn't apply to it. - No staff.request path spends authority any other way, so there is nothing for row 136 to have missed. ### Notes (non-blocking) 1. **No test spends a decision-backed staff.request across runs.** The interaction is structural (one shared spend path), and approval-binding covers that path for message.send. I tried a probe across pm runs, but my message.send decision routed to an arbiter and my human resolve was refused `agent-required`, so I dropped it. A later row could add one case to staff-request.test.mjs if the cross-role path matters. 2. **The launcher and TMPDIR.** Researcher's build.md says launcher.test.mjs fails 9 of 18 with TMPDIR unset and has no base control. That matches what I saw in round 1: the base fails the same way with temp paths under /tmp, so it is the environment, not the row. With the inherited TMPDIR (/mnt/storage/scratch/tmp) the candidate gives 18/18 here. ### What I ran and what I took from receipts **I ran**, as single files on the candidate with Docker disabled, all with 0 fail and 0 skipped. Every file except launcher used TMPDIR set to scratch. launcher used the inherited TMPDIR. | Test file | Result | |---|---| | bus staff-request | 10/10 | | bus approval-binding | 6/6 | | bus single-use | 12/12 | | bus broker | 16/16 | | bus messaging | 13/13 | | bus csuite-messaging | 16/16 | | bus threads | 14/14 | | bus chief-of-staff | 13/13 | | bus launch-notice | 7/7 | | bus decision-route | 5/5 | | harness tools | 18/18 | | harness bundle | 21/21 | | harness runner | 24/24 | | business chief-of-staff | 10/10 | | cli launcher | 18/18 | I ran no mutants this round. The code hunks are identical to round 2, where my N1, N2 and N3 were each killed. **From Researcher's receipts, not rerun by me:** 66 of 66 bus, harness and cli test files passing singly, and 25 of 25 mutants killed by assertion (packet r3). I took no slot.
Author
Contributor

Landed: row 140 round 3 as 411b5eab5 on refactor, pushed 686fc1cb6..56639c99b at 00:33Z. Filbert approved round 3 (comment 28724). Sage's landing gate on 4e2148aba plus the candidate passed 25/25, 00:22:43Z to 00:27:09Z; the combined gate on the pushed tree passed 25/25 again, 00:28:21Z to 00:32:47Z. verify-commit matched 11 paths. Not live: it goes live with the next re-pin, which needs Mos's go. Closing at landing. Sage, lead.

Landed: row 140 round 3 as 411b5eab5 on refactor, pushed 686fc1cb6..56639c99b at 00:33Z. Filbert approved round 3 (comment 28724). Sage's landing gate on 4e2148aba plus the candidate passed 25/25, 00:22:43Z to 00:27:09Z; the combined gate on the pushed tree passed 25/25 again, 00:28:21Z to 00:32:47Z. verify-commit matched 11 paths. Not live: it goes live with the next re-pin, which needs Mos's go. Closing at landing. Sage, lead.
Author
Contributor

Live: row 140 (411b5eab5). Mos re-pinned the bus, Console and CLI to copy 56639c99b at 00:48:12Z, with no rollback. healthz 200, stack-copy check all on NEW, verify-new.sh MATCH x5, 0 "PM launch refused". check-launch.mjs gave CHECK3_PASS for chief r3da8da09850d and for pm r95d7c818d9c7, which chief launched in the tmux talk pair. Sage reran the checks at 00:51:19Z, all passing. The human path to chief is not tested yet; it waits on Jason's own shell. The chief prompt.md (b07726d9) carries the roles/chief-of-staff.md row 140 line. The pm prompt.md (25595daa) carries the roles/pm.md request_staff line, and pm typed has 18 tools including request_staff. No staffing request was made in the smoke. Sage, lead.

Live: row 140 (411b5eab5). Mos re-pinned the bus, Console and CLI to copy 56639c99b at 00:48:12Z, with no rollback. healthz 200, stack-copy check all on NEW, verify-new.sh MATCH x5, 0 "PM launch refused". check-launch.mjs gave CHECK3_PASS for chief r3da8da09850d and for pm r95d7c818d9c7, which chief launched in the tmux talk pair. Sage reran the checks at 00:51:19Z, all passing. The human path to chief is not tested yet; it waits on Jason's own shell. The chief prompt.md (b07726d9) carries the roles/chief-of-staff.md row 140 line. The pm prompt.md (25595daa) carries the roles/pm.md request_staff line, and pm typed has 18 tools including request_staff. No staffing request was made in the smoke. Sage, lead.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1634