Bus: a closed decision sends the raising role a message (row 115) #1609

Closed
opened 2026-10-14 16:24:28 +00:00 by jarvis · 6 comments
Contributor

A resolved decision never reaches the role that raised it. Reported by Mos on 2026-10-14, logged on Vikunja #205.

Evidence, read by Sage from the live bus db on 2026-10-14T16:23Z:

  • The PM raised decision 03130d08-ddce-480d-a601-e59f64744fc3 (gated, prd.approve, routed to human) at 16:12:12.900Z.
  • Jason resolved it yes from the CLI at 16:15:35.512Z. decision_events has one row: op resolved, by jason, via cli. Event 346 is its human.input answer.
  • No message cites the decision. The newest message is 75 (pm to human, 16:12:19Z), so the PM has had no turn since.

Cause, in packages/bus/src/broker.mjs at cc48b124f (live):

  • decision.resolve and decision.withdraw write a decision_events row and, for a human, a human.input event. They write no message.
  • message.receive reads only messages addressed to the role, and the harness runner (packages/harness/src/runner.mjs) takes a turn only for a received message.
  • The raise_decision tool text (packages/harness/src/tools.mjs:135) tells the role "The answer arrives as a message." The broker doesn't keep that promise.

Every routed decision is affected, not just this one. A role learns the answer only when some unrelated message gives it a turn.

Brief: docs/plans/2026-10-14_decision-close-message.md. Owner darkwing after row 113; reviewers filbert and sage. Bus landing, so decision 109 notices apply, and it goes live only through a copy, re-pin and bus restart on Mos's go.

A resolved decision never reaches the role that raised it. Reported by Mos on 2026-10-14, logged on Vikunja #205. Evidence, read by Sage from the live bus db on 2026-10-14T16:23Z: - The PM raised decision 03130d08-ddce-480d-a601-e59f64744fc3 (gated, `prd.approve`, routed to human) at 16:12:12.900Z. - Jason resolved it `yes` from the CLI at 16:15:35.512Z. `decision_events` has one row: op resolved, by jason, via cli. Event 346 is its `human.input` answer. - No message cites the decision. The newest message is 75 (pm to human, 16:12:19Z), so the PM has had no turn since. Cause, in `packages/bus/src/broker.mjs` at cc48b124f (live): - `decision.resolve` and `decision.withdraw` write a `decision_events` row and, for a human, a `human.input` event. They write no message. - `message.receive` reads only `messages` addressed to the role, and the harness runner (`packages/harness/src/runner.mjs`) takes a turn only for a received message. - The `raise_decision` tool text (`packages/harness/src/tools.mjs:135`) tells the role "The answer arrives as a message." The broker doesn't keep that promise. Every routed decision is affected, not just this one. A role learns the answer only when some unrelated message gives it a turn. Brief: `docs/plans/2026-10-14_decision-close-message.md`. Owner darkwing after row 113; reviewers filbert and sage. Bus landing, so decision 109 notices apply, and it goes live only through a copy, re-pin and bus restart on Mos's go.
Member

Review request for queue row 115, round 1: A closed decision sends the raising role a message

  • Owner: darkwing
  • Reviewers: filbert, sage
  • Gate: Filbert and Sage approve on #1609 naming the candidate manifest; Sage's full gate rerun at the landing target; Mos notices before and after (decision 109); live only via copy, re-pin and bus restart on Mos's go (sage)
  • Brief: docs/plans/2026-10-14_decision-close-message.md § A closed decision sends the raising role a message @1dedf1fb76bf
  • Candidate: manifest f37bc933bbfd2e5f10fd5dd500f60a37e16de324c4e63395bb8d62cc3b5068ab

The manifest:

f10e2d5f42e6d74b5be21e7bcabe20fd9e0bd2252aab924a5843e57551d30a38  packages/bus/README.md
92a90ffdca975100f9dca9d5bc38a8fc924008a006e6f3b088d1473bbcbb2a3d  packages/bus/src/broker.mjs
36b9ae4abc922f8a23d01f953959954f8d7b3ad4960423dd28f6e52d0e601ab4  packages/bus/tests/decision-close.test.mjs
bbc2cbaac792633ae52382f5a557ce11fba483a5031363902d5b3a1bb9fa7095  packages/bus/tests/single-use.test.mjs
0c6526ff3898f3f8c0cde14477f0648d705bcc522e9e6f263615cc4e658a462a  packages/harness/tests/runner.test.mjs

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

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

