@ai-agent-lead/skills 1.4.0 → 1.5.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/README.md +30 -0
- package/package.json +1 -1
- package/skills/README.md +11 -4
- package/skills/SKILL-TEMPLATE.md +4 -2
- package/skills/WORKFLOWS.md +11 -8
- package/skills/bench/SKILL.md +20 -2
- package/skills/bootstrap/SKILL.md +24 -13
- package/skills/caveman/SKILL.md +1 -1
- package/skills/design/SKILL.md +10 -1
- package/skills/design/templates/design-note.md +47 -0
- package/skills/feature-doc/SKILL.md +11 -17
- package/skills/formats/CODE-HYGIENE.md +1 -1
- package/skills/formats/CONTEXT-FORMAT.md +5 -5
- package/skills/formats/CONTEXT-MAP-FORMAT.md +14 -3
- package/skills/formats/CONVENTION-FORMAT.md +40 -0
- package/skills/formats/DOC-DRIFT-AUDIT.md +2 -1
- package/skills/formats/OKF.md +13 -9
- package/skills/formats/{STYLE-comments.md → STYLE-COMMENTS.md} +1 -1
- package/skills/grill-plan/SKILL.md +4 -0
- package/skills/improve-codebase-architecture/INTERFACE-DESIGN.md +1 -1
- package/skills/improve-codebase-architecture/SKILL.md +6 -15
- package/skills/investigate/SKILL.md +14 -0
- package/skills/pr-review/SKILL.md +3 -3
- package/skills/prod-ready/SKILL.md +9 -8
- package/skills/security-review/SKILL.md +12 -2
- package/skills/simplify/SKILL.md +4 -4
- package/skills/system-design/SKILL.md +28 -16
- package/skills/tdd/SKILL.md +5 -4
- package/skills/tdd-rounds/COMMITS.md +4 -4
- package/skills/tdd-rounds/SKILL.md +33 -7
- package/skills/tdd-rounds/templates/builder-brief.md +4 -4
- package/skills/verify-real-deps/SKILL.md +16 -2
- package/skills/verify-real-deps/templates/known-issues.md +33 -28
- package/skills/zoom-out/SKILL.md +1 -1
- /package/skills/{design → formats}/OBSERVABILITY.md +0 -0
- /package/skills/{design → formats}/PERSONAS.md +0 -0
|
@@ -20,26 +20,17 @@ Surface architectural friction and propose **deepening opportunities** — refac
|
|
|
20
20
|
- Single-module local refactor with no cross-module impact — use `design` or refactor inline.
|
|
21
21
|
- Line-level cleanup (renames, dead-code removal) — use the [`code-hygiene`](../formats/CODE-HYGIENE.md) lens + [`simplify`](../simplify/SKILL.md).
|
|
22
22
|
|
|
23
|
-
##
|
|
23
|
+
## Vocabulary
|
|
24
24
|
|
|
25
|
-
Use
|
|
25
|
+
Use the shared architecture terms **exactly** — **module**, **interface**, **implementation**, **depth** (deep / shallow), **seam**, **adapter**, **leverage**, **locality** — and don't drift into "component," "service," "API," or "boundary." Definitions and principles are canonical in [`LANGUAGE.md`](../LANGUAGE.md); this skill links rather than restating them.
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
- **Interface** — everything a caller must know to use the module: types, invariants, error modes, ordering, config. Not just the type signature.
|
|
29
|
-
- **Implementation** — the code inside.
|
|
30
|
-
- **Depth** — leverage at the interface: a lot of behaviour behind a small interface. **Deep** = high leverage. **Shallow** = interface nearly as complex as the implementation.
|
|
31
|
-
- **Seam** — where an interface lives; a place behaviour can be altered without editing in place. (Use this, not "boundary.")
|
|
32
|
-
- **Adapter** — a concrete thing satisfying an interface at a seam.
|
|
33
|
-
- **Leverage** — what callers get from depth.
|
|
34
|
-
- **Locality** — what maintainers get from depth: change, bugs, knowledge concentrated in one place.
|
|
27
|
+
Three principles from there do the heavy lifting here:
|
|
35
28
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
- **Deletion test**: imagine deleting the module. If complexity vanishes, it was a pass-through. If complexity reappears across N callers, it was earning its keep.
|
|
29
|
+
- **Deletion test** — imagine deleting the module. If complexity vanishes, it was a pass-through; if it reappears across N callers, it was earning its keep. This is the primary filter for the candidates below.
|
|
39
30
|
- **The interface is the test surface.**
|
|
40
|
-
- **One adapter = hypothetical seam
|
|
31
|
+
- **One adapter = hypothetical seam; two adapters = real seam.**
|
|
41
32
|
|
|
42
|
-
This skill is _informed_ by the project's domain model
|
|
33
|
+
This skill is _informed_ by the project's domain model: the domain language gives names to good seams; ADRs record decisions the skill should not re-litigate.
|
|
43
34
|
|
|
44
35
|
## Process
|
|
45
36
|
|
|
@@ -85,6 +85,20 @@ The note must include:
|
|
|
85
85
|
- Do **not** skip the artifact for "small" investigations. The discipline of writing it is the value; the durable trail is the bonus.
|
|
86
86
|
- Do **not** add a Recommendation that just lists the options again. Pick one.
|
|
87
87
|
|
|
88
|
+
## Pairing with other skills
|
|
89
|
+
|
|
90
|
+
- **[`feature-doc`](../feature-doc/SKILL.md)** — runs *after*. The "Decided" recommendation becomes the feature contract.
|
|
91
|
+
- **[`grill-plan`](../grill-plan/SKILL.md)** — runs *after* when the chosen option is load-bearing and needs stress-testing into an ADR.
|
|
92
|
+
- **[`system-design`](../system-design/SKILL.md)** — runs *after* when the investigation settled a greenfield topology direction.
|
|
93
|
+
- **[`debug`](../debug/SKILL.md)** — *lateral*. Also emits a `docs/research/<topic>.md` note, but for an unexplained bug rather than a forward-looking decision.
|
|
94
|
+
|
|
95
|
+
## Done when
|
|
96
|
+
|
|
97
|
+
- A research note exists at `docs/research/<topic>.md`, opening with `type: research` OKF frontmatter, containing Context (cited), 2–3 Options, a single Recommendation, Checkpoint questions, and Out-of-scope.
|
|
98
|
+
- Every claim in Context cites `path:line` — nothing is worked from impression.
|
|
99
|
+
- Exactly one option is recommended, with the accepted trade-off named (not a re-listing of the options).
|
|
100
|
+
- The user has the checkpoint questions needed to choose, and no implementation has started.
|
|
101
|
+
|
|
88
102
|
## Handoff
|
|
89
103
|
|
|
90
104
|
Once the user picks an option:
|
|
@@ -85,13 +85,13 @@ For non-surface-changing diffs: walk `prod-ready` Section 3 (defense-in-depth) b
|
|
|
85
85
|
|
|
86
86
|
#### 3e. Doc-drift audit
|
|
87
87
|
|
|
88
|
-
Walk the
|
|
88
|
+
Walk the seven checks in [`skills/formats/DOC-DRIFT-AUDIT.md`](../formats/DOC-DRIFT-AUDIT.md) against the diff — **reviewer lens**. This is the second line of defense for `prod-ready` Section 7: the author may have missed it; you catch what's left. Any check that resolves to "no" without `n/a + reason` is a finding, at the severity that reference defines — **Blocker** for load-bearing drift (a missing ADR for a hard-to-reverse decision, a `CONTEXT.md` entry for a term other PRs will use, AC drift hiding behavior, a direct ADR contradiction), **Suggestion** when the diff is self-explanatory in isolation.
|
|
89
89
|
|
|
90
90
|
#### 3f. Hygiene (line level)
|
|
91
91
|
|
|
92
92
|
Apply the [`code-hygiene`](../formats/CODE-HYGIENE.md) lens here, not as a primary phase:
|
|
93
93
|
|
|
94
|
-
- **Comment noise**: new WHAT-comments, docstrings on exports whose contract is obvious from the signature, in-function section headers (`// validate`, `// build response`), stale "used by X" references, citation grammar that doesn't match the repo's comment style doc ([`skills/formats/STYLE-
|
|
94
|
+
- **Comment noise**: new WHAT-comments, docstrings on exports whose contract is obvious from the signature, in-function section headers (`// validate`, `// build response`), stale "used by X" references, citation grammar that doesn't match the repo's comment style doc ([`skills/formats/STYLE-COMMENTS.md`](../formats/STYLE-COMMENTS.md)). Flag as **nits by default**; promote to a suggestion only when cumulative comment noise obscures the diff (signal the author skipped `simplify`).
|
|
95
95
|
- Names that mislead (boolean returning non-bool, `getX` that mutates, `Manager`/`Helper` suffixes hiding what the thing is).
|
|
96
96
|
- Cleverness that earns its cost? Or could be boring?
|
|
97
97
|
- YAGNI — "in case we need it" parameters / interfaces / classes? Strip.
|
|
@@ -164,7 +164,7 @@ A `tdd-rounds` parent verifying a Builder's round runs a focused subset:
|
|
|
164
164
|
2. Run the test command independently — don't trust pasted output.
|
|
165
165
|
3. Read the diff, classify findings.
|
|
166
166
|
4. Tick AC checkboxes in the feature doc with the test names.
|
|
167
|
-
5. Append the round summary to `docs/
|
|
167
|
+
5. Append the round summary to the feature's `docs/features/<name>.state.md`.
|
|
168
168
|
|
|
169
169
|
The classification (blocker / suggestion / nit) lives in the parent's notes; only blockers gate the next round.
|
|
170
170
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: prod-ready
|
|
3
|
-
description: Pre-merge production-readiness checklist — operational, infrastructure, and consistency checks that tests alone don't surface. Use after `tdd` reaches green; before opening a PR or merging to main; after significant infra changes (new DB, new deployment target, new auth flow); or when the user mentions "shipping", "ready to merge", "before deploy", "production readiness", or "prod-ready".
|
|
3
|
+
description: Pre-merge production-readiness checklist — operational, infrastructure, and consistency checks that tests alone don't surface. Use after `tdd` reaches green; before opening a PR or merging to main; after significant infra changes (new DB, new deployment target, new auth flow); or when the user mentions "shipping", "ready to merge", "before deploy", "production readiness", or "prod-ready". Skip for pure docs / comment / test-only diffs, dependency bumps with no runtime change, or one-line bug fixes that don't touch infra, auth, or error paths. Pairs with `tdd` (proves the feature works; this catches what tests can't see — server timeouts, DB pragmas, error-response consistency, secrets at rest), `security-review` (the heavier threat-model pass when the surface changes), `pr-review` (the reviewer's mirror of this gate), and `verify-real-deps` (after, for releases that touch third-party APIs).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Prod-Readiness Checklist
|
|
@@ -15,6 +15,12 @@ A short pre-merge gate. Tests prove the **feature** works. This skill catches wh
|
|
|
15
15
|
- Before opening a PR or merging to main.
|
|
16
16
|
- After significant infrastructure changes (new DB, new deployment target, new auth flow).
|
|
17
17
|
|
|
18
|
+
## When to skip
|
|
19
|
+
|
|
20
|
+
- Pure docs / comment / test-only changes.
|
|
21
|
+
- Dependency bumps that don't change runtime behavior.
|
|
22
|
+
- One-line business-logic bug fixes that don't touch infra, auth, or error paths.
|
|
23
|
+
|
|
18
24
|
## Checklist
|
|
19
25
|
|
|
20
26
|
Walk each section. An item is OK to fail **only if** the feature doc's Notes / Non-Goals explicitly accepts the gap.
|
|
@@ -52,7 +58,7 @@ Walk each section. An item is OK to fail **only if** the feature doc's Notes / N
|
|
|
52
58
|
|
|
53
59
|
### 7. Documentation (the doc-map)
|
|
54
60
|
|
|
55
|
-
Implementation lands → docs drift. The natural moment to catch drift is now, not "next sprint". Walk the
|
|
61
|
+
Implementation lands → docs drift. The natural moment to catch drift is now, not "next sprint". Walk the seven checks in [`skills/formats/DOC-DRIFT-AUDIT.md`](../formats/DOC-DRIFT-AUDIT.md) — **author lens**: tick each `✓`, `✗ + remediation`, or `n/a + reason`, and fix the drift inline before the PR (don't kick it to a follow-up). Files don't need to pre-exist — create `docs/adr/`, `CONTEXT.md`, design notes lazily when the first relevant change appears.
|
|
56
62
|
|
|
57
63
|
- [ ] ADR for any new decision with viable alternatives (and no active ADR is contradicted).
|
|
58
64
|
- [ ] `CONTEXT.md` updated for any new/changed domain term, with `_Avoid_:` aliases where confusion is likely.
|
|
@@ -60,15 +66,10 @@ Implementation lands → docs drift. The natural moment to catch drift is now, n
|
|
|
60
66
|
- [ ] Feature doc reflects what was actually built (no silently-dropped or silently-added behavior).
|
|
61
67
|
- [ ] `CHANGELOG.md` `[Unreleased]` entry for any user-visible change.
|
|
62
68
|
- [ ] Every new/changed `docs/` file opens with OKF `type` frontmatter.
|
|
69
|
+
- [ ] `docs/index.md` lists every produced doc — new ones added, deleted ones removed.
|
|
63
70
|
|
|
64
71
|
Per-check definitions, skip lists, and severity live in [`DOC-DRIFT-AUDIT.md`](../formats/DOC-DRIFT-AUDIT.md) — this is the same audit `pr-review` §3e runs from the reviewer side.
|
|
65
72
|
|
|
66
|
-
## When to skip
|
|
67
|
-
|
|
68
|
-
- Pure docs / comment / test-only changes.
|
|
69
|
-
- Dependency bumps that don't change runtime behavior.
|
|
70
|
-
- One-line business-logic bug fixes that don't touch infra, auth, or error paths.
|
|
71
|
-
|
|
72
73
|
## Pairing with other skills
|
|
73
74
|
|
|
74
75
|
- **[`tdd`](../tdd/SKILL.md)** — runs *before*. `prod-ready` runs after all ACs are green.
|
|
@@ -116,7 +116,17 @@ Most reviews produce a **`## Security review` section appended to the feature do
|
|
|
116
116
|
- <risk> — accepted because <reason>; tracked at <link or follow-up>
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
For high-stakes changes (new auth flow, new external surface, regulated data), promote to `docs/security/<feature>.md` with a fuller threat-model section
|
|
119
|
+
For high-stakes changes (new auth flow, new external surface, regulated data), promote to a dedicated `docs/security/<feature>.md` with a fuller threat-model section — same shape, just longer. As a standalone produced doc it opens with OKF frontmatter (`type: security`, per [`../formats/OKF.md`](../formats/OKF.md) §2); the `## Security review` section appended to a feature doc needs none, since the feature doc already carries its own:
|
|
120
|
+
|
|
121
|
+
```yaml
|
|
122
|
+
---
|
|
123
|
+
type: security
|
|
124
|
+
title: <Feature> security review
|
|
125
|
+
description: Threat model and verified controls for <feature>'s surface change.
|
|
126
|
+
tags: [security, threat-model]
|
|
127
|
+
timestamp: YYYY-MM-DD
|
|
128
|
+
---
|
|
129
|
+
```
|
|
120
130
|
|
|
121
131
|
## Anti-patterns
|
|
122
132
|
|
|
@@ -139,5 +149,5 @@ For high-stakes changes (new auth flow, new external surface, regulated data), p
|
|
|
139
149
|
- The security surface (entry points + trust zones + data flows) is named, not assumed.
|
|
140
150
|
- Each plausible threat has a verified control or an explicit deferral with rationale.
|
|
141
151
|
- High-impact threats have two independent layers of control where feasible.
|
|
142
|
-
- The artifact
|
|
152
|
+
- The artifact is in the repo — a `## Security review` feature-doc section, or a standalone `docs/security/<feature>.md` opening with `type: security` OKF frontmatter.
|
|
143
153
|
- The PR description references the review so the reviewer can audit it.
|
package/skills/simplify/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: simplify
|
|
3
|
-
description: Single end-of-round sweep that tightens what `tdd` just left green — review every changed file for reuse, quality, efficiency,
|
|
3
|
+
description: Single end-of-round sweep that tightens what `tdd` just left green — review every changed file for reuse, quality, efficiency, test relevance, and telemetry. Use after `tdd` reaches green and before opening a PR (or before a Builder closes a round in `tdd-rounds`). Triggered by phrases like "simplify pass", "tighten this", "clean up before commit", "end-of-round sweep", or appearing as a step in a Builder brief. Skip for trivial diffs (typo, dep bump, doc-only). Pairs with `tdd` (runs immediately after green), the `code-hygiene` lens (`formats/CODE-HYGIENE.md`, applied during the sweep), and `pr-review` (a self-check after this).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Simplify
|
|
@@ -47,7 +47,7 @@ Walk every changed file. Apply each lens in order. Fix what you find inline.
|
|
|
47
47
|
- Names that read clearly out of context — would a stranger guess what `result`, `data`, `value` referred to? If not, rename.
|
|
48
48
|
- Error messages that name the failing input — `"could not parse: <value>"` beats `"parse error"`.
|
|
49
49
|
- Abstractions that haven't earned their keep — a base class with one subclass, an interface with one implementation. Inline.
|
|
50
|
-
- Comments — **default during the sweep is DELETE.** Apply [`CODE-HYGIENE.md`](../formats/CODE-HYGIENE.md) Principle 6 and the bar in [`STYLE-
|
|
50
|
+
- Comments — **default during the sweep is DELETE.** Apply [`CODE-HYGIENE.md`](../formats/CODE-HYGIENE.md) Principle 6 and the bar in [`STYLE-COMMENTS.md`](../formats/STYLE-COMMENTS.md): delete WHAT-comments, obvious-from-signature docstrings, "used by X" caller references, commented-out code, banners, and in-function section headers (`// validate`, `// build response`); keep only why-comments the next reader would otherwise reattempt. Normalize any kept citation (`ADR-007 §7`, `R6 AC-3`, `v0.3 R1b2`) to [`STYLE-COMMENTS.md`](../formats/STYLE-COMMENTS.md) §3.
|
|
51
51
|
|
|
52
52
|
### 3. Efficiency — dead code, redundant work, premature defensive checks
|
|
53
53
|
|
|
@@ -67,7 +67,7 @@ For each test added in the slice:
|
|
|
67
67
|
|
|
68
68
|
### 5. Telemetry — the observability pass
|
|
69
69
|
|
|
70
|
-
Apply the lens from [`skills/
|
|
70
|
+
Apply the lens from [`skills/formats/OBSERVABILITY.md`](../formats/OBSERVABILITY.md):
|
|
71
71
|
|
|
72
72
|
- [ ] Does every error message name the failing input?
|
|
73
73
|
- [ ] Are there any "catch-all" blocks that swallow errors?
|
|
@@ -97,7 +97,7 @@ In single-feature flow (no rounds), the sweep can land as a separate commit befo
|
|
|
97
97
|
|
|
98
98
|
## Done when
|
|
99
99
|
|
|
100
|
-
- Every changed file walked once with the
|
|
100
|
+
- Every changed file walked once with the five lenses.
|
|
101
101
|
- Each finding either fixed inline (small) or surfaced as a follow-up (large).
|
|
102
102
|
- Tests still green after the sweep — re-run them.
|
|
103
103
|
- A separate `simplify` commit exists (in `tdd-rounds`) or the sweep is captured in the final commit message (in single-feature flow).
|
|
@@ -78,7 +78,19 @@ Each seam is a potential test boundary AND a potential failure point. Naming the
|
|
|
78
78
|
|
|
79
79
|
### 5. Draw the system map
|
|
80
80
|
|
|
81
|
-
Output an ASCII diagram + a module table + a seam list
|
|
81
|
+
Output an ASCII diagram + a module table + a seam list, saved to `docs/architecture.md` (create lazily on first use). It's a produced doc, so it opens with OKF frontmatter (`type: architecture`, per [`../formats/OKF.md`](../formats/OKF.md) §2):
|
|
82
|
+
|
|
83
|
+
```yaml
|
|
84
|
+
---
|
|
85
|
+
type: architecture
|
|
86
|
+
title: <System> architecture
|
|
87
|
+
description: Module topology, dependency direction, and seams for <system>.
|
|
88
|
+
tags: [architecture, topology]
|
|
89
|
+
timestamp: YYYY-MM-DD
|
|
90
|
+
---
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Below the frontmatter, the body — ASCII map, module table, seam list:
|
|
82
94
|
|
|
83
95
|
```
|
|
84
96
|
┌──────────────┐
|
|
@@ -125,14 +137,6 @@ Before declaring the design done, check each item:
|
|
|
125
137
|
|
|
126
138
|
Failures here are not "warnings" — they're "stop and rework". The system map is load-bearing for everything downstream.
|
|
127
139
|
|
|
128
|
-
## Done when
|
|
129
|
-
|
|
130
|
-
- `docs/architecture.md` exists with: module table, dependency direction, seam list, ASCII map.
|
|
131
|
-
- Each module name comes from `CONTEXT.md` vocabulary (not framework conventions).
|
|
132
|
-
- The dependency graph is acyclic and explicitly reviewed.
|
|
133
|
-
- Every cross-module boundary has a named seam + adapter location.
|
|
134
|
-
- For any decision you're least sure about, you've raised it as an open question to the user before locking in.
|
|
135
|
-
|
|
136
140
|
## Anti-patterns
|
|
137
141
|
|
|
138
142
|
- **Layering instead of slicing.** Naming modules `controllers`, `services`, `repositories` is layering — a category split, not a responsibility split. Prefer feature slicing (`ordering/`, `billing/`).
|
|
@@ -140,6 +144,21 @@ Failures here are not "warnings" — they're "stop and rework". The system map i
|
|
|
140
144
|
- **Premature service extraction.** Splitting modules into separate processes / deployments without a real reason (scale, team, fault isolation) adds operational cost without clarity benefit. Prefer in-process modules first; extract later if needed.
|
|
141
145
|
- **Cycles "for now".** A cyclic dependency is a sign the modules aren't really separate. Don't accept it; merge them or insert a third module to break the cycle.
|
|
142
146
|
|
|
147
|
+
## Pairing with other skills
|
|
148
|
+
|
|
149
|
+
- **`investigate`** runs *before*. Investigates the problem and chooses the direction. `system-design` then operationalizes the chosen direction into a topology.
|
|
150
|
+
- **`design`** runs *after*, per module. `system-design` says what modules should exist; `design` says what shape each module has.
|
|
151
|
+
- **`grill-plan`** runs alongside or after, to stress-test high-stakes topology decisions.
|
|
152
|
+
- **`improve-codebase-architecture`** is the *opposite* skill: given an existing codebase, find what to deepen. `system-design` is greenfield; that one is brownfield.
|
|
153
|
+
|
|
154
|
+
## Done when
|
|
155
|
+
|
|
156
|
+
- `docs/architecture.md` exists, opening with `type: architecture` OKF frontmatter, and contains: module table, dependency direction, seam list, ASCII map.
|
|
157
|
+
- Each module name comes from `CONTEXT.md` vocabulary (not framework conventions).
|
|
158
|
+
- The dependency graph is acyclic and explicitly reviewed.
|
|
159
|
+
- Every cross-module boundary has a named seam + adapter location.
|
|
160
|
+
- For any decision you're least sure about, you've raised it as an open question to the user before locking in.
|
|
161
|
+
|
|
143
162
|
## Handoff
|
|
144
163
|
|
|
145
164
|
Once the system map is stable:
|
|
@@ -149,10 +168,3 @@ Once the system map is stable:
|
|
|
149
168
|
- Then proceed to `feature-doc` for the first feature using the topology.
|
|
150
169
|
|
|
151
170
|
If the system map needs to evolve later (new module, changed boundaries, removed seam), come back to this skill — don't drift the map silently.
|
|
152
|
-
|
|
153
|
-
## Pairing with other skills
|
|
154
|
-
|
|
155
|
-
- **`investigate`** runs *before*. Investigates the problem and chooses the direction. `system-design` then operationalizes the chosen direction into a topology.
|
|
156
|
-
- **`design`** runs *after*, per module. `system-design` says what modules should exist; `design` says what shape each module has.
|
|
157
|
-
- **`grill-plan`** runs alongside or after, to stress-test high-stakes topology decisions.
|
|
158
|
-
- **`improve-codebase-architecture`** is the *opposite* skill: given an existing codebase, find what to deepen. `system-design` is greenfield; that one is brownfield.
|
package/skills/tdd/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tdd
|
|
3
|
-
description: Test-driven development with the red-green-refactor loop. Use when implementing a feature, fixing a bug, changing core logic, or when the user mentions "TDD", "test-first", "red-green-refactor", or "integration tests". Skip for trivial UI glue, config changes, or pure docs edits.
|
|
3
|
+
description: Test-driven development with the red-green-refactor loop. Use when implementing a feature, fixing a bug, changing core logic, or when the user mentions "TDD", "test-first", "red-green-refactor", or "integration tests". Skip for trivial UI glue, config changes, or pure docs edits. Pairs with `feature-doc` (its ACs become the test list), `debug` (run first when the root cause isn't yet known), and `simplify` (the end-of-round sweep after green).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Test-Driven Development
|
|
@@ -31,9 +31,9 @@ Tests verify **behavior through public interfaces**, not implementation details.
|
|
|
31
31
|
|
|
32
32
|
See [TESTS.md](TESTS.md) for concrete good/bad examples and a pre-commit checklist.
|
|
33
33
|
|
|
34
|
-
##
|
|
34
|
+
## Slice vertically, one test at a time
|
|
35
35
|
|
|
36
|
-
**Do not write all tests first, then all implementation.** This is the most common TDD failure mode for AI agents — you write five tests in one shot, then five matching functions. The tests describe *imagined* behavior, become insensitive to real bugs, and lock in the wrong shape.
|
|
36
|
+
The principle that drives the workflow below. **Do not write all tests first, then all implementation.** This is the most common TDD failure mode for AI agents — you write five tests in one shot, then five matching functions. The tests describe *imagined* behavior, become insensitive to real bugs, and lock in the wrong shape.
|
|
37
37
|
|
|
38
38
|
```
|
|
39
39
|
WRONG (horizontal):
|
|
@@ -72,7 +72,7 @@ One test → minimum code to pass → next test. Each cycle informs the next.
|
|
|
72
72
|
|
|
73
73
|
### 4. Simplify pass — end-of-round, after green
|
|
74
74
|
|
|
75
|
-
Before declaring the round done, run the [`simplify`](../simplify/SKILL.md) skill. It walks every changed file with
|
|
75
|
+
Before declaring the round done, run the [`simplify`](../simplify/SKILL.md) skill. It walks every changed file with five lenses — reuse, quality, efficiency, test relevance, telemetry — and is a single sweep, not a license to refactor everything. If you find structural issues that need a dedicated round, surface them as `Open questions for parent` instead.
|
|
76
76
|
|
|
77
77
|
## Rules
|
|
78
78
|
|
|
@@ -90,6 +90,7 @@ Before declaring the round done, run the [`simplify`](../simplify/SKILL.md) skil
|
|
|
90
90
|
|
|
91
91
|
## Anti-patterns
|
|
92
92
|
|
|
93
|
+
- Horizontal slicing — all tests first, then all implementation. See *Slice vertically, one test at a time* above; it's the failure mode this skill most guards against.
|
|
93
94
|
- Writing tests after the code "to get coverage" — defeats the design feedback loop.
|
|
94
95
|
- Mocking everything — tests pass but the system is broken. Mock at boundaries only (external APIs, time, randomness).
|
|
95
96
|
- One giant test asserting many things — failures become hard to diagnose.
|
|
@@ -38,10 +38,10 @@ End-of-round refactoring (extracting helpers, removing dead branches, tightening
|
|
|
38
38
|
|
|
39
39
|
### 5. Doc-only commits stay separate from code
|
|
40
40
|
|
|
41
|
-
`docs/
|
|
41
|
+
`docs/features/<name>.state.md`, `docs/known-issues.md`, ADR patches — never bundle into a code commit. Mixing makes both diffs harder to read. Doc-only commits get a `docs:` prefix (no `R<N>:`):
|
|
42
42
|
|
|
43
43
|
```
|
|
44
|
-
docs: append actual R14 entry to
|
|
44
|
+
docs: append actual R14 entry to <name>.state.md
|
|
45
45
|
docs: add public README
|
|
46
46
|
```
|
|
47
47
|
|
|
@@ -55,7 +55,7 @@ If you can't justify it, don't lump it.
|
|
|
55
55
|
|
|
56
56
|
### 7. Commit messages are honest
|
|
57
57
|
|
|
58
|
-
The commit message states what the commit actually does, not what you wished it did. The lesson from this skill's source project: an R14 commit message claimed "
|
|
58
|
+
The commit message states what the commit actually does, not what you wished it did. The lesson from this skill's source project: an R14 commit message claimed "state file updated" but the Builder had forgotten that file — a follow-up commit was needed to restore truth. **Cost of an honest message: one extra line of typing. Cost of a lying message: a follow-up commit, a smudged history, and a lost minute the next time someone wonders why the round entry is missing.**
|
|
59
59
|
|
|
60
60
|
If a step you described in the brief didn't actually land, say so in `Deviations`. If a commit's diff doesn't match its message, fix the message before committing — or split into two commits if the message's intent really was two things.
|
|
61
61
|
|
|
@@ -109,7 +109,7 @@ Use whatever model line matches the actual driver. Match exactly the convention
|
|
|
109
109
|
## Anti-patterns
|
|
110
110
|
|
|
111
111
|
- **Mono-commit at end of round.** "R<N>: round done." Defeats the per-slice review story.
|
|
112
|
-
- **Bundling docs with code.**
|
|
112
|
+
- **Bundling docs with code.** State-file updates ride along with the code change. Diffs become harder to read.
|
|
113
113
|
- **Imperative-mood squashing.** Four sequential "wip" commits eventually amended into one. The journey isn't the commit; the destination is. Don't force-amend; commit cleanly the first time.
|
|
114
114
|
- **Empty bodies on non-trivial commits.** "fix bug" with no body. The body is where the *why* lives.
|
|
115
115
|
- **Lying about scope.** A commit message saying "also updates X" when the diff has no X. Worse than no message.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tdd-rounds
|
|
3
|
-
description: Multi-round TDD orchestration. Use when delivering a feature larger than one TDD slice — typically 5-15 acceptance criteria across multiple packages — by dispatching Builder sub-agents per round, with the parent maintaining state and verifying. Triggered when the user mentions "drive the sub-agent team", "multi-round TDD", "orchestrate rounds", "Builder agents", or when a plan from `feature-doc` lists more ACs than one agent should reasonably tackle in a single invocation. Pairs with `tdd` (Builders invoke that skill per round) and `prod-ready` (final round before tag).
|
|
3
|
+
description: Multi-round TDD orchestration. Use when delivering a feature larger than one TDD slice — typically 5-15 acceptance criteria across multiple packages — by dispatching Builder sub-agents per round, with the parent maintaining state and verifying. Triggered when the user mentions "drive the sub-agent team", "multi-round TDD", "orchestrate rounds", "Builder agents", or when a plan from `feature-doc` lists more ACs than one agent should reasonably tackle in a single invocation. Skip for a single-AC bug fix or single-package feature — invoke `tdd` directly, with no round overhead. Pairs with `tdd` (Builders invoke that skill per round) and `prod-ready` (final round before tag).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Multi-Round TDD Orchestration
|
|
@@ -23,8 +23,8 @@ Distills the pattern of a parent agent driving Builder sub-agents through a feat
|
|
|
23
23
|
- **Dispatch on a feature branch, never `main`.** Verify the current branch before dispatching the first Builder; if it's `main` / `master`, create `feat/<short-name>` first. The whole multi-round delivery lives on one feature branch (or a stack of feature branches), merged to `main` only at the end.
|
|
24
24
|
- **Plan once.** The plan file lists rounds, each round's ACs, the dependency order, and the skills cadence per round (which rounds need `design`; when to invoke `improve-codebase-architecture` mid-project; when to invoke `prod-ready`).
|
|
25
25
|
- **Brief per round.** A self-contained brief — the Builder shouldn't need conversation history.
|
|
26
|
-
- **Briefing Sub-agent**: For complex rounds, invoke a sub-agent to autonomously generate the brief by analyzing `docs/
|
|
27
|
-
- **Verify after each round.** Run the test command independently (don't trust the Builder's pasted output), read the diff, tick AC checkboxes in the feature doc with the test name, append a round summary to `docs/
|
|
26
|
+
- **Briefing Sub-agent**: For complex rounds, invoke a sub-agent to autonomously generate the brief by analyzing the feature's `docs/features/<name>.state.md`, the `feature-doc`, and the results of the previous round. See `templates/builder-brief.md` for the schema.
|
|
27
|
+
- **Verify after each round.** Run the test command independently (don't trust the Builder's pasted output), read the diff, tick AC checkboxes in the feature doc with the test name, append a round summary to `docs/features/<name>.state.md`.
|
|
28
28
|
- **Never write code yourself.** If you find yourself doing it directly under time pressure, that's a signal the round was misscoped — split it.
|
|
29
29
|
|
|
30
30
|
## The Builder's contract
|
|
@@ -32,7 +32,7 @@ Distills the pattern of a parent agent driving Builder sub-agents through a feat
|
|
|
32
32
|
When dispatched for a round, the Builder:
|
|
33
33
|
|
|
34
34
|
0. **Pre-flight.** Verifies the current branch is **not** `main` / `master`. If it is, refuses immediately and returns a blocking report — does not proceed to step 1.
|
|
35
|
-
1. Reads the brief, the plan file, `docs/
|
|
35
|
+
1. Reads the brief, the plan file, the feature's `docs/features/<name>.state.md`, and any ADRs / feature docs the brief cites.
|
|
36
36
|
2. **Executes the listed skills sequentially in this single invocation.** When a brief says "Skills (in order): design, tdd, simplify" — that means run all three in this run, not return to the parent between them. This rule is non-obvious; the brief template makes it explicit.
|
|
37
37
|
3. Commits per AC slice (or per behavior slice for refactor rounds), prefix `R<N>:`. **Read [`COMMITS.md`](COMMITS.md) before the first commit** — it captures the seven rules (`R<N>:` prefix, `#<X>` for bug fixes, per-AC slicing, separate simplify-pass commit, separate doc commits, single-commit-with-justification, honest messages) and the message-body shape. The parent reads commits as the review surface; a clean sequence is reviewable one diff at a time, a mono-commit isn't.
|
|
38
38
|
4. Returns the structured report from `templates/builder-report.md`.
|
|
@@ -44,18 +44,28 @@ When dispatched for a round, the Builder:
|
|
|
44
44
|
|---|---|---|
|
|
45
45
|
| [`design`](../design/SKILL.md) | Builder | Rounds introducing a new package or non-trivial interface. Skip on rounds that only extend existing modules. |
|
|
46
46
|
| [`tdd`](../tdd/SKILL.md) | Builder | **Every** code-writing round. Mandatory. |
|
|
47
|
-
| [`simplify`](../simplify/SKILL.md) | Builder | End of every round, after green. Single sweep — reuse / quality / efficiency / test relevance. Lands as its own commit ([COMMITS.md rule 4](COMMITS.md)). |
|
|
47
|
+
| [`simplify`](../simplify/SKILL.md) | Builder | End of every round, after green. Single sweep — reuse / quality / efficiency / test relevance / telemetry. Lands as its own commit ([COMMITS.md rule 4](COMMITS.md)). |
|
|
48
48
|
| [`improve-codebase-architecture`](../improve-codebase-architecture/SKILL.md) | **Parent** | Once mid-project, after the load-bearing seams exist. Surfaced opportunities become dedicated refactor rounds (no behavior change; ACs are "all existing tests still green"). |
|
|
49
49
|
| [`prod-ready`](../prod-ready/SKILL.md) | Builder, final round only | Pre-tag operational checklist. Output the filled checklist verbatim in the Builder's report. |
|
|
50
50
|
| [`verify-real-deps`](../verify-real-deps/SKILL.md) | **Parent** | After `prod-ready` clean, before tagging. Catches what unit/integration tests can't see — wire-shape mismatches against real third-party APIs. |
|
|
51
51
|
|
|
52
52
|
## State tracking
|
|
53
53
|
|
|
54
|
-
`docs/
|
|
54
|
+
Each feature has one state file, `docs/features/<name>.state.md` — a sibling to its contract (`<name>.md`) and design note (`<name>.design.md`). It is the parent-maintained running summary, append-only, ~one `## Round N` section per round. The Builder reads it as pre-flight context for the round; the parent appends after each round closes. Single source of truth for "what we have so far" between Builder invocations. There is no global `docs/STATE.md`; `docs/index.md` is the feature manifest (per [ADR-0001](../../docs/adr/0001-distributed-state.md)).
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
It is a produced doc, so it opens with OKF frontmatter (`type: state`, per [`../formats/OKF.md`](../formats/OKF.md) §2), then one section per round:
|
|
57
57
|
|
|
58
58
|
```
|
|
59
|
+
---
|
|
60
|
+
type: state
|
|
61
|
+
title: <Feature Name> — state
|
|
62
|
+
description: Round-by-round state for the <name> feature.
|
|
63
|
+
tags: [<name>, state]
|
|
64
|
+
timestamp: YYYY-MM-DD
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
# <Feature Name> — state
|
|
68
|
+
|
|
59
69
|
## Round N — <title> (DONE YYYY-MM-DD)
|
|
60
70
|
Delivered: AC-NN, AC-NN
|
|
61
71
|
New packages: <list>
|
|
@@ -87,6 +97,22 @@ Known follow-ups: <one line>
|
|
|
87
97
|
|
|
88
98
|
- [`COMMITS.md`](COMMITS.md) — commit cadence and message style (per-AC slicing, `R<N>:` prefix, when single-commit is OK, honesty rule). Builders read this before the first commit.
|
|
89
99
|
|
|
100
|
+
## Pairing with other skills
|
|
101
|
+
|
|
102
|
+
- **[`feature-doc`](../feature-doc/SKILL.md)** — runs *before*. Its AC list is what splits into rounds.
|
|
103
|
+
- **[`tdd`](../tdd/SKILL.md)** — *invoked* by every code-writing round (mandatory).
|
|
104
|
+
- **[`design`](../design/SKILL.md)**, **[`simplify`](../simplify/SKILL.md)**, **[`prod-ready`](../prod-ready/SKILL.md)**, **[`verify-real-deps`](../verify-real-deps/SKILL.md)** — *invoked* per the Skills-cadence table above.
|
|
105
|
+
- **[`improve-codebase-architecture`](../improve-codebase-architecture/SKILL.md)** — run *once by the parent* mid-project, after the load-bearing seams exist.
|
|
106
|
+
- **[`grill-plan`](../grill-plan/SKILL.md)** — *escalation* when an ADR wobbles mid-round.
|
|
107
|
+
|
|
108
|
+
## Done when
|
|
109
|
+
|
|
110
|
+
- Every AC in the feature doc is ticked with the name of the test that proves it.
|
|
111
|
+
- `docs/features/<name>.state.md` has one append-only `## Round N` section per round.
|
|
112
|
+
- The test suite was green at the end of **every** round (parent-verified independently), not only at the end.
|
|
113
|
+
- The final round ran `prod-ready`; `verify-real-deps` ran before the tag; `docs/known-issues.md` has zero `Open` entries (or explicit deferred-by-design ones).
|
|
114
|
+
- The whole delivery lived on a feature branch and merged to `main` only at the end.
|
|
115
|
+
|
|
90
116
|
## Handoff
|
|
91
117
|
|
|
92
118
|
When the final round completes:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ROUND N — <title>
|
|
2
2
|
|
|
3
|
-
You are a Builder sub-agent in a multi-round TDD project. Read the orchestration plan and `docs/
|
|
3
|
+
You are a Builder sub-agent in a multi-round TDD project. Read the orchestration plan and the feature's `docs/features/<name>.state.md` first. **Execute design + tdd + simplify in THIS invocation. Do not stop after design.**
|
|
4
4
|
|
|
5
5
|
## Scope
|
|
6
6
|
|
|
@@ -34,18 +34,18 @@ You are a Builder sub-agent in a multi-round TDD project. Read the orchestration
|
|
|
34
34
|
## Files you must NOT touch
|
|
35
35
|
|
|
36
36
|
- closed packages: `<list>`
|
|
37
|
-
- `cli/`, `creds/`, `.claude/`, `docs/
|
|
37
|
+
- `cli/`, `creds/`, `.claude/`, `docs/features/<name>.state.md` (parent owns)
|
|
38
38
|
- ...
|
|
39
39
|
|
|
40
40
|
## Skills (in order — execute ALL in this invocation)
|
|
41
41
|
|
|
42
42
|
1. **`design`** — REQUIRED if introducing a new package or non-trivial interface. Decisions to make: <list>.
|
|
43
43
|
2. **`tdd`** — REQUIRED. Vertical slicing per AC; commit prefix `R<N>:`. Read [`tdd-rounds/COMMITS.md`](../COMMITS.md) before the first commit — it captures the per-AC slicing rule, the simplify-pass-gets-its-own-commit rule, the doc-commits-stay-separate rule, when single-commit is justified, and the message-body shape.
|
|
44
|
-
3. **[`simplify`](../../simplify/SKILL.md)** — REQUIRED end-of-round. Walk every changed file with
|
|
44
|
+
3. **[`simplify`](../../simplify/SKILL.md)** — REQUIRED end-of-round. Walk every changed file with five lenses: reuse, quality, efficiency, test relevance, telemetry. Land as its own commit (`R<N>: simplify — <summary>`).
|
|
45
45
|
|
|
46
46
|
## Pre-flight reading (in order)
|
|
47
47
|
|
|
48
|
-
1. `docs/
|
|
48
|
+
1. `docs/features/<name>.state.md` — what previous rounds delivered.
|
|
49
49
|
2. `docs/features/<feature>.md` — the AC contract.
|
|
50
50
|
3. The ADRs cited above.
|
|
51
51
|
4. <specific files the Builder needs to read before starting>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: verify-real-deps
|
|
3
|
-
description: Pre-tag smoke test against real third-party APIs. Use after `prod-ready` is clean, before tagging vN.0 — the gate that catches wire-shape mismatches that fakes accept but real upstreams reject. Triggered when the user mentions "smoke test", "real API", "live verify", "before tag", or "end-to-end against actual <vendor>". Pairs with `prod-ready` (which catches ops/infra issues tests miss) and `tdd-rounds` (the orchestration that feeds into this gate).
|
|
3
|
+
description: Pre-tag smoke test against real third-party APIs. Use after `prod-ready` is clean, before tagging vN.0 — the gate that catches wire-shape mismatches that fakes accept but real upstreams reject. Triggered when the user mentions "smoke test", "real API", "live verify", "before tag", or "end-to-end against actual <vendor>". Skip when there's no third-party API integration, or the "real" upstream is a staging service you fully control. Pairs with `prod-ready` (which catches ops/infra issues tests miss) and `tdd-rounds` (the orchestration that feeds into this gate).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Verify Against Real Dependencies
|
|
@@ -107,10 +107,24 @@ git push --tags
|
|
|
107
107
|
|
|
108
108
|
- [`templates/known-issues.md`](templates/known-issues.md) — the bug-ledger format.
|
|
109
109
|
|
|
110
|
+
## Pairing with other skills
|
|
111
|
+
|
|
112
|
+
- **[`prod-ready`](../prod-ready/SKILL.md)** — runs *before*. This gate fires only once `prod-ready` is clean; it catches the wire-shape class `prod-ready` can't see.
|
|
113
|
+
- **[`tdd-rounds`](../tdd-rounds/SKILL.md)** — the *orchestration* that feeds this gate; each ledger entry becomes a fix-round brief the parent dispatches.
|
|
114
|
+
- **[`tdd`](../tdd/SKILL.md)** — *invoked* inside each fix-round: reproduce the surprise as a failing test before fixing.
|
|
115
|
+
|
|
116
|
+
## Done when
|
|
117
|
+
|
|
118
|
+
- The representative end-to-end flow ran against the **real** upstream with real credentials.
|
|
119
|
+
- Every surprise is captured in `docs/known-issues.md` with all six fields.
|
|
120
|
+
- The bug ledger has zero `Open` entries (or only explicit deferred-by-design ones with a tracking line).
|
|
121
|
+
- For each fixed bug, the fake / mock was tightened to reject the wrong shape too.
|
|
122
|
+
- A verification entry was appended to `docs/features/<name>.state.md`, and the release is tagged.
|
|
123
|
+
|
|
110
124
|
## Handoff
|
|
111
125
|
|
|
112
126
|
When the bug ledger is clean and the same end-to-end flow runs without surprise:
|
|
113
127
|
|
|
114
|
-
- Append a verification entry to `docs/
|
|
128
|
+
- Append a verification entry to the feature's `docs/features/<name>.state.md`: `## End-to-end smoke test (DONE YYYY-MM-DD)` with what was run and what was found.
|
|
115
129
|
- Tag the release.
|
|
116
130
|
- The bug ledger stays in `docs/known-issues.md` as a permanent post-mortem record. Future contributors read it to understand "what surprises lurk in this codebase that the test suite doesn't show."
|
|
@@ -1,56 +1,61 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: known-issues
|
|
3
|
-
title: "Known issues
|
|
4
|
-
description:
|
|
5
|
-
tags: [
|
|
3
|
+
title: "Known issues"
|
|
4
|
+
description: <one sentence — what this ledger tracks>
|
|
5
|
+
tags: [known-issues]
|
|
6
6
|
timestamp: YYYY-MM-DD
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
<!-- Frontmatter is OKF per skills/formats/OKF.md (`type: known-issues`).
|
|
10
|
-
`timestamp` tracks the last edit; the Discovered line below pins the first run. -->
|
|
9
|
+
<!-- Frontmatter is OKF per skills/formats/OKF.md (`type: known-issues`). One per repo: docs/known-issues.md. -->
|
|
11
10
|
|
|
12
|
-
# Known issues
|
|
11
|
+
# Known issues
|
|
13
12
|
|
|
14
|
-
**
|
|
15
|
-
**Status:** <N> open / <M> closed.
|
|
13
|
+
This file has **two modes** — use whichever fits (a repo may use both, under separate headings). Delete the mode you don't need.
|
|
16
14
|
|
|
17
|
-
|
|
15
|
+
- **A — Smoke-test bug ledger** (`verify-real-deps`): bugs the first real-upstream run surfaced that tests missed. Each entry doubles as the brief for its fix-round.
|
|
16
|
+
- **B — Accepted-but-unimplemented follow-ups** (`tdd-rounds`, deferrals): work that's agreed but not done yet — e.g. an ADR accepted but not implemented. Each entry names the artifact that *claims* it's done, the real state, and the next step.
|
|
18
17
|
|
|
19
18
|
---
|
|
20
19
|
|
|
21
|
-
##
|
|
20
|
+
## A — Smoke-test bug ledger
|
|
21
|
+
|
|
22
|
+
**Discovered:** YYYY-MM-DD (first end-to-end run against real <upstream>).
|
|
23
|
+
**Status:** <N> open / <M> closed.
|
|
24
|
+
|
|
25
|
+
### #N — <one-line title>
|
|
22
26
|
|
|
23
27
|
**Severity:** High | Medium | Low — <one-line reason based on user impact>.
|
|
24
|
-
**Status:** Open | Closed in R<N> (commit <hash>). Tests:
|
|
25
|
-
`TestNameOne`,
|
|
26
|
-
`TestNameTwo`.
|
|
28
|
+
**Status:** Open | Closed in R<N> (commit <hash>). Tests: `TestOne`, `TestTwo`.
|
|
27
29
|
|
|
28
30
|
**Reproduction:**
|
|
29
31
|
1. <numbered step a stranger could follow>
|
|
30
|
-
2. <
|
|
31
|
-
3. <expected vs observed>
|
|
32
|
+
2. <expected vs observed>
|
|
32
33
|
|
|
33
|
-
**Root cause:** <one paragraph — why the test passed but the real API didn't
|
|
34
|
+
**Root cause:** <one paragraph — why the test passed but the real API didn't: the harness's permissive behavior, the real contract, the gap between them.>
|
|
34
35
|
|
|
35
36
|
**Files:**
|
|
36
|
-
- `<package>/<file
|
|
37
|
-
- `<
|
|
37
|
+
- `<package>/<file>` — the function that mishandled the shape.
|
|
38
|
+
- `<harness>/<fake>` — the fake that accepted the wrong shape (fix this too, or the test layer regresses).
|
|
38
39
|
|
|
39
|
-
**Fix sketch:**
|
|
40
|
-
<one paragraph specific enough to scope a Builder brief. Mention the precise wire shape change, the function signature change if any, and the new test that pins the real-API contract.>
|
|
40
|
+
**Fix sketch:** <one paragraph specific enough to scope a Builder brief.>
|
|
41
41
|
|
|
42
42
|
---
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
## B — Accepted-but-unimplemented follow-ups
|
|
45
|
+
|
|
46
|
+
### <short title>
|
|
47
|
+
|
|
48
|
+
- **Claimed done by:** <artifact — e.g. ADR-NNNN, a feature doc>.
|
|
49
|
+
- **Actual state:** <what's really true — e.g. "decided, not yet implemented">.
|
|
50
|
+
- **Next step:** <the concrete action, and what unblocks it>.
|
|
51
|
+
|
|
52
|
+
_Write `_No open follow-ups._` when the list is empty._
|
|
45
53
|
|
|
46
54
|
---
|
|
47
55
|
|
|
48
|
-
## Fix plan
|
|
56
|
+
## Fix plan (mode A)
|
|
49
57
|
|
|
50
|
-
**R<N>
|
|
51
|
-
**R<N+1>
|
|
58
|
+
**R<N> (DONE YYYY-MM-DD):** issues #X–#Y closed in <K> commits + a simplify pass.
|
|
59
|
+
**R<N+1> (PENDING):** issue #Z.
|
|
52
60
|
|
|
53
|
-
After all open issues
|
|
54
|
-
- Append an end-to-end verification entry to `docs/STATE.md`.
|
|
55
|
-
- Tag vN.0.
|
|
56
|
-
- Leave this file in place as a permanent post-mortem record.
|
|
61
|
+
After all open issues close: append an end-to-end verification entry to `docs/features/<name>.state.md`, tag vN.0, and leave this file as a permanent post-mortem record.
|
package/skills/zoom-out/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: zoom-out
|
|
3
|
-
description: User-invoked utility — pulls the agent up an abstraction layer when the user is lost in unfamiliar code. Produces a map of relevant modules, callers, and seams in `docs/CONTEXT.md` vocabulary. Use when the user says "I'm lost", "zoom out", "give me higher-level context", "I don't know this area", "what depends on what here", or invokes the slash command. Does not change which workflow the user is in — interrupts to orient, then hands back. Skip when the user already has the map and just needs to read code.
|
|
3
|
+
description: User-invoked utility — pulls the agent up an abstraction layer when the user is lost in unfamiliar code. Produces a map of relevant modules, callers, and seams in `docs/CONTEXT.md` vocabulary. Use when the user says "I'm lost", "zoom out", "give me higher-level context", "I don't know this area", "what depends on what here", or invokes the slash command. Does not change which workflow the user is in — interrupts to orient, then hands back. Skip when the user already has the map and just needs to read code. Runs before `debug` or `improve-codebase-architecture` when the area is unfamiliar.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
File without changes
|
|
File without changes
|