instructions: chains of packages - stack-dev writes ## Kette, stack-close names the next link (#205)
CI / verify (push) Successful in 7m41s
CI / pwsh (push) Successful in 2m23s
Release / release (push) Successful in 36s
Release / wiki-mirror (push) Skipped

Files changed:
- CHANGES.md
- VERSION
- instructions/dev/issue-tracking.md
- instructions/dev/stack-close/SKILL.md
- instructions/dev/stack-dev/SKILL.md
- instructions/dev/stack-mode.md

Co-Authored-By: Claude Code <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SnAJ7Z3CpVD3PRbN73QtU2
This commit is contained in:
torbenandClaude Code committed 2026-10-10 08:49:33 +02:00
1 parent 7cfafd75b2
commit 3c80262a05
6 files changed
+90 -5

No files matched your search

+38 -1
View File
@@ -27,6 +27,7 @@ issues at that URL, which is exactly why `dist export` excludes
- [Steps](#steps)
- [Incoming stubs](#incoming-stubs)
- [Ready to build](#ready-to-build)
- [Chains](#chains)
- [Renames and other decay in the tracker](#renames-and-other-decay-in-the-tracker)
- [Citing an issue in the repo](#citing-an-issue-in-the-repo)
- [What no tool checks](#what-no-tool-checks)
@@ -50,6 +51,8 @@ issues at that URL, which is exactly why `dist export` excludes
ready (§ Ready to build).
- Prioritising: deciding what to pick up next, or re-labelling after the ground
moved.
- A design session yields several packages with an order, or inserts, removes or moves
one in an existing sequence: write or repair the `## Kette` sections (§ Chains).
- Closing one: the body is rewritten to its final state first, and only then
closed (step 7).
- A rename or move ships: sweep the open issues for text that assumed the old
@@ -208,7 +211,7 @@ issues at that URL, which is exactly why `dist export` excludes
| `status/` | Means |
|---|---|
| `status/blocked` | Waiting on another, still-open issue - not workable on its own, whatever its `prio/` says. Name the blocking issue in the body. |
| `status/blocked` | Waiting on another, still-open issue - not workable on its own, whatever its `prio/` says. Name the blocking issue in the body. A place in a chain (§ Chains) is an order, not a block. |
| `status/unconfirmed` | A reported suspicion, not yet checked against actual behaviour. Applies to any `kind/`, not just `kind/defect`. |
| `status/incoming` | A human's stub: a request or a thought, filed at whatever length it arrived, deliberately short of everything step 1 asks for. **Never implemented as it stands** - § Incoming stubs. |
@@ -337,6 +340,40 @@ session fills on its own is the same gap a `status/incoming` stub leaves (§ Inc
only better disguised. The useful side effect of the cut between the two phases is that it
tests this definition - if a cold session cannot build from the body, it was not ready.
## Chains
Packages that are meant to be built one after another lose the thread when each is closed:
which issue comes next is, at best, written in a body nobody reads after closing. A package that
is part of an ordered sequence therefore ends its body with a section of this exact form, as the
**last** section:
```
## Kette
Kette „<name>“
- Vorgänger: #A (or: keiner - erstes Glied)
- Nachfolger: #C (or: keiner - letztes Glied)
```
The heading and the line openings are quoted vocabulary and stay German, like the bodies they
sit in. Three rules keep it cheap and checkable:
- **Neighbours only, never a list of all links.** Inserting, removing or moving a package then
touches the two bodies beside it, not every body in the chain. The whole sequence is
recovered by walking `Nachfolger` links from the first link.
- **The two neighbours point at each other.** If #B names #A as `Vorgänger`, #A names #B as
`Nachfolger`. A one-sided pointer is the defect; `stack-dev` checks every link it touched
before ending its phase.
- **Order is a planning decision, not a dependency.** A real dependency still carries
`status/blocked` (step 5) and names the blocker in the body. A chain position alone never
blocks anything.
`stack-dev` writes the section and keeps the neighbours in step (its steps 3 and 5);
`stack-close` reads it after closing and names the next link (its step 5), and lifts
`status/blocked` from the successor when the closed package was that body's only open blocker,
with the comment step 6 asks for. The successor is *ready* when it carries `kind/build` and
neither `status/incoming` nor `status/unconfirmed`; otherwise the next phase for it is design.
## Renames and other decay in the tracker
A rename is not finished when the tree is green. Renaming a package, a path,