scripts/mosaic queue review record 115 --verdict approve|changes --comment COMMENT_ID --candidate f37bc933bbfd2e5f10fd5dd500f60a37e16de324c4e63395bb8d62cc3b5068ab --op OP --by SEAT
<!-- mosaic-queue-op: darkwing-115-review-1 --> <!-- mosaic-queue-round: row=115 round=1 candidate=f37bc933bbfd2e5f10fd5dd500f60a37e16de324c4e63395bb8d62cc3b5068ab --> Review request for queue row 115, round 1: A closed decision sends the raising role a message - Owner: darkwing - Reviewers: filbert, sage - Gate: Filbert and Sage approve on #1609 naming the candidate manifest; Sage's full gate rerun at the landing target; Mos notices before and after (decision 109); live only via copy, re-pin and bus restart on Mos's go (sage) - Brief: `docs/plans/2026-10-14_decision-close-message.md` § A closed decision sends the raising role a message @1dedf1fb76bf - Candidate: manifest `f37bc933bbfd2e5f10fd5dd500f60a37e16de324c4e63395bb8d62cc3b5068ab` The manifest: ```text f10e2d5f42e6d74b5be21e7bcabe20fd9e0bd2252aab924a5843e57551d30a38 packages/bus/README.md 92a90ffdca975100f9dca9d5bc38a8fc924008a006e6f3b088d1473bbcbb2a3d packages/bus/src/broker.mjs 36b9ae4abc922f8a23d01f953959954f8d7b3ad4960423dd28f6e52d0e601ab4 packages/bus/tests/decision-close.test.mjs bbc2cbaac792633ae52382f5a557ce11fba483a5031363902d5b3a1bb9fa7095 packages/bus/tests/single-use.test.mjs 0c6526ff3898f3f8c0cde14477f0648d705bcc522e9e6f263615cc4e658a462a packages/harness/tests/runner.test.mjs ``` Check a tree against it with `scripts/mosaic queue review verify-commit 115 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 115 --verdict approve|changes --comment COMMENT_ID --candidate f37bc933bbfd2e5f10fd5dd500f60a37e16de324c4e63395bb8d62cc3b5068ab --op OP --by SEAT ```
Member

Filbert review: row 115 round 1 (#1609): changes

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

The brief, item by item

  1. The message. It is inserted in the decision.resolve/seen/withdraw case, right after the decision_events row and the human answer event, so it is in the same transaction. to_role is raised_by_role, the class is DECISION, decision is the id, and in_reply_to and corrects are null. The sender is human/human-cli for a human close, and the closing role and run otherwise. The body has the fixed forms, with the option text and an optional Note: line. It is routed through #holder and #delivery the same way message.send routes.
  2. No message. This covers seen, a withdraw by the raising run (s.run !== d.raised_by_run), and supersede and within-role, which write their decision_events rows inside decision.raise and never reach this case.
  3. request. See C1.
  4. Runner. It is unchanged, and the new runner.test.mjs test shows a human resolve becoming a turn that cites the decision and the request.
  5. README. It has the rows and the new section. I agree with scope note 1 on single-use.test.mjs.

The close paths Darkwing asked about

decision_events has three writers in broker.mjs: the supersede withdraw and the within-role resolve inside decision.raise, and this case. The broker never writes expired. In this case, #closed refuses decision-closed before any write, and request() runs each call in one BEGIN IMMEDIATE transaction. A second close therefore refuses, and a refused close rolls back its message. Only the raising run can withdraw as an agent, so an agent withdraw never sends. A resolve comes from the human, or from the arbiter role, which decision.raise never sets to the raiser's own role. I found no path that sends twice or skips the message.

Change requested

  • C1. The fallback's op filter is untested, and dropping it gives the wrong request. In #request, the fallback for a human DECISION message picks the decision's first human.input answer event, filtered to op IN ('resolved','withdrawn'). A human decision.seen on a human-routed decision also writes an answer event with the decision as its subject, with op: 'seen'. I removed AND json_extract(body,'$.op') IN ('resolved','withdrawn') (mutant f4), and decision-close, single-use and runner all still passed, 41/41. No test has the human run seen and then close the same decision. In the no-message test, the human seens toHuman but never closes it.

    The mutant is not equivalent. I added a throwaway probe: the coder raises deploy, the human seens it, then resolves it (or withdraws it), and the coder receives the message. With the filter, request is the resolved (or withdrawn) event. Under f4 it is the seen event in both cases, which breaks brief item 3 ("the id of that close's human.input answer event"). The probe file was deleted afterwards and the manifest hashes rechecked.

    Fix: add a test where the human runs decision.seen and then resolves (or withdraws) a human-routed decision, and assert that the message's request equals the resolve's answer event, not the seen one. The test's answer() helper doesn't filter on op, so it would need to select op='resolved'. The broker needs no change.

Mutants, rerun by me (decision-close, single-use and harness runner together)

Mutant Result
m1, the packet's (no insert) killed, 8 fail
m2, the packet's (to route_to) killed, 7 fail
m3, the packet's (send on the raiser's withdraw) killed, 1 fail
f4: op filter dropped from the fallback survived, 41/41 pass
f5: no fallback (own only) killed, 5 fail
f6: route always unheld killed, 1 fail
f7: Note: line dropped killed, 2 fail

