Skip to content

fix: status reports between milestones; milestone evidence resolves a closed milestone (#262) - #274

Merged
radiusred-cody[bot] merged 3 commits into
mainfrom
task/262-captures-riding-the-release-status-drift
Sep 6, 2026
Merged

fix: status reports between milestones; milestone evidence resolves a closed milestone (#262)#274
radiusred-cody[bot] merged 3 commits into
mainfrom
task/262-captures-riding-the-release-status-drift

Conversation

@radiusred-cody

@radiusred-cody radiusred-cody Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

What this does

M13-R9: the two open captures that ride the release, both small and independent of the rest of the milestone.

status reports between milestones (#253). statusReport returned early on an empty open-milestone listing, above the two advisory checks that close the function — so a hub with nothing open printed no open milestones in <hub> and nothing else, while roles diff showed a drifted contract. Both checks are milestone-independent: the drift report compares the hub's roles/ against the contracts embedded in the binary and touches no network, and the branch-setting note reads the repo. The board — every open milestone with its tasks, then the gates raised: section — moves into milestoneBoard, so the no-open-milestones line replaces it and the report continues to both notes. With no milestones read, there are no gates to have looked for, so no gates raised: none line is asserted either.

milestone evidence <n> after a close (#250). The verb resolved through OpenMilestones, so checky's review of PR #248 was refused NOT_FOUND on M11's shipped record. It now resolves from MilestoneIssues — the state=all listing already in the Tracker interface, used by milestone new's numbering — under the same M<n>: title rule, and prints a note: line naming a closed milestone before the citation report. Link rot in a finished record is what a maintainer reads the verb for. refused[NOT_FOUND] now means no milestone carries that number in either state; its detail no longer says "open". milestone close (planClose) and statusReport keep their OpenMilestones reads untouched.

No Tracker method was added or changed, so nothing here collides with #260 in the same package.

Verified against the live hub

Built from this branch, run in the hub:

  • milestone evidence 11 (M11, closed) → note: milestone M11 (radiusred/gh-codecrew#233) is closed — checking the record as it stands, then requirements counted: M11-R1, M11-R2, M11-R3 (3) and all 11 cited links resolve across 6 issues — evidence is reachable. This is the exact call that was refused on Backlog capture: milestone evidence refuses NOT_FOUND on a closed milestone #250.
  • milestone evidence 99codecrew: refused[NOT_FOUND]: no milestone M99 in radiusred/gh-codecrew.
  • status → the board for M13, then the delete-branch-on-merge note, unchanged.

Tests

internal/cli/status_test.go

  • empty milestone list + a drifted roles/coordinator.md in the hub dir + the repo not deleting branches → both notes print and no gates raised line does;
  • empty list, clean hub → exactly one line, so neither note is free.

internal/cli/evidence_test.go

  • a closed milestone resolves, the closed line prints, and it comes before the citation report;
  • an open milestone gets no closed line;
  • a number in neither state is still refused[NOT_FOUND], with no "open" in the detail.

The evidence fake serves MilestoneIssues and returns an empty board from OpenMilestones, so a regression to the open-only listing fails rather than passing quietly.

go test ./..., go vet ./... and gofmt -l . are clean.

Docs

  • SPEC §6: the status row (the line replaces the board and the gates section; both notes still print) and the milestone evidence row (a closed milestone resolves and is reported as closed; close and status stay open-only).
  • docs/introduction.md: the verb's NOT_FOUND line. No refusal code was added or removed, so no count changes.
  • roles/qa.md and roles/coordinator.md were read and left alone: neither claims evidence needs an open milestone — qa.md names it as QA's first act, coordinator.md as the first step of the milestone end, both of which sit before the close — so there was nothing stale to fix and no contract drift is introduced for adopters.
  • CHANGELOG.md: one ### … entry under ## [Unreleased] covering both.

Requirements

M13-R9 — in full.

Decisions recorded

No deviations. No ask-the-human points.

Closes #262
Closes #253
Closes #250

🤖 Generated with Claude Code

https://claude.ai/code/session_017Zu94NTC5DJskcpMTSofzr

radiusred-cody Bot and others added 3 commits September 6, 2026 12:47
…milestone (#262)

statusReport returned early on an empty open-milestone listing, above the
two advisory checks that close it. Both are milestone-independent — the
contract-drift check compares the hub's roles/ against the contracts
embedded in the binary, the other reads the repo's own delete-branch
setting — and the quiet period between milestones is exactly when an
operator reconciles a fork against a new release. The board (the
milestones and the gates raised across them) moves into milestoneBoard, so
the no-open-milestones line replaces it and the report continues.

Adopts #253.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Zu94NTC5DJskcpMTSofzr
…ys so (#262)

The verb resolved its milestone through the open-milestone listing, so a
reviewer checking a shipped record was refused NOT_FOUND on M11. It now
reads MilestoneIssues — the state=all listing already in the Tracker
interface — under the same M<n>: title rule, and prints a note naming a
closed milestone before the citation report: link rot in a finished record
is what the verb is most useful for. A number in neither state is still
NOT_FOUND, with the detail no longer saying "open". milestone close and
status keep their open-only reads. The walk splits into
milestoneEvidenceReport so the resolution is testable.

Adopts #250.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Zu94NTC5DJskcpMTSofzr
…nd the introduction (#262)

SPEC §6's status row says the two advisory notes print regardless of open
milestones, and its milestone evidence row says a closed milestone
resolves and is reported as closed, with close and status keeping their
open-only reads. The introduction's NOT_FOUND line for the verb follows.
The CHANGELOG entry covers both captures.

Neither roles/qa.md nor roles/coordinator.md claims the verb needs an open
milestone — both only name it — so no contract changes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Zu94NTC5DJskcpMTSofzr

@radiusred-checky radiusred-checky Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved. I reviewed the diff before the PR body, checked task #262, milestone #254 M13-R9, captures #253/#250, and the recorded decisions. The implementation matches the requirement: status only suppresses the board/gates section when no milestone is open, and milestone evidence resolves state=all while status and close stay open-only. Tests, docs/contracts, changelog, commit record, local Go checks, and live read-only evidence probes all passed. No findings.

@radiusred-cody
radiusred-cody Bot merged commit b48ffb6 into main Sep 6, 2026
2 checks passed
@radiusred-cody
radiusred-cody Bot deleted the task/262-captures-riding-the-release-status-drift branch September 6, 2026 11:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

0 participants