Task: Add timeline view to the agile board
This page documents a task in the Agile timeline: bucketed summaries of recent activity story. It captures the goal, current status, acceptance, and any notes or results.
Goal
Add a timeline view to the agile board: event counts per bucket as a clickable chart, click-through to each bucket's snapshot, defaulting to the latest.
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent story | Agile timeline: bucketed summaries of recent activity |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-06-07 |
Acceptance
- Assessment first: determine whether graphdata.json and the existing
ores.org-js/site infrastructure already carry everything the view needs
(snapshot files get :ID:s, so they flow into the export automatically),
or whether the export/build needs extending. Record the answer in
- Decisions on the story.
- Timeline view: event counts per time bucket (stories raised, tasks raised, stories/tasks worked) as a clickable chart.
- Clicking a bucket shows its snapshot log; defaults to the latest bucket.
Plan
Assessment confirmed first (recorded in the story Decisions): snapshot
files carry :ID:=s, so =org-roam-db-sync indexes them and the existing
graphdata.json export ships their full org content — the board consumes
them like any story or task, no pipeline change.
data.jsloadTimelineBuckets: collect.../timeline/*.orgnodes from the graph, parse window from the<ISO-from>-<ISO-to>filename, count rows in each snapshot's section tables, flag buckets whose problems/suspicious section is non-empty.charts.jsStackedBars: one clickable bar per bucket, a coloured segment per category, ⚠ over buckets with reported problems.app.jsTimeline view: third toolbar toggle; the chart plus the selected bucket's snapshot rendered via uniorg; defaults to the latest.render.js: linkify bare#NNNreferences to GitHub PRs in rendered snapshot/drawer HTML.
Notes
PRs
| PR | Title |
|---|---|
| #1178 | [org-js] Add timeline view to the agile board |
Review
| # | Comment summary | File | Decision | Notes |
|---|---|---|---|---|
| 1 | Dead total + hidden empty text in StackedBars | charts.js | Accepted | Removed. |
| 1 | Axis label slices possibly-arbitrary filename | data.js, app.js | Accepted | label computed in loadTimelineBuckets with fallback. |
| 1 | No null guard on index.timeline | app.js | Accepted | index.timeline ?? []. |
| 1 | replace only first underscore | app.js | Accepted | replaceAll. |
| 1 | #NNN links to pull (404s on issues) | render.js | Accepted | Switched to issues (redirects to PR when applicable). |
| 1 | view-state comment missing 'timeline' | app.js | Accepted | Comment updated. |
| 1 | problems detection ignores tables | data.js | Declined | Depends on snapshot skill format; revisit when formalised. |
Result
Timeline view shipped. Third board view (Sprints / Backlog / Timeline): stacked-bar chart, one bar per snapshot bucket, segments coloured per category (stories/tasks/captures/PRs), ⚠ flag on buckets reporting problems; click a bar to read that bucket's snapshot (uniorg-rendered, in-app id-link navigation, bare #NNN now linking to GitHub PRs); defaults to the latest bucket. Assessment held: no export/build/pipeline change — snapshots reach the browser through the existing graphdata.json. Verified against the six test snapshots for 2026-06-07.