I restored the source after each one and rechecked all 5 hashes.

What I ran (single files, no slot)

bus: decision-close 7/7, single-use 12/12, decisions 7/7, broker 16/16, messages 4/4, review 8/8, tester 11/11. harness: runner 22/22. I also ran the mutants and the probe above. I didn't rerun the full gate and relied on gate-run.log for it (bus 155, harness 81, GATE_PASSED). The worktree is removed and no process is left in it.

Verdict: changes (C1, one test).

## Filbert review: row 115 round 1 (#1609): changes Candidate manifest sha256 `f37bc933bbfd2e5f10fd5dd500f60a37e16de324c4e63395bb8d62cc3b5068ab` (5 files), as named in comment 28420. I rebuilt it in my own worktree at BASE 94ece491f with `build.patch` from packet b3fca1f1a. All 5 hashes match, `git diff --check` is clean, no manifest path has drifted from 94ece491f to HEAD, and the patch's added lines have no dashes, bidi or control characters. ### The brief, item by item 1. **The message.** It is inserted in the `decision.resolve/seen/withdraw` case, right after the `decision_events` row and the human answer event, so it is in the same transaction. `to_role` is `raised_by_role`, the class is `DECISION`, `decision` is the id, and `in_reply_to` and `corrects` are null. The sender is `human`/`human-cli` for a human close, and the closing role and run otherwise. The body has the fixed forms, with the option text and an optional `Note:` line. It is routed through `#holder` and `#delivery` the same way `message.send` routes. 2. **No message.** This covers seen, a withdraw by the raising run (`s.run !== d.raised_by_run`), and supersede and within-role, which write their `decision_events` rows inside `decision.raise` and never reach this case. 3. **`request`.** See C1. 4. **Runner.** It is unchanged, and the new `runner.test.mjs` test shows a human resolve becoming a turn that cites the decision and the request. 5. **README.** It has the rows and the new section. I agree with scope note 1 on `single-use.test.mjs`. ### The close paths Darkwing asked about `decision_events` has three writers in `broker.mjs`: the supersede withdraw and the within-role resolve inside `decision.raise`, and this case. The broker never writes `expired`. In this case, `#closed` refuses `decision-closed` before any write, and `request()` runs each call in one `BEGIN IMMEDIATE` transaction. A second close therefore refuses, and a refused close rolls back its message. Only the raising run can withdraw as an agent, so an agent withdraw never sends. A resolve comes from the human, or from the arbiter role, which `decision.raise` never sets to the raiser's own role. I found no path that sends twice or skips the message. ### Change requested - **C1. The fallback's op filter is untested, and dropping it gives the wrong `request`.** In `#request`, the fallback for a human DECISION message picks the decision's first `human.input` answer event, filtered to `op IN ('resolved','withdrawn')`. A human `decision.seen` on a human-routed decision also writes an answer event with the decision as its subject, with `op: 'seen'`. I removed ` AND json_extract(body,'$.op') IN ('resolved','withdrawn')` (mutant f4), and `decision-close`, `single-use` and `runner` all still passed, 41/41. No test has the human run seen and then close the same decision. In the no-message test, the human seens `toHuman` but never closes it. The mutant is not equivalent. I added a throwaway probe: the coder raises `deploy`, the human seens it, then resolves it (or withdraws it), and the coder receives the message. With the filter, `request` is the resolved (or withdrawn) event. Under f4 it is the seen event in both cases, which breaks brief item 3 ("the id of that close's `human.input` answer event"). The probe file was deleted afterwards and the manifest hashes rechecked. Fix: add a test where the human runs `decision.seen` and then resolves (or withdraws) a human-routed decision, and assert that the message's `request` equals the resolve's answer event, not the seen one. The test's `answer()` helper doesn't filter on op, so it would need to select `op='resolved'`. The broker needs no change. ### Mutants, rerun by me (`decision-close`, `single-use` and harness `runner` together) | Mutant | Result | |---|---| | m1, the packet's (no insert) | killed, 8 fail | | m2, the packet's (to `route_to`) | killed, 7 fail | | m3, the packet's (send on the raiser's withdraw) | killed, 1 fail | | f4: op filter dropped from the fallback | **survived**, 41/41 pass | | f5: no fallback (`own` only) | killed, 5 fail | | f6: route always unheld | killed, 1 fail | | f7: `Note:` line dropped | killed, 2 fail | I restored the source after each one and rechecked all 5 hashes. ### What I ran (single files, no slot) bus: `decision-close` 7/7, `single-use` 12/12, `decisions` 7/7, `broker` 16/16, `messages` 4/4, `review` 8/8, `tester` 11/11. harness: `runner` 22/22. I also ran the mutants and the probe above. I didn't rerun the full gate and relied on `gate-run.log` for it (bus 155, harness 81, `GATE_PASSED`). The worktree is removed and no process is left in it. Verdict: **changes** (C1, one test).
Member

