@deftai/directive-content 0.109.0 → 0.110.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/scm/github.md CHANGED
@@ -406,7 +406,7 @@ Agent `edit_files` operations can fail when structured file sections contain Uni
406
406
 
407
407
  **Status / role**: `status:tracker`, `status:child` (parented work), optional `epic` only for multi-ship product roots; project-specific holds as needed
408
408
 
409
- **Mirror** (if using `triage:classify -- --mirror`): at least `triaged`; optional `triage:deferred` / `triage:archived` when `actionLabels` maps them
409
+ **Mirror** (`triage:classify -- --mirror`) is withdrawn (#4070). Do not stamp `triaged` / `triage:*` from classify. Replacement sieve is #4071.
410
410
 
411
411
  ### Consumer hard-blocker (`adoption-blocker`)
412
412
 
@@ -40,7 +40,7 @@ Normative rules live in [`contracts/design-critique.md`](../../contracts/design-
40
40
 
41
41
  Comment lead (model then role): Stop 3 — Critic envelope.
42
42
  Operator-gated loop. Successor lean. Parent-side substantiation. Operator verbs. Dual stop. Halt line. Bind after accepted synthesis.
43
- After critic post: posted successor lean, then verbs.
43
+ After this round's siblings are posted: successor lean, then verbs.
44
44
  Auto-stamp after operator confirm; not while same-round siblings outstanding.
45
45
  Walk / walk all. Auto-stamp when agents agree: Operator verbs.
46
46
  Parent chip write: scm:issue:design-critique-chip.
@@ -52,11 +52,14 @@ Each critic dispatch EXITs after posting.
52
52
 
53
53
  Not sequential review. Same-round critics are isolated: each reads one fixed input ceiling and cannot read other siblings' posts through the thread. More: [`references/motion-shape.md`](references/motion-shape.md).
54
54
 
55
- After each critic EXIT, the parent posts the successor lean; the operator confirms or amends before bind or stamp.
55
+ After same-round siblings are posted, the parent posts the successor lean; the operator confirms or amends before bind or stamp.
56
56
 
57
57
  ⊗ Auto-dispatch critics from this skill.
58
58
  ⊗ Copy the variant table, synthesis rules, or other contract bodies into this skill.
59
59
 
60
+ Seat families and Grok Build launcher: Envelope and ceiling.
61
+ Dispatch-composition miss: offer or file a prevention issue.
62
+
60
63
  ## EXIT
61
64
 
62
65
  deft-directive-design-critique complete -- exiting skill. Next: operator fills the brief template and dispatches the next envelope.
@@ -12,7 +12,7 @@ Orientation only. Normative rules: [`contracts/design-critique.md`](../../../con
12
12
 
13
13
  | Step | Actor | Action |
14
14
  |------|-------|--------|
15
- | After critic EXIT | Parent | Post successor lean with proposed per-heading takes |
15
+ | After same-round siblings are posted | Parent | Post successor lean with proposed per-heading takes |
16
16
  | Before bind/stamp | Operator | Confirm or amend that lean |
17
17
  | Next envelope | Operator (or parent after operator verb) | Fill brief template and dispatch |
18
18
 
@@ -53,7 +53,7 @@ Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
53
53
  ## Inputs
54
54
 
55
55
  - ! Local `.deft-cache/github-issue/` (bodies available)
56
- - ! Classify partition via `task triage:classify -- --mirror` (or cached JSON digest) as **FILTER only**
56
+ - ! Classify --mirror is withdrawn (#4070). Use a read-only `task triage:queue` listing (or a captured #4070 digest) as **FILTER only**. ⊗ Run `task triage:classify -- --mirror`.
57
57
  - ~ Optional theme slice: label family, title prefix, author, epic parent
58
58
 
59
59
  ## Phases
@@ -66,7 +66,7 @@ Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
66
66
 
67
67
  ### Phase 1 — Classify as FILTER only
68
68
 
69
- 1. ! Run `task triage:classify -- --mirror` (dry-run; optional `--json`) to partition dispositions (`no_match` / escalate / defer / already planned).
69
+ 1. ! Classify --mirror is withdrawn (#4070). Partition from a read-only `task triage:queue` listing or a captured digest from `task triage:strip-withdrawn-chips -- --emit-digest`. Run live `task triage:classify -- --mirror`.
70
70
  2. ! Use classify outcomes only to **filter** the portfolio slice (e.g. deep-dive candidates from `no_match`; keep escalate on an interrupt queue).
71
71
  3. ⊗ Use classify disposition chips as the **ranker** or final shortlist order.
72
72
  4. ⊗ Pass `--apply` or `--re-enrich` with intent to write labels from this skill.
@@ -28,7 +28,7 @@ Conversational refinement session -- ingest, evaluate, reconcile, and prioritize
28
28
 
29
29
  Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
30
30
 
31
- **Upstream pass**: refinement begins with a triage pass -- see [`../deft-directive-triage/SKILL.md`](../deft-directive-triage/SKILL.md) (D6 / #1130) for the canonical cache-hygiene + "what's next?" queue playbook before continuing into the refinement flow below.
31
+ **Upstream pass**: classify playbook withdrawn (#4070). Work selection is `task plan-sequence:current`, then a read-only `task triage:queue` listing. The withdrawn stub is [`../deft-directive-triage/SKILL.md`](../deft-directive-triage/SKILL.md). Replacement sieve is #4071. Ingest / `task triage:accept` stay.
32
32
 
33
33
  **See also**: [`../../contracts/deterministic-questions.md`](../../contracts/deterministic-questions.md) (canonical numbered-menu rule used by every Phase 0 / Phase 2-5 gate below) | `task cache:fetch-all` / `task cache:get` (Tier 1 unified content cache, #883 Story 2) | `task triage:bootstrap` / `task triage:accept` / `task triage:reject` / `task triage:defer` / `task triage:needs-ac` / `task triage:mark-duplicate` / `task triage:bulk-*` / `task triage:refresh-active` (Phase 0 action surface, #845 + #883 Story 3 rebind).
34
34
 
@@ -101,10 +101,10 @@ The agent may suggest the next phase, but the user decides. Phases can be entere
101
101
  3. ! **Outstanding-work gate.** If the cache is populated AND any of `untriaged`, `stale-defer (resume condition met)`, or `in-flight` is non-zero, surface the one-liner verbatim to the user with the canonical recommendation:
102
102
 
103
103
  ```
104
- triage cache has outstanding work -- recommend running `skills/deft-directive-triage/SKILL.md` (D6 / #1130) first. Proceed to refinement anyway? [y/N]
104
+ classify playbook withdrawn (#4070) -- work selection is `task plan-sequence:current` then a read-only `task triage:queue` listing. Proceed to refinement ingest? [y/N]
105
105
  ```
106
106
 
107
- ~ Default is `N`: deferring to the triage skill is the documented happy path because refinement consumes `accept`-decisioned candidates and an untriaged backlog means there are fewer `accept` rows than there could be. On `N`, exit with the canonical confirmation phrasing and the chaining instruction `Run skills/deft-directive-triage/SKILL.md to clear the backlog, then re-enter refinement.`. On `y`, proceed to Phase 0b.
107
+ ~ Default is `N`: on `N`, exit with the canonical confirmation phrasing and the chaining instruction `Run task plan-sequence:current, then a read-only task triage:queue listing (#4070).`. On `y`, proceed to Phase 0b.
108
108
 
109
109
  4. ? When all counts are zero (cache populated, no outstanding work), proceed to Phase 0b without prompting.
110
110
 
@@ -31,6 +31,8 @@ This path became first-class in #1342 (platform adapter slices 1-3) and is fully
31
31
 
32
32
  ~ This is the first-class non-Warp path. Workers use worktree state polling (`git status`, `git log`) and `get_command_or_subagent_output` as their coordination channel instead of Warp tab state.
33
33
 
34
+ ! Design-critique N≥3 other-family seats are not `spawn_subagent` Grok catalog rows. When `claude` / `codex` resolve on PATH, CLI-spawn those seats (`content/docs/grok-build-subscription-setup.md`). Paste-ready is fallback. Normative stop: `content/contracts/design-critique.md` Envelope and ceiling (#4067).
35
+
34
36
 
35
37
  ## Monitor notes
36
38
 
@@ -1,13 +1,9 @@
1
1
  ---
2
2
  name: deft-directive-triage
3
3
  description: >-
4
- Triage-cache hygiene and "what's next?" work selection (ordered plan or
5
- ranked queue) -- the agent-facing playbook for syncing the triage cache,
6
- classifying candidates, presenting a ranked queue or binding to an active
7
- plan-sequence, walking per-item decisions (accept / reject / defer /
8
- needs-ac / mark-duplicate), and auditing the session. Use when the operator
9
- asks what to work on next, wants to build a cohort, work the cache, or run a
10
- triage hygiene pass.
4
+ Withdrawn (#4070). Classify playbook is off. Work selection is
5
+ plan-sequence:current then a read-only triage:queue listing. Replacement
6
+ sieve is #4071. Triggers still match so packs:slice finds this stub.
11
7
  triggers:
12
8
  - triage
13
9
  - triage hygiene
@@ -27,120 +23,22 @@ triggers:
27
23
 
28
24
  # Deft Directive Triage
29
25
 
30
- Triage-cache hygiene + "what's next?" work selection (ordered plan or ranked queue). Operates against the unified `.deft-cache/github-issue/` mirror (#883 Story 2) and the append-only `xbrief/.eval/candidates.jsonl` audit log (#845 Story 2); writes only via the canonical `task triage:*` verbs.
26
+ Withdrawn (#4070). Replacement sieve is #4071. #3579 is transitively withdrawn for the gap.
31
27
 
32
28
  Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
33
29
 
34
- ## Platform Requirements
30
+ ## When to Use
35
31
 
36
- ! Requires **GitHub** as the SCM platform and the **GitHub CLI (`gh`)** authenticated against the active project's repo -- the cache surface (`task cache:fetch-all`) and the read-side gate (`task verify:cache-fresh`) both depend on it.
37
-
38
- ## Deterministic Questions Contract
39
-
40
- ! Every numbered-menu prompt rendered in this skill (Phase 2 candidate selection, Phase 3 per-item decision walk, post-Accept offer) ! MUST follow [`../../contracts/deterministic-questions.md`](../../contracts/deterministic-questions.md): render the canonical numbered menu in chat unless the host UI visibly preserves numeric option labels and returns numeric selections or exact displayed option text. The final two numbered options are `Discuss` and `Back`, in that order, and the Discuss-pause semantic from the contract applies verbatim -- on `Discuss` the agent halts the in-progress sequence and resumes only on an explicit user signal.
41
-
42
- ## Work selection fork (#2542 / #2402)
43
-
44
- Directive does not guess your mix: **ordered plan** (`task plan-sequence:*`) when you know the next units in order, or **ranked queue** (`task triage:queue`) when picking from the backlog. Labels bias the queue; they do not override an active plan.
45
-
46
- ! Before Phase 2 on bare "what's next?", run `task plan-sequence:current`. Active sequence → that entry only; exhausted → fail closed. Explicit "what's the queue?" / "build a cohort" → Phase 2. See `commands.md` § Backlog Triage → Two paths.
47
-
48
- ## Phase 0 -- Sync
49
-
50
- ! Probe cache freshness before doing any classification or selection. Stale cache reads produce stale decisions; the gate is the contract.
51
-
52
- 1. ! Run `task verify:cache-fresh` (D5 / #1127). Exit 0 -> proceed to Phase 1. Exit 1 (stale or blocked) -> refresh per the printed remediation. Exit 2 (no bootstrap) -> run `task triage:bootstrap` first. When the cache has zero entries, read paths auto-fetch from GitHub first (#2575).
53
- 2. ~ Refresh path: `task cache:fetch-all -- --source=github-issue --repo OWNER/NAME` for an already-bootstrapped project; `task triage:bootstrap` for a first-time seed.
54
- 3. ~ If `xbrief/active/*.xbrief.json` references are in play, run `task triage:refresh-active` to surface drift before the queue is rendered.
55
- 4. ~ When the session one-liner carries `[scope-drift] N` (D14 / #1133), run `task triage:scope-drift` and choose subscribe / ignore before walking the queue.
56
- 5. ⊗ Walk the queue against a stale cache -- the audit log will record decisions against bodies the operator never actually saw.
57
-
58
- ## Phase 1 -- Classify
59
-
60
- ! Inspect the auto-classification audit log so manually-decided items are not re-walked, and surface anomalies before the queue render.
61
-
62
- 1. ! Run `task triage:classify --list` (D10 / #1129) to render effective rules and hold-markers.
63
- 2. ! Walk recent `xbrief/.eval/candidates.jsonl` entries for anomalies (classifier disagreement, repeated defer, stale needs-ac); surface before Phase 2; do NOT auto-fix.
64
- 3. ~ Scope widen/narrow via `task triage:scope --list` (D12 / #1131); edits belong in PROJECT-DEFINITION.
65
- 4. ~ Label hygiene: recommend repo labels via `gh label list` when unlabeled; do not invent labels or block creation solely for missing labels.
66
- 5. ⊗ Re-classify terminally decided items without operator approval -- supersession is `task triage:reset <N>` only.
67
-
68
- ## Phase 2 -- Present
69
-
70
- ! Apply the Work selection fork gate (#2542): when no ordered-plan is active, render `task triage:queue` before suggesting work (#1149). Active sequence yields to the ordered-plan entry (#2402).
71
-
72
- 1. ! Run `task triage:queue --limit=N` (D11 / #1128) -- default `N=10`. Groups `[RESUME]` -> `[URGENT]` -> untriaged -> other; ranking via `plan.policy.triageRankingLabels[]`, tiebreak `updated_at` desc.
73
- 2. ! For per-item detail, run `task triage:show <N>` (default) or `task triage:show --format=operator <N>` (#2890) -- cached payload, latest decision, audit timeline, active-xBRIEF flag; operator format is the pasteable Phase 3 brief backbone. Exit 0 on hit, 1 on cache miss (re-sync per Phase 0).
74
- 3. ~ Present the ranked **queue listing** verbatim; do NOT silently re-rank, drop, or annotate the listing beyond the canonical renderer. This queue non-annotation rule does **not** forbid Phase 3 per-candidate operator briefs or leans (see Phase 3 / #2890).
75
- 4. ⊗ Recommend a specific issue without `task triage:queue` first, or an issue absent from the queue without `task triage:show` to surface why.
76
-
77
- ## Phase 3 -- Decide
78
-
79
- ! Walk per-item decisions through the canonical `task triage:*` verbs (tasks own audit-log append / schema / `xbrief/proposed/` write).
80
-
81
- ! **Operator brief (same turn as menu) (#2890 / #3116):** Before every per-item decision menu, present an operator brief in the **same operator-visible message/surface** as the menu, containing at least: **URL-first** lead (canonical issue URL as the first line for that item, or `#N title` + URL); labels (or explicit none); **current-state validity** (`still-open` | `partial` | `likely-shipped` | `needs-re-scope`) + one-line evidence (linked closed PR, code path, or "no evidence of fix"); 2–5 line problem/context summary; AC bullets or explicit "thin body / no AC"; agent **lean** + one-line why (Accept / Defer / Reject / Needs-AC / …). ~ Prefer `task triage:show --format=operator <N>` as the brief backbone (URL-first + validity placeholder); agent still owns validity verdict and lean. ⊗ Menu-only or chip-only Phase 3 turns without that brief. ⊗ Brief-only turn followed by a later chip/menu-only turn that does not restate the brief. ⊗ Body-only summary without validity check against current master, closed children, or linked PRs.
82
-
83
- ! **Host structured-question adapter:** On chips / `ask_user` / similar UIs (e.g. OpenClaw `ask_user`), keep the prose brief in chat; structured options are **actions only** (Accept / Defer / Reject / Needs-AC / Mark duplicate / Discuss / Back). Option labels ≉ substitute for the brief.
84
-
85
- For each candidate, render the canonical numbered action menu and dispatch:
86
-
87
- ```
88
- What would you like to do with this candidate?
89
- 1. Accept -- `task triage:accept -- --issue <N> --repo OWNER/NAME`
90
- 2. Reject -- `task triage:reject -- --issue <N> --repo OWNER/NAME`
91
- 3. Defer -- `task triage:defer -- --issue <N> --repo OWNER/NAME [--resume-on <event>]`
92
- 4. Needs-AC -- `task triage:needs-ac -- --issue <N> --repo OWNER/NAME`
93
- 5. Mark duplicate -- `task triage:mark-duplicate -- --issue <N> --of <of-issue> --repo OWNER/NAME`
94
- 6. Discuss
95
- 7. Back
96
- ```
97
-
98
- - ! Map user replies only to the displayed number (`1`-`7`) or exact displayed option text. ⊗ Do NOT infer from alphabetic host affordances or bare letters such as `d` / `b` unless those letters were visibly rendered as choices.
99
- - ! On `Discuss`, halt immediately, prompt `What would you like to discuss?`, resume only on explicit user signal. ⊗ Implicit resumption.
100
- - ! On `Back`, un-buffer prior selection and re-render its action menu only before a `task triage:*` dispatch; after dispatch use `task triage:reset`.
101
- - ~ Bulk: `task triage:bulk-{accept,reject,defer,needs-ac}`; results still flow through the audit log.
102
- - ⊗ Write to `xbrief/proposed/` directly -- only `task triage:accept` is authorised.
103
- - ~ **Accept → pending chain (#1136):** `task triage:accept` ingests into **`proposed/`**. To stage into WIP (`pending/`) in one operator action: `task triage:accept -- --issue <N> --repo OWNER/NAME --auto-promote` (WIP cap still enforced; use `--force` on the accept command for WIP override). Separately, promote an already-accepted proposed scope by issue: `task scope:promote -- --from-issue=<N> [--repo OWNER/NAME]` (gates on latest `candidates.jsonl` decision = `accept`; non-accept refuses unless `--force-no-cache`; no decision soft-warns, `--strict` fails). Path-based `task scope:promote -- <file>` remains ungated for refinement scaffolds.
104
- - ? **After Accept (#3708):** offer `deft-directive-design-critique`. Optional; same after `--auto-promote` (promote already happened). Decline writes nothing. Menu: 1. Run critique (existing ADR-005 path) 2. Skip 3. Discuss 4. Back. Back = Skip (do not re-open Accept; undo is `task triage:reset`).
105
-
106
- ## Phase 4 -- Audit
107
-
108
- ! Confirm the session's decisions landed coherently before exiting the skill.
109
-
110
- 1. ! Run `task triage:audit --format=json` (D11 / #1128); optional `#1180` filters `--since` / `--action`. Transform with `jq` -- framework does not compute trends.
111
- 2. ! Run `task triage:summary` (D2 / #1122) -- `[triage] N untriaged · S stale-defer · M in-flight · WIP X/Y [⚠] [· [scope-drift] N]`.
112
- 3. ~ Non-zero `[scope-drift]` → surface `task triage:scope-drift` + subscribe/unsubscribe/ignore remediation; then `task triage:bootstrap -- --resume`.
113
- 4. ~ Stale accept (no active xBRIEF ref) → re-ingest or `task triage:reset`.
114
- 5. ⊗ Skip Phase 4 audit.
115
- 6. ! Umbrella/epic status: REST comments → `## Current shape (as of pass-N)` (#2066 / #1152); never body alone.
116
-
117
- ## Reversibility
118
-
119
- ! Undo via `task triage:reset <N>` (Layer 5; history never deleted). ⊗ Edit/delete `xbrief/.eval/candidates.jsonl` to "undo".
120
-
121
- ## Quarterly closed-entry archive vs TTL prune (#1137)
122
-
123
- Live walkers (`triage:queue`, scope-drift, bootstrap) scan `.deft-cache/github-issue/`. Closed issues can linger forever. Operators may run an **explicit, reversible** archive pass — never auto on bootstrap/session/check.
124
-
125
- | Tool | What it does |
126
- | --- | --- |
127
- | `task triage:cache-archive` | Move **closed** + aged (default 30d) entries → `.deft-cache/archived/github-issue/...` with `archive-meta.json`. Skips open lifecycle scopes. `--dry-run` first. |
128
- | `task triage:archive-list` / `task triage:restore-from-archive` | List / move back to live. |
129
- | `task cache:prune` | **TTL hard-delete** by `expires_at` — **not** reversible; **not** closed-state archive. |
130
-
131
- ! Prefer archive for closed clutter; use prune only for expired TTL / cap eviction. ⊗ Wire archive into session-start or `task check`.
132
-
133
- ## Anti-Patterns
134
-
135
- - ⊗ Recommend work without `task triage:queue` (#1149).
136
- - ⊗ Conclude "nothing to do" from folder scans or live GitHub alone (#2576).
137
- - ⊗ Stale-cache walk; reimplement audit/`proposed/` writes; treat defer/needs-ac as terminal; edit candidates.jsonl; menu-only Phase 3 without operator brief (#2890); body-only brief without URL-first or current-state validity (#3116).
32
+ - Triggers still match so `packs:slice` finds this stub.
33
+ - ⊗ Do not load the old classify / Phase 1-3 playbook.
138
34
 
139
35
  ## EXIT
140
36
 
141
- ! On opt-out: `deft-directive-triage complete -- exiting skill.` Chain: `deft-directive-refinement` (accepted items) · `deft-directive-swarm` (cohort) · `task cache:fetch-all` then re-enter. ⊗ Silent exit.
37
+ ! On any trigger: print `deft-directive-triage withdrawn -- exiting skill.` Point at https://github.com/deftai/directive/issues/4070 and #4071.
38
+
39
+ ! Work selection during the gap: `task plan-sequence:current`, then a read-only `task triage:queue` listing.
142
40
 
143
- ## References
41
+ `task triage:classify -- --mirror` (dry-run or `--apply`).
42
+ ⊗ Treat leftover `triaged` / `triage:*` chips as a decision.
144
43
 
145
- - #1119 D6; #1128 D11 (`triage:queue` / `show` / `audit`); #2890 Phase 3 operator brief; #3116 validity + URL-first; #1122 / #1123 / #1127 / #1129 / #1131; #1136 (`scope:promote --from-issue` / `triage:accept --auto-promote`); #3708 (post-Accept design-critique offer)
146
- - Siblings: `deft-directive-refinement`, `deft-directive-swarm`, `deft-directive-sync`
44
+ `task triage:accept` / `issue:ingest` stay. Do not close #1423, #3579, #2611, or #3923.
@@ -22,7 +22,7 @@ vars:
22
22
 
23
23
  tasks:
24
24
  classify:
25
- desc: "Inspect / validate triageAutoClassify + triageLabelMirror; Tier-1 SCM label mirror (#1129 / #1423). -- task triage:classify -- [--list | --validate | --mirror [--apply]]"
25
+ desc: "Inspect / validate triageAutoClassify + triageLabelMirror. --mirror is withdrawn (#4070)."
26
26
  internal: true
27
27
  deps: [":engine:_ts-build"]
28
28
  dir: '{{.USER_WORKING_DIR}}'
@@ -30,3 +30,13 @@ tasks:
30
30
  - task: :engine:invoke
31
31
  vars:
32
32
  ENGINE_CMD: 'triage-classify --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
33
+
34
+ strip-withdrawn-chips:
35
+ desc: "Remaining-set strip of withdrawn triaged / triage:* chips (#4070). Dry-run default; --apply writes. --emit-digest prints shadowed vs faithful classify rows for #4071."
36
+ internal: true
37
+ deps: [":engine:_ts-build"]
38
+ dir: '{{.USER_WORKING_DIR}}'
39
+ cmds:
40
+ - task: :engine:invoke
41
+ vars:
42
+ ENGINE_CMD: 'triage-strip-withdrawn --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
@@ -17,11 +17,11 @@ Deft is installed in .deft/core/. Full guidelines: .deft/core/main.md
17
17
 
18
18
  ## Session routing (#2176)
19
19
 
20
- ! **Read-only default** until mutation intent: load AGENTS.md / main.md / USER.md / `xbrief/PROJECT-DEFINITION.xbrief.json`; resolve USER.md via `deft session:start` (`USER.md resolved …`; win32 `%APPDATA%\deft\USER.md`; unix `~/.config/deft/USER.md`; ⊗ invent `~/.config/deft` on Windows #2544); confirm Deft alignment + addressing-name; ⊗ no mutable `deft session:start` / triage welcome / sync / branch-policy unless asked or implementation-ready (#2176) — `.deft/core/commands.md` § Session routing. Bootstrap: cold-start → README § Cold-start (#2273) ⊗ never `.deft/core/`; pre-cutover → setup Pre-Cutover (#2068); missing USER.md / PROJECT-DEFINITION → setup Phase 1/2 (#1813) ⊗ before answering; else main → USER → PROJECT-DEFINITION; ~ sync. Mutation → `deft session:start` then `deft verify:session-ritual -- --tier=gated` (#1149). Occupancy (#3433/#3611/#3755): bearer-id, not auth/lineage; `occupancy:grant` → `commands.md`. ? `deft session:start -- --read-only` (#2176).
20
+ ! **Read-only default** until mutation intent: load AGENTS.md / main.md / USER.md / `xbrief/PROJECT-DEFINITION.xbrief.json`; resolve USER.md via `deft session:start` (`USER.md resolved …`; win32 `%APPDATA%\deft\USER.md`; unix `~/.config/deft/USER.md`; ⊗ invent `~/.config/deft` on Windows #2544); confirm Deft alignment + addressing-name; ⊗ no mutable `deft session:start` / triage welcome / sync / branch-policy unless asked or implementation-ready (#2176) — `.deft/core/commands.md` § Session routing. Bootstrap: cold-start → README § Cold-start (#2273) ⊗ never `.deft/core/`; pre-cutover → setup Pre-Cutover (#2068); missing USER.md / PROJECT-DEFINITION → setup Phase 1/2 (#1813) ⊗ before answering; else main → USER → PROJECT-DEFINITION; ~ sync. Mutation → `deft session:start` then `deft verify:session-ritual -- --tier=gated` (#1149). Occupancy (#3433/#3611/#3755/#3926): bearer-id, not auth/lineage; `occupancy:grant` → `commands.md`. ? `deft session:start -- --read-only` (#2176).
21
21
 
22
22
  ## Session-start ritual (#1149)
23
23
 
24
- ! On **mutation** session start, run `deft session:start`; before code-writing or `start_agent` dispatch run `deft verify:session-ritual -- --tier=gated` (stale after `plan.policy.sessionRitualStalenessHours`; records `deft verify:tools` / `deft doctor` / `deft verify:cache-fresh` / `deft agents:refresh` / `npm i -g @deftai/directive@latest`; #1149 / #1348) — `.deft/core/commands.md` § Session-start ritual. Recovery: `deft session:ready` (one-shot: start + gated ritual + cache recovery; #2993). ! SCM mirror tip (#3124): restate existence + get-the-most user-visible when tip fires (depth `commands.md`). Absorb tip without restating.
24
+ ! On **mutation** session start, run `deft session:start`; before code-writing or `start_agent` dispatch run `deft verify:session-ritual -- --tier=gated` (stale after `plan.policy.sessionRitualStalenessHours`; records `deft verify:tools` / `deft doctor` / `deft verify:cache-fresh` / `deft agents:refresh` / `npm i -g @deftai/directive@latest`; #1149 / #1348) — `.deft/core/commands.md` § Session-start ritual. Recovery: `deft session:ready` (one-shot: start + gated ritual + cache recovery; #2993). The #3124 SCM mirror tip does not fire (`triage:classify --mirror` withdrawn, #4070).
25
25
 
26
26
  ## WIP cap
27
27
 
@@ -39,7 +39,7 @@ Legacy `vbrief/`; `deft migrate:xbrief` (v0.6→v0.8). New writes `"version": "0
39
39
 
40
40
  ## Cache-as-authoritative work selection (#1149)
41
41
 
42
- ! "what next?" → two work-selection modes (#2402): **ordered plan** (`deft plan-sequence:*`) or **ranked queue** (`deft triage:queue`) — `commands.md` § Backlog Triage → Two paths. ordered-plan first; else `deft-directive-triage` + `deft triage:queue --limit=10` (D11). Empty cache auto-populates from GitHub (#2575).
42
+ ! "what next?" → two work-selection modes (#2402 / #1149): **ordered-plan first** (`deft plan-sequence:current`), then a read-only `deft triage:queue --limit=10` listing (D11) — `commands.md` § Backlog Triage → Two paths. `deft-directive-triage` classify withdrawn (#4070 / #4071). Empty cache auto-populates from GitHub (#2575).
43
43
 
44
44
  ⊗ Recommend work without queue/plan consult; ⊗ widen past an exhausted plan; ⊗ conclude "nothing to do" from `xbrief/{pending,active}` folder scans or GitHub-only reads without `deft triage:queue` (#2576).
45
45
 
@@ -14,6 +14,8 @@ Dispatch envelope skeleton for one critic or synthesis pass. Fill the fields. Re
14
14
  - SHA at dispatch:
15
15
  - Target (work issue or umbrella):
16
16
  - Audit targets (marker ids, comma-separated, or `none`; ids only, no parent rationale):
17
+ - Seat families (N≥3: three claimed families before spawn):
18
+ - Launcher (spawn_subagent | grok | claude | codex | paste-ready):
17
19
 
18
20
  ## Forbidden inputs
19
21
 
@@ -40,6 +42,7 @@ Read, do not restate:
40
42
  | Parent-facing dispatch rules | Parent-facing dispatch rules |
41
43
  | Critic method | Critic method |
42
44
  | Envelope and ceiling | Envelope and ceiling |
45
+ | Seat families / Grok Build launcher | Envelope and ceiling |
43
46
  | Comment lead (model then role) | Stop 3 — Critic envelope |
44
47
  | Fresh reiteration | Stop 4 — Residual reiteration |
45
48
  | Operator-gated loop | Operator-gated loop |