@deftai/directive-content 0.65.0 → 0.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +16 -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 +16 -16
  71. package/templates/agents-entry.md +23 -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/engine.yml CHANGED
@@ -12,13 +12,25 @@ vars:
12
12
  tasks:
13
13
  _ts-build:
14
14
  internal: true
15
- desc: "Build CLI dist when running from the framework source checkout; no-op on npm consumer deposits (#2022 Phase 3)."
16
- dir: '{{.DEFT_ROOT}}'
15
+ desc: "Build CLI dist from the framework source checkout; no-op on npm consumer deposits that ship no packages/ source (#2022 Phase 3 / #2126)."
16
+ # Run from the operator project root (USER_WORKING_DIR), NOT an absolute
17
+ # DEFT_ROOT: an absolute `dir:` doubles onto the invocation cwd on Windows
18
+ # when the Taskfile is invoked via `task -t <absolute-path>` (observed as
19
+ # `D:\a\directive\directive\D:\a\directive\directive`, #2126). Reference the
20
+ # build root by absolute path so the guard stays cwd-independent.
21
+ #
22
+ # Guard on SOURCE presence (packages/cli/package.json), NOT the dist/
23
+ # artifact: dist/ is gitignored, so a cold framework checkout (e.g. CI after
24
+ # a bare `pnpm install`) has source but no dist and MUST still build. A
25
+ # consumer deposit (`.deft/core` = @deftai/directive-content) ships no
26
+ # packages/ tree, so the guard is false and the build is a clean no-op --
27
+ # this is the #2126 fix (avoids `pnpm run build` -> Missing script: build).
28
+ dir: '{{.USER_WORKING_DIR}}'
17
29
  cmds:
18
30
  - |
19
31
  set -eu
20
- if [ -f packages/cli/dist/bin.js ]; then
21
- pnpm run build
32
+ if [ -f "{{.DEFT_ROOT}}/packages/cli/package.json" ]; then
33
+ pnpm --dir "{{.DEFT_ROOT}}" run build
22
34
  fi
23
35
 
24
36
  invoke:
package/tasks/install.yml CHANGED
@@ -7,12 +7,6 @@ vars:
7
7
  DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
8
8
 
9
9
  tasks:
10
- _ts-build:
11
- internal: true
12
- desc: "Build @deftai/cli dist/ before TS-backed gates run (#1828 s2)."
13
- dir: '{{.USER_WORKING_DIR}}'
14
- cmds:
15
- - pnpm --dir "{{.DEFT_ROOT}}" run build
16
10
 
17
11
  install:
18
12
  desc: Install deft (dev convenience -- end users should use the compiled binary from GitHub Releases)
@@ -23,9 +17,11 @@ tasks:
23
17
  desc: Remove deft entry from AGENTS.md
24
18
  dir: '{{.USER_WORKING_DIR}}'
25
19
  deps:
26
- - _ts-build
20
+ - task: :engine:_ts-build
27
21
  cmds:
28
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" install-uninstall --project-root "{{.USER_WORKING_DIR}}"
22
+ - task: :engine:invoke
23
+ vars:
24
+ ENGINE_CMD: 'install-uninstall --project-root "{{.USER_WORKING_DIR}}"'
29
25
 
30
26
  # User-facing upgrade entrypoint (#1061). Native deft-ts handler (#2022 Phase 2):
31
27
  # 1. Writes / refreshes the bare ``.deft-version`` marker.
package/tasks/issue.yml CHANGED
@@ -18,20 +18,16 @@ vars:
18
18
  # `uv --project "{{.DEFT_ROOT}}" run python` (#566).
19
19
 
20
20
  tasks:
21
- _ensure-ts:
22
- internal: true
23
- desc: "Build the TS engine before issue gates (#1828 s4)"
24
- dir: '{{.USER_WORKING_DIR}}'
25
- cmds:
26
- - pnpm --dir "{{.DEFT_ROOT}}" run build
27
21
 
28
22
  ingest:
29
23
  desc: "Ingest GitHub issues as scope vBRIEFs (single <N> or --all [--label L] [--status S] [--dry-run])"
30
24
  dir: '{{.USER_WORKING_DIR}}'
31
25
  deps:
32
- - _ensure-ts
26
+ - task: :engine:_ts-build
33
27
  cmds:
