mind: date every active and issued task, and give the dashboard a Recent table - #270
Merged
Merged
Conversation
…ent table
The Mind dated only what it FINISHED. Every complete/ record carries
`completed:`, but a task that had merely been picked up carried no date a
reader could parse — active.md said it in prose when a session remembered to
("- issue: …/1501 (issued 2026-08-19)"), which nothing could read back. So the
Mind could answer "what shipped in July?" and not "what did we start?".
The convention (REFERENCE.md "Task dates"): one machine-readable date field per
registry entry, whose KEY names the event — `issued:` in active.md, `filed:` in
planned.md, `parked:` in parked.md — plus an `Issued:` header on every issued
prompt, its own copy of the registry date so an orphan stays dated. Reading is
tolerant (`registered:`, `started:`, `found:`, `shipped:` all count); a date
buried in another field's prose deliberately does not.
- scripts/lifecycle.py grows `dates`: report every entry and issued prompt
carrying no date, `--write` to backfill retroactively from the evidence the
repo already holds — the commit that introduced the entry or moved the prompt
into active/, the registry entry that claims the prompt, a date the entry
already stated. Nothing is guessed; an inferred date says where it came from
("Issued: 2026-08-18 (backfilled from parked.md `parked:`)"). A shallow clone
cannot see past its boundary commit, so git dates at or before it are
discarded rather than stamping every task with the day the clone was made.
- Backfilled all four issued prompts and added active.md's canonical `issued:`.
- create_issue writes both dates at the one moment anyone knows them for
certain, rather than leaving them to be reconstructed.
The dashboard's new Recent table (between Backlog and Epics, generated by the
intake conductor) is the payoff: the 20 newest task events across every bucket.
Live rows now also wear their date where the task is — a status line reads very
differently against a row issued yesterday than one issued in May.
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01L4HPWjv5rdzBAkKpfW1SbR
Jammy2211
pushed a commit
that referenced
this pull request
Aug 23, 2026
The merge commit regenerated dashboard.md/.html from a PyAutoBrain checkout that was 5 commits behind origin/main, three of which changed the dashboard generator (#249/#250/#251 — the Recent-feed work that PyAutoMind #270/#271/#272 landed). That reverted the paged Recent feed: dashboard.html lost 119 lines. PyAutoBrain updated to ad927eb and both files regenerated. The diff against main is now +24/-6 — the two new prompts entering the backlog, and nothing else. `intake dashboard --check` reports current. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_015Mw2KC1M1HKrvTqe5zcEZn
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Mind dated only what it finished. Every
complete/record carriescompleted:, but a task that had merely been picked up carried no date a reader could parse —active.mdsaid it in prose when a session remembered to (- issue: …/1501 (issued 2026-08-19)), which nothing could read back. So the Mind could answer "what shipped in July?" and not "what did we start?".The convention
One machine-readable date field per registry entry, whose key names the event, plus the prompt's own copy in its light header:
active.md- issued: YYYY-MM-DDplanned.md- filed: YYYY-MM-DDparked.md- parked: YYYY-MM-DDactive/<name>.mdIssued: YYYY-MM-DDReading is tolerant —
registered:,started:,planned:,found:andshipped:all count, because the registries are hand-edited by many sessions and an entry that says when it happened should count however it said it. A date sitting in another field's prose deliberately does not: that is the un-parseable habit this replaces. Full schema inREFERENCE.md→ "Task dates".Retroactive backfill
scripts/lifecycle.py datesreports every entry and issued prompt carrying no date;dates --writereconstructs them from evidence the repo already holds, in order:active/Nothing is guessed — an entry with no evidence is reported for a human to date by hand. Every inferred date says where it came from, so a wrong backfill is auditable rather than anonymous:
Shallow clones are not evidence. A shallow checkout (CI, a cloud session) reports its boundary commit as the day everything older appeared, so every backfill in one clone would come out the same wrong date. Git dates at or before the boundary are discarded and the chain falls through to the Mind's own records — which is exactly what happened writing this change: git offered 2026-08-21 for all four prompts, and the fallback produced 2026-08-08/18/19.
All four issued prompts are backfilled and
active.mdcarries its canonicalissued:;lifecycle.py datesnow reports OK.Where the dates get written from now on
/create_issuewrites both the registryissued:and the prompt'sIssued:header at the one moment anyone knows the date for certain, rather than leaving it to be reconstructed later.The dashboard payoff
Regenerated
dashboard.md/dashboard.htmlpick up the new Recent table (between Backlog and Epics) and the date facet now carried by In flight / Parked / Planned rows. The renderer itself is the paired PyAutoBrain change.Testing
tests/test_lifecycle_dates.py— 17 new tests: the key naming the event, the most-specific event winning, prose not counting, the backfill's sources and its refusal to guess, insertion that never splits a wrapped header value or aRepos:bullet list, and a real shallow-clone fixture proving the boundary is refused.python3 -m pytest tests/— 176 passed.lifecycle.py check,lifecycle.py dates,repos_sync.py --check— all clean.Generated by Claude Code