Skip to content

feat: v0.13 Sprint summary - #3

Draft
hazeliscoding wants to merge 10 commits into
mainfrom
release/v0.13
Draft

hazeliscoding wants to merge 10 commits into
mainfrom
release/v0.13

Conversation

@hazeliscoding

@hazeliscoding hazeliscoding commented Sep 29, 2026 •

Copy link
Copy Markdown
Owner

The v0.13 milestone from ROADMAP.md: the board opens with how the sprint is going, and turns that into a standup you can paste into Slack or Teams in one click. This stays a draft until the milestone's "Done when" holds.

Decisions (2026-09-29)

  • The health strip tells the sprint's story: days left, open, needs attention, merged and median time to merge, each with a one-line note. Per-status counts stay in the table headings.
  • Sprint numbers are the team's. Author chips, search and snoozes never change the strip or the standup. They only shape the tables and the Sweep.
  • Each open PR appears once in the standup, in its most urgent group: Blocked, Needs attention, then In review. Merged since the last working day comes first. Drafts stay out.
  • Lines name the author's login as plain text, with no @mention and no per-person counts.
  • Copy standup writes rich text and Markdown together, so Slack and Teams paste it formatted with PR links, and plain-text places get Markdown.
  • Markdown links are written [ref](<url>), so Discord doesn't stack a preview card per link. The formatted version writes non-ASCII characters as HTML entities.
  • One click, no preview. The button says what it copied, and only appears when the board's period includes today.
  • The sprint-end line moves from the Sweep header into the strip.
  • No new GitHub fields, so sweep time is unchanged. The sweep result's schema goes to 6, so the first refresh after updating is a full one.

Progress

  • Roadmap, AGENTS.md and this pull request
  • Paste test in Teams and Discord (Slack skipped)
  • core/summary.ts with tests
  • Health strip: the sprint's story
  • core/standup.ts with tests
  • Copy standup
  • Screenshots, README, keyboard pass, bundle size
  • Release

What changed

  • Health strip: days left, open (and not yet approved), needs attention (and how much is blocked), merged (and since yesterday), and median time to merge. Always the whole team.
  • Copy standup at the end of the strip. The confirmation line says what it copied.
  • The Sweep header no longer has the sprint-end line; it's in the strip now.
  • Under the hood: core/summary.ts and core/standup.ts in main, with tests. The grouping rule is standupGroup in the attention engine. The sweep result's schema is 6, so the first refresh after updating is a full one. No new GitHub fields, so sweeps take as long as before.
  • Renderer size: 988.5 KB, 1.6 KB more than v0.12.

Screenshots

The board states that changed, shot with node e2e/screenshot.mjs --fixtures. All 30 are on the pr-assets branch under v0.13/.

Light theme
State v0.12 v0.13
busy
busy-standup new
calm
empty
error
loading
Dark theme
State v0.12 v0.13
busy
busy-standup new
calm
empty
error
loading

Testing

Build, unit tests and design checks

npm install
npm run build
npm test
npm run check
  • Eleven … pass lines, including summary and standup.
  • npm run check ends with contrast: 63 pairs pass AA in both themes and assets: no remote URLs, stray fonts or raw colors.

Fixture screenshots (no token, no network)

cd desktop
node e2e/screenshot.mjs --fixtures
  • desktop/e2e/shots/ holds 30 images, including busy-standup. Your clipboard is untouched: the script stubs it.

On your own account (classic token)

  • First refresh after updating is a full one (the cache format changed), then the strip fills in.
  • The strip reads right: days left and the end date, open and not approved, needs attention with how many are blocked, merged and how many since yesterday, and the median time to merge.
  • Team-wide: pick an author chip, type in search, snooze a row. No number in the strip changes, while the tables and the Sweep do.
  • Needs attention matches the Sweep's count before you snooze anything.
  • Copy standup, then paste into Teams: bold headings, PR links, bullet lists, and now a gap between the title and the first group.
  • Paste into Discord: Markdown with working links and no preview cards.
  • The standup agrees with the strip: Blocked plus Needs attention equals the strip's Needs attention, and "Merged since …" matches the Merged note.
  • Only for today: step to next sprint and Copy standup disappears; Current brings it back.
  • Keyboard: Tab reaches Copy standup right after the top bar, and Enter copies.

Paste test (done before building)

  • Teams: bold headings, bullet lists and PR links survive; a title's Markdown and HTML characters show as typed; one preview card for the first link, removable with its ×.
  • Discord: takes the Markdown version; no preview cards once links are [ref](<url>).
  • Slack: not tested. It gets the same formatted version as Teams.

…in main

Days left, open, needs attention, merged and median time to merge, team-wide: author chips, search and snoozes never change them. The summary replaces sprintRisk in the sweep result (schema 6), the sprint-end line moves from the Sweep header into the strip, and standupGroup in the attention engine decides what counts as blocked.
…as rich text and Markdown

Merged since the last working day, then Blocked, Needs attention and In review, each open PR once, from the attention engine. Links are [ref](<url>) so Discord doesn't stack preview cards, and the HTML is plain ASCII so no app misreads its encoding.
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