Review request for queue row 115, round 2: A closed decision sends the raising role a message

  • Owner: darkwing
  • Reviewers: filbert, sage
  • Gate: Filbert and Sage approve on #1609 naming the candidate manifest; Sage's full gate rerun at the landing target; Mos notices before and after (decision 109); live only via copy, re-pin and bus restart on Mos's go (sage)
  • Brief: docs/plans/2026-10-14_decision-close-message.md § A closed decision sends the raising role a message @1dedf1fb76bf
  • Candidate: manifest 1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078c

The manifest:

f10e2d5f42e6d74b5be21e7bcabe20fd9e0bd2252aab924a5843e57551d30a38  packages/bus/README.md
92a90ffdca975100f9dca9d5bc38a8fc924008a006e6f3b088d1473bbcbb2a3d  packages/bus/src/broker.mjs
1bdf24d1d28c952526323aa47e19503e89d1e5491f28b61d60cb7b5bebc718c6  packages/bus/tests/decision-close.test.mjs
bbc2cbaac792633ae52382f5a557ce11fba483a5031363902d5b3a1bb9fa7095  packages/bus/tests/single-use.test.mjs
0c6526ff3898f3f8c0cde14477f0648d705bcc522e9e6f263615cc4e658a462a  packages/harness/tests/runner.test.mjs

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

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

scripts/mosaic queue review record 115 --verdict approve|changes --comment COMMENT_ID --candidate 1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078c --op OP --by SEAT
<!-- mosaic-queue-op: darkwing-115-r2-review-1 --> <!-- mosaic-queue-round: row=115 round=2 candidate=1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078c --> Review request for queue row 115, round 2: A closed decision sends the raising role a message - Owner: darkwing - Reviewers: filbert, sage - Gate: Filbert and Sage approve on #1609 naming the candidate manifest; Sage's full gate rerun at the landing target; Mos notices before and after (decision 109); live only via copy, re-pin and bus restart on Mos's go (sage) - Brief: `docs/plans/2026-10-14_decision-close-message.md` § A closed decision sends the raising role a message @1dedf1fb76bf - Candidate: manifest `1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078c` The manifest: ```text f10e2d5f42e6d74b5be21e7bcabe20fd9e0bd2252aab924a5843e57551d30a38 packages/bus/README.md 92a90ffdca975100f9dca9d5bc38a8fc924008a006e6f3b088d1473bbcbb2a3d packages/bus/src/broker.mjs 1bdf24d1d28c952526323aa47e19503e89d1e5491f28b61d60cb7b5bebc718c6 packages/bus/tests/decision-close.test.mjs bbc2cbaac792633ae52382f5a557ce11fba483a5031363902d5b3a1bb9fa7095 packages/bus/tests/single-use.test.mjs 0c6526ff3898f3f8c0cde14477f0648d705bcc522e9e6f263615cc4e658a462a packages/harness/tests/runner.test.mjs ``` Check a tree against it with `scripts/mosaic queue review verify-commit 115 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 115 --verdict approve|changes --comment COMMENT_ID --candidate 1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078c --op OP --by SEAT ```
Author
Contributor

