@deftai/directive-content 0.64.0 → 0.66.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/_deft-run.sh +14 -0
- package/.githooks/pre-commit +9 -10
- package/.githooks/pre-push +4 -7
- package/QUICK-START.md +8 -4
- package/Taskfile.yml +32 -14
- package/UPGRADING.md +40 -0
- package/commands.md +46 -41
- package/conventions/rule-ownership.json +1 -1
- package/docs/BROWNFIELD.md +37 -33
- package/docs/directive-lifecycle.md +2 -2
- package/docs/getting-started.md +8 -8
- package/package.json +1 -1
- package/packs/skills/skills-pack-0.1.json +28 -28
- package/skills/deft-directive-article-review/SKILL.md +4 -4
- package/skills/deft-directive-build/SKILL.md +37 -37
- package/skills/deft-directive-cost/SKILL.md +6 -6
- package/skills/deft-directive-debug/SKILL.md +4 -4
- package/skills/deft-directive-decompose/SKILL.md +15 -15
- package/skills/deft-directive-gh-arch/SKILL.md +3 -3
- package/skills/deft-directive-gh-slice/SKILL.md +2 -2
- package/skills/deft-directive-interview/SKILL.md +12 -12
- package/skills/deft-directive-pre-pr/SKILL.md +3 -3
- package/skills/deft-directive-probe/SKILL.md +9 -9
- package/skills/deft-directive-refinement/SKILL.md +65 -65
- package/skills/deft-directive-release/SKILL.md +3 -3
- package/skills/deft-directive-review-cycle/SKILL.md +4 -4
- package/skills/deft-directive-setup/SKILL.md +71 -71
- package/skills/deft-directive-swarm/SKILL.md +94 -94
- package/skills/deft-directive-sync/SKILL.md +55 -55
- package/skills/deft-directive-triage/SKILL.md +15 -15
- package/tasks/architecture.yml +3 -1
- package/tasks/cache.yml +20 -10
- package/tasks/capacity.yml +8 -4
- package/tasks/change.yml +8 -10
- package/tasks/changelog.yml +3 -1
- package/tasks/codebase.yml +20 -10
- package/tasks/commit.yml +4 -8
- package/tasks/engine.yml +16 -4
- package/tasks/install.yml +4 -8
- package/tasks/issue.yml +8 -10
- package/tasks/migrate.yml +24 -8
- package/tasks/packs.yml +32 -16
- package/tasks/policy.yml +24 -12
- package/tasks/pr.yml +16 -8
- package/tasks/prd.yml +9 -12
- package/tasks/project.yml +14 -14
- package/tasks/reconcile.yml +4 -8
- package/tasks/roadmap.yml +9 -5
- package/tasks/scm.yml +36 -18
- package/tasks/scope-undo.yml +3 -1
- package/tasks/scope.yml +40 -26
- package/tasks/session.yml +4 -2
- package/tasks/slice.yml +8 -10
- package/tasks/spec.yml +10 -12
- package/tasks/swarm.yml +20 -10
- package/tasks/triage-actions.yml +32 -16
- package/tasks/triage-bootstrap.yml +4 -2
- package/tasks/triage-bulk.yml +20 -10
- package/tasks/triage-classify.yml +4 -2
- package/tasks/triage-queue.yml +12 -6
- package/tasks/triage-reconcile.yml +4 -2
- package/tasks/triage-scope-drift.yml +4 -2
- package/tasks/triage-scope.yml +4 -2
- package/tasks/triage-smoketest.yml +4 -2
- package/tasks/triage-subscribe.yml +8 -4
- package/tasks/triage-summary.yml +4 -2
- package/tasks/triage-welcome.yml +4 -2
- package/tasks/ts.yml +3 -1
- package/tasks/umbrella.yml +1 -7
- package/tasks/vbrief.yml +25 -17
- package/tasks/verify.yml +107 -48
- package/templates/agent-prompt-preamble.md +16 -16
- package/templates/agents-entry.md +23 -19
- package/vbrief/conformance/extensions/valid/extension-at-root.vbrief.json +31 -0
- package/vbrief/conformance/extensions/valid/nested-extension-value.vbrief.json +19 -0
- package/vbrief/schemas/xbrief-core-0.8.schema.json +786 -0
package/docs/BROWNFIELD.md
CHANGED
|
@@ -53,7 +53,7 @@ git clone https://github.com/deftai/directive.git deft
|
|
|
53
53
|
|
|
54
54
|
## 2. Migrate Existing Docs (frozen-release path, #2068)
|
|
55
55
|
|
|
56
|
-
If your project already contains authoritative root `SPECIFICATION.md`, `PROJECT.md`, or incomplete
|
|
56
|
+
If your project already contains authoritative root `SPECIFICATION.md`, `PROJECT.md`, or incomplete xBRIEF lifecycle folders, **current npm releases no longer ship the in-product migrator**. Pin framework **v0.59.0**, install Python 3.11+ and `uv`, then run the one-shot migration from that payload:
|
|
57
57
|
|
|
58
58
|
```bash
|
|
59
59
|
task migrate:preflight
|
|
@@ -67,42 +67,42 @@ The migration is **idempotent** on the pinned release — safe to re-run on a pa
|
|
|
67
67
|
|
|
68
68
|
### What migration does
|
|
69
69
|
|
|
70
|
-
1. **Parses** existing `specification.
|
|
71
|
-
2. **Creates** the five lifecycle folders: `
|
|
72
|
-
3. **Converts** `ROADMAP.md` items into individual `pending/` scope
|
|
73
|
-
4. **Replaces** `SPECIFICATION.md` and `PROJECT.md` with deprecation redirect stubs containing `<!-- deft:deprecated-redirect -->` -- the sentinel that tells future `
|
|
74
|
-
5. **Preserves** user-customized content it cannot parse: anything non-standard in `PROJECT.md` is stored in a `ProjectConfig` narrative on `PROJECT-DEFINITION.
|
|
70
|
+
1. **Parses** existing `specification.xbrief.json` (if present) + `PROJECT.md` and generates `xbrief/PROJECT-DEFINITION.xbrief.json` with a `narratives` map (project identity) and an `items` registry (scope).
|
|
71
|
+
2. **Creates** the five lifecycle folders: `xbrief/proposed/`, `xbrief/pending/`, `xbrief/active/`, `xbrief/completed/`, `xbrief/cancelled/`.
|
|
72
|
+
3. **Converts** `ROADMAP.md` items into individual `pending/` scope xBRIEFs with origin provenance (`references` array pointing back to GitHub issue numbers, if available).
|
|
73
|
+
4. **Replaces** `SPECIFICATION.md` and `PROJECT.md` with deprecation redirect stubs containing `<!-- deft:deprecated-redirect -->` -- the sentinel that tells future `deft xbrief:validate` runs these files are no longer authoritative.
|
|
74
|
+
5. **Preserves** user-customized content it cannot parse: anything non-standard in `PROJECT.md` is stored in a `ProjectConfig` narrative on `PROJECT-DEFINITION.xbrief.json` instead of being discarded.
|
|
75
75
|
|
|
76
76
|
### Preserving existing spec content (#397 ingestion)
|
|
77
77
|
|
|
78
78
|
`task migrate:vbrief` also reads structured `## ` sections from `PRD.md` and `SPECIFICATION.md` (Problem Statement, Goals, User Stories, Requirements, Success Metrics, Non-Functional Requirements, Open Questions) and maps them to canonical narrative keys on `vbrief/specification.vbrief.json`. Existing keys are never overwritten.
|
|
79
79
|
|
|
80
|
-
- ~ Review the generated `
|
|
80
|
+
- ~ Review the generated `xbrief/specification.xbrief.json` after migration; fill in any narrative the parser could not map.
|
|
81
81
|
- ~ If the parser missed content you care about, copy it into the appropriate narrative before deleting the old file backup.
|
|
82
82
|
|
|
83
83
|
---
|
|
84
84
|
|
|
85
85
|
## 3. What Changes After Migration
|
|
86
86
|
|
|
87
|
-
### Source of truth: `.
|
|
87
|
+
### Source of truth: `.xbrief.json` files
|
|
88
88
|
|
|
89
|
-
- `
|
|
90
|
-
- `
|
|
91
|
-
- Individual units of work live in `
|
|
89
|
+
- `xbrief/PROJECT-DEFINITION.xbrief.json` replaces `PROJECT.md` as the project identity gestalt (tech stack, strategy, coverage, architecture, branching convention).
|
|
90
|
+
- `xbrief/specification.xbrief.json` replaces `SPECIFICATION.md` as the project spec source of truth.
|
|
91
|
+
- Individual units of work live in `xbrief/{proposed,pending,active,completed,cancelled}/` as `YYYY-MM-DD-<slug>.xbrief.json`.
|
|
92
92
|
|
|
93
93
|
### Rendered views: `.md` artifacts
|
|
94
94
|
|
|
95
95
|
`.md` files like `PRD.md`, `SPECIFICATION.md`, and `ROADMAP.md` become **rendered views**, generated on demand:
|
|
96
96
|
|
|
97
97
|
```bash
|
|
98
|
-
task spec:render #
|
|
99
|
-
task prd:render #
|
|
100
|
-
task roadmap:render #
|
|
101
|
-
task project:render # lifecycle folders -> PROJECT-DEFINITION.
|
|
98
|
+
task spec:render # xbrief/specification.xbrief.json -> SPECIFICATION.md
|
|
99
|
+
task prd:render # xbrief/specification.xbrief.json narratives -> PRD.md
|
|
100
|
+
task roadmap:render # xbrief/pending/ scope xBRIEFs -> ROADMAP.md
|
|
101
|
+
task project:render # lifecycle folders -> PROJECT-DEFINITION.xbrief.json items registry
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
- ⊗ Edit the rendered `.md` files directly -- your changes are overwritten on the next `task *:render` run.
|
|
105
|
-
- ! Edit the underlying `.
|
|
105
|
+
- ! Edit the underlying `.xbrief.json` instead, then run `task *:render` to refresh the export.
|
|
106
106
|
- ~ `task spec:render` and `task prd:render` are also invoked automatically by `skills/deft-directive-pre-pr/SKILL.md` Phase 3b if the export files already exist.
|
|
107
107
|
|
|
108
108
|
### Deprecation sentinels
|
|
@@ -113,11 +113,11 @@ After migration, the root `SPECIFICATION.md` and `PROJECT.md` contain a redirect
|
|
|
113
113
|
<!-- deft:deprecated-redirect -->
|
|
114
114
|
# PROJECT.md -- DEPRECATED
|
|
115
115
|
|
|
116
|
-
This file has been migrated to `
|
|
116
|
+
This file has been migrated to `xbrief/PROJECT-DEFINITION.xbrief.json`.
|
|
117
117
|
|
|
118
118
|
**See instead:**
|
|
119
|
-
- `
|
|
120
|
-
- scope
|
|
119
|
+
- `xbrief/PROJECT-DEFINITION.xbrief.json` (project identity)
|
|
120
|
+
- scope xBRIEFs in `xbrief/{proposed,pending,active,completed,cancelled}/`
|
|
121
121
|
```
|
|
122
122
|
|
|
123
123
|
(The actual generated body may include additional context; the sentinel comment on line 1 is what the validator enforces.)
|
|
@@ -134,41 +134,41 @@ On first interactive session after adding Deft, the agent-driven path runs a **p
|
|
|
134
134
|
|
|
135
135
|
1. `SPECIFICATION.md` exists and does **not** contain `<!-- deft:deprecated-redirect -->`.
|
|
136
136
|
2. `PROJECT.md` exists and does **not** contain `<!-- deft:deprecated-redirect -->`.
|
|
137
|
-
3. `
|
|
137
|
+
3. `xbrief/specification.xbrief.json` exists but the lifecycle folders (`proposed/`, `pending/`, `active/`, `completed/`, `cancelled/`) do **not**.
|
|
138
138
|
|
|
139
|
-
**Action on detection:** the agent stops with an actionable message such as "Run `task migrate:vbrief` to upgrade to the
|
|
139
|
+
**Action on detection:** the agent stops with an actionable message such as "Run `task migrate:vbrief` on pinned v0.59.0 to upgrade to the xBRIEF-centric model (see UPGRADING.md § Frozen pre-v0.20 document-model migration)."
|
|
140
140
|
|
|
141
141
|
### CLI path (`.deft/core/run`)
|
|
142
142
|
|
|
143
|
-
The CLI has a companion non-fatal upgrade gate (issue #410): `.deft/core/run` warns on every invocation when `
|
|
143
|
+
The CLI has a companion non-fatal upgrade gate (issue #410): `.deft/core/run` warns on every invocation when `xbrief/.deft-version` does not match the framework `VERSION`, or when legacy artifacts are found without the sentinel. Interactive sessions get a `Continue anyway? [y/N]` prompt; non-interactive sessions (CI, cloud agents) warn once and continue so CI is never blocked.
|
|
144
144
|
|
|
145
145
|
After completing migration, record the framework version so the CLI gate stays silent:
|
|
146
146
|
|
|
147
147
|
```bash
|
|
148
|
-
.deft/core/run upgrade # writes
|
|
148
|
+
.deft/core/run upgrade # writes xbrief/.deft-version = <current VERSION>
|
|
149
149
|
```
|
|
150
150
|
|
|
151
151
|
---
|
|
152
152
|
|
|
153
153
|
## 5. Post-Migration Checklist
|
|
154
154
|
|
|
155
|
-
Run these in order once `task migrate:vbrief`
|
|
155
|
+
Run these in order once pre-v0.20 migration completes on v0.59.0 (`task migrate:vbrief`), you have upgraded to current npm, and — if `deft doctor` still reports a legacy `vbrief/` layout — `deft migrate:xbrief` has converted the tree to `xbrief/`:
|
|
156
156
|
|
|
157
|
-
1. ! `
|
|
158
|
-
2. ! `task check` -- the full pre-commit pipeline (fmt + lint + typecheck + tests + coverage +
|
|
159
|
-
3. ~ `task project:render` -- regenerate `
|
|
157
|
+
1. ! `deft xbrief:validate` -- should report zero errors and zero warnings about `SPECIFICATION.md` / `PROJECT.md`. Deprecation-sentinel warnings from `scripts/vbrief_validate.py` fire when the sentinel is **missing** from those files -- if you see them, the redirect stubs were not written correctly and the migration is incomplete; re-run `task migrate:vbrief` on v0.59.0 or patch the stubs to include the `<!-- deft:deprecated-redirect -->` line.
|
|
158
|
+
2. ! `task check` -- the full pre-commit pipeline (fmt + lint + typecheck + tests + coverage + xbrief validation + link check). Must be green before your first Deft-aware commit.
|
|
159
|
+
3. ~ `task project:render` -- regenerate `xbrief/PROJECT-DEFINITION.xbrief.json` items registry to reflect the newly-migrated scopes.
|
|
160
160
|
4. ~ `task roadmap:render` and `task spec:render` -- refresh the rendered views so teammates browsing the repo see current content.
|
|
161
|
-
5. ~ Review the generated `
|
|
162
|
-
6. ~ Commit the migration in a focused PR with a conventional-commit subject such as `chore(deft): migrate to
|
|
161
|
+
5. ~ Review the generated `xbrief/proposed/` and `xbrief/pending/` scope xBRIEFs; promote / activate / cancel them as appropriate via `task scope:promote|activate|complete|cancel|restore|block|unblock`.
|
|
162
|
+
6. ~ Commit the migration in a focused PR with a conventional-commit subject such as `chore(deft): migrate to xBRIEF-centric document model (v0.20)`.
|
|
163
163
|
|
|
164
164
|
---
|
|
165
165
|
|
|
166
166
|
## 6. Troubleshooting
|
|
167
167
|
|
|
168
|
-
- **`
|
|
169
|
-
- **`task migrate:vbrief` did not migrate my roadmap:** the migration parser recognises task-based (`- \`X.Y.Z\` Title`) and plain (`- Title`) list item formats under `## ` headings. Custom formats fall through to synthetic IDs -- review the generated
|
|
168
|
+
- **`deft xbrief:validate` fails on my scope xBRIEFs:** filename must follow `YYYY-MM-DD-<lowercase-slug>.xbrief.json` (D7); folder must match `plan.status` (D2); PROJECT-DEFINITION must have `overview` and `tech stack` narrative keys after `.lower()` (D3).
|
|
169
|
+
- **`task migrate:vbrief` did not migrate my roadmap:** the migration parser recognises task-based (`- \`X.Y.Z\` Title`) and plain (`- Title`) list item formats under `## ` headings. Custom formats fall through to synthetic IDs -- review the generated xBRIEFs and rename / reshape as needed.
|
|
170
170
|
- **My agent hits a missing `deft/skills/deft-*/` path:** that is a stale v0.19 `AGENTS.md` from before the `deft-directive-*` rename. Tell your agent "Read `deft/QUICK-START.md` and follow it" -- QUICK-START refreshes the Deft-managed section of `AGENTS.md` idempotently. See `UPGRADING.md` (present in repositories on v0.20 or later) for the detailed upgrade flow.
|
|
171
|
-
- **I edited `SPECIFICATION.md` by accident:** revert the file to the redirect stub (`<!-- deft:deprecated-redirect -->` + the three-line note), then edit `
|
|
171
|
+
- **I edited `SPECIFICATION.md` by accident:** revert the file to the redirect stub (`<!-- deft:deprecated-redirect -->` + the three-line note), then edit `xbrief/specification.xbrief.json` and run `task spec:render`.
|
|
172
172
|
|
|
173
173
|
---
|
|
174
174
|
|
|
@@ -176,8 +176,12 @@ Run these in order once `task migrate:vbrief` completes:
|
|
|
176
176
|
|
|
177
177
|
- [README.md](../../README.md) -- product overview and greenfield flow.
|
|
178
178
|
- [QUICK-START.md](../QUICK-START.md) -- agent bootstrap (also handles the brownfield AGENTS.md append case).
|
|
179
|
-
- [vbrief/vbrief.md](../vbrief/vbrief.md) -- canonical
|
|
179
|
+
- [vbrief/vbrief.md](../vbrief/vbrief.md) -- canonical xBRIEF file taxonomy, lifecycle folders, and status mapping.
|
|
180
180
|
- [commands.md](../commands.md) -- full `run` vs `task` command lifecycle.
|
|
181
181
|
- `skills/deft-directive-build/SKILL.md` -- Pre-Cutover Detection Guard implementation.
|
|
182
182
|
- `skills/deft-directive-setup/SKILL.md` -- greenfield path for comparison.
|
|
183
183
|
- `UPGRADING.md` (repo root, v0.20+) -- version-by-version upgrade guide.
|
|
184
|
+
|
|
185
|
+
<!-- xbrief-backcompat-2111 -->
|
|
186
|
+
|
|
187
|
+
> **xBRIEF rename (#2034 / #2110):** Projects still on the legacy `vbrief/` layout and `x-vbrief/` reference tokens remain read-accepted until you run `deft migrate:xbrief` (or `task migrate:xbrief`). `deft doctor` and `deft update` signpost unmigrated layouts.
|
|
@@ -21,7 +21,7 @@ pipeline; it is two connected phases that loop.
|
|
|
21
21
|
A project starts with a **Concept**. That concept passes through **Strategy Analysis** — an
|
|
22
22
|
iterative loop of *looking* at the terrain and *deep thinking* about the approach — until it
|
|
23
23
|
produces a **Specification + Artifacts** (the project definition and the first proposed scope
|
|
24
|
-
|
|
24
|
+
xBRIEFs).
|
|
25
25
|
|
|
26
26
|
Strategy analysis is deliberately a loop, not a step: you can map, then probe, then discuss,
|
|
27
27
|
then map again before the spec stabilizes. It is also re-entered later "as needed" when a piece
|
|
@@ -56,7 +56,7 @@ framework:
|
|
|
56
56
|
| **Look** | Mapping and exploring the terrain — [`strategies/map.md`](../strategies/map.md) (`/deft:run:map`), codebase structure. |
|
|
57
57
|
| **Deep Think** | Adversarial / alignment analysis — [`strategies/probe.md`](../strategies/probe.md), [`strategies/discuss.md`](../strategies/discuss.md), [`strategies/research.md`](../strategies/research.md), and `deft-directive-gh-arch`. |
|
|
58
58
|
| **Strategy Analysis** | The preparatory strategies cycling through the [strategy chaining gate](../strategies/README.md) before spec generation. |
|
|
59
|
-
| **Spec / Specification + Artifacts** | Output of the spec-generating strategies (interview, speckit, …): `
|
|
59
|
+
| **Spec / Specification + Artifacts** | Output of the spec-generating strategies (interview, speckit, …): `xbrief/PROJECT-DEFINITION.xbrief.json` plus dated `xbrief/proposed/` scope xBRIEFs. |
|
|
60
60
|
| **Resume / Session Start** | The session-start ritual — `task session:start` and the `task triage:welcome` "what's next" one-liner. |
|
|
61
61
|
| **Triage + Refine/Rethink** | The triage cache and refinement loop — `task triage:*`, [`deft-directive-triage`](../skills/deft-directive-triage/SKILL.md), [`deft-directive-refinement`](../skills/deft-directive-refinement/SKILL.md). "Rethink" = escalate back to Strategy Analysis. |
|
|
62
62
|
| **Slice** | Vertical-slice decomposition — [`deft-directive-gh-slice`](../skills/deft-directive-gh-slice/SKILL.md) and [`deft-directive-decompose`](../skills/deft-directive-decompose/SKILL.md). |
|
package/docs/getting-started.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Getting Started with Deft Directive
|
|
2
2
|
|
|
3
|
-
Deft Directive is a Taskfile-first framework for AI-assisted software work. It combines agent guidance, deterministic gates,
|
|
3
|
+
Deft Directive is a Taskfile-first framework for AI-assisted software work. It combines agent guidance, deterministic gates, xBRIEF lifecycle metadata, installer/doctor handoff, and cache-backed backlog workflows. This guide walks through installation, preferences, project setup, and the first scope workflow.
|
|
4
4
|
|
|
5
5
|
> **Note**: This guide is an orientation layer. For a single-picture mental model of how Directive turns an idea into shipped work, see [the Directive lifecycle](./directive-lifecycle.md); for command behavior, see [commands.md](../commands.md); for current architecture details, see [ARCHITECTURE.md](../../docs/ARCHITECTURE.md).
|
|
6
6
|
|
|
@@ -62,7 +62,7 @@ deft-install --yes --upgrade --repo-root . --json
|
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
Those consumer flows intentionally project Deft-managed files into your project
|
|
65
|
-
root (`AGENTS.md`, skills pointers, gitignore entries,
|
|
65
|
+
root (`AGENTS.md`, skills pointers, gitignore entries, xbrief scaffolding, and
|
|
66
66
|
related guard configuration). Framework maintainers working inside a
|
|
67
67
|
`deftai/directive` checkout should instead follow
|
|
68
68
|
[`CONTRIBUTING.md`](../../CONTRIBUTING.md) and use `--maintainer`; maintainer setup
|
|
@@ -78,7 +78,7 @@ checks tools without rewriting consumer-managed files.
|
|
|
78
78
|
|
|
79
79
|
## Working an existing backlog
|
|
80
80
|
|
|
81
|
-
If you are adopting Deft on a project that already has an issue tracker (existing repo, brownfield migration, an upstream bug list that has been accumulating), you do not have to start from an empty `
|
|
81
|
+
If you are adopting Deft on a project that already has an issue tracker (existing repo, brownfield migration, an upstream bug list that has been accumulating), you do not have to start from an empty `xbrief/proposed/`. The refinement skill's **Phase 0 triage workflow** lets you walk an existing backlog locally, decide what to keep, and let only the **accepted** items land in `xbrief/proposed/`. Trigger words: **"triage"**, **"work the cache"**, **"pre-ingest"**, **"action menu"**.
|
|
82
82
|
|
|
83
83
|
### Step 1 — Scoped first populate
|
|
84
84
|
|
|
@@ -103,7 +103,7 @@ The unbounded no-flag form remains the default for small backlogs. For real-size
|
|
|
103
103
|
After the cache is populated, ask your agent to triage. For each cached candidate the agent presents a numbered action menu and waits for your decision:
|
|
104
104
|
|
|
105
105
|
```
|
|
106
|
-
1. Accept -- task triage:accept <issue> (writes proposed/
|
|
106
|
+
1. Accept -- task triage:accept <issue> (writes proposed/ xBRIEF + audit-log entry)
|
|
107
107
|
2. Reject -- task triage:reject <issue> (audit-log entry only; closes the upstream issue)
|
|
108
108
|
3. Defer -- task triage:defer <issue> (non-terminal; resurfaces on the next pass)
|
|
109
109
|
4. Needs-AC -- task triage:needs-ac <issue> (non-terminal; flags missing acceptance criteria)
|
|
@@ -112,19 +112,19 @@ After the cache is populated, ask your agent to triage. For each cached candidat
|
|
|
112
112
|
7. Back
|
|
113
113
|
```
|
|
114
114
|
|
|
115
|
-
Only **accepted** items become scope
|
|
115
|
+
Only **accepted** items become scope xBRIEFs in `xbrief/proposed/`. Rejected, deferred, and duplicate decisions are recorded in the audit log so the backlog stays focused. Bulk verbs (`task triage:bulk-accept` / `bulk-reject` / `bulk-defer` / `bulk-needs-ac`) handle predictable patterns (e.g. "reject every `wontfix`-labelled candidate") without walking the menu N times.
|
|
116
116
|
|
|
117
117
|
### Step 3 — Understand the three-tier model
|
|
118
118
|
|
|
119
119
|
Phase 0 reads and writes three distinct stores; they never collapse into one:
|
|
120
120
|
|
|
121
121
|
- **Cache** — `.deft-cache/github-issue/<owner>/<repo>/<N>/` is the local mirror of fetched issue bodies, labels, and state. Populated by `task cache:fetch-all`; read via `task cache:get -- github-issue OWNER/NAME/<N>`. The directory is gitignored — your local mirror is private to your machine. The cache is the **read** surface for triage so decisions are reproducible across re-runs (no live `gh issue view` per decision).
|
|
122
|
-
- **Audit log** — `
|
|
123
|
-
- **Accepted backlog** — `
|
|
122
|
+
- **Audit log** — `xbrief/.eval/candidates.jsonl` is an append-only JSONL recording every candidate you have ever seen plus the action taken (`accept | reject | defer | needs-ac | mark-duplicate`) and a timestamp. Re-running triage against the same cache short-circuits items that already have a terminal entry, so deferred / Needs-AC items resurface and rejected ones do not.
|
|
123
|
+
- **Accepted backlog** — `xbrief/proposed/` is the standard scope-xBRIEF lifecycle folder. **Writes flow only through `task triage:accept`**, which delegates the actual xBRIEF authoring to `task issue:ingest` so slug, reference, and schema rules stay in one place. Hand-authored proposed/ xBRIEFs are still allowed; what changed is that triage no longer writes there silently.
|
|
124
124
|
|
|
125
125
|
### Step 4 — Why this avoids the GraphQL drain
|
|
126
126
|
|
|
127
|
-
The shared GitHub GraphQL bucket (5000 points/hour per identity) is the operational bottleneck under multi-agent / shared-identity workflows, not the REST `core` bucket. The triage cache is **REST-backed** (`gh api` reads, not `gh issue view --json`), and the populate uses **batched delays** plus automatic 429 retries with the upstream `Retry-After` header. There is no live `gh issue view` per accept / reject / defer decision — every decision reads from the local cache. This is why the scoped flags exist: they let you keep the populate inside the REST budget and well clear of the GraphQL bottleneck (see [#976](https://github.com/deftai/directive/issues/976) for the recurrence pattern). Refresh the cache on demand with `task cache:fetch-all` (idempotent — fresh entries are skipped) or audit drift against `
|
|
127
|
+
The shared GitHub GraphQL bucket (5000 points/hour per identity) is the operational bottleneck under multi-agent / shared-identity workflows, not the REST `core` bucket. The triage cache is **REST-backed** (`gh api` reads, not `gh issue view --json`), and the populate uses **batched delays** plus automatic 429 retries with the upstream `Retry-After` header. There is no live `gh issue view` per accept / reject / defer decision — every decision reads from the local cache. This is why the scoped flags exist: they let you keep the populate inside the REST budget and well clear of the GraphQL bottleneck (see [#976](https://github.com/deftai/directive/issues/976) for the recurrence pattern). Refresh the cache on demand with `task cache:fetch-all` (idempotent — fresh entries are skipped) or audit drift against `xbrief/active/*.xbrief.json` with `task triage:refresh-active`.
|
|
128
128
|
|
|
129
129
|
Full command reference for every triage and cache verb lives in [`commands.md` § Backlog triage & cache tasks](../commands.md#backlog-triage--cache-tasks); the canonical agent-facing description of the workflow lives in `skills/deft-directive-refinement/SKILL.md` Phase 0.
|
|
130
130
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deftai/directive-content",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.66.0",
|
|
4
4
|
"description": "Shippable Directive framework content in the consumer .deft/core/ layout (C1 flatten), plus the engine surfaces (.githooks/, Taskfile.yml, tasks/) the deposit wires. Python-free per #2022 Phase 3. Refs #11, #1669, #1967.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|