packages/bus/src/broker.mjs:3969:        .filter(([, r]) => r.tracker?.botId !== undefined)
packages/bus/src/broker.mjs:3970:        .map(([role, r]) => [r.tracker.botId, role]),
packages/bus/src/broker.mjs:4497:    return { transaction: out.transaction, retry: false, ...(out.tracker ? { bot: out.tracker.bot } : {}) };
packages/bus/src/broker.mjs:6242:              bot = sync ? b.tracker?.sync?.bot : service === 'vikunja' ? b.roles?.[role]?.tracker?.bot : null;
packages/bus/src/runtime.mjs:131:      if (b.tracker?.sync?.credentials) references[business + '/@sync'] = b.tracker.sync.credentials;
packages/bus/src/runtime.mjs:243:      tracker: r?.tracker ?? null,
packages/bus/src/runtime.mjs:247:      sync: canonicalJson(b.tracker?.sync ?? null),
packages/business/src/business.mjs:89:  requireObject(tracker.sync, `${where}.sync`);
packages/business/src/business.mjs:90:  rejectUnknownKeys(tracker.sync, ["bot", "botId", "credentials"], `${where}.sync`);
packages/business/src/business.mjs:92:    ...checkBot({ bot: tracker.sync.bot, botId: tracker.sync.botId }, `${where}.sync`),
packages/business/src/business.mjs:93:    credentials: checkCredentialMap(tracker.sync.credentials, ["vikunja"], `${where}.sync.credentials`),
packages/business/src/business.mjs:143:      if (entry.tracker === undefined) refuse(`${at} needs "tracker" with its Vikunja bot, because ${entry.definition} uses vikunja`);
packages/business/src/business.mjs:144:      tracker = checkBot(entry.tracker, `${at}.tracker`);
packages/business/src/business.mjs:145:      if (bots.has(tracker.bot)) refuse(`${at}.tracker.bot ${tracker.bot} is used by another instance`);
packages/business/src/business.mjs:146:      if (botIds.has(tracker.botId)) refuse(`${at}.tracker.botId ${tracker.botId} is used by another instance`);
packages/business/src/business.mjs:149:    } else if (entry.tracker !== undefined) {
packages/business/src/business.mjs:296:  const tracker = Object.hasOwn(document, "tracker") ? checkTracker(document.tracker, file) : null;
packages/business/src/business.mjs:298:    if (tracker && role.tracker && (role.tracker.bot === tracker.sync.bot || role.tracker.botId === tracker.sync.botId)) {
packages/business/src/business.mjs:299:      refuse(`${file} tracker.sync must use its own bot, not the one roles.${instance} uses`);
packages/business/src/cli.mjs:85:    ...Object.values(business.tracker?.sync?.credentials ?? {}),
packages/business/src/instance-settings.mjs:108:// needs a bus restart, then row 199's issue. A vikunja definition needs args.tracker, an existing
packages/business/src/instance-settings.mjs:120:      tracker = checkBot(args.tracker, "tracker");
packages/business/src/instance-settings.mjs:126:    const taken = Object.entries(old.roles).filter(([name, entry]) => name !== instance && entry.tracker).map(([name, entry]) => [name, entry.tracker]);
packages/business/src/instance-settings.mjs:127:    if (old.tracker?.sync) taken.push(["tracker.sync", old.tracker.sync]);
packages/business/src/instance-settings.mjs:133:    out.tracker = tracker;
packages/business/src/instance-settings.mjs:223:      const bot = old.roles[instance]?.tracker?.bot;
packages/business/src/launch-settings.mjs:161:        definition: entry.definition, vars: entry.vars ?? {}, tracker: entry.tracker ?? null,
packages/business/src/launch-settings.mjs:235:        if (entry.tracker === null) delete next.roles[instance].tracker;
packages/business/src/launch-settings.mjs:236:        else if (Object.hasOwn(entry, "tracker")) next.roles[instance].tracker = entry.tracker;
packages/business/src/resolve.mjs:93:    tracker: entry.tracker,
packages/cli/src/config.mjs:58:  if (!b.tracker) return null;
packages/cli/src/instances.mjs:118:  if (bot) args.tracker = { bot: values["--bot"], botId: Number(values["--bot-id"]) };
packages/conversation/src/controller.mjs:443:    exec.tracker = new Tracker({
packages/conversation/src/controller.mjs:502:    if (exec.link.poisoned || exec.tracker.overlapped || this.closers.has("uncertain")) return;
packages/conversation/src/controller.mjs:748:      return { fence: true, closer, fenceIdx: this.exec?.tracker.idx ?? 0 };
packages/conversation/src/controller.mjs:807:        seam: { replay: "unavailable", streamEpoch: exec?.streamEpoch ?? null, fromSequence: (exec?.seq ?? 0) + 1, reconcile: true, quiet: !exec?.tracker.current && !exec?.tracker.slot },
packages/conversation/src/controller.mjs:820:    if (exec?.tracker.slot) return refused(BUSY);
packages/conversation/src/controller.mjs:831:    exec.tracker.attach(slot);
packages/conversation/src/controller.mjs:888:    const tr = slot.exec.tracker;
packages/conversation/src/controller.mjs:935:    const tr = exec.tracker;
packages/conversation/src/controller.mjs:961:    const exec = slot.exec, tr = exec.tracker;
packages/conversation/src/controller.mjs:997:    this.#settleFailure(exec.tracker.slot, RUN_OVERLAP);
packages/conversation/src/controller.mjs:1008:    this.evidence.gaps.push({ kind, detail, idx: exec.tracker.idx });
packages/conversation/src/controller.mjs:1021:    const tr = exec.tracker;
packages/conversation/src/controller.mjs:1048:    const tr = exec.tracker;
packages/conversation/src/controller.mjs:1056:    const tr = exec.tracker, s = tr.slot;
packages/conversation/src/controller.mjs:1268:    const exec = this.exec, tr = exec?.tracker;
packages/conversation/src/controller.mjs:1308:    const tr = exec.tracker;
packages/conversation/src/controller.mjs:1330:    exec.tracker.clearWindow = Math.max(0, exec.tracker.clearWindow - 1);
packages/conversation/src/controller.mjs:1334:    const { exec, stop } = ctx, tr = exec.tracker;
packages/conversation/src/controller.mjs:1413:    const { exec } = ctx, tr = exec.tracker;
packages/conversation/src/controller.mjs:1447:    const { exec, stop } = ctx, tr = exec.tracker;
packages/tasks/src/adapter.mjs:25:  if (!positive(b.tracker?.sync?.botId)) throw new BusError('tracker-config');
packages/tasks/src/adapter.mjs:28:    if (r.tracker) {
packages/tasks/src/adapter.mjs:29:      if (!positive(r.tracker.botId) || typeof r.definition !== 'string') throw new BusError('tracker-config');
packages/tasks/src/adapter.mjs:30:      roles[role] = { definition: r.definition, botId: r.tracker.botId };
packages/tasks/src/adapter.mjs:35:  for (const [title, id] of Object.entries(b.tracker.labels ?? {})) {
packages/tasks/src/adapter.mjs:45:  if (b.tracker?.sync?.credentials?.vikunja?.file) out['@sync'] = b.tracker.sync.credentials.vikunja.file;
packages/tasks/src/adapter.mjs:81:        bots: new Set([businesses[name].tracker.sync.botId, ...Object.values(s.roles).map((r) => r.botId)]),
packages/webui/src/public/bus.js:785:      if(f==='tracker'&&text.trim()===''){patch.tracker=null;continue;}
packages/webui/src/reads.mjs:164:    for (const [service, ref] of Object.entries(r.credentials)) credentials.push(credential(service, ref, service === 'vikunja' ? r.tracker?.bot ?? null : null, instance, now));
packages/webui/src/reads.mjs:166:  for (const [service, ref] of Object.entries(b.tracker?.sync?.credentials ?? {})) credentials.push(credential(service, ref, b.tracker.sync.bot, 'tracker sync', now));