34
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" issue-ingest --vbrief-dir "{{.USER_WORKING_DIR}}/vbrief" --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
28
+ - task: :engine:invoke
29
+ vars:
30
+ ENGINE_CMD: 'issue-ingest --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
35
31
 
36
32
  # issue emit task -- the write-direction counterpart to issue:ingest
37
33
  # (#1274 Change 2). Files GitHub issue(s) from scope vBRIEFs and records
@@ -43,8 +39,10 @@ tasks:
43
39
  emit:
44
40
  desc: "File GitHub issue(s) from scope vBRIEF(s) (<path> | --umbrella <glob> | --per-vbrief <glob> [--dry-run])"
45
41
  dir: '{{.USER_WORKING_DIR}}'
46
- deps: [":ts:build"]
42
+ deps: [":engine:_ts-build"]
47
43
  env:
48
44
  PYTHONUTF8: "1"
49
45
  cmds:
50
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" issue-emit --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
46
+ - task: :engine:invoke
47
+ vars:
48
+ ENGINE_CMD: 'issue-emit --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
package/tasks/migrate.yml CHANGED
@@ -7,12 +7,6 @@ vars:
7
7
  DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
8
8
 
9
9
  tasks:
10
- _ts-build:
11
- internal: true
12
- desc: "Build @deftai/cli dist/ before TS-backed gates run (#1828 s2)."
13
- dir: '{{.USER_WORKING_DIR}}'
14
- cmds:
15
- - pnpm --dir "{{.DEFT_ROOT}}" run build
16
10
 
17
11
  preflight:
18
12
  # Pre-v0.20 document-model probe (#793, #2068 cutoff). Detects legacy
@@ -22,6 +16,28 @@ tasks:
22
16
  desc: "Detect pre-v0.20 document model and report the frozen-release migration path (#2068). Three-state exit (#793)."
23
17
  dir: '{{.USER_WORKING_DIR}}'
24
18
  deps:
25
- - _ts-build
19
+ - task: :engine:_ts-build
20
+ cmds:
21
+ - task: :engine:invoke
22
+ vars:
23
+ ENGINE_CMD: 'migrate-preflight --project-root "{{.USER_WORKING_DIR}}" --deft-root "{{.DEFT_ROOT}}" {{.CLI_ARGS}}'
24
+
25
+ xbrief:
26
+ desc: "Migrate consumer vbrief/ layout to xbrief/ with semantic v0.6->v0.8 transforms (#2110 / #2034)."
27
+ dir: '{{.USER_WORKING_DIR}}'
28
+ deps:
29
+ - task: :engine:_ts-build
30
+ cmds:
31
+ - task: :engine:invoke
32
+ vars:
33
+ ENGINE_CMD: 'migrate-xbrief --project-root "{{.USER_WORKING_DIR}}" --framework-root "{{.DEFT_ROOT}}" {{.CLI_ARGS}}'
34
+
35
+ category-b:
36
+ desc: "Namespace Category B bare plan keys (policy / completedNote) under x-directive/ across the corpus (#1650 / #2034)."
37
+ dir: '{{.USER_WORKING_DIR}}'
38
+ deps:
39
+ - task: :engine:_ts-build
26
40
  cmds:
27
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" migrate-preflight --project-root "{{.USER_WORKING_DIR}}" --deft-root "{{.DEFT_ROOT}}" {{.CLI_ARGS}}
41
+ - task: :engine:invoke
42
+ vars:
43
+ ENGINE_CMD: 'migrate-category-b --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
package/tasks/packs.yml CHANGED
@@ -31,62 +31,78 @@ tasks:
31
31
  desc: "Named, structured slice access to a content pack (#1283, #1295). -- task packs:slice <pack> <name> [-- --since YYYY-MM | --tag T | --trigger KW] [--list] [--list-packs] [--json]"
32
32
  dir: '{{.USER_WORKING_DIR}}'
33
33
  deps:
34
- - task: ":ts:build"
34
+ - task: ":engine:_ts-build"
35
35
  cmds:
36
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" packs-slice {{.CLI_ARGS}}
36
+ - task: :engine:invoke
37
+ vars:
38
+ ENGINE_CMD: 'packs-slice {{.CLI_ARGS}}'
37
39
 
38
40
  render:
