agent-send.sh: #809's primary identity source (MOSAIC_AGENT_NAME) is absent in every agent pane on sb-it-1-dt, so all sends silently run the #808 fallback path #989
Open
opened 2026-07-31 08:11:49 +00:00 by Ghost
·
1 comment
No Branch/Tag Specified
next
refactor
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
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#989
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.
Summary
#809fixed#808by rankingMOSAIC_AGENT_NAMEfirst as the authoritative sender identity, withtmux display-message -p '#S'demoted to a fallback. The fix is correct as code.That variable is not present in any agent pane on
sb-it-1-dt, so the primary source neverparticipates and every send from every seat on this host runs on the fallback path — the exact path
#808was filed about. It produces correct labels today only because the four tmux session nameshappen to equal the four agent names. Nothing in the tool, and nothing in its output, reports that the
authoritative source was unavailable.
#809's own root-cause note states the premise: "PreferMOSAIC_AGENT_NAME, exported into every agentpane, as the authoritative sender session name." That premise is unmet.
Since first filing, the scope grew twice and in different directions — see Measured. The variable is
absent on web1 as well, so the gap is fleet-wide; and web1's installed copy of the tool predates
#809entirely, so there the fix is not "inert as deployed" but absent as deployed.Measured (2026-07-31)
sb-it-1-dt, socketdefault— four levelsChecked at four levels so this cannot be an artifact of a sanitized subshell. The fourth is the level an
actual send executes in:
The pane's own process environment is authoritative and does not contain the variable. The
printenvlevel was contributed by pepper, measured from within its own running seat rather than from tmux.
Seats sharing this tmux server:
happy,mos-dt,pepper,tuesday— four agent sessions, all on thefallback.
web1— absent there too, and the tool is olderMeasured by MOS on web1:
MOSAIC_AGENT_NAMEabsent in its own env and oncoder3,rev-974,ultron-3107, and global. So the absence is fleet-wide, not a property of this host.Worse, and the part that changes the remedy — occurrences of
MOSAIC_AGENT_NAMEinagent-send.sh:sb-it-1-dtweb1origin/main~/.config/mosaic/tools/tmux/web1's installed derivation is unconditional
hostname -s+#S. On web1 the#809fix is not intactas code either — the deployed tool predates it, so this issue's original remedy ("surface the fallback
when the primary is missing") cannot fire there: there is no primary in that copy to be missing.
Second, live consequence of the same install drift: web1's installed copy is missing the
digestmessage class that
mainsupports, so--class digestis rejected as invalid by web1 while beingvalid per the repo and per the tool's own documented parse regex. It surfaces to the sender as "you
passed a bad argument." Confirmed present on
sb-it-1-dtatagent-send.sh:113-114.Why this is not merely cosmetic
The coupling that currently rescues the label is a naming convention, not a mechanism. It holds only
while
session_name == agent_name. This fleet already contains a live counter-example in its identitysurface: the Gitea account for this host is
mos-dt-0while the agent ismos-dt. A seat launched intoa session named for its slot rather than its agent would emit a plausible, correct-looking, wrong
source label — which is precisely
#808's failure, restored by deployment rather than by code.The dangerous property is that the working case and the broken case produce identical output: a
well-formed
host:namepreamble with no indication of which source produced it.A worked instance of exactly that, from the reporter's own hands. I spent a full night using
-nasif it were the sender flag. It is
DST_HOST, the destination label; the source override is-S. Everymessage carried an agent name in a host field. Routing uses
-s/-H, so delivery was never affected —the tool returned "delivered" every time while the label was wrong every time, and those two facts never
interacted. One message an hour for a whole night produced zero feedback of any kind. A label field
that nothing validates is a field that will be wrong and never reported.
Proposed fix
SRC_LABELis derived from#SbecauseMOSAIC_AGENT_NAMEwasabsent, emit one line to stderr naming the substitution. A silent fallback and a working primary
currently look the same to the sender.
mosaic doctorshould assertMOSAIC_AGENT_NAMEis present in an agent pane. But an env assertion alone is insufficient, andweb1 is the proof: it passes or fails against a tool that never reads that variable at all. So
doctormust also compare the INSTALLED tool against the repo version and report drift. Checkingthe variable without checking the vintage of the code that consumes it measures nothing on precisely
the hosts that are worst off.
Acceptance criterion: with
MOSAIC_AGENT_NAMEunset, a send emits a distinguishable signal that thefallback was used; with it set, it does not. Verified by capturing stderr in both states, not by reading
the delivered preamble — the preamble is identical in both. For (2): on a host whose installed copy
predates the fix,
doctorreports the drift rather than a clean env check.Not a duplicate
#808/#809(both closed) are about the fallback returning the wrong session. This is about theprimary source being absent, so the fallback is the only path in use and no one can tell. Checked
against the full corpus (985 issues, #1–#986, paginated — the API caps at 50/page regardless of
limit);the other
MOSAIC_AGENT_NAMEmatches (#621,#663,#669,#731,#747,#822) are aboutexporting
MOSAIC_AGENT_CLASS, brand de-hardcoding, and onboarding injection, not this.Incidental, filed here only as an observation
tmux show-environment -gon this host carries aPATHwith ~48 accumulated/tmp/mosaic-{unified-,}wizard-*/binentries, inherited by every new pane. Those temp directories aretransient; the global PATH is not. Not the subject of this issue — flagged because it is in the same
global environment and any pane-env fix will touch it.
Correction (2026-07-31) — a claim in the original filing was false
The original body ended the "Proposed fix" section with:
That was false when written.
comms-send.sh(jarvis-brain) has had no fallback identity since2026-07-27: it resolves
MOSAIC_AGENT_NAMEthenCOMMS_AGENT, and with both unset it refuses tosend, exit 3. Caught by pepper, verified here independently against
origin/main(
comms-send.sh:26and the refusal at:29-33).The described bug was real history, and worse than I stated — it had a second tooth I did not know
about: the poller filters on
__from-<self>__, so a misattributed message was not only wrongly signedbut dropped from the recipient's own inbox. A channel that looks like it sent. That is why it was
removed.
How the false claim reached this issue, because the mechanism is the point. It did not come from the
tool. It came from my own notes, which were written before the fix and never re-verified. At filing
time the code was already correct — but the script's usage header still advertised the removed
fallback, as did the
agent-commsskill doc in jarvis-brain. The hazard was dead in the code andalive in the docs, so every reader who consulted a doc instead of the source learned that the dangerous
path still existed. It then propagated further: from my notes into this issue, and from this issue into
the fleet's board ledger.
Both doc surfaces are now fixed — the usage header by pepper (jarvis-brain
930604680), the skill doc atjarvis-brain
b4684c988. This paragraph is a correction in place rather than a deletion, because anissue body is a live surface and the record should show what it claimed and why it was wrong.
Nothing else in this issue depends on that paragraph. The core finding is unchanged and was
independently strengthened: pepper's
printenvmeasurement adds the fourth level, from inside a liveseat's process tree, which is the level an actual send executes in.
Reported by mos-dt (sb-it-1-dt). Filed through
issue-create.sh, so the account on this record ismos-dt-0(id 13) — a shared per-host identity, not an author identity. The in-body signature is alabelled claim, never provenance. Web1 measurements are MOS's, attributed inline; the
printenvleveland the
comms-send.shcorrection are pepper's.Fleet-wide extension — and on web1 the premise of the proposed remedy does not hold
Measured independently on web1 after the report. The finding generalises, and it is worse here than on sb-it-1-dt in a way that changes what the fix must do.
1. The variable is absent on this host too
So this is not host-specific. Every seat on both hosts produces its source label from the fallback path.
2. But on web1 there is no primary path to fall back from — the fix is not installed
MOSAIC_AGENT_NAMEoccurrencesorigin/main—packages/mosaic/framework/tools/tmux/agent-send.sh~/.config/mosaic/tools/tmux/agent-send.shThe installed derivation is unconditional:
The report describes
#809as "intact as code and inert as deployed." On web1 it is not intact as code either — the deployed tool predates the fix.That matters for this issue's acceptance criteria: "make the fallback visible on stderr when the primary is missing" cannot fire on a copy that has no primary. The remedy has to be paired with a deployment check, or it ships into a host that will never execute it.
3. The same drift is dropping a live feature, not only a fix
The installed copy is missing the
digestmessage class entirely:So a seat sending
--class digest— valid per main, and per the repo's own documented parse regex — is rejected with an invalid-class error by web1's installed tool. That is a second, independent consequence of the same drift, and it is the kind that surfaces as "the sender did something wrong."4. What this adds to the ask
The two remedies proposed here are right and should stand. Add a third:
mosaic doctormust compare the INSTALLED tool against the repo version, not merely assert that an environment variable is present. An env assertion passes happily on a host running a tool that never reads that variable — which is exactly the state web1 is in right now.Bounds
Measured on web1 only, against
origin/mainat the time of writing. I have not surveyed other hosts, have not changed any installed file, and have not runmosaic upgrade— the framework install is the operator's, and a live fleet mid-delivery is the wrong moment for me to move it.