@deftai/directive-content 0.65.0 → 0.66.1

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.
Files changed (74) hide show
  1. package/.githooks/pre-commit +3 -1
  2. package/QUICK-START.md +8 -4
  3. package/Taskfile.yml +31 -14
  4. package/UPGRADING.md +19 -5
  5. package/commands.md +46 -41
  6. package/conventions/rule-ownership.json +1 -1
  7. package/docs/BROWNFIELD.md +37 -33
  8. package/docs/directive-lifecycle.md +2 -2
  9. package/docs/getting-started.md +8 -8
  10. package/package.json +1 -1
  11. package/packs/skills/skills-pack-0.1.json +28 -28
  12. package/skills/deft-directive-article-review/SKILL.md +4 -4
  13. package/skills/deft-directive-build/SKILL.md +37 -37
  14. package/skills/deft-directive-cost/SKILL.md +6 -6
  15. package/skills/deft-directive-debug/SKILL.md +4 -4
  16. package/skills/deft-directive-decompose/SKILL.md +15 -15
  17. package/skills/deft-directive-gh-arch/SKILL.md +3 -3
  18. package/skills/deft-directive-gh-slice/SKILL.md +2 -2
  19. package/skills/deft-directive-interview/SKILL.md +12 -12
  20. package/skills/deft-directive-pre-pr/SKILL.md +3 -3
  21. package/skills/deft-directive-probe/SKILL.md +9 -9
  22. package/skills/deft-directive-refinement/SKILL.md +65 -65
  23. package/skills/deft-directive-release/SKILL.md +3 -3
  24. package/skills/deft-directive-review-cycle/SKILL.md +4 -4
  25. package/skills/deft-directive-setup/SKILL.md +71 -71
  26. package/skills/deft-directive-swarm/SKILL.md +94 -94
  27. package/skills/deft-directive-sync/SKILL.md +55 -55
  28. package/skills/deft-directive-triage/SKILL.md +15 -15
  29. package/tasks/architecture.yml +3 -1
  30. package/tasks/cache.yml +20 -10
  31. package/tasks/capacity.yml +8 -4
  32. package/tasks/change.yml +8 -10
  33. package/tasks/changelog.yml +3 -1
  34. package/tasks/codebase.yml +20 -10
  35. package/tasks/commit.yml +4 -8
  36. package/tasks/engine.yml +18 -4
  37. package/tasks/install.yml +4 -8
  38. package/tasks/issue.yml +8 -10
  39. package/tasks/migrate.yml +24 -8
  40. package/tasks/packs.yml +32 -16
  41. package/tasks/policy.yml +24 -12
  42. package/tasks/pr.yml +16 -8
  43. package/tasks/prd.yml +9 -12
  44. package/tasks/project.yml +14 -14
  45. package/tasks/reconcile.yml +4 -8
  46. package/tasks/roadmap.yml +9 -5
  47. package/tasks/scm.yml +36 -18
  48. package/tasks/scope-undo.yml +3 -1
  49. package/tasks/scope.yml +40 -26
  50. package/tasks/session.yml +4 -2
  51. package/tasks/slice.yml +8 -10
  52. package/tasks/spec.yml +10 -12
  53. package/tasks/swarm.yml +20 -10
  54. package/tasks/triage-actions.yml +32 -16
  55. package/tasks/triage-bootstrap.yml +4 -2
  56. package/tasks/triage-bulk.yml +20 -10
  57. package/tasks/triage-classify.yml +4 -2
  58. package/tasks/triage-queue.yml +12 -6
  59. package/tasks/triage-reconcile.yml +4 -2
  60. package/tasks/triage-scope-drift.yml +4 -2
  61. package/tasks/triage-scope.yml +4 -2
  62. package/tasks/triage-smoketest.yml +4 -2
  63. package/tasks/triage-subscribe.yml +8 -4
  64. package/tasks/triage-summary.yml +4 -2
  65. package/tasks/triage-welcome.yml +4 -2
  66. package/tasks/ts.yml +3 -1
  67. package/tasks/umbrella.yml +1 -7
  68. package/tasks/vbrief.yml +25 -17
  69. package/tasks/verify.yml +102 -50
  70. package/templates/agent-prompt-preamble.md +26 -23
  71. package/templates/agents-entry.md +33 -19
  72. package/vbrief/conformance/extensions/valid/extension-at-root.vbrief.json +31 -0
  73. package/vbrief/conformance/extensions/valid/nested-extension-value.vbrief.json +19 -0
  74. package/vbrief/schemas/xbrief-core-0.8.schema.json +786 -0
package/tasks/scope.yml CHANGED
@@ -34,36 +34,36 @@ vars:
34
34
  # Taskfile.yml also sets this (#540).