39
41
  desc: "Regenerate every content-pack projection from its canonical source (ADR-001): meta/lessons.md (lessons), the proof SKILL.md (skills), coding/testing.md (rules), strategies/yolo.md (strategies). -- task packs:render [-- --pack rules] [--check]"
40
42
  dir: '{{.USER_WORKING_DIR}}'
41
43
  deps:
42
- - task: ":ts:build"
44
+ - task: ":engine:_ts-build"
43
45
  cmds:
44
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" pack-render {{.CLI_ARGS}}
46
+ - task: :engine:invoke
47
+ vars:
48
+ ENGINE_CMD: 'pack-render {{.CLI_ARGS}}'
45
49
 
46
50
  render-skills:
47
51
  desc: "One-shot migration: rebuild packs/skills/skills-pack-0.1.json from skills/*/SKILL.md + the AGENTS.md Skill Routing table (#1295)."
48
52
  dir: '{{.USER_WORKING_DIR}}'
49
53
  deps:
50
- - task: ":ts:build"
54
+ - task: ":engine:_ts-build"
51
55
  cmds:
52
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" pack-migrate-skills {{.CLI_ARGS}}
56
+ - task: :engine:invoke
57
+ vars:
58
+ ENGINE_CMD: 'pack-migrate-skills {{.CLI_ARGS}}'
53
59
 
54
60
  render-rules:
55
61
  desc: "One-shot migration: rebuild packs/rules/rules-pack-0.1.json from the RFC2119 directives in coding/*.md (#1296)."
56
62
  dir: '{{.USER_WORKING_DIR}}'
57
63
  deps:
58
- - task: ":ts:build"
64
+ - task: ":engine:_ts-build"
59
65
  cmds:
60
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" pack-migrate-rules {{.CLI_ARGS}}
66
+ - task: :engine:invoke
67
+ vars:
68
+ ENGINE_CMD: 'pack-migrate-rules {{.CLI_ARGS}}'
61
69
 
62
70
  render-strategies:
63
71
  desc: "One-shot migration: rebuild packs/strategies/strategies-pack-0.1.json from strategies/*.md (#1296)."
64
72
  dir: '{{.USER_WORKING_DIR}}'
65
73
  deps:
66
- - task: ":ts:build"
74
+ - task: ":engine:_ts-build"
67
75
  cmds:
68
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" pack-migrate-strategies {{.CLI_ARGS}}
76
+ - task: :engine:invoke
77
+ vars:
78
+ ENGINE_CMD: 'pack-migrate-strategies {{.CLI_ARGS}}'
69
79
 
70
80
  render-patterns:
71
81
  desc: "One-shot migration: rebuild packs/patterns/patterns-pack-0.1.json from patterns/*.md (#1637)."
72
82
  dir: '{{.USER_WORKING_DIR}}'
73
83
  deps:
74
- - task: ":ts:build"
84
+ - task: ":engine:_ts-build"
75
85
  cmds:
76
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" pack-migrate-patterns {{.CLI_ARGS}}
86
+ - task: :engine:invoke
87
+ vars:
88
+ ENGINE_CMD: 'pack-migrate-patterns {{.CLI_ARGS}}'
77
89
 
78
90
  render-swarm-spec:
79
91
  desc: "One-shot migration: rebuild packs/swarm-spec/swarm-spec-pack-0.1.json from swarm/*.md (#1637)."
80
92
  dir: '{{.USER_WORKING_DIR}}'
81
93
  deps:
82
- - task: ":ts:build"
94
+ - task: ":engine:_ts-build"
83
95
  cmds:
84
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" pack-migrate-swarm-spec {{.CLI_ARGS}}
96
+ - task: :engine:invoke
97
+ vars:
98
+ ENGINE_CMD: 'pack-migrate-swarm-spec {{.CLI_ARGS}}'
85
99
 
86
100
  verify-drift:
87
101
  desc: "Drift gate: fail (exit 1) when ANY pack projection (meta/lessons.md, the skills proof SKILL.md, coding/testing.md, strategies/yolo.md) diverges from a freshly rendered buffer. Wired into `task check` and surfaced as `task verify:pack-drift`."
88
102
  dir: '{{.USER_WORKING_DIR}}'
89
103
  deps:
90
- - task: ":ts:build"
104
+ - task: ":engine:_ts-build"
91
105
  cmds:
