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
No Branch/Tag Specified
next
refactor
feat/1311-credential-seat-store
fix/1257-adopt-draft-transition
docs/prd-rev1-ratification
r4-helper-port
docs/containerization-plan
feat/m4-4b-enrollment-command
feat/m4-4a-enrollment-schema
feat/m4-4-0-enrollment-design
feat/m4-3a-p1-stop-mission-task-status-writes
docs/m4-3a0-p0-map-currency
docs/c2-amendment1-company-crud
config/minimal-subset
feat/m4-1b-ii-hierarchy-commands
mosaic-cli-p1-wrappers
mosaic-cli-p1-dispatch
docs/ruling-4b-company-visibility
feat/m4-1b-hierarchy-gateway
feat/m4-1a-hierarchy-schema
feat/p6-e2e-ci-gate
feat/p5-spa-cutover
fix/1451-appservice-dockerfile-scripts
contract/onboarding-wizard
contract/custody-schema
contract/api-artifacts
fix/appservice-dockerfile-scripts
docs/t78-cli-capability-migration
contract/rollup-projection
contract/hierarchy-schema
fix/invariant-r-version-probe-retry
contract/mode-conversion
contract/tool-gateway-mapping
contract/rbac-grants
contract/identity-lifecycle
chore/s1-docs-hygiene
docs/ri-050-release-evidence
feat/webui-p4-2-settings-admin
fix/bootstrap-race
fix/teams-enumeration-scope
fix/1407-next-image-parity
docs/prd-north-star-rewrite
rescue/ms-gate-001-gatekeeper
fix/1394-recover-token-headless
fix/1390-uninstall-headless
fix/1403-n1n2-followup
fix/1391-validationpipe-boot-check
archive/salvage-20260825/wp5b-consumer-compat
wp5b-consumer-compat-2
archive/salvage-20260825/t63-fix-2648
archive/salvage-20260825/t63-fix-1389
archive/salvage-20260825/i1380ff-fix
i1380-guard
fix/send-message-exact-target-pin
t51p2wp0b
archive/ms24-fork
fix/ci-queue-wait-no-ci-merge-path
fix/credentials-gitea-seat-slots
feat/onboarding-scripts-framework
pr-1367
fix/1357-issue-view-comments
fix/1356-tea-login-fail-closed
fix/1362-harness-aware-delivery-confirm
fix/gitea-guessed-login-credential
docs/w4-document-contract
fix/d29-lease-revoke-noop
peggy/agent-send-unverified-label
fix/pr-merge-fork-ci-status
riv001-clean
docs/1216-trunk-parameterization
fix/1256-fleet-pane-path-node
fix/1017-enumeration-guard-population
fix/1182-fail-closed-launch
fix/1327-setuppath-idempotency
merge/main-into-next
ci/push-ci-comment-model
ci/pin-ci-base-image
fix/ci-queue-wait-no-status
fred/code-review-pinned-tool-rules
fred/guides-seat-identity-fleet-comms
fred/credential-fail-closed-seat-slots
fix/fleet-greenfield-blockers
feat/ri-050-qr-evaluator
archive/salvage-20260825/zane/doctor-greenfield-hint
archive/salvage-20260825/fix/ri-050-registry-secrets
archive/salvage-20260825/docs/ri-050-release-evidence
docs/ri-050-forge-docs-fastfollow
fix/ri-050-registry-secrets
test/ri-050-publish-gate-negative
archive/salvage-20260825/fix/ri-050-verify-pglite-path
fix/ri-050-verify-pglite-path
docs/ri-050-qr-probe-inventory
archive/salvage-20260825/zane/doctor-brain-home
feat/ri-050-web-stale-safety
archive/salvage-20260825/pr-1298
archive/salvage-20260825/zane/mosaic-home-support
docs/ri-050-mission-bootstrap
fix/ri-050-forge-fail-closed
feat/ri-050-publish-gate
fleet/continuation-record-2026-08-17
feat/ri-050-prd-authority
fix/ri-050-macp-fail-closed
fix/1280-identity-first-resolution
feat/w-f4-store
fix/1264-fleet-unattended-first-start
fix/1269-ci-chain-unblock
fix/1256-fleet-runtime-preflight
fix/1257-e7-draft-transition
fix/1240-fleet-transport-check
fix/1017-wire-start-agent-session
e2e-compose
fix/1241-launch-failure-visible
fix/1237-fleet-v2-dispatch
fix/1236-installer-dir-modes
fix/installer-path-and-node
feat/wf-fleet-mvp
fix/installer-provisions-node
fix/lease-test-env-isolation
release/0.0.50-integration
feat/wf5-main-merge
feat/wf5-securestorage
feat/1216-trunk-resolver
docs/1214-branch-process
docs/ia-merge-current
fix/869-lease-probe-timeout
main
feat/workspace-hygiene-tool-enforcement
feat/1080-pr-edit
fix/1179-required-security-di
feat/p3-slice0-task5-chat-runtime-router-shaggy
feat/p3-slice0-task5-chat-runtime-router
feat/wf1-composition
feat/p3-slice0-task4-web-catalog-selection
feat/lease-promotion-and-harness-isolation
ci/provision-pi-runtime
feat/p3-slice0-task3-catalog-selection
feat/p3-slice0-task2-harness-registry
adopt/965-mos-ste-writing-standard
fix/991-comment-url-scheme-normalise
feat/wf2-bundle-migration
feat/wf4-plugin-acquisition
feat/wf5-refresh-safety
fix/1145-coord-di-compiled-boot
feat/p3-slice0-task1-harness-contracts
docs/webui-phase-p-structure
feat/1150-pi-goal-extension
feat/webui-p3-chat
fix/1146-ci-queue-purpose
fix/1138-conditional-federation
feat/webui-p2-data-auth
fix/gateway-runner-image
feat/webui-p1-vite-skeleton
fix/break-c-hooks-and-web-image
docs/webui-fleet-claude-bridge-plan
fix/wizard-gateway-failure
fix/next-node-gate
fix/mosaic-init-rce
greenfield/fomo-lin
fix/1099-pipefail-wake
fix/1099-pipefail-tests
fix/1099-pipefail-sweep
fix/framework-shell-portability
fix/1043-pane-git-identity
fix/1081-issue-close-silent-comment-failure
fix/1090-enrollment-wallclock-tolerance
feat/1082-tea-stale-token-diagnostic
fix/detect-platform-silent-128-outside-repo
feat/1050-install-state-machine-red-fixture
fix/pr-merge-message-field
feat/1051-mosaic-brain-installer
feat/1045-mosaic-cred
remediation/state
fix/1056-upgrade-rollback-control-race
fix/1019-ci-queue-timeout-harness
feat/rm-02-gate-registry
fix/rm-01-reproducible-checkout
remediation/mission-setup
fix/hygiene-inert-format-gate
fix/1019-queue-guard-stdin
feat/mos-ste-writing-standard
fix/1017-enumeration-guard
fix/1007-suite-hermeticity
feat/push-guard-null-case-verification
feat/wake-preimage-provenance
mos-comms-live
docs/heartbeat-framework-layering-ms-lead
feat/869-c4-version-coupling
feat/869-c2-install-ordering-guard
feat/869-c5-doctor-activation-check
feat/per-agent-gitea-identity
fix/875-belongs-case-insensitive-slug
fix/ci-queue-wait-404-branch-absent
feat/869-c1-activation-probe
feat/869-c3-broker-supervisor
fix/865-tea-cli-comment-invocation
feat/glpi-skills
fix/860-deflake-mutator-lease-gate
fix/850-detect-platform-port-normalization
fix/856-worktree-deps-preflight
fix/835-pr-review-approve-reject-comment-flag
fix/848-truthful-evidence
fix/812-pr-review-comment
fix/849-recovery-runtime-fixture-race
docs/758-ledger-m5-001-sync
feat/834-tc-server-side-doc
feat/833-constrained-recovery-command
feat/827-gate0-probe
governance/gate0-probe3-amendment
fix/795-codex-pr-diff
fix/795-ci-base-jq
fix/795-ci-base-git
feat/791-pr3-fleet-regen
feat/791-pr2-snapshot-restore
fix/807-glpi-206
fix/808-agent-send-false-sender
feat/791-upgrade-config-protection
feat/790-mosaic-yolo-claudex-pr2
feat/790-mosaic-yolo-claudex
feat/758-v1-v2-migrator
fix/766-exact-fleet-comms
test/758-reconciler-lifecycle-gates
docs/771-kbn101-db-role-split
test/758-example-profile-dispositions
feat/758-shared-role-resolution
feat/mos-logical-identity-fencing
feat/769-kbn100-unified-schema
docs/753-kbn010-threat-gate
feat/758-roster-v2-compiler
feat/756-official-discord-plugin
fix/mos-option2-qualification-format
docs/issue-758-m0
docs/mos-option2-qualification
mos-comms
feat/tess-interaction-agent
fix/tess-docs-format
draft/mosaic-platform-prd
fix/installer-provider-gate-and-local-gateway-redis
release/mosaic-cli-0.0.37
feat/framework-constitution-alpha
fix/git-wrapper-repo-detection
fix/woodpecker-wrapper-legacy-mosaic
fix/t-a292e96f-gitea-pr-metadata
fix/gitea-pr-metadata-login-t-a292e96f
fix/t_a292e96f-pr-metadata-gitea
fix/t_3a368a52-gitea-usc-login
fix/bootstrap-hotfix
fix/populate-known-packages-list
fix/idempotent-init
archive/salvage-20260825/fix/ci-prisma-generate
archive/salvage-20260825/feat/ms-gate-001-gatekeeper-local
archive/salvage-20260825/feat/ms-gate-001-gatekeeper
archive/salvage-20260825/feat/ms24-ci-webhook
archive/salvage-20260825/fix/mission-control-proxy-routes
archive/salvage-20260825/fix/deploy-missing-env-and-networks
archive/salvage-20260825/fix/mission-control-query-provider
archive/salvage-20260825/test/ms23-p2
archive/salvage-20260825/feat/ms23-p2-audit
archive/salvage-20260825/feat/ms23-p2-roster
archive/salvage-20260825/feat/ms23-p1-proxy
archive/salvage-20260825/feat/ms23-p1-registry
archive/salvage-20260825/feat/ms23-p1-internal-provider
archive/salvage-20260825/feat/ms23-p1-interface
archive/salvage-20260825/chore/ms23-tasks-p0-complete
archive/salvage-20260825/test/ms23-p0
archive/salvage-20260825/chore/ms23-tasks-p005-006
archive/salvage-20260825/feat/ms23-p0-tree
archive/salvage-20260825/chore/ms23-tasks-p004-005
archive/salvage-20260825/feat/ms23-p0-controls
archive/salvage-20260825/chore/ms23-tasks-p0-002-004
archive/salvage-20260825/feat/ms23-p0-stream
archive/salvage-20260825/fix/ms23-prisma-rm-symlink
archive/salvage-20260825/fix/ms23-prisma-kaniko-symlink
archive/salvage-20260825/fix/ms23-prisma-script-path
archive/salvage-20260825/fix/ms23-prisma-docker-vs-ci
archive/salvage-20260825/fix/ms23-prisma-schema-local
archive/salvage-20260825/fix/ms23-prisma-api-pkg
archive/salvage-20260825/fix/ms23-prisma-cli
archive/salvage-20260825/fix/ms23-orchestrator-prisma-generate
archive/salvage-20260825/feat/ms23-p0-ingestion
archive/salvage-20260825/feat/ms23-p0-schema
archive/salvage-20260825/fix/agent-template-auth-module
archive/salvage-20260825/feat/ms22-p2-discord-router
archive/salvage-20260825/test/ms22-p2-agent-tests
archive/salvage-20260825/chore/ms22-p2-docs-update
archive/salvage-20260825/feat/ms22-p2-agent-routing
archive/salvage-20260825/chore/ms22-p2-update-docs
archive/salvage-20260825/feat/ms22-p2-user-agents
archive/salvage-20260825/feat/ms22-p2-agent-crud
archive/salvage-20260825/fix/security-audit-multer
archive/salvage-20260825/ci/portainer-deploy
archive/salvage-20260825/fix/ms21-missing-user-auth-migration
archive/salvage-20260825/infra/fix-mosaic-db-init-extensions
archive/salvage-20260825/infra/migrate-to-openbrain-db
archive/salvage-20260825/fix/flaky-queue-test
archive/salvage-20260825/fix/deploy-service-names
archive/salvage-20260825/fix/deploy-service-update
archive/salvage-20260825/fix/deploy-user-v2
archive/salvage-20260825/fix/deploy-user
archive/salvage-20260825/fix/orchestrator-widget-endpoints
archive/salvage-20260825/fix/dashboard-widget-mock-data
archive/salvage-20260825/fix/ci-glibc-image
archive/salvage-20260825/fix/dockerfile-npmrc
archive/salvage-20260825/fix/matrix-native-binary
archive/salvage-20260825/fix/kaniko-cache
archive/salvage-20260825/fix/base-image-kaniko-v2
archive/salvage-20260825/fix/base-image-kaniko
archive/salvage-20260825/feat/custom-base-image
archive/salvage-20260825/ci/pnpm-cache
archive/salvage-20260825/fix/interceptor-tests
archive/salvage-20260825/fix/kanban-tests
archive/salvage-20260825/feat/wire-chat
archive/salvage-20260825/feat/usage-widget
archive/salvage-20260825/feat/usage-widget-review
archive/salvage-20260825/fix/security-hardening
archive/salvage-20260825/fix/project-domain-attach
archive/salvage-20260825/fix/project-domain-v2
archive/salvage-20260825/feat/kanban-add-task
archive/salvage-20260825/fix/logs-page-clean
archive/salvage-20260825/fix/logs-page
archive/salvage-20260825/fix/workspace-members
archive/salvage-20260825/fix/ci-lint-632
archive/salvage-20260825/fix/lint-from-632
archive/salvage-20260825/fix/file-manager-tags
archive/salvage-20260825/fix/csrf-debug-log
archive/salvage-20260825/fix/controller-type-imports
archive/salvage-20260825/fix/system-admin-env
archive/salvage-20260825/fix/gateway-cors-trusted-origins
archive/salvage-20260825/fix/fleet-provider-form-dto-v2
archive/salvage-20260825/fix/ms22-audit
archive/salvage-20260825/fix/orchestrator-widgets
archive/salvage-20260825/fix/fleet-provider-form-dto
archive/salvage-20260825/fix/orchestrator-widgets-preexisting
archive/salvage-20260825/fix/csrf-bearer-bypass
archive/salvage-20260825/fix/ms22-missing-authmodule-imports
archive/salvage-20260825/fix/container-lifecycle-config-module
archive/salvage-20260825/fix/swarm-compose-ms22-vars
archive/salvage-20260825/chore/ms22-p1-complete
archive/salvage-20260825/feat/ms22-p1k-idle-reaper
archive/salvage-20260825/feat/ms22-p1j-docker
archive/salvage-20260825/feat/ms22-p1e-onboarding-api-work
archive/salvage-20260825/feat/ms22-p1c-config-api
archive/salvage-20260825/chore/ms22-prd-tracking
archive/salvage-20260825/feat/ms22-p1b-crypto
archive/salvage-20260825/docs/ms22-architecture
archive/salvage-20260825/feat/ms22-openclaw-docker
archive/salvage-20260825/feat/ms22-openclaw-gateway-module
archive/salvage-20260825/chore/ms21-complete
archive/salvage-20260825/chore/ms21-final-tasks-done
archive/salvage-20260825/fix/ms21-ui-001-qa
archive/salvage-20260825/feat/ms22-openclaw-docker-backup-20260301
archive/salvage-20260825/chore/ms22-phase0-complete
archive/salvage-20260825/feat/ms21-ui-teams-rbac-v3
archive/salvage-20260825/test/ms22-integration
archive/salvage-20260825/feat/ms22-ingest-clean
archive/salvage-20260825/feat/ms21-ui-users-members
archive/salvage-20260825/feat/ms22-ingest
archive/salvage-20260825/feat/ms22-task-agent
archive/salvage-20260825/chore/ms22-tasks-tracking
archive/salvage-20260825/feat/ms21-ui-teams-rbac
archive/salvage-20260825/fix/openbao-otel-cve
archive/salvage-20260825/ci/unified-pipeline
archive/salvage-20260825/feat/ms22-conversation-archive
archive/salvage-20260825/feat/ms22-agent-memory
archive/salvage-20260825/feat/ms22-findings
archive/salvage-20260825/feat/ms22-knowledge-schema
archive/salvage-20260825/chore/tasks-final
archive/salvage-20260825/chore/tasks-update
archive/salvage-20260825/feat/ms21-session-invalidation
archive/salvage-20260825/feat/ms21-rbac-settings
archive/salvage-20260825/feat/ms21-rbac
archive/salvage-20260825/feat/ms21-ui-user-dialogs
archive/salvage-20260825/feat/ms21-ui-workspace-members
archive/salvage-20260825/feat/ms21-ui-teams
archive/salvage-20260825/chore/ms21-tasks-ui-progress
archive/salvage-20260825/feat/ms21-ui-workspaces
archive/salvage-20260825/feat/ms21-ui-users
archive/salvage-20260825/chore/ms21-tasks-schema-fix
archive/salvage-20260825/feat/ms21-import-api
archive/salvage-20260825/test/ms21-migration-tests
archive/salvage-20260825/feat/ms21-teams-page
archive/salvage-20260825/feat/ms21-users-page
archive/salvage-20260825/chore/ms21-task-update-p1-p3
archive/salvage-20260825/feat/ms21-admin-module
archive/salvage-20260825/fix/websocket-reconnect
archive/salvage-20260825/merge/develop-to-main
skill-lifecycle-v1
onboarding-v1
agent-seats-v1
interactive-agent-v1
auto-apply-v1
session-fork-v1
retention-v1
mission-policy-v1
conductor-v1
workspace-capabilities-v1
sessions-v1
operator-ergonomics-v1
adapter-seam-v1
release-model-v1
mission-task-v1
config-hello-v1
poc-container-hello-v0
v0.0.39-alpha
mosaic-v0.0.31
fed-v0.2.0-m2
fed-v0.1.0-m1
mosaic-v0.0.29
mosaic-v0.0.28
mosaic-v0.0.27
mosaic-v0.0.26
mosaic-v0.0.25
mosaic-v0.0.24
v0.2.0
v0.1.0
v0.0.8
v0.0.7
v0.0.6
v0.0.5
v0.0.4
archive/ms24-fork-20260823
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Assignees
code-be-01 (Mosaic fleet seat code-be-01)
code-be-02 (Mosaic fleet seat code-be-02)
code-dogfood-01 (Mosaic fleet seat code-dogfood-01)
code-infra-01 (Mosaic fleet seat code-infra-01)
darkwing (Mosaic fleet seat darkwing)
dewey (Mosaic fleet seat dewey)
fargo
filbert (Mosaic fleet seat filbert)
fred
gate-merge-01 (Mosaic fleet seat gate-merge-01)
happy
jason.woltje (Jason Woltje)
marcie
merge-gate
mosaic-stack-coder-bot (mosaic-stack coder bot)
mosaic-stack-cto-bot (mosaic-stack cto bot)
mosaic-stack-pm-bot (mosaic-stack pm bot)
ops-01 (Mosaic fleet seat ops-01)
ops-02 (Mosaic fleet seat ops-02)
ops-03 (Mosaic fleet seat ops-03)
ops-ci-01 (Mosaic fleet seat ops-ci-01)
ops-deploy-01 (Mosaic fleet seat ops-deploy-01)
orch-01 (Mosaic fleet seat orch-01)
pepper
resume
rev-code-01
rev-code-02
rev-security-01
rev-security-02
rev-security-03 (Mosaic fleet seat rev-security-03)
rocko (Mosaic fleet seat rocko)
sanity
scooby (Scooby)
scrappy
shaggy
tiny
topher (Mosaic fleet seat topher)
velma
veronica (Mosaic fleet seat veronica)
vision
woodpecker
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mosaicstack/stack#1609
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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:
prd.approve, routed to human) at 16:12:12.900Z.yesfrom the CLI at 16:15:35.512Z.decision_eventshas one row: op resolved, by jason, via cli. Event 346 is itshuman.inputanswer.Cause, in
packages/bus/src/broker.mjsatcc48b124f(live):decision.resolveanddecision.withdrawwrite adecision_eventsrow and, for a human, ahuman.inputevent. They write no message.message.receivereads onlymessagesaddressed to the role, and the harness runner (packages/harness/src/runner.mjs) takes a turn only for a received message.raise_decisiontool 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.Review request for queue row 115, round 1: A closed decision sends the raising role a message
docs/plans/2026-10-14_decision-close-message.md§ A closed decision sends the raising role a message @1dedf1fb76bff37bc933bbfd2e5f10fd5dd500f60a37e16de324c4e63395bb8d62cc3b5068abThe manifest:
Check a tree against it with
scripts/mosaic queue review verify-commit 115 REF.Post your verdict as a comment here, then record it:
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 BASE94ece491fwithbuild.patchfrom packetb3fca1f1a. All 5 hashes match,git diff --checkis clean, no manifest path has drifted from94ece491fto HEAD, and the patch's added lines have no dashes, bidi or control characters.The brief, item by item
decision.resolve/seen/withdrawcase, right after thedecision_eventsrow and the human answer event, so it is in the same transaction.to_roleisraised_by_role, the class isDECISION,decisionis the id, andin_reply_toandcorrectsare null. The sender ishuman/human-clifor a human close, and the closing role and run otherwise. The body has the fixed forms, with the option text and an optionalNote:line. It is routed through#holderand#deliverythe same waymessage.sendroutes.s.run !== d.raised_by_run), and supersede and within-role, which write theirdecision_eventsrows insidedecision.raiseand never reach this case.request. See C1.runner.test.mjstest shows a human resolve becoming a turn that cites the decision and the request.single-use.test.mjs.The close paths Darkwing asked about
decision_eventshas three writers inbroker.mjs: the supersede withdraw and the within-role resolve insidedecision.raise, and this case. The broker never writesexpired. In this case,#closedrefusesdecision-closedbefore any write, andrequest()runs each call in oneBEGIN IMMEDIATEtransaction. 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, whichdecision.raisenever 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 firsthuman.inputanswer event, filtered toop IN ('resolved','withdrawn'). A humandecision.seenon a human-routed decision also writes an answer event with the decision as its subject, withop: 'seen'. I removedAND json_extract(body,'$.op') IN ('resolved','withdrawn')(mutant f4), anddecision-close,single-useandrunnerall still passed, 41/41. No test has the human run seen and then close the same decision. In the no-message test, the human seenstoHumanbut 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,requestis 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'shuman.inputanswer event"). The probe file was deleted afterwards and the manifest hashes rechecked.Fix: add a test where the human runs
decision.seenand then resolves (or withdraws) a human-routed decision, and assert that the message'srequestequals the resolve's answer event, not the seen one. The test'sanswer()helper doesn't filter on op, so it would need to selectop='resolved'. The broker needs no change.Mutants, rerun by me (
decision-close,single-useand harnessrunnertogether)route_to)ownonly)Note:line droppedI restored the source after each one and rechecked all 5 hashes.
What I ran (single files, no slot)
bus:
decision-close7/7,single-use12/12,decisions7/7,broker16/16,messages4/4,review8/8,tester11/11. harness:runner22/22. I also ran the mutants and the probe above. I didn't rerun the full gate and relied ongate-run.logfor it (bus 155, harness 81,GATE_PASSED). The worktree is removed and no process is left in it.Verdict: changes (C1, one test).
Review request for queue row 115, round 2: A closed decision sends the raising role a message
docs/plans/2026-10-14_decision-close-message.md§ A closed decision sends the raising role a message @1dedf1fb76bf1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078cThe manifest:
Check a tree against it with
scripts/mosaic queue review verify-commit 115 REF.Post your verdict as a comment here, then record it:
Sage: approve row 115 round 2, candidate manifest 1910eb5a672e670cb7c8a197ee3fdd888412dd803fe52a0a15680103c26c078c (packet
40e5917f9, BASE94ece491f).I read the broker change, the README rows and all 9 new tests against the brief.
raised_by_role, fromhuman/human-clior the closing role and run, and routed likemessage.send. The body is the fixed form, and the note line appears only when a note was given.string()rejects a null note, soa.note === undefinedanda.note ?? nullagree.#requestonly 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 humanmessage.sendof class DECISION keeps its own instruction, which the last test checks.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.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 BASE94ece491fwithbuild.patchfrom packet40e5917f9. All 5 hashes match,git diff --checkis clean, no manifest path has drifted from94ece491fto 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.mjsdiffers (36b9ae4a to 1bdf24d1).broker.mjs, the README,single-use.test.mjsandrunner.test.mjskeep 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
requestequal to theresolvedandwithdrawnanswer events, in that order, and each differs from its decision's seen event.answer()now filters on op, defaulting toresolved, and the withdraw test asks forwithdrawn. 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 randecision-close,single-useand harnessrunnertogether. 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 matchesmutants-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.mjshas 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-close8/8,single-use12/12. harness:runner22/22. I also ran the f4 mutant above. I didn't rerun the full gate and relied ongate-run.logfor it:GATE_PASSEDat 17:00:04, bus 156/0, harness 81/0. The worktree is removed and no process is left in it.Verdict: approve.
Landed as
d90482030aon refactor and pushed (66e101b7b..fed66feff). Queue commitd479f043emarks row 115 done at rev 1138.40e5917f9), on BASE94ece491f.2330074bbwith the candidate applied. That base includes the PRD v1.1 mergef7c8537b3, 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 115matches 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).