@ikon85/agent-workflow-kit 0.30.0 → 0.32.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/.agents/skills/audit-skills/SKILL.md +34 -5
- package/.agents/skills/board-to-waves/SKILL.md +14 -0
- package/.agents/skills/code-review/SKILL.md +22 -3
- package/.agents/skills/git-worktree-recover/SKILL.md +31 -10
- package/.agents/skills/kit-update/SKILL.md +21 -1
- package/.agents/skills/local-ci/SKILL.md +16 -0
- package/.agents/skills/orchestrate-wave/SKILL.md +43 -14
- package/.agents/skills/project-release/SKILL.md +18 -0
- package/.agents/skills/security-audit/SKILL.md +18 -0
- package/.agents/skills/setup-workflow/SKILL.md +39 -2
- package/.agents/skills/spec-self-critique/SKILL.md +16 -7
- package/.agents/skills/to-issues/SKILL.md +13 -1
- package/.agents/skills/to-prd/SKILL.md +14 -0
- package/.agents/skills/to-waves/SKILL.md +16 -2
- package/.agents/skills/triage/SKILL.md +24 -0
- package/.agents/skills/verify-spike/SKILL.md +20 -1
- package/.agents/skills/wrapup/SKILL.md +26 -4
- package/.claude/skills/audit-skills/SKILL.md +34 -5
- package/.claude/skills/board-to-waves/SKILL.md +14 -0
- package/.claude/skills/code-review/SKILL.md +22 -3
- package/.claude/skills/git-worktree-recover/SKILL.md +31 -10
- package/.claude/skills/kit-update/SKILL.md +21 -1
- package/.claude/skills/local-ci/SKILL.md +16 -0
- package/.claude/skills/orchestrate-wave/SKILL.md +43 -14
- package/.claude/skills/project-release/SKILL.md +18 -0
- package/.claude/skills/security-audit/SKILL.md +18 -0
- package/.claude/skills/setup-workflow/SKILL.md +39 -2
- package/.claude/skills/spec-self-critique/SKILL.md +16 -7
- package/.claude/skills/to-issues/SKILL.md +13 -1
- package/.claude/skills/to-prd/SKILL.md +14 -0
- package/.claude/skills/to-waves/SKILL.md +16 -2
- package/.claude/skills/triage/SKILL.md +24 -0
- package/.claude/skills/verify-spike/SKILL.md +20 -1
- package/.claude/skills/wrapup/SKILL.md +26 -4
- package/README.md +41 -0
- package/agent-workflow-kit.package.json +36 -36
- package/package.json +1 -1
- package/scripts/kit-update-pr.mjs +14 -1
- package/scripts/kit-update-pr.test.mjs +21 -0
- package/scripts/test_retro_wrapup_contract.py +17 -0
- package/scripts/test_skill_optional_readiness.py +171 -0
- package/scripts/test_skill_readiness_contract.py +127 -7
- package/scripts/test_skill_readiness_preflight.py +180 -0
- package/scripts/test_skill_required_readiness.py +233 -0
- package/scripts/test_skill_setup_workflow_seeds.py +22 -0
- package/src/cli.mjs +10 -2
- package/src/commands/update.mjs +65 -8
- package/src/lib/updateCandidate.mjs +116 -2
|
@@ -23,6 +23,35 @@ skills the other steps rely on drift, and nothing fixes them unless a recipe doe
|
|
|
23
23
|
Not for: rewriting a domain skill's content on demand (that is the skill itself),
|
|
24
24
|
or auditing application code (a code review or a diagnosis does that).
|
|
25
25
|
|
|
26
|
+
## Readiness preflight — first
|
|
27
|
+
|
|
28
|
+
<!-- readiness:optional-preflight:start -->
|
|
29
|
+
Before enumerating skills, launching research subagents, or editing any skill,
|
|
30
|
+
run this once from the project root:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
node scripts/readiness.mjs check --skill audit-skills --json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
- `ready`: continue silently with the generic audit and the active
|
|
37
|
+
`projectChecks` block.
|
|
38
|
+
- `degraded`: keep the generic audit active, omit only `projectChecks`, and emit
|
|
39
|
+
exactly one concise summary: `Readiness degraded — inactive block
|
|
40
|
+
projectChecks (auditSkillsLayer: <state>). Run /setup-workflow, configure
|
|
41
|
+
docs/agents/skills/audit-skills.md, then rerun this skill.`
|
|
42
|
+
- `blocked`: stop before continuing and report the non-ready required capability
|
|
43
|
+
plus the exact `/setup-workflow` recovery path.
|
|
44
|
+
- Invalid evidence is always visible in that one summary; never interpret it as
|
|
45
|
+
an opt-out or invent project checks.
|
|
46
|
+
<!-- readiness:optional-preflight:end -->
|
|
47
|
+
|
|
48
|
+
<!-- readiness:block projectChecks -->
|
|
49
|
+
When `projectChecks` is active, read
|
|
50
|
+
`docs/agents/skills/audit-skills.md` and apply its concrete class assignments,
|
|
51
|
+
project-specific guard commands, and drift checks in addition to the generic
|
|
52
|
+
recipe below.
|
|
53
|
+
<!-- readiness:end -->
|
|
54
|
+
|
|
26
55
|
## Standing guards (run without this audit)
|
|
27
56
|
|
|
28
57
|
Two automatic nets catch the most common drift classes before an audit — this
|
|
@@ -31,7 +60,7 @@ recipe complements them, it does not replace them:
|
|
|
31
60
|
1. **A skill-sync test** — for any un-guessable enumeration a skill documents (a
|
|
32
61
|
status→bucket map, a design-token list), a test parses the value out of the
|
|
33
62
|
SKILL.md and asserts equality with the code constant. Drift breaks the build.
|
|
34
|
-
|
|
63
|
+
Run the concrete tests available in the repository.
|
|
35
64
|
2. **The drift-hint hook** (`.claude/hooks/skill-drift-hint.py`) + a per-skill
|
|
36
65
|
`SOURCES.txt`: at SessionStart it flags any skill whose declared source file
|
|
37
66
|
is newer in git than its SKILL.md.
|
|
@@ -79,8 +108,9 @@ plus the `SOURCES.txt` files. Sort every skill into one of three classes:
|
|
|
79
108
|
scripts or hooks with no `SOURCES.txt` and no hook net. No hook warns, so
|
|
80
109
|
re-check them manually each audit.
|
|
81
110
|
|
|
82
|
-
|
|
83
|
-
catches the next new skill that would
|
|
111
|
+
Derive each concrete skill's class from the manifest, its `SOURCES.txt`, and the
|
|
112
|
+
repository surfaces — a completeness gate catches the next new skill that would
|
|
113
|
+
otherwise stay invisible.
|
|
84
114
|
|
|
85
115
|
### 2. Audit in parallel — one subagent per skill
|
|
86
116
|
|
|
@@ -129,8 +159,7 @@ alongside the Claude source), sync the mirror in the **same** change — otherwi
|
|
|
129
159
|
the second surface rots silently. Mirror the body, but preserve each surface's
|
|
130
160
|
own frontmatter: a mirror's `description` may be deliberately condensed, so never
|
|
131
161
|
blind-copy the whole file over it. A `SOURCES.txt` is a plain anchor list and can
|
|
132
|
-
be mirrored verbatim.
|
|
133
|
-
transform.
|
|
162
|
+
be mirrored verbatim. Use the repository's declared surfaces and exact transform.
|
|
134
163
|
|
|
135
164
|
## Done
|
|
136
165
|
|
|
@@ -8,6 +8,20 @@ disable-model-invocation: false
|
|
|
8
8
|
|
|
9
9
|
**Survey the board → cluster open issues by theme → anchor stub issues.** Systematizes how Welle F came about: first look at what's open and what fits together, then form thematic waves. Result lands durably as an anchor issue on the board (GitHub = SSOT), not as a chat list.
|
|
10
10
|
|
|
11
|
+
<!-- readiness:required-preflight:start -->
|
|
12
|
+
## 0. Required readiness preflight
|
|
13
|
+
|
|
14
|
+
This is the first executable workflow step. From the project root, before any remote write or other `gh`/`board-sync.py` command, run this read-only check:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
node scripts/readiness.mjs check --skill board-to-waves --json
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
- `verdict=ready`: continue with the existing workflow without announcing the check. **Ready is silent.**
|
|
21
|
+
- `verdict=blocked`: `STOP` before any mutation. Report every required capability as `<capability>=<state>` so `missing`, `pending`, and `invalid` remain distinct, then give exactly one recovery path: **Run `/setup-workflow`, then rerun `/board-to-waves`.** Do not fall back to bare tracker or board commands.
|
|
22
|
+
- `managedBoard=not-applicable`: `STOP` and report that `/board-to-waves` is **inapplicable** for a project that deliberately has no managed board. This is a terminal project decision, not invalid evidence and not a partially active mode.
|
|
23
|
+
<!-- readiness:required-preflight:end -->
|
|
24
|
+
|
|
11
25
|
## Pipeline Position
|
|
12
26
|
|
|
13
27
|
```
|
|
@@ -16,7 +16,26 @@ A code-review compares one diff against **two independent axes** — Standards a
|
|
|
16
16
|
| "Why is this broken / slow?" (root-cause of a known defect) | `diagnose` |
|
|
17
17
|
| "Clean this up — reuse, simplify, cut waste." (no bug-hunting) | a dedicated simplification pass |
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Readiness preflight — first
|
|
20
|
+
|
|
21
|
+
<!-- readiness:optional-preflight:start -->
|
|
22
|
+
Before the diff preflight or either review axis, run this once from the project root:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
node scripts/readiness.mjs check --skill code-review --json
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- `ready`: continue without a readiness message. Ready is silent.
|
|
29
|
+
- `degraded`: keep the generic two-axis review active, omit only the inactive block `projectEnrichment`, and emit exactly one concise summary: `Readiness degraded — inactive block projectEnrichment (codeReviewLayer: <state>). Run /setup-workflow, configure docs/agents/code-review.md, then rerun this skill.`
|
|
30
|
+
- `blocked`: stop before continuing and report the non-ready required capability plus the exact `/setup-workflow` recovery path.
|
|
31
|
+
- Invalid is always visible: include the `invalid` capability state in the single summary and never treat it as an opt-out. Do not emit separate warnings later in the workflow.
|
|
32
|
+
<!-- readiness:optional-preflight:end -->
|
|
33
|
+
|
|
34
|
+
<!-- readiness:block projectEnrichment -->
|
|
35
|
+
When `projectEnrichment` is active, read `docs/agents/code-review.md` first. Apply its project-specific guidance about which sources count and how this method relates to adjacent tools already running in the environment.
|
|
36
|
+
<!-- readiness:end -->
|
|
37
|
+
|
|
38
|
+
## Diff preflight (fail-fast, before either axis starts)
|
|
20
39
|
|
|
21
40
|
1. **Fixed point** — whatever the requester names: a SHA, branch, tag, `main`, `HEAD~N`. Missing → ask; do not guess.
|
|
22
41
|
2. **Three-dot diff against the merge-base** — `git diff <fixed-point>...HEAD` (three dots, not two — two dots diffs tip-to-tip and pulls in unrelated upstream changes), plus the commit list: `git log <fixed-point>..HEAD --oneline`.
|
|
@@ -24,7 +43,7 @@ A code-review compares one diff against **two independent axes** — Standards a
|
|
|
24
43
|
|
|
25
44
|
## Axis 1 — Standards
|
|
26
45
|
|
|
27
|
-
**Sources.** This repo's own documented conventions: a root convention file (`CLAUDE.md`/`AGENTS.md`/`CONTRIBUTING.md` — whichever this repo uses), any per-package convention files in a monorepo, a `docs/conventions/` folder.
|
|
46
|
+
**Sources.** This repo's own documented conventions: a root convention file (`CLAUDE.md`/`AGENTS.md`/`CONTRIBUTING.md` — whichever this repo uses), any per-package convention files in a monorepo, and a `docs/conventions/` folder. Gather these generic sources from the repo root before reviewing.
|
|
28
47
|
|
|
29
48
|
**Plus a Fowler-smell baseline** (*Refactoring*, ch. 3) — applies even when the repo documents nothing. Each smell is a **judgment call** (flag as "possible X"), never a hard violation:
|
|
30
49
|
|
|
@@ -61,4 +80,4 @@ A code-review compares one diff against **two independent axes** — Standards a
|
|
|
61
80
|
|
|
62
81
|
## Relationship to adjacent review tooling
|
|
63
82
|
|
|
64
|
-
This skill governs one thing: a diff/branch/PR review split into Standards vs. Spec. It is not the only review-shaped tool an environment may have — a pre-code plan-review loop, a security-specific audit, a pure reuse/simplification pass, or a dedicated reviewer subagent can all coexist with it; each stays its own axis, not a replacement for this one.
|
|
83
|
+
This skill governs one thing: a diff/branch/PR review split into Standards vs. Spec. It is not the only review-shaped tool an environment may have — a pre-code plan-review loop, a security-specific audit, a pure reuse/simplification pass, or a dedicated reviewer subagent can all coexist with it; each stays its own axis, not a replacement for this one. Without active project enrichment, treat any other review tool you find as complementary unless it explicitly says otherwise.
|
|
@@ -20,11 +20,36 @@ discipline and its guards) didn't stop it.
|
|
|
20
20
|
|
|
21
21
|
## Precondition
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
This generic recovery remains usable whether or not the project has prevention
|
|
24
|
+
guards or a custom worktree setup command.
|
|
25
|
+
|
|
26
|
+
## Readiness preflight — first
|
|
27
|
+
|
|
28
|
+
<!-- readiness:optional-preflight:start -->
|
|
29
|
+
Before assessing refs or moving a branch, run this once from the project root:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
node scripts/readiness.mjs check --skill git-worktree-recover --json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
- `ready`: continue silently with generic recovery and the active
|
|
36
|
+
`projectRecovery` block.
|
|
37
|
+
- `degraded`: keep generic reflog recovery active, omit only
|
|
38
|
+
`projectRecovery`, and emit exactly one concise summary: `Readiness degraded
|
|
39
|
+
— inactive block projectRecovery (worktreeRecoveryLayer: <state>). Run
|
|
40
|
+
/setup-workflow, configure docs/agents/skills/git-worktree-recover.md, then
|
|
41
|
+
rerun this skill.`
|
|
42
|
+
- `blocked`: stop before continuing and report the non-ready required capability
|
|
43
|
+
plus the exact `/setup-workflow` recovery path.
|
|
44
|
+
- Invalid evidence is always visible in that one summary; never interpret it as
|
|
45
|
+
an opt-out or invent a project command.
|
|
46
|
+
<!-- readiness:optional-preflight:end -->
|
|
47
|
+
|
|
48
|
+
<!-- readiness:block projectRecovery -->
|
|
49
|
+
When `projectRecovery` is active, read
|
|
50
|
+
`docs/agents/skills/git-worktree-recover.md` and apply its named prevention
|
|
51
|
+
guards and exact worktree setup command around the generic recovery below.
|
|
52
|
+
<!-- readiness:end -->
|
|
28
53
|
|
|
29
54
|
---
|
|
30
55
|
|
|
@@ -124,16 +149,12 @@ it.
|
|
|
124
149
|
|
|
125
150
|
## Phase 5 — Set up a worktree
|
|
126
151
|
|
|
127
|
-
Set the recovered branch up cleanly in its own worktree.
|
|
128
|
-
worktree-setup command, use it (it typically runs `git worktree add`, installs
|
|
129
|
-
deps and copies env files); otherwise:
|
|
152
|
+
Set the recovered branch up cleanly in its own worktree. The generic fallback is:
|
|
130
153
|
|
|
131
154
|
```bash
|
|
132
155
|
git worktree add <path> <recovered-branch>
|
|
133
156
|
```
|
|
134
157
|
|
|
135
|
-
Your project layer names the exact command and what it copies.
|
|
136
|
-
|
|
137
158
|
**Verify after setup:**
|
|
138
159
|
|
|
139
160
|
```bash
|
|
@@ -34,12 +34,30 @@ release contain the same artifact.
|
|
|
34
34
|
`npm test` command there, and activates only a verified candidate. A staging
|
|
35
35
|
or verification failure leaves the installed tree byte-identical.
|
|
36
36
|
|
|
37
|
+
The staged candidate also adopts the current readiness schema without
|
|
38
|
+
invoking `setup-workflow`: it preserves explicit readiness decisions and
|
|
39
|
+
legacy project evidence, and seeds only newly introduced safe project-layer
|
|
40
|
+
stubs whose destinations are absent. Those generated consumer-owned paths
|
|
41
|
+
are destination-race checked and activate or roll back in the same
|
|
42
|
+
transaction as kit files and the consumer manifest. Never create project
|
|
43
|
+
data, infer an external fact, or manufacture `pending`/`not-applicable` to
|
|
44
|
+
make a capability appear ready.
|
|
45
|
+
|
|
37
46
|
3. Read the terminal report. `aktuell` proves a second run found no upstream
|
|
38
47
|
delta. A conflict report names and counts every category and leaves every
|
|
39
48
|
consumer file untouched. Follow its recommendation and resolve each named
|
|
40
49
|
conflict manually; never auto-merge, delete a local edit, or silently choose
|
|
41
50
|
the incoming copy.
|
|
42
51
|
|
|
52
|
+
Read all four availability categories alongside the file delta: newly
|
|
53
|
+
available skill core, newly degraded optional blocks, newly blocked skill
|
|
54
|
+
core, and still unresolved capability states. Missing readiness for genuinely
|
|
55
|
+
new behavior does not block a compatible kit update; only that behavior stays
|
|
56
|
+
unavailable. A compatible update must stop if it would make previously
|
|
57
|
+
available skill core unavailable. `--yes` answers only package reconciliation
|
|
58
|
+
questions and never supplies a readiness decision. Automated update pull
|
|
59
|
+
requests carry the same availability summary and remain manual-merge only.
|
|
60
|
+
|
|
43
61
|
For each conflicted kit-shipped file, always ask the user whether the local
|
|
44
62
|
edit is a generic improvement or project-specific; never decide or act
|
|
45
63
|
automatically. For a generic improvement, offer to file an issue in the
|
|
@@ -74,4 +92,6 @@ release contain the same artifact.
|
|
|
74
92
|
The update API reports `checking -> preview/awaiting_decision -> staging ->
|
|
75
93
|
verifying -> applied | conflicted | failed | aborted`. `conflicted`, `failed`,
|
|
76
94
|
and `aborted` never authorize partial activation. The existing manifest,
|
|
77
|
-
three-way diff, and atomic-write seams remain the source of truth.
|
|
95
|
+
three-way diff, and atomic-write seams remain the source of truth. A failure
|
|
96
|
+
also names its transaction phase and whether consumer state stayed unchanged or
|
|
97
|
+
was rolled back.
|
|
@@ -20,6 +20,22 @@ live in the **project layer** for this skill (its `docs/agents/skills/local-ci.m
|
|
|
20
20
|
seeded as an empty stub by `/setup-workflow` and filled per project). This
|
|
21
21
|
skeleton names the two profiles generically; run the two your project layer names.
|
|
22
22
|
|
|
23
|
+
## Required readiness preflight
|
|
24
|
+
|
|
25
|
+
Before running a guard, hook, test, or any other project command, run:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
node scripts/readiness.mjs check --skill local-ci --json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Treat the result as authoritative. A `ready` verdict is silent: continue with
|
|
32
|
+
the existing gate and its safety rules. For a `blocked` verdict, stop without
|
|
33
|
+
running any guessed command and report `Local CI unavailable`, the
|
|
34
|
+
`localCiRecipe` state (`missing`, `pending`, `not-applicable`, or `invalid`),
|
|
35
|
+
and one recovery path: run `/setup-workflow`, then fill
|
|
36
|
+
`docs/agents/skills/local-ci.md` with the project's exact commands. Never infer
|
|
37
|
+
commands from package scripts, hooks, CI configuration, or another repository.
|
|
38
|
+
|
|
23
39
|
## When
|
|
24
40
|
|
|
25
41
|
- **Before opening ANY PR** → run the full local gate. Red → fix it, or defer a
|
|
@@ -13,13 +13,46 @@ correctly, AFK. Subagents BUILD; **you** integrate + verify + land.
|
|
|
13
13
|
The anchor, its sub-issues and the locked plan doc contain the verbatim contracts
|
|
14
14
|
you must NOT paraphrase.
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
## Readiness preflight — first
|
|
17
|
+
|
|
18
|
+
<!-- readiness:optional-preflight:start -->
|
|
19
|
+
Before reading from the issue tracker, claiming a wave, creating worktrees, or
|
|
20
|
+
making any local or remote mutation, run this once from the project root:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
node scripts/readiness.mjs check --skill orchestrate-wave --json
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- `ready`: continue silently with the required tracker/board context and the
|
|
27
|
+
active `projectRecipe` block.
|
|
28
|
+
- `degraded`: required tracker and managed-board evidence is ready, so keep the
|
|
29
|
+
complete generic orchestration fallback active, omit only `projectRecipe`,
|
|
30
|
+
and emit exactly one concise summary: `Readiness degraded — inactive block
|
|
31
|
+
projectRecipe (orchestrateWaveRecipe: <state>); using the generic
|
|
32
|
+
orchestration fallback. Run /setup-workflow, configure
|
|
33
|
+
docs/agents/skills/orchestrate-wave.md, then rerun this skill.`
|
|
34
|
+
- `blocked`: `STOP` before tracker access, dispatch, claims, worktrees, or other
|
|
35
|
+
mutation. Report `issueTracker=<state>` and `managedBoard=<state>`, then give
|
|
36
|
+
exactly one recovery path: **Run `/setup-workflow`, then rerun
|
|
37
|
+
`/orchestrate-wave`.** Never fall back to bare tracker or board commands.
|
|
38
|
+
- `managedBoard=not-applicable`: `STOP` and report that `/orchestrate-wave` is
|
|
39
|
+
inapplicable without a managed board. This is a terminal project decision,
|
|
40
|
+
not invalid evidence and not a partially active mode.
|
|
41
|
+
- Invalid evidence is always visible and never treated as an opt-out.
|
|
42
|
+
<!-- readiness:optional-preflight:end -->
|
|
43
|
+
|
|
44
|
+
<!-- readiness:block projectRecipe -->
|
|
45
|
+
> **Phase 0 consumes the active project recipe.** Concrete tooling — exact test/verify
|
|
17
46
|
> commands, a DB/tunnel setup, a headless login recipe, brand checks, deploy
|
|
18
47
|
> lockstep — is project-specific and lives in a **project layer** this skill reads
|
|
19
48
|
> at runtime, not in this skeleton. The skeleton names the layer's sections
|
|
20
49
|
> (`§Setup`, `§Builder Commands`, `§Builder Hard Rules`, `§Integration Suites`,
|
|
21
50
|
> `§Verify Recipe`, `§Headless Login`, `§Landing`) and falls back to generic
|
|
22
51
|
> instructions when the layer is absent. See **Phase 0**.
|
|
52
|
+
>
|
|
53
|
+
> When `projectRecipe` is active, read the filled project layer before applying
|
|
54
|
+
> any phase-specific command below.
|
|
55
|
+
<!-- readiness:end -->
|
|
23
56
|
|
|
24
57
|
## Standing rules (all phases)
|
|
25
58
|
|
|
@@ -59,15 +92,11 @@ you must NOT paraphrase.
|
|
|
59
92
|
1. **Read everything**: the anchor body, every sub-issue body (each has a Handoff
|
|
60
93
|
block: scope, blast-radius, live-verify, PR line), and the locked plan /
|
|
61
94
|
plan-review doc in the planning worktree (file-exact).
|
|
62
|
-
2. **
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
treat the layer as **ABSENT** → use the generic fallback in each phase and warn
|
|
68
|
-
**once** that `/setup-workflow` plus project maintenance fill the layer (the
|
|
69
|
-
commands/tunnel/login can't be guessed). Never treat an empty heading as a
|
|
70
|
-
verify recipe.
|
|
95
|
+
2. **Select exact commands or the generic fallback.** If the readiness result
|
|
96
|
+
activated `projectRecipe`, use the loaded filled recipe wherever a phase below
|
|
97
|
+
points at a `§`-section. Otherwise use each phase's generic fallback; the
|
|
98
|
+
preflight's single degraded summary is the only warning. Never guess a project
|
|
99
|
+
command, tunnel, login, or verify recipe.
|
|
71
100
|
3. **Preflight — refuse a wave already in flight, otherwise claim it.** Before
|
|
72
101
|
dispatch, inspect all three same-machine collision signals: **(a)** an existing
|
|
73
102
|
`wave-active/<anchor>` tag; **(b)** any slice branch ahead of the wave's current
|
|
@@ -88,10 +117,10 @@ you must NOT paraphrase.
|
|
|
88
117
|
tunnel or service the live-verify depends on. Absent layer → start whatever your
|
|
89
118
|
live-verify environment requires before Phase 4.
|
|
90
119
|
|
|
91
|
-
**Done when:** anchor + every sub-issue + plan read ·
|
|
92
|
-
(
|
|
93
|
-
clean + this run's local claim planted · wave branch ff'd to
|
|
94
|
-
installed · project setup steps running.
|
|
120
|
+
**Done when:** anchor + every sub-issue + plan read · readiness result consumed
|
|
121
|
+
(active `projectRecipe` → exact recipe; inactive → generic fallback) · collision
|
|
122
|
+
preflight clean + this run's local claim planted · wave branch ff'd to
|
|
123
|
+
`origin/main` + deps installed · project setup steps running.
|
|
95
124
|
|
|
96
125
|
## Phase 1 — Disjointness recon (the load-bearing step)
|
|
97
126
|
|
|
@@ -9,6 +9,24 @@ Prepare a consumer-owned multi-package release through the kit's shared
|
|
|
9
9
|
SemVer, preview, and transactional apply engine. This skill changes only the
|
|
10
10
|
profiled version files. It does not commit, tag, push, publish, or merge.
|
|
11
11
|
|
|
12
|
+
## Required readiness preflight
|
|
13
|
+
|
|
14
|
+
Before previewing a release or changing any version file, run:
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
node scripts/readiness.mjs check --skill project-release --json
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Treat the result as authoritative. A `ready` verdict is silent and hands
|
|
21
|
+
execution to `scripts/project-release.mjs`; the helper remains the authority
|
|
22
|
+
for preview, confirmation, validation, and transactional apply. For a
|
|
23
|
+
`blocked` verdict, stop without invoking that helper or changing files and
|
|
24
|
+
report `Project Release unavailable`, the `projectReleaseProfile` state
|
|
25
|
+
(`missing`, `pending`, `not-applicable`, or `invalid`), and one recovery path:
|
|
26
|
+
run `/setup-workflow`, then fill the `projectRelease` section in
|
|
27
|
+
`docs/agents/workflow-capabilities.json`. Never infer packages, version files,
|
|
28
|
+
tag prefixes, or versions.
|
|
29
|
+
|
|
12
30
|
## Profile contract
|
|
13
31
|
|
|
14
32
|
Read `docs/agents/workflow-capabilities.json`. The consumer owns this file and
|
|
@@ -13,6 +13,24 @@ generic runbook structure ships as a template you copy and fill:
|
|
|
13
13
|
your actual stack, and keep it as the checklist single source of truth. Read your
|
|
14
14
|
filled runbook first.
|
|
15
15
|
|
|
16
|
+
## Required readiness preflight
|
|
17
|
+
|
|
18
|
+
Before reading application code, creating a tracking issue, launching either
|
|
19
|
+
model, or writing audit scratch files, run:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
node scripts/readiness.mjs check --skill security-audit --json
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Treat the result as authoritative. A `ready` verdict is silent: continue with
|
|
26
|
+
the existing two-model procedure and all human approval gates. For a `blocked`
|
|
27
|
+
verdict, stop without starting an audit or mutating repository or remote state
|
|
28
|
+
and report `Security Audit unavailable`, the `securityAuditRunbook` state
|
|
29
|
+
(`missing`, `pending`, `not-applicable`, or `invalid`), and one recovery path:
|
|
30
|
+
run `/setup-workflow`, then fill `docs/agents/skills/security-audit.md` and the
|
|
31
|
+
project runbook it references. Never guess the stack, security scope, commands,
|
|
32
|
+
tracking anchor, or board wiring.
|
|
33
|
+
|
|
16
34
|
**Scope guard:** code + config only. Infrastructure (firewall, exposed ports,
|
|
17
35
|
TLS, SSH, backups) is audited **separately** — an exposed database port beats any
|
|
18
36
|
code fix. Keep the two audits apart.
|
|
@@ -331,7 +331,36 @@ Seed `## Workflow` from [workflow-overview.md](./workflow-overview.md) when the
|
|
|
331
331
|
|
|
332
332
|
> `wrapup` and live-verify reference where this project deploys (host, command, URL). It lives in the `## Prod` block of CLAUDE.md/AGENTS.md, not a separate file.
|
|
333
333
|
|
|
334
|
-
|
|
334
|
+
First run `node scripts/readiness.mjs check --skill wrapup --json`. If
|
|
335
|
+
`prodTarget` is `ready`, adopt the evidence, clear any superseded pending
|
|
336
|
+
decision with `node scripts/readiness.mjs decision clear prodTarget`, and do
|
|
337
|
+
not ask again. Malformed or divergent `## Prod` evidence is `invalid`: leave
|
|
338
|
+
all instruction files untouched, show the conflict, and stop this section
|
|
339
|
+
until the user resolves it.
|
|
340
|
+
|
|
341
|
+
For a missing or pending target, ask where this ships, how it is deployed, and
|
|
342
|
+
what the live URL is. Offer only the bounded choices permitted by the readiness
|
|
343
|
+
catalog:
|
|
344
|
+
|
|
345
|
+
- **Configure now** — collect a non-empty host/platform, deploy command or
|
|
346
|
+
trigger, and live URL. Preview the exact local `## Prod` replacement for
|
|
347
|
+
every applicable existing Claude/Codex instruction surface and obtain
|
|
348
|
+
approval before writing it. Any external mutation retains its own separate
|
|
349
|
+
preview and approval; approving the local block never approves repository,
|
|
350
|
+
hosting, DNS, or deployment changes.
|
|
351
|
+
- **Configure later** — run
|
|
352
|
+
`node scripts/readiness.mjs decision set prodTarget pending`; create or alter
|
|
353
|
+
no `## Prod` block, and report exactly:
|
|
354
|
+
`wrapup.deployReport omitted (prodTarget pending)`.
|
|
355
|
+
- **Not applicable** — offer only when the manifest catalog entry has
|
|
356
|
+
`allowNotApplicable: true`; record it with `readiness.mjs decision set` and
|
|
357
|
+
deactivate the dependent block (or the whole skill when the declaration
|
|
358
|
+
requires the capability). `prodTarget` does not permit this choice, so never
|
|
359
|
+
offer it for Prod.
|
|
360
|
+
|
|
361
|
+
Ready and terminal `not-applicable` choices are not re-asked. A pending choice
|
|
362
|
+
remains deliberately retryable so a later `setup-workflow` run can take the
|
|
363
|
+
Configure-now path. Never invent a deploy target.
|
|
335
364
|
|
|
336
365
|
### 8b. Section H — Size-Profil (optional LoC-offender gate, non-interactive)
|
|
337
366
|
|
|
@@ -391,6 +420,14 @@ For the **`## Workflow`**, **`## Agent skills`**, and **`## Prod`** blocks, reco
|
|
|
391
420
|
- If **neither** exists → ask the user which surface(s) to create (**default `CLAUDE.md`**), then write there.
|
|
392
421
|
- If a `## Workflow` block already exists → skip it; this block is often repo-specific.
|
|
393
422
|
- If an `## Agent skills` / `## Prod` block already exists → update its contents in-place; never duplicate or clobber surrounding user content.
|
|
423
|
+
- For Configure now, apply the approved `## Prod` preview to every applicable
|
|
424
|
+
existing surface as one coherent local change. Preserve each file's
|
|
425
|
+
`## Workflow` and `## Agent skills` blocks byte-for-byte, including spacing,
|
|
426
|
+
and leave all unrelated setup blocks untouched. Re-read every written Prod
|
|
427
|
+
body and run `node scripts/readiness.mjs check --skill wrapup --json`; all
|
|
428
|
+
surfaces must agree and `activeBlocks` must be exactly `["deployReport"]`.
|
|
429
|
+
Only then clear a prior `prodTarget` decision. A partial write is not ready:
|
|
430
|
+
restore the previewed surface set before reporting the section complete.
|
|
394
431
|
|
|
395
432
|
`## Workflow` block:
|
|
396
433
|
|
|
@@ -411,7 +448,7 @@ Use [workflow-overview.md](./workflow-overview.md) verbatim as the generic seed.
|
|
|
411
448
|
[one-line summary — single- or multi-context]. See `docs/agents/domain.md`.
|
|
412
449
|
```
|
|
413
450
|
|
|
414
|
-
`## Prod` block (only if Section
|
|
451
|
+
`## Prod` block (only if Section G's Configure-now path produced a deploy target):
|
|
415
452
|
|
|
416
453
|
```markdown
|
|
417
454
|
## Prod
|
|
@@ -11,15 +11,24 @@ A portable, structural self-review pass over a freshly written spec/plan. The **
|
|
|
11
11
|
|
|
12
12
|
- After a spec was written/edited (a `SPEC.md` / `PLAN.md`, or a spec/design doc), BEFORE the user-review gate.
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## Readiness preflight — first
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
<!-- readiness:optional-preflight:start -->
|
|
17
|
+
Before any other step, run this once from the project root:
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
```bash
|
|
20
|
+
node scripts/readiness.mjs check --skill spec-self-critique --json
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- `ready`: continue without a readiness message. Ready is silent.
|
|
24
|
+
- `degraded`: keep the generic 12-point critique active, omit only the inactive block `projectEnrichment`, and emit exactly one concise summary: `Readiness degraded — inactive block projectEnrichment (specCritiqueLayer: <state>). Run /setup-workflow, configure docs/agents/skills/spec-self-critique.md, then rerun this skill.`
|
|
25
|
+
- `blocked`: stop before continuing and report the non-ready required capability plus the exact `/setup-workflow` recovery path.
|
|
26
|
+
- Invalid is always visible: include the `invalid` capability state in the single summary and never treat it as an opt-out. Do not emit separate warnings later in the workflow.
|
|
27
|
+
<!-- readiness:optional-preflight:end -->
|
|
21
28
|
|
|
22
|
-
|
|
29
|
+
<!-- readiness:block projectEnrichment -->
|
|
30
|
+
When `projectEnrichment` is active, read `docs/agents/skills/spec-self-critique.md` and apply its per-point enrichment, including project-specific incidents, grep patterns, conventions, and extra sub-checks. Project-specific checks belong in that layer, **not here**; `/retro` appends new project-specific lore there rather than into this generic skeleton.
|
|
31
|
+
<!-- readiness:end -->
|
|
23
32
|
|
|
24
33
|
## Altitude — a portable kit concept
|
|
25
34
|
|
|
@@ -63,7 +72,7 @@ Self-Critique complete — <N> corrections:
|
|
|
63
72
|
- ...
|
|
64
73
|
```
|
|
65
74
|
|
|
66
|
-
or, if none were needed: `Self-Critique complete — no corrections needed.`
|
|
75
|
+
or, if none were needed: `Self-Critique complete — no corrections needed.` THEN ask the user-review question.
|
|
67
76
|
|
|
68
77
|
## The 12-point checklist
|
|
69
78
|
|
|
@@ -9,7 +9,19 @@ description: "Break a plan, spec, or PRD into independently-grabbable issues on
|
|
|
9
9
|
|
|
10
10
|
Break a plan into independently-grabbable issues using vertical slices (tracer bullets).
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
<!-- readiness:required-preflight:start -->
|
|
13
|
+
## 0. Required readiness preflight
|
|
14
|
+
|
|
15
|
+
This is the first executable workflow step. From the project root, before any remote write or other `gh`/`board-sync.py` command, run this read-only check:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
node scripts/readiness.mjs check --skill to-issues --json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- `verdict=ready`: continue with the existing workflow without announcing the check. **Ready is silent.**
|
|
22
|
+
- `verdict=blocked`: `STOP` before any mutation. Report every required capability as `<capability>=<state>` so `issueTracker`, `managedBoard`, and `specCompleteness` failures — including distinct `missing`, `pending`, and `invalid` states — stay visible, then give exactly one recovery path: **Run `/setup-workflow`, then rerun `/to-issues`.** Do not fall back to bare tracker or board commands.
|
|
23
|
+
- `managedBoard=not-applicable`: `STOP` and report that `/to-issues` is **inapplicable** for a project that deliberately has no managed board. This is a terminal project decision, not invalid evidence and not a partially active mode.
|
|
24
|
+
<!-- readiness:required-preflight:end -->
|
|
13
25
|
|
|
14
26
|
## Process
|
|
15
27
|
|
|
@@ -10,6 +10,20 @@ description: "Turn a locked plan (PLAN.md in the worktree, conversation context,
|
|
|
10
10
|
|
|
11
11
|
Takes an **already-locked plan** and publishes it as a **Draft-PRD issue**. **Never invents requirements** — only synthesizes what's already decided. Pipeline: `board-to-waves → grill(-with-docs) → to-prd → to-issues`. The **grill sits upstream**; to-prd writes the PRD after the grill. **Slicing + promotion to an anchor (cluster/Wave, child link) = `to-issues`** (future), not here.
|
|
12
12
|
|
|
13
|
+
<!-- readiness:required-preflight:start -->
|
|
14
|
+
## 0. Required readiness preflight
|
|
15
|
+
|
|
16
|
+
This is the first executable workflow step. From the project root, before any remote write or other `gh`/`board-sync.py` command, run this read-only check:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
node scripts/readiness.mjs check --skill to-prd --json
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- `verdict=ready`: continue with the existing workflow without announcing the check. **Ready is silent.**
|
|
23
|
+
- `verdict=blocked`: `STOP` before any mutation. Report every required capability as `<capability>=<state>` so `missing`, `pending`, and `invalid` remain distinct, then give exactly one recovery path: **Run `/setup-workflow`, then rerun `/to-prd`.** Do not fall back to bare tracker or board commands.
|
|
24
|
+
- `managedBoard=not-applicable`: `STOP` and report that `/to-prd` is **inapplicable** for a project that deliberately has no managed board. This is a terminal project decision, not invalid evidence and not a partially active mode.
|
|
25
|
+
<!-- readiness:required-preflight:end -->
|
|
26
|
+
|
|
13
27
|
Board constants (project node, field/status IDs) + helpers live **consumer-side**: read `docs/agents/board-sync.md` from the project root + use the helper `scripts/board-sync.py` (missing → `/setup-workflow` scaffolds the project layer). Issue body **always** via `--body-file` (inline `--body` with backticks/parens crashes bash).
|
|
14
28
|
|
|
15
29
|
## 1. Input — source-agnostic
|
|
@@ -14,6 +14,20 @@ Takes a **Program-PRD** — the native Sub-Issue anchor over a multi-wave progra
|
|
|
14
14
|
The **grill and to-prd sit upstream**; to-waves runs once the Program-PRD exists.
|
|
15
15
|
It **never invents structure** — it only unfolds what the plan already decided.
|
|
16
16
|
|
|
17
|
+
<!-- readiness:required-preflight:start -->
|
|
18
|
+
## 0. Required readiness preflight
|
|
19
|
+
|
|
20
|
+
This is the first executable workflow step. From the project root, before any remote write or other `gh`/`board-sync.py` command, run this read-only check:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
node scripts/readiness.mjs check --skill to-waves --json
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- `verdict=ready`: continue with the existing workflow without announcing the check. **Ready is silent.**
|
|
27
|
+
- `verdict=blocked`: `STOP` before any mutation. Report every required capability as `<capability>=<state>` so `issueTracker`, `managedBoard`, and `specCompleteness` failures — including distinct `missing`, `pending`, and `invalid` states — stay visible, then give exactly one recovery path: **Run `/setup-workflow`, then rerun `/to-waves`.** Do not fall back to bare tracker or board commands.
|
|
28
|
+
- `managedBoard=not-applicable`: `STOP` and report that `/to-waves` is **inapplicable** for a project that deliberately has no managed board. This is a terminal project decision, not invalid evidence and not a partially active mode.
|
|
29
|
+
<!-- readiness:required-preflight:end -->
|
|
30
|
+
|
|
17
31
|
Board constants (project node, field/status IDs) + helpers live **consumer-side**:
|
|
18
32
|
read `docs/agents/board-sync.md` from the project root + use the helper
|
|
19
33
|
`scripts/board-sync.py` (missing → `/setup-workflow` scaffolds the project layer).
|
|
@@ -36,8 +50,8 @@ target, an anchor is already a single wave.
|
|
|
36
50
|
|
|
37
51
|
## 2. Parse + validate — the graph preflight
|
|
38
52
|
|
|
39
|
-
|
|
40
|
-
mutations):
|
|
53
|
+
After the required readiness preflight, run the graph preflight before preview or
|
|
54
|
+
publication — it is **read-only** (a single board read, zero mutations):
|
|
41
55
|
|
|
42
56
|
```bash
|
|
43
57
|
python3 scripts/board-sync.py validate-graph --issue <prd#>
|
|
@@ -14,6 +14,30 @@ Every comment or issue posted to the issue tracker during triage **must** start
|
|
|
14
14
|
> *This was generated by AI during triage.*
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
+
## Required readiness preflight
|
|
18
|
+
|
|
19
|
+
Before reading from or writing to the issue tracker, labels, or board, run:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
node scripts/readiness.mjs check --skill triage --json
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Treat the result as authoritative. A `ready` verdict is silent: continue with
|
|
26
|
+
the existing triage flow and all of its confirmation gates. For a `blocked`
|
|
27
|
+
verdict, stop without querying or mutating the issue tracker and report
|
|
28
|
+
`Triage unavailable`, the exact state (`missing`, `pending`, `not-applicable`,
|
|
29
|
+
or `invalid`), and the matching recovery path:
|
|
30
|
+
|
|
31
|
+
- `issueTracker` → run `/setup-workflow`, then fill
|
|
32
|
+
`docs/agents/issue-tracker.md`.
|
|
33
|
+
- `managedBoard` → run `/setup-workflow`, then configure
|
|
34
|
+
`docs/agents/board-sync.md`; `not-applicable` means this board-driven skill is
|
|
35
|
+
unavailable, not partially usable.
|
|
36
|
+
- `triageLabels` → run `/setup-workflow`, then fill
|
|
37
|
+
`docs/agents/triage-labels.md`.
|
|
38
|
+
|
|
39
|
+
Never guess a tracker, label, board, field, status, or fallback workflow.
|
|
40
|
+
|
|
17
41
|
## Reference docs
|
|
18
42
|
|
|
19
43
|
- [AGENT-BRIEF.md](AGENT-BRIEF.md) — how to write durable agent briefs
|