92
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" pack-render --check {{.CLI_ARGS}}
106
+ - task: :engine:invoke
107
+ vars:
108
+ ENGINE_CMD: 'pack-render --check {{.CLI_ARGS}}'
package/tasks/policy.yml CHANGED
@@ -26,50 +26,62 @@ tasks:
26
26
  desc: "Inspect every registered typed-policy field on vbrief/PROJECT-DEFINITION.vbrief.json (#1148 / N8). -- task policy:show [-- --format=json] [--changed-only] [--field=<name>]"
27
27
  dir: '{{.USER_WORKING_DIR}}'
28
28
  deps:
29
- - task: :ts:build
29
+ - task: :engine:_ts-build
30
30
  cmds:
31
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" policy show --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
31
+ - task: :engine:invoke
32
+ vars:
33
+ ENGINE_CMD: 'policy show --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
32
34
 
33
35
  enforce-branches:
34
36
  desc: "Set plan.policy.allowDirectCommitsToMaster=false (enforce feature branches). Audits to meta/policy-changes.log. (#746)"
35
37
  dir: '{{.USER_WORKING_DIR}}'
36
38
  deps:
37
- - task: :ts:build
39
+ - task: :engine:_ts-build
38
40
  cmds:
39
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" policy enforce-branches --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
41
+ - task: :engine:invoke
42
+ vars:
43
+ ENGINE_CMD: 'policy enforce-branches --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
40
44
 
41
45
  allow-direct-commits:
42
46
  desc: "Set plan.policy.allowDirectCommitsToMaster=true (capability-cost: branch-protection OFF). Requires --confirm to apply. (#746)"
43
47
  dir: '{{.USER_WORKING_DIR}}'
44
48
  deps:
45
- - task: :ts:build
49
+ - task: :engine:_ts-build
46
50
  cmds:
47
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" policy allow-direct-commits --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
51
+ - task: :engine:invoke
52
+ vars:
53
+ ENGINE_CMD: 'policy allow-direct-commits --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
48
54
 
49
55
  wip-cap:
50
56
  desc: "Set plan.policy.wipCap=N (#1124 / D4 of #1119). Requires --set N --confirm. Default cap is 10 per umbrella #1119 Current Shape v3."
51
57
  dir: '{{.USER_WORKING_DIR}}'
52
58
  deps:
53
- - task: :ts:build
59
+ - task: :engine:_ts-build
54
60
  cmds:
55
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" policy-set wip-cap {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
61
+ - task: :engine:invoke
62
+ vars:
63
+ ENGINE_CMD: 'policy-set wip-cap {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
56
64
 
57
65
  subagent-backend:
58
66
  desc: "DEPRECATED (superseded by `task swarm:routing-set`, #1739). Was: Set plan.policy.swarmSubagentBackend (#1531a). -- task policy:subagent-backend -- --set composer|grok-build|cursor-cloud"
59
67
  dir: '{{.USER_WORKING_DIR}}'
60
68
  deps:
61
- - task: :ts:build
69
+ - task: :engine:_ts-build
62
70
  cmds:
63
71
  - cmd: echo "[deft deprecation] task policy:subagent-backend is superseded by 'task swarm:routing-set' (#1739). The swarmSubagentBackend enum is no longer the active routing surface." 1>&2
64
72
  silent: true
65
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" policy-set subagent-backend {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
73
+ - task: :engine:invoke
74
+ vars:
75
+ ENGINE_CMD: 'policy-set subagent-backend {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
66
76
 
67
77
  subagent-backends:
68
78
  desc: "DEPRECATED (superseded by `task swarm:routing-set` / `task verify:routing`, #1739). Was: Probe sub-agent backend ids, role capabilities, and availability (#1531a). -- task policy:subagent-backends [-- --format=json]"
69
79
  dir: '{{.USER_WORKING_DIR}}'
70
80
  deps:
71
- - task: :ts:build
81
+ - task: :engine:_ts-build
72
82
  cmds:
73
83
  - cmd: echo "[deft deprecation] task policy:subagent-backends is superseded by 'task verify:routing -- --advise' and 'task swarm:routing-set' (#1739). The swarmSubagentBackend enum is no longer the active routing surface." 1>&2
74
84
  silent: true
