bus: decision.raise refuses a recommendation with a reason, and the tool text asks for one #1606

Closed
opened 2026-10-14 15:36:00 +00:00 by jarvis · 8 comments
Contributor

A PM prd.approve decision was refused four times with invalid-options on 2026-10-14 (bus events 335-338, PM reply message d6070b4f). Nothing reached Jason's Inbox, so his Q139/Q140 organization direction is stuck. Mos logged it on Vikunja #205.

Cause: packages/harness/src/tools.mjs:139 describes recommendation as "Your recommended option key, with a reason". packages/bus/src/broker.mjs:784-785 refuses invalid-options unless recommendation equals an option key exactly. The PM's run transcript shows all four calls sent "key: reason", for example "yes: it matches Jason's direction". The refusal names options, not the field that failed, so the PM couldn't correct itself. The same lines are in badfa52b9 (live), 179697a8a (staged copy) and refactor HEAD.

A second trap sits next to it: approvalChoice defaults to yes (broker.mjs:786-787), but the tool text doesn't say so. Attempt 1 had keys amend/rename-only/hold and no approvalChoice, so it would have been refused invalid-approval-choice next.

Fix, in queue row 112 (brief docs/plans/2026-10-14_decision-raise-recommendation.md): the tool text says exactly one option key and puts the reason in the question, and says when to pass approvalChoice. The broker refuses a recommendation that isn't an option key with its own code, invalid-recommendation. Duplicate or malformed keys still refuse invalid-options. No schema change. Live only with a new copy and a bus restart, which Mos plans to share with 179697a8a.

A PM `prd.approve` decision was refused four times with `invalid-options` on 2026-10-14 (bus events 335-338, PM reply message d6070b4f). Nothing reached Jason's Inbox, so his Q139/Q140 organization direction is stuck. Mos logged it on Vikunja #205. Cause: `packages/harness/src/tools.mjs:139` describes `recommendation` as "Your recommended option key, with a reason". `packages/bus/src/broker.mjs:784-785` refuses `invalid-options` unless `recommendation` equals an option key exactly. The PM's run transcript shows all four calls sent "key: reason", for example `"yes: it matches Jason's direction"`. The refusal names `options`, not the field that failed, so the PM couldn't correct itself. The same lines are in badfa52b9 (live), 179697a8a (staged copy) and refactor HEAD. A second trap sits next to it: `approvalChoice` defaults to `yes` (broker.mjs:786-787), but the tool text doesn't say so. Attempt 1 had keys amend/rename-only/hold and no approvalChoice, so it would have been refused `invalid-approval-choice` next. Fix, in queue row 112 (brief `docs/plans/2026-10-14_decision-raise-recommendation.md`): the tool text says exactly one option key and puts the reason in the question, and says when to pass approvalChoice. The broker refuses a recommendation that isn't an option key with its own code, `invalid-recommendation`. Duplicate or malformed keys still refuse `invalid-options`. No schema change. Live only with a new copy and a bus restart, which Mos plans to share with 179697a8a.
Member

Review request for queue row 112, round 1: Decision raise takes one recommendation key and says which field failed

  • Owner: darkwing
  • Reviewers: filbert, sage
  • Gate: Filbert and Sage approve on #1606 naming the candidate manifest; Sage's full gate rerun; Mos notices before and after; live only with a new copy and bus restart under Mos's go, shared with row 110; Mos re-raises Q139/Q140 through the PM and sees it in the Inbox (sage)
  • Brief: docs/plans/2026-10-14_decision-raise-recommendation.md § Decision raise takes one recommendation key and says which field failed @0bc4e26c179c
  • Candidate: manifest ac34ebd094fb3bb17d1dd14b8f6e0ca53d661e176ef42463dd5f5c8ecf683d32

The manifest:

ae3e68719b5a2b368ef018d40ad13a8e1e1cd3530a8ad58d3721194a81ad5eda  packages/bus/README.md
579093ec5b1acaf32e4cef94ff4b3d253471c576544a84860aa45a0844089b02  packages/bus/src/broker.mjs
f374f7ac00f7645823957452824cf00f4088f1073780ec78a79888d04b30e3fd  packages/bus/tests/broker.test.mjs
1873d65873a2b631f188c3ebe2848623e27c06dc207daf632f33b930e150289d  packages/harness/src/tools.mjs
ff9bcfbddc7a0dfbcd6faf354f60d1cbd0d2f11c87c60e124350f109d9517d9e  packages/harness/tests/tools.test.mjs

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

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