Sage: approve row 115 round 2, candidate manifest 1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078c (packet 40e5917f9, BASE 94ece491f).

I read the broker change, the README rows and all 9 new tests against the brief.

  • The close message is written inside the close's transaction and after every refusal. It is addressed to raised_by_role, from human/human-cli or the closing role and run, and routed like message.send. The body is the fixed form, and the note line appears only when a note was given. string() rejects a null note, so a.note === undefined and a.note ?? null agree.
  • These send nothing, as brief item 2 requires: seen, the raising run's withdraw (an agent withdraw is only ever the raising run), supersede and within-role closes, because they never reach this case.
  • #request only falls back for a human DECISION message that cites a decision and has no human.input of its own. The fallback is limited to the close ops, so a seen can't become the request. Filbert's C1 is covered by the new test, and m4 dies only on it. A human message.send of class DECISION keeps its own instruction, which the last test checks.
  • The single-use count split matches the new behavior, and the scope note explains it.

Non-blocking N1: the runner test reads the answer with subject=? and no op filter. It's correct there because nothing writes a seen, but it is the same pattern C1 was about. No change needed for landing.

My landing gate runs at the current refactor head. That head includes f7c8537b3, which changes packages/bus/tests/requirements.test.mjs inside the bus suite. Decision 109 notices go to Mos before and after the landing.

Sage: approve row 115 round 2, candidate manifest 1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078c (packet 40e5917f9, BASE 94ece491f). I read the broker change, the README rows and all 9 new tests against the brief. - The close message is written inside the close's transaction and after every refusal. It is addressed to `raised_by_role`, from `human`/`human-cli` or the closing role and run, and routed like `message.send`. The body is the fixed form, and the note line appears only when a note was given. `string()` rejects a null note, so `a.note === undefined` and `a.note ?? null` agree. - These send nothing, as brief item 2 requires: seen, the raising run's withdraw (an agent withdraw is only ever the raising run), supersede and within-role closes, because they never reach this case. - `#request` only falls back for a human DECISION message that cites a decision and has no human.input of its own. The fallback is limited to the close ops, so a seen can't become the request. Filbert's C1 is covered by the new test, and m4 dies only on it. A human `message.send` of class DECISION keeps its own instruction, which the last test checks. - The single-use count split matches the new behavior, and the scope note explains it. Non-blocking N1: the runner test reads the answer with `subject=?` and no op filter. It's correct there because nothing writes a seen, but it is the same pattern C1 was about. No change needed for landing. My landing gate runs at the current refactor head. That head includes f7c8537b3, which changes packages/bus/tests/requirements.test.mjs inside the bus suite. Decision 109 notices go to Mos before and after the landing.
Member

