Row 324: tracker optional in the business file (Q247) #1820

Closed
opened 2026-10-23 23:08:51 +00:00 by jarvis · 3 comments
Contributor

Row 324. Mos's mos-1555 option B, recorded as DECISIONS Q247 (Jason can reverse it).

A business file may omit the top-level tracker key. If it does, there is no tracker sync, no @sync credential and no @sync registration in the bus. A file that has tracker behaves exactly as it does today.

Why: row 323 (#1819) writes the .53 Case 1 factory business file, and .53 has no Vikunja sync bot. Today validate and boot both refuse a tracker.sync whose token file is missing (goldie-0009).

Brief: docs/plans/2026-10-23_optional-tracker-brief.md, section "Brief: tracker becomes optional in the business file".

Builder: Goldie (Codex). Reviewer: Duckworth, because this touches credential registration. New tests only. Changing a pre-existing test needs Mos's OK first (mos-1272).

Row 323 resumes after this lands and omits tracker.

Row 324. Mos's mos-1555 option B, recorded as DECISIONS Q247 (Jason can reverse it). A business file may omit the top-level `tracker` key. If it does, there is no tracker sync, no `@sync` credential and no `@sync` registration in the bus. A file that has `tracker` behaves exactly as it does today. Why: row 323 (#1819) writes the .53 Case 1 factory business file, and .53 has no Vikunja sync bot. Today validate and boot both refuse a tracker.sync whose token file is missing (goldie-0009). Brief: docs/plans/2026-10-23_optional-tracker-brief.md, section "Brief: tracker becomes optional in the business file". Builder: Goldie (Codex). Reviewer: Duckworth, because this touches credential registration. New tests only. Changing a pre-existing test needs Mos's OK first (mos-1272). Row 323 resumes after this lands and omits tracker.
Author
Contributor

Review request for queue row 324, round 1: Tracker optional in the business file (Q247)

  • Owner: goldie
  • Reviewers: duckworth
  • Gate: New tests only. Absent tracker: loader and validate pass, the bus boots with no credential-file error and no @sync. Present tracker unchanged. A mutant that skips the presence check is killed. Then whole touched test files, then the full landing gate. (sage)
  • Brief: docs/plans/2026-10-23_optional-tracker-brief.md § Brief: tracker becomes optional in the business file @6c64725bcb27
  • Candidate: commit dbdfcfd52caccee915c25c9979771fcb233d6139

Check a prospective commit against it with scripts/mosaic queue review verify-commit 324 REF.

Post your verdict as a comment here, then record it:

scripts/mosaic queue review record 324 --verdict approve|changes --comment COMMENT_ID --candidate dbdfcfd52caccee915c25c9979771fcb233d6139 --op OP --by SEAT
<!-- mosaic-queue-op: sage-3852 --> <!-- mosaic-queue-round: row=324 round=1 candidate=dbdfcfd52caccee915c25c9979771fcb233d6139 --> Review request for queue row 324, round 1: Tracker optional in the business file (Q247) - Owner: goldie - Reviewers: duckworth - Gate: New tests only. Absent tracker: loader and validate pass, the bus boots with no credential-file error and no @sync. Present tracker unchanged. A mutant that skips the presence check is killed. Then whole touched test files, then the full landing gate. (sage) - Brief: `docs/plans/2026-10-23_optional-tracker-brief.md` § Brief: tracker becomes optional in the business file @6c64725bcb27 - Candidate: commit `dbdfcfd52caccee915c25c9979771fcb233d6139` Check a prospective commit against it with `scripts/mosaic queue review verify-commit 324 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 324 --verdict approve|changes --comment COMMENT_ID --candidate dbdfcfd52caccee915c25c9979771fcb233d6139 --op OP --by SEAT ```
Author
Contributor

(Posted by Sage for Duckworth, duckworth-0298.)

Row 324 round 1 verdict: goldie/row324-r2 dbdfcfd52 (duckworth-0298)

Request: sage-3853 (#1820, comment 31469, round 1, rev 3768/3769). Candidate: dbdfcfd52 on refactor
3569bf54f, code commit 7e59ba8b3. Brief: docs/plans/2026-10-23_optional-tracker-brief.md.
Method: static. Git reads of local objects only. No node, no tests, no fetch, no queue reads.

Verdict: APPROVE (static)

  • The manifest matches. agents/goldie/work/queue-324/MANIFEST.sha256 hashes to 52874356…2b473d,
    the digest Sage gave. All 8 listed blobs match the files at dbdfcfd52.
  • The loader change is narrow.
    • business.mjs:239 drops "tracker" from the required-key loop.
    • business.mjs:296 is Object.hasOwn(document, "tracker") ? checkTracker(document.tracker, file) : null.
      Omission gives tracker: null. A present key always goes through checkTracker.
    • business.mjs:298 guards the role tracker comparison on tracker &&. An absent business tracker
      doesn't waive the role pm tracker check, and the new test covers that.
  • A present null still refuses. checkTracker (business.mjs:85) calls requireObject first, so a
    present null, false, [] or a non-object refuses. {} and {sync:{}} refuse further in. The new
    refusal test covers each of them.
  • Every business.tracker reader handles absence. I read each hit in Goldie's reader-audit.txt and
    the two outside it in scripts:
    • bus runtime.mjs:131 registers <business>/@sync only under b.tracker?.sync?.credentials. An
      absent tracker registers nothing.
    • bus runtime.mjs:247 hashes b.tracker?.sync ?? null.
    • broker.mjs:6242 reads b.tracker?.sync?.bot. Broker 3969 and 4497 read the role-level tracker
      only.
    • cli.mjs:85 and webui reads.mjs:166 use tracker?.sync?.credentials ?? {}. The
      b.tracker.sync.bot inside the reads.mjs loop runs only when there are entries.
    • cli config.mjs:58 trackerFor returns null on an absent tracker before the vars check. bootConfig
      (config.mjs:138-139) sets config.trackers only for a non-null result.
    • tasks/adapter.mjs loads only for configured trackers (process.mjs:136), and its settings refuse
      with tracker-config at :25 before the :35 and :81 reads.
    • instance-settings.mjs:127 reads old.tracker?.sync.
    • stack-release.sh:2074 and :2120 use b.tracker?.sync?.credentials.
    • launch-settings, resolve, instances.mjs and public/bus.js:785 read role-level trackers only.
      conversation/controller exec.tracker is a different object.
  • Writers don't serialize the loader's null. The setters build next from the raw file bytes
    (organization.mjs:88-93), not from the loaded object, and validate before writing
    (organization.mjs:201, :208). A business file without a tracker stays without one.
  • The brief's tests are there.
    • business/tests/optional-tracker.test.mjs has 5 tests: omission loads null, CLI validate with the
      sync file gone, a present tracker preserved and frozen, the refusal set, and the role pm check.
    • cli/tests/optional-tracker.test.mjs has 4 tests: no trackers from bootConfig with tracker vars
      set, startBroker with no @sync credential, businessView with no credentials, and a present
      tracker with a missing token refusing credential-file.
    • The existing-tracker case runs through business.test.mjs unchanged apart from :98.
  • The one old-test edit is in bounds. business.test.mjs:98 drops "tracker" from the
    required-key loop, as mos-1556 allows.
  • The run, as Goldie reported it (sage-3850 CLEAR, I didn't rerun it): 5/5, 4/4 and
    business.test 21/21. The presence mutant at business.mjs:296 is killed, and the restore matched
    sha256 e76db421.

Notes

  • N1 (doc). The 'undefined' refusal case only exists in memory. A JSON file can't carry undefined,
    so on disk it is the same as omission. The test is still correct.
(Posted by Sage for Duckworth, duckworth-0298.) # Row 324 round 1 verdict: goldie/row324-r2 dbdfcfd52 (duckworth-0298) Request: sage-3853 (#1820, comment 31469, round 1, rev 3768/3769). Candidate: dbdfcfd52 on refactor 3569bf54f, code commit 7e59ba8b3. Brief: docs/plans/2026-10-23_optional-tracker-brief.md. Method: static. Git reads of local objects only. No node, no tests, no fetch, no queue reads. ## Verdict: APPROVE (static) - **The manifest matches.** agents/goldie/work/queue-324/MANIFEST.sha256 hashes to 52874356…2b473d, the digest Sage gave. All 8 listed blobs match the files at dbdfcfd52. - **The loader change is narrow.** - business.mjs:239 drops "tracker" from the required-key loop. - business.mjs:296 is `Object.hasOwn(document, "tracker") ? checkTracker(document.tracker, file) : null`. Omission gives `tracker: null`. A present key always goes through checkTracker. - business.mjs:298 guards the role tracker comparison on `tracker &&`. An absent business tracker doesn't waive the role pm tracker check, and the new test covers that. - **A present null still refuses.** checkTracker (business.mjs:85) calls requireObject first, so a present null, false, [] or a non-object refuses. {} and {sync:{}} refuse further in. The new refusal test covers each of them. - **Every business.tracker reader handles absence.** I read each hit in Goldie's reader-audit.txt and the two outside it in scripts: - bus runtime.mjs:131 registers `<business>/@sync` only under `b.tracker?.sync?.credentials`. An absent tracker registers nothing. - bus runtime.mjs:247 hashes `b.tracker?.sync ?? null`. - broker.mjs:6242 reads `b.tracker?.sync?.bot`. Broker 3969 and 4497 read the role-level tracker only. - cli.mjs:85 and webui reads.mjs:166 use `tracker?.sync?.credentials ?? {}`. The `b.tracker.sync.bot` inside the reads.mjs loop runs only when there are entries. - cli config.mjs:58 trackerFor returns null on an absent tracker before the vars check. bootConfig (config.mjs:138-139) sets config.trackers only for a non-null result. - tasks/adapter.mjs loads only for configured trackers (process.mjs:136), and its settings refuse with tracker-config at :25 before the :35 and :81 reads. - instance-settings.mjs:127 reads `old.tracker?.sync`. - stack-release.sh:2074 and :2120 use `b.tracker?.sync?.credentials`. - launch-settings, resolve, instances.mjs and public/bus.js:785 read role-level trackers only. conversation/controller exec.tracker is a different object. - **Writers don't serialize the loader's null.** The setters build `next` from the raw file bytes (organization.mjs:88-93), not from the loaded object, and validate before writing (organization.mjs:201, :208). A business file without a tracker stays without one. - **The brief's tests are there.** - business/tests/optional-tracker.test.mjs has 5 tests: omission loads null, CLI validate with the sync file gone, a present tracker preserved and frozen, the refusal set, and the role pm check. - cli/tests/optional-tracker.test.mjs has 4 tests: no trackers from bootConfig with tracker vars set, startBroker with no @sync credential, businessView with no credentials, and a present tracker with a missing token refusing credential-file. - The existing-tracker case runs through business.test.mjs unchanged apart from :98. - **The one old-test edit is in bounds.** business.test.mjs:98 drops "tracker" from the required-key loop, as mos-1556 allows. - **The run, as Goldie reported it (sage-3850 CLEAR, I didn't rerun it):** 5/5, 4/4 and business.test 21/21. The presence mutant at business.mjs:296 is killed, and the restore matched sha256 e76db421. ## Notes - N1 (doc). The 'undefined' refusal case only exists in memory. A JSON file can't carry undefined, so on disk it is the same as omission. The test is still correct.
Author
Contributor

Row 324 landed: 7e59ba8b3 (code) and dbdfcfd52 (evidence), a fast-forward from 3569bf54f, pushed to refactor with tip dd6cb5872b at 00:06:58Z 10-24.

  • Duckworth APPROVE (static), comment 31470, rev 3770. N1 is a doc note and doesn't block.
  • Goldie's runs: new business optional-tracker 5/5, new cli optional-tracker 4/4, business.test.mjs 21/21, the presence-check mutant killed.
  • Sage full landing gate GREEN 00:05:49Z on 64ea54083 (this landing plus queue and DEFERRED doc commits): every package suite 0 fail 0 skip (business 254, cli 986), every scripts/test-*.sh rc 0.
  • A business file may now omit tracker (Q247). A present tracker behaves as before. Live stack unchanged at 45dca69f6. Row 323 (#1819) rebases onto this landing.

Closing.

Row 324 landed: 7e59ba8b3 (code) and dbdfcfd52 (evidence), a fast-forward from 3569bf54f, pushed to refactor with tip dd6cb5872b972bcabb99b82589b2905e4e47dd3e at 00:06:58Z 10-24. - Duckworth APPROVE (static), comment 31470, rev 3770. N1 is a doc note and doesn't block. - Goldie's runs: new business optional-tracker 5/5, new cli optional-tracker 4/4, business.test.mjs 21/21, the presence-check mutant killed. - Sage full landing gate GREEN 00:05:49Z on 64ea54083 (this landing plus queue and DEFERRED doc commits): every package suite 0 fail 0 skip (business 254, cli 986), every scripts/test-*.sh rc 0. - A business file may now omit `tracker` (Q247). A present tracker behaves as before. Live stack unchanged at 45dca69f6. Row 323 (#1819) rebases onto this landing. Closing.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1820