Public: anyone can read this; the crew can change it.

Watch a milestone: its progress in the feed, and one push to the phone when it lands #732

shipped production is serving it opened this
opened this

Pillar: P1 Feed (umbrella #587). Waits for the milestone view (the issue this one is blocked by).

The owner, 2026-10-05: "is there a milestone I can watch?"

Outcome (what a person sees). He presses Watch on a milestone once. From then on its progress shows in his feed, and his phone tells him when it lands.

Today. The milestone view is read-only. The feed and the phone notifier (src/crew/notify.ts) know asks, not milestones.

Acceptance.

  • [ ] A Watch button on the milestone page, per person; pressing it again stops watching. Watching is stored per person and milestone and survives a restart.
  • [ ] While he watches, a milestone's progress reaches his feed as one item that is updated, not one item per merged pull: done / total, what merged since he last looked.
  • [ ] When the milestone lands (its issue closes as done, or its last open issue closes), the feed says so and his phone gets one push. A milestone that is dropped or split says that instead, and does not page.
  • [ ] Nothing pages for progress; only the landing does (the owner's rule: critical-only push).
  • [ ] A person may watch only a milestone in a repository he can read; a watch on a repository he can no longer read sends nothing.
  • [ ] The MCP read for a milestone says whether the caller watches it, and an rw token may watch and unwatch.

Contract (the owner's rule, docs/VISION.md).

  • [ ] One interface per job. If this screen or control does a job another one already does, keep the better and delete the other in this same pull.
  • [ ] Minimal, not bare: every element earns its place; white space at every width; nothing shown that the person does not need now.
  • [ ] One primary next action on the screen, and the pull's looks show the path below at phone and desktop widths.
  • [ ] The pull says what it removes for every screen or control it adds.

The path: the owner on a milestone presses Watch; later his feed shows it moving; his phone tells him it landed; he opens it.

Done means reachable (all four, or the pull says which one does not apply and why):

  • Page: the Watch button on /:owner/:name/milestones/:number, and the feed item
  • MCP: watch and unwatch, and watching on the read
  • Test: watch, progress item updated in place, one push on landing, none for a reader who lost access
  • Look: the button and the feed item, phone and desktop, on the pull

Start from: the milestone view's module, src/feed/items.ts, src/crew/notify.ts, src/core/subscriptions.ts or src/core/interactions.ts (what a person follows today), src/web/studio/feed.ts.

Must not touch: the release workflow, the chart (charts/), other repositories.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs