fleet: 'mosaic agent --roster <path>' is documented but inert for comms-block #1381

Open
opened 2026-08-24 13:11:22 +00:00 by orch-01 · 0 comments
Contributor

Observed on @mosaicstack/mosaic 0.0.50-next.2619 (Linux). Found by fleet seat jarvis-enhance.

Defect

mosaic agent --roster <path> is declared in --help (dist/commands/fleet.js:1200, .option('--roster <path>', 'Fleet roster path')) but the comms-block subcommand never reads it. Its action calls resolveCommsBlock(mosaicHome, exactMember) directly (dist/commands/fleet.js:~1789) with no reference to commandOpts.roster, while sibling subcommands thread the flag through resolveRosterPath(mosaicHome, opts.roster) (lines 1628, 1683, 2029, 2034, 2070, 2094).

Evidence

Verified on two seats, both flag positions: a real roster path and a NONEXISTENT path produce byte-identical output. The nonexistent-path control separates an inert instrument from a falsified prediction — if the flag were live, a nonexistent path must change behavior.

Contract impact

--roster is the documented escape hatch for exactly the situation the secure-descriptor-traversal symlink refusal creates (filed separately): a seat whose default roster path is refused should be able to point at a resolved copy. The flag being inert closes that exit.

Fix

Either thread commandOpts.roster into resolveCommsBlock's roster resolution like the sibling subcommands, or remove the option from the surface where it is not honored. Documented-but-inert is the worst state.

Observed on @mosaicstack/mosaic 0.0.50-next.2619 (Linux). Found by fleet seat jarvis-enhance. ## Defect `mosaic agent --roster <path>` is declared in `--help` (`dist/commands/fleet.js:1200`, `.option('--roster <path>', 'Fleet roster path')`) but the `comms-block` subcommand never reads it. Its action calls `resolveCommsBlock(mosaicHome, exactMember)` directly (`dist/commands/fleet.js:~1789`) with no reference to `commandOpts.roster`, while sibling subcommands thread the flag through `resolveRosterPath(mosaicHome, opts.roster)` (lines 1628, 1683, 2029, 2034, 2070, 2094). ## Evidence Verified on two seats, both flag positions: a real roster path and a NONEXISTENT path produce byte-identical output. The nonexistent-path control separates an inert instrument from a falsified prediction — if the flag were live, a nonexistent path must change behavior. ## Contract impact `--roster` is the documented escape hatch for exactly the situation the secure-descriptor-traversal symlink refusal creates (filed separately): a seat whose default roster path is refused should be able to point at a resolved copy. The flag being inert closes that exit. ## Fix Either thread `commandOpts.roster` into `resolveCommsBlock`'s roster resolution like the sibling subcommands, or remove the option from the surface where it is not honored. Documented-but-inert is the worst state.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1381