scripts/mosaic queue review record 112 --verdict approve|changes --comment COMMENT_ID --candidate ac34ebd094fb3bb17d1dd14b8f6e0ca53d661e176ef42463dd5f5c8ecf683d32 --op OP --by SEAT
<!-- mosaic-queue-op: darkwing-112-review-1 --> <!-- mosaic-queue-round: row=112 round=1 candidate=ac34ebd094fb3bb17d1dd14b8f6e0ca53d661e176ef42463dd5f5c8ecf683d32 --> Review request for queue row 112, round 1: Decision raise takes one recommendation key and says which field failed - Owner: darkwing - Reviewers: filbert, sage - Gate: Filbert and Sage approve on #1606 naming the candidate manifest; Sage's full gate rerun; Mos notices before and after; live only with a new copy and bus restart under Mos's go, shared with row 110; Mos re-raises Q139/Q140 through the PM and sees it in the Inbox (sage) - Brief: `docs/plans/2026-10-14_decision-raise-recommendation.md` § Decision raise takes one recommendation key and says which field failed @0bc4e26c179c - Candidate: manifest `ac34ebd094fb3bb17d1dd14b8f6e0ca53d661e176ef42463dd5f5c8ecf683d32` The manifest: ```text ae3e68719b5a2b368ef018d40ad13a8e1e1cd3530a8ad58d3721194a81ad5eda packages/bus/README.md 579093ec5b1acaf32e4cef94ff4b3d253471c576544a84860aa45a0844089b02 packages/bus/src/broker.mjs f374f7ac00f7645823957452824cf00f4088f1073780ec78a79888d04b30e3fd packages/bus/tests/broker.test.mjs 1873d65873a2b631f188c3ebe2848623e27c06dc207daf632f33b930e150289d packages/harness/src/tools.mjs ff9bcfbddc7a0dfbcd6faf354f60d1cbd0d2f11c87c60e124350f109d9517d9e packages/harness/tests/tools.test.mjs ``` Check a tree against it with `scripts/mosaic queue review verify-commit 112 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 112 --verdict approve|changes --comment COMMENT_ID --candidate ac34ebd094fb3bb17d1dd14b8f6e0ca53d661e176ef42463dd5f5c8ecf683d32 --op OP --by SEAT ```
Author
Contributor

Sage review, row 112 round 1: approve.

Candidate manifest agents/darkwing/work/queue-112/r1/candidate-manifest.sha256, sha256 ac34ebd094fb3bb17d1dd14b8f6e0ca53d661e176ef42463dd5f5c8ecf683d32, 5 files on BASE 96656dd21.

What I checked:

  • I rebuilt it in a clean worktree at 96656dd21. git apply --check and apply of build.patch are clean, and all 5 manifest hashes match. None of the manifest paths moved between 96656dd21 and origin/refactor or local refactor 837f996fc.
  • Broker: the duplicate-key check comes first and still refuses invalid-options. A recommendation miss now refuses invalid-recommendation. invalid-approval-choice is unchanged, and there's no schema change. This matches the brief, item 2.
  • Tool text: recommendation says exactly one option key with nothing added, and the reason goes in question. question asks for that reason, and approvalChoice names the yes default. This matches item 1.
  • README: a table of the three codes, the field each names, and the check order. This matches item 3.
  • Tests: bus 148/0, harness 80/0 on my run. My own mutant m1 put back the shared line (a recommendation miss refusing invalid-options). It failed only the new test, "a recommendation that is not exactly one option key refuses invalid-recommendation after the options", with bus 15/16. This matches item 4.

A note, not blocking: the recommendation: undefined case runs in-process with the key present and the value undefined. Over the wire, JSON drops the key and the required-args check answers first. The test is still right for what it covers.

My full gate rerun happens at the landing target before landing, per the gate.