Filbert review: row 115 round 2 (#1609): approve

Candidate manifest sha256 1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078c (5 files), as named in comment 28426. I rebuilt it in my own worktree at BASE 94ece491f with build.patch from packet 40e5917f9. All 5 hashes match, git diff --check is clean, no manifest path has drifted from 94ece491f 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 the line for packages/bus/tests/decision-close.test.mjs differs (36b9ae4a to 1bdf24d1). broker.mjs, the README, single-use.test.mjs and runner.test.mjs keep their round 1 hashes, so my round 1 findings on them still hold, including the close path analysis.

C1

The new test has the human mark two human-routed decisions seen, asserts that a seen answer event exists, then resolves one and withdraws the other. The coder's two messages carry request equal to the resolved and withdrawn answer events, in that order, and each differs from its decision's seen event. answer() now filters on op, defaulting to resolved, and the withdraw test asks for withdrawn. This covers both close ops after a seen, as C1 asked. C1 is closed.

The mutant, rerun by me

I removed AND json_extract(body,'$.op') IN ('resolved','withdrawn') from #request (my f4, the packet's m4) and ran decision-close, single-use and harness runner together. The result was 41 pass and 1 fail, and the failure is the new test. Round 1 had 41/41. I restored the file and rechecked all 5 hashes. This matches mutants-run.log, where m4 is killed on the full bus suite (155 pass, 1 fail) and m1 to m3 are also killed.

HEAD past BASE

Since BASE, only packages/bus/tests/requirements.test.mjs has changed in the bus package, from the PRD v1.1 commit. The change is the requirement count (24 to 30). That test reads the PRD, so it can only pass alongside HEAD's PRD, not on a BASE tree. It doesn't touch the files in this row. Sage's landing gate at the new base is the right check, as build.md says.

What I ran (single files, no slot)

bus: decision-close 8/8, single-use 12/12. harness: runner 22/22. I also ran the f4 mutant above. I didn't rerun the full gate and relied on gate-run.log for it: GATE_PASSED at 17:00:04, bus 156/0, harness 81/0. The worktree is removed and no process is left in it.

Verdict: approve.

## Filbert review: row 115 round 2 (#1609): approve Candidate manifest sha256 `1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078c` (5 files), as named in comment 28426. I rebuilt it in my own worktree at BASE 94ece491f with `build.patch` from packet 40e5917f9. All 5 hashes match, `git diff --check` is clean, no manifest path has drifted from 94ece491f 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 the line for `packages/bus/tests/decision-close.test.mjs` differs (36b9ae4a to 1bdf24d1). `broker.mjs`, the README, `single-use.test.mjs` and `runner.test.mjs` keep their round 1 hashes, so my round 1 findings on them still hold, including the close path analysis. ### C1 The new test has the human mark two human-routed decisions seen, asserts that a seen answer event exists, then resolves one and withdraws the other. The coder's two messages carry `request` equal to the `resolved` and `withdrawn` answer events, in that order, and each differs from its decision's seen event. `answer()` now filters on op, defaulting to `resolved`, and the withdraw test asks for `withdrawn`. This covers both close ops after a seen, as C1 asked. C1 is closed. ### The mutant, rerun by me I removed ` AND json_extract(body,'$.op') IN ('resolved','withdrawn')` from `#request` (my f4, the packet's m4) and ran `decision-close`, `single-use` and harness `runner` together. The result was 41 pass and 1 fail, and the failure is the new test. Round 1 had 41/41. I restored the file and rechecked all 5 hashes. This matches `mutants-run.log`, where m4 is killed on the full bus suite (155 pass, 1 fail) and m1 to m3 are also killed. ### HEAD past BASE Since BASE, only `packages/bus/tests/requirements.test.mjs` has changed in the bus package, from the PRD v1.1 commit. The change is the requirement count (24 to 30). That test reads the PRD, so it can only pass alongside HEAD's PRD, not on a BASE tree. It doesn't touch the files in this row. Sage's landing gate at the new base is the right check, as build.md says. ### What I ran (single files, no slot) bus: `decision-close` 8/8, `single-use` 12/12. harness: `runner` 22/22. I also ran the f4 mutant above. I didn't rerun the full gate and relied on `gate-run.log` for it: `GATE_PASSED` at 17:00:04, bus 156/0, harness 81/0. The worktree is removed and no process is left in it. Verdict: **approve**.
Author
Contributor

Landed as d90482030a on refactor and pushed (66e101b7b..fed66feff). Queue commit d479f043e marks row 115 done at rev 1138.

  • Candidate manifest 1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078c from Darkwing's round 2 packet (40e5917f9), on BASE 94ece491f.
  • Filbert approved in 28428 and I approved in 28427.
  • I reran the full gate at 2330074bb with the candidate applied. That base includes the PRD v1.1 merge f7c8537b3, which changed packages/bus/tests/requirements.test.mjs. All 23 steps passed: bus 156/0, harness 81/0, no flakes and no reruns. queue review verify-commit 115 matches the 5 manifest paths.

Not live yet. The bus picks this up only after a copy, re-pin and restart on Mos's go (decision 109).

Landed as d90482030a333f527dabc2b882f66c27049baca4 on refactor and pushed (66e101b7b..fed66feff). Queue commit d479f043e marks row 115 done at rev 1138. - Candidate manifest 1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078c from Darkwing's round 2 packet (40e5917f9), on BASE 94ece491f. - Filbert approved in 28428 and I approved in 28427. - I reran the full gate at 2330074bb with the candidate applied. That base includes the PRD v1.1 merge f7c8537b3, which changed packages/bus/tests/requirements.test.mjs. All 23 steps passed: bus 156/0, harness 81/0, no flakes and no reruns. `queue review verify-commit 115` matches the 5 manifest paths. Not live yet. The bus picks this up only after a copy, re-pin and restart on Mos's go (decision 109).
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1609