Skip to content

Agents propose sprints for what the repo needs (pm-quality sprint 45) - #121

Open
Yeeef wants to merge 7 commits into
mainfrom
sprint-propose
Open

Yeeef wants to merge 7 commits into
mainfrom
sprint-propose

Conversation

@Yeeef

@Yeeef Yeeef commented Oct 25, 2026 •

Copy link
Copy Markdown
Owner

What

  • pm sprint propose <project> --title "…": an agent records something the repo needs, outside its task, as a sprint: the frame plus ## Evidence (the sprint's first finding). Its output lists the project's open sprints and proposals for the duplicate check.
  • A proposal is an open sprint with the label proposal: no schema change, nothing new in work.Check. pm sprint promote <id> (run when the owner asks) removes the label and makes it an ordinary sprint; pm task add and pm task move into a proposal are refused until then.
  • pm show (every level, --json) and pm task ready leave proposals out; pm show --sprint ID shows one.
  • pm sprint close --dropped --reason drops one (refused while a need or a design draft holds it); pm sprint reopen restores it.
  • Site: one collapsed "Proposed (N)" section on the overview and project pages; dropped ones among closed sprints with their reason; day pages name proposed, started, dropped.
  • The day page dates a start by the promote's note.
  • pm where's report moved to internal/cli/where unchanged, to keep internal/cli under its size cap.
  • prime.md: the propose rule; pm feedback is for pm itself.
  • Every item-id argument of every command is classed against a proposal in internal/cli/testdata/proposal_commands.json; a test fails on an unclassed one.

Design: the sprint-proposals design page (draft until the sprint closes); sprint-lifecycle, work-store, pm-cli, views-and-site updated.

Evidence

  • make test: 163 passed. make test-go: 20 packages ok. make lint: clean. tests/test_proposals.py: 8 passed. tests/test_hooks.py: 25 passed.
  • Live check in a scratch clone with its own service: 5 of 5 steps pass (propose, hidden from pm show/ready, collapsed section opened in headless Chromium, start by first task, drop and reopen).
  • Fresh-context review: 3 edge findings (start date by move, a drop stranding a design draft, a task-worded refusal for a need), all fixed in 508b579 with tests.
  • After the promote change: make test 163 passed, make test-go ok, make lint clean, tests/test_proposals.py 8 passed; CI green on 3a07c32.

🤖 Generated with Claude Code

Yeeef and others added 7 commits October 25, 2026 11:11
A proposal is an open sprint labelled proposal with no task under it, a
state derived on read (item.Unstarted), so no schema change and nothing
in work.Check. The site groups open proposals in one collapsed Proposed
section on the overview and the project page, shows a dropped one among
the closed sprints with its reason, and the day page names proposed,
started and dropped.

The day's activity text moves from cli to site (activity.go) so the
summary and the day page share the proposal rows, and FirstSentence to
records so the site can cut a goal; both free room in the cli package,
which sits at its size cap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An agent that sees work the repo needs outside its task now records it
as a proposal: pm sprint propose writes the sprint labelled proposal,
its frame and the Evidence as its first finding, and prints the
project's other proposals and open sprints so a duplicate is dropped at
once. pm show (every level, --json too) leaves proposals out, so the
running work stays what session start shows; the first task starts one.
pm sprint close --dropped closes a proposal nobody started as not done,
with its reason and no report; a PR review cannot name one.

Every command argument that takes an item id is classed for a proposal
in internal/cli/testdata/proposal_commands.json: a Go test holds the
cases to the command tree, and tests/test_proposals.py runs each against
a real store. prime.md gains the rule and sends pm feedback to pm itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Evidence that opens with a fence rendered broken: its first line sat on
the bullet's line and the closing fence opened a new block. The entry
now reads "- Proposal evidence:" with the Evidence below it, all
indented. A dropped proposal no longer makes its project read RUNNING,
and Items.Unstarted checks the type before scanning children, so
site.State on a task stays cheap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A start by pm task move was dated from the moved task's creation, a day
before the proposal or after it, so the day page named the wrong day or
none. pm task move now leaves a move note on the item, in the store's
own write, and item.Arrived dates the task's coming under the sprint by
it; a task made in the sprint keeps its creation date.

A drop writes no records, so it now refuses while a need under the
proposal is open, naming pm need close --dropped, and while a design
page draft is tagged with it, which no later close would publish.
OpenSprintRows moves the duplicate list's rows to site, keeping cli under
its cap. A sprint page with no tasks says so instead of drawing one
empty box.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The cli package sits at its size cap, and pm where's report, with the
site URL it shares with pm show and pm record link, reads only the
clone's files and services: a seam of its own. No behaviour changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The ratcheted linters read the moved code as new: All was past funlen's
cap and UserHomeDir's error went unchecked. Same output as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The owner decided that a proposal becomes ordinary work only when they
say so: pm sprint promote deletes the label proposal and leaves a dated
note, pm sprint promote, in one store write. A proposal is now simply an
open sprint carrying the label; pm task add --sprint and pm task move
--to refuse one, naming the promote. The day page dates a sprint's start
by the promote note, so the move note on every task move goes: the
start no longer depends on tasks. Dropped is closed with the label, and
a reopen makes it a proposal again.

The item-id class table gains sprint promote and refuses task add and
task move into a proposal; prime.md's rule now says to promote only
when the owner asks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
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