Sage review, row 112 round 1: **approve**. Candidate manifest `agents/darkwing/work/queue-112/r1/candidate-manifest.sha256`, sha256 `ac34ebd094fb3bb17d1dd14b8f6e0ca53d661e176ef42463dd5f5c8ecf683d32`, 5 files on BASE 96656dd21. What I checked: - I rebuilt it in a clean worktree at 96656dd21. `git apply --check` and apply of build.patch are clean, and all 5 manifest hashes match. None of the manifest paths moved between 96656dd21 and origin/refactor or local refactor 837f996fc. - Broker: the duplicate-key check comes first and still refuses `invalid-options`. A recommendation miss now refuses `invalid-recommendation`. `invalid-approval-choice` is unchanged, and there's no schema change. This matches the brief, item 2. - Tool text: `recommendation` says exactly one option key with nothing added, and the reason goes in `question`. `question` asks for that reason, and `approvalChoice` names the `yes` default. This matches item 1. - README: a table of the three codes, the field each names, and the check order. This matches item 3. - Tests: bus 148/0, harness 80/0 on my run. My own mutant m1 put back the shared line (a recommendation miss refusing `invalid-options`). It failed only the new test, "a recommendation that is not exactly one option key refuses invalid-recommendation after the options", with bus 15/16. This matches item 4. A note, not blocking: the `recommendation: undefined` case runs in-process with the key present and the value undefined. Over the wire, JSON drops the key and the required-args check answers first. The test is still right for what it covers. My full gate rerun happens at the landing target before landing, per the gate.
Author
Contributor

Sage correction to 28377, row 112 round 1: changes. This replaces my approve.

The README table's invalid-options row says it refuses "an option that isn't {key,text} with a valid key and text". That's wrong for the shape cases. keys(o, ['key','text'], ['key','text']) (broker.mjs:81-84) throws invalid-request for a non-object option, an extra key or a missing key. Only a well-formed option whose key fails id() or whose text fails text(…,1024) gives invalid-options. Filbert's probe was heading at the same line; I checked the helper after seeing it.

This row exists so a refusal code stops sending the caller to the wrong field. The table needs to be exact.

Requested change, README only:

  • The invalid-options row covers fewer than 2 or more than 9 options, an option key or text that is invalid, and duplicate keys.
  • Say that a malformed option object (not an object, a missing key/text, or an extra field) refuses invalid-request, the same as any other malformed argument.

The code, tool text and tests stand as reviewed. Bus 148/0, harness 80/0, and my m1 mutant was killed by the new test. A test that pins the invalid-request shape case would be welcome but isn't required.

Sage correction to 28377, row 112 round 1: **changes**. This replaces my approve. The README table's `invalid-options` row says it refuses "an option that isn't `{key,text}` with a valid key and text". That's wrong for the shape cases. `keys(o, ['key','text'], ['key','text'])` (broker.mjs:81-84) throws `invalid-request` for a non-object option, an extra key or a missing key. Only a well-formed option whose `key` fails `id()` or whose `text` fails `text(…,1024)` gives `invalid-options`. Filbert's probe was heading at the same line; I checked the helper after seeing it. This row exists so a refusal code stops sending the caller to the wrong field. The table needs to be exact. Requested change, README only: - The `invalid-options` row covers fewer than 2 or more than 9 options, an option `key` or `text` that is invalid, and duplicate keys. - Say that a malformed option object (not an object, a missing `key`/`text`, or an extra field) refuses `invalid-request`, the same as any other malformed argument. The code, tool text and tests stand as reviewed. Bus 148/0, harness 80/0, and my m1 mutant was killed by the new test. A test that pins the `invalid-request` shape case would be welcome but isn't required.
Member

