mandrel 1.80.0 → 1.82.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/README.md +5 -5
- package/.agents/docs/SDLC.md +93 -80
- package/.agents/docs/configuration.md +11 -1
- package/.agents/docs/quality-gates.md +61 -0
- package/.agents/docs/workflows.md +1 -1
- package/.agents/instructions.md +9 -7
- package/.agents/personas/architect.md +8 -5
- package/.agents/personas/engineer-mobile.md +3 -2
- package/.agents/personas/engineer-web.md +3 -2
- package/.agents/personas/engineer.md +6 -5
- package/.agents/personas/product.md +19 -13
- package/.agents/personas/project-manager.md +9 -8
- package/.agents/personas/qa-engineer.md +10 -6
- package/.agents/personas/refactorer.md +3 -2
- package/.agents/personas/technical-writer.md +2 -1
- package/.agents/personas/ux-designer.md +2 -2
- package/.agents/schemas/agentrc.schema.json +10 -0
- package/.agents/scripts/acceptance-spec-reconciler.js +143 -59
- package/.agents/scripts/epic-deliver-prepare.js +0 -31
- package/.agents/scripts/epic-plan-decompose.js +2 -5
- package/.agents/scripts/epic-plan-spec.js +16 -19
- package/.agents/scripts/hierarchy-gate.js +11 -11
- package/.agents/scripts/lib/ITicketingProvider.js +4 -3
- package/.agents/scripts/lib/baselines/env-overrides.js +35 -0
- package/.agents/scripts/lib/bdd-runner-detect.js +1 -1
- package/.agents/scripts/lib/bdd-scenario-scanner.js +1 -1
- package/.agents/scripts/lib/cli-args.js +1 -5
- package/.agents/scripts/lib/codebase-snapshot.js +1 -1
- package/.agents/scripts/lib/config/temp-paths.js +1 -4
- package/.agents/scripts/lib/config-settings-schema.js +5 -0
- package/.agents/scripts/lib/epic-body-sections.js +222 -0
- package/.agents/scripts/lib/epic-plan-clarity.js +38 -1
- package/.agents/scripts/lib/epic-plan-ideation.js +15 -3
- package/.agents/scripts/lib/label-constants.js +7 -17
- package/.agents/scripts/lib/label-taxonomy.js +4 -21
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +47 -1
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +7 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +1 -1
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +2 -1
- package/.agents/scripts/lib/orchestration/context-hydration-engine.js +19 -8
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +23 -22
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +7 -10
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +4 -38
- package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +8 -9
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/authoring-context.js +11 -5
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/cli-args.js +26 -5
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +102 -304
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/prompts.js +32 -29
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +19 -20
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-authoring-grounding.js +1 -1
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +6 -9
- package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +3 -4
- package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +1 -1
- package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +20 -27
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +11 -5
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +22 -59
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +1 -1
- package/.agents/scripts/lib/orchestration/planning-context-budget.js +1 -1
- package/.agents/scripts/lib/orchestration/preflight-cache.js +1 -1
- package/.agents/scripts/lib/orchestration/spec-freshness.js +3 -3
- package/.agents/scripts/lib/orchestration/spec-section-validator.js +1 -1
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +122 -1
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +5 -8
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +2 -2
- package/.agents/scripts/lib/plan-phase-cleanup.js +1 -2
- package/.agents/scripts/lib/qa/qa-context-hydrator.js +6 -85
- package/.agents/scripts/lib/templates/decomposer-prompts.js +14 -8
- package/.agents/scripts/lifecycle-emit.js +1 -1
- package/.agents/scripts/lint-label-vocabulary.js +2 -3
- package/.agents/scripts/providers/github/mappers.js +0 -3
- package/.agents/scripts/providers/github/tickets.js +7 -18
- package/.agents/scripts/single-story-init.js +0 -1
- package/.agents/scripts/story-init.js +1 -29
- package/.agents/skills/core/epic-plan-consolidate/SKILL.md +37 -18
- package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +23 -18
- package/.agents/skills/core/epic-plan-premortem/SKILL.md +7 -6
- package/.agents/skills/core/epic-plan-spec-author/SKILL.md +161 -109
- package/.agents/skills/core/hydrate-context/SKILL.md +10 -5
- package/.agents/skills/core/knowledge-transfer/SKILL.md +3 -2
- package/.agents/skills/core/scope-triage/SKILL.md +2 -1
- package/.agents/skills/skills.index.json +6 -6
- package/.agents/templates/epic-from-idea.md +4 -0
- package/.agents/workflows/audit-to-stories.md +2 -2
- package/.agents/workflows/helpers/code-review.md +11 -9
- package/.agents/workflows/helpers/deliver-epic.md +32 -44
- package/.agents/workflows/helpers/epic-audit.md +11 -8
- package/.agents/workflows/helpers/epic-deliver-story.md +10 -16
- package/.agents/workflows/helpers/epic-plan-decompose.md +17 -12
- package/.agents/workflows/helpers/epic-plan-spec.md +68 -68
- package/.agents/workflows/helpers/parallel-tooling.md +2 -1
- package/.agents/workflows/helpers/plan-epic.md +114 -99
- package/.agents/workflows/helpers/single-story-deliver.md +1 -1
- package/.agents/workflows/helpers/worktree-lifecycle.md +1 -1
- package/.agents/workflows/plan.md +8 -8
- package/.agents/workflows/qa-assist.md +2 -1
- package/docs/CHANGELOG.md +28 -0
- package/package.json +1 -1
- package/.agents/scripts/lib/issue-link-parser.js +0 -74
- package/.agents/scripts/lib/orchestration/finalize/close-planning-tickets.js +0 -116
- package/.agents/scripts/lib/orchestration/planning-state-manager.js +0 -318
- package/.agents/scripts/lib/story-init/hierarchy-tracer.js +0 -57
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: epic-plan-spec-author
|
|
3
3
|
description: >-
|
|
4
|
-
Author the
|
|
4
|
+
Author the Tech Spec, Acceptance Table markdown, and risk-verdict JSON
|
|
5
5
|
for an Epic from the planner authoring context emitted by
|
|
6
6
|
`epic-plan-spec.js --emit-context`. Use during Phase 7 of `/plan` when
|
|
7
|
-
the host LLM needs to write the
|
|
8
|
-
|
|
7
|
+
the host LLM needs to write the three artifacts before `epic-plan-spec.js`
|
|
8
|
+
folds them into the Epic body's managed sections.
|
|
9
9
|
allowed_tools:
|
|
10
10
|
- Read
|
|
11
11
|
- Write
|
|
@@ -14,13 +14,30 @@ allowed_tools:
|
|
|
14
14
|
|
|
15
15
|
# epic-plan-spec-author
|
|
16
16
|
|
|
17
|
+
> **PRD retired (Story #4314).** The `context::prd` PRD artifact class was
|
|
18
|
+
> retired; this Skill no longer authors `prd.md`. Its one novel section —
|
|
19
|
+
> User Stories — now lives inline in the Epic body under a `## User Stories`
|
|
20
|
+
> heading, which is the requirements input. Both the Tech Spec and the
|
|
21
|
+
> Acceptance Spec now consume the Epic body directly (Context / Goal / Scope /
|
|
22
|
+
> User Stories) rather than a paraphrased PRD.
|
|
23
|
+
>
|
|
24
|
+
> **Context tickets retired (Story #4324).** The `context::tech-spec` /
|
|
25
|
+
> `context::acceptance-spec` ticket classes are retired too. The artifacts
|
|
26
|
+
> this Skill authors still land in `temp/epic-<Epic_ID>/` under the same
|
|
27
|
+
> filenames, but the persist half folds them into **managed sections of the
|
|
28
|
+
> Epic body** — the `## Delivery Slicing`-led Tech Spec sections and the
|
|
29
|
+
> `## Acceptance Table` AC-ID table — instead of creating separate tickets.
|
|
30
|
+
> On a re-plan, the Epic body's existing sections are the previous-spec
|
|
31
|
+
> input (that is how AC IDs stay stable across re-plans).
|
|
32
|
+
|
|
17
33
|
## Policy Capsule
|
|
18
34
|
|
|
19
35
|
- Run only during `/plan` Phase 7, after `epic-plan-spec.js --emit-context` has written `temp/epic-<Epic_ID>/planner-context.json`; fail loudly if the file is missing rather than fabricating context.
|
|
20
|
-
- Write exactly
|
|
21
|
-
- Start each markdown artifact at the correct `##` heading (
|
|
22
|
-
-
|
|
23
|
-
-
|
|
36
|
+
- Write exactly three artifacts and only inside `temp/epic-<Epic_ID>/`: `techspec.md`, `risk-verdict.json`, `acceptance-spec.md`. All three MUST exist on disk before returning.
|
|
37
|
+
- Start each markdown artifact at the correct `##` heading (Tech Spec → `## Delivery Slicing`, Acceptance Spec → `## Acceptance Table` — never the Epic's own `## Acceptance Criteria` heading, which stays the ideation bullets) — never emit a top-level `#` heading. `risk-verdict.json` is raw JSON conforming to `.agents/schemas/risk-verdict.schema.json`.
|
|
38
|
+
- The Tech Spec MUST open with `## Delivery Slicing` and MUST NOT restate the Epic's Context, Goal, or Scope — your output lands as sections of the same Epic body, which travels into every downstream story agent's prompt, so any restatement is duplication and a drift risk. A `## Technical Overview` section is optional and, when present, is a 2–3 sentence orientation of the *technical approach* only (which subsystems are touched and reused), never a re-narration of the problem statement, goals, or scope.
|
|
39
|
+
- Judge risk from what the change *does* (the Epic body / Tech Spec you just wrote), never from keyword presence — "out of scope: billing" is not a billing change; "rotate the credential vault" is high-risk even without a security keyword.
|
|
40
|
+
- The Tech Spec MUST carry a `## Delivery Slicing` section proposing how the Epic's enumerated capabilities cluster into N shippable Stories — the intentional grouping the Phase 8 consolidation pass (`epic-plan-consolidate`) reconciles the decomposer draft against. The proposed count is a **ceiling, not a target**: consolidation may merge below it when slices form dependent single-consumer chains, but never splits above it. Mark a slice "Independent? No" only with a one-line justification (parallelism, risk isolation, or delivery-envelope pressure); an unjustified dependent single-consumer slice folds into its consumer. Do NOT coarsen the Epic enumeration to produce it; the grouping recommendation is the granularity lever.
|
|
24
41
|
- Cite real module / file names from `codebaseSnapshot.files` and `codebaseSnapshot.signatures` before citing docs-only names; flag any cited path that is missing from the snapshot with a `<!-- DRIFT -->` callout.
|
|
25
42
|
- Assign stable AC IDs of the form `AC-<n>` in document order; reuse existing IDs across re-plans when Outcome wording is materially unchanged and tag every row's `Disposition` with one of `new | updated | unchanged`.
|
|
26
43
|
- Render the AC table with the canonical columns `AC ID | Outcome | Feature File | Scenario | Disposition`; when `bddScenarios` is non-empty, run `findBestScenarioMatch` per AC and annotate matched rows with `<file>:L<line>` (never tag a covered outcome as `new`).
|
|
@@ -31,22 +48,21 @@ allowed_tools:
|
|
|
31
48
|
|
|
32
49
|
## Role
|
|
33
50
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
the
|
|
39
|
-
the Acceptance Spec).
|
|
51
|
+
Engineering Architect + Risk Assessor + Acceptance Engineer (three authoring
|
|
52
|
+
roles, one Skill — the Architect persona consumes the Epic body to produce the
|
|
53
|
+
Tech Spec; the Risk Assessor judges the change the Epic and Tech Spec describe
|
|
54
|
+
to produce the risk verdict; the Acceptance Engineer consumes the Epic body and
|
|
55
|
+
the Tech Spec to produce the Acceptance Spec).
|
|
40
56
|
|
|
41
57
|
## When to use
|
|
42
58
|
|
|
43
59
|
`/plan` Phase 7, immediately after `epic-plan-spec.js --emit-context`
|
|
44
60
|
writes `temp/epic-<Epic_ID>/planner-context.json`. This Skill replaces the
|
|
45
|
-
inline "Author the
|
|
46
|
-
workflow
|
|
47
|
-
|
|
48
|
-
`temp/epic-<Epic_ID>/
|
|
49
|
-
|
|
61
|
+
inline "Author the Tech Spec" step from the legacy workflow body — the calling
|
|
62
|
+
workflow dispatches this Skill via the `Skill` tool, supplies the Epic ID, and
|
|
63
|
+
on completion has `temp/epic-<Epic_ID>/techspec.md`,
|
|
64
|
+
`temp/epic-<Epic_ID>/risk-verdict.json`, and
|
|
65
|
+
`temp/epic-<Epic_ID>/acceptance-spec.md` ready for the persist half of
|
|
50
66
|
the script.
|
|
51
67
|
|
|
52
68
|
## Inputs
|
|
@@ -87,7 +103,7 @@ reads:
|
|
|
87
103
|
Treat each as a likely drift signal: confirm the path exists (it may
|
|
88
104
|
have been dropped by truncation) or mark it net-new explicitly in
|
|
89
105
|
the spec so the post-author freshness gate does not flag it.
|
|
90
|
-
- `systemPrompts.
|
|
106
|
+
- `systemPrompts.techSpec` and
|
|
91
107
|
`systemPrompts.acceptanceSpec` — left in the envelope as a backstop;
|
|
92
108
|
this Skill's own body below carries the authoritative versions and is
|
|
93
109
|
the source of truth going forward
|
|
@@ -104,29 +120,28 @@ reads:
|
|
|
104
120
|
means the project has not adopted BDD; degrade silently and proceed
|
|
105
121
|
as before. Non-empty means the Acceptance Engineer step MUST run
|
|
106
122
|
`findBestScenarioMatch` for each planned AC and annotate the
|
|
107
|
-
Disposition column accordingly (see Step
|
|
123
|
+
Disposition column accordingly (see Step 4).
|
|
108
124
|
Planning risk is **not** an input — this Skill authors it. The risk
|
|
109
|
-
verdict (`risk-verdict.json`, Step
|
|
110
|
-
|
|
125
|
+
verdict (`risk-verdict.json`, Step 3 below) is one of the three planning
|
|
126
|
+
artifacts; the persist half validates it against
|
|
111
127
|
`.agents/schemas/risk-verdict.schema.json` and derives the deterministic
|
|
112
128
|
`planningRisk` envelope (`deriveRiskEnvelope`) that drives gate routing
|
|
113
129
|
and the acceptance disposition (Epic #3865).
|
|
114
130
|
|
|
115
131
|
## Outputs
|
|
116
132
|
|
|
117
|
-
- `temp/epic-<Epic_ID>/prd.md` — PRD markdown starting with `## Overview`
|
|
118
|
-
(no `<h1>`).
|
|
119
133
|
- `temp/epic-<Epic_ID>/techspec.md` — Tech Spec markdown starting with
|
|
120
|
-
`##
|
|
134
|
+
`## Delivery Slicing` (no `<h1>`; an optional 2–3 sentence
|
|
135
|
+
`## Technical Overview` may follow, never restating Epic context).
|
|
121
136
|
- `temp/epic-<Epic_ID>/risk-verdict.json` — planner risk verdict JSON
|
|
122
137
|
conforming to `.agents/schemas/risk-verdict.schema.json`:
|
|
123
138
|
`{ axes: [{ axis, level, rationale }], summary }`.
|
|
124
139
|
- `temp/epic-<Epic_ID>/acceptance-spec.md` — Acceptance Spec markdown
|
|
125
|
-
starting with `## Acceptance
|
|
140
|
+
starting with `## Acceptance Table` (no `<h1>`).
|
|
126
141
|
|
|
127
|
-
All
|
|
142
|
+
All three files MUST exist on disk before this Skill returns control. The
|
|
128
143
|
caller will invoke
|
|
129
|
-
`epic-plan-spec.js --epic <Epic_ID> --
|
|
144
|
+
`epic-plan-spec.js --epic <Epic_ID> --tech-spec ... --risk-verdict ... --acceptance-table ...`
|
|
130
145
|
next, and the persist half will fail loudly if any file is missing, empty,
|
|
131
146
|
or (for the verdict) schema-invalid.
|
|
132
147
|
|
|
@@ -135,67 +150,55 @@ or (for the verdict) schema-invalid.
|
|
|
135
150
|
### Step 1 — Load the context
|
|
136
151
|
|
|
137
152
|
Read `temp/epic-<Epic_ID>/planner-context.json` with the `Read` tool. Pull
|
|
138
|
-
the Epic title, body (or body summary
|
|
139
|
-
reference) the two system prompts.
|
|
140
|
-
|
|
141
|
-
### Step 2 — Author the PRD (Technical Product Manager persona)
|
|
142
|
-
|
|
143
|
-
Apply the PRD system prompt below to the Epic title + body. Write the PRD
|
|
144
|
-
to `temp/epic-<Epic_ID>/prd.md` using the `Write` tool. The PRD MUST:
|
|
145
|
-
|
|
146
|
-
- Start with `## Overview` — never a top-level `#` heading.
|
|
147
|
-
- Contain four sections: **Context & Goals**, **User Stories**,
|
|
148
|
-
**Acceptance Criteria**, **Out of Scope**.
|
|
149
|
-
- Be valid Markdown — no fenced code blocks of prose, no smart quotes that
|
|
150
|
-
break the issue body renderer.
|
|
153
|
+
the Epic title, body (or body summary, including the Epic's `## User Stories`
|
|
154
|
+
section), the `docsContext` items, and (for reference) the two system prompts.
|
|
151
155
|
|
|
152
|
-
|
|
156
|
+
### Step 2 — Author the Tech Spec (Engineering Architect persona)
|
|
153
157
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
Your job is to convert a high-level Epic description into a structured Product Requirements Document (PRD).
|
|
157
|
-
|
|
158
|
-
The PRD should outline:
|
|
159
|
-
1. Context & Goals
|
|
160
|
-
2. User Stories
|
|
161
|
-
3. Acceptance Criteria
|
|
162
|
-
4. Out of Scope
|
|
163
|
-
|
|
164
|
-
CRITICAL REQUIREMENTS:
|
|
165
|
-
- Respond ONLY with valid Markdown.
|
|
166
|
-
- Do not use top-level <h1> (# ) tags. Start with ## Overview.
|
|
167
|
-
- Format requirements clearly with bullet points and bold text where appropriate.
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### Step 3 — Author the Tech Spec (Engineering Architect persona)
|
|
171
|
-
|
|
172
|
-
Apply the Tech Spec system prompt below to the PRD just written, the
|
|
158
|
+
Apply the Tech Spec system prompt below to the Epic body (Context / Goal /
|
|
159
|
+
Scope / User Stories), the
|
|
173
160
|
`docsContext` items, and the `codebaseSnapshot` envelope (so the spec is
|
|
174
161
|
grounded in the actual codebase, not hallucinated patterns). Cite module
|
|
175
162
|
and file names from `codebaseSnapshot.files` / `codebaseSnapshot.signatures`
|
|
176
163
|
before reaching for names that appear only in the documentation. Write to
|
|
177
164
|
`temp/epic-<Epic_ID>/techspec.md`. The Tech Spec MUST:
|
|
178
165
|
|
|
179
|
-
-
|
|
166
|
+
- **Open with `## Delivery Slicing`** (see below) — never a top-level `#`
|
|
167
|
+
heading, and never an Epic-context recap. The Delivery Slicing section is
|
|
168
|
+
the primary input to Phase 8 consolidation, so author it first and hang the
|
|
169
|
+
rest of the spec off it.
|
|
170
|
+
- **Do NOT restate the Epic's Context, Goal, or Scope.** The Epic body always
|
|
171
|
+
travels alongside the Tech Spec into every downstream story agent's prompt,
|
|
172
|
+
so restating the problem statement, goals, or scope is pure duplication
|
|
173
|
+
(~300–500 tokens per Epic) and a drift risk. A `## Technical Overview`
|
|
174
|
+
section is **optional**; when you include one, cap it at 2–3 sentences that
|
|
175
|
+
orient the reader on the *technical approach* only (which subsystems are
|
|
176
|
+
touched and reused) — never re-narrate the problem, goals, or scope.
|
|
180
177
|
- Cover Architecture & Design, Data Models (if any), API Changes (if any),
|
|
181
178
|
Core Components, Security & Privacy Considerations.
|
|
182
|
-
- Include a **`## Delivery Slicing`** section (see below) proposing how the
|
|
183
|
-
PRD's enumerated capabilities cluster into N shippable Stories.
|
|
184
179
|
- Cite the source files / modules it touches by relative path. Avoid
|
|
185
180
|
pseudocode — name real symbols when proposing edits.
|
|
186
181
|
|
|
187
|
-
#### Delivery Slicing section (authoritative
|
|
182
|
+
#### Delivery Slicing section (authoritative ceiling for Phase 8 consolidation)
|
|
188
183
|
|
|
189
184
|
The Tech Spec MUST carry a `## Delivery Slicing` section in which the Architect
|
|
190
|
-
— who holds the full design — proposes how the
|
|
191
|
-
**cluster into N shippable Stories**. This section is the intentional
|
|
192
|
-
|
|
185
|
+
— who holds the full design — proposes how the Epic's enumerated capabilities
|
|
186
|
+
**cluster into N shippable Stories**. This section is the intentional grouping
|
|
187
|
+
the Phase 8 consolidation pass
|
|
193
188
|
([`epic-plan-consolidate`](../epic-plan-consolidate/SKILL.md)) reconciles the
|
|
194
189
|
decomposer's draft against before any GitHub write. Without it, the decompose
|
|
195
|
-
phase maps
|
|
196
|
-
holistic plan; with it, the consolidation critic has a well-defined
|
|
190
|
+
phase maps Epic capabilities to Stories ~1:1 and cannot produce a coarser,
|
|
191
|
+
holistic plan; with it, the consolidation critic has a well-defined reference
|
|
197
192
|
instead of a guess.
|
|
198
193
|
|
|
194
|
+
**The proposed count is a ceiling, not a target.** Consolidation reconciles
|
|
195
|
+
the draft *toward* your grouping, but it treats the count as an upper bound: it
|
|
196
|
+
may **merge below** your proposed count when slices form dependent
|
|
197
|
+
single-consumer chains, and it **never splits above** it. Over-slicing here
|
|
198
|
+
therefore locks in fragmentation only when the extra slices are genuinely
|
|
199
|
+
independent — so keep a slice separate only when it earns its own delivery
|
|
200
|
+
session.
|
|
201
|
+
|
|
199
202
|
**Write the Delivery Slicing section before any other section — it is the
|
|
200
203
|
primary input to Phase 8 consolidation.** Author it first so the rest of the
|
|
201
204
|
spec (Core Components, API Changes, Data Models) hangs off a deliberate
|
|
@@ -208,63 +211,84 @@ capability cluster each slice would deliver, what ships in it, and whether it
|
|
|
208
211
|
can ship independently. Use **noun phrases** for slice names ("Foundation",
|
|
209
212
|
"Transport seam", "Send helper") so they map cleanly onto Feature titles in the
|
|
210
213
|
resulting decomposition — never verb phrases ("Add transport") or file names
|
|
211
|
-
("`sender.ts`"). Do **not** coarsen the
|
|
214
|
+
("`sender.ts`"). Do **not** coarsen the Epic's capability enumeration to produce
|
|
212
215
|
the slicing: the granularity lever is *this* grouping recommendation, not a
|
|
213
|
-
dumbed-down
|
|
216
|
+
dumbed-down Epic enumeration.
|
|
214
217
|
|
|
215
218
|
**What "Independent?" means:** can this slice ship to production and provide
|
|
216
219
|
value *without the next slice landing*? A `Yes` slice is releasable on its own;
|
|
217
220
|
a `No` slice only becomes valuable once a later slice lands on top of it.
|
|
218
221
|
|
|
222
|
+
**"Independent? No" is a smell that must be justified.** A dependent,
|
|
223
|
+
single-consumer slice (one that only feeds the next slice) folds into its
|
|
224
|
+
consumer by default — it is not worth its own delivery session's hydration,
|
|
225
|
+
branch, PR, and CI ceremony. Mark a slice `No` only when you can name a
|
|
226
|
+
one-line reason to keep it separate anyway: **parallelism** (two `No` slices
|
|
227
|
+
that can be delivered concurrently by different sessions), **risk isolation**
|
|
228
|
+
(a blast-radius or reviewability reason to land it as its own reviewable PR),
|
|
229
|
+
or **delivery-envelope pressure** (folding it in would push the consumer past a
|
|
230
|
+
single-session sizing envelope). Absent such a justification, do not author the
|
|
231
|
+
slice as its own row — fold it into its consumer and let the merged slice carry
|
|
232
|
+
the combined capability.
|
|
233
|
+
|
|
219
234
|
Worked example:
|
|
220
235
|
|
|
221
236
|
```text
|
|
222
237
|
## Delivery Slicing
|
|
223
238
|
|
|
224
|
-
Proposed shippable slices (consolidation
|
|
239
|
+
Proposed shippable slices (consolidation ceiling for Phase 8):
|
|
225
240
|
|
|
226
241
|
| Slice | What ships | Independent? |
|
|
227
242
|
| -------------- | ------------------------------------------------------ | ------------ |
|
|
228
243
|
| Foundation | Config schema, types, and the no-op default path | Yes |
|
|
229
244
|
| Transport seam | The pluggable transport interface + in-memory adapter | Yes |
|
|
230
|
-
| Send helper | The send() helper built on the transport
|
|
245
|
+
| Send helper | The send() helper + retries, built on the transport | No (justified: risk isolation) |
|
|
231
246
|
|
|
232
|
-
- **Foundation** folds
|
|
247
|
+
- **Foundation** folds Epic capabilities "config surface" + "type model" — they
|
|
233
248
|
share a reason to exist and ship as one reviewable PR.
|
|
234
249
|
- **Transport seam** is the pluggable boundary; it provides value on its own
|
|
235
250
|
(in-memory adapter is usable for tests) so it is independently shippable.
|
|
236
251
|
- **Send helper** depends on the transport seam landing first, so it is *not*
|
|
237
|
-
independent
|
|
252
|
+
independent. It stays its own slice only because the retry/backoff logic is a
|
|
253
|
+
large, high-blast-radius surface worth isolating in its own reviewable PR
|
|
254
|
+
(risk isolation). Absent that justification it would fold into Transport
|
|
255
|
+
seam — a bare "depends on the previous slice" is not a reason to keep it
|
|
256
|
+
separate.
|
|
238
257
|
```
|
|
239
258
|
|
|
240
259
|
The consolidation pass degrades gracefully when this section is absent (it
|
|
241
260
|
falls back to cohesion + single-Story-Feature rules only), so authoring it is
|
|
242
261
|
how the Architect steers the decomposition toward fewer, right-sized Stories.
|
|
262
|
+
Because the count is a **ceiling**, an over-sliced table is coarsened back
|
|
263
|
+
during consolidation — but only where the extra slices are dependent
|
|
264
|
+
single-consumer chains, so an unjustified `No` slice is the one you should fold
|
|
265
|
+
in yourself rather than leaning on the consolidator to catch.
|
|
243
266
|
|
|
244
267
|
#### Tech Spec system prompt (authoritative)
|
|
245
268
|
|
|
246
269
|
```text
|
|
247
270
|
You are an expert Engineering Architect.
|
|
248
|
-
Your job is to convert
|
|
271
|
+
Your job is to convert an Epic into a Technical Specification for implementation.
|
|
249
272
|
|
|
250
273
|
The Tech Spec should outline:
|
|
251
|
-
1.
|
|
252
|
-
2.
|
|
253
|
-
3.
|
|
254
|
-
4.
|
|
255
|
-
5.
|
|
256
|
-
6.
|
|
274
|
+
1. Delivery Slicing — propose how the Epic's enumerated capabilities cluster into shippable Stories. This count is a CEILING, not a target: the Phase 8 consolidation pass may merge below your proposed count when slices form dependent single-consumer chains, but never splits above it. Do NOT coarsen the Epic enumeration to produce this; the grouping recommendation is the granularity lever.
|
|
275
|
+
2. Architecture & Design
|
|
276
|
+
3. Data Models (if any)
|
|
277
|
+
4. API Changes (if any)
|
|
278
|
+
5. Core Components
|
|
279
|
+
6. Security & Privacy Considerations
|
|
257
280
|
|
|
258
281
|
CRITICAL REQUIREMENTS:
|
|
259
282
|
- Respond ONLY with valid Markdown.
|
|
260
|
-
- Do not use top-level <h1> (# ) tags.
|
|
283
|
+
- Do not use top-level <h1> (# ) tags. Open the document with the `## Delivery Slicing` section — it is the primary input to Phase 8 consolidation, so author it first and hang the rest of the spec off it.
|
|
284
|
+
- Do NOT restate the Epic's Context, Goal, or Scope — your output lands as sections of the same Epic body, which travels into every downstream story agent's prompt, so any restatement is pure duplication and a drift risk. If a brief technical orientation is genuinely useful, add an optional `## Technical Overview` of no more than 2–3 sentences that names the *technical approach* only (which subsystems are touched and reused); never re-narrate the problem statement, goals, or scope.
|
|
261
285
|
- Format architectural decisions clearly with bullet points.
|
|
262
|
-
-
|
|
286
|
+
- Author the `## Delivery Slicing` section as a markdown table with columns `Slice | What ships | Independent?`, using noun-phrase slice names (e.g. "Foundation", "Transport seam", "Send helper") that map onto Feature titles. "Independent?" answers: can this slice ship to production and provide value without the next slice landing? A slice you mark "Independent? No" MUST carry a one-line justification (parallelism, risk isolation, or delivery-envelope pressure); an unjustified dependent single-consumer slice folds into its consumer by default rather than shipping as its own Story.
|
|
263
287
|
```
|
|
264
288
|
|
|
265
|
-
### Step
|
|
289
|
+
### Step 3 — Author the risk verdict (Risk Assessor persona)
|
|
266
290
|
|
|
267
|
-
Judge the change described by the
|
|
291
|
+
Judge the change described by the Epic body and Tech Spec you just wrote —
|
|
268
292
|
grounded in `codebaseSnapshot` where it helps — and write
|
|
269
293
|
`temp/epic-<Epic_ID>/risk-verdict.json` with the `Write` tool. The file
|
|
270
294
|
MUST be valid JSON conforming to
|
|
@@ -290,11 +314,11 @@ Axis vocabulary (fixed — the schema rejects anything else):
|
|
|
290
314
|
Authoring rules:
|
|
291
315
|
|
|
292
316
|
- Include an axis only when the change **genuinely exercises it** — judge
|
|
293
|
-
what the Epic *does*, not which words appear in it.
|
|
317
|
+
what the Epic *does*, not which words appear in it. An Epic that says
|
|
294
318
|
"out of scope: billing" carries no `billing` axis; an Epic that rotates
|
|
295
319
|
a credential vault carries `security` even if the word never appears.
|
|
296
320
|
- `level` reflects blast radius and reversibility of *this* change on
|
|
297
|
-
*that* axis. `rationale` cites the
|
|
321
|
+
*that* axis. `rationale` cites the Epic / Tech Spec section or code
|
|
298
322
|
surface that justifies the entry — never an empty self-attestation.
|
|
299
323
|
- An empty `axes` array is a deliberate assertion that no recognized risk
|
|
300
324
|
axis applies (derives an all-low, auto-proceed envelope) — use it only
|
|
@@ -305,13 +329,13 @@ Authoring rules:
|
|
|
305
329
|
judgment, not control flow.
|
|
306
330
|
|
|
307
331
|
The derivation rules you are feeding (so you can anticipate the
|
|
308
|
-
disposition Step
|
|
332
|
+
disposition Step 4 must honor): any required axis ⇒ acceptance spec
|
|
309
333
|
`required`; otherwise any `medium` level ⇒ `recommended`; otherwise
|
|
310
334
|
only not-applicable axes (or no axes) ⇒ `not-applicable` (waived).
|
|
311
335
|
|
|
312
|
-
### Step
|
|
336
|
+
### Step 4 — Author the Acceptance Spec (Acceptance Engineer persona)
|
|
313
337
|
|
|
314
|
-
Apply the Acceptance Spec system prompt below to the
|
|
338
|
+
Apply the Acceptance Spec system prompt below to the Epic body + Tech Spec just
|
|
315
339
|
written, plus the **existing BDD scenario index** from
|
|
316
340
|
`bddScenarios` on the planner-context envelope (Story #2637). The
|
|
317
341
|
scenario index is the output of
|
|
@@ -327,20 +351,42 @@ behaviour) — never `new` for an AC whose outcome is already proven by
|
|
|
327
351
|
an existing scenario. When `bddScenarios` is empty (the project has not
|
|
328
352
|
adopted BDD), proceed exactly as before with no annotation.
|
|
329
353
|
|
|
330
|
-
Branch on the acceptance disposition your Step
|
|
354
|
+
Branch on the acceptance disposition your Step 3 verdict derives (see the
|
|
331
355
|
derivation rules there): `required` and `recommended` author the spec
|
|
332
356
|
normally per the rules below. `not-applicable` authorizes the persist half
|
|
333
357
|
to apply `acceptance::n-a` on the Epic; in that case write a one-paragraph
|
|
334
358
|
waiver rationale to `temp/epic-<Epic_ID>/acceptance-spec.md` instead of
|
|
335
359
|
the AC table so the audit trail still exists, and start the file with
|
|
336
|
-
`## Acceptance
|
|
360
|
+
`## Acceptance Table — waived (planner-selected)`.
|
|
337
361
|
|
|
338
362
|
Write to `temp/epic-<Epic_ID>/acceptance-spec.md`. The Acceptance Spec
|
|
339
363
|
MUST:
|
|
340
364
|
|
|
341
|
-
- Start with `## Acceptance
|
|
365
|
+
- Start with `## Acceptance Table` — never a top-level `#` heading, and
|
|
366
|
+
never the Epic's own `## Acceptance Criteria` heading (the table lands
|
|
367
|
+
as a section of the same Epic body).
|
|
342
368
|
- Render the AC table with the canonical column shape documented in Tech
|
|
343
369
|
Spec #2083: `| AC ID | Outcome | Feature File | Scenario | Disposition |`.
|
|
370
|
+
- **Key each `Outcome` off a specific Epic `## Acceptance Criteria`
|
|
371
|
+
bullet** — the Epic body's AC bullets are the single source of truth, so
|
|
372
|
+
the `Outcome` column is a **terse restatement anchored to one Epic
|
|
373
|
+
bullet**, not an independent re-elaboration. Lead each `Outcome` with its
|
|
374
|
+
anchor (the bullet's quoted lead phrase or an explicit `Epic AC N` index),
|
|
375
|
+
then state the single user-visible behaviour. A free-standing `Outcome`
|
|
376
|
+
that paraphrases a criterion in new words without naming the Epic bullet
|
|
377
|
+
it verifies is the drift this rule exists to prevent — it decouples the
|
|
378
|
+
spec from the Epic silently.
|
|
379
|
+
- **Split case (one Epic AC → several rows).** When one Epic AC bullet
|
|
380
|
+
genuinely expands into several user-visible outcomes, emit one row per
|
|
381
|
+
outcome and **declare the split on each** row (e.g. lead with
|
|
382
|
+
`splits Epic AC 3`) so the fan-out is explicit, not hidden.
|
|
383
|
+
- **Flag divergence, do not absorb it.** Anchor coverage MUST be complete
|
|
384
|
+
and auditable: every Epic AC bullet is covered by at least one row and
|
|
385
|
+
every row anchors to an Epic bullet. Call out any Epic AC bullet with
|
|
386
|
+
**no** corresponding row, and any AC row with **no** Epic anchor, in a
|
|
387
|
+
note directly beneath the AC table — surfacing spec/Epic divergence at
|
|
388
|
+
authoring time. Never silently drop an uncovered Epic bullet or emit an
|
|
389
|
+
unanchored row.
|
|
344
390
|
- Use **stable AC IDs** of the form `AC-1`, `AC-2`, … assigned in document
|
|
345
391
|
order. On re-plan, reuse the ID for any AC whose Outcome text is
|
|
346
392
|
materially unchanged; new ACs receive fresh sequential IDs (existing
|
|
@@ -364,34 +410,40 @@ MUST:
|
|
|
364
410
|
|
|
365
411
|
```text
|
|
366
412
|
You are an expert Acceptance Engineer.
|
|
367
|
-
Your job is to convert
|
|
413
|
+
Your job is to convert an Epic and a Tech Spec into a structured Acceptance Specification that drives features-first BDD authoring.
|
|
368
414
|
|
|
369
415
|
The Acceptance Spec should outline:
|
|
370
|
-
1. Acceptance
|
|
416
|
+
1. Acceptance Table — one row per user-visible outcome, expressed as a Markdown table with columns: AC ID | Outcome | Feature File | Scenario | Disposition
|
|
371
417
|
2. Stable AC IDs — assign AC-1, AC-2, ... in document order; reuse the same ID across re-plans when an Outcome is materially unchanged so scenario tags (@ac-N) stay aligned
|
|
372
418
|
3. Disposition — tag each row with one of: new | updated | unchanged
|
|
373
419
|
|
|
420
|
+
The Epic body's `## Acceptance Criteria` bullets are the single source of truth for what the spec verifies. Your table does not re-invent criteria — it anchors each one to a specific Epic AC bullet.
|
|
421
|
+
|
|
374
422
|
CRITICAL REQUIREMENTS:
|
|
375
423
|
- Respond ONLY with valid Markdown.
|
|
376
|
-
- Do not use top-level <h1> (# ) tags. Start with ## Acceptance Criteria.
|
|
424
|
+
- Do not use top-level <h1> (# ) tags. Start with ## Acceptance Table — the table lands as a section of the Epic body, so it must NOT reuse the Epic's own ## Acceptance Criteria heading.
|
|
377
425
|
- Every AC row MUST have a stable AC ID of the form AC-<n> (AC-1, AC-2, ...) — do not reorder IDs across re-plans; new ACs get fresh sequential IDs.
|
|
378
|
-
- Every AC row MUST carry a Disposition value from the enum: new | updated | unchanged.
|
|
379
|
-
- Each Outcome MUST be a single user-visible behaviour
|
|
426
|
+
- Every AC row MUST carry a Disposition value from the enum: new | updated | unchanged. (At Epic close, the acceptance reconciler overwrites Disposition with the verification outcome — satisfied | pending | missing — inside this section only; on re-plan, reset each row to the authoring enum.)
|
|
427
|
+
- Each Outcome MUST be a **terse restatement keyed to a specific Epic `## Acceptance Criteria` bullet** — lead the Outcome with the bullet's anchor (its quoted lead phrase or an explicit "Epic AC N" index) and keep the rest to a single user-visible behaviour. Do NOT re-elaborate the Epic bullet in independent words: a free-standing Outcome that paraphrases the criterion without naming the bullet it verifies is forbidden, because it drifts from the Epic silently. No DB assertions, no HTTP status codes, no internal implementation details.
|
|
428
|
+
- Where one Epic AC bullet genuinely expands into several user-visible outcomes, emit one row per outcome and declare the split on each — e.g. lead with "splits Epic AC 3" — so the fan-out is explicit rather than hidden.
|
|
429
|
+
- Anchor coverage MUST be complete and auditable: every Epic AC bullet MUST be covered by at least one row, and every row MUST anchor to an Epic AC bullet. Flag divergence in the authored spec instead of dropping it — if an Epic AC bullet has no corresponding row, or a row has no Epic anchor, call it out explicitly (a note beneath the table) rather than silently omitting the bullet or emitting an unanchored row.
|
|
380
430
|
- Cite proposed feature file paths under tests/features/** so Phase 8 can scaffold matching scenarios.
|
|
381
431
|
- Acceptance Outcomes MUST NOT prescribe a commit subject that begins with a non-Conventional-Commits prefix (allowed leading types: feat|fix|chore|refactor|perf|docs|style|test|build|ci|revert). The legacy `baseline-refresh` token used as a leading subject prescription is forbidden — commitlint will reject it at commit time, and the decompose-time validator (`ticket-validator.js` → `validateAcceptanceSubjectPrefix`) will reject the decompose with `code: 'forbidden-subject-prefix'`. Use a Conventional-Commits subject (e.g. `chore(baselines): refresh ...`) and a body trailer (e.g. `baseline-refresh: true` — trailer with a value, not a subject prefix) when a machine-readable marker is needed. See Epic #2501 for rationale.
|
|
382
432
|
```
|
|
383
433
|
|
|
384
|
-
### Step
|
|
434
|
+
### Step 5 — Hand back to `/plan`
|
|
385
435
|
|
|
386
|
-
All
|
|
387
|
-
`node .agents/scripts/epic-plan-spec.js --epic <Epic_ID>
|
|
388
|
-
|
|
436
|
+
All three files exist; return. The caller will run
|
|
437
|
+
`node .agents/scripts/epic-plan-spec.js --epic <Epic_ID>
|
|
438
|
+
--tech-spec temp/epic-<Epic_ID>/techspec.md
|
|
389
439
|
--risk-verdict temp/epic-<Epic_ID>/risk-verdict.json
|
|
390
|
-
--acceptance-
|
|
391
|
-
the risk verdict, derives the planningRisk envelope,
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
`
|
|
440
|
+
--acceptance-table temp/epic-<Epic_ID>/acceptance-spec.md`, which validates
|
|
441
|
+
the risk verdict, derives the planningRisk envelope, folds the authored
|
|
442
|
+
content into the Epic body's managed sections (`## Delivery Slicing`-led
|
|
443
|
+
Tech Spec sections + the `## Acceptance Table`), records the
|
|
444
|
+
`risk-verdict` structured comment, flips the Epic to
|
|
445
|
+
`agent::review-spec`, and cleans up the temp files. No context tickets
|
|
446
|
+
are created (Story #4324).
|
|
395
447
|
|
|
396
448
|
## Constraints
|
|
397
449
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hydrate-context
|
|
3
3
|
description: >-
|
|
4
|
-
Hydrate a
|
|
5
|
-
legacy `{ prompt }` stdout wrapper). Reads the ticket body,
|
|
6
|
-
|
|
4
|
+
Hydrate a Story ticket into a structured ContextEnvelope (or the
|
|
5
|
+
legacy `{ prompt }` stdout wrapper). Reads the ticket body, resolves the
|
|
6
|
+
parent Epic, embeds the sectioned Epic body (acceptance-table section
|
|
7
|
+
stripped), and assembles
|
|
7
8
|
named sections with provenance and section-aware elision. Successor to
|
|
8
9
|
the retired mandrel MCP `context.hydrate` tool.
|
|
9
10
|
allowed_tools:
|
|
@@ -26,8 +27,12 @@ allowed_tools:
|
|
|
26
27
|
## Role
|
|
27
28
|
|
|
28
29
|
Context aggregator. Resolves a ticket's hierarchy (Story → Epic)
|
|
29
|
-
and stitches the
|
|
30
|
-
|
|
30
|
+
and stitches the Epic body — the single planning document, carrying the
|
|
31
|
+
folded Tech Spec sections — plus the Story body into a
|
|
32
|
+
single prompt the executor consumes. The Epic body is embedded with its
|
|
33
|
+
`## Acceptance Table` managed section stripped (close-time reconciliation
|
|
34
|
+
detail the executor does not need); there is no separate Tech Spec fetch
|
|
35
|
+
(Story #4324).
|
|
31
36
|
|
|
32
37
|
## When to use
|
|
33
38
|
|
|
@@ -69,8 +69,9 @@ differs (a plan vs. a diff); the *method* is identical.
|
|
|
69
69
|
|
|
70
70
|
Before starting, identify the comprehension subject and gather it:
|
|
71
71
|
|
|
72
|
-
- **A plan** — the Epic body
|
|
73
|
-
|
|
72
|
+
- **A plan** — the Epic body (whose managed sections carry the folded Tech
|
|
73
|
+
Spec and Acceptance Table), the
|
|
74
|
+
decomposition (Stories with inline `acceptance[]` / `verify[]`),
|
|
74
75
|
and the dispatch/wave roadmap.
|
|
75
76
|
- **A change** — a PR, a branch, or a working-tree diff. Read the diff, the
|
|
76
77
|
PR/issue description, and the surrounding code the change touches.
|
|
@@ -32,7 +32,8 @@ description:
|
|
|
32
32
|
wrong in the `epic` direction is cheap — the Phase 8.3 consolidation pass and
|
|
33
33
|
the sizing validator catch an over-planned Story later. Being wrong in the
|
|
34
34
|
`story` direction is expensive — a story-sized scope pushed through the full
|
|
35
|
-
Epic ceremony pays a
|
|
35
|
+
Epic ceremony pays a sectioned-Epic-body (Tech Spec + Acceptance Table) +
|
|
36
|
+
Story backlog +
|
|
36
37
|
`epic/<id>` integration-branch tax for a degenerate one-Story output.
|
|
37
38
|
- Keep the rubric prose **artifact-agnostic**. The thing under judgment may be a
|
|
38
39
|
sharpened one-pager, an existing Epic body, or a draft Story — the rubric
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-
|
|
2
|
+
"generatedAt": "2026-07-04T00:29:42.907Z",
|
|
3
3
|
"generator": "generate-skills-index.js@1",
|
|
4
4
|
"skills": [
|
|
5
5
|
{
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
"tier": "core",
|
|
128
128
|
"category": "core",
|
|
129
129
|
"path": ".agents/skills/core/epic-plan-consolidate/SKILL.md",
|
|
130
|
-
"description": "Run a holistic, pre-persist consolidation pass over the draft Story ticket array an Epic's decompose phase produced. Use during Phase 8 of `/plan`, after `epic-plan-decompose-author` writes `temp/epic-<Epic_ID>/tickets.json` and before `epic-plan-decompose.js` validates and persists it. Reconciles the draft against the Tech Spec \"Delivery Slicing\"
|
|
130
|
+
"description": "Run a holistic, pre-persist consolidation pass over the draft Story ticket array an Epic's decompose phase produced. Use during Phase 8 of `/plan`, after `epic-plan-decompose-author` writes `temp/epic-<Epic_ID>/tickets.json` and before `epic-plan-decompose.js` validates and persists it. Reconciles the draft against the Tech Spec \"Delivery Slicing\" ceiling via scope-preserving operations only.",
|
|
131
131
|
"policyCapsuleBullets": 9,
|
|
132
132
|
"allowedTools": ["Read", "Write", "Bash"],
|
|
133
133
|
"vendor": null
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
"tier": "core",
|
|
148
148
|
"category": "core",
|
|
149
149
|
"path": ".agents/skills/core/epic-plan-premortem/SKILL.md",
|
|
150
|
-
"description": "Run a fresh-context, code-reading pre-mortem critic over the draft Story ticket array an Epic's decompose phase produced. Use during Phase 8 of `/plan`, after `epic-plan-decompose-author` / `epic-plan-consolidate` write `temp/epic-<Epic_ID>/tickets.json` and before `epic-plan-decompose.js` validates and persists it. Reads the
|
|
150
|
+
"description": "Run a fresh-context, code-reading pre-mortem critic over the draft Story ticket array an Epic's decompose phase produced. Use during Phase 8 of `/plan`, after `epic-plan-decompose-author` / `epic-plan-consolidate` write `temp/epic-<Epic_ID>/tickets.json` and before `epic-plan-decompose.js` validates and persists it. Reads the sectioned Epic body AND the cited code surfaces, then emits predicted-rework findings before any GitHub write.",
|
|
151
151
|
"policyCapsuleBullets": 7,
|
|
152
152
|
"allowedTools": ["Read", "Write", "Bash", "Grep"],
|
|
153
153
|
"vendor": null
|
|
@@ -157,8 +157,8 @@
|
|
|
157
157
|
"tier": "core",
|
|
158
158
|
"category": "core",
|
|
159
159
|
"path": ".agents/skills/core/epic-plan-spec-author/SKILL.md",
|
|
160
|
-
"description": "Author the
|
|
161
|
-
"policyCapsuleBullets":
|
|
160
|
+
"description": "Author the Tech Spec, Acceptance Table markdown, and risk-verdict JSON for an Epic from the planner authoring context emitted by `epic-plan-spec.js --emit-context`. Use during Phase 7 of `/plan` when the host LLM needs to write the three artifacts before `epic-plan-spec.js` folds them into the Epic body's managed sections.",
|
|
161
|
+
"policyCapsuleBullets": 13,
|
|
162
162
|
"allowedTools": ["Read", "Write", "Bash"],
|
|
163
163
|
"vendor": null
|
|
164
164
|
},
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
"tier": "core",
|
|
188
188
|
"category": "core",
|
|
189
189
|
"path": ".agents/skills/core/hydrate-context/SKILL.md",
|
|
190
|
-
"description": "Hydrate a
|
|
190
|
+
"description": "Hydrate a Story ticket into a structured ContextEnvelope (or the legacy `{ prompt }` stdout wrapper). Reads the ticket body, resolves the parent Epic, embeds the sectioned Epic body (acceptance-table section stripped), and assembles named sections with provenance and section-aware elision. Successor to the retired mandrel MCP `context.hydrate` tool.",
|
|
191
191
|
"policyCapsuleBullets": 7,
|
|
192
192
|
"allowedTools": ["Read", "Bash"],
|
|
193
193
|
"vendor": null
|
|
@@ -118,8 +118,8 @@ Ask:
|
|
|
118
118
|
> How would you like these `<M>` Stories created?
|
|
119
119
|
>
|
|
120
120
|
> - **Single Epic via `/plan`** **[Recommended]** — opens one Epic,
|
|
121
|
-
> then chains into `/plan --idea` so the standard
|
|
122
|
-
>
|
|
121
|
+
> then chains into `/plan --idea` so the standard spec-and-WBS
|
|
122
|
+
> authoring handles decomposition. Grouped Stories become the
|
|
123
123
|
> seed for Phase 7 decomposition.
|
|
124
124
|
> - **Individual standalone Stories** — opens one GitHub Issue per
|
|
125
125
|
> group directly, no Epic wrapper.
|