Menu ▾ ▴

#543 Mirror releases, milestones and time in board columns from GitHub (#538)

open
nobody
None
5 hours ago
6 hours ago
Anonymous
No

Originally created by: athanclark

The second step of the GitHub source (#538). This is stacked on [#542], and I'll retarget it as the stack merges.

  • Releases: each published release is a moment on its repository, tagged released, release:<tag> (and prerelease) and with its author. Editing a release rewrites its moment; deleting or unpublishing it removes the moment.
  • Milestones: each is a duration from creation to closing, ongoing while open. Its due date is a due moment, and clearing the due date removes that moment. Items already carry milestone:<title>, so separating by that tag lines them up against the milestone.
  • Time in each board column: each stay is a duration such as #412 in Review (Roadmap), tagged in column, status:<column> and project:<name>. It runs from when the item moved there until it moved on or closed. Separating by status: tags then shows how long work waits in each column.
  • Receiver: it remembers each item's open column, so a move can end the stay before it. Set GITHUB_STATE to keep this in a file across restarts. Stays also end when the item closes.
  • Importer: it works stays out from each item's timeline moves. Its history has GitHub's gap since September 2026 (see docs/github.md).
  • Writer: TimelineWriter can now delete moments.
  • Webhooks: the receiver also takes Releases and Milestones deliveries.

Tests

  • Unit: 18 GitHub tests pass. They cover releases and milestones from both tools, stays computed from moves, and the receiver's stays over three deliveries, including what it writes to its state file.
  • Real GitHub: a dry run on this repository since 7 November read 49 items, 113 events and 49 links. The repository has no releases, milestones or boards, so those parts are covered by the fake-API tests only.

🤖 Generated with Claude Code

https://claude.ai/code/session_011fFY8eruEi1xAkkMBni13B

Related

Tickets: #542
Tickets: #544

Discussion


Log in to post a comment.