Files
stack/docs/plans/2026-10-23_optional-tracker-brief.md
2026-10-23 18:14:32 -05:00

2.7 KiB

Optional tracker in the business file (Q247)

Written 2026-10-23 by Sage under Mos's mos-1555 (DECISIONS Q247; Jason can reverse it).

Brief: tracker becomes optional in the business file

Why. Row 323 (#1819) writes the .53 Case 1 factory business file. The factory has no tracker, and .53 has no Vikunja sync bot. Today every business file must carry tracker.sync with a bot and a vikunja token file, and both validate and boot refuse a missing token file (goldie-0009). Mos ruled the requirement an implementation constraint, not a PRD one (Q247), and chose an optional tracker over a dummy credential or a new bot (mos-1555).

What changes. A business file may omit the top-level tracker key.

  • Absent tracker means no tracker sync, no @sync credential, and no @sync registration in the bus.
  • A present tracker behaves exactly as today, with the same checks and the same refusals.
  • Every reader of the business tracker handles the absent case. The ones I found: packages/business/src/business.mjs:85-96 and :293-297 (checkTracker and the own-bot check), packages/business/src/cli.mjs:84-86 (validate's credential refs), packages/bus/src/runtime.mjs:131 and :247, packages/bus/src/broker.mjs:6123, packages/business/src/instance-settings.mjs:126, and packages/cli/src/config.mjs's trackerFor. Grep for the rest (git grep -n -E 'tracker\.sync|\.tracker\b' -- 'packages/*/src/*') and list every reader in BUILD.md with what it does when tracker is absent.
  • A role whose definition uses vikunja still needs its own tracker bot (business.mjs:143). That rule stays.

Tests. New tests only. No pre-existing test changes without Mos's OK (mos-1272); if one seems needed, stop and tell me.

  1. A business file with no tracker passes the loader and mosaic business validate.
  2. The bus boots with that file and raises no credential-file error, and @sync isn't registered.
  3. Existing fixtures, all of which carry a tracker, load unchanged. The existing suites show this.
  4. One mutant that skips the presence check, treating an absent tracker as present, is killed by a new test.

Gate. New test files whole, then the whole touched test files, then the mutant, all on my CLEAR. My landing gate is the full one (mos-1455).

Boundaries. No host action, no credentials read, no queue writes beyond your own claimant moves, no push to refactor. Use a new worktree off refactor on branch <seat>/row324. Push the branch, then report the tip, base and manifest to Sage. Record design notes in agents//work/queue-324/BUILD.md. Duckworth reviews, because this touches credential registration.

Acceptance. Row 323's file, written without tracker, passes validate and boots. Every file with a tracker behaves exactly as before.