35
35
 
36
36
  tasks:
37
- _ensure-ts:
38
- internal: true
39
- desc: "Build the TS engine before lifecycle gates (#1828 s4)"
40
- dir: '{{.USER_WORKING_DIR}}'
41
- cmds:
42
- - pnpm --dir "{{.DEFT_ROOT}}" run build
43
37
 
44
38
  promote:
45
39
  desc: "Promote a vBRIEF scope: proposed/ -> pending/ (status: pending)"
46
40
  dir: '{{.USER_WORKING_DIR}}'
47
41
  deps:
48
- - _ensure-ts
42
+ - task: :engine:_ts-build
49
43
  cmds:
50
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scope-lifecycle promote {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
44
+ - task: :engine:invoke
45
+ vars:
46
+ ENGINE_CMD: 'scope-lifecycle promote {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
51
47
 
52
48
  activate:
53
49
  desc: "Activate a vBRIEF scope: pending/ -> active/ (status: running)"
54
50
  dir: '{{.USER_WORKING_DIR}}'
55
51
  deps:
56
- - _ensure-ts
52
+ - task: :engine:_ts-build
57
53
  cmds:
58
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scope-lifecycle activate {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
54
+ - task: :engine:invoke
55
+ vars:
56
+ ENGINE_CMD: 'scope-lifecycle activate {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
59
57
 
60
58
  complete:
61
59
  desc: "Complete a vBRIEF scope: active/ -> completed/ (status: completed)"
62
60
  dir: '{{.USER_WORKING_DIR}}'
63
61
  deps:
64
- - _ensure-ts
62
+ - task: :engine:_ts-build
65
63
  cmds:
66
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scope-lifecycle complete {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
64
+ - task: :engine:invoke
65
+ vars:
66
+ ENGINE_CMD: 'scope-lifecycle complete {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
67
67
 
68
68
  fail:
69
69
  # Terminal ``failed`` transition (#614). Parallels ``scope:complete``
@@ -79,49 +79,61 @@ tasks:
79
79
  desc: "Fail a vBRIEF scope: active/ -> completed/ (status: failed)"
80
80
  dir: '{{.USER_WORKING_DIR}}'
81
81
  deps:
82
- - _ensure-ts
82
+ - task: :engine:_ts-build
83
83
  cmds:
84
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scope-lifecycle fail {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
84
+ - task: :engine:invoke
85
+ vars:
86
+ ENGINE_CMD: 'scope-lifecycle fail {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
85
87
 
86
88
  cancel:
87
89
  desc: "Cancel a vBRIEF scope: any folder -> cancelled/ (status: cancelled)"
88
90
  dir: '{{.USER_WORKING_DIR}}'
89
91
  deps:
90
- - _ensure-ts
92
+ - task: :engine:_ts-build
91
93
  cmds:
92
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scope-lifecycle cancel {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
94
+ - task: :engine:invoke
95
+ vars:
96
+ ENGINE_CMD: 'scope-lifecycle cancel {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
93
97
 
94
98
  restore:
95
99
  desc: "Restore a cancelled vBRIEF scope: cancelled/ -> proposed/ (status: proposed)"
96
100
  dir: '{{.USER_WORKING_DIR}}'
97
101
  deps:
98
- - _ensure-ts
102
+ - task: :engine:_ts-build
99
103
  cmds:
100
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scope-lifecycle restore {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
104
+ - task: :engine:invoke
105
+ vars:
106
+ ENGINE_CMD: 'scope-lifecycle restore {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
101
107
 
102
108
  block:
103
109
  desc: "Block a vBRIEF scope: stays in active/ (status: blocked)"
104
110
  dir: '{{.USER_WORKING_DIR}}'
105
111
  deps:
106
- - _ensure-ts
112
+ - task: :engine:_ts-build
107
113
  cmds:
108
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scope-lifecycle block {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
114
+ - task: :engine:invoke
115
+ vars:
116
+ ENGINE_CMD: 'scope-lifecycle block {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
109
117
 
110
118
  unblock:
111
119
  desc: "Unblock a vBRIEF scope: stays in active/ (status: running)"
112
120
  dir: '{{.USER_WORKING_DIR}}'
113
121
  deps:
114
- - _ensure-ts
122
+ - task: :engine:_ts-build
115
123
  cmds:
116
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scope-lifecycle unblock {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
124
+ - task: :engine:invoke
125
+ vars:
126
+ ENGINE_CMD: 'scope-lifecycle unblock {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
117
127
 
118
128
  decompose:
119
129
  desc: "Apply/check an approved epic/phase -> story decomposition draft"
120
130
  dir: '{{.USER_WORKING_DIR}}'
121
131
  deps:
122
- - _ensure-ts
132
+ - task: :engine:_ts-build
123
133
  cmds:
124
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scope-decompose {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
134
+ - task: :engine:invoke
135
+ vars:
136
+ ENGINE_CMD: 'scope-decompose {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
125
137
 
126
138
  # Operator-driven demote (D1 / #1121). Moves a vBRIEF scope from
127
139
  # vbrief/pending/ back to vbrief/proposed/ and appends a structured
@@ -136,6 +148,8 @@ tasks:
136
148
  desc: "Demote a vBRIEF scope: pending/ -> proposed/ (#1121). Single-file or --batch --older-than-days N (default 45)."
137
149
  dir: '{{.USER_WORKING_DIR}}'
138
150
  deps:
139
- - _ensure-ts
151
+ - task: :engine:_ts-build
140
152
  cmds:
141
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scope-demote {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
153
+ - task: :engine:invoke
154
+ vars:
155
+ ENGINE_CMD: 'scope-demote {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
package/tasks/session.yml CHANGED
@@ -12,8 +12,10 @@ tasks:
12
12
  start:
13
13
  desc: "Run quick-tier session-start ritual and write .deft/ritual-state.json (#1348). Flags: --defer step=reason / --json"
14
14
  dir: '{{.USER_WORKING_DIR}}'
15
- deps: [":ts:build"]
15
+ deps: [":engine:_ts-build"]
16
16
  env:
17
17
  PYTHONUTF8: "1"
18
18
  cmds:
19
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" session:start --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
19
+ - task: :engine:invoke
20
+ vars:
21
+ ENGINE_CMD: 'session:start --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
package/tasks/slice.yml CHANGED
@@ -43,27 +43,25 @@ vars:
43
43
  # `--wave-N=<csv>`, `--actor`, etc.) via {{.CLI_ARGS}}.
44
44
 
45
45
  tasks:
46
- _ensure-ts:
47
- internal: true
48
- desc: "Build the TS engine before slice gates (#1828 s4)"
49
- dir: '{{.USER_WORKING_DIR}}'
50
- cmds:
51
- - pnpm --dir "{{.DEFT_ROOT}}" run build
52
46
 
53
47
  record-existing:
54
48
  desc: "Retrofit a slices.jsonl entry for a hand-filed cohort (#1147 / N7). Windows note (#1231): CLI_ARGS is forwarded bare to argparse so values containing spaces (e.g. --notes \"A note with spaces\") may be re-split by the shell -- prefer hyphenated single-token values like --notes=backfill-after-N7. -- task slice:record-existing -- --umbrella=N --children=A,B,C [--wave-1=A,B] [--wave-2=C] [--actor=manual:operator] [--expected-close-signal=all-children-merged] [--sliced-at=ISO] [--notes=TEXT] [--dry-run] [--force] [--skip-validation] [--repo OWNER/NAME]"
55
49
  internal: true
56
50
  dir: '{{.USER_WORKING_DIR}}'
57
51
  deps:
58
- - _ensure-ts
52
+ - task: :engine:_ts-build
59
53
  cmds:
60
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" slice record-existing {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
54
+ - task: :engine:invoke
55
+ vars:
56
+ ENGINE_CMD: 'slice record-existing {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
61
57
 
62
58
  list:
63
59
  desc: "List recorded slices in vbrief/.eval/slices.jsonl (umbrella + child count + actor + sliced_at). -- task slice:list [-- --json]"
64
60
  internal: true
65
61
  dir: '{{.USER_WORKING_DIR}}'
66
62
  deps:
67
- - _ensure-ts
63
+ - task: :engine:_ts-build
68
64
  cmds:
69
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" slice list {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
65
+ - task: :engine:invoke
66
+ vars:
67
+ ENGINE_CMD: 'slice list {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
package/tasks/spec.yml CHANGED
@@ -11,28 +11,26 @@ vars:
11
11
  # on Windows under `uv --project "{{.DEFT_ROOT}}" run python` (#566).
12
12
 
13
13
  tasks:
14
- _ts-build:
15
- internal: true
16
- desc: "Build @deftai/cli dist/ before TS-backed render gates run (#1854 s2)."
17
- dir: '{{.USER_WORKING_DIR}}'
18
- cmds:
19
- - pnpm --dir "{{.DEFT_ROOT}}" run build
20
14
 
21
15
  validate:
22
- desc: Validate that vbrief/specification.vbrief.json exists and is well-formed JSON
16
+ desc: Validate that the specification artifact exists and is well-formed JSON
23
17
  dir: '{{.USER_WORKING_DIR}}'
24
18
  deps:
25
- - _ts-build
19
+ - task: :engine:_ts-build
26
20
  cmds:
27
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" spec-validate "{{.USER_WORKING_DIR}}/vbrief/specification.vbrief.json"
21
+ - task: :engine:invoke
22
+ vars:
23
+ ENGINE_CMD: 'spec-validate --project-root "{{.USER_WORKING_DIR}}"'
28
24
 
29
25
  render:
30
- desc: Render vbrief/specification.vbrief.json to SPECIFICATION.md
26
+ desc: Render the specification artifact to SPECIFICATION.md
31
27
  dir: '{{.USER_WORKING_DIR}}'
32
28
  deps:
33
- - _ts-build
29
+ - task: :engine:_ts-build
34
30
  cmds:
35
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" spec-render "{{.USER_WORKING_DIR}}/vbrief/specification.vbrief.json" "{{.USER_WORKING_DIR}}/SPECIFICATION.md"
31
+ - task: :engine:invoke
32
+ vars:
33
+ ENGINE_CMD: 'spec-render --project-root "{{.USER_WORKING_DIR}}"'
36
34
 
37
35
  pipeline:
38
36
  desc: Run full spec pipeline (validate then render)
package/tasks/swarm.yml CHANGED
@@ -7,12 +7,14 @@ tasks:
7
7
  readiness:
8
8
  desc: "Report whether story vBRIEFs are ready for concurrent swarm allocation"
9
9
  dir: '{{.USER_WORKING_DIR}}'
10
- deps: [":ts:build"]
10
+ deps: [":engine:_ts-build"]
11
11
  env:
12
12
  PYTHONUTF8: "1"
13
13
  cmds:
14
14
  # Keep CLI_ARGS bare; go-task shell-escapes pass-through args and quoting breaks globs/multi-arg calls.
15
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" swarm-readiness {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
15
+ - task: :engine:invoke
16
+ vars:
17
+ ENGINE_CMD: 'swarm-readiness {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
16
18
 
17
19
  # swarm:launch -- deterministic headless launch engine (#1387). Turns an
18
20
  # operator-supplied, pre-approved cohort into a ready-to-spawn launch
@@ -29,10 +31,12 @@ tasks:
29
31
  # Companion test: tests/cli/test_swarm_launch.py
30
32
  launch:
31
33
  desc: "Resolve a pre-approved cohort, enforce the #810 + swarm:readiness gates and sub-agent backend policy per story, and emit the launch-manifest JSON (#1387, #1531e)"
32
- deps: [":ts:build"]
34
+ deps: [":engine:_ts-build"]
33
35
  dir: '{{.USER_WORKING_DIR}}'
34
36
  cmds:
35
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" swarm-launch {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
37
+ - task: :engine:invoke
38
+ vars:
39
+ ENGINE_CMD: 'swarm-launch {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
36
40
 
37
41
  # swarm:routing-set -- record an operator coding sub-agent model decision
38
42
  # (#1739) into the gitignored, per-machine .deft/routing.local.json keyed by
@@ -41,10 +45,12 @@ tasks:
41
45
  # (resolved_model / model_source) so dispatch can actually honor it.
42
46
  routing-set:
43
47
  desc: "Record an operator coding sub-agent model decision (#1739): --role <role> (--model <slug> | --harness-default) [--provider <p>]. Writes the gitignored, per-machine .deft/routing.local.json."
44
- deps: [":ts:build"]
48
+ deps: [":engine:_ts-build"]
45
49
  dir: '{{.USER_WORKING_DIR}}'
46
50
  cmds:
47
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" swarm-routing-set {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
51
+ - task: :engine:invoke
52
+ vars:
53
+ ENGINE_CMD: 'swarm-routing-set {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
48
54
 
49
55
  # swarm:verify-review-clean -- cohort-level CLEAN verification gate (#1364).
50
56
  # Mandate the monitor invokes this after Phase 6 pollers report and BEFORE
@@ -59,10 +65,12 @@ tasks:
59
65
  # Skill citation: skills/deft-directive-swarm/SKILL.md Phase 5 Exit Condition + Phase 5 -> 6 gate
60
66
  verify-review-clean:
61
67
  desc: "Verify EVERY PR in a swarm cohort is CLEAN on current HEAD (confidence > 3, no P0/P1, not errored) before raising the Phase 5 -> 6 merge gate (#1364)"
62
- deps: [":ts:build"]
68
+ deps: [":engine:_ts-build"]
63
69
  dir: '{{.USER_WORKING_DIR}}'
64
70
  cmds:
65
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" swarm-verify-review-clean {{.CLI_ARGS}}
71
+ - task: :engine:invoke
72
+ vars:
73
+ ENGINE_CMD: 'swarm-verify-review-clean {{.CLI_ARGS}}'
66
74
 
67
75
  # swarm:complete-cohort -- deterministic cohort completion sweep (#1487).
68
76
  # The REQUIRED Phase 6 step that moves a finished cohort's story vBRIEFs
@@ -79,7 +87,9 @@ tasks:
79
87
  # Skill citation: skills/deft-directive-swarm/SKILL.md Phase 6 cohort completion sweep
80
88
  complete-cohort:
81
89
  desc: "Sweep a finished swarm cohort's stories active/ -> completed/ and complete their epic parents, keeping vbrief:validate green (#1487)"
82
- deps: [":ts:build"]
90
+ deps: [":engine:_ts-build"]
83
91
  dir: '{{.USER_WORKING_DIR}}'
84
92
  cmds:
85
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" swarm-complete-cohort {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
93
+ - task: :engine:invoke
94
+ vars:
95
+ ENGINE_CMD: 'swarm-complete-cohort {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
@@ -32,63 +32,79 @@ tasks:
32
32
  accept:
33
33
  desc: "Accept an issue for triage. Records an audit entry. (#845 Story 3)"
34
34
  internal: true
35
- deps: [":ts:build"]
35
+ deps: [":engine:_ts-build"]
36
36
  dir: '{{.USER_WORKING_DIR}}'
37
37
  cmds:
38
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions accept {{.CLI_ARGS}}
38
+ - task: :engine:invoke
39
+ vars:
40
+ ENGINE_CMD: 'triage-actions accept {{.CLI_ARGS}}'
39
41
 
40
42
  reject:
41
43
  desc: "Reject an issue. Closes upstream via gh + applies triage-rejected label; rolls audit back on gh failure. (#845 Story 3)"
42
44
  internal: true
43
- deps: [":ts:build"]
45
+ deps: [":engine:_ts-build"]
44
46
  dir: '{{.USER_WORKING_DIR}}'
45
47
  cmds:
46
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions reject {{.CLI_ARGS}}
48
+ - task: :engine:invoke
49
+ vars:
50
+ ENGINE_CMD: 'triage-actions reject {{.CLI_ARGS}}'
47
51
 
48
52
  defer:
49
53
  desc: "Defer an issue. Records an audit entry. (#845 Story 3)"
50
54
  internal: true
51
- deps: [":ts:build"]
55
+ deps: [":engine:_ts-build"]
52
56
  dir: '{{.USER_WORKING_DIR}}'
53
57
  cmds:
54
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions defer {{.CLI_ARGS}}
58
+ - task: :engine:invoke
59
+ vars:
60
+ ENGINE_CMD: 'triage-actions defer {{.CLI_ARGS}}'
55
61
 
56
62
  needs-ac:
57
63
  desc: "Mark an issue as needing acceptance criteria + post AC-request comment upstream. (#845 Story 3)"
58
64
  internal: true
59
- deps: [":ts:build"]
65
+ deps: [":engine:_ts-build"]
60
66
  dir: '{{.USER_WORKING_DIR}}'
61
67
  cmds:
62
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions needs-ac {{.CLI_ARGS}}
68
+ - task: :engine:invoke
69
+ vars:
70
+ ENGINE_CMD: 'triage-actions needs-ac {{.CLI_ARGS}}'
63
71
 
64
72
  mark-duplicate:
65
73
  desc: "Link an issue as a duplicate of another (validated against Story 1 cache). (#845 Story 3)"
66
74
  internal: true
67
- deps: [":ts:build"]
75
+ deps: [":engine:_ts-build"]
68
76
  dir: '{{.USER_WORKING_DIR}}'
69
77
  cmds:
70
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions mark-duplicate {{.CLI_ARGS}}
78
+ - task: :engine:invoke
79
+ vars:
80
+ ENGINE_CMD: 'triage-actions mark-duplicate {{.CLI_ARGS}}'
71
81
 
72
82
  status:
73
83
  desc: "Print the latest triage decision for an issue. Read-only. (#845 Story 3)"
74
84
  internal: true
75
- deps: [":ts:build"]
85
+ deps: [":engine:_ts-build"]
76
86
  dir: '{{.USER_WORKING_DIR}}'
77
87
  cmds:
78
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions status {{.CLI_ARGS}}
88
+ - task: :engine:invoke
89
+ vars:
90
+ ENGINE_CMD: 'triage-actions status {{.CLI_ARGS}}'
79
91
 
80
92
  reset:
81
93
  desc: "Reset an issue's triage state. Appends a reset audit entry referencing prior; does NOT delete history. (#845 Story 3)"
82
94
  internal: true
83
- deps: [":ts:build"]
95
+ deps: [":engine:_ts-build"]
84
96
  dir: '{{.USER_WORKING_DIR}}'
85
97
  cmds:
86
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions reset {{.CLI_ARGS}}
98
+ - task: :engine:invoke
99
+ vars:
100
+ ENGINE_CMD: 'triage-actions reset {{.CLI_ARGS}}'
87
101
 
88
102
  history:
89
103
  desc: "Print the full triage timeline for an issue, ordered by timestamp. Read-only. (#845 Story 3)"
90
104
  internal: true
91
- deps: [":ts:build"]
105
+ deps: [":engine:_ts-build"]
92
106
  dir: '{{.USER_WORKING_DIR}}'
93
107
  cmds:
94
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions history {{.CLI_ARGS}}
108
+ - task: :engine:invoke
109
+ vars:
110
+ ENGINE_CMD: 'triage-actions history {{.CLI_ARGS}}'
@@ -37,7 +37,9 @@ tasks:
37
37
  bootstrap:
38
38
  desc: "Idempotent triage v1 installer (#845): populate cache, backfill audit log, ensure gitignore for .deft-cache/ and vbrief/.eval/. Re-runnable; per-step progress on stderr; cache:fetch-all wall-clock cap (#952). -- task triage:bootstrap [-- --repo OWNER/NAME] [--limit N] [--state open|closed|all] [--fetch-timeout-s N] [--quiet] [--json]"
39
39
  internal: true
40
- deps: [":ts:build"]
40
+ deps: [":engine:_ts-build"]
41
41
  dir: '{{.USER_WORKING_DIR}}'
42
42
  cmds:
43
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-bootstrap --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
43
+ - task: :engine:invoke
44
+ vars:
45
+ ENGINE_CMD: 'triage-bootstrap --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
@@ -37,39 +37,49 @@ tasks:
37
37
  bulk-accept:
38
38
  desc: "Bulk accept candidates (#845 Story 4) -- task triage:bulk-accept -- --repo OWNER/NAME [--label L] [--author A] [--age-days N] [--cluster C] [--re-action]"
39
39
  internal: true
40
- deps: [":ts:build"]
40
+ deps: [":engine:_ts-build"]
41
41
  dir: '{{.USER_WORKING_DIR}}'
42
42
  cmds:
43
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-bulk accept {{.CLI_ARGS}}
43
+ - task: :engine:invoke
44
+ vars:
45
+ ENGINE_CMD: 'triage-bulk accept {{.CLI_ARGS}}'
44
46
 
45
47
  bulk-reject:
46
48
  desc: "Bulk reject candidates (#845 Story 4) -- task triage:bulk-reject -- --repo OWNER/NAME --reason 'why' [--label L] [--author A] [--age-days N] [--cluster C] [--re-action]"
47
49
  internal: true
48
- deps: [":ts:build"]
50
+ deps: [":engine:_ts-build"]
49
51
  dir: '{{.USER_WORKING_DIR}}'
50
52
  cmds:
51
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-bulk reject {{.CLI_ARGS}}
53
+ - task: :engine:invoke
54
+ vars:
55
+ ENGINE_CMD: 'triage-bulk reject {{.CLI_ARGS}}'
52
56
 
53
57
  bulk-defer:
54
58
  desc: "Bulk defer candidates (#845 Story 4) -- task triage:bulk-defer -- --repo OWNER/NAME [--label L] [--author A] [--age-days N] [--cluster C] [--re-action]"
55
59
  internal: true
56
- deps: [":ts:build"]
60
+ deps: [":engine:_ts-build"]
57
61
  dir: '{{.USER_WORKING_DIR}}'
58
62
  cmds:
59
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-bulk defer {{.CLI_ARGS}}
63
+ - task: :engine:invoke
64
+ vars:
65
+ ENGINE_CMD: 'triage-bulk defer {{.CLI_ARGS}}'
60
66
 
61
67
  bulk-needs-ac:
62
68
  desc: "Bulk needs-ac candidates (#845 Story 4) -- task triage:bulk-needs-ac -- --repo OWNER/NAME [--label L] [--author A] [--age-days N] [--cluster C] [--re-action]"
63
69
  internal: true
64
- deps: [":ts:build"]
70
+ deps: [":engine:_ts-build"]
65
71
  dir: '{{.USER_WORKING_DIR}}'
66
72
  cmds:
67
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-bulk needs-ac {{.CLI_ARGS}}
73
+ - task: :engine:invoke
74
+ vars:
75
+ ENGINE_CMD: 'triage-bulk needs-ac {{.CLI_ARGS}}'
68
76
 
69
77
  refresh-active:
70
78
  desc: "Pre-swarm freshness gate (#845 Story 4) -- detects drift between cached and live `gh issue view` for every issue referenced in vbrief/active/*.vbrief.json"
71
79
  internal: true
72
- deps: [":ts:build"]
80
+ deps: [":engine:_ts-build"]
73
81
  dir: '{{.USER_WORKING_DIR}}'
74
82
  cmds:
75
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-refresh --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
83
+ - task: :engine:invoke
84
+ vars:
85
+ ENGINE_CMD: 'triage-refresh --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
@@ -24,7 +24,9 @@ tasks:
24
24
  classify:
25
25
  desc: "Inspect / validate plan.policy.triageAutoClassify[] + triageHoldMarkers[] (#1129 / D10). -- task triage:classify -- [--list | --validate]"
26
26
  internal: true
27
- deps: [":ts:build"]
27
+ deps: [":engine:_ts-build"]
28
28
  dir: '{{.USER_WORKING_DIR}}'
29
29
  cmds:
30
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-classify --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
30
+ - task: :engine:invoke
31
+ vars:
32
+ ENGINE_CMD: 'triage-classify --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
@@ -28,23 +28,29 @@ tasks:
28
28
  queue:
29
29
  desc: "Print the ranked triage queue (#1128 / D11). -- task triage:queue [-- --repo OWNER/NAME] [--limit N]"
30
30
  internal: true
31
- deps: [":ts:build"]
31
+ deps: [":engine:_ts-build"]
32
32
  dir: '{{.USER_WORKING_DIR}}'
33
33
  cmds:
34
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-queue queue --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
34
+ - task: :engine:invoke
35
+ vars:
36
+ ENGINE_CMD: 'triage-queue queue --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
35
37
 
36
38
  show:
37
39
  desc: "Per-issue triage detail (#1128 / D11). -- task triage:show -- <N> [--repo OWNER/NAME]"
38
40
  internal: true
39
- deps: [":ts:build"]
41
+ deps: [":engine:_ts-build"]
40
42
  dir: '{{.USER_WORKING_DIR}}'
41
43
  cmds:
42
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-queue show --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
44
+ - task: :engine:invoke
45
+ vars:
46
+ ENGINE_CMD: 'triage-queue show --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
43
47
 
44
48
  audit:
45
49
  desc: "Audit-log surface (#1128 / D11, #1180). -- task triage:audit [-- --format=text|json] [--vbrief-staleness] [--since=<window>] [--action=<verb>] [--repo OWNER/NAME]"
46
50
  internal: true
47
- deps: [":ts:build"]
51
+ deps: [":engine:_ts-build"]
48
52
  dir: '{{.USER_WORKING_DIR}}'
49
53
  cmds:
50
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-queue audit --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
54
+ - task: :engine:invoke
55
+ vars:
56
+ ENGINE_CMD: 'triage-queue audit --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
@@ -23,7 +23,9 @@ tasks:
23
23
  reconcile:
24
24
  desc: "Self-heal the triage audit log (#1468): backfill missing `accept` decisions for proposed/pending/active vBRIEFs carrying an x-vbrief/github-issue reference, without a cache re-fetch. Idempotent. -- task triage:reconcile [-- --repo OWNER/NAME] [--dry-run] [--json]"
25
25
  internal: true
26
- deps: [":ts:build"]
26
+ deps: [":engine:_ts-build"]
27
27
  dir: '{{.USER_WORKING_DIR}}'
28
28
  cmds:
29
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-reconcile --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
29
+ - task: :engine:invoke
30
+ vars:
31
+ ENGINE_CMD: 'triage-reconcile --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
@@ -23,7 +23,9 @@ tasks:
23
23
  scope-drift:
24
24
  desc: "Detect subscription drift -- unsubscribed labels/milestones on cached open issues (#1133 / D14). -- task triage:scope-drift [-- --ignore-label=L | --ignore-milestone=M]"
25
25
  internal: true
26
- deps: [":ts:build"]
26
+ deps: [":engine:_ts-build"]
27
27
  dir: '{{.USER_WORKING_DIR}}'
28
28
  cmds:
29
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-scope-drift --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
29
+ - task: :engine:invoke
30
+ vars:
31
+ ENGINE_CMD: 'triage-scope-drift --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
@@ -25,7 +25,9 @@ tasks:
25
25
  scope:
26
26
  desc: "Inspect / mutate / diff the typed plan.policy.triageScope[] subscription + triageScopeIgnores[] (#1131 / D12, #1133 / D14, #1182 / D14c). -- task triage:scope -- [--list] [--add-label=L | --add-milestone=M | --ignore-label=L] [--diff-from-upstream --repo OWNER/NAME] [--refresh-denominator --repo OWNER/NAME --count N]"
27
27
  internal: true
28
- deps: [":ts:build"]
28
+ deps: [":engine:_ts-build"]
29
29
  dir: '{{.USER_WORKING_DIR}}'
30
30
  cmds:
31
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-scope --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
31
+ - task: :engine:invoke
32
+ vars:
33
+ ENGINE_CMD: 'triage-scope --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
@@ -25,9 +25,11 @@ tasks:
25
25
  smoketest:
26
26
  desc: "Run the N6 (#1146) end-to-end smoketest against the hermetic 20-issue fixture. Exits 0 on PASS / 1 on first failure. -- task triage:smoketest [-- --verbose] [--keep-tempdir] [--cache-only]"
27
27
  internal: true
28
- deps: [":ts:build"]
28
+ deps: [":engine:_ts-build"]
29
29
  dir: '{{.USER_WORKING_DIR}}'
30
30
  env:
31
31
  DEFT_ROOT: '{{.DEFT_ROOT}}'
32
32
  cmds:
33
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-smoketest {{.CLI_ARGS}}
33
+ - task: :engine:invoke
34
+ vars:
35
+ ENGINE_CMD: 'triage-smoketest {{.CLI_ARGS}}'
@@ -22,15 +22,19 @@ tasks:
22
22
  subscribe:
23
23
  desc: "Subscribe to a label / milestone / issue on plan.policy.triageScope[] (#1133 / D14). -- task triage:subscribe -- (--label=L | --milestone=M | --issue=N)"
24
24
  internal: true
25
- deps: [":ts:build"]
25
+ deps: [":engine:_ts-build"]
26
26
  dir: '{{.USER_WORKING_DIR}}'
27
27
  cmds:
28
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-subscribe subscribe --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
28
+ - task: :engine:invoke
29
+ vars:
30
+ ENGINE_CMD: 'triage-subscribe subscribe --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
29
31
 
30
32
  unsubscribe:
31
33
  desc: "Unsubscribe a label / milestone / issue from plan.policy.triageScope[] (#1133 / D14). -- task triage:unsubscribe -- (--label=L | --milestone=M | --issue=N)"
32
34
  internal: true
33
- deps: [":ts:build"]
35
+ deps: [":engine:_ts-build"]
34
36
  dir: '{{.USER_WORKING_DIR}}'
35
37
  cmds:
36
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-subscribe unsubscribe --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
38
+ - task: :engine:invoke
39
+ vars:
40
+ ENGINE_CMD: 'triage-subscribe unsubscribe --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
@@ -23,7 +23,9 @@ tasks:
23
23
  summary:
24
24
  desc: "Emit the D2 (#1122) one-line triage state for the session-start ritual (N9 / #1149). Always exits 0; appends a JSONL record to vbrief/.eval/summary-history.jsonl. -- task triage:summary -- [--json] [--no-history]"
25
25
  internal: true
26
- deps: [":ts:build"]
26
+ deps: [":engine:_ts-build"]
27
27
  dir: '{{.USER_WORKING_DIR}}'
28
28
  cmds:
29
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-summary --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
29
+ - task: :engine:invoke
30
+ vars:
31
+ ENGINE_CMD: 'triage-summary --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
@@ -24,9 +24,11 @@ tasks:
24
24
  welcome:
25
25
  desc: "Run the 6-phase onboarding ritual (N3 / #1143): detect prior state, prompt subscription scope, run triage:bootstrap, prompt wipCap, offer WIP relief, print triage:summary. Idempotent; re-run resumes cleanly. -- task triage:welcome -- [--no-subprocess]"
26
26
  internal: true
27
- deps: [":ts:build"]
27
+ deps: [":engine:_ts-build"]
28
28
  dir: '{{.USER_WORKING_DIR}}'
29
29
  env:
30
30
  DEFT_TASK_PREFIX: '{{.DEFT_TASK_PREFIX | default ""}}'
31
31
  cmds:
32
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-welcome --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
32
+ - task: :engine:invoke
33
+ vars:
34
+ ENGINE_CMD: 'triage-welcome --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
package/tasks/ts.yml CHANGED
@@ -28,7 +28,9 @@ tasks:
28
28
  desc: "Run the TS lane (lint+build+test) when a Node toolchain is present; skip with a notice otherwise (#1530, #1790)."
29
29
  dir: '{{.DEFT_ROOT}}'
30
30
  cmds:
31
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" ts-check-lane --project-root "{{.DEFT_ROOT}}"
31
+ - task: :engine:invoke
32
+ vars:
33
+ ENGINE_CMD: 'ts-check-lane --project-root "{{.DEFT_ROOT}}"'
32
34
 
33
35
  encoding:
34
36
  desc: "Run the ported verify:encoding gate (TS @deftai/core port, #1718)"