Repository navigation
D210 — claim never takes an earlier cycle's start branch, and a renewal starts one - #380
Merged
Merged
Conversation
… a renewal starts one A cycle's D5 claim answered "work continues on d5-…" with the start branch of an earlier cycle's D5, a different title, never deleted: any d<n>-… branch counted as the deliverable's work. Once that branch was gone, claiming again only renewed the hold and made no work branch. A branch whose first commit off the default branch is a claim's start for another title of the same id is now an earlier cycle's, and the claim makes its own. A renewed hold with no work branch left gets its first one again, unless the cycle's default branch has merged the deliverable; with one, the renewal says nothing of it. project.md says both. Five tests, two seen red first; the merge guard's seen red without it. Agent-Session: 656a02b7 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: 656a02b7 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8 tasks done
A deliverable retitled mid-cycle kept its worked branch judged by the first commit's subject alone, so a renewal made a second d<n>-… branch (D149). The emptiness test of the unused start branches is now one helper both read. Agent-Session: 2e1c63e2 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: 2e1c63e2 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: 2e1c63e2 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
napkinstack-admin
approved these changes
Nov 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Workstream
D210, its row in
docs/governance/workstreams.md.What it changes
On a project,
nstack claim D5in an accepted cycle answered work continues on d5-…, which exists: no other branch is made. That branch was the start branch of an earlier cycle's D5. It had another title, its only commit was the empty Start D5 — …, and it had never been deleted on the remote. Since D149, anyd<n>-…branch counts as the deliverable's work. Once that branch was deleted, claiming again only renewed the hold, and still made no work branch.flowchart LR C["nstack claim D5"] --> E{"d5-… branch?"} E -->|"first commit: Start D5 — another title"| X["an earlier cycle's: ignored"] X --> M E -->|"hand-named, or this title's start"| K["work continues on it"] E -->|"none"| M["work branch d5-‹this title› made"] R["renewed hold"] --> E2{"work branch left?"} E2 -->|"yes"| S["nothing said"] E2 -->|"none, not merged"| M E2 -->|"none, merged this cycle"| N["none made"]Legend: on the left, a claim. Below, a renewal by the holding session. Before this change, the renewal never reached the branch, and every
d5-…branch was taken.hold._started_for_another: an empty branch (one commit off the default branch, its tree unchanged — the test_empty_startsreads, now the shared_empty) whose commit is a claim's start for another title of the same id is an earlier cycle's. Neither the remote's copy nor this checkout's is taken. A hand-named branch (d1-log-audit, D149), this deliverable's own start, and a branch with work whose deliverable was retitled since are still taken.hold._work_branch(renew=True): a renewed hold with no work branch left gets its first one again, unless this cycle's default branch has already merged the deliverable. Without that guard, a renewal after the merge would bring back an empty start branch. With a branch, the renewal prints nothing about it, as before.skeleton/.nstack/handbook/project.md, Who holds a deliverable, says both.What a project receives
claimignores an earlier cycle's start branch, and a renewal can make a work branch.nstack updatemerges two sentences intoproject.md.Definition of Done
uv run bash platform/tests/run.shgreen, on a committed treeuv run nstack fitnessgreenmainas the last thing before openingSummary
DONE
project.mdsays it; register row D210.VERIFIED
platform/tests/test_hold.py:test_hold.py: 208 passed.uv run bash platform/tests/run.sh: 1269 passed,Platform tests: OK, at the head.uv run nstack fitness --root .: compliant.nstack pr-scope: inside the review budget.ASSUMED
Start D<n> — <title>, identifies the cycle well enough. The two cycles' D had different titles.NOT VERIFIED
RISKS
nstack plan's Empty start branches left (_empty_starts) still counts such a stale branch of a takeable id as this cycle's. Left unchanged, out of this scope.🤖 Generated with Claude Code