75
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" policy-set subagent-backends {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
85
+ - task: :engine:invoke
86
+ vars:
87
+ ENGINE_CMD: 'policy-set subagent-backends {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'
package/tasks/pr.yml CHANGED
@@ -21,10 +21,12 @@ vars:
21
21
  tasks:
22
22
  check-protected-issues:
23
23
  desc: "Verify NO protected (umbrella / staying-OPEN) issue is GitHub-side linked to a PR before squash merge (#701)"
24
- deps: [":ts:build"]
24
+ deps: [":engine:_ts-build"]
25
25
  dir: '{{.USER_WORKING_DIR}}'
26
26
  cmds:
27
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" pr-protected-issues {{.CLI_ARGS}}
27
+ - task: :engine:invoke
28
+ vars:
29
+ ENGINE_CMD: 'pr-protected-issues {{.CLI_ARGS}}'
28
30
 
29
31
  # pr:check-closing-keywords -- Layer 0 (prevention) closing-keyword
30
32
  # negation-context lint introduced by #737. Refuses to push when the
@@ -39,11 +41,13 @@ tasks:
39
41
  check-closing-keywords:
40
42
  desc: "Scan PR body + commit messages for closing-keyword substrings in negation/quotation/example contexts that would trigger Layer 0 false-positive auto-closes (#737)"
41
43
  dir: '{{.USER_WORKING_DIR}}'
42
- deps: [":ts:build"]
44
+ deps: [":engine:_ts-build"]
43
45
  env:
44
46
  PYTHONUTF8: "1"
45
47
  cmds:
46
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" pr-closing-keywords {{.CLI_ARGS}}
48
+ - task: :engine:invoke
49
+ vars:
50
+ ENGINE_CMD: 'pr-closing-keywords {{.CLI_ARGS}}'
47
51
 
48
52
  # pr:merge-ready -- programmatic Greptile-body verdict gate. Closes the
49
53
  # SUCCESS-with-findings blind spot in the Phase 5 -> 6 merge-readiness
@@ -56,10 +60,12 @@ tasks:
56
60
  # Companion test: tests/cli/test_pr_merge_readiness.py
57
61
  merge-ready:
58
62
  desc: "Verify a PR's Greptile review body satisfies the merge exit condition (confidence >3, no P0/P1, HEAD-SHA fresh, not errored)"
59
- deps: [":ts:build"]
63
+ deps: [":engine:_ts-build"]
60
64
  dir: '{{.USER_WORKING_DIR}}'
61
65
  cmds:
62
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" pr-merge-readiness {{.CLI_ARGS}}
66
+ - task: :engine:invoke
67
+ vars:
68
+ ENGINE_CMD: 'pr-merge-readiness {{.CLI_ARGS}}'
63
69
 
64
70
  # pr:wait-mergeable-and-merge -- cascade automation surface (#1369).
65
71
  # Wraps scripts/pr_wait_mergeable.py which composes the resilient
@@ -83,7 +89,9 @@ tasks:
83
89
  # Companion test: tests/cli/test_pr_wait_mergeable.py
84
90
  wait-mergeable-and-merge:
85
91
  desc: "Wait until PR is mergeable (resilient cascade, #1368) and squash-merge with admin (#1369); Layer-3 protected-issue check (#701) chains before any merge call"
86
- deps: [":ts:build"]
92
+ deps: [":engine:_ts-build"]
87
93
  dir: '{{.USER_WORKING_DIR}}'
88
94
  cmds:
89
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" pr-wait-mergeable {{.CLI_ARGS}}
95
+ - task: :engine:invoke
96
+ vars:
97
+ ENGINE_CMD: 'pr-wait-mergeable {{.CLI_ARGS}}'
package/tasks/prd.yml CHANGED
@@ -13,12 +13,6 @@ vars:
13
13
  # caused sporadic PATH issues on Windows.
14
14
 
15
15
  tasks:
16
- _ts-build:
17
- internal: true
18
- desc: "Build @deftai/cli dist/ before TS-backed render gates run (#1854 s2)."
19
- dir: '{{.USER_WORKING_DIR}}'
20
- cmds:
21
- - pnpm --dir "{{.DEFT_ROOT}}" run build
22
16
 
23
17
  render:
24
18
  # Caching: intentionally absent. `prd:render` runs in <30ms and its
