Skip to content

run-trackers: make the tracker # History append an explicit step - #35

Open
andrewsu wants to merge 1 commit into
arjunrajlaboratory:mainfrom
andrewsu:fix/run-trackers-history-append
Open

run-trackers: make the tracker # History append an explicit step#35
andrewsu wants to merge 1 commit into
arjunrajlaboratory:mainfrom
andrewsu:fix/run-trackers-history-append

Conversation

@andrewsu

Copy link
Copy Markdown
Contributor

The gap

packs/core/schemas/tracker.md lists # History as a required body section:

  • # History — bullet list of dated entries, each linking to a digest

But none of the three surfaces that specify a tracker run ever tell the agent to write it:

Surface Step that covers post-run bookkeeping Mentions # History?
packs/core/skills/run-trackers/SKILL.md 2.6 Update the tracker frontmatter no
packs/core/workflows/run-tracker.md 8. Update the tracker (the canonical procedure) no
packs/core/prompts/run-trackers.md 6. Update the tracker frontmatter no

All three list last_checked / next_check / last_digest / miss_count and stop there. So an agent that follows the procedure literally leaves # History empty forever, and an agent that writes it is going beyond the spec.

Observed in a real vault

Both behaviours showed up in the same vault, a week apart:

  • The 2026-07-16 run batch wrote # History entries on all three trackers it touched.
  • The 2026-07-22 batch wrote digests, bumped frontmatter, and (where auto_update_wiki: true) edited the target project page — but wrote no # History line on any of the three.

The second batch wasn't sloppy; it was spec-compliant. One tracker's # History still ended at its creation date while last_digest pointed at a digest from two runs later.

Why it stays hidden

Nothing surfaces as broken. last_checked and next_check are still correct, so scheduling works, due-ness is right, and the daily briefing reports normally. The tracker just quietly under-reports its own run count.

That matters because it erodes the evidence for the miss_count >= 5status: needs_review path — the only self-correcting mechanism trackers have. Judging later whether a weekly tracker should have been monthly means reading its run log, and # History is that log. In the vault above, six of seven trackers were set to weekly while realistically moving fortnightly, and the History gaps made that harder to see rather than easier.

The change

Adds the step to all three surfaces so they agree, and states the three things needed to keep it from being dropped again:

  • last_digest is state; # History is provenance — having one doesn't excuse skipping the other. This is the specific reasoning error that makes 2.6 look complete.
  • A line is required even for material: false runs — silence in # History is indistinguishable from "never ran," which is exactly what makes a climbing miss_count illegible.
  • One line per run — the digest holds the detail; # History is the index.

Docs only, no behavioural code. Trailing step numbers renumbered in each file (skill 2.7 → 2.8, workflow 9 → 10, prompt 7 → 8); no other cross-references point at them.

Notes for review

  • Wording deliberately references the installed paths (_schemas/tracker.md, [[Tracker Digest - <slug> - <today>]]) rather than packs/core/…, matching how the surrounding text in these files already reads at runtime in an installed vault.
  • Not addressed here, but adjacent if you want it: lint has no check for "tracker has digests that aren't referenced in its # History." That's what would have caught this without a human noticing. Happy to add it in a follow-up.

`packs/core/schemas/tracker.md` lists `# History` as a required body section
("bullet list of dated entries, each linking to a digest"), but none of the
three surfaces that specify a tracker run ever tell the agent to write it:

- packs/core/skills/run-trackers/SKILL.md  (2.6 covers frontmatter only)
- packs/core/workflows/run-tracker.md      (step 8, the canonical procedure)
- packs/core/prompts/run-trackers.md       (step 6)

So an agent that follows the procedure literally produces a tracker whose
`# History` never grows, while one that goes beyond the procedure writes it.
Both behaviours are observable in a real vault: runs on one date wrote History,
runs a week later did not, and the difference was spec-compliance rather than
diligence.

The omission is invisible in normal use. Scheduling keeps working because
`last_checked` / `next_check` / `last_digest` are all still set correctly, so
nothing surfaces as broken -- the tracker just silently under-reports its run
count. That matters because it erodes the evidence for the `miss_count >= 5`
cadence-retune path, which is the only self-correcting mechanism trackers have:
if History cannot be read as a run log, there is no way to judge later whether a
weekly tracker should have been monthly.

This adds the step to all three surfaces so they agree, and states the three
things needed to keep it from being dropped again:

- `last_digest` is state, `# History` is provenance -- having one does not
  excuse skipping the other.
- A line is required even for `material: false` runs, since silence in History
  is indistinguishable from "never ran."
- One line per run; the digest holds the detail.

Docs only -- no behavioural code changes. Trailing step numbers renumbered in
each file (skill 2.7 -> 2.8, workflow 9 -> 10, prompt 7 -> 8).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant