PM: a new run reads current launch state and task status before it plans (Vikunja #259) #1603
Closed
opened 2026-10-13 22:47:39 +00:00 by jarvis
·
5 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#1603
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.
Filed by Sage (as jarvis). Brief: docs/plans/2026-10-13_pm-tester-and-fresh-state.md, section "A new PM run reads current launch state and task status before it plans".
After the 21:48:52Z bus restart on 2026-10-13, PM run rf73f0192e824 said launches stay off, citing an old message, although launch_state reads allowed. It also planned to resume Vikunja 19/229-231, which are done. Fix: a read-only broker state verb; the runner puts a "Current state" block on each turn; turn headers show message age; one rule in roles/pm.md.
Owner Researcher, reviewer Filbert, gate owner Sage. Until it is live, nobody relaunches the coder and reviewer on the PM's current plan.
Review request for queue row 109, round 2: PM: a new run reads current launch state and task status before it plans
docs/plans/2026-10-13_pm-tester-and-fresh-state.md§ A new PM run reads current launch state and task status before it plans @ecfa8ba49d22daa942cd5d03597479c2e9f6bd159b8f7ec5dec135ce1fbc1138e95e5b8ea69dThe manifest:
Check a tree against it with
scripts/mosaic queue review verify-commit 109 REF.Post your verdict as a comment here, then record it:
Filbert review: row 109 round 2 (#1603): changes
Candidate manifest sha256
daa942cd5d03597479c2e9f6bd159b8f7ec5dec135ce1fbc1138e95e5b8ea69d(8 files). I rebuilt it in my own worktree at BASE02fe2d9d5withrow109.patch. All 8 hashes match,git diff --checkis clean, and no manifest path has drifted from02fe2d9d5to HEAD. The added lines have no dashes, bidi or control characters.Blocker
B1. Two tests outside the manifest fail with the patch. Both still expect the request to begin with the message header, but every request now begins with the state block.
packages/seat/tests/session.test.mjs:227:/^echo: Message .* from pm, class REQUEST:\n\nhello/. The test "a session runs in its sandbox as pid 1 of its namespace, claims, answers, and stops on mosaic stop" fails, 8/9 pass.packages/cli/tests/launcher.test.mjs:240:/^echo: Message .* from cto, class REQUEST:\n\nhello/. The test at line 203 fails, 16/17 pass.The reply body now reads
echo: Current state, read at ...:\nLaunches: allowed (never switched).\nOpen tasks: 0.\n\nMessage <id> from pm, sent <at>, class REQUEST:\n\nhello. On a clean BASE02fe2d9d5worktree the same two files pass, 9/9 and 17/17, so the patch causes both failures. Neither file is underscripts/test-*.sh, which may be why the packet's suite claims missed them.Fix: add both test files to the manifest and update the two assertions to the new request shape. Anchoring the block, the header with
sent, andhellois better than loosening the^. After that, run the package tests for seat and cli along with bus and harness.Sage's five checks (all pass on reading and in tests)
runner.mjsa throw fromclient.call("state")that isn't SESSION_GONE setsunread. The turn becomes{ok:false, reason}without callingrunTurn. The existing path then logsturn N ... failed, sends RESULTThe turn failed: could not read the current state: <code>(it skips this only for an incoming RESULT, as before), and runsmessage.read. SESSION_GONE logs and exits with EXIT.session. The runner test checks the RESULT text, in_reply_to, the read delivery, the stderr log, and thatturns/0001.stderrdoesn't exist, so no adapter ran.stateverb is read-only. It runskeys(a, [])and calls#agent(s)only for role sessions, so a non-holder role refusesnot-holder. Human and reader sessions read without a check, and the reader allowlist gainsstate. It does oneSELECTonevents, then#tasks(business,{done:false}), which only readstask_currentandevents. It has no insert, update or#eventcall.ORDER BY seq DESC LIMIT 1over the two launch kinds is the same rule as thelaunch_stateview (max(seq)), so the block agrees with therole.launchcheck.Message ...:header intobody, soTOOL,SLEEP,FAILandNOMARKERwould all have dropped through to echo. The regex takes the text after the header. The fallback keeps the old split for a request without a header. If the runner ever lost the header, the fallback could let the TOOL tests pass. The first end-to-end runner test anchors the whole request including the header, so that regression would still fail. Nothing is hidden.get_taskbefore planning to resume or launch work on it.get_taskis the tool name intools.mjs(unchanged).stateBlockwritesOpen tasks: <total>, the first <n> of cap <cap>.whenever the list is shorter than the total.statereturnscap: TASK_PAGE(50), andstate.test.mjschecks 55 open tasks give 50 shown, total 55 and cap 50. Launchatandeventcome from the newest launch event byseq. The revoke-then-restore tests (bus and runner) check that the restore's id and time win.Notes (not blocking)
state.test.mjscovers role and reader but not a human cap, and doesn't check that the verb writes nothing. One assertion each would pin both: the human's read equals the role's, and theeventsandmessagesrow counts are unchanged across astatecall.What I ran (single files, no slot)
bus/tests/state.test.mjs6/6,harness/tests/runner.test.mjs20/20,bus/tests/broker.test.mjs15/15,harness/tests/tools.test.mjs11/11,seat/tests/session.test.mjs8/9 (B1),cli/tests/launcher.test.mjs16/17 (B1). On BASE: session 9/9, launcher 17/17. I didn't rerun the mutants. Worktrees are removed and no process is left in them.Verdict: changes (B1).
Review request for queue row 109, round 3: PM: a new run reads current launch state and task status before it plans
docs/plans/2026-10-13_pm-tester-and-fresh-state.md§ A new PM run reads current launch state and task status before it plans @ecfa8ba49d220a62225ee6adcff0b2f581758e873fa135073d9ad900a2a835ff2bad9248ec16The manifest:
Check a tree against it with
scripts/mosaic queue review verify-commit 109 REF.Post your verdict as a comment here, then record it:
Filbert review: row 109 round 3 (#1603): approve
Candidate manifest sha256
0a62225ee6adcff0b2f581758e873fa135073d9ad900a2a835ff2bad9248ec16(11 files). I rebuilt it in my own worktree at BASE02fe2d9d5withrow109.patchfrom packet875c515e9. All 11 hashes match,git diff --checkis clean, and no manifest path has drifted from02fe2d9d5to HEAD. The added lines have no dashes, bidi or control characters.What changed since round 2
I applied the round 2 patch (
55c6cec73) to the same base in a second worktree and diffed the two trees. Five files differ, and only in these places:broker.mjs: the N1 comment now reads "role, reader and human sessions". The code is unchanged.state.test.mjs: two N2 tests. One checks that a human read deep-equals the role's read, with cap 50 and total 52. The other counts the rows in every table before and after astateread by a role, a reader and a human session, after a revoke and two snapshots soeventsandtask_snapshotsaren't empty, and requires the counts to be unchanged.seat/tests/session.test.mjs:229andcli/tests/launcher.test.mjs:242: B1 is fixed. Both now anchor the whole reply:^echo:, the block withnever switchedandOpen tasks: 0, the header with this message's id andsent, thenhello$. The session test matches the storedatexactly. The launcher test capturessentand checks it falls between just before the send and now.seat/tests/sandbox.test.mjs:218:adapter.shnow drops lines through theMessage ...:header, then the blank line after it. Under the round 2 patch this file fails 2 of 7 in my run, both confined-shell tests, so the fix is needed. It's a test fixture only.broker.mjscode,runner.mjs, the fixture, both READMEs andpm.mdare byte-identical to round 2. My round 2 findings on Sage's five checks still hold.The consumer grep
I ran build.md's
grep -rIn MOSAIC_REQUEST packages scripts adapters src | grep -v node_modules | grep -v '^packages/harness/'in the rebuilt tree. It lists exactly what build.md says: the sandbox test, the three adapters,adapters/README.mdandsrc/run-agent.sh. The mock adapter only checks that the variable is set, and pi and claude pass the whole text as the prompt. None parses the body. Insidepackages/harness/, the hits are the runner, the fake adapter, andpi-session.test.mjsandclaude-session.test.mjs, which give the real adapters a literal request rather than going through the runner.A wider sweep of the whole repo (minus v1, agents and docs) adds only
README.md:129andtasks/foundation-phase2-source-facts.json, both prose. I also grepped every package for assertions on the old reply or header shape (echo: Message,, class REQUEST:). OnlyturnRequestunit tests and the pi-session literals remain, and neither goes through a runner turn.Note (not blocking)
sed '1,/^Message .*:$/d'looks for the end of the range from line 2. A request whose header was on line 1, with no block above it, would lose everything through the nextMessage ...:line. Every runner request now starts with the block, so this can't happen today. It would only matter if the fixture were reused for a runner path without the block.What I ran (single files, no slot)
bus/tests/state.test.mjs8/8,harness/tests/runner.test.mjs20/20,seat/tests/session.test.mjs9/9,seat/tests/sandbox.test.mjs7/7 (5/7 under the round 2 patch),cli/tests/launcher.test.mjs17/17,bus/tests/broker.test.mjs15/15. I didn't rerun the mutants or the full package suites, and relied on the packet receipts for those. Both worktrees are removed and no process is left in them.Verdict: approve.
Landed as
badfa52b9on refactor (pushed, 9774d70db..badfa52b9). Filbert approve round 3, comment 28333, manifest 0a62225e;queue review verify-commit 109 badfa52b9matches (11 paths).Sage gate on
9774d70db(includes row 111) plus row109.patch: every package node suite and every scripts/test-*.sh green on the first run (bus 136, cli 178, harness 79, seat 119, queue 156, test-queue 28, release 14, task 98). Skipped 0 in bus, harness and seat, so the real bwrap case ran. #261 and #258 did not recur.Filbert note N1 (the fixture sed range works only because the block precedes the header) stands as a note. Not live: the bus, Console and CLI run from pinned copy
465bbdfbb. Vikunja #259 closes after the re-pin under Mos go and a fresh PM run that reports launch_state allowed.