@deftai/directive-content 0.110.0 → 0.112.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/QUICK-START.md +16 -14
- package/SKILL.md +13 -13
- package/Taskfile.yml +20 -15
- package/UPGRADING.md +64 -24
- package/commands.md +20 -18
- package/contracts/design-critique.md +36 -13
- package/conventions/machine-generated-banner.md +9 -9
- package/conventions/rule-ownership.json +3 -3
- package/docs/SUPPORT.md +43 -0
- package/docs/capabilities.md +110 -0
- package/docs/capability-overlay.json +197 -0
- package/docs/getting-started.md +131 -49
- package/docs/scope-provenance.md +2 -0
- package/main.md +22 -22
- package/package.json +1 -1
- package/packs/rules/rules-pack-0.1.json +1 -1
- package/packs/skills/skills-pack-0.1.json +9 -7
- package/scm/github.md +2 -0
- package/skills/deft-directive-design-critique/SKILL.md +10 -4
- package/skills/deft-directive-release/SKILL.md +22 -17
- package/skills/deft-directive-review-cycle/SKILL.md +52 -15
- package/skills/deft-directive-swarm/SKILL.md +8 -4
- package/skills/deft-directive-swarm/references/core-ops.md +1 -0
- package/skills/deft-directive-swarm/references/core-phase-0.md +2 -1
- package/skills/deft-directive-swarm/references/core-phase-3.md +8 -5
- package/skills/deft-directive-swarm/references/host-claude-code.md +3 -2
- package/skills/deft-directive-swarm/references/host-grok-build.md +19 -3
- package/skills/deft-directive-swarm/references/host-grokbot.md +151 -0
- package/tasks/docs.yml +19 -0
- package/tasks/migrate.yml +3 -1
- package/tasks/policy.yml +2 -2
- package/tasks/scm.yml +12 -1
- package/tasks/scope.yml +16 -25
- package/tasks/triage-actions.yml +3 -4
- package/tasks/triage-bootstrap.yml +2 -2
- package/tasks/triage-bulk.yml +6 -7
- package/tasks/triage-classify.yml +2 -2
- package/tasks/triage-queue.yml +2 -2
- package/tasks/triage-reconcile.yml +2 -2
- package/tasks/triage-scope-drift.yml +2 -2
- package/tasks/triage-scope.yml +2 -2
- package/tasks/triage-smoketest.yml +3 -3
- package/tasks/triage-subscribe.yml +2 -2
- package/tasks/triage-summary.yml +2 -2
- package/tasks/triage-welcome.yml +2 -2
- package/tasks/verify.yml +30 -1
- package/templates/PULL_REQUEST_TEMPLATE.md +12 -0
- package/templates/agent-prompt-preamble.md +6 -3
- package/templates/agents-entry.md +5 -5
- package/templates/design-critique-brief.md +2 -0
|
@@ -25,7 +25,7 @@ Boundaries are read off the machinery in this document, not asserted here.
|
|
|
25
25
|
- Rounds accumulate inside one arc. The auto-stamp denominator is scoped to critic posts in this arc and keeps a Stop 4 retry's post, so a retry continues the arc it retries.
|
|
26
26
|
- Same-round siblings share one ceiling and one panel-deposit. A panel is one round, not N arcs.
|
|
27
27
|
- The arc stays open through the operator-gated loop until a verified synthesis is accepted, or until the halt line. Successor leans are moves inside that loop, so revising a lean before bind is not a boundary.
|
|
28
|
-
- A **recut** opens the next arc, and only after bind: it re-applies `design-critique:mechanism-shaped`, drops `design-critique:triage-ready`, and its new lean is not cleared by the older completed-arc record. That is a post-bind target revision.
|
|
28
|
+
- A **recut** opens the next arc, and only after bind: it re-applies `design-critique:mechanism-shaped`, drops `design-critique:triage-ready` and `design-critique:recut-needed`, and its new lean is not cleared by the older completed-arc record. That is a post-bind target revision.
|
|
29
29
|
|
|
30
30
|
- ! Read `arc` in this document as that unit.
|
|
31
31
|
- ⊗ Read a new ceiling, a new round, or a pre-bind lean revision as a new arc.
|
|
@@ -47,6 +47,23 @@ The Stop 1 write-back records `refutation-target:` naming the triage author's hi
|
|
|
47
47
|
|
|
48
48
|
`verify:judgment-gates --enforce` stays opt-in unused in this rollout. Advisory observe first. No marker means the gate never fires. Voluntary critiques stay legal.
|
|
49
49
|
|
|
50
|
+
### Run posture (#4072)
|
|
51
|
+
|
|
52
|
+
The front door is a session-local run-posture field, not a second ingest switch and not a third occupancy concept. Occupancy mechanics stay on #4020. Cite that rule; do not clone it.
|
|
53
|
+
|
|
54
|
+
Closed tokens on the operator utterance: `direct`, `directly`, `forge-only`, `github-only`, `github only`, `on github`, `no worktrees` for direct; `checkout` for the mutating checkout path. `parseOperatorRunPosture` (`packages/core/src/design-critique/run-posture.ts`) matches those tokens with word boundaries. `on github` is a location synonym at this Stop 1 front door: `file an issue on github` and `the comments live on github` resolve `direct`. Missing token, including `arc <N> yolo`, asks before Stop 1. Yolo does not pick a mode. `ingest` is not a front-door mode; that token asks. On grok-bot detect, a missing-token ask resolves to `arc-mode:direct` unless checkout tokens already won. `resolveArcRunPostureForHost` consumes `parseOperatorRunPosture`; do not clone the parser. ⊗ Substring or NLP classification. ⊗ Front-door mode `ingest`. ⊗ A yolo default-direct. ⊗ Default-direct without grok-bot detect. ⊗ An `arc N` proximity check on `on github`.
|
|
55
|
+
|
|
56
|
+
Record `arc-mode: direct` or `arc-mode: checkout` on the Stop 1 write-back. `evaluateDirectDispatch` is a fixture over parent-claimed actions, not a live occupancy observer.
|
|
57
|
+
|
|
58
|
+
- ! Record `arc-mode:` on the Stop 1 write-back before any mutation-capable session start.
|
|
59
|
+
- ! Direct means `session:start --read-only`, or an explicit occupancy release if a mutation lease is already held.
|
|
60
|
+
- ! Recognition of `direct` happens before mutation initialization. Refuse direct when mutation `session:start` has already occurred, unless the lease is released first.
|
|
61
|
+
- ! Direct posting path that survives a foreign lease: `gh issue comment --body-file -` (stdin). Least-authority envelope: bounded GitHub reads and one comment post.
|
|
62
|
+
- ! Direct N>1 process-only critics are not swarm Phase 2 and not a #4066 mutating worker. Family CLIs still spawn. ⊗ `git worktree add`. Pin reads to `git show <dispatch-sha>:` against the recorded SHA. ⊗ A moving branch ref.
|
|
63
|
+
- ! Direct EXIT names ingest as a later operator verb after the completed-arc record. ⊗ Auto-ingest.
|
|
64
|
+
- ⊗ Treat `arc-mode:` as ingest clearance or as a permanent ingest denial.
|
|
65
|
+
- ⊗ Record a front-door mode named `ingest`.
|
|
66
|
+
|
|
50
67
|
## Stop 2 — Variant selection
|
|
51
68
|
|
|
52
69
|
Record one line per arc: the **charter** (`refutation` | `open critique`), the **spend** (`N=1`, or `N≥3` when the permission is used), and why.
|
|
@@ -172,7 +189,7 @@ seat: codex launcher: codex
|
|
|
172
189
|
|
|
173
190
|
- ! For spend N≥3, the panel-deposit or a sibling-seat record names three claimed families before the first sibling spawn. Parent claims the family at dispatch. ⊗ Classify family from a model slug.
|
|
174
191
|
- ! A same-family sibling set is not a panel. ⊗ Lean it. Printed recovery is re-seat (or halt), not wait for Stop 5.
|
|
175
|
-
- ! Grok Build launcher tree: Grok seat via `spawn_subagent` (or `grok`); Claude seat via `claude` CLI; Codex seat via `codex exec`. Worktree isolation before each spawn
|
|
192
|
+
- ! Grok Build launcher tree: Grok seat via `spawn_subagent` (or `grok`); Claude seat via `claude` CLI; Codex seat via `codex exec`. Worktree isolation before each spawn unless `arc-mode: direct`. Probe `claude` / `codex` on PATH before offering paste-ready. Paste-ready is the fallback when a named family's CLI is absent. Close stdin on CLI spawns (Windows `cmd /c "… <nul"`; Unix `… </dev/null`). Pointer: [`docs/grok-build-subscription-setup.md`](../docs/grok-build-subscription-setup.md).
|
|
176
193
|
- ! `evaluatePanelSeatComposition` (`packages/core/src/design-critique/panel-seat-families.ts`) refuses a same-family N≥3 set and refuses paste-ready-first when `claude` / `codex` resolve. It takes claimed families and PATH probe results. It does not observe live comments and does not count siblings.
|
|
177
194
|
- ! After a dispatch-composition miss, offer a prevention issue. On yolo, file it. ⊗ Only re-seat.
|
|
178
195
|
|
|
@@ -237,8 +254,9 @@ Keep the arc in this contract until a verified synthesis is accepted.
|
|
|
237
254
|
- ⊗ Print `accept` / `retry differences` / `walk` / `walk all` when no successor lean is posted for this round. An empty-lean verb menu is a contract miss.
|
|
238
255
|
- ! The halt line remains postable while same-round siblings remain unposted. An unposted sibling with no dispatch-fail evidence is Dual stop envelope exhaustion.
|
|
239
256
|
- ⊗ Auto-dispatch critics (#3578 / #1702).
|
|
240
|
-
- ⊗ Hand the arc to `triage:accept` / `scope:promote` until the completed-arc record is present: `design-critique: synthesis accepted, because …` citing the accepted successor lean (and the verified-claims table when posted). Catalog chips (`design-critique:mechanism-shaped` / `design-critique:triage-ready`) are list-visible convenience, not clearance. A lone synthesis-accepted-shaped comment that does not cite an accepted lean does not unblock ingest.
|
|
257
|
+
- ⊗ Hand the arc to `triage:accept` / `scope:promote` until the completed-arc record is present: `design-critique: synthesis accepted, because …` citing the accepted successor lean (and the verified-claims table when posted). Catalog chips (`design-critique:mechanism-shaped` / `design-critique:triage-ready` / `design-critique:recut-needed`) are list-visible convenience, not clearance. A lone synthesis-accepted-shaped comment that does not cite an accepted lean does not unblock ingest.
|
|
241
258
|
- ⊗ Stamp `design-critique:triage-ready` at critic-post.
|
|
259
|
+
- ⊗ Stamp `design-critique:recut-needed` at critic-post.
|
|
242
260
|
- ⊗ Add a `design-critique:critic-posted` chip or any author/role chip.
|
|
243
261
|
- ⊗ Critic writes issue labels.
|
|
244
262
|
- ⊗ Add a #3607 thread interlock in this contract.
|
|
@@ -255,7 +273,9 @@ After this round's same-round siblings are posted, parent posts a successor `**L
|
|
|
255
273
|
- ! Carry a per-heading take on the successor lean: `accept-into-contract` | `disagree` | `defer`. Defer is not accepted.
|
|
256
274
|
- ! The successor lean is the disposition map. Do not post a third map type.
|
|
257
275
|
- ! The first posted map is an ADR-006 arbitration surface. Record a substantiation token when takes introduce load-bearing premises. Non-self-arbitration applies when the same party authored the triage and the proposed takes.
|
|
258
|
-
- ! Bind synthesis and `design-critique:triage-ready` to the latest successor lean, never a superseded write-back.
|
|
276
|
+
- ! Bind synthesis and the auto-stamp catalog chip (`design-critique:triage-ready` or `design-critique:recut-needed`) to the latest successor lean, never a superseded write-back.
|
|
277
|
+
- ! When the next-build contract is recut (not this body), stamp a Lean-family line-start `Recut:` on that successor lean. Nine spellings: zero to two asterisks counted independently on each side, the same wrapping as `Lean:`. Auto-stamp matches that token through `resolveAutoStampCatalogChip`. It does not parse lean English.
|
|
278
|
+
- ⊗ Classify recut by NLP of the lean.
|
|
259
279
|
- ! Full template (accepted set, residual, supersedes-id, ceiling if retrying) lives only on the successor lean and on a retry disagreement map.
|
|
260
280
|
- ! Walk comments stay slim (model and role lines, Accept X, critic id, heading, decision, and when needed a token plus pointer).
|
|
261
281
|
- ⊗ Edit the ceiling write-back in place.
|
|
@@ -361,11 +381,12 @@ Contract stops stay internal. Parent prints these phrases when they apply. They
|
|
|
361
381
|
**walk** iterates recorded parent-disagree headings (successor-lean take is `disagree`). **walk all** is the census of every classified finding in existing order (blocking then sharpening then footnotes — or the critic's numbering). For one release, `walk findings one at a time` is an alias of **walk all**. Short forms of accept synthesis are valid: `accept synt`, `synt accepted`, `synt approved`, `accept synthesis`, `synthesis accepted`, `synthesis approved`. Same idea for other printed verbs when the short form is unambiguous (`retry` for `retry differences`). If the operator types a bare word that could be either **walk** or **walk all** and only one was offered, map it to the offered one. If ambiguous, parent re-prints the offered phrases and waits.
|
|
362
382
|
|
|
363
383
|
- ! Print the phrases when they apply. An empty-lean verb menu is a miss.
|
|
384
|
+
- ! Host widgets print only the verbs that apply and MUST end the numbered list with Discuss then Back (#1470 / #1563). `operatorVerbApplySet` is the fixture.
|
|
364
385
|
- ! Do not print **walk** until at least one proposed take on the posted lean is `disagree`.
|
|
365
386
|
- ! Do not print **retry differences** until residual headings are named on that map.
|
|
366
387
|
- ! Do not skip the first-lean offer because the draft is all-accept.
|
|
367
388
|
- ! Non-empty disagree set: print **walk** / **walk all** / **retry differences** / **accept**. Walk is an option, not the only path. Do not auto-start the walk.
|
|
368
|
-
- ! When the successor lean's per-heading map is total over a **non-empty** in-envelope classified-finding set, every heading is `accept-into-contract` (no `disagree`, no `defer`), AND zero unresolved audit markers, AND the operator has confirmed or amended that map, AND no unposted same-round siblings remain: parent auto-posts the verified-claims table as its own comment, then auto-posts `design-critique: synthesis accepted, because agents agreed (empty disagreement set)` and remaining-set-replaces the chip via `task scm:issue:design-critique-chip -- --issue N --chip triage-ready`. If that write misses, continue; do not halt. Do not print **accept synthesis**, **post the verified-claims table**, **walk**, or **walk all**.
|
|
389
|
+
- ! When the successor lean's per-heading map is total over a **non-empty** in-envelope classified-finding set, every heading is `accept-into-contract` (no `disagree`, no `defer`), AND zero unresolved audit markers, AND the operator has confirmed or amended that map, AND no unposted same-round siblings remain: parent auto-posts the verified-claims table as its own comment, then auto-posts `design-critique: synthesis accepted, because agents agreed (empty disagreement set)` and remaining-set-replaces the chip via `task scm:issue:design-critique-chip -- --issue N --chip recut-needed` when `resolveAutoStampCatalogChip` matches a Lean-family `Recut:` line-start on the latest successor lean, else `--chip triage-ready`. If that write misses, continue; do not halt. Do not print **accept synthesis**, **post the verified-claims table**, **walk**, or **walk all**.
|
|
369
390
|
- ⊗ Auto-stamp a parent-drafted all-accept map that the operator has not confirmed or amended.
|
|
370
391
|
- ⊗ Auto-stamp while same-round siblings remain unposted.
|
|
371
392
|
- ⊗ Auto-stamp when any audit marker is unresolved.
|
|
@@ -456,18 +477,18 @@ Two bind paths authorize:
|
|
|
456
477
|
design-critique: synthesis accepted, because …
|
|
457
478
|
```
|
|
458
479
|
|
|
459
|
-
1. #3640 auto-stamp: when the successor lean map is total over the auto-stamp denominator (critic posts in this arc, including Stop 4 retry output, plus still-open residual headings) and that set is non-empty and every heading is `accept-into-contract` AND zero unresolved audit markers AND the operator has confirmed or amended that map AND no unposted same-round siblings remain, parent posts `design-critique: synthesis accepted, because agents agreed (empty disagreement set)` and remaining-set-replaces the chip
|
|
460
|
-
2. Explicit operator **accept synthesis** (or a listed short form), subject to the two non-empty refusals below. Parent may post that line and cite the verb. Then apply `design-critique:triage-ready`
|
|
480
|
+
1. #3640 auto-stamp: when the successor lean map is total over the auto-stamp denominator (critic posts in this arc, including Stop 4 retry output, plus still-open residual headings) and that set is non-empty and every heading is `accept-into-contract` AND zero unresolved audit markers AND the operator has confirmed or amended that map AND no unposted same-round siblings remain, parent posts `design-critique: synthesis accepted, because agents agreed (empty disagreement set)` and remaining-set-replaces the chip via `task scm:issue:design-critique-chip -- --issue N --chip recut-needed` when `resolveAutoStampCatalogChip` matches a Lean-family `Recut:` line-start on the latest successor lean, else `--chip triage-ready`. If that write misses, continue; do not halt. Do not print **accept synthesis**. Do not auto-stamp on a partial map, an unconfirmed parent draft, or when any audit marker is unresolved, or while same-round siblings remain unposted.
|
|
481
|
+
2. Explicit operator **accept synthesis** (or a listed short form), subject to the two non-empty refusals below. Parent may post that line and cite the verb. Then apply the exclusive catalog chip `resolveAutoStampCatalogChip` selects (`design-critique:recut-needed` or `design-critique:triage-ready`) via remaining-set write. If that write misses, continue; do not halt.
|
|
461
482
|
|
|
462
|
-
Closed catalog (last chip wins): `design-critique:mechanism-shaped` (in-flight, gate match)
|
|
483
|
+
Closed catalog (last chip wins): `design-critique:mechanism-shaped` (in-flight, gate match), `design-critique:triage-ready` (bound implement), and `design-critique:recut-needed` (bound recut / not this body). No halt chip. `CHIP_ALIASES` in `packages/core/src/scm/design-critique-chip.ts` is the same three names. Unknown `--chip` fails closed.
|
|
463
484
|
|
|
464
485
|
- ⊗ Bind path 2 when the critic posts zero classified headings (stub / blank). The same refusal path 1 carries at Operator verbs. Stop and inform. Do not stamp.
|
|
465
486
|
- ⊗ Bind path 2 on a footnote-only census. A footnote-only post is a valid census and is not a stub, but denominator set (a) is empty, so it carries no bind at either path.
|
|
466
|
-
- ! Exclusive replace is one merged remaining-set write: GET current labels, drop the other catalog names (`design-critique:mechanism-shaped` and `design-critique:
|
|
487
|
+
- ! Exclusive replace is one merged remaining-set write: GET current labels, drop the other catalog names (`design-critique:mechanism-shaped`, `design-critique:triage-ready`, and `design-critique:recut-needed`), PUT/PATCH that list with the new chip. Other facets stay. Parent write path: `task scm:issue:design-critique-chip -- --issue N --chip triage-ready|mechanism-shaped|recut-needed [--repo OWNER/NAME]` (`deft scm issue design-critique-chip` dual-invoke). The verb GET-drops via `applyDesignCritiqueCatalogChip` / `designCritiqueChipApplyDelta` and one `ScmLabelClient.apply`. Inventory: `LabelClient.apply` / `mergeIssueLabels`.
|
|
467
488
|
- ⊗ `gh api POST .../labels` or additive `scm:issue:edit --add-label` for this facet.
|
|
468
489
|
- ⊗ Intercept mixed `scm issue edit` adds/removes for this facet.
|
|
469
490
|
- ⊗ General-purpose labels CLI.
|
|
470
|
-
- ! After the completed-arc record is present, `triage:accept` / `scope:promote` / `issue:ingest` / build may proceed unless `evaluateCompletedArcRecord` returns `cancelled` or `unrecut-body` (#4057). Any identity may run those verbs. Same-session parent continuation is not required. GitHub Triage on the implementer is not required. They read the accepted verified synthesis (latest successor lean plus the verified-claims table).
|
|
491
|
+
- ! After the completed-arc record is present, `triage:accept` / `scope:promote` / `issue:ingest` / build may proceed unless `evaluateCompletedArcRecord` returns `cancelled` or `unrecut-body` (#4057). Any identity may run those verbs. Same-session parent continuation is not required. ⊗ Treat `arc-mode:` as ingest clearance or as a permanent ingest denial. Ingest stays `issue:ingest` after the completed-arc record. Direct EXIT names it as a later operator verb. GitHub Triage on the implementer is not required. They read the accepted verified synthesis (latest successor lean plus the verified-claims table).
|
|
471
492
|
- ! Per-thread body ingest stays the mapper after a set-level bind. Stories the bind wants are recut bodies or newly filed issues. Derived AC stays on that body.
|
|
472
493
|
- ! Un-recut portfolio members fail closed on `cancelled`. Parent posts `design-critique: cancelled, because ...` on that number. Parent `role: parent` dominate prose is not that record. Critic, quoted, or fenced cancel-shaped prose is not that record. Leftover `mechanism-shaped` without cancel stays `missing-record` and is not this control.
|
|
473
494
|
- ! A later successor lean after cancel starts a recut arc. Completing a superseded thread without recut would mint the harvest.
|
|
@@ -476,16 +497,18 @@ Closed catalog (last chip wins): `design-critique:mechanism-shaped` (in-flight,
|
|
|
476
497
|
- ⊗ Put a set-level graph (dominate / split / corpus parsed from comment English) inside ingest.
|
|
477
498
|
- ! Ingest clearance cites the latest successor lean. An older completed-arc record does not clear a later recut lean. A panel-deposit is in-flight even when the catalog chip missed and no critic has posted.
|
|
478
499
|
- ! The lexical form of that citation, and the requirement that the occurrence be affirmative, are published in `## Citation grammar`. Ingest reads that grammar, not prose intent.
|
|
479
|
-
- ! Keep `plan.policy.judgmentGates` matching only `design-critique:mechanism-shaped`. After `triage-ready` replaces it, the issue leaves the gate match.
|
|
500
|
+
- ! Keep `plan.policy.judgmentGates` matching only `design-critique:mechanism-shaped`. After `triage-ready` or `recut-needed` replaces it, the issue leaves the gate match.
|
|
480
501
|
- ! Chip is list-visible state, not consent. Do not drop `mechanism-shaped` without the synthesis-accepted line (or the #3640 empty-disagreement path).
|
|
481
502
|
- ⊗ Treat `design-critique:triage-ready` as ingest clearance.
|
|
503
|
+
- ⊗ Treat `design-critique:recut-needed` as ingest clearance or as a halt chip.
|
|
482
504
|
- ! Chip apply miss is non-blocking convenience. Do not invent a 403 HTTP parser. Any apply miss is the same miss. Do not use the halt line. Do not block ingest. Optional later remaining-set by a write-capable identity is hygiene.
|
|
483
505
|
- ! Leftover `design-critique:mechanism-shaped` after a chip apply miss does not block ingest. `judgmentGates` match is advisory/observe.
|
|
484
506
|
- ⊗ Use the halt line for a chip apply miss.
|
|
485
507
|
- ! Write-back `mechanism-shaped: true` is history after replace. Current-state authority is the last catalog chip.
|
|
486
|
-
- ! Recut (new lean) applies `design-critique:mechanism-shaped` with the same remaining-set write and drops `triage-ready`.
|
|
508
|
+
- ! Recut (new lean) applies `design-critique:mechanism-shaped` with the same remaining-set write and drops `triage-ready` and `recut-needed`.
|
|
487
509
|
- ~ A live `design-critique:*` count!=1 check is SHOULD, not a new `judgmentGates` match.
|
|
488
510
|
- ⊗ Add `design-critique:triage-ready` to `judgmentGates` labels.any-of.
|
|
511
|
+
- ⊗ Add `design-critique:recut-needed` to `judgmentGates` labels.any-of.
|
|
489
512
|
- ⊗ Infer consent from looks-good.
|
|
490
513
|
- ⊗ DELETE-then-POST the chip (unchipped window if POST fails).
|
|
491
514
|
- ⊗ PUT a naive full wipe of every label.
|
|
@@ -576,4 +599,4 @@ This motion ingests untrusted issue threads by design.
|
|
|
576
599
|
|
|
577
600
|
## Test surface
|
|
578
601
|
|
|
579
|
-
`packages/core/src/content-contracts/standards/design_critique_contract.test.ts` locks required pointer strings, the scaffolds framing, the comment-lead field as model then role from the closed set (not an issue label), the operator-gated loop (successor lean, operator verbs including walk / walk all, dual stop, halt line, exclusive remaining-set replace of the
|
|
602
|
+
`packages/core/src/content-contracts/standards/design_critique_contract.test.ts` locks required pointer strings, the scaffolds framing, the comment-lead field as model then role from the closed set (not an issue label), the operator-gated loop (successor lean, operator verbs including walk / walk all, dual stop, halt line, exclusive remaining-set replace of the three catalog chips, #3640 auto-stamp on a non-empty all-accept map and no-stamp on stubs, first-lean recording obligation after this round's siblings are posted), the parent-side substantiation token and independence rules, the Stop 1 exclusion (pre-critic premises outside the trigger) and `refutation-target:` field tokens rather than full body sentences, the composed auto-bind conjunct (all-accept map AND zero unresolved audit markers) at Operator verbs and Bind path 1, the variant-table evaluation rule (charter selection and spend permission evaluated independently), the critic-method heading and distinctive obligation tokens (exact class tokens, citations-are-claims, existing mechanisms, injection / swarm trigger nouns, failed-reviewer phrase, finding anatomy) rather than full body sentences, the brief-template forbidden-inputs list, and the thin router skill (existence, line cap, pointer resolution, no-normative-content). `evaluateParentAudit` locks the omission failure modes. This suite locks the SoT MUST and the thin skill pointer for the first-lean recording obligation, including the auto-stamp operator-confirm conjunct and the no-bind-while-unposted-same-round-siblings rule. `evaluateCompletedArcRecord` locks ingest on the completed-arc record rather than a catalog chip. It does not fail-close live parent turns. `packages/core/src/design-critique/citation-grammar.test.ts` locks the `## Citation grammar` closed set, the refused positions, and the diagnostics surface; `packages/core/src/design-critique/completed-arc-record.test.ts` locks one parser for both questions, set membership against the latest lean, and the observation-echoing block details (#3831). Runtime parent-turn detection only if `evaluateParentAudit` is extended; that extension is not required to ship the recording obligation. Panel completeness is locked as contract text only. No predicate observes it on a live arc (#3850). `evaluatePanelSeatComposition` locks claimed-family composition and PATH paste-ready-first; it is a fixture over claimed families, not a live sibling-count gate. `### The arc` and its derived boundaries, the `### Target shape` axis with its twice-run caveat, and the two bind-path-2 non-empty refusals are locked as contract text (#3797). `## Plain-language summary` is locked the same way: the contract test pins the heading token, the MUST-not-SHOULD reasoning, the ADR-006 exemption and its limit, the non-normative marking, and the per-artifact reserved line-start matrix, and `packages/core/src/design-critique/reserved-line-starts.test.ts` exercises each of the three families on each artifact kind against the exported shape predicates and `evaluateCompletedArcRecord`. No predicate observes a summary on a live arc (#3929). `### Verified-claims table heading`, the closed reason vocabulary, and the re-measured line-start matrix are locked as contract text, and `completed-arc-record.test.ts` exercises the typed refusal partition: the two states, details that differ by more than the id, the untyped null table id, and the seven recorded live arc table ids (#3942). `### Run posture` and `parseOperatorRunPosture` / `evaluateDirectDispatch` lock the closed-token front door, the missing-token ask including yolo, the `session:start --read-only` start verb, stdin posting, SHA-pinned reads, and the no-worktree direct panel; `run-posture.test.ts` exercises those fixtures. `evaluateCompletedArcRecord` ignores `arc-mode:` (#4072).
|
|
@@ -10,7 +10,7 @@ Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
|
10
10
|
## Why
|
|
11
11
|
|
|
12
12
|
Before this contract, deft had four machine-managed file writers
|
|
13
|
-
(`task migrate:vbrief` deprecation redirects, `task spec:render`,
|
|
13
|
+
(frozen `task migrate:vbrief` deprecation redirects (v0.59.0; historical), `task spec:render`,
|
|
14
14
|
`task prd:render`, `task roadmap:render`) and each used a different
|
|
15
15
|
(or no) banner convention. Downstream heuristics that distinguish
|
|
16
16
|
"is this file user-customized" from "is this machine-managed" were
|
|
@@ -34,7 +34,7 @@ of the file:
|
|
|
34
34
|
- `{purpose}` — one of the enumerated per-writer purposes below; fixed
|
|
35
35
|
string values so downstream detectors can match on a stable token.
|
|
36
36
|
- `{source}` — the source-of-truth path the writer consumed
|
|
37
|
-
(typically `
|
|
37
|
+
(typically `xbrief/specification.xbrief.json`), or `n/a` when the
|
|
38
38
|
writer has no single source-of-truth file (e.g. the migrator
|
|
39
39
|
deprecation redirect, which is driven by the migration flow).
|
|
40
40
|
- `{command}` — the canonical `task *` invocation that regenerates
|
|
@@ -49,10 +49,10 @@ of the file:
|
|
|
49
49
|
The `Purpose:` value is a small fixed enum so detectors can match on a
|
|
50
50
|
stable token. Writers MUST use exactly one of these values:
|
|
51
51
|
|
|
52
|
-
- `rendered specification` -- `
|
|
53
|
-
- `rendered PRD` -- `
|
|
54
|
-
- `rendered roadmap` -- `
|
|
55
|
-
- `deprecation redirect` -- `
|
|
52
|
+
- `rendered specification` -- `task spec:render` -> `SPECIFICATION.md`
|
|
53
|
+
- `rendered PRD` -- `task prd:render` -> `PRD.md`
|
|
54
|
+
- `rendered roadmap` -- `task roadmap:render` -> `ROADMAP.md`
|
|
55
|
+
- `deprecation redirect` -- frozen `task migrate:vbrief` (v0.59.0; historical)
|
|
56
56
|
-> replaced `SPECIFICATION.md` / `PROJECT.md`
|
|
57
57
|
|
|
58
58
|
? Future render tasks added under `tasks/` MUST extend this list before
|
|
@@ -61,7 +61,7 @@ contract violation.
|
|
|
61
61
|
|
|
62
62
|
## Detection heuristic (for user-customization guards)
|
|
63
63
|
|
|
64
|
-
! `
|
|
64
|
+
! Frozen `task migrate:vbrief` (v0.59.0) `_is_user_customized()` consults the
|
|
65
65
|
`_SPEC_AUTO_MARKERS` and `_PROJECT_AUTO_MARKERS` tuples. Both MUST
|
|
66
66
|
include `"AUTO-GENERATED by"` and the FULL HTML-comment prefix
|
|
67
67
|
`"<!-- Purpose:"` so any file carrying this banner is recognised as
|
|
@@ -83,13 +83,13 @@ incorrectly re-flagged as pre-cutover on rc.3.
|
|
|
83
83
|
```
|
|
84
84
|
<!-- AUTO-GENERATED by task spec:render -- DO NOT EDIT MANUALLY -->
|
|
85
85
|
<!-- Purpose: rendered specification -->
|
|
86
|
-
<!-- Source of truth:
|
|
86
|
+
<!-- Source of truth: xbrief/specification.xbrief.json -->
|
|
87
87
|
<!-- Regenerate with: task spec:render -->
|
|
88
88
|
# My Project
|
|
89
89
|
...
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
## Example (migrator deprecation redirect)
|
|
92
|
+
## Example (frozen migrator deprecation redirect, v0.59.0; historical)
|
|
93
93
|
|
|
94
94
|
```
|
|
95
95
|
<!-- AUTO-GENERATED by task migrate:vbrief -- DO NOT EDIT MANUALLY -->
|
|
@@ -252,11 +252,11 @@
|
|
|
252
252
|
},
|
|
253
253
|
{
|
|
254
254
|
"id": "main-vbrief-persistence",
|
|
255
|
-
"text": "All
|
|
255
|
+
"text": "All xBRIEF files MUST be stored in `./xbrief/` or its lifecycle subfolders",
|
|
256
256
|
"owner_file": "main.md",
|
|
257
|
-
"owner_section": "##
|
|
257
|
+
"owner_section": "## xBRIEF Persistence",
|
|
258
258
|
"authority": "MUST",
|
|
259
|
-
"last_verified": "2026-
|
|
259
|
+
"last_verified": "2026-09-02"
|
|
260
260
|
},
|
|
261
261
|
{
|
|
262
262
|
"id": "agents-deft-alignment-confirmation",
|
package/docs/SUPPORT.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Support and troubleshooting
|
|
2
|
+
|
|
3
|
+
This page is a **symptom index**. It is not a second recovery ladder.
|
|
4
|
+
|
|
5
|
+
- If `directive` (or the `deft` alias) will not start, use the [README cold-start](https://github.com/deftai/directive/blob/master/README.md). That committed block is the only payload-independent command ladder.
|
|
6
|
+
- If the CLI runs, start with `directive doctor --full`. Follow its one `Next command:`. Do not pick a competing command from this page.
|
|
7
|
+
|
|
8
|
+
Doctor caches a clean run for 24 hours and a dirty run for 4 hours. `--full` bypasses that throttle.
|
|
9
|
+
|
|
10
|
+
Specialist pages below are pointers. Recovery command bytes stay in doctor and the README cold-start.
|
|
11
|
+
|
|
12
|
+
## Symptom index
|
|
13
|
+
|
|
14
|
+
| Symptom | Safe diagnostic | Specialist link |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| PATH / package manager (`command not found`, missing pnpm bin) | Pre-CLI: README cold-start. If the CLI runs: `directive doctor --full` | Follow `Next command:` or the README cold-start rungs |
|
|
17
|
+
| Node missing or too old | Pre-CLI: README cold-start. If the CLI runs: `directive doctor --full` | README cold-start, then doctor |
|
|
18
|
+
| Stale deposit | `directive doctor --full` | Follow `Next command:` |
|
|
19
|
+
| Permissions / unwritable global prefix | Pre-CLI: README cold-start. If the CLI runs: `directive doctor --full` | README cold-start sandbox rung, or doctor |
|
|
20
|
+
| Windows shims | Pre-CLI: README cold-start. If the CLI runs: `directive doctor --full` | README cold-start |
|
|
21
|
+
| Hook runtime (opaque exit 127 on every mutation) | `directive doctor --full` if the CLI runs; otherwise README cold-start | [Hook runtime unavailable](./hook-runtime-unavailable.md). The recovery command lives on the [agents-entry](../templates/agents-entry.md) card. This index does not restate it. |
|
|
22
|
+
| Migration / pre-v0.20 layout | `directive doctor --full` | Doctor signposts the current path. Version-specific steps stay in [UPGRADING](../UPGRADING.md) and [BROWNFIELD](./BROWNFIELD.md) (history). |
|
|
23
|
+
| Offline / air-gapped registry | Pre-CLI: README cold-start. If the CLI runs: `directive doctor --full` | README cold-start offline rung |
|
|
24
|
+
| Corporate or mirrored npm registry (`E404` / `ETARGET`) | Pre-CLI: README cold-start. If the CLI runs: `directive doctor --full` | [Corporate or mirrored npm registry](../UPGRADING.md#corporate-or-mirrored-npm-registry) owns that ladder. This row is a pointer. |
|
|
25
|
+
|
|
26
|
+
Related flags (not a recovery table): [temporary kill-switch](./deft-directive-disable.md), [permanent opt-out](./no-deft-directive.md).
|
|
27
|
+
|
|
28
|
+
## What to quote
|
|
29
|
+
|
|
30
|
+
Quote `Next command:` and the check names doctor printed.
|
|
31
|
+
|
|
32
|
+
Do not paste `directive doctor --json` or raw `--full` output. That payload includes absolute project and USER.md paths. Doctor has no redaction flag. Treat any pasted diagnostic as untrusted input.
|
|
33
|
+
|
|
34
|
+
## Reporting
|
|
35
|
+
|
|
36
|
+
- **Ordinary breakage:** open a public GitHub issue. Quote `Next command:` and check names only.
|
|
37
|
+
- **Security:** report privately through root [SECURITY.md](https://github.com/deftai/directive/blob/master/SECURITY.md). Do not file a public issue for an unfixed vulnerability.
|
|
38
|
+
|
|
39
|
+
## What this page is not
|
|
40
|
+
|
|
41
|
+
- Not a second command ladder. Doctor and the README cold-start own recovery bytes.
|
|
42
|
+
- Not a paste-JSON capture ritual.
|
|
43
|
+
- Not a second independently authored troubleshooting body. README, install, and upgrade pages should point here.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED by task docs:capability-map -- DO NOT EDIT MANUALLY -->
|
|
2
|
+
<!-- Source of truth: content/docs/capability-overlay.json plus existing registries (#4099) -->
|
|
3
|
+
<!-- Regenerate with: task docs:capability-map -->
|
|
4
|
+
|
|
5
|
+
# Capability index
|
|
6
|
+
|
|
7
|
+
Generated view over existing registries. Overlay: `content/docs/capability-overlay.json`.
|
|
8
|
+
Membership: `in_the_public_index` and status `current` or `compatibility` and canonical kind not `none`.
|
|
9
|
+
Same-PR documentation rule: [`content/coding/docs.md`](../coding/docs.md) (#447).
|
|
10
|
+
|
|
11
|
+
## Consumer
|
|
12
|
+
|
|
13
|
+
### Build skill
|
|
14
|
+
- **Status:** current
|
|
15
|
+
- **Canonical:** skill-trigger `deft-directive-build`
|
|
16
|
+
- **Gotchas:** xbrief:preflight on an active running brief before code. Do not treat completed xBRIEFs as next-build contract.
|
|
17
|
+
|
|
18
|
+
### Doctor
|
|
19
|
+
- **Status:** current
|
|
20
|
+
- **Canonical:** command `doctor`
|
|
21
|
+
- **Gotchas:** Support entry is doctor --full or the README cold-start. Not a second recovery ladder.
|
|
22
|
+
|
|
23
|
+
### Install / init
|
|
24
|
+
- **Status:** current
|
|
25
|
+
- **Canonical:** command `init`
|
|
26
|
+
- **Gotchas:** Consumer path is directive init. Do not send npm consumers through Corepack, Go, or uv.
|
|
27
|
+
|
|
28
|
+
### Public concepts page
|
|
29
|
+
- **Status:** current
|
|
30
|
+
- **Canonical:** document `docs-site/concepts.html`
|
|
31
|
+
- **Gotchas:** Concepts page is a public IA surface. README/UPGRADING rewrites stay on #4100.
|
|
32
|
+
|
|
33
|
+
### Public docs home
|
|
34
|
+
- **Status:** current
|
|
35
|
+
- **Canonical:** document `docs-site/index.html`
|
|
36
|
+
- **Gotchas:** Public IA lives under docs-site/. Do not mix it with maintainer docs/.
|
|
37
|
+
|
|
38
|
+
### Public gates page
|
|
39
|
+
- **Status:** current
|
|
40
|
+
- **Canonical:** document `docs-site/gates.html`
|
|
41
|
+
- **Gotchas:** task check is the merge chokepoint named here; do not invent a parallel public gate.
|
|
42
|
+
|
|
43
|
+
### Public install page
|
|
44
|
+
- **Status:** current
|
|
45
|
+
- **Canonical:** document `docs-site/install.html`
|
|
46
|
+
- **Gotchas:** Install copy stays on the consumer Node floor, not the maintainer toolchain pin.
|
|
47
|
+
|
|
48
|
+
### Public license page
|
|
49
|
+
- **Status:** current
|
|
50
|
+
- **Canonical:** document `docs-site/license.html`
|
|
51
|
+
- **Gotchas:** License page is a docs-site surface, not a substitute for root LICENSE.
|
|
52
|
+
|
|
53
|
+
### Public upgrade page
|
|
54
|
+
- **Status:** current
|
|
55
|
+
- **Canonical:** document `docs-site/upgrade.html`
|
|
56
|
+
- **Gotchas:** Frozen pre-v0.20 migration stays on the v0.59.0 hop. Current npm uses migrate:xbrief.
|
|
57
|
+
|
|
58
|
+
### Session start
|
|
59
|
+
- **Status:** current
|
|
60
|
+
- **Canonical:** command `session:start`
|
|
61
|
+
- **Gotchas:** Run before mutation. USER.md Personal wins. Read-only until implementation intent.
|
|
62
|
+
|
|
63
|
+
### Setup skill
|
|
64
|
+
- **Status:** current
|
|
65
|
+
- **Canonical:** skill-trigger `deft-directive-setup`
|
|
66
|
+
- **Gotchas:** Writes USER.md and PROJECT-DEFINITION. Confirm captured values before write.
|
|
67
|
+
|
|
68
|
+
### task check
|
|
69
|
+
- **Status:** current
|
|
70
|
+
- **Canonical:** command `check`
|
|
71
|
+
- **Gotchas:** Merge chokepoint. Iteration may use cheaper affected gates; do not skip this before PR.
|
|
72
|
+
|
|
73
|
+
## Maintainer
|
|
74
|
+
|
|
75
|
+
### Encoding gate (alias)
|
|
76
|
+
- **Status:** compatibility
|
|
77
|
+
- **Canonical:** command `verify:encoding`
|
|
78
|
+
- **Gotchas:** Alias owner is dispatch.ts VERB_ALIASES. Canonical engine verb is verify-encoding.
|
|
79
|
+
|
|
80
|
+
### Policy inspector
|
|
81
|
+
- **Status:** current
|
|
82
|
+
- **Canonical:** command `policy:show`
|
|
83
|
+
- **Gotchas:** Read namespaced plan["x-directive/policy"]. Bare plan.policy is a shadowing stop.
|
|
84
|
+
|
|
85
|
+
### Pre-PR skill
|
|
86
|
+
- **Status:** current
|
|
87
|
+
- **Canonical:** skill-trigger `deft-directive-pre-pr`
|
|
88
|
+
- **Gotchas:** Run before opening a PR. Always-pin process skill; not this capability index.
|
|
89
|
+
|
|
90
|
+
### Review-cycle skill
|
|
91
|
+
- **Status:** current
|
|
92
|
+
- **Canonical:** skill-trigger `deft-directive-review-cycle`
|
|
93
|
+
- **Gotchas:** Greptile residuals go through this skill. Host babysit/bugbot are advisory-only.
|
|
94
|
+
|
|
95
|
+
### Rule map
|
|
96
|
+
- **Status:** current
|
|
97
|
+
- **Canonical:** command `docs:rule-map`
|
|
98
|
+
- **Gotchas:** Generated maintainer view. Do not mint a second RULE-MAP. Refresh with task docs:rule-map.
|
|
99
|
+
|
|
100
|
+
### Swarm skill
|
|
101
|
+
- **Status:** current
|
|
102
|
+
- **Canonical:** skill-trigger `deft-directive-swarm`
|
|
103
|
+
- **Gotchas:** Drive-to merge-ready is the default story unit. Parent must not implement as the leaf.
|
|
104
|
+
|
|
105
|
+
## Frozen
|
|
106
|
+
|
|
107
|
+
### Frozen vBRIEF migrator
|
|
108
|
+
- **Status:** compatibility
|
|
109
|
+
- **Canonical:** command `migrate:vbrief`
|
|
110
|
+
- **Gotchas:** Current npm does not ship this verb. Pin v0.59.0 for hop 1, then migrate:xbrief.
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"issue": 4099,
|
|
4
|
+
"gotcha_max_chars": 280,
|
|
5
|
+
"entries": [
|
|
6
|
+
{
|
|
7
|
+
"id": "session-start",
|
|
8
|
+
"title": "Session start",
|
|
9
|
+
"audience": "consumer",
|
|
10
|
+
"status": "current",
|
|
11
|
+
"in_the_public_index": true,
|
|
12
|
+
"canonical_entry": { "kind": "command", "id": "session:start" },
|
|
13
|
+
"gotchas": "Run before mutation. USER.md Personal wins. Read-only until implementation intent."
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "check",
|
|
17
|
+
"title": "task check",
|
|
18
|
+
"audience": "consumer",
|
|
19
|
+
"status": "current",
|
|
20
|
+
"in_the_public_index": true,
|
|
21
|
+
"canonical_entry": { "kind": "command", "id": "check" },
|
|
22
|
+
"gotchas": "Merge chokepoint. Iteration may use cheaper affected gates; do not skip this before PR."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "doctor",
|
|
26
|
+
"title": "Doctor",
|
|
27
|
+
"audience": "consumer",
|
|
28
|
+
"status": "current",
|
|
29
|
+
"in_the_public_index": true,
|
|
30
|
+
"canonical_entry": { "kind": "command", "id": "doctor" },
|
|
31
|
+
"gotchas": "Support entry is doctor --full or the README cold-start. Not a second recovery ladder."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "init",
|
|
35
|
+
"title": "Install / init",
|
|
36
|
+
"audience": "consumer",
|
|
37
|
+
"status": "current",
|
|
38
|
+
"in_the_public_index": true,
|
|
39
|
+
"canonical_entry": { "kind": "command", "id": "init" },
|
|
40
|
+
"gotchas": "Consumer path is directive init. Do not send npm consumers through Corepack, Go, or uv."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "setup-skill",
|
|
44
|
+
"title": "Setup skill",
|
|
45
|
+
"audience": "consumer",
|
|
46
|
+
"status": "current",
|
|
47
|
+
"in_the_public_index": true,
|
|
48
|
+
"canonical_entry": { "kind": "skill-trigger", "id": "deft-directive-setup" },
|
|
49
|
+
"gotchas": "Writes USER.md and PROJECT-DEFINITION. Confirm captured values before write."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "build-skill",
|
|
53
|
+
"title": "Build skill",
|
|
54
|
+
"audience": "consumer",
|
|
55
|
+
"status": "current",
|
|
56
|
+
"in_the_public_index": true,
|
|
57
|
+
"canonical_entry": { "kind": "skill-trigger", "id": "deft-directive-build" },
|
|
58
|
+
"gotchas": "xbrief:preflight on an active running brief before code. Do not treat completed xBRIEFs as next-build contract."
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "docs-home",
|
|
62
|
+
"title": "Public docs home",
|
|
63
|
+
"audience": "consumer",
|
|
64
|
+
"status": "current",
|
|
65
|
+
"in_the_public_index": true,
|
|
66
|
+
"canonical_entry": { "kind": "document", "id": "docs-site/index.html" },
|
|
67
|
+
"gotchas": "Public IA lives under docs-site/. Do not mix it with maintainer docs/."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "docs-install",
|
|
71
|
+
"title": "Public install page",
|
|
72
|
+
"audience": "consumer",
|
|
73
|
+
"status": "current",
|
|
74
|
+
"in_the_public_index": true,
|
|
75
|
+
"canonical_entry": { "kind": "document", "id": "docs-site/install.html" },
|
|
76
|
+
"gotchas": "Install copy stays on the consumer Node floor, not the maintainer toolchain pin."
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "docs-gates",
|
|
80
|
+
"title": "Public gates page",
|
|
81
|
+
"audience": "consumer",
|
|
82
|
+
"status": "current",
|
|
83
|
+
"in_the_public_index": true,
|
|
84
|
+
"canonical_entry": { "kind": "document", "id": "docs-site/gates.html" },
|
|
85
|
+
"gotchas": "task check is the merge chokepoint named here; do not invent a parallel public gate."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "docs-concepts",
|
|
89
|
+
"title": "Public concepts page",
|
|
90
|
+
"audience": "consumer",
|
|
91
|
+
"status": "current",
|
|
92
|
+
"in_the_public_index": true,
|
|
93
|
+
"canonical_entry": { "kind": "document", "id": "docs-site/concepts.html" },
|
|
94
|
+
"gotchas": "Concepts page is a public IA surface. README/UPGRADING rewrites stay on #4100."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "docs-upgrade",
|
|
98
|
+
"title": "Public upgrade page",
|
|
99
|
+
"audience": "consumer",
|
|
100
|
+
"status": "current",
|
|
101
|
+
"in_the_public_index": true,
|
|
102
|
+
"canonical_entry": { "kind": "document", "id": "docs-site/upgrade.html" },
|
|
103
|
+
"gotchas": "Frozen pre-v0.20 migration stays on the v0.59.0 hop. Current npm uses migrate:xbrief."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "docs-license",
|
|
107
|
+
"title": "Public license page",
|
|
108
|
+
"audience": "consumer",
|
|
109
|
+
"status": "current",
|
|
110
|
+
"in_the_public_index": true,
|
|
111
|
+
"canonical_entry": { "kind": "document", "id": "docs-site/license.html" },
|
|
112
|
+
"gotchas": "License page is a docs-site surface, not a substitute for root LICENSE."
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "rule-map",
|
|
116
|
+
"title": "Rule map",
|
|
117
|
+
"audience": "maintainer",
|
|
118
|
+
"status": "current",
|
|
119
|
+
"in_the_public_index": true,
|
|
120
|
+
"canonical_entry": { "kind": "command", "id": "docs:rule-map" },
|
|
121
|
+
"gotchas": "Generated maintainer view. Do not mint a second RULE-MAP. Refresh with task docs:rule-map."
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "policy-show",
|
|
125
|
+
"title": "Policy inspector",
|
|
126
|
+
"audience": "maintainer",
|
|
127
|
+
"status": "current",
|
|
128
|
+
"in_the_public_index": true,
|
|
129
|
+
"canonical_entry": { "kind": "command", "id": "policy:show" },
|
|
130
|
+
"gotchas": "Read namespaced plan[\"x-directive/policy\"]. Bare plan.policy is a shadowing stop."
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "pre-pr-skill",
|
|
134
|
+
"title": "Pre-PR skill",
|
|
135
|
+
"audience": "maintainer",
|
|
136
|
+
"status": "current",
|
|
137
|
+
"in_the_public_index": true,
|
|
138
|
+
"canonical_entry": { "kind": "skill-trigger", "id": "deft-directive-pre-pr" },
|
|
139
|
+
"gotchas": "Run before opening a PR. Always-pin process skill; not this capability index."
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"id": "review-cycle-skill",
|
|
143
|
+
"title": "Review-cycle skill",
|
|
144
|
+
"audience": "maintainer",
|
|
145
|
+
"status": "current",
|
|
146
|
+
"in_the_public_index": true,
|
|
147
|
+
"canonical_entry": { "kind": "skill-trigger", "id": "deft-directive-review-cycle" },
|
|
148
|
+
"gotchas": "Greptile residuals go through this skill. Host babysit/bugbot are advisory-only."
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": "swarm-skill",
|
|
152
|
+
"title": "Swarm skill",
|
|
153
|
+
"audience": "maintainer",
|
|
154
|
+
"status": "current",
|
|
155
|
+
"in_the_public_index": true,
|
|
156
|
+
"canonical_entry": { "kind": "skill-trigger", "id": "deft-directive-swarm" },
|
|
157
|
+
"gotchas": "Drive-to merge-ready is the default story unit. Parent must not implement as the leaf."
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"id": "verify-encoding",
|
|
161
|
+
"title": "Encoding gate (alias)",
|
|
162
|
+
"audience": "maintainer",
|
|
163
|
+
"status": "compatibility",
|
|
164
|
+
"in_the_public_index": true,
|
|
165
|
+
"canonical_entry": { "kind": "command", "id": "verify:encoding" },
|
|
166
|
+
"gotchas": "Alias owner is dispatch.ts VERB_ALIASES. Canonical engine verb is verify-encoding."
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"id": "migrate-vbrief-frozen",
|
|
170
|
+
"title": "Frozen vBRIEF migrator",
|
|
171
|
+
"audience": "frozen",
|
|
172
|
+
"status": "compatibility",
|
|
173
|
+
"in_the_public_index": true,
|
|
174
|
+
"canonical_entry": { "kind": "command", "id": "migrate:vbrief" },
|
|
175
|
+
"gotchas": "Current npm does not ship this verb. Pin v0.59.0 for hop 1, then migrate:xbrief."
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"id": "triage-skill-withdrawn",
|
|
179
|
+
"title": "Triage classify (withdrawn)",
|
|
180
|
+
"audience": "maintainer",
|
|
181
|
+
"status": "withdrawn",
|
|
182
|
+
"in_the_public_index": false,
|
|
183
|
+
"canonical_entry": { "kind": "skill-trigger", "id": "deft-directive-triage" },
|
|
184
|
+
"gotchas": "Classify playbook is off. Work selection is plan-sequence:current then triage:queue."
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"id": "product-signal-consent",
|
|
188
|
+
"title": "Product-signal consent",
|
|
189
|
+
"audience": "consumer",
|
|
190
|
+
"status": "experimental",
|
|
191
|
+
"status_owner": "packages/core/src/product-signal",
|
|
192
|
+
"in_the_public_index": false,
|
|
193
|
+
"canonical_entry": { "kind": "command", "id": "product-signal:consent" },
|
|
194
|
+
"gotchas": "Off until the operator grants consent. Absence of consent is not a product verdict."
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
}
|