@@ -27,13 +21,16 @@ tasks:
27
21
  # would cause go-task to short-circuit before `cmds:` runs, dropping
28
22
  # CLI_ARGS and silently breaking the #539 recovery path (#573, #574).
29
23
  # See deft/conventions/task-caching.md for the full rule.
30
- desc: Export plan.narratives from specification.vbrief.json to a read-only PRD.md
24
+ desc: Export plan.narratives from the specification artifact to a read-only PRD.md
31
25
  summary: |
32
- Reads specification.vbrief.json and extracts plan.narratives into a
33
- human-readable PRD.md for stakeholder export. PRD.md is never
34
- authoritative -- the vBRIEF is the source of truth.
26
+ Reads the specification artifact (xbrief/specification.xbrief.json on migrated
27
+ trees, vbrief/specification.vbrief.json on legacy trees) and extracts
28
+ plan.narratives into a human-readable PRD.md for stakeholder export. PRD.md is
29
+ never authoritative -- the xBRIEF is the source of truth.
35
30
  dir: '{{.USER_WORKING_DIR}}'
36
31
  deps:
37
- - _ts-build
32
+ - task: :engine:_ts-build
38
33
  cmds:
39
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" prd-render --spec "{{.USER_WORKING_DIR}}/vbrief/specification.vbrief.json" --output "{{.USER_WORKING_DIR}}/PRD.md" {{.CLI_ARGS}}
34
+ - task: :engine:invoke
35
+ vars:
36
+ ENGINE_CMD: 'prd-render --project-root "{{.USER_WORKING_DIR}}" --output "{{.USER_WORKING_DIR}}/PRD.md" {{.CLI_ARGS}}'
package/tasks/project.yml CHANGED
@@ -17,30 +17,28 @@ vars:
17
17
  # origin freshness on scope vBRIEFs — not PROJECT-DEFINITION narrative heuristics.
18
18
 
19
19
  tasks:
20
- _ts-build:
21
- internal: true
22
- desc: "Build @deftai/cli dist/ before TS-backed render gates run (#1854 s2)."
23
- dir: '{{.USER_WORKING_DIR}}'
24
- cmds:
25
- - pnpm --dir "{{.DEFT_ROOT}}" run build
26
20
 
27
21
  render:
28
- desc: Regenerate PROJECT-DEFINITION.vbrief.json items registry from lifecycle folders
22
+ desc: Regenerate PROJECT-DEFINITION artifact items registry from lifecycle folders
29
23
  dir: '{{.USER_WORKING_DIR}}'
30
24
  deps:
31
- - _ts-build
25
+ - task: :engine:_ts-build
32
26
  cmds:
33
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" project-render "{{.USER_WORKING_DIR}}/vbrief"
27
+ - task: :engine:invoke
28
+ vars:
29
+ ENGINE_CMD: 'project-render --project-root "{{.USER_WORKING_DIR}}"'
34
30
 
35
31
  ack-staleness:
36
32
  desc: >-