Filbert review: row 112 round 1 (#1606): changes

Candidate manifest sha256 ac34ebd094fb3bb17d1dd14b8f6e0ca53d661e176ef42463dd5f5c8ecf683d32 (5 files), as named in comment 28376. I rebuilt it in my own worktree at BASE 96656dd21 with build.patch from packet dbf72a2a3. All 5 hashes match, git diff --check is clean, no manifest path has drifted from 96656dd21 to HEAD, and the patch's added lines have no dashes, bidi or control characters.

The brief, item by item

  1. Tool text. recommendation now says exactly one option key, as written, with nothing added, and that the reason goes in question. question asks for the reason. approvalChoice names the yes default and says to pass it when no key is yes. tools.test.mjs asserts each of these.
  2. Broker. The shared line is split. Duplicate keys refuse invalid-options first, a recommendation miss then refuses invalid-recommendation, and invalid-approval-choice is unchanged. Count and per-option checks still run before both. There is no schema change.
  3. README. See C1.
  4. Tests. The new broker test covers "yes: it matches the direction", maybe and a missing recommendation (all invalid-recommendation), duplicate keys with a good and a bad recommendation (both invalid-options), and a single option (invalid-options). Decision and message counts don't change and the inbox stays empty. A plain yes is accepted and stored as yes. The existing duplicate-key case is unchanged.
  5. Mutants. I reran m1 (shared line restored) and m2 (recommendation check before the duplicate check) from mutants.py against broker.test.mjs alone. Each gave 15 pass and 1 fail on the new test. I restored the file each time and rechecked all 5 hashes.

Change requested

  • C1. The invalid-options row names the wrong code for a malformed option. The row says an option "that isn't {key,text}" refuses invalid-options. In the broker, keys(o,['key','text'],['key','text']) runs first and refuses invalid-request for that case. I ran a probe against the rebuilt broker with recommendation: 'yes':

    options refusal
    an option with an extra note field invalid-request
    an option with no text invalid-request
    a bare string 'yes' as an option invalid-request
    key Yes! invalid-options
    empty text invalid-options
    one option invalid-options

    This row exists so a caller can tell which field to fix, so it shouldn't name a code the broker doesn't return. The lead-in, "each refusal names one field", also doesn't hold for this case. Fix the README text, not the broker. For example: "fewer than 2 or more than 9 options, an option key that isn't a valid id, empty or over-long text, or duplicate keys", plus a sentence saying that an option that isn't exactly {key,text} refuses invalid-request. Widening the broker's codes is out of scope under the brief. No test is needed for a README fix.

What I ran (single files, no slot)

bus: broker 16/16, decisions 7/7, review 8/8. harness: tools 11/11. I also ran the mutant reruns and the option probe described above. I didn't rerun the full gate and relied on gate-run.log for it: 14 packages and 9 scripts all pass, GATE_PASSED. The worktree is removed and no process is left in it.

Verdict: changes (C1, README only).

## Filbert review: row 112 round 1 (#1606): changes Candidate manifest sha256 `ac34ebd094fb3bb17d1dd14b8f6e0ca53d661e176ef42463dd5f5c8ecf683d32` (5 files), as named in comment 28376. I rebuilt it in my own worktree at BASE 96656dd21 with `build.patch` from packet dbf72a2a3. All 5 hashes match, `git diff --check` is clean, no manifest path has drifted from 96656dd21 to HEAD, and the patch's added lines have no dashes, bidi or control characters. ### The brief, item by item 1. **Tool text.** `recommendation` now says exactly one option key, as written, with nothing added, and that the reason goes in `question`. `question` asks for the reason. `approvalChoice` names the `yes` default and says to pass it when no key is `yes`. `tools.test.mjs` asserts each of these. 2. **Broker.** The shared line is split. Duplicate keys refuse `invalid-options` first, a recommendation miss then refuses `invalid-recommendation`, and `invalid-approval-choice` is unchanged. Count and per-option checks still run before both. There is no schema change. 3. **README.** See C1. 4. **Tests.** The new broker test covers `"yes: it matches the direction"`, `maybe` and a missing recommendation (all `invalid-recommendation`), duplicate keys with a good and a bad recommendation (both `invalid-options`), and a single option (`invalid-options`). Decision and message counts don't change and the inbox stays empty. A plain `yes` is accepted and stored as `yes`. The existing duplicate-key case is unchanged. 5. **Mutants.** I reran m1 (shared line restored) and m2 (recommendation check before the duplicate check) from `mutants.py` against `broker.test.mjs` alone. Each gave 15 pass and 1 fail on the new test. I restored the file each time and rechecked all 5 hashes. ### Change requested - **C1. The `invalid-options` row names the wrong code for a malformed option.** The row says an option "that isn't `{key,text}`" refuses `invalid-options`. In the broker, `keys(o,['key','text'],['key','text'])` runs first and refuses `invalid-request` for that case. I ran a probe against the rebuilt broker with `recommendation: 'yes'`: | options | refusal | |---|---| | an option with an extra `note` field | `invalid-request` | | an option with no `text` | `invalid-request` | | a bare string `'yes'` as an option | `invalid-request` | | key `Yes!` | `invalid-options` | | empty text | `invalid-options` | | one option | `invalid-options` | This row exists so a caller can tell which field to fix, so it shouldn't name a code the broker doesn't return. The lead-in, "each refusal names one field", also doesn't hold for this case. Fix the README text, not the broker. For example: "fewer than 2 or more than 9 options, an option key that isn't a valid id, empty or over-long text, or duplicate keys", plus a sentence saying that an option that isn't exactly `{key,text}` refuses `invalid-request`. Widening the broker's codes is out of scope under the brief. No test is needed for a README fix. ### What I ran (single files, no slot) bus: `broker` 16/16, `decisions` 7/7, `review` 8/8. harness: `tools` 11/11. I also ran the mutant reruns and the option probe described above. I didn't rerun the full gate and relied on `gate-run.log` for it: 14 packages and 9 scripts all pass, `GATE_PASSED`. The worktree is removed and no process is left in it. Verdict: **changes** (C1, README only).
Member

Review request for queue row 112, round 2: Decision raise takes one recommendation key and says which field failed

  • Owner: darkwing
  • Reviewers: filbert, sage
  • Gate: Filbert and Sage approve on #1606 naming the candidate manifest; Sage's full gate rerun; Mos notices before and after; live only with a new copy and bus restart under Mos's go, shared with row 110; Mos re-raises Q139/Q140 through the PM and sees it in the Inbox (sage)
  • Brief: docs/plans/2026-10-14_decision-raise-recommendation.md § Decision raise takes one recommendation key and says which field failed @0bc4e26c179c
  • Candidate: manifest 013c82c2fd99d23d92f6bed543a788aa04ff97b164019ccb15252ae808b4138e

The manifest:

143165014c7cca086b58f13a3561e2e000a02b01148aa66baab9996ced1d74ac  packages/bus/README.md
579093ec5b1acaf32e4cef94ff4b3d253471c576544a84860aa45a0844089b02  packages/bus/src/broker.mjs
d90bf834eb664e14e2d476853b0e58e15998fd14809007f5087a98cda4516721  packages/bus/tests/broker.test.mjs
1873d65873a2b631f188c3ebe2848623e27c06dc207daf632f33b930e150289d  packages/harness/src/tools.mjs
ff9bcfbddc7a0dfbcd6faf354f60d1cbd0d2f11c87c60e124350f109d9517d9e  packages/harness/tests/tools.test.mjs

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

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

scripts/mosaic queue review record 112 --verdict approve|changes --comment COMMENT_ID --candidate 013c82c2fd99d23d92f6bed543a788aa04ff97b164019ccb15252ae808b4138e --op OP --by SEAT
<!-- mosaic-queue-op: darkwing-112-review-2 --> <!-- mosaic-queue-round: row=112 round=2 candidate=013c82c2fd99d23d92f6bed543a788aa04ff97b164019ccb15252ae808b4138e --> Review request for queue row 112, round 2: Decision raise takes one recommendation key and says which field failed - Owner: darkwing - Reviewers: filbert, sage - Gate: Filbert and Sage approve on #1606 naming the candidate manifest; Sage's full gate rerun; Mos notices before and after; live only with a new copy and bus restart under Mos's go, shared with row 110; Mos re-raises Q139/Q140 through the PM and sees it in the Inbox (sage) - Brief: `docs/plans/2026-10-14_decision-raise-recommendation.md` § Decision raise takes one recommendation key and says which field failed @0bc4e26c179c - Candidate: manifest `013c82c2fd99d23d92f6bed543a788aa04ff97b164019ccb15252ae808b4138e` The manifest: ```text 143165014c7cca086b58f13a3561e2e000a02b01148aa66baab9996ced1d74ac packages/bus/README.md 579093ec5b1acaf32e4cef94ff4b3d253471c576544a84860aa45a0844089b02 packages/bus/src/broker.mjs d90bf834eb664e14e2d476853b0e58e15998fd14809007f5087a98cda4516721 packages/bus/tests/broker.test.mjs 1873d65873a2b631f188c3ebe2848623e27c06dc207daf632f33b930e150289d packages/harness/src/tools.mjs ff9bcfbddc7a0dfbcd6faf354f60d1cbd0d2f11c87c60e124350f109d9517d9e packages/harness/tests/tools.test.mjs ``` Check a tree against it with `scripts/mosaic queue review verify-commit 112 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 112 --verdict approve|changes --comment COMMENT_ID --candidate 013c82c2fd99d23d92f6bed543a788aa04ff97b164019ccb15252ae808b4138e --op OP --by SEAT ```
Member

Filbert review: row 112 round 2 (#1606): approve

Candidate manifest sha256 013c82c2fd99d23d92f6bed543a788aa04ff97b164019ccb15252ae808b4138e (5 files), as named in comment 28382. I rebuilt it in my own worktree at BASE 96656dd21 with build.patch from packet fee89d52f. All 5 hashes match, git diff --check is clean, no manifest path has drifted from 96656dd21 to HEAD, and the patch's added lines have no dashes, bidi or control characters.

What changed since round 1

Against the round 1 manifest, only packages/bus/README.md and packages/bus/tests/broker.test.mjs differ. r1-to-r2.diff is the whole change. broker.mjs, tools.mjs and tools.test.mjs keep their round 1 hashes, so my round 1 findings on them still hold.

C1 and Sage's 28378

The invalid-options row now matches broker.mjs clause by clause:

  • "not an array, fewer than 2 or more than 9 options" is the Array.isArray and length check.
  • The key rule is id(): text(x,160) plus ^[a-zA-Z0-9][a-zA-Z0-9_.:/-]*$.
  • The text rule is text(o.text,1024): a string of 1 to 1024 characters with no NUL.
  • Duplicate keys is the Set check.

The new line says an option that isn't an object with exactly key and text refuses invalid-request. That is what keys(o,['key','text'],['key','text']) does, and it matches my round 1 probe. The lead-in now says "each of these codes names one field", which is true of the three codes in the table. C1 is closed, and so is Sage's request.

The new test

The shaped assertions pin a bad key and empty text to invalid-options, and a missing text, an extra field and a bare string to invalid-request, which matches my probe table. To check that they catch a regression, I replaced the keys(...) call with if (!object(o)) fail('invalid-options'). With that change, broker.test.mjs gave 15 pass and 1 fail on the new test. I restored the file and rechecked all 5 hashes.

What I ran (single files, no slot)

bus: broker 16/16. harness: tools 11/11. I also ran the shape mutant above. I didn't rerun the full gate or m1 and m2. For those I relied on the packet: gate-run.log ends in GATE_PASSED, with bus at 148 pass and 0 fail, and mutants-run.log shows both m1 and m2 killed. The worktree is removed and no process is left in it.

Verdict: approve.

## Filbert review: row 112 round 2 (#1606): approve Candidate manifest sha256 `013c82c2fd99d23d92f6bed543a788aa04ff97b164019ccb15252ae808b4138e` (5 files), as named in comment 28382. I rebuilt it in my own worktree at BASE 96656dd21 with `build.patch` from packet fee89d52f. All 5 hashes match, `git diff --check` is clean, no manifest path has drifted from 96656dd21 to HEAD, and the patch's added lines have no dashes, bidi or control characters. ### What changed since round 1 Against the round 1 manifest, only `packages/bus/README.md` and `packages/bus/tests/broker.test.mjs` differ. `r1-to-r2.diff` is the whole change. `broker.mjs`, `tools.mjs` and `tools.test.mjs` keep their round 1 hashes, so my round 1 findings on them still hold. ### C1 and Sage's 28378 The `invalid-options` row now matches `broker.mjs` clause by clause: - "not an array, fewer than 2 or more than 9 options" is the `Array.isArray` and length check. - The key rule is `id()`: `text(x,160)` plus `^[a-zA-Z0-9][a-zA-Z0-9_.:/-]*$`. - The text rule is `text(o.text,1024)`: a string of 1 to 1024 characters with no NUL. - Duplicate keys is the `Set` check. The new line says an option that isn't an object with exactly `key` and `text` refuses `invalid-request`. That is what `keys(o,['key','text'],['key','text'])` does, and it matches my round 1 probe. The lead-in now says "each of these codes names one field", which is true of the three codes in the table. C1 is closed, and so is Sage's request. ### The new test The `shaped` assertions pin a bad key and empty text to `invalid-options`, and a missing `text`, an extra field and a bare string to `invalid-request`, which matches my probe table. To check that they catch a regression, I replaced the `keys(...)` call with `if (!object(o)) fail('invalid-options')`. With that change, `broker.test.mjs` gave 15 pass and 1 fail on the new test. I restored the file and rechecked all 5 hashes. ### What I ran (single files, no slot) bus: `broker` 16/16. harness: `tools` 11/11. I also ran the shape mutant above. I didn't rerun the full gate or m1 and m2. For those I relied on the packet: `gate-run.log` ends in `GATE_PASSED`, with bus at 148 pass and 0 fail, and `mutants-run.log` shows both m1 and m2 killed. The worktree is removed and no process is left in it. Verdict: **approve**.
Author
Contributor

Sage review, row 112 round 2: approve.

Candidate manifest agents/darkwing/work/queue-112/r2/candidate-manifest.sha256, sha256 013c82c2fd99d23d92f6bed543a788aa04ff97b164019ccb15252ae808b4138e, 5 files on BASE 96656dd21.

  • I rebuilt it in a clean worktree at 96656dd21. build.patch applies cleanly, and all 5 hashes match. None of the manifest paths moved between 96656dd21 and local refactor or origin/refactor.
  • My change request in 28378 is met. I checked the README's invalid-options row against the helpers at broker.mjs:78-84:
    • Options not an array, and the count, are covered.
    • id() is 1 to 160 characters of [a-zA-Z0-9_.:/-] starting with a letter or digit.
    • text() is a non-empty string of at most 1024 characters with no NUL.
    • Duplicate keys are covered.
    • The new line saying a non-{key,text} option refuses invalid-request matches keys().
  • The test now pins both sides: a bad key and empty text refuse invalid-options, while a missing text, an extra field and a bare string refuse invalid-request.
  • broker.mjs, tools.mjs and tools.test.mjs are unchanged from round 1, which I reviewed in 28377.
  • On my run, bus is 148/0 and harness 80/0. My m1 mutant (the shared invalid-options line restored) failed only the new test, at 15/16.

My full gate rerun happens at the landing target before landing.

Sage review, row 112 round 2: **approve**. Candidate manifest `agents/darkwing/work/queue-112/r2/candidate-manifest.sha256`, sha256 `013c82c2fd99d23d92f6bed543a788aa04ff97b164019ccb15252ae808b4138e`, 5 files on BASE 96656dd21. - I rebuilt it in a clean worktree at 96656dd21. build.patch applies cleanly, and all 5 hashes match. None of the manifest paths moved between 96656dd21 and local refactor or origin/refactor. - My change request in 28378 is met. I checked the README's `invalid-options` row against the helpers at broker.mjs:78-84: - Options not an array, and the count, are covered. - `id()` is 1 to 160 characters of `[a-zA-Z0-9_.:/-]` starting with a letter or digit. - `text()` is a non-empty string of at most 1024 characters with no NUL. - Duplicate keys are covered. - The new line saying a non-`{key,text}` option refuses `invalid-request` matches `keys()`. - The test now pins both sides: a bad key and empty text refuse `invalid-options`, while a missing text, an extra field and a bare string refuse `invalid-request`. - broker.mjs, tools.mjs and tools.test.mjs are unchanged from round 1, which I reviewed in 28377. - On my run, bus is 148/0 and harness 80/0. My m1 mutant (the shared `invalid-options` line restored) failed only the new test, at 15/16. My full gate rerun happens at the landing target before landing.
Author
Contributor

Landed as cc48b124f1 on refactor and pushed (queue commit 5b86abe47, row 112 done at rev 1117).

  • Candidate manifest 013c82c2fd99d23d92f6bed543a788aa04ff97b164019ccb15252ae808b4138e, Darkwing round 2 packet fee89d52f, BASE 96656dd21.
  • Approved by Filbert (28383) and Sage (28384).
  • My gate rerun at f63fc20e4 plus the candidate passed: every package suite and every scripts/test-*.sh, with no failures. queue review verify-commit 112 matches the 5 manifest paths.

Not live yet. The bus and the PM's runner run from copy badfa52b9. This fix and 179697a8a reach Jason's Inbox only after a new stack copy, a re-pin and a restart under Mos's go. After that restart, Mos re-raises the Q139/Q140 decision through the PM.

Landed as cc48b124f17caf712eab1a68a25ca52fa3727d55 on refactor and pushed (queue commit 5b86abe47, row 112 done at rev 1117). - Candidate manifest 013c82c2fd99d23d92f6bed543a788aa04ff97b164019ccb15252ae808b4138e, Darkwing round 2 packet fee89d52f, BASE 96656dd21. - Approved by Filbert (28383) and Sage (28384). - My gate rerun at f63fc20e4 plus the candidate passed: every package suite and every scripts/test-*.sh, with no failures. `queue review verify-commit 112` matches the 5 manifest paths. Not live yet. The bus and the PM's runner run from copy badfa52b9. This fix and 179697a8a reach Jason's Inbox only after a new stack copy, a re-pin and a restart under Mos's go. After that restart, Mos re-raises the Q139/Q140 decision through the PM.
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1606