@boopkit/cap-workflows 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/capability.json +2 -1
- package/package.json +1 -1
- package/skills/boop-architecture-audit-workflow/SKILL.md +10 -1
- package/skills/boop-feature-dev-workflow/SKILL.md +13 -1
- package/skills/boop-knowledge-backfill/SKILL.md +4 -0
- package/skills/boop-light-dev-workflow/SKILL.md +6 -0
- package/skills/boop-stray-disposition/SKILL.md +80 -0
- package/skills/boop-test-audit-workflow/SKILL.md +6 -0
- package/skills/boop-website-dev-workflow/SKILL.md +6 -0
package/capability.json
CHANGED
package/package.json
CHANGED
|
@@ -136,7 +136,10 @@ For the work that is genuinely new:
|
|
|
136
136
|
- **Name the skills on every child, and name only their names.** Step 8 says each child runs under [`boop-refactor-dev-workflow`](../boop-refactor-dev-workflow/SKILL.md) — but the executing session never reads this workflow, only the issue body, so that pointer reaches it exactly when the child says so and never otherwise. Put `boop-refactor-dev-workflow` on every child, plus the skill for the layer the structural change touches (services, controllers, data model, view) and [`boop-testing-testing`](../../../cap-testing/skills/boop-testing-testing/SKILL.md) for the real-path proof. Names, not extracts: the go-red method in the bullet above is copied deliberately, because a fallback that survives into the branch cannot be corrected afterwards, and that is the one exception. Everything else stays in its skill so there is a single copy to keep current.
|
|
137
137
|
- **Settle open decisions before the work starts, not during.** A choice like which validation library, or where a declaration lives, belongs in the issue body marked as decided, with the reasoning. An executor who has to pick one mid-implementation will pick silently.
|
|
138
138
|
- **Include a review child** that checks each change against its named change, not merely that the issue closed.
|
|
139
|
-
- **Put the test run scope on every child.**
|
|
139
|
+
- **Put the test run scope on every child.**
|
|
140
|
+
The review child above is the one that runs the full suite; every other child runs focused tests plus the project's whole-program static check.
|
|
141
|
+
Left unstated, a child that has just changed a widely called function runs the whole suite on its own reasoning, and every sibling pays it again.
|
|
142
|
+
The rule and the wording to use are in [`boop-project-mgmt-beads-planning`](../../../cap-project-mgmt/skills/boop-project-mgmt-beads-planning/SKILL.md).
|
|
140
143
|
- **Do not create the feature branch.** The loop creates the worktree and its `work/<epic-id>` branch when it takes the first child.
|
|
141
144
|
|
|
142
145
|
- **Audit the issue bodies before the session ends, then revise them.** Writing an issue and auditing it are separate passes, and doing both at once produces bodies that read well to their author and cost their reader time. Once every child issue exists, re-read them all as the agent who will claim them cold, using the audit pass in [`boop-project-mgmt-beads-planning`](../../../cap-project-mgmt/skills/boop-project-mgmt-beads-planning/SKILL.md) and the anti-patterns in [`boop-writing-technical-prose`](../../../cap-product-design/skills/boop-writing-technical-prose/SKILL.md), then rewrite whatever the audit finds. Read the tree side by side rather than one issue at a time: a child that says "a sibling issue handles this" without naming it, or a term the container defines and a child then uses bare, is only visible that way.
|
|
@@ -197,3 +200,9 @@ If the area is small enough that the audit is one obvious finding with an obviou
|
|
|
197
200
|
- **Confusing this with bug hunting.** A bug is a defect in behaviour and belongs in review or debugging. This workflow is about the cost of future change, and mixing the two loses both.
|
|
198
201
|
- **Keeping the build green through a structural change.** That is how the fallback survives. The execution discipline lives in `boop-refactor-dev-workflow`; use it.
|
|
199
202
|
- **Grading against a principle rather than against this codebase.** The criteria that apply here live in [`boop-services-services`](../../../cap-services/skills/boop-services-services/SKILL.md), [`boop-services-controllers`](../../../cap-services/skills/boop-services-controllers/SKILL.md), [`boop-api-rest-api-design`](../../../cap-api/skills/boop-api-rest-api-design/SKILL.md), and [`boop-skills-agent-surface-design`](../../../cap-skills/skills/boop-skills-agent-surface-design/SKILL.md). Cite them, not a textbook.
|
|
203
|
+
|
|
204
|
+
## Related
|
|
205
|
+
|
|
206
|
+
- [`boop-refactor-dev-workflow`](../boop-refactor-dev-workflow/SKILL.md) — at execution, once the operator gate has passed and a finding has become a named structural change; that workflow is where the discipline for changing a shape existing code depends on lives.
|
|
207
|
+
- `boop-coding-review-changes` — when the question turns out to be whether a specific change is correct rather than whether an area's structure is sound; a defect in behaviour is not an audit finding.
|
|
208
|
+
- `boop-project-mgmt-beads-planning` — at decomposition, when the graded findings become an issue tree someone else will execute.
|
|
@@ -168,6 +168,11 @@ Create tasks as child issues of the feature issue. The descriptions below are th
|
|
|
168
168
|
**Every code-touching sub-task carries a `Tests` section and testing breadcrumbs.** This is how the workflow produces tasks that get tested correctly — author it when you write the sub-task, not later. Each sub-task that creates or changes code must include in its description:
|
|
169
169
|
- A **`Tests`** section naming: (a) the contracts the task creates or modifies — if it writes a function other code calls, or is itself a new caller of an existing function, name that producer/consumer boundary explicitly (e.g. *"this task calls `buildXyz`; exercise the caller's actual argument shape pairwise, not just the function's contract in isolation"*); (b) the test shapes required at this scope — unit for pure helpers, pairwise component where two pieces of code share a boundary, integration where data crosses a real boundary (DB, HTTP, serialization), route/render for surfaces; (c) any test scope deliberately deferred, with why. A `Tests` section that only says "tests pass" gives the implementing agent no signal about which shape the work needs, and the easy default (a unit test on whatever was written) misses contract bugs.
|
|
170
170
|
- **Breadcrumbs to the design/layer skill** for the code being written (controller, service, data-access, view) **and to all three testing skills** (general principles, Light TDD, the domain testing skill — see the Testing section above). The general-principles skill is the one most often dropped because a task "feels like just unit-testing" — which is exactly when pairwise contract tests get missed. List all three by default; drop one only if it is genuinely irrelevant.
|
|
171
|
+
- **The test run scope.**
|
|
172
|
+
Name what the sub-task runs before it calls itself done: the focused tests for the files it touches, plus the project's whole-program static check, and an explicit instruction not to run the full suite.
|
|
173
|
+
The full suite runs once per branch, on the Review task in step 4 — give Review that scope when you create it below.
|
|
174
|
+
Left off, every sub-task runs the whole suite on its own reasoning and the branch pays for it once per slice.
|
|
175
|
+
The wording to put on each is in the [beads-planning skill](../../../cap-project-mgmt/skills/boop-project-mgmt-beads-planning/SKILL.md).
|
|
171
176
|
|
|
172
177
|
**THE TREE RECIPE — verified on bd 1.1.2.** Wire it exactly this way. The whole lifecycle was driven through a simulated loop against this shape, including a slice that decomposed itself mid-flight, and at every step the loop claimed exactly one correct issue: no leak, no deadlock, no stall.
|
|
173
178
|
|
|
@@ -401,4 +406,11 @@ Create tasks as child issues of the feature issue. The descriptions below are th
|
|
|
401
406
|
|
|
402
407
|
Then **verify**: `bd list --status=open` over the tree must return nothing.
|
|
403
408
|
|
|
404
|
-
**STOP HERE — do NOT merge to main.** Reconcile closes the *work-tracking* loop on the `work/<feature-issue-id>` branch. It never merges to main, pushes to main, or deletes the branch — the same hand-off rule as Closeout (step 6c), and for the same reasons (the human owns the merge; concurrent worktrees; the branch is the easy-revert anchor). The loop goes idle on "No ready issues"; the human reviews the branch and merges if approved.
|
|
409
|
+
**STOP HERE — do NOT merge to main.** Reconcile closes the *work-tracking* loop on the `work/<feature-issue-id>` branch. It never merges to main, pushes to main, or deletes the branch — the same hand-off rule as Closeout (step 6c), and for the same reasons (the human owns the merge; concurrent worktrees; the branch is the easy-revert anchor). The loop goes idle on "No ready issues"; the human reviews the branch and merges if approved.
|
|
410
|
+
|
|
411
|
+
## Related
|
|
412
|
+
|
|
413
|
+
- [`boop-light-dev-workflow`](../boop-light-dev-workflow/SKILL.md) — when the Understand step shows the work extends an existing system rather than building a new one; this workflow's separate understand/plan/decompose sessions buy nothing there and lose grounding at every handoff.
|
|
414
|
+
- `boop-project-mgmt-engineering-planning` — at the planning step, to order the slices by which uncertainty each one retires rather than by which is easiest to demo.
|
|
415
|
+
- `boop-project-mgmt-beads-planning` — at decomposition, before writing child issues that a fresh agent has to pick up with none of this session's context.
|
|
416
|
+
- `boop-testing-tdd-light` — inside every implementation slice, and again for each bug UAT turns up; the failing test comes before the fix.
|
|
@@ -17,3 +17,7 @@ metadata:
|
|
|
17
17
|
- If any aspects of the spec were NOT implemented (deferred, descoped, or punted), extract those into a new revised spec in `specs/` that captures just the remaining work. Reference the archived spec for full context.
|
|
18
18
|
- The archived spec should be the full original — do not edit or trim it.
|
|
19
19
|
|
|
20
|
+
## Related
|
|
21
|
+
|
|
22
|
+
- `boop-product-design-reference-integration` — for step a of every spec you process; this workflow decides what to backfill and in what order, and that skill decides where each piece lands on the page.
|
|
23
|
+
- `boop-writing-technical-prose` — when extracting the unimplemented remainder into a revised spec; that spec is read cold by someone with none of the backfill's context.
|
|
@@ -102,3 +102,9 @@ The trap is symmetric across all three: designing from the summary (the issue, t
|
|
|
102
102
|
- **Ceremony inflation.** Regrowing feature-dev's separate understand/plan/decompose sessions, or a reflexive large issue tree, throws away the entire reason to use this. The epic is scoped to the wiring.
|
|
103
103
|
- **Verifying against the diff or the suite instead of the real path/render.** Tests prove structure; only the real path proves the goal is served.
|
|
104
104
|
- **Wiring the new behavior in tests only, never in the live code path.**
|
|
105
|
+
|
|
106
|
+
## Related
|
|
107
|
+
|
|
108
|
+
- [`boop-feature-dev-workflow`](../boop-feature-dev-workflow/SKILL.md) — when investigate or design reveals the work is genuinely greenfield; a single grounded session has nowhere to put a real data-model design, so escalate rather than force it.
|
|
109
|
+
- `boop-testing-tdd-light` — when running each child issue; the test that proves the wiring is missing is written before the wiring.
|
|
110
|
+
- `boop-coding-development` — for the implementation conventions the child issues are executed under, so the extension matches the seam it extends.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: boop-stray-disposition
|
|
3
|
+
description: "When an autonomous run (a loop, a sweep, a sub-agent session) has finished and filed follow-up issues along the way, settle each one before you write the closing summary. Every stray gets a recorded disposition — re-parented and reachable from the roadmap, folded into a spec and closed, or triaged away. Use this whenever a run ends with issues in the queue that nobody has decided to do."
|
|
4
|
+
metadata:
|
|
5
|
+
category: workflow
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Stray disposition — settle what a run filed before you call it done
|
|
9
|
+
|
|
10
|
+
Agents working through an autonomous run routinely file follow-up issues during review and
|
|
11
|
+
punch-list work without parenting them to the epic they arose from. Those issues land in the
|
|
12
|
+
ready queue disconnected from the context that produced them. After every run, before the
|
|
13
|
+
closing summary, audit for these strays and give each one a **disposition** — the deliberate
|
|
14
|
+
settling of what becomes of it — so nothing is left in limbo.
|
|
15
|
+
|
|
16
|
+
Find them by running `bd ready` and `bd list --status=open` and identifying the issues this run
|
|
17
|
+
filed: they cite the run's findings or the files it touched.
|
|
18
|
+
|
|
19
|
+
## The three dispositions
|
|
20
|
+
|
|
21
|
+
1. **Re-parent** — the stray belongs to the work that just ran. Move it under the run's epic, or
|
|
22
|
+
group several strays under a new discovered-from epic (`Group: <work> hardening`) for a
|
|
23
|
+
follow-on run scoped to that prefix on the same branch, so the operator still reviews and
|
|
24
|
+
merges once.
|
|
25
|
+
|
|
26
|
+
2. **Fold** — the stray is requirements or evidence for a spec that is already planned. Move the
|
|
27
|
+
substance into that spec's text and close the issue with a reason pointing at the spec. A
|
|
28
|
+
future run plans from the spec, never from the closed queue, so content left behind in the
|
|
29
|
+
issue would never reach it.
|
|
30
|
+
|
|
31
|
+
3. **Triage** — a true orphan. Close it with a reason if it does not survive scrutiny, or surface
|
|
32
|
+
it to the operator in the closing summary for a decision. Never leave it silently in the queue.
|
|
33
|
+
|
|
34
|
+
## Re-parenting alone is not a disposition
|
|
35
|
+
|
|
36
|
+
Nothing polls or sweeps the issue queue. Work reaches an agent only through the plan spec and the
|
|
37
|
+
runs it launches. A stray moved under an epic that no planned run will execute is still stranded —
|
|
38
|
+
just tidier.
|
|
39
|
+
|
|
40
|
+
A disposition is complete only when the stray is **reachable from the roadmap**: the plan spec
|
|
41
|
+
names the issue and the trigger for picking it up, or the substance is folded into a spec, or the
|
|
42
|
+
issue is closed.
|
|
43
|
+
|
|
44
|
+
If the stray must wait on an event, encode the sequencing as a dependency (`bd dep`) on the issue
|
|
45
|
+
that produces that event. A dependency is visible and self-releasing. Deferring an issue only
|
|
46
|
+
hides it from the ready queue until a date, which helps nobody who is not already polling.
|
|
47
|
+
|
|
48
|
+
## Fold versus reference is a judgement call
|
|
49
|
+
|
|
50
|
+
**Fold** — extract the substance into the spec so it reads complete cold, close the issue, and
|
|
51
|
+
leave pointers at both ends — when the next reader is a planner working from the spec.
|
|
52
|
+
|
|
53
|
+
**Keep the issue open and give the spec a one-line reference instead** when the finding is
|
|
54
|
+
operational rather than design-shaped (a bug with reproduction steps that will be worked *as* an
|
|
55
|
+
issue), when the issue is a living artifact with discussion or an owner, or when the content is
|
|
56
|
+
too bulky to fold without bloating the spec.
|
|
57
|
+
|
|
58
|
+
The test under both: put the substance where its next reader will actually look, and leave a
|
|
59
|
+
pointer at the other end.
|
|
60
|
+
|
|
61
|
+
## Archiving a spec orphans the issues it rooted
|
|
62
|
+
|
|
63
|
+
When closeout moves a spec to a history location, any open issue whose only roadmap reference
|
|
64
|
+
lived in that spec is stranded again. Migrate those references to the successor document — the
|
|
65
|
+
remainder spec, or the plan — as part of the same sweep.
|
|
66
|
+
|
|
67
|
+
## The test at the end
|
|
68
|
+
|
|
69
|
+
Every stray filed during the run has a recorded disposition, each disposition ends at the roadmap
|
|
70
|
+
or at a closed issue, and the ready queue contains only work someone has actually decided to do.
|
|
71
|
+
|
|
72
|
+
A queue that accumulates undispositioned findings makes every future `bd ready` call more
|
|
73
|
+
expensive to read. That noise is what this practice exists to prevent.
|
|
74
|
+
|
|
75
|
+
## Related
|
|
76
|
+
|
|
77
|
+
- `boop-project-mgmt-beads-planning` — how to write and parent the issues a disposition re-parents
|
|
78
|
+
or folds, so the next agent can pick one up cold.
|
|
79
|
+
- `boop-issue-sweep-workflow` — when the strays have already accumulated into a backlog and want
|
|
80
|
+
clearing as a batch rather than settling one run's output.
|
|
@@ -150,3 +150,9 @@ If the set of tests is small enough that the audit is a handful of edits with no
|
|
|
150
150
|
- **Changing production code while rewriting a test.** A real bug the audit uncovers is a separate issue.
|
|
151
151
|
- **Re-running the whole suite on every pass.** Work per file or per small group, and save the full suite for closeout.
|
|
152
152
|
- **Splitting into many small child issues.** Each is a session with real setup cost; group coarsely, at the suite level or higher.
|
|
153
|
+
|
|
154
|
+
## Related
|
|
155
|
+
|
|
156
|
+
- `boop-testing-testing` — when a test on the rewrite list has to be re-levelled; the project's conventions decide which level is the right one to promote it to.
|
|
157
|
+
- `boop-testing-tdd-light` — when the audit uncovers a real bug hiding behind a weak test; that is a separate issue, and it starts with the failing test.
|
|
158
|
+
- `boop-coding-debugging` — when a rewritten test goes red for a reason you did not expect; diagnose from the data before assuming the rewrite is at fault.
|
|
@@ -193,3 +193,9 @@ Create tasks as child issues of the feature issue. The descriptions below are th
|
|
|
193
193
|
4. `bd close <closeout-task-id>`.
|
|
194
194
|
5. `bd close <feature-issue-id>` (all child work is now done).
|
|
195
195
|
6. Stop. The loop will go idle on "No ready issues for prefix"; the next action belongs to the human reviewer.
|
|
196
|
+
|
|
197
|
+
## Related
|
|
198
|
+
|
|
199
|
+
- `boop-web-web-ui-design` — the primary design skill for this workflow; read it at the design step, before deciding what a page is made of.
|
|
200
|
+
- `boop-ux-purpose-judgement` — when reviewing the rendered page, to ask whether each thing on it belongs there at all, which the visual pass does not ask.
|
|
201
|
+
- `boop-writing-technical-prose` — when writing the driving spec and the child issues; each is picked up cold by an agent who was not in this session.
|