@deftai/directive-content 0.60.0 → 0.61.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/.githooks/pre-commit +10 -128
- package/.githooks/pre-push +8 -109
- package/UPGRADING.md +18 -2
- package/package.json +1 -1
- package/packs/skills/skills-pack-0.1.json +22 -22
- package/packs/strategies/strategies-pack-0.1.json +19 -19
- package/scm/github.md +17 -4
- package/skills/deft-directive-setup/SKILL.md +24 -15
- package/strategies/speckit.md +14 -14
- package/strategies/v0-20-contract.md +12 -1
- package/tasks/project.yml +10 -0
- package/templates/agents-entry.md +1 -1
package/scm/github.md
CHANGED
|
@@ -234,9 +234,22 @@ task setup:ghx -- --yes # non-interactive CI / scripted approval
|
|
|
234
234
|
- ! Use live `gh` for mutations (POST/PATCH/PUT/DELETE) and for immediate read-back after a mutation — ghx is a cached GET proxy only
|
|
235
235
|
- ⊗ Use `ghx api` for multi-arg write invocations — ghx accepts a single positional path arg; writes fall through to `gh`
|
|
236
236
|
|
|
237
|
+
## Local git hooks (#747 / #2049)
|
|
238
|
+
|
|
239
|
+
Project-root `.githooks/` enforce branch policy and encoding gates through the **`deft` CLI only** — no Python `scripts/*.py` dispatch (#2049). Hooks are installed idempotently via `deft setup` (`git config core.hooksPath .githooks`).
|
|
240
|
+
|
|
241
|
+
| Hook | Dispatches | Purpose |
|
|
242
|
+
|------|------------|---------|
|
|
243
|
+
| `pre-commit` | `deft verify:branch`, `deft verify:encoding`, `deft verify:vbrief-conformance` (when `vbrief/` exists) | Default-branch commit refusal (#747), encoding gate (#798), staged vBRIEF conformance (#1620) |
|
|
244
|
+
| `pre-push` | `deft preflight-gh --pre-push-stdin` | Refspec-aware default-branch push refusal + destructive gh verb gate (#1019) |
|
|
245
|
+
|
|
246
|
+
- ! Verify wiring after install or framework upgrade: `deft verify:hooks-installed` (also wired into `deft check`).
|
|
247
|
+
- ! After upgrading the framework payload, run `deft update` from the project root to refresh `.githooks/` to the current TS-native templates (#2049). Stale hooks that still invoke `python scripts/preflight_branch.py` or other legacy paths fail `deft verify:hooks-installed`.
|
|
248
|
+
- ~ Recovery when hooks are stale or broken: `deft setup` (re-installs hooks path) or `deft update` (refreshes hook files from the deposited payload).
|
|
249
|
+
|
|
237
250
|
## Destructive gh verbs (#1019)
|
|
238
251
|
|
|
239
|
-
A detection-bound gate (`
|
|
252
|
+
A detection-bound gate (`deft preflight-gh`) refuses three classes of destructive surface before they execute, complementing the #747 branch-protection gate which already refuses commits to the default branch:
|
|
240
253
|
|
|
241
254
|
- `delete_repo` -- `gh repo delete <owner/repo>` and `gh api -X DELETE repos/<owner>/<repo>[/...]`. Irreversible.
|
|
242
255
|
- `force_push_default` -- `git push --force` / `--force-with-lease` / `+refspec` targeting `master` or `main`.
|
|
@@ -244,9 +257,9 @@ A detection-bound gate (`scripts/preflight_gh.py`) refuses three classes of dest
|
|
|
244
257
|
|
|
245
258
|
Three enforcement surfaces back the gate:
|
|
246
259
|
|
|
247
|
-
1. `.githooks/pre-push` invokes `
|
|
248
|
-
2. `task verify:destructive-gh-verbs` is wired into the `
|
|
249
|
-
3. Agent pre-execution callers can invoke `
|
|
260
|
+
1. `.githooks/pre-push` invokes `deft preflight-gh --pre-push-stdin` after the #747 branch gate (on pre-commit), refusing any push that touches the default branch (force-push or otherwise). Install via `deft setup` (idempotent `git config core.hooksPath .githooks`); verify via `deft verify:hooks-installed`.
|
|
261
|
+
2. `deft verify:destructive-gh-verbs` (or `task verify:destructive-gh-verbs` in framework source repos) is wired into the `deft check` aggregate. It runs `deft preflight-gh --self-test`, which drives a built-in fixture table through the classifier so a future edit that introduces a false negative / false positive fails CI immediately.
|
|
262
|
+
3. Agent pre-execution callers can invoke `deft preflight-gh --command "<full command>"` to classify a candidate verb before it executes. Three-state exit (0 allowed / 1 destructive refused / 2 config error) mirrors `deft verify:branch`.
|
|
250
263
|
|
|
251
264
|
**Override paths:**
|
|
252
265
|
|
|
@@ -12,6 +12,12 @@ description: >-
|
|
|
12
12
|
<!-- Regenerate with: task packs:render -->
|
|
13
13
|
<!-- Edit the source, not this file. Slice instead of loading every SKILL.md: task packs:slice skills by-trigger --trigger <kw> (or list) -->
|
|
14
14
|
|
|
15
|
+
<!-- AUTO-GENERATED by task packs:render -- DO NOT EDIT MANUALLY -->
|
|
16
|
+
<!-- Purpose: rendered skill -->
|
|
17
|
+
<!-- Source of truth: packs/skills/skills-pack-0.1.json -->
|
|
18
|
+
<!-- Regenerate with: task packs:render -->
|
|
19
|
+
<!-- Edit the source, not this file. Slice instead of loading every SKILL.md: task packs:slice skills by-trigger --trigger <kw> (or list) -->
|
|
20
|
+
|
|
15
21
|
# Deft Directive Setup
|
|
16
22
|
|
|
17
23
|
Agent-driven alternative to `.deft/core/run bootstrap && .deft/core/run project && .deft/core/run spec`.
|
|
@@ -497,7 +503,7 @@ omit = [
|
|
|
497
503
|
|
|
498
504
|
## Phase 3 — Specification
|
|
499
505
|
|
|
500
|
-
**Goal:** Generate an implementable spec using the strategy chosen in Phase 2, producing
|
|
506
|
+
**Goal:** Generate an implementable spec using the strategy chosen in Phase 2, producing scope vBRIEFs in `vbrief/proposed/` and PROJECT-DEFINITION narratives for human approval — greenfield v0.20 does not create `specification.vbrief.json`.
|
|
501
507
|
|
|
502
508
|
! **Path Resolution Anchor**: Same rule as Phase 2 -- resolve ALL paths relative to the user's pwd at skill entry, never relative to the skill file, AGENTS.md, or any framework directory.
|
|
503
509
|
|
|
@@ -656,24 +662,27 @@ Per [strategies/interview.md](../../strategies/interview.md#interview-rules-shar
|
|
|
656
662
|
|
|
657
663
|
⊗ Drop the user at the end of Phase 3 with scope vBRIEFs in `vbrief/proposed/` and no forward pointer to the bridge. Without this section the user discovers the gap at runtime when the swarm Phase 0 Step 1 preflight rejects every candidate (`Invalid transition: 'activate' requires file in pending/`), as in the originating 2026-05-10 first-session consumer tic-tac-toe swarm (issue #1025).
|
|
658
664
|
|
|
659
|
-
### End-of-Phase-3 Export Prompt
|
|
665
|
+
### End-of-Phase-3 Export Prompt (project:export-spec)
|
|
660
666
|
|
|
661
|
-
! After
|
|
667
|
+
! After scope vBRIEFs are written to `vbrief/proposed/` and PROJECT-DEFINITION is populated, but BEFORE handing off to `deft-directive-build` (or advancing speckit Phase 3 → Phase 4), ask the user whether to generate human-readable exports. Greenfield v0.20 projects export via `task project:export-spec` (not legacy `task spec:render`). This replaces the invisible skip-if-absent behavior of `task check` (#398), closes the greenfield gap (#433), and is the Phase 3 → Phase 4 transition gate required by [strategies/speckit.md Post-Phase 3 Transition Gate](../../strategies/speckit.md#post-phase-3-transition-gate-export-for-review) (#432 / #2013).
|
|
662
668
|
|
|
663
|
-
1. ! Prompt: "Your
|
|
664
|
-
1. Yes —
|
|
665
|
-
2. `SPECIFICATION.md`
|
|
669
|
+
1. ! Prompt: "Your scope vBRIEFs are ready. Generate a stakeholder-facing spec export and/or `PRD.md` now? (recommended for stakeholder review)"
|
|
670
|
+
1. Yes — export spec (+ PRD if selected)
|
|
671
|
+
2. Spec export only (`SPECIFICATION.md`)
|
|
666
672
|
3. `PRD.md` only
|
|
667
|
-
4. Skip — I
|
|
668
|
-
2. ! Run the selected
|
|
669
|
-
- `task spec
|
|
670
|
-
- `task
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
673
|
+
4. Skip — I'll export later with `task project:export-spec` / `task prd:render`
|
|
674
|
+
2. ! Run the selected export command(s):
|
|
675
|
+
- `task project:export-spec` → writes `SPECIFICATION.md` from PROJECT-DEFINITION + lifecycle scopes (greenfield default; stakeholder audience)
|
|
676
|
+
- `task project:export-spec -- --audience=internal` → same export but includes proposed scopes under `## Scope outlook` (use for setup/speckit internal handoff when proposed scopes need visibility)
|
|
677
|
+
- `task prd:render` → writes `PRD.md` (optional stakeholder review)
|
|
678
|
+
- Legacy `task spec:render` — migrated trees only (when `vbrief/specification.vbrief.json` exists); do NOT use on greenfield v0.20 projects
|
|
679
|
+
3. ! If the user picked a speckit-strategy project: export is **mandatory** at this boundary — invoke `task project:export-spec` (with `--audience=internal` when proposed scopes exist) even if the user declined the prompt, because speckit Phase 3 → Phase 4 is gated on **export succeeded** (exit 0), not on `specification.vbrief.json` approval.
|
|
680
|
+
4. ! Confirm to the user which files were written and remind them that direct edits to `SPECIFICATION.md` / `PRD.md` are overwritten on the next export — edit vBRIEF narratives in `vbrief/proposed/` and PROJECT-DEFINITION instead.
|
|
681
|
+
5. ~ If the user skipped export and is NOT on a speckit strategy, no-op and continue.
|
|
682
|
+
|
|
683
|
+
⊗ Advance a speckit project to Phase 4 without a successful `task project:export-spec` at this gate — export must succeed (exit 0) for the Phase 3 transition criterion.
|
|
676
684
|
⊗ Silently skip the prompt — greenfield users who never open a PR will miss the exports without it.
|
|
685
|
+
⊗ Invoke legacy `task spec:render` on a greenfield v0.20 project — use `task project:export-spec` instead (#2013).
|
|
677
686
|
|
|
678
687
|
### Handoff to deft-directive-build
|
|
679
688
|
|
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.vbrief.json via task project:render
|
|
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.vbrief.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
|
|
|
@@ -49,7 +49,7 @@ flowchart LR
|
|
|
49
49
|
style I fill:#f0abfc,stroke:#a855f7,color:#000
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
(See ## v0.20 Output Shape for exact artifact rules, the mandatory `task project:render`
|
|
52
|
+
(See ## v0.20 Output Shape for exact artifact rules, the mandatory `task project:render` post call and `task project:export-spec` for review exports, and citation of strategies/v0-20-contract.md.)
|
|
53
53
|
|
|
54
54
|
---
|
|
55
55
|
|
|
@@ -137,13 +137,13 @@ Add the following narrative keys to the proposed/ vBRIEF `plan.narratives`:
|
|
|
137
137
|
- ⊗ Write implementation code
|
|
138
138
|
- ⊗ Create `specs/` directories or standalone `plan.md` files -- all content goes in the proposed/ date-prefixed vBRIEF(s)
|
|
139
139
|
|
|
140
|
-
### Post-Phase 3 Transition Gate:
|
|
140
|
+
### Post-Phase 3 Transition Gate: Export for Review
|
|
141
141
|
|
|
142
|
-
! Phase 3 -> Phase 4 is gated on
|
|
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
|
-
1. ! Run `task spec
|
|
145
|
-
2. ! Confirm
|
|
146
|
-
3. ! The proposed/ vBRIEFs + PROJECT-DEFINITION are the source of truth.
|
|
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: vbrief/PROJECT-DEFINITION.vbrief.json -->`) or full-spec banner as appropriate.
|
|
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
|
|
|
149
149
|
### Transition Criteria
|
|
@@ -151,7 +151,7 @@ Add the following narrative keys to the proposed/ vBRIEF `plan.narratives`:
|
|
|
151
151
|
- ! All gates pass (or exceptions documented)
|
|
152
152
|
- ! Every spec requirement maps to a plan element
|
|
153
153
|
- ! Architecture reviewed and approved
|
|
154
|
-
- ! **Phase 3 -> Phase 4 transition criterion:**
|
|
154
|
+
- ! **Phase 3 -> Phase 4 transition criterion:** `task project:export-spec` succeeded (exit 0) AND the proposed/ date-prefixed vBRIEF(s) + PROJECT-DEFINITION represent the approved spec (agents MUST NOT advance to Phase 4 without review of the v0.20 artifacts).
|
|
155
155
|
|
|
156
156
|
---
|
|
157
157
|
|
|
@@ -353,7 +353,7 @@ The readiness report lists ready stories, blocked stories, decomposition-needed
|
|
|
353
353
|
| 1. Principles | `vbrief/PROJECT-DEFINITION.vbrief.json` | Governing rules (Principles narrative) |
|
|
354
354
|
| 2. Specify | date-prefixed in `vbrief/proposed/` | WHAT/WHY narratives (v0.20) |
|
|
355
355
|
| 3. Plan | date-prefixed in `vbrief/proposed/` | HOW narratives (enriches Phase 2; v0.20) |
|
|
356
|
-
| 3b.
|
|
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
358
|
| 4. Tasks | `./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) |
|
|
@@ -371,7 +371,7 @@ project/
|
|
|
371
371
|
│ │ └── YYYY-MM-DD-ip001-....vbrief.json
|
|
372
372
|
│ ├── plan.vbrief.json # Phase 4b: session todos (planRef to active scope)
|
|
373
373
|
│ └── pending/ active/ etc. # Lifecycle (seeded empty or with promoted)
|
|
374
|
-
├── SPECIFICATION.md # Optional
|
|
374
|
+
├── SPECIFICATION.md # Optional export (task project:export-spec)
|
|
375
375
|
├── PRD.md # Optional derivative (task prd:render; sentinel only)
|
|
376
376
|
└── src/ # Phase 5
|
|
377
377
|
```
|
|
@@ -386,12 +386,12 @@ This strategy has been migrated to the full v0.20 output shape so speckit-genera
|
|
|
386
386
|
|
|
387
387
|
- ! Seed the five lifecycle folders under `vbrief/` if any are missing: `proposed/`, `pending/`, `active/`, `completed/`, `cancelled/`.
|
|
388
388
|
- ! Emit all scope items (principles context, spec phases/stories, implementation phases/epics) exclusively as date-prefixed scope vBRIEFs in `vbrief/proposed/YYYY-MM-DD-<kebab-slug>.vbrief.json` (or the ipNNN convention for phases per vbrief.md). For speckit, phases use `YYYY-MM-DD-ip<NNN>-<slug>.vbrief.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`
|
|
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 `vbrief/PROJECT-DEFINITION.vbrief.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
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,
|
|
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 vbrief/ 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
|
-
- ! 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;
|
|
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).
|
|
395
395
|
|
|
396
396
|
---
|
|
397
397
|
|
|
@@ -404,7 +404,7 @@ This strategy has been migrated to the full v0.20 output shape so speckit-genera
|
|
|
404
404
|
| `vbrief/PROJECT-DEFINITION.vbrief.json` | Principles + full items registry | Speckit Phase 1 + `task project:render` |
|
|
405
405
|
| `vbrief/proposed/YYYY-MM-DD-*.vbrief.json` + `YYYY-MM-DD-ipNNN-*.vbrief.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
406
|
| `vbrief/{proposed,pending,active,completed,cancelled}/` | All five lifecycle folders seeded | Speckit |
|
|
407
|
-
| (optional
|
|
407
|
+
| (optional export) `SPECIFICATION.md` / `PRD.md` | Human-readable spec export | `task project:export-spec` / `task prd:render` |
|
|
408
408
|
| `vbrief/plan.vbrief.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:**
|
|
@@ -76,6 +76,17 @@ All five lifecycle folders MUST be present (even if empty). This is the cutover
|
|
|
76
76
|
- ⊗ No v0.20 strategy may create or dual-write `vbrief/specification.vbrief.json` alongside the new model artifacts.
|
|
77
77
|
- Existing legacy files are handled only by `task migrate:vbrief` (which ingests them into scope vBRIEFs + PROJECT-DEFINITION and leaves a redirect stub at root if needed).
|
|
78
78
|
|
|
79
|
+
### Greenfield spec export (#2013 / #1502)
|
|
80
|
+
|
|
81
|
+
Greenfield projects (no `vbrief/specification.vbrief.json`) export stakeholder-facing spec text via `task project:export-spec`:
|
|
82
|
+
|
|
83
|
+
- ! Source of truth: `vbrief/PROJECT-DEFINITION.vbrief.json` product narratives + lifecycle scope bodies (never the legacy singular spec file).
|
|
84
|
+
- ! Default audience is **stakeholder** — proposed scopes are omitted; only pending/active/completed scopes appear under `## Scope outlook`.
|
|
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
|
+
- ! 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
|
+
- ~ Legacy migrated trees with `vbrief/specification.vbrief.json` MAY continue using `task spec:render` until fully cut over.
|
|
88
|
+
- ⊗ Invoke `task spec:render` on a greenfield tree that lacks `specification.vbrief.json` — use `task project:export-spec` instead.
|
|
89
|
+
|
|
79
90
|
### plan.vbrief.json and continue.vbrief.json
|
|
80
91
|
- Session/tactical state files are permitted at vbrief/ 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.
|
|
81
92
|
|
|
@@ -85,7 +96,7 @@ All five lifecycle folders MUST be present (even if empty). This is the cutover
|
|
|
85
96
|
|--------------|------------------|-------------------------------|-------------------------------|-----------------------------------------|-----------------------------|----------------------------------------|
|
|
86
97
|
| interview | spec-generating | Yes | Yes (narratives + items) | proposed/YYYY-MM-DD-*.vbrief.json only | Never (post-migration) | Omit or deprecation redirect only |
|
|
87
98
|
| yolo | spec-generating | Yes | Yes | proposed/YYYY-MM-DD-*.vbrief.json only | Never | Omit or deprecation redirect only |
|
|
88
|
-
| speckit | spec-generating | Yes | Yes (Phase 1+) | proposed/YYYY-MM-DD-*.vbrief.json only (phases + stories) | Never | Omit (
|
|
99
|
+
| speckit | spec-generating | Yes | Yes (Phase 1+) | proposed/YYYY-MM-DD-*.vbrief.json only (phases + stories) | Never | Omit or `task project:export-spec` (legacy: `task spec:render` on migrated trees) |
|
|
89
100
|
| rapid | spec-generating | Yes | Yes | proposed/YYYY-MM-DD-*.vbrief.json only | Never | Omit or deprecation redirect only |
|
|
90
101
|
| enterprise | spec-generating | Yes | Yes | proposed/YYYY-MM-DD-*.vbrief.json only | Never | Omit or deprecation redirect only |
|
|
91
102
|
| preparatory (research, discuss, map, etc.) | preparatory | Yes (if first touch) | No (unless also spec path) | proposed/YYYY-MM-DD-*.vbrief.json (context/decision vBRIEFs) | N/A | N/A (preparatory only) |
|
package/tasks/project.yml
CHANGED
|
@@ -41,3 +41,13 @@ tasks:
|
|
|
41
41
|
- _ts-build
|
|
42
42
|
cmds:
|
|
43
43
|
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" project-render --acknowledge-staleness "{{.USER_WORKING_DIR}}/vbrief"
|
|
44
|
+
|
|
45
|
+
export-spec:
|
|
46
|
+
desc: >-
|
|
47
|
+
Export SPECIFICATION.md from PROJECT-DEFINITION (+ lifecycle scopes).
|
|
48
|
+
Use --audience=internal to include proposed scopes (#2013 / #1502).
|
|
49
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
50
|
+
deps:
|
|
51
|
+
- _ts-build
|
|
52
|
+
cmds:
|
|
53
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" export-spec {{.CLI_ARGS}}
|
|
@@ -134,7 +134,7 @@ Three consumer-facing surfaces enforce the branch-policy contract (#746 / #747):
|
|
|
134
134
|
|
|
135
135
|
- `deft check` -- authoritative consumer pre-commit quality gate. In vendored `.deft/core` installs it runs consumer-safe Deft install/lifecycle gates and does NOT run framework source-repo self-tests. Run `deft check:framework-source` only when explicitly validating the vendored framework payload itself (#1519).
|
|
136
136
|
- `deft verify:branch` -- branch gate wired into the `deft check` aggregate; refuses a commit on the default branch unless `plan.policy.allowDirectCommitsToMaster = true` (typed) or `DEFT_ALLOW_DEFAULT_BRANCH_COMMIT=1` is set.
|
|
137
|
-
- `.githooks/pre-commit` / `pre-push` -- local hooks installed via `deft setup`; verify via `deft verify:hooks-installed`.
|
|
137
|
+
- `.githooks/pre-commit` / `pre-push` -- local hooks installed via `deft setup`; verify via `deft verify:hooks-installed`. After a framework upgrade, run `deft update` to refresh hook templates to the current TS-native `deft verify:*` / `deft preflight-gh` wiring (#2049).
|
|
138
138
|
- `deft policy:show --field=allowDirectCommitsToMaster` -- inspect the resolved policy; `deft policy:allow-direct-commits -- --confirm` writes the typed override with an audit row.
|
|
139
139
|
|
|
140
140
|
## Branch Policy Disclosure (#746)
|