37
- Acknowledge reviewed PROJECT-DEFINITION narrative staleness (#640).
33
+ Acknowledge reviewed PROJECT-DEFINITION artifact narrative staleness (#640).
38
34
  Distinct from task reconcile:issues (scope origin freshness).
39
35
  dir: '{{.USER_WORKING_DIR}}'
40
36
  deps:
41
- - _ts-build
37
+ - task: :engine:_ts-build
42
38
  cmds:
43
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" project-render --acknowledge-staleness "{{.USER_WORKING_DIR}}/vbrief"
39
+ - task: :engine:invoke
40
+ vars:
41
+ ENGINE_CMD: 'project-render --acknowledge-staleness --project-root "{{.USER_WORKING_DIR}}"'
44
42
 
45
43
  export-spec:
46
44
  desc: >-
@@ -48,6 +46,8 @@ tasks:
48
46
  Use --audience=internal to include proposed scopes (#2013 / #1502).
49
47
  dir: '{{.USER_WORKING_DIR}}'
50
48
  deps:
51
- - _ts-build
49
+ - task: :engine:_ts-build
52
50
  cmds:
53
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" export-spec {{.CLI_ARGS}}
51
+ - task: :engine:invoke
52
+ vars:
53
+ ENGINE_CMD: 'export-spec {{.CLI_ARGS}}'
@@ -16,17 +16,13 @@ vars:
16
16
  # `uv --project "{{.DEFT_ROOT}}" run python` (#566).
17
17
 
18
18
  tasks:
19
- _ensure-ts:
20
- internal: true
21
- desc: "Build the TS engine before reconcile gates (#1828 s4)"
22
- dir: '{{.USER_WORKING_DIR}}'
23
- cmds:
24
- - pnpm --dir "{{.DEFT_ROOT}}" run build
25
19
 
26
20
  issues:
27
21
  desc: "Reconcile GitHub issues against vBRIEF references -- report linked, unlinked, and resolved"
28
22
  dir: '{{.USER_WORKING_DIR}}'
29
23
  deps:
30
- - _ensure-ts
24
+ - task: :engine:_ts-build
31
25
  cmds:
32
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" reconcile-issues --vbrief-dir "{{.USER_WORKING_DIR}}/vbrief" --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
26
+ - task: :engine:invoke
27
+ vars:
28
+ ENGINE_CMD: 'reconcile-issues --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}'
package/tasks/roadmap.yml CHANGED
@@ -12,17 +12,21 @@ vars:
12
12
 
13
13
  tasks:
14
14
  render:
15
- desc: Render ROADMAP.md from vbrief/pending/ (Active) and vbrief/completed/ (Completed) lifecycle folders
15
+ desc: Render ROADMAP.md from pending/ and completed/ lifecycle folders
16
16
  dir: '{{.USER_WORKING_DIR}}'
17
17
  deps:
18
- - task: :ts:build
18
+ - task: :engine:_ts-build
19
19
  cmds:
20
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" roadmap-render "{{.USER_WORKING_DIR}}/vbrief/pending" "{{.USER_WORKING_DIR}}/ROADMAP.md"
20
+ - task: :engine:invoke
21
+ vars:
22
+ ENGINE_CMD: 'roadmap-render --project-root "{{.USER_WORKING_DIR}}"'
21
23
 
22
24
  check:
23
25
  desc: Verify ROADMAP.md matches what roadmap:render would produce
24
26
  dir: '{{.USER_WORKING_DIR}}'
25
27
  deps:
26
- - task: :ts:build
28
+ - task: :engine:_ts-build
27
29
  cmds:
28
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" roadmap-render "{{.USER_WORKING_DIR}}/vbrief/pending" "{{.USER_WORKING_DIR}}/ROADMAP.md" --check
30
+ - task: :engine:invoke
31
+ vars:
32
+ ENGINE_CMD: 'roadmap-render --project-root "{{.USER_WORKING_DIR}}" --check'
package/tasks/scm.yml CHANGED
@@ -57,70 +57,88 @@ tasks:
57
57
  desc: "[#883 stub] List issues -- task scm:issue:list -- [--rest] --repo OWNER/NAME --json number,title,state,updatedAt [--state ...] (#976 --rest routes via REST helpers; default forwards to ghx|gh)"
58
58
  dir: '{{.USER_WORKING_DIR}}'
59
59
  deps:
60
- - task: :ts:build
60
+ - task: :engine:_ts-build
61
61
  cmds:
62
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scm issue list {{.CLI_ARGS}}
62
+ - task: :engine:invoke
63
+ vars:
64
+ ENGINE_CMD: 'scm issue list {{.CLI_ARGS}}'
63
65
 
64
66
  issue:view:
65
67
  desc: "[#883 stub] View an issue -- task scm:issue:view -- [--rest] <N> --repo OWNER/NAME --json number,title,body,state,author,createdAt,updatedAt,labels,comments (#976 --rest routes via REST helpers and emits REST shape; default forwards to ghx|gh GraphQL shape)"
66
68
  dir: '{{.USER_WORKING_DIR}}'
67
69
  deps:
68
- - task: :ts:build
70
+ - task: :engine:_ts-build
69
71
  cmds:
70
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scm issue view {{.CLI_ARGS}}
72
+ - task: :engine:invoke
73
+ vars:
74
+ ENGINE_CMD: 'scm issue view {{.CLI_ARGS}}'
71
75
 
72
76
  issue:close:
73
77
  desc: "[#883 stub] Close an issue -- task scm:issue:close -- <N> --repo OWNER/NAME [--comment ...]"
74
78
  dir: '{{.USER_WORKING_DIR}}'
75
79
  deps:
76
- - task: :ts:build
80
+ - task: :engine:_ts-build
77
81
  cmds:
78
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scm issue close {{.CLI_ARGS}}
82
+ - task: :engine:invoke
83
+ vars:
84
+ ENGINE_CMD: 'scm issue close {{.CLI_ARGS}}'
79
85
 
80
86
  issue:edit:
81
87
  desc: "[#883 stub] Edit an issue -- task scm:issue:edit -- <N> --repo OWNER/NAME [--add-label ...] [--body ...]"
82
88
  dir: '{{.USER_WORKING_DIR}}'
83
89
  deps:
84
- - task: :ts:build
90
+ - task: :engine:_ts-build
85
91
  cmds:
86
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scm issue edit {{.CLI_ARGS}}
92
+ - task: :engine:invoke
93
+ vars:
94
+ ENGINE_CMD: 'scm issue edit {{.CLI_ARGS}}'
87
95
 
88
96
  body:issue:create:
89
97
  desc: "[#1555] Safely create an issue body from --body-file without shell Markdown interpolation"
90
98
  dir: '{{.USER_WORKING_DIR}}'
91
99
  deps:
92
- - task: :ts:build
100
+ - task: :engine:_ts-build
93
101
  cmds:
94
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" github-body issue-create {{.CLI_ARGS}}
102
+ - task: :engine:invoke
103
+ vars:
104
+ ENGINE_CMD: 'github-body issue-create {{.CLI_ARGS}}'
95
105
 
96
106
  body:issue:edit:
97
107
  desc: "[#1555] Safely edit an issue body from --body-file and live gh read-back"
98
108
  dir: '{{.USER_WORKING_DIR}}'
99
109
  deps:
100
- - task: :ts:build
110
+ - task: :engine:_ts-build
101
111
  cmds:
102
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" github-body issue-edit {{.CLI_ARGS}}
112
+ - task: :engine:invoke
113
+ vars:
114
+ ENGINE_CMD: 'github-body issue-edit {{.CLI_ARGS}}'
103
115
 
104
116
  body:comment:create:
105
117
  desc: "[#1555] Safely create an issue/PR comment body from --body-file and live gh read-back"
106
118
  dir: '{{.USER_WORKING_DIR}}'
107
119
  deps:
108
- - task: :ts:build
120
+ - task: :engine:_ts-build
109
121
  cmds:
110
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" github-body comment-create {{.CLI_ARGS}}
122
+ - task: :engine:invoke
123
+ vars:
124
+ ENGINE_CMD: 'github-body comment-create {{.CLI_ARGS}}'
111
125
 
112
126
  body:comment:edit:
113
127
  desc: "[#1555] Safely edit an issue comment body from --body-file and live gh read-back"
114
128
  dir: '{{.USER_WORKING_DIR}}'
115
129
  deps:
116
- - task: :ts:build
130
+ - task: :engine:_ts-build
117
131
  cmds:
118
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" github-body comment-edit {{.CLI_ARGS}}
132
+ - task: :engine:invoke
133
+ vars:
134
+ ENGINE_CMD: 'github-body comment-edit {{.CLI_ARGS}}'
119
135
 
120
136
  body:pr:edit:
121
137
  desc: "[#1555] Safely edit a PR body from --body-file and live gh read-back"
122
138
  dir: '{{.USER_WORKING_DIR}}'
123
139
  deps:
124
- - task: :ts:build
140
+ - task: :engine:_ts-build
125
141
  cmds:
126
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" github-body pr-edit {{.CLI_ARGS}}
142
+ - task: :engine:invoke
143
+ vars:
144
+ ENGINE_CMD: 'github-body pr-edit {{.CLI_ARGS}}'
@@ -33,4 +33,6 @@ tasks:
33
33
  desc: "Reverse a scope-lifecycle audit entry (#1134). Single: `task scope:undo -- <decision_id>` / `task scope:undo -- --decision-id=<uuid>`. Batch: `task scope:undo -- --batch-id=<uuid>`. Optional `--dry-run`."
34
34
  dir: '{{.USER_WORKING_DIR}}'
35
35
  cmds:
36
- - node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" scope-undo {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
36
+ - task: :engine:invoke
37
+ vars:
38
+ ENGINE_CMD: 'scope-undo {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"'