@deftai/directive-content 0.105.0 → 0.107.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/Taskfile.yml +13 -0
- package/UPGRADING.md +4 -4
- package/commands.md +22 -14
- package/contracts/agent-hook-readiness.md +3 -3
- package/contracts/closed-verb-authz.md +14 -2
- package/contracts/design-critique.md +354 -0
- package/contracts/issue-eval.md +77 -0
- package/contracts/path-write-fence.md +126 -1
- package/contracts/runtime-authority.md +2 -0
- package/contracts/scm-readiness.md +2 -2
- package/docs/scope-provenance.md +1 -1
- package/main.md +1 -1
- package/package.json +1 -1
- package/packs/skills/skills-pack-0.1.json +35 -7
- package/packs/strategies/strategies-pack-0.1.json +13 -13
- package/scm/github.md +35 -2
- package/skills/deft-directive-build/SKILL.md +1 -1
- package/skills/deft-directive-design-critique/SKILL.md +55 -0
- package/skills/deft-directive-feedback/SKILL.md +11 -2
- package/skills/deft-directive-issue-eval/SKILL.md +48 -0
- package/skills/deft-directive-probe/SKILL.md +4 -2
- package/skills/deft-directive-release/SKILL.md +5 -3
- package/skills/deft-directive-review-cycle/SKILL.md +1 -1
- package/skills/deft-directive-swarm/SKILL.md +1 -1
- package/skills/deft-directive-triage/SKILL.md +3 -2
- package/strategies/README.md +4 -4
- package/strategies/bdd.md +6 -6
- package/strategies/discuss.md +8 -8
- package/strategies/emit-hints.md +6 -6
- package/strategies/enterprise.md +18 -18
- package/strategies/interview.md +4 -4
- package/strategies/map.md +6 -6
- package/strategies/probe.md +22 -18
- package/strategies/rapid.md +16 -16
- package/strategies/research.md +6 -6
- package/strategies/roadmap.md +1 -1
- package/strategies/speckit.md +52 -52
- package/strategies/v0-20-contract.md +21 -21
- package/strategies/yolo.md +12 -12
- package/tasks/engine.yml +2 -0
- package/tasks/feedback.yml +1 -1
- package/tasks/occupancy.yml +11 -0
- package/tasks/policy.yml +10 -0
- package/tasks/scm.yml +14 -2
- package/tasks/scope.yml +2 -2
- package/tasks/session.yml +11 -0
- package/tasks/triage-evaluate.yml +22 -0
- package/tasks/verify.yml +22 -2
- package/templates/agent-prompt-preamble.md +23 -6
- package/templates/agents-entry.md +6 -6
- package/templates/design-critique-brief.md +55 -0
package/strategies/speckit.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
A spec-driven development workflow inspired by [GitHub's spec-kit](https://github.com/github/spec-kit), with a Phase 4.5 readiness layer for decomposing broad implementation scopes into swarm-safe stories. Fully migrated to v0.20 (phases + stories emitted as date-prefixed vBRIEFs in proposed/; no legacy specification.vbrief.json).
|
|
10
10
|
|
|
11
|
-
**v0.20 note (s5-migrate-speckit-rapid-enterprise / #1166):** Speckit now emits only the canonical v0.20 shape (date-prefixed phase/epic + story vBRIEFs in proposed/, full PROJECT-DEFINITION.
|
|
11
|
+
**v0.20 note (s5-migrate-speckit-rapid-enterprise / #1166):** Speckit now emits only the canonical v0.20 shape (date-prefixed phase/epic + story vBRIEFs in proposed/, full PROJECT-DEFINITION.xbrief.json via task project:render post, seeded lifecycle folders, no legacy specification.vbrief.json). Phase 4/4.5 scopes go to proposed/ (not pending/). Review exports use `task project:export-spec` (gate: export succeeded). See the dedicated ## v0.20 Output Shape section, the Artifacts Summary updated to the contract table, and the canonical contract `strategies/v0-20-contract.md` (s1-contract of #1166).
|
|
12
12
|
|
|
13
13
|
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
14
14
|
|
|
@@ -20,16 +20,16 @@ Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
|
20
20
|
- ~ Projects requiring formal specification review
|
|
21
21
|
- ~ When parallel agent development is planned
|
|
22
22
|
- ~ Enterprise environments with compliance requirements
|
|
23
|
-
- ? Skip Phase 1 if PROJECT-DEFINITION.
|
|
23
|
+
- ? Skip Phase 1 if PROJECT-DEFINITION.xbrief.json Principles narrative already defined
|
|
24
24
|
|
|
25
25
|
## Workflow Overview
|
|
26
26
|
|
|
27
27
|
```mermaid
|
|
28
28
|
flowchart LR
|
|
29
29
|
subgraph speckit ["SpecKit Strategy (v0.20)"]
|
|
30
|
-
P["📜 Principles<br/><i>PROJECT-DEFINITION.
|
|
31
|
-
S["📝 Specify<br/><i>WHAT/WHY → proposed/YYYY-MM-DD-*.
|
|
32
|
-
PL["🏗️ Plan<br/><i>HOW → proposed/YYYY-MM-DD-*.
|
|
30
|
+
P["📜 Principles<br/><i>PROJECT-DEFINITION.xbrief.json</i>"]
|
|
31
|
+
S["📝 Specify<br/><i>WHAT/WHY → proposed/YYYY-MM-DD-*.xbrief.json</i>"]
|
|
32
|
+
PL["🏗️ Plan<br/><i>HOW → proposed/YYYY-MM-DD-*.xbrief.json</i>"]
|
|
33
33
|
T["✅ Scope<br/><i>Phase/epic vBRIEFs in proposed/</i>"]
|
|
34
34
|
D["🧩 Decompose<br/><i>Story vBRIEFs in proposed/</i>"]
|
|
35
35
|
I["🔨 Implement<br/><i>Execute</i>"]
|
|
@@ -57,7 +57,7 @@ flowchart LR
|
|
|
57
57
|
|
|
58
58
|
**Goal:** Establish immutable project principles before any specification.
|
|
59
59
|
|
|
60
|
-
**Output:** `Principles` narrative in `
|
|
60
|
+
**Output:** `Principles` narrative in `xbrief/PROJECT-DEFINITION.xbrief.json` (v0.20: plus any early proposed/ context vBRIEFs if needed)
|
|
61
61
|
|
|
62
62
|
! Before writing output artifacts, follow the guards in [artifact-guards.md](./artifact-guards.md) (Preparatory Guard for proposed/ items; Spec-Generating Guard for PROJECT-DEFINITION).
|
|
63
63
|
|
|
@@ -65,14 +65,14 @@ flowchart LR
|
|
|
65
65
|
|
|
66
66
|
- ! Define 3-5 non-negotiable principles
|
|
67
67
|
- ! Include at least one anti-principle (⊗)
|
|
68
|
-
- ! Write principles as the `Principles` narrative in `
|
|
68
|
+
- ! Write principles as the `Principles` narrative in `xbrief/PROJECT-DEFINITION.xbrief.json`
|
|
69
69
|
- ~ Interview stakeholders about architectural constraints
|
|
70
70
|
- ⊗ Proceed without defined principles
|
|
71
|
-
- ⊗ Create a standalone `project.md` -- principles belong in PROJECT-DEFINITION.
|
|
71
|
+
- ⊗ Create a standalone `project.md` -- principles belong in PROJECT-DEFINITION.xbrief.json
|
|
72
72
|
|
|
73
73
|
### Transition Criteria
|
|
74
74
|
|
|
75
|
-
- ! `Principles` narrative in `
|
|
75
|
+
- ! `Principles` narrative in `xbrief/PROJECT-DEFINITION.xbrief.json` is complete
|
|
76
76
|
- ! All stakeholders have reviewed principles
|
|
77
77
|
- ~ No `[NEEDS CLARIFICATION]` markers remain
|
|
78
78
|
|
|
@@ -82,7 +82,7 @@ flowchart LR
|
|
|
82
82
|
|
|
83
83
|
**Goal:** Document WHAT to build and WHY, without implementation details.
|
|
84
84
|
|
|
85
|
-
**Output:** WHAT/WHY narratives in date-prefixed vBRIEF(s) in `
|
|
85
|
+
**Output:** WHAT/WHY narratives in date-prefixed vBRIEF(s) in `xbrief/proposed/YYYY-MM-DD-*.xbrief.json` (v0.20; no singular specification.vbrief.json)
|
|
86
86
|
|
|
87
87
|
! Before writing output artifacts, follow the guards in [artifact-guards.md](./artifact-guards.md) (Preparatory Guard for proposed/ scope items; Spec-Generating Guard for PROJECT-DEFINITION).
|
|
88
88
|
|
|
@@ -142,7 +142,7 @@ Add the following narrative keys to the proposed/ vBRIEF `plan.narratives`:
|
|
|
142
142
|
! Phase 3 -> Phase 4 is gated on a successful spec export for human review, mirroring the Phase 2 approval gate. Complete the steps below **in order** before advancing. [skills/deft-directive-setup/SKILL.md](../skills/deft-directive-setup/SKILL.md) is required to invoke `task project:export-spec` at this boundary when running speckit interactively; the gate fails silently otherwise (yolo-mode agents used to skip it -- that is what this gate exists to prevent).
|
|
143
143
|
|
|
144
144
|
1. ! Run `task project:export-spec` (use `--audience=internal` when proposed scopes must appear in the `## Scope outlook` section). Legacy migrated trees MAY use `task spec:render` when `vbrief/specification.vbrief.json` exists.
|
|
145
|
-
2. ! Confirm export **succeeded** (command exit 0) and `SPECIFICATION.md` exists at the project root with the greenfield banner (`<!-- Source of truth:
|
|
145
|
+
2. ! Confirm export **succeeded** (command exit 0) and `SPECIFICATION.md` exists at the project root with the greenfield banner (`<!-- Source of truth: xbrief/PROJECT-DEFINITION.xbrief.json -->`) or full-spec banner as appropriate.
|
|
146
146
|
3. ! The proposed/ vBRIEFs + PROJECT-DEFINITION are the source of truth. `SPECIFICATION.md` is a read-only export.
|
|
147
147
|
4. ! Human reviewer approves (or requests changes). On approval, proceed to Phase 4.
|
|
148
148
|
|
|
@@ -161,11 +161,11 @@ Add the following narrative keys to the proposed/ vBRIEF `plan.narratives`:
|
|
|
161
161
|
|
|
162
162
|
**Input:** Approved HOW narratives in the proposed/ date-prefixed vBRIEF(s) from Phase 3 (`ImplementationPhases` narrative describes IP-1..IP-N).
|
|
163
163
|
|
|
164
|
-
**Output:** N phase/epic scope vBRIEFs in `./
|
|
164
|
+
**Output:** N phase/epic scope vBRIEFs in `./xbrief/proposed/`, one per implementation phase or epic, using the filename convention `YYYY-MM-DD-ip<NNN>-<slug>.xbrief.json` (NNN = 3-digit zero-padded, 001..N). See [vbrief/vbrief.md — speckit Phase 4 scope vBRIEFs](../vbrief/vbrief.md#speckit-phase-4-scope-vbriefs) for the canonical convention. (v0.20: proposed/ not pending/.)
|
|
165
165
|
|
|
166
166
|
Phase 4 scopes are planning containers. They MAY keep broad acceptance in `plan.narratives.Acceptance` and MAY have `plan.items: []`. They are not valid concurrent swarm worker inputs unless explicitly marked as a single-story scope. Broad phase/epic scopes MUST pass through Phase 4.5 before swarm allocation.
|
|
167
167
|
|
|
168
|
-
! After emitting the phase/epic scope vBRIEF(s) to `
|
|
168
|
+
! After emitting the phase/epic scope vBRIEF(s) to `xbrief/proposed/`, surface the GitHub-issue tracking hint from [emit-hints.md](./emit-hints.md) — name all three patterns (none / `--umbrella` / `--per-vbrief`).
|
|
169
169
|
|
|
170
170
|
### Scope vBRIEF Shape
|
|
171
171
|
|
|
@@ -197,18 +197,18 @@ For each implementation phase IP-N, write a scope vBRIEF with:
|
|
|
197
197
|
"dependencies": ["ip-1", "ip-2"]
|
|
198
198
|
},
|
|
199
199
|
"references": [
|
|
200
|
-
{ "type": "x-vbrief/plan", "uri": "2026-05-26-ip002-plan.
|
|
200
|
+
{ "type": "x-vbrief/plan", "uri": "2026-05-26-ip002-plan.xbrief.json", "TrustLevel": "internal" }
|
|
201
201
|
],
|
|
202
202
|
"items": []
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
```
|
|
206
206
|
|
|
207
|
-
### plan.
|
|
207
|
+
### plan.xbrief.json — Session Tracker Only
|
|
208
208
|
|
|
209
|
-
- ! `plan.
|
|
210
|
-
- ! While working on a specific scope vBRIEF, `plan.
|
|
211
|
-
- ⊗ Emit the project-wide Phase 4 task list to `plan.vbrief.json` — write per-IP scope vBRIEFs to `
|
|
209
|
+
- ! `plan.xbrief.json` reverts to its canonical session-todo role defined in [vbrief/vbrief.md — plan.xbrief.json](../vbrief/vbrief.md#planvbriefjson). It is the agent-private tactical plan for the current session, not the project-wide IP list.
|
|
210
|
+
- ! While working on a specific scope vBRIEF, `plan.xbrief.json` MUST carry a `planRef` to that scope vBRIEF in `xbrief/proposed/` or `xbrief/active/`.
|
|
211
|
+
- ⊗ Emit the project-wide Phase 4 task list to `plan.vbrief.json` — write per-IP scope vBRIEFs to `xbrief/proposed/` instead.
|
|
212
212
|
|
|
213
213
|
### Migrating Legacy speckit Projects
|
|
214
214
|
|
|
@@ -230,7 +230,7 @@ For each implementation phase IP-N, write a scope vBRIEF with:
|
|
|
230
230
|
|
|
231
231
|
### Transition Criteria
|
|
232
232
|
|
|
233
|
-
- ! Every implementation phase from `ImplementationPhases` has a matching scope vBRIEF in `./
|
|
233
|
+
- ! Every implementation phase from `ImplementationPhases` has a matching scope vBRIEF in `./xbrief/proposed/`
|
|
234
234
|
- ! Each scope vBRIEF has `Description`, `Acceptance`, and `Traces` narratives
|
|
235
235
|
- ! Each scope vBRIEF carries a `references` entry linking back to the parent Phase 3 proposed/ vBRIEF with `TrustLevel: internal`
|
|
236
236
|
- ! Cross-scope dependencies in `plan.metadata.dependencies` form a valid DAG (no cycles)
|
|
@@ -241,21 +241,21 @@ For each implementation phase IP-N, write a scope vBRIEF with:
|
|
|
241
241
|
|
|
242
242
|
**Goal:** Convert approved Phase 4 phase/epic scopes into child story vBRIEFs suitable for parallel agents.
|
|
243
243
|
|
|
244
|
-
**Input:** Phase 4 phase/epic
|
|
244
|
+
**Input:** Phase 4 phase/epic xBRIEFs in `./xbrief/pending/` or `./xbrief/active/` (else legacy `./vbrief/pending/`).
|
|
245
245
|
|
|
246
246
|
**Output:** Story-level child vBRIEFs whose executable acceptance criteria live in `plan.items` and whose `plan.metadata.swarm` contract proves they are safe to allocate.
|
|
247
247
|
|
|
248
|
-
! After emitting the story vBRIEF(s) to `
|
|
248
|
+
! After emitting the story vBRIEF(s) to `xbrief/proposed/`, surface the GitHub-issue tracking hint from [emit-hints.md](./emit-hints.md) — name all three patterns (none / `--umbrella` / `--per-vbrief`).
|
|
249
249
|
|
|
250
250
|
### Process
|
|
251
251
|
|
|
252
252
|
1. ! Inspect approved specification narratives and Phase 4 scope vBRIEFs.
|
|
253
253
|
2. ! Identify `plan.metadata.kind = "phase"` or `"epic"` scopes that are too broad for direct implementation.
|
|
254
254
|
3. ! Draft a deterministic decomposition proposal: stories, dependencies, expected file scope, verification commands, traces, and conflict groups.
|
|
255
|
-
4. ! Store the temporary proposal artifact under `
|
|
255
|
+
4. ! Store the temporary proposal artifact under `xbrief/.triage-cache/decompositions/<parent-slug>.json` (legacy scratch `vbrief/.triage-cache/decompositions/ip001-auth.json` is read-accepted); derive `<parent-slug>` from the parent vBRIEF filename by removing `.xbrief.json` or `.vbrief.json` and any leading `YYYY-MM-DD-` date prefix.
|
|
256
256
|
5. ! Ask for explicit user approval before writing child story vBRIEFs.
|
|
257
|
-
6. ! Validate the approved draft with `task scope:decompose -- <parent.
|
|
258
|
-
7. ! Run `task swarm:readiness --
|
|
257
|
+
6. ! Validate the approved draft with `task scope:decompose -- <parent.xbrief.json> --draft xbrief/.triage-cache/decompositions/<parent-slug>.json --check`, then apply it without `--check`.
|
|
258
|
+
7. ! Run `task swarm:readiness -- xbrief/active/*.xbrief.json` before concurrent allocation, or point it at the candidate child story files for a dry readiness review before activation.
|
|
259
259
|
|
|
260
260
|
### Story vBRIEF Requirements
|
|
261
261
|
|
|
@@ -282,12 +282,12 @@ Each Phase 4.5 child story vBRIEF MUST include:
|
|
|
282
282
|
Use the deterministic command surface:
|
|
283
283
|
|
|
284
284
|
```bash
|
|
285
|
-
task scope:decompose --
|
|
286
|
-
task scope:decompose --
|
|
285
|
+
task scope:decompose -- xbrief/pending/2026-05-12-ip001-auth.xbrief.json --draft vbrief/.triage-cache/decompositions/ip001-auth.json --check
|
|
286
|
+
task scope:decompose -- xbrief/pending/2026-05-12-ip001-auth.xbrief.json --draft vbrief/.triage-cache/decompositions/ip001-auth.json
|
|
287
287
|
task scope:decompose -- --check
|
|
288
288
|
```
|
|
289
289
|
|
|
290
|
-
The draft JSON is a temporary proposal artifact, not a vBRIEF. Agents SHOULD write draft proposals under `vbrief/.triage-cache/decompositions
|
|
290
|
+
The draft JSON is a temporary proposal artifact, not a vBRIEF. Agents SHOULD write draft proposals under `xbrief/.triage-cache/decompositions/` (legacy `vbrief/.triage-cache/decompositions/` remains read-accepted), which is gitignored specifically for local decomposition scratch. Derive `<parent-slug>` from the parent vBRIEF filename by removing `.xbrief.json` or `.vbrief.json` and any leading `YYYY-MM-DD-` date prefix. Agents MUST NOT leave decomposition draft JSON files at the workspace root. The command validates and applies a proposed decomposition rather than freely inventing one. It creates generated child story vBRIEFs as lifecycle artifacts, defaulting to `xbrief/pending/`, preserves origin/provenance references, sets each child `planRef` to the parent scope, updates parent references to include children, validates the dependency DAG, rejects dependency cycles, and rejects ready stories missing user-story shape, concrete observable acceptance, narrow file scope, focused verify commands, or traces. Parent `plan.items` are input signals, not automatic child stories.
|
|
291
291
|
|
|
292
292
|
Parent phase/epic acceptance MAY remain in `plan.narratives.Acceptance` as context. Executable acceptance for swarm work MUST be redistributed into child story `plan.items`.
|
|
293
293
|
|
|
@@ -296,7 +296,7 @@ Parent phase/epic acceptance MAY remain in `plan.narratives.Acceptance` as conte
|
|
|
296
296
|
Use the readiness gate before swarm allocation:
|
|
297
297
|
|
|
298
298
|
```bash
|
|
299
|
-
task swarm:readiness --
|
|
299
|
+
task swarm:readiness -- xbrief/active/*.xbrief.json
|
|
300
300
|
```
|
|
301
301
|
|
|
302
302
|
The readiness report lists ready stories, blocked stories, decomposition-needed epics/phases, dependency waves, conflict groups, a file-overlap matrix, and missing fields. It exits non-zero when candidate work is not swarm-ready for concurrent allocation. `readiness=ready` means ready for concurrent allocation; sequential-safe or low-confidence work MUST use another state such as `sequential` or `needs_refinement` and will fail this gate until refined or scheduled outside concurrent swarm allocation.
|
|
@@ -317,7 +317,7 @@ The readiness report lists ready stories, blocked stories, decomposition-needed
|
|
|
317
317
|
|
|
318
318
|
**Goal:** Execute scope vBRIEFs following test-first discipline.
|
|
319
319
|
|
|
320
|
-
**Input:** Story-level scope vBRIEFs in `./
|
|
320
|
+
**Input:** Story-level scope vBRIEFs in `./xbrief/pending/` (promote to `./xbrief/active/` via `task scope:activate` when work begins). `./xbrief/plan.xbrief.json` holds the current session's tactical todo list and carries a `planRef` to the active scope. Concurrent swarm implementation requires Phase 4.5-ready stories.
|
|
321
321
|
|
|
322
322
|
### Process
|
|
323
323
|
|
|
@@ -325,7 +325,7 @@ The readiness report lists ready stories, blocked stories, decomposition-needed
|
|
|
325
325
|
- ! Implement minimal code to pass tests (Green)
|
|
326
326
|
- ! Refactor while keeping tests green (Refactor)
|
|
327
327
|
- ! Update scope vBRIEF `plan.status` and folder via `task scope:*` commands as work progresses (`pending` → `running` → `completed`)
|
|
328
|
-
- ! Update `./
|
|
328
|
+
- ! Update `./xbrief/plan.xbrief.json` session todos as tactical steps progress (session-scoped; do NOT put the project-wide IP list here)
|
|
329
329
|
- ~ Work on story vBRIEFs whose `plan.metadata.swarm.depends_on` entries are already completed in parallel when possible
|
|
330
330
|
|
|
331
331
|
### File Creation Order
|
|
@@ -337,11 +337,11 @@ The readiness report lists ready stories, blocked stories, decomposition-needed
|
|
|
337
337
|
|
|
338
338
|
### Guidelines
|
|
339
339
|
|
|
340
|
-
- ! Follow the `Principles` narrative in `
|
|
340
|
+
- ! Follow the `Principles` narrative in `xbrief/PROJECT-DEFINITION.xbrief.json` throughout
|
|
341
341
|
- ! Move scope vBRIEFs through lifecycle folders using `task scope:activate|complete|cancel|block|unblock`
|
|
342
342
|
- ⊗ Implement without failing tests first
|
|
343
343
|
- ⊗ Skip refactoring phase
|
|
344
|
-
- ⊗ Write the project-wide IP list to `plan.
|
|
344
|
+
- ⊗ Write the project-wide IP list to `plan.xbrief.json` — use `xbrief/pending/` scope vBRIEFs as the durable task tracker
|
|
345
345
|
- ⊗ Allocate broad `kind=epic` or `kind=phase` scopes to concurrent swarm workers before decomposition
|
|
346
346
|
|
|
347
347
|
---
|
|
@@ -350,26 +350,26 @@ The readiness report lists ready stories, blocked stories, decomposition-needed
|
|
|
350
350
|
|
|
351
351
|
| Phase | Artifact | Purpose |
|
|
352
352
|
|-------|----------|---------|
|
|
353
|
-
| 1. Principles | `
|
|
354
|
-
| 2. Specify | date-prefixed in `
|
|
355
|
-
| 3. Plan | date-prefixed in `
|
|
353
|
+
| 1. Principles | `xbrief/PROJECT-DEFINITION.xbrief.json` | Governing rules (Principles narrative) |
|
|
354
|
+
| 2. Specify | date-prefixed in `xbrief/proposed/` | WHAT/WHY narratives (v0.20) |
|
|
355
|
+
| 3. Plan | date-prefixed in `xbrief/proposed/` | HOW narratives (enriches Phase 2; v0.20) |
|
|
356
356
|
| 3b. Export (review) | `SPECIFICATION.md` (via `task project:export-spec`) | Read-only human review export (optional; gate requires export succeeded for Phase 3→4) |
|
|
357
357
|
| 3c. Render PRD (derivative) | `PRD.md` (via `task prd:render`, sentinel only) | Optional stakeholder-review export |
|
|
358
|
-
| 4. Tasks | `./vbrief/proposed/YYYY-MM-DD-ip<NNN>-<slug>.vbrief.json
|
|
358
|
+
| 4. Tasks | `./xbrief/proposed/YYYY-MM-DD-ip<NNN>-<slug>.xbrief.json` (else legacy `./vbrief/proposed/YYYY-MM-DD-ip<NNN>-<slug>.vbrief.json`; one per IP/epic) | Phase/epic scope vBRIEFs (v0.20: proposed/) drive roadmap/project render + decomposition |
|
|
359
359
|
| 4.5. Story decomposition | Child story vBRIEFs with `plan.metadata.swarm` in proposed/ | Swarm-ready executable units (v0.20) |
|
|
360
|
-
| 4b. Session todos | `./
|
|
360
|
+
| 4b. Session todos | `./xbrief/plan.xbrief.json` | Session-level tactical plan (carries `planRef` to active scope) |
|
|
361
361
|
| 5. Implement | Code + tests | Working software, optionally via swarm |
|
|
362
362
|
|
|
363
363
|
## Directory Structure (v0.20)
|
|
364
364
|
|
|
365
365
|
```
|
|
366
366
|
project/
|
|
367
|
-
├──
|
|
368
|
-
│ ├── PROJECT-DEFINITION.
|
|
367
|
+
├── xbrief/
|
|
368
|
+
│ ├── PROJECT-DEFINITION.xbrief.json # Phase 1: Principles narrative
|
|
369
369
|
│ ├── proposed/ # Phase 2+: date-prefixed WHAT/WHY/HOW + IP scopes + stories
|
|
370
|
-
│ │ └── YYYY-MM-DD-*.
|
|
371
|
-
│ │ └── YYYY-MM-DD-ip001-....
|
|
372
|
-
│ ├── plan.
|
|
370
|
+
│ │ └── YYYY-MM-DD-*.xbrief.json
|
|
371
|
+
│ │ └── YYYY-MM-DD-ip001-....xbrief.json
|
|
372
|
+
│ ├── plan.xbrief.json # Phase 4b: session todos (planRef to active scope)
|
|
373
373
|
│ └── pending/ active/ etc. # Lifecycle (seeded empty or with promoted)
|
|
374
374
|
├── SPECIFICATION.md # Optional export (task project:export-spec)
|
|
375
375
|
├── PRD.md # Optional derivative (task prd:render; sentinel only)
|
|
@@ -384,11 +384,11 @@ project/
|
|
|
384
384
|
|
|
385
385
|
This strategy has been migrated to the full v0.20 output shape so speckit-generated projects are accepted by the build skill Pre-Cutover Detection Guard with zero errors on first attempt (resolves the speckit row from the #1166 inconsistency table and the s5 story acceptance criteria, including story-level vBRIEFs in proposed/ instead of only phase/epic in pending/).
|
|
386
386
|
|
|
387
|
-
- ! Seed the five lifecycle folders under `
|
|
388
|
-
- ! Emit all scope items (principles context, spec phases/stories, implementation phases/epics) exclusively as date-prefixed scope vBRIEFs in `
|
|
389
|
-
- ! After the proposed/ vBRIEFs are written (or at Phase 3/4 boundaries), invoke `task project:render` from the repo root to generate/refresh the complete `
|
|
390
|
-
- ⊗ Never emit `vbrief/specification.vbrief.json` (or any legacy dual-write).
|
|
391
|
-
- ~ `SPECIFICATION.md` / `PRD.md` at the project root, if produced at all, are read-only exports from `task project:export-spec` / `task prd:render`. The source of truth is the
|
|
387
|
+
- ! Seed the five lifecycle folders under `xbrief/` if any are missing: `proposed/`, `pending/`, `active/`, `completed/`, `cancelled/`.
|
|
388
|
+
- ! Emit all scope items (principles context, spec phases/stories, implementation phases/epics) exclusively as date-prefixed scope vBRIEFs in `xbrief/proposed/YYYY-MM-DD-<kebab-slug>.xbrief.json` (or the ipNNN convention for phases per vbrief.md). For speckit, phases use `YYYY-MM-DD-ip<NNN>-<slug>.xbrief.json` in proposed/; stories from Phase 4.5 also in proposed/. Decompose plans into focused, buildable vBRIEFs (v0.6 schema) rather than a monolithic legacy spec.
|
|
389
|
+
- ! After the proposed/ vBRIEFs are written (or at Phase 3/4 boundaries), invoke `task project:render` from the repo root to generate/refresh the complete `xbrief/PROJECT-DEFINITION.xbrief.json` (items registry derived from the lifecycle folders). For human review at Phase 3→4, invoke `task project:export-spec` (or `--audience=internal` when proposed scopes must appear in `## Scope outlook`).
|
|
390
|
+
- ⊗ Never emit `vbrief/specification.vbrief.json` (or any legacy dual-write). Live identity is `xbrief/PROJECT-DEFINITION.xbrief.json`; legacy `vbrief/PROJECT-DEFINITION.vbrief.json` is read-accepted until `deft migrate:xbrief`.
|
|
391
|
+
- ~ `SPECIFICATION.md` / `PRD.md` at the project root, if produced at all, are read-only exports from `task project:export-spec` / `task prd:render`. The source of truth is the xbrief/ lifecycle (proposed/ phases + stories) + PROJECT-DEFINITION. Legacy `task spec:render` applies only to migrated trees with `vbrief/specification.vbrief.json`.
|
|
392
392
|
- ! Before writing any proposed/ vBRIEFs or PROJECT-DEFINITION, follow the guards in [artifact-guards.md](./artifact-guards.md) (Preparatory Guard for scope items in proposed/; Spec-Generating Guard for PROJECT-DEFINITION).
|
|
393
393
|
- ! Final output tree must pass the deterministic v0.20 strategy output validation gate (s2-deterministic-gate) and the build Pre-Cutover Detection Guard with zero warnings/errors. See full acceptance in the s5 vBRIEF (a1: date-prefixed stories in proposed/ + deterministic gate; a2: speckit story-level in proposed/ not only pending phases; a3: no legacy specification.vbrief.json) and the 1166 decomposition.
|
|
394
394
|
- ! Cite the canonical contract `strategies/v0-20-contract.md` (s1-contract) for the exact shape and the per-strategy table row (speckit: Yes lifecycle; Yes PROJECT-DEFINITION Phase 1+; proposed/ (phases + stories date-prefixed); Never specification.vbrief.json; `task project:export-spec` for SPEC export).
|
|
@@ -401,11 +401,11 @@ This strategy has been migrated to the full v0.20 output shape so speckit-genera
|
|
|
401
401
|
|
|
402
402
|
| Artifact | Purpose | Created By |
|
|
403
403
|
|----------|---------|------------|
|
|
404
|
-
| `
|
|
405
|
-
| `
|
|
406
|
-
| `
|
|
404
|
+
| `xbrief/PROJECT-DEFINITION.xbrief.json` | Principles + full items registry | Speckit Phase 1 + `task project:render` |
|
|
405
|
+
| `xbrief/proposed/YYYY-MM-DD-*.xbrief.json` + `YYYY-MM-DD-ipNNN-*.xbrief.json` | All spec (WHAT/WHY/HOW) + phases/epics/stories (date-prefixed; per v0.20 contract and vbrief.md speckit convention) | Speckit Phases 2-4.5 |
|
|
406
|
+
| `xbrief/{proposed,pending,active,completed,cancelled}/` | All five lifecycle folders seeded | Speckit |
|
|
407
407
|
| (optional export) `SPECIFICATION.md` / `PRD.md` | Human-readable spec export | `task project:export-spec` / `task prd:render` |
|
|
408
|
-
| `
|
|
408
|
+
| `xbrief/plan.xbrief.json` | Session-level tactical plan (planRef to active) | Speckit (internal) |
|
|
409
409
|
|
|
410
410
|
**Pre-v0.20 / legacy artifacts that MUST NOT be produced by this strategy:**
|
|
411
411
|
|
|
@@ -419,7 +419,7 @@ See the full table and rules in `strategies/v0-20-contract.md` (speckit row repr
|
|
|
419
419
|
|
|
420
420
|
## Invoking This Strategy
|
|
421
421
|
|
|
422
|
-
Set in PROJECT-DEFINITION.
|
|
422
|
+
Set in PROJECT-DEFINITION.xbrief.json narratives:
|
|
423
423
|
```json
|
|
424
424
|
"Strategy": "strategies/speckit.md"
|
|
425
425
|
```
|
|
@@ -20,7 +20,7 @@ Spec-generating strategies (interview, yolo, speckit, rapid, enterprise) histori
|
|
|
20
20
|
|
|
21
21
|
- Some wrote only the legacy `vbrief/specification.vbrief.json` + root `SPECIFICATION.md`
|
|
22
22
|
- Some wrote scope vBRIEFs without date prefixes and still dual-wrote the old singular spec file
|
|
23
|
-
- None consistently seeded the full v0.20 lifecycle folders + `PROJECT-DEFINITION.
|
|
23
|
+
- None consistently seeded the full v0.20 lifecycle folders + `PROJECT-DEFINITION.xbrief.json` + date-prefixed proposed/ items
|
|
24
24
|
|
|
25
25
|
This caused immediate build failures via the Pre-Cutover Detection Guard for any project generated through those strategies.
|
|
26
26
|
|
|
@@ -35,7 +35,7 @@ Use this contract when authoring, reviewing, or migrating a spec-generating stra
|
|
|
35
35
|
1. Identify whether the strategy is spec-generating or preparatory.
|
|
36
36
|
2. Apply the matching row in the per-strategy summary table.
|
|
37
37
|
3. Create the required lifecycle folders before writing scope artifacts.
|
|
38
|
-
4. Write authoritative vBRIEF content to `
|
|
38
|
+
4. Write authoritative vBRIEF content to `xbrief/PROJECT-DEFINITION.xbrief.json` and date-prefixed `xbrief/proposed/*.xbrief.json` files.
|
|
39
39
|
5. Omit root `SPECIFICATION.md` / `PROJECT.md`, or write only deprecation redirect stubs when transitional UX requires them.
|
|
40
40
|
6. Run the validator and content gates before treating the strategy output as v0.20-conformant.
|
|
41
41
|
|
|
@@ -44,21 +44,21 @@ Use this contract when authoring, reviewing, or migrating a spec-generating stra
|
|
|
44
44
|
For a project that has completed any spec-generating strategy (or the full speckit flow), the following MUST exist and be the only authoritative sources:
|
|
45
45
|
|
|
46
46
|
### Required Directory Structure
|
|
47
|
-
- `
|
|
48
|
-
- `
|
|
49
|
-
- `
|
|
50
|
-
- `
|
|
51
|
-
- `
|
|
47
|
+
- `xbrief/proposed/`
|
|
48
|
+
- `xbrief/pending/`
|
|
49
|
+
- `xbrief/active/`
|
|
50
|
+
- `xbrief/completed/`
|
|
51
|
+
- `xbrief/cancelled/`
|
|
52
52
|
|
|
53
53
|
All five lifecycle folders MUST be present (even if empty). This is the cutover signal used by pre-cutover guards.
|
|
54
54
|
|
|
55
55
|
### Required Root-Level vBRIEF Artifact
|
|
56
|
-
- `
|
|
56
|
+
- `xbrief/PROJECT-DEFINITION.xbrief.json` (complete: narratives + items registry populated from the strategy session)
|
|
57
57
|
|
|
58
58
|
`task project:render` MAY be invoked by the strategy or left to the user; the end state after strategy + any render MUST have a non-skeleton PROJECT-DEFINITION.
|
|
59
59
|
|
|
60
60
|
### Scope vBRIEF Placement & Naming (Strict)
|
|
61
|
-
- All new scope vBRIEFs (user stories, phases, epics from speckit Phase 4/4.5, etc.) MUST be written **only** to `
|
|
61
|
+
- All new scope vBRIEFs (user stories, phases, epics from speckit Phase 4/4.5, etc.) MUST be written **only** to `xbrief/proposed/YYYY-MM-DD-<kebab-slug>.xbrief.json`
|
|
62
62
|
- Filenames MUST be date-prefixed using the creation date (immutable per vbrief.md conventions)
|
|
63
63
|
- Bare names (e.g. `scaffold.vbrief.json`) or names without date prefix are FORBIDDEN in v0.20
|
|
64
64
|
- The old singular `vbrief/specification.vbrief.json` MUST NOT be written or updated by v0.20 strategies (it is a legacy container; new work uses the lifecycle folders + PROJECT-DEFINITION)
|
|
@@ -68,7 +68,7 @@ All five lifecycle folders MUST be present (even if empty). This is the cutover
|
|
|
68
68
|
- If a strategy does emit them (for UX continuity during transition), they MUST be written **exclusively** as deprecation-redirect stubs:
|
|
69
69
|
- Start with the canonical 4-line machine-generated banner (see conventions/machine-generated-banner.md)
|
|
70
70
|
- Fifth line: `<!-- deft:deprecated-redirect -->`
|
|
71
|
-
- Short explanatory body pointing to `
|
|
71
|
+
- Short explanatory body pointing to `xbrief/PROJECT-DEFINITION.xbrief.json` and the lifecycle folders
|
|
72
72
|
- Never contain real spec or project content
|
|
73
73
|
- Real content in these files (without the sentinel) triggers the build/setup/sync pre-cutover guards and forces migration.
|
|
74
74
|
|
|
@@ -80,26 +80,26 @@ All five lifecycle folders MUST be present (even if empty). This is the cutover
|
|
|
80
80
|
|
|
81
81
|
Greenfield projects (no `vbrief/specification.vbrief.json`) export stakeholder-facing spec text via `task project:export-spec`:
|
|
82
82
|
|
|
83
|
-
- ! Source of truth: `
|
|
83
|
+
- ! Source of truth: `xbrief/PROJECT-DEFINITION.xbrief.json` product narratives + lifecycle scope bodies (never the legacy singular spec file).
|
|
84
84
|
- ! Default audience is **stakeholder** — proposed scopes are omitted; only pending/active/completed scopes appear under `## Scope outlook`.
|
|
85
85
|
- ! Internal handoff (setup Phase 3, speckit Phase 3→4 when proposed scopes must be visible) uses `task project:export-spec -- --audience=internal`, which adds `### Not yet accepted (proposed)` under `## Scope outlook` with a fixed disclaimer that proposed scopes are ideas, not approved backlog.
|
|
86
86
|
- ! Phase 3→4 transition gate: **export succeeded** (exit 0), not spec-file `approved` status — PROJECT-DEFINITION has no spec-approval lifecycle on greenfield trees.
|
|
87
87
|
- ~ Legacy migrated trees with `vbrief/specification.vbrief.json` MAY continue using `task spec:render` until fully cut over.
|
|
88
88
|
- ⊗ Invoke `task spec:render` on a greenfield tree that lacks `specification.vbrief.json` — use `task project:export-spec` instead.
|
|
89
89
|
|
|
90
|
-
### plan.
|
|
91
|
-
- Session/tactical state files are permitted at
|
|
90
|
+
### plan.xbrief.json and continue.xbrief.json
|
|
91
|
+
- Session/tactical state files are permitted at xbrief/ root (they carry `planRef` links). They are not part of the "spec output" contract but strategies that maintain chaining state (e.g. interview) update them per their own rules.
|
|
92
92
|
|
|
93
93
|
## Per-Strategy Summary Table (Target State After Migration)
|
|
94
94
|
|
|
95
95
|
| Strategy | Type | Must Create Lifecycle Folders | Must Write PROJECT-DEFINITION | Scope vBRIEFs Location | specification.vbrief.json | SPECIFICATION.md / PROJECT.md |
|
|
96
96
|
|--------------|------------------|-------------------------------|-------------------------------|-----------------------------------------|-----------------------------|----------------------------------------|
|
|
97
|
-
| interview | spec-generating | Yes | Yes (narratives + items) | proposed/YYYY-MM-DD-*.
|
|
98
|
-
| yolo | spec-generating | Yes | Yes | proposed/YYYY-MM-DD-*.
|
|
99
|
-
| speckit | spec-generating | Yes | Yes (Phase 1+) | proposed/YYYY-MM-DD-*.
|
|
100
|
-
| rapid | spec-generating | Yes | Yes | proposed/YYYY-MM-DD-*.
|
|
101
|
-
| enterprise | spec-generating | Yes | Yes | proposed/YYYY-MM-DD-*.
|
|
102
|
-
| preparatory (research, discuss, map, etc.) | preparatory | Yes (if first touch) | No (unless also spec path) | proposed/YYYY-MM-DD-*.
|
|
97
|
+
| interview | spec-generating | Yes | Yes (narratives + items) | proposed/YYYY-MM-DD-*.xbrief.json only | Never (post-migration) | Omit or deprecation redirect only |
|
|
98
|
+
| yolo | spec-generating | Yes | Yes | proposed/YYYY-MM-DD-*.xbrief.json only | Never | Omit or deprecation redirect only |
|
|
99
|
+
| speckit | spec-generating | Yes | Yes (Phase 1+) | proposed/YYYY-MM-DD-*.xbrief.json only (phases + stories) | Never | Omit or `task project:export-spec` (legacy: `task spec:render` on migrated trees) |
|
|
100
|
+
| rapid | spec-generating | Yes | Yes | proposed/YYYY-MM-DD-*.xbrief.json only | Never | Omit or deprecation redirect only |
|
|
101
|
+
| enterprise | spec-generating | Yes | Yes | proposed/YYYY-MM-DD-*.xbrief.json only | Never | Omit or deprecation redirect only |
|
|
102
|
+
| preparatory (research, discuss, map, etc.) | preparatory | Yes (if first touch) | No (unless also spec path) | proposed/YYYY-MM-DD-*.xbrief.json (context/decision vBRIEFs) | N/A | N/A (preparatory only) |
|
|
103
103
|
|
|
104
104
|
## Agent & Strategy Author Rules
|
|
105
105
|
|
|
@@ -133,13 +133,13 @@ Use this contract when:
|
|
|
133
133
|
## Workflow
|
|
134
134
|
|
|
135
135
|
1. Read the Canonical v0.20 Output Shape section.
|
|
136
|
-
2. Ensure your strategy (or migration) writes exactly the required folders + `PROJECT-DEFINITION.
|
|
136
|
+
2. Ensure your strategy (or migration) writes exactly the required folders + `PROJECT-DEFINITION.xbrief.json` + dated proposed/ vBRIEFs.
|
|
137
137
|
3. Never write the legacy `specification.vbrief.json` or real-content `SPECIFICATION.md`/`PROJECT.md`.
|
|
138
138
|
4. Cite this contract explicitly in your strategy's "Artifacts" / "Output" section (see the Per-Strategy Summary Table).
|
|
139
139
|
5. Run `task check` (or the deterministic gate once s2 lands) to validate.
|
|
140
140
|
|
|
141
141
|
---
|
|
142
142
|
|
|
143
|
-
**Owned by**: `
|
|
143
|
+
**Owned by**: `xbrief/active/2026-05-26-define-canonical-v020-strategy-output-contract.vbrief.json` (s1-contract of #1166 strategy consistency decomposition)
|
|
144
144
|
|
|
145
145
|
This contract lands first so that s2 (gate) and the migration stories have an unambiguous target.
|
package/strategies/yolo.md
CHANGED
|
@@ -10,7 +10,7 @@ Auto-pilot interview: the agent plays both sides, always picking the recommended
|
|
|
10
10
|
option. Same workflow as [interview.md](./interview.md) (including the sizing
|
|
11
11
|
gate) but the agent answers its own questions via "Johnbot."
|
|
12
12
|
|
|
13
|
-
**v0.20 note (s3-migrate-yolo / #1166):** Yolo now emits only the canonical v0.20 shape (date-prefixed story vBRIEFs in proposed/, full PROJECT-DEFINITION.
|
|
13
|
+
**v0.20 note (s3-migrate-yolo / #1166):** Yolo now emits only the canonical v0.20 shape (date-prefixed story vBRIEFs in proposed/, full PROJECT-DEFINITION.xbrief.json via task project:render, seeded lifecycle folders, no legacy specification.vbrief.json). See the dedicated ## v0.20 Output Shape section.
|
|
14
14
|
|
|
15
15
|
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
16
16
|
|
|
@@ -52,7 +52,7 @@ flowchart LR
|
|
|
52
52
|
I_L["💬 Auto-Interview<br/><i>Light path</i>"]
|
|
53
53
|
I_F["💬 Auto-Interview<br/><i>Full path</i>"]
|
|
54
54
|
P["📄 PRD<br/><i>Auto-approved</i>"]
|
|
55
|
-
S["📁
|
|
55
|
+
S["📁 xbrief/proposed/ (YYYY-MM-DD-*.xbrief.json)<br/>📋 PROJECT-DEFINITION.xbrief.json<br/><i>v0.20 shape</i>"]
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
G -->|"Light"| I_L
|
|
@@ -110,11 +110,11 @@ but Johnbot answers all questions and auto-approves the PRD.
|
|
|
110
110
|
|
|
111
111
|
This strategy has been migrated to the full v0.20 output shape so yolo-generated projects are accepted by the build skill Pre-Cutover Detection Guard with zero errors on first attempt (resolves the yolo row from the #1166 inconsistency table).
|
|
112
112
|
|
|
113
|
-
- ! Seed the five lifecycle folders under `
|
|
114
|
-
- ! Emit story scope items exclusively as date-prefixed scope vBRIEFs: `
|
|
115
|
-
- ! After the proposed/ stories are written, invoke `task project:render` (run from the repo root) to generate/refresh the complete `
|
|
116
|
-
- ⊗ Never emit `vbrief/specification.vbrief.json` (or any legacy dual-write).
|
|
117
|
-
- ~ `SPECIFICATION.md` at the project root, if produced at all, must be only a read-only derivative (e.g. via `task spec:render` after the vbriefs exist) that includes the v0.20 deprecated-redirect sentinel. The source of truth is the
|
|
113
|
+
- ! Seed the five lifecycle folders under `xbrief/` if any are missing: `proposed/`, `pending/`, `active/`, `completed/`, `cancelled/`.
|
|
114
|
+
- ! Emit story scope items exclusively as date-prefixed scope vBRIEFs: `xbrief/proposed/YYYY-MM-DD-<kebab-slug>.xbrief.json` (use the run's creation date for the prefix; choose descriptive slugs). Decompose the yolo plan into one or more focused, buildable story vBRIEFs (v0.6 schema) rather than a monolithic legacy spec.
|
|
115
|
+
- ! After the proposed/ stories are written, invoke `task project:render` (run from the repo root) to generate/refresh the complete `xbrief/PROJECT-DEFINITION.xbrief.json` (items registry is derived from the lifecycle folders).
|
|
116
|
+
- ⊗ Never emit `vbrief/specification.vbrief.json` (or any legacy dual-write). Live identity is `xbrief/PROJECT-DEFINITION.xbrief.json`; legacy `vbrief/PROJECT-DEFINITION.vbrief.json` is read-accepted until `deft migrate:xbrief`.
|
|
117
|
+
- ~ `SPECIFICATION.md` at the project root, if produced at all, must be only a read-only derivative (e.g. via `task spec:render` after the vbriefs exist) that includes the v0.20 deprecated-redirect sentinel. The source of truth is the xbrief/ lifecycle stories + PROJECT-DEFINITION.
|
|
118
118
|
- ! Before writing any proposed/ stories or PROJECT-DEFINITION, follow the guards in [artifact-guards.md](./artifact-guards.md) (Preparatory Guard for scope items in proposed/; Spec-Generating Guard for PROJECT-DEFINITION).
|
|
119
119
|
- ! After emitting the proposed/ story vBRIEF(s), surface the GitHub-issue tracking hint from [emit-hints.md](./emit-hints.md) — name all three patterns (none / `--umbrella` / `--per-vbrief`).
|
|
120
120
|
- ! Final output tree must pass the deterministic v0.20 strategy output validation gate (s2-deterministic-gate) and the build Pre-Cutover Detection Guard with zero warnings/errors. See full acceptance in the yolo migration vBRIEF and the 1166 decomposition.
|
|
@@ -124,7 +124,7 @@ This strategy has been migrated to the full v0.20 output shape so yolo-generated
|
|
|
124
124
|
|
|
125
125
|
## SPECIFICATION Guidelines
|
|
126
126
|
|
|
127
|
-
Yolo expresses "specification" work via the v0.20 date-prefixed story vBRIEFs emitted to `
|
|
127
|
+
Yolo expresses "specification" work via the v0.20 date-prefixed story vBRIEFs emitted to `xbrief/proposed/` (see v0.20 Output Shape section above).
|
|
128
128
|
|
|
129
129
|
The detailed guidelines from [interview.md](./interview.md#specification-guidelines-both-paths) for content quality, requirements IDs, phasing, parallelism, test-first, task sizing, and format still apply — but the *delivery mechanism* is the discrete vBRIEF stories + PROJECT-DEFINITION (never the legacy specification.vbrief.json).
|
|
130
130
|
|
|
@@ -136,9 +136,9 @@ The detailed guidelines from [interview.md](./interview.md#specification-guideli
|
|
|
136
136
|
|
|
137
137
|
| Artifact | Purpose | Created By |
|
|
138
138
|
|----------|---------|------------|
|
|
139
|
-
| `
|
|
140
|
-
| `
|
|
141
|
-
| `
|
|
139
|
+
| `xbrief/proposed/YYYY-MM-DD-*.xbrief.json` (one or more) | Focused story scope items (date-prefixed per vbrief convention) | Yolo (Johnbot) |
|
|
140
|
+
| `xbrief/PROJECT-DEFINITION.xbrief.json` | Project identity gestalt + complete scope items registry | `task project:render` (invoked by Yolo) |
|
|
141
|
+
| `xbrief/{proposed,pending,active,completed,cancelled}/` | All five lifecycle folders seeded | Yolo |
|
|
142
142
|
| (optional derivative) `SPECIFICATION.md` | Human-readable plan (includes deprecated-redirect sentinel) | `task spec:render` (if invoked) |
|
|
143
143
|
|
|
144
144
|
**Pre-v0.20 / legacy artifacts that MUST NOT be produced by this strategy:**
|
|
@@ -164,6 +164,6 @@ After completion (v0.20 shape):
|
|
|
164
164
|
|
|
165
165
|
```
|
|
166
166
|
task project:render
|
|
167
|
-
# Review date-prefixed stories in
|
|
167
|
+
# Review date-prefixed stories in xbrief/proposed/ + the generated PROJECT-DEFINITION.xbrief.json
|
|
168
168
|
# Implement per the v0.20 artifacts (build skill accepts cleanly on first try)
|
|
169
169
|
```
|
package/tasks/engine.yml
CHANGED
|
@@ -102,6 +102,8 @@ tasks:
|
|
|
102
102
|
" session:start "|" session-start "|\
|
|
103
103
|
" session:ready "|" session-ready "|\
|
|
104
104
|
" occupancy:steal "|" occupancy-steal "|\
|
|
105
|
+
" occupancy:release "|" occupancy-release "|\
|
|
106
|
+
" session:end "|" session-end "|\
|
|
105
107
|
" lifecycle:event "|" lifecycle-event "|\
|
|
106
108
|
" verify:session-ritual "|" verify-session-ritual "|\
|
|
107
109
|
" verify:tools "|" verify-tools "|\
|
package/tasks/feedback.yml
CHANGED
|
@@ -5,7 +5,7 @@ vars:
|
|
|
5
5
|
|
|
6
6
|
tasks:
|
|
7
7
|
file:
|
|
8
|
-
desc: "Draft or file a deduped framework-gap issue upstream (#1709). -- task feedback:file -- [--summary TEXT | positional] [--context ...] [--confirm] [--dry-run] [--json]"
|
|
8
|
+
desc: "Draft or file a deduped framework-gap issue upstream (#1709 / #3713). -- task feedback:file -- [--summary TEXT | positional] [--context ...] [--blocker] [--confirm] [--dry-run] [--json]"
|
|
9
9
|
deps:
|
|
10
10
|
- task: :engine:_ts-build
|
|
11
11
|
cmds:
|
package/tasks/occupancy.yml
CHANGED
|
@@ -15,3 +15,14 @@ tasks:
|
|
|
15
15
|
- task: :engine:invoke
|
|
16
16
|
vars:
|
|
17
17
|
ENGINE_CMD: 'occupancy:steal --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
|
|
18
|
+
|
|
19
|
+
release:
|
|
20
|
+
desc: "Release this worktree occupancy lease (#3604). Owner live or expired residue. Non-owner live denied."
|
|
21
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
22
|
+
# Runtime/session dispatch: no engine:_ts-build / pnpm build (#2181).
|
|
23
|
+
env:
|
|
24
|
+
PYTHONUTF8: "1"
|
|
25
|
+
cmds:
|
|
26
|
+
- task: :engine:invoke
|
|
27
|
+
vars:
|
|
28
|
+
ENGINE_CMD: 'occupancy:release --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
|
package/tasks/policy.yml
CHANGED
|
@@ -62,6 +62,16 @@ tasks:
|
|
|
62
62
|
vars:
|
|
63
63
|
ENGINE_CMD: 'policy enable-value-feedback --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
|
|
64
64
|
|
|
65
|
+
disable-host-hooks:
|
|
66
|
+
desc: "Disable plan.policy.hostHooks.<host> (capability-cost: deft-hook guardrails removed; tracked). Requires --host and --confirm. -- task policy:disable-host-hooks -- --host <claude|cursor|grok|codex> --confirm"
|
|
67
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
68
|
+
deps:
|
|
69
|
+
- task: :engine:_ts-build
|
|
70
|
+
cmds:
|
|
71
|
+
- task: :engine:invoke
|
|
72
|
+
vars:
|
|
73
|
+
ENGINE_CMD: 'policy disable-host-hooks --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
|
|
74
|
+
|
|
65
75
|
clear-value-feedback:
|
|
66
76
|
desc: "Remove typed plan.policy.valueFeedback so trusted-org repos return to org-auto resolution (#2822). -- task policy:clear-value-feedback"
|
|
67
77
|
dir: '{{.USER_WORKING_DIR}}'
|
package/tasks/scm.yml
CHANGED
|
@@ -13,6 +13,7 @@ version: '3'
|
|
|
13
13
|
# - scm:issue:view (thin wrapper over `ghx|gh issue view`)
|
|
14
14
|
# - scm:issue:close (thin wrapper over `ghx|gh issue close`)
|
|
15
15
|
# - scm:issue:edit (thin wrapper over `ghx|gh issue edit`)
|
|
16
|
+
# - scm:issue:design-critique-chip (#3642 closed catalog remaining-set)
|
|
16
17
|
# - scm:body:* (#1555 safe Markdown body posting via github-body TS CLI)
|
|
17
18
|
#
|
|
18
19
|
# Each command is a thin pass-through to `ghx <verb>` (when ghx is on PATH)
|
|
@@ -34,8 +35,9 @@ version: '3'
|
|
|
34
35
|
# stub deliberately does not re-implement; #881 owns the full surface.
|
|
35
36
|
#
|
|
36
37
|
# Forward-compat marker: v1 was issue:* plus #1555 body-posting. #3391
|
|
37
|
-
# adds scm:sync-default (dest-targeted staged sync PRs).
|
|
38
|
-
#
|
|
38
|
+
# adds scm:sync-default (dest-targeted staged sync PRs). #3642 adds
|
|
39
|
+
# scm:issue:design-critique-chip (closed catalog remaining-set). Other PR
|
|
40
|
+
# verbs remain #881.
|
|
39
41
|
# ---------------------------------------------------------------------------
|
|
40
42
|
|
|
41
43
|
vars:
|
|
@@ -89,6 +91,16 @@ tasks:
|
|
|
89
91
|
vars:
|
|
90
92
|
ENGINE_CMD: 'scm issue edit {{.CLI_ARGS}}'
|
|
91
93
|
|
|
94
|
+
issue:design-critique-chip:
|
|
95
|
+
desc: "[#3642] Exclusive design-critique catalog chip -- task scm:issue:design-critique-chip -- --issue N --chip triage-ready|mechanism-shaped [--repo OWNER/NAME]"
|
|
96
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
97
|
+
deps:
|
|
98
|
+
- task: :engine:_ts-build
|
|
99
|
+
cmds:
|
|
100
|
+
- task: :engine:invoke
|
|
101
|
+
vars:
|
|
102
|
+
ENGINE_CMD: 'scm issue design-critique-chip {{.CLI_ARGS}}'
|
|
103
|
+
|
|
92
104
|
body:issue:create:
|
|
93
105
|
desc: "[#1555] Safely create an issue body from --body-file without shell Markdown interpolation"
|
|
94
106
|
dir: '{{.USER_WORKING_DIR}}'
|
package/tasks/scope.yml
CHANGED
|
@@ -161,8 +161,8 @@ tasks:
|
|
|
161
161
|
# Mint a human-origin .deft/approved-scope/<plan-id>.json so
|
|
162
162
|
# verify:scope-provenance can authorize pending→active and operator-approved
|
|
163
163
|
# expansion without same-PR self-authorization.
|
|
164
|
-
# task scope:record-approved-scope -- xbrief/pending/story.xbrief.json --actor scott
|
|
165
|
-
# task scope:record-approved-scope -- xbrief/active/story.xbrief.json --actor scott --kind renewed-approval
|
|
164
|
+
# task scope:record-approved-scope -- xbrief/pending/story.xbrief.json --actor scott --confirm
|
|
165
|
+
# task scope:record-approved-scope -- xbrief/active/story.xbrief.json --actor scott --kind renewed-approval --confirm
|
|
166
166
|
record-approved-scope:
|
|
167
167
|
desc: "Record human-approved file_scope digest under .deft/approved-scope/<plan-id>.json (#3205). Requires --actor <human>. Refuses agent stamps. Path-binds pending→active. Commit on merge base before activation/expansion PR."
|
|
168
168
|
dir: '{{.USER_WORKING_DIR}}'
|
package/tasks/session.yml
CHANGED
|
@@ -30,3 +30,14 @@ tasks:
|
|
|
30
30
|
- task: :engine:invoke
|
|
31
31
|
vars:
|
|
32
32
|
ENGINE_CMD: 'session:ready --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
|
|
33
|
+
|
|
34
|
+
end:
|
|
35
|
+
desc: "End this mutation session by releasing occupancy (#3604). Same as occupancy:release."
|
|
36
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
37
|
+
# Runtime/session dispatch: no engine:_ts-build / pnpm build (#2181).
|
|
38
|
+
env:
|
|
39
|
+
PYTHONUTF8: "1"
|
|
40
|
+
cmds:
|
|
41
|
+
- task: :engine:invoke
|
|
42
|
+
vars:
|
|
43
|
+
ENGINE_CMD: 'session:end --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
|