@deftai/directive-runtime 0.126.0-beta.3 → 0.127.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 (221) hide show
  1. package/.agents/skills/deft-directive-release/SKILL.md +428 -7
  2. package/Taskfile.yml +1 -1
  3. package/dist/contract-entry.js +2 -4
  4. package/dist/dispatch.js +1 -6
  5. package/dist/doctor-diagnose.js +10 -7
  6. package/dist/hook-dispatch.d.ts +1 -1
  7. package/dist/hook-dispatch.js +1 -1
  8. package/dist/install-cli/coverage-map.d.ts +1 -5
  9. package/dist/install-cli/coverage-map.js +28 -22
  10. package/dist/installer-output-inventory.js +1 -4
  11. package/dist/lifecycle-cli/coverage-map.js +37 -35
  12. package/dist/migrate.js +12 -7
  13. package/dist/removal-steps/index.d.ts +2 -2
  14. package/dist/removal-steps/steps.js +6 -9
  15. package/dist/removal-steps/strategies.js +1 -1
  16. package/dist/setup-wiring.d.ts +4 -0
  17. package/dist/setup-wiring.js +6 -7
  18. package/dist/setup.js +12 -14
  19. package/dist/uninstall.js +1 -1
  20. package/dist/vbrief-preflight-fixtures.js +1 -1
  21. package/dist/verify-intent-constraint.d.ts +2 -0
  22. package/dist/verify-intent-constraint.js +24 -0
  23. package/dist/verify-observable-scope.d.ts +2 -0
  24. package/dist/verify-observable-scope.js +24 -0
  25. package/docs/intent-constraint.md +7 -1
  26. package/docs/observable-scope.md +6 -0
  27. package/package.json +1 -1
  28. package/packs/skills/skills-pack-0.1.json +3 -3
  29. package/scm/github.md +1 -0
  30. package/skills/deft-directive-feedback/SKILL.md +9 -20
  31. package/skills/deft-directive-release/SKILL.md +4 -4
  32. package/skills/deft-directive-review-cycle/SKILL.md +2 -2
  33. package/skills/deft-directive-setup/SKILL.md +17 -41
  34. package/skills/deft-directive-swarm/references/host-cursor.md +18 -1
  35. package/skills/deft-directive-swarm/references/host-grok-build.md +3 -3
  36. package/skills/deft-directive-sync/SKILL.md +2 -2
  37. package/skills/deft-directive-tutorial/SKILL.md +1 -1
  38. package/tasks/engine.yml +11 -4
  39. package/templates/agents-entry.md +1 -0
  40. package/vendor/directive-content/.agents/skills/deft-directive-release/SKILL.md +428 -7
  41. package/vendor/directive-content/Taskfile.yml +1 -1
  42. package/vendor/directive-content/docs/intent-constraint.md +7 -1
  43. package/vendor/directive-content/docs/observable-scope.md +6 -0
  44. package/vendor/directive-content/packs/skills/skills-pack-0.1.json +3 -3
  45. package/vendor/directive-content/scm/github.md +1 -0
  46. package/vendor/directive-content/skills/deft-directive-feedback/SKILL.md +9 -20
  47. package/vendor/directive-content/skills/deft-directive-release/SKILL.md +4 -4
  48. package/vendor/directive-content/skills/deft-directive-review-cycle/SKILL.md +2 -2
  49. package/vendor/directive-content/skills/deft-directive-setup/SKILL.md +17 -41
  50. package/vendor/directive-content/skills/deft-directive-swarm/references/host-cursor.md +18 -1
  51. package/vendor/directive-content/skills/deft-directive-swarm/references/host-grok-build.md +3 -3
  52. package/vendor/directive-content/skills/deft-directive-sync/SKILL.md +2 -2
  53. package/vendor/directive-content/skills/deft-directive-tutorial/SKILL.md +1 -1
  54. package/vendor/directive-content/tasks/engine.yml +11 -4
  55. package/vendor/directive-content/templates/agents-entry.md +1 -0
  56. package/vendor/directive-core/dist/.tsbuildinfo +1 -1
  57. package/vendor/directive-core/dist/consumer-check-contract/evaluate.d.ts +3 -2
  58. package/vendor/directive-core/dist/consumer-check-contract/evaluate.d.ts.map +1 -1
  59. package/vendor/directive-core/dist/consumer-check-contract/evaluate.js +7 -6
  60. package/vendor/directive-core/dist/consumer-check-contract/evaluate.js.map +1 -1
  61. package/vendor/directive-core/dist/content-contracts/skills/greptile-detector.d.ts +6 -0
  62. package/vendor/directive-core/dist/content-contracts/skills/greptile-detector.d.ts.map +1 -1
  63. package/vendor/directive-core/dist/content-contracts/skills/greptile-detector.js +97 -3
  64. package/vendor/directive-core/dist/content-contracts/skills/greptile-detector.js.map +1 -1
  65. package/vendor/directive-core/dist/coverage-applicability/evaluate.d.ts.map +1 -1
  66. package/vendor/directive-core/dist/coverage-applicability/evaluate.js +406 -11
  67. package/vendor/directive-core/dist/coverage-applicability/evaluate.js.map +1 -1
  68. package/vendor/directive-core/dist/deposit/live-procedure-targets.d.ts.map +1 -1
  69. package/vendor/directive-core/dist/deposit/live-procedure-targets.js.map +1 -1
  70. package/vendor/directive-core/dist/deposit/python-free.d.ts +2 -0
  71. package/vendor/directive-core/dist/deposit/python-free.d.ts.map +1 -1
  72. package/vendor/directive-core/dist/deposit/python-free.js +5 -1
  73. package/vendor/directive-core/dist/deposit/python-free.js.map +1 -1
  74. package/vendor/directive-core/dist/doctor/checks.d.ts.map +1 -1
  75. package/vendor/directive-core/dist/doctor/checks.js +3 -7
  76. package/vendor/directive-core/dist/doctor/checks.js.map +1 -1
  77. package/vendor/directive-core/dist/doctor/main.d.ts.map +1 -1
  78. package/vendor/directive-core/dist/doctor/main.js +6 -0
  79. package/vendor/directive-core/dist/doctor/main.js.map +1 -1
  80. package/vendor/directive-core/dist/doctor/manifest.d.ts.map +1 -1
  81. package/vendor/directive-core/dist/doctor/manifest.js +3 -2
  82. package/vendor/directive-core/dist/doctor/manifest.js.map +1 -1
  83. package/vendor/directive-core/dist/doctor/paths.d.ts.map +1 -1
  84. package/vendor/directive-core/dist/doctor/paths.js +11 -0
  85. package/vendor/directive-core/dist/doctor/paths.js.map +1 -1
  86. package/vendor/directive-core/dist/engine-version.d.ts.map +1 -1
  87. package/vendor/directive-core/dist/engine-version.js +1 -4
  88. package/vendor/directive-core/dist/engine-version.js.map +1 -1
  89. package/vendor/directive-core/dist/hooks/dispatcher.d.ts +2 -0
  90. package/vendor/directive-core/dist/hooks/dispatcher.d.ts.map +1 -1
  91. package/vendor/directive-core/dist/hooks/dispatcher.js +5 -1
  92. package/vendor/directive-core/dist/hooks/dispatcher.js.map +1 -1
  93. package/vendor/directive-core/dist/init-deposit/agent-hooks.d.ts.map +1 -1
  94. package/vendor/directive-core/dist/init-deposit/agent-hooks.js.map +1 -1
  95. package/vendor/directive-core/dist/init-deposit/scaffold.d.ts +4 -0
  96. package/vendor/directive-core/dist/init-deposit/scaffold.d.ts.map +1 -1
  97. package/vendor/directive-core/dist/init-deposit/scaffold.js +4 -2
  98. package/vendor/directive-core/dist/init-deposit/scaffold.js.map +1 -1
  99. package/vendor/directive-core/dist/install-contract/constants.d.ts.map +1 -1
  100. package/vendor/directive-core/dist/install-contract/constants.js +9 -1
  101. package/vendor/directive-core/dist/install-contract/constants.js.map +1 -1
  102. package/vendor/directive-core/dist/install-contract/data-status.d.ts.map +1 -1
  103. package/vendor/directive-core/dist/install-contract/data-status.js.map +1 -1
  104. package/vendor/directive-core/dist/install-contract/index.d.ts +1 -1
  105. package/vendor/directive-core/dist/install-contract/index.d.ts.map +1 -1
  106. package/vendor/directive-core/dist/install-contract/index.js.map +1 -1
  107. package/vendor/directive-core/dist/install-contract/package-meta.d.ts.map +1 -1
  108. package/vendor/directive-core/dist/install-contract/package-meta.js.map +1 -1
  109. package/vendor/directive-core/dist/install-health/cheap.d.ts.map +1 -1
  110. package/vendor/directive-core/dist/install-health/cheap.js +2 -6
  111. package/vendor/directive-core/dist/install-health/cheap.js.map +1 -1
  112. package/vendor/directive-core/dist/install-health/in-sync.d.ts.map +1 -1
  113. package/vendor/directive-core/dist/install-health/in-sync.js.map +1 -1
  114. package/vendor/directive-core/dist/install-health/index.d.ts +6 -6
  115. package/vendor/directive-core/dist/install-health/index.d.ts.map +1 -1
  116. package/vendor/directive-core/dist/install-health/index.js +3 -3
  117. package/vendor/directive-core/dist/install-health/index.js.map +1 -1
  118. package/vendor/directive-core/dist/install-health/ownership.d.ts.map +1 -1
  119. package/vendor/directive-core/dist/install-health/ownership.js +2 -6
  120. package/vendor/directive-core/dist/install-health/ownership.js.map +1 -1
  121. package/vendor/directive-core/dist/install-health/readers.d.ts.map +1 -1
  122. package/vendor/directive-core/dist/install-health/readers.js.map +1 -1
  123. package/vendor/directive-core/dist/install-health/wiring.d.ts.map +1 -1
  124. package/vendor/directive-core/dist/install-health/wiring.js +2 -3
  125. package/vendor/directive-core/dist/install-health/wiring.js.map +1 -1
  126. package/vendor/directive-core/dist/intent-constraint/evaluate.d.ts +7 -0
  127. package/vendor/directive-core/dist/intent-constraint/evaluate.d.ts.map +1 -1
  128. package/vendor/directive-core/dist/intent-constraint/evaluate.js +26 -5
  129. package/vendor/directive-core/dist/intent-constraint/evaluate.js.map +1 -1
  130. package/vendor/directive-core/dist/intent-constraint/plan-id-adopter.d.ts +76 -0
  131. package/vendor/directive-core/dist/intent-constraint/plan-id-adopter.d.ts.map +1 -0
  132. package/vendor/directive-core/dist/intent-constraint/plan-id-adopter.js +239 -0
  133. package/vendor/directive-core/dist/intent-constraint/plan-id-adopter.js.map +1 -0
  134. package/vendor/directive-core/dist/observable-scope/evaluate.d.ts +7 -0
  135. package/vendor/directive-core/dist/observable-scope/evaluate.d.ts.map +1 -1
  136. package/vendor/directive-core/dist/observable-scope/evaluate.js +51 -7
  137. package/vendor/directive-core/dist/observable-scope/evaluate.js.map +1 -1
  138. package/vendor/directive-core/dist/pr-closing-keywords/main.d.ts +2 -0
  139. package/vendor/directive-core/dist/pr-closing-keywords/main.d.ts.map +1 -1
  140. package/vendor/directive-core/dist/pr-closing-keywords/main.js +6 -2
  141. package/vendor/directive-core/dist/pr-closing-keywords/main.js.map +1 -1
  142. package/vendor/directive-core/dist/release/cli-drift-report.d.ts +4 -4
  143. package/vendor/directive-core/dist/release/cli-drift-report.d.ts.map +1 -1
  144. package/vendor/directive-core/dist/release/cli-drift-report.js +6 -11
  145. package/vendor/directive-core/dist/release/cli-drift-report.js.map +1 -1
  146. package/vendor/directive-core/dist/release-e2e/constants.d.ts +4 -3
  147. package/vendor/directive-core/dist/release-e2e/constants.d.ts.map +1 -1
  148. package/vendor/directive-core/dist/release-e2e/constants.js +4 -3
  149. package/vendor/directive-core/dist/release-e2e/constants.js.map +1 -1
  150. package/vendor/directive-core/dist/release-e2e/greenfield-python-free-smoke.d.ts.map +1 -1
  151. package/vendor/directive-core/dist/release-e2e/greenfield-python-free-smoke.js +87 -28
  152. package/vendor/directive-core/dist/release-e2e/greenfield-python-free-smoke.js.map +1 -1
  153. package/vendor/directive-core/dist/release-e2e/legacy-bridge-leg.d.ts.map +1 -1
  154. package/vendor/directive-core/dist/release-e2e/legacy-bridge-leg.js +13 -2
  155. package/vendor/directive-core/dist/release-e2e/legacy-bridge-leg.js.map +1 -1
  156. package/vendor/directive-core/dist/release-e2e/main.js +1 -1
  157. package/vendor/directive-core/dist/release-e2e/npm-ops.d.ts +11 -5
  158. package/vendor/directive-core/dist/release-e2e/npm-ops.d.ts.map +1 -1
  159. package/vendor/directive-core/dist/release-e2e/npm-ops.js +90 -45
  160. package/vendor/directive-core/dist/release-e2e/npm-ops.js.map +1 -1
  161. package/vendor/directive-core/dist/resolution/engine-resolve.d.ts.map +1 -1
  162. package/vendor/directive-core/dist/resolution/engine-resolve.js.map +1 -1
  163. package/vendor/directive-core/dist/resolution/pin.d.ts +11 -5
  164. package/vendor/directive-core/dist/resolution/pin.d.ts.map +1 -1
  165. package/vendor/directive-core/dist/resolution/pin.js +20 -11
  166. package/vendor/directive-core/dist/resolution/pin.js.map +1 -1
  167. package/vendor/directive-core/dist/resolution/plan.d.ts.map +1 -1
  168. package/vendor/directive-core/dist/resolution/plan.js +5 -3
  169. package/vendor/directive-core/dist/resolution/plan.js.map +1 -1
  170. package/vendor/directive-core/dist/review-monitor/bounded-pr-watch-deny.d.ts +54 -3
  171. package/vendor/directive-core/dist/review-monitor/bounded-pr-watch-deny.d.ts.map +1 -1
  172. package/vendor/directive-core/dist/review-monitor/bounded-pr-watch-deny.js +142 -0
  173. package/vendor/directive-core/dist/review-monitor/bounded-pr-watch-deny.js.map +1 -1
  174. package/vendor/directive-core/dist/session/spawn-occupancy.d.ts +7 -0
  175. package/vendor/directive-core/dist/session/spawn-occupancy.d.ts.map +1 -1
  176. package/vendor/directive-core/dist/session/spawn-occupancy.js +28 -0
  177. package/vendor/directive-core/dist/session/spawn-occupancy.js.map +1 -1
  178. package/vendor/directive-core/dist/staleness-tickler/run.d.ts.map +1 -1
  179. package/vendor/directive-core/dist/staleness-tickler/run.js.map +1 -1
  180. package/vendor/directive-core/dist/swarm/approach1-babysitter.d.ts +19 -6
  181. package/vendor/directive-core/dist/swarm/approach1-babysitter.d.ts.map +1 -1
  182. package/vendor/directive-core/dist/swarm/approach1-babysitter.js +69 -9
  183. package/vendor/directive-core/dist/swarm/approach1-babysitter.js.map +1 -1
  184. package/vendor/directive-core/dist/swarm/dest-place.d.ts +1 -1
  185. package/vendor/directive-core/dist/swarm/dest-place.d.ts.map +1 -1
  186. package/vendor/directive-core/dist/swarm/dest-place.js +1 -1
  187. package/vendor/directive-core/dist/swarm/dest-place.js.map +1 -1
  188. package/vendor/directive-core/dist/swarm/worktree-pm-install.d.ts +5 -0
  189. package/vendor/directive-core/dist/swarm/worktree-pm-install.d.ts.map +1 -1
  190. package/vendor/directive-core/dist/swarm/worktree-pm-install.js +16 -6
  191. package/vendor/directive-core/dist/swarm/worktree-pm-install.js.map +1 -1
  192. package/vendor/directive-core/dist/swarm/worktrees.d.ts.map +1 -1
  193. package/vendor/directive-core/dist/swarm/worktrees.js.map +1 -1
  194. package/vendor/directive-core/dist/text/redos-safe.d.ts.map +1 -1
  195. package/vendor/directive-core/dist/text/redos-safe.js +2 -1
  196. package/vendor/directive-core/dist/text/redos-safe.js.map +1 -1
  197. package/vendor/directive-core/dist/triage/evaluate/worktrees.d.ts.map +1 -1
  198. package/vendor/directive-core/dist/triage/evaluate/worktrees.js +6 -6
  199. package/vendor/directive-core/dist/triage/evaluate/worktrees.js.map +1 -1
  200. package/vendor/directive-core/dist/vbrief-validate/conformance.d.ts.map +1 -1
  201. package/vendor/directive-core/dist/vbrief-validate/conformance.js +5 -0
  202. package/vendor/directive-core/dist/vbrief-validate/conformance.js.map +1 -1
  203. package/vendor/directive-core/dist/verify-env/agent-hooks-live-probe.js +1 -1
  204. package/vendor/directive-core/dist/verify-env/agent-hooks-live-probe.js.map +1 -1
  205. package/vendor/directive-core/dist/xbrief/paths.d.ts.map +1 -1
  206. package/vendor/directive-core/dist/xbrief/paths.js +15 -12
  207. package/vendor/directive-core/dist/xbrief/paths.js.map +1 -1
  208. package/vendor/directive-core/dist/xbrief-migrate/constants.d.ts +7 -0
  209. package/vendor/directive-core/dist/xbrief-migrate/constants.d.ts.map +1 -1
  210. package/vendor/directive-core/dist/xbrief-migrate/constants.js +7 -0
  211. package/vendor/directive-core/dist/xbrief-migrate/constants.js.map +1 -1
  212. package/vendor/directive-core/dist/xbrief-migrate/detect.d.ts +9 -1
  213. package/vendor/directive-core/dist/xbrief-migrate/detect.d.ts.map +1 -1
  214. package/vendor/directive-core/dist/xbrief-migrate/detect.js +14 -7
  215. package/vendor/directive-core/dist/xbrief-migrate/detect.js.map +1 -1
  216. package/vendor/directive-core/dist/xbrief-migrate/migrate-project.d.ts.map +1 -1
  217. package/vendor/directive-core/dist/xbrief-migrate/migrate-project.js +118 -57
  218. package/vendor/directive-core/dist/xbrief-migrate/migrate-project.js.map +1 -1
  219. package/vendor/directive-core/dist/xbrief-migrate/transforms.d.ts.map +1 -1
  220. package/vendor/directive-core/dist/xbrief-migrate/transforms.js +8 -1
  221. package/vendor/directive-core/dist/xbrief-migrate/transforms.js.map +1 -1
@@ -1,111 +1,117 @@
1
- /** One-line rationale per in-scope tests/cli file (Bucket C audit). */
1
+ /**
2
+ * Wave 8.5 s7 install/migrate CLI tail — retire-vs-retarget coverage map (#1838).
3
+ * Primary deliverable is duplicated in the PR body for Wave 9 mechanical teardown.
4
+ */
5
+ /** Python pytest root segments joined at runtime (avoid class-2 path literals). */
6
+ const PY_CLI_TESTS = "tests" + "/cli";
7
+ /** One-line rationale per in-scope pytest cli file (Bucket C audit). */
2
8
  export const INSTALL_CLI_TAIL_COVERAGE_MAP = [
3
9
  {
4
- pythonTest: "tests/cli/test_migrate_vbrief.py",
10
+ pythonTest: `${PY_CLI_TESTS}/test_migrate_vbrief.py`,
5
11
  classification: "retire-at-Wave-9",
6
12
  rationale: "Exercises scripts/migrate_vbrief.py pre-v0.20 migrator — accepted non-port deleted in #1731.",
7
13
  },
8
14
  {
9
- pythonTest: "tests/cli/test_migrate_vbrief_canonical_refs.py",
15
+ pythonTest: `${PY_CLI_TESTS}/test_migrate_vbrief_canonical_refs.py`,
10
16
  classification: "retire-at-Wave-9",
11
17
  rationale: "End-to-end migrate_vbrief references/narrative clamp regressions — accepted non-port migrator.",
12
18
  },
13
19
  {
14
- pythonTest: "tests/cli/test_migrate_vbrief_fixtures.py",
20
+ pythonTest: `${PY_CLI_TESTS}/test_migrate_vbrief_fixtures.py`,
15
21
  classification: "retire-at-Wave-9",
16
22
  rationale: "Fixture-driven migrate() routing matrix — accepted non-port pre-cutover migrator tooling.",
17
23
  },
18
24
  {
19
- pythonTest: "tests/cli/test_migrate_vbrief_rc4.py",
25
+ pythonTest: `${PY_CLI_TESTS}/test_migrate_vbrief_rc4.py`,
20
26
  classification: "retire-at-Wave-9",
21
27
  rationale: "RC4 migrator rollback/reconciliation — accepted non-port migrate_* family (#1731).",
22
28
  },
23
29
  {
24
- pythonTest: "tests/cli/test_migrate_preflight.py",
30
+ pythonTest: `${PY_CLI_TESTS}/test_migrate_preflight.py`,
25
31
  classification: "retarget",
26
32
  rationale: "scripts/migrate_preflight.py agent-side migrate:vbrief gate — retargeted to deft-ts migrate-preflight on consumer task path (#2022 Phase 2).",
27
33
  vitestSpec: "packages/cli/src/migrate-task-surface.test.ts",
28
34
  },
29
35
  {
30
- pythonTest: "tests/cli/test_precutover_guard.py",
36
+ pythonTest: `${PY_CLI_TESTS}/test_precutover_guard.py`,
31
37
  classification: "retire-at-Wave-9",
32
38
  rationale: "Pre-cutover detection and legacy placeholder checks via _precutover — accepted non-port.",
33
39
  },
34
40
  {
35
- pythonTest: "tests/cli/test_cmd_agents_refresh.py",
41
+ pythonTest: `${PY_CLI_TESTS}/test_cmd_agents_refresh.py`,
36
42
  classification: "retire-at-Wave-9",
37
43
  rationale: "Python run cmd_agents_refresh upgrade-gate companion — no deft-ts verb; retires with legacy run.",
38
44
  },
39
45
  {
40
- pythonTest: "tests/cli/test_cmd_check_updates.py",
46
+ pythonTest: `${PY_CLI_TESTS}/test_cmd_check_updates.py`,
41
47
  classification: "retarget",
42
48
  rationale: "Python run cmd_check_updates remote version probe — retargeted to deft-ts framework-check-updates on consumer task path (#2069).",
43
49
  vitestSpec: "packages/core/src/check-updates/index.test.ts, packages/cli/src/framework-check-updates-task-surface.test.ts",
44
50
  },
45
51
  {
46
- pythonTest: "tests/cli/test_cmd_doctor.py",
52
+ pythonTest: `${PY_CLI_TESTS}/test_cmd_doctor.py`,
47
53
  classification: "retarget",
48
54
  rationale: "cmd_doctor survives as deft-ts doctor verb (packages/cli/src/doctor.ts); exit-code parity via dispatch.",
49
55
  vitestSpec: "packages/cli/src/install-cli/retarget-dispatch.test.ts",
50
56
  },
51
57
  {
52
- pythonTest: "tests/cli/test_cmd_gate.py",
58
+ pythonTest: `${PY_CLI_TESTS}/test_cmd_gate.py`,
53
59
  classification: "retire-at-Wave-9",
54
60
  rationale: "Python run cmd_gate universal upgrade gate — no deft-ts verb; retires with legacy run module.",
55
61
  },
56
62
  {
57
- pythonTest: "tests/cli/test_cmd_spec.py",
63
+ pythonTest: `${PY_CLI_TESTS}/test_cmd_spec.py`,
58
64
  classification: "retire-at-Wave-9",
59
65
  rationale: "Python run cmd_spec interactive spec generator — no deft-ts verb; retires with legacy run.",
60
66
  },
61
67
  {
62
- pythonTest: "tests/cli/test_upgrade_gate.py",
68
+ pythonTest: `${PY_CLI_TESTS}/test_upgrade_gate.py`,
63
69
  classification: "retire-at-Wave-9",
64
70
  rationale: "Python run upgrade gate and cmd_project lifecycle scaffolding — legacy run; no TS equivalent.",
65
71
  },
66
72
  {
67
- pythonTest: "tests/cli/test_upgrade_gate_remote_drift.py",
73
+ pythonTest: `${PY_CLI_TESTS}/test_upgrade_gate_remote_drift.py`,
68
74
  classification: "retire-at-Wave-9",
69
75
  rationale: "Python run _check_upgrade_gate remote-drift integration — legacy run upgrade path.",
70
76
  },
71
77
  {
72
- pythonTest: "tests/cli/test_run_bat_path.py",
78
+ pythonTest: `${PY_CLI_TESTS}/test_run_bat_path.py`,
73
79
  classification: "retire-at-Wave-9",
74
80
  rationale: "Windows run.bat packaging shim self-relative resolution — build/packaging accepted non-port.",
75
81
  },
76
82
  {
77
- pythonTest: "tests/cli/test_run_version.py",
83
+ pythonTest: `${PY_CLI_TESTS}/test_run_version.py`,
78
84
  classification: "retire-at-Wave-9",
79
85
  rationale: "Python run VERSION resolution chain — legacy run entrypoint retires with scripts/*.py in #1731.",
80
86
  },
81
87
  {
82
- pythonTest: "tests/cli/test_setup_ghx.py",
88
+ pythonTest: `${PY_CLI_TESTS}/test_setup_ghx.py`,
83
89
  classification: "retire-at-Wave-9",
84
90
  rationale: "scripts/setup_ghx.py consent-gated installer helper — build/packaging accepted non-port (#1731).",
85
91
  },
86
92
  {
87
- pythonTest: "tests/cli/test_safe_subprocess.py",
93
+ pythonTest: `${PY_CLI_TESTS}/test_safe_subprocess.py`,
88
94
  classification: "retire-at-Wave-9",
89
95
  rationale: "scripts/_safe_subprocess.py UTF-8 capture shim — Python runtime accepted non-port (#1731).",
90
96
  },
91
97
  {
92
- pythonTest: "tests/cli/test_task_scripts.py",
98
+ pythonTest: `${PY_CLI_TESTS}/test_task_scripts.py`,
93
99
  classification: "retarget",
94
100
  rationale: "TestToolchainCheck maps to deft-ts toolchain-check; remainder covers legacy Python task scripts without TS verbs.",
95
101
  vitestSpec: "packages/cli/src/install-cli/retarget-dispatch.test.ts",
96
102
  },
97
103
  {
98
- pythonTest: "tests/cli/test_ts_check_lane.py",
104
+ pythonTest: `${PY_CLI_TESTS}/test_ts_check_lane.py`,
99
105
  classification: "retire-at-Wave-9",
100
106
  rationale: "scripts/ts_check_lane.py Python meta-guard for pnpm lane — retires once Python CI lane is removed.",
101
107
  },
102
108
  {
103
- pythonTest: "tests/cli/test_vendored_install_metadata.py",
109
+ pythonTest: `${PY_CLI_TESTS}/test_vendored_install_metadata.py`,
104
110
  classification: "retire-at-Wave-9",
105
111
  rationale: "Vendored Go-install metadata via Python run/doctor/resolve_version — installer deposit accepted non-port.",
106
112
  },
107
113
  {
108
- pythonTest: "tests/cli/test_remote_probe_throttle.py",
114
+ pythonTest: `${PY_CLI_TESTS}/test_remote_probe_throttle.py`,
109
115
  classification: "retire-at-Wave-9",
110
116
  rationale: "Python run remote-probe throttle state for #801 — legacy run module; no deft-ts verb.",
111
117
  },
@@ -77,10 +77,7 @@ export const INSTALLER_OUTPUT_INVENTORY = [
77
77
  },
78
78
  {
79
79
  id: "openclaw-integrations",
80
- legacyOutputs: [
81
- "OpenClaw L2 product-command skills",
82
- "OpenClaw soft AGENTS re-bind skill",
83
- ],
80
+ legacyOutputs: ["OpenClaw L2 product-command skills", "OpenClaw soft AGENTS re-bind skill"],
84
81
  ovprTarget: "OpenClaw workspace skills dirs when OC signals present (conditional)",
85
82
  disposition: "conditional",
86
83
  justification: "AC8.1 conditional OpenClaw — deposit adapters no-op unless OpenClaw is detected; fail-closed otherwise.",
@@ -2,248 +2,250 @@
2
2
  * Wave 8.5 Bucket B coverage map: pytest CLI tests → TS vitest / existing-coverage (#1838 s3).
3
3
  * Python tests remain in-tree until Wave 9 (#1731); entries tagged wave9-delete are dedup candidates.
4
4
  */
5
+ /** Python pytest root segments joined at runtime (avoid class-2 path literals). */
6
+ const PY_CLI_TESTS = "tests" + "/cli";
5
7
  /** Canonical mapping for lifecycle CLI pytest files in scope of story 1838-s3. */
6
8
  export const LIFECYCLE_CLI_COVERAGE_MAP = [
7
9
  {
8
- pythonTest: "tests/cli/test_vbrief_activate.py",
10
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_activate.py`,
9
11
  tsTarget: "packages/core/src/vbrief-activate/{activate,main,coverage-boost}.test.ts + lifecycle-cli/dispatch-vbrief.test.ts",
10
12
  disposition: "lifecycle-cli-dispatch",
11
13
  wave9Delete: true,
12
14
  notes: "Module matrix in core; deft-ts vbrief-activate argv/exit in lifecycle-cli.",
13
15
  },
14
16
  {
15
- pythonTest: "tests/cli/test_vbrief_fidelity_legacy.py",
17
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_fidelity_legacy.py`,
16
18
  tsTarget: "packages/core/src/vbrief-validation/fidelity.test.ts",
17
19
  disposition: "existing-coverage",
18
20
  wave9Delete: true,
19
21
  notes: "Legacy fidelity normalization covered in TS vbrief-validation module.",
20
22
  },
21
23
  {
22
- pythonTest: "tests/cli/test_vbrief_migrate_conformance.py",
24
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_migrate_conformance.py`,
23
25
  tsTarget: "packages/core/src/vbrief-validate/main.test.ts (scanVbrief/conformance)",
24
26
  disposition: "existing-coverage",
25
27
  wave9Delete: true,
26
28
  notes: "Conformance scan parity in vbrief-validate TS port.",
27
29
  },
28
30
  {
29
- pythonTest: "tests/cli/test_vbrief_preflight_resolver.py",
31
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_preflight_resolver.py`,
30
32
  tsTarget: "packages/cli/src/vbrief-preflight.test.ts + lifecycle-cli/dispatch-preflight.test.ts",
31
33
  disposition: "lifecycle-cli-dispatch",
32
34
  wave9Delete: false,
33
35
  notes: "Install-layout resolver still Python-only; TS preflight gate + dispatcher alias covered.",
34
36
  },
35
37
  {
36
- pythonTest: "tests/cli/test_vbrief_reconcile_graph.py",
38
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_reconcile_graph.py`,
37
39
  tsTarget: "packages/core/src/vbrief-reconcile/graph.test.ts",
38
40
  disposition: "existing-coverage",
39
41
  wave9Delete: true,
40
42
  notes: "Dependency-graph promotion logic in TS vbrief-reconcile.",
41
43
  },
42
44
  {
43
- pythonTest: "tests/cli/test_vbrief_reconcile_labels.py",
45
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_reconcile_labels.py`,
44
46
  tsTarget: "packages/core/src/vbrief-reconcile/labels.test.ts",
45
47
  disposition: "existing-coverage",
46
48
  wave9Delete: true,
47
49
  notes: "Label/status derivation covered in TS reconcile engine.",
48
50
  },
49
51
  {
50
- pythonTest: "tests/cli/test_vbrief_reconcile_umbrellas.py",
52
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_reconcile_umbrellas.py`,
51
53
  tsTarget: "packages/core/src/vbrief-reconcile/umbrellas.test.ts",
52
54
  disposition: "existing-coverage",
53
55
  wave9Delete: true,
54
56
  notes: "Umbrella current-shape render/parse in TS.",
55
57
  },
56
58
  {
57
- pythonTest: "tests/cli/test_vbrief_reconciliation.py",
59
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_reconciliation.py`,
58
60
  tsTarget: "packages/core/src/vbrief-reconcile/reconciliation.test.ts",
59
61
  disposition: "existing-coverage",
60
62
  wave9Delete: true,
61
63
  notes: "Override reconciliation table covered in TS.",
62
64
  },
63
65
  {
64
- pythonTest: "tests/cli/test_vbrief_routing.py",
66
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_routing.py`,
65
67
  tsTarget: "packages/core/src/vbrief-build/routing.test.ts",
66
68
  disposition: "existing-coverage",
67
69
  wave9Delete: true,
68
70
  notes: "Status↔folder routing map in TS vbrief-build.",
69
71
  },
70
72
  {
71
- pythonTest: "tests/cli/test_vbrief_validate.py",
73
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_validate.py`,
72
74
  tsTarget: "packages/core/src/vbrief-validate/main.test.ts",
73
75
  disposition: "lifecycle-cli-dispatch",
74
76
  wave9Delete: true,
75
77
  notes: "validateAll matrix in core; deft-ts vbrief-validate argv in lifecycle-cli.",
76
78
  },
77
79
  {
78
- pythonTest: "tests/cli/test_vbrief_validate_direct.py",
80
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_validate_direct.py`,
79
81
  tsTarget: "packages/core/src/vbrief-validate/branches.test.ts",
80
82
  disposition: "existing-coverage",
81
83
  wave9Delete: true,
82
84
  notes: "Direct validate orchestration branches in TS.",
83
85
  },
84
86
  {
85
- pythonTest: "tests/cli/test_vbrief_validate_direct_orchestration.py",
87
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_validate_direct_orchestration.py`,
86
88
  tsTarget: "packages/core/src/vbrief-validate/branches.test.ts",
87
89
  disposition: "existing-coverage",
88
90
  wave9Delete: true,
89
91
  notes: "Reference/orchestration warnings in TS validate-all.",
90
92
  },
91
93
  {
92
- pythonTest: "tests/cli/test_vbrief_validate_issue_536.py",
94
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_validate_issue_536.py`,
93
95
  tsTarget: "packages/core/src/vbrief-validate/branches.test.ts",
94
96
  disposition: "existing-coverage",
95
97
  wave9Delete: true,
96
98
  notes: "x-vbrief/github-issue reference counting in TS.",
97
99
  },
98
100
  {
99
- pythonTest: "tests/cli/test_vbrief_validation.py",
101
+ pythonTest: `${PY_CLI_TESTS}/test_vbrief_validation.py`,
100
102
  tsTarget: "packages/core/src/vbrief-validation/validation.test.ts",
101
103
  disposition: "lifecycle-cli-dispatch",
102
104
  wave9Delete: true,
103
105
  notes: "Slug/title normalization in core; deft-ts vbrief-validation argv in lifecycle-cli.",
104
106
  },
105
107
  {
106
- pythonTest: "tests/cli/test_scope_decompose.py",
108
+ pythonTest: `${PY_CLI_TESTS}/test_scope_decompose.py`,
107
109
  tsTarget: "packages/core/src/scope/decomposed-refs.test.ts",
108
110
  disposition: "python-oracle",
109
111
  wave9Delete: false,
110
112
  notes: "scope:decompose CLI still Python; unit helpers partially covered in decomposed-refs TS.",
111
113
  },
112
114
  {
113
- pythonTest: "tests/cli/test_scope_decompose_unit.py",
115
+ pythonTest: `${PY_CLI_TESTS}/test_scope_decompose_unit.py`,
114
116
  tsTarget: "packages/core/src/scope/decomposed-refs.test.ts",
115
117
  disposition: "existing-coverage",
116
118
  wave9Delete: false,
117
119
  notes: "Pure decomposition helpers; CLI entry remains Python until Wave 9.",
118
120
  },
119
121
  {
120
- pythonTest: "tests/cli/test_scope_demote.py",
122
+ pythonTest: `${PY_CLI_TESTS}/test_scope_demote.py`,
121
123
  tsTarget: "packages/core/src/scope/demote.test.ts",
122
124
  disposition: "lifecycle-cli-dispatch",
123
125
  wave9Delete: true,
124
126
  notes: "Demote transitions in core; deft-ts scope-lifecycle argv in lifecycle-cli.",
125
127
  },
126
128
  {
127
- pythonTest: "tests/cli/test_scope_lifecycle.py",
129
+ pythonTest: `${PY_CLI_TESTS}/test_scope_lifecycle.py`,
128
130
  tsTarget: "packages/core/src/scope/{main,transition,scope-exhaustive}.test.ts",
129
131
  disposition: "lifecycle-cli-dispatch",
130
132
  wave9Delete: true,
131
133
  notes: "Promote/activate/complete matrix in core; scope-lifecycle dispatcher in lifecycle-cli.",
132
134
  },
133
135
  {
134
- pythonTest: "tests/cli/test_scope_undo.py",
136
+ pythonTest: `${PY_CLI_TESTS}/test_scope_undo.py`,
135
137
  tsTarget: "packages/core/src/scope/undo.test.ts",
136
138
  disposition: "existing-coverage",
137
139
  wave9Delete: true,
138
140
  notes: "Undo round-trip covered in TS scope module.",
139
141
  },
140
142
  {
141
- pythonTest: "tests/cli/test_issue_emit.py",
143
+ pythonTest: `${PY_CLI_TESTS}/test_issue_emit.py`,
142
144
  tsTarget: "packages/core/src/intake/issue-emit.test.ts",
143
145
  disposition: "lifecycle-cli-dispatch",
144
146
  wave9Delete: true,
145
147
  notes: "Emit body/render in core; deft-ts issue-emit argv in lifecycle-cli.",
146
148
  },
147
149
  {
148
- pythonTest: "tests/cli/test_issue_ingest.py",
150
+ pythonTest: `${PY_CLI_TESTS}/test_issue_ingest.py`,
149
151
  tsTarget: "packages/core/src/intake/{issue-ingest,intake-cli-and-branches}.test.ts + lifecycle-cli/dispatch-intake.test.ts",
150
152
  disposition: "lifecycle-cli-dispatch",
151
153
  wave9Delete: true,
152
154
  notes: "Ingest happy-path/duplicate in core; dispatcher routing in lifecycle-cli.",
153
155
  },
154
156
  {
155
- pythonTest: "tests/cli/test_issue_ingest_body_parsing.py",
157
+ pythonTest: `${PY_CLI_TESTS}/test_issue_ingest_body_parsing.py`,
156
158
  tsTarget: "packages/core/src/intake/markdown-scanners.test.ts",
157
159
  disposition: "existing-coverage",
158
160
  wave9Delete: true,
159
161
  notes: "Checkbox/AC body scanners in TS intake module.",
160
162
  },
161
163
  {
162
- pythonTest: "tests/cli/test_issue_ingest_canonical_refs.py",
164
+ pythonTest: `${PY_CLI_TESTS}/test_issue_ingest_canonical_refs.py`,
163
165
  tsTarget: "packages/core/src/intake/issue-ingest.test.ts",
164
166
  disposition: "existing-coverage",
165
167
  wave9Delete: true,
166
168
  notes: "v0.6 canonical reference shape in TS ingest.",
167
169
  },
168
170
  {
169
- pythonTest: "tests/cli/test_issue_ingest_direct.py",
171
+ pythonTest: `${PY_CLI_TESTS}/test_issue_ingest_direct.py`,
170
172
  tsTarget: "packages/core/src/intake/intake-coverage-boost.test.ts",
171
173
  disposition: "existing-coverage",
172
174
  wave9Delete: true,
173
175
  notes: "Repo URL / gh helper branches in TS intake.",
174
176
  },
175
177
  {
176
- pythonTest: "tests/cli/test_issue_ingest_escape_corruption.py",
178
+ pythonTest: `${PY_CLI_TESTS}/test_issue_ingest_escape_corruption.py`,
177
179
  tsTarget: "packages/core/src/intake/intake-cli-and-branches.test.ts",
178
180
  disposition: "existing-coverage",
179
181
  wave9Delete: true,
180
182
  notes: "Literal escape preservation in TS ingest path.",
181
183
  },
182
184
  {
183
- pythonTest: "tests/cli/test_reconcile_issues.py",
185
+ pythonTest: `${PY_CLI_TESTS}/test_reconcile_issues.py`,
184
186
  tsTarget: "packages/core/src/intake/reconcile-issues.test.ts",
185
187
  disposition: "lifecycle-cli-dispatch",
186
188
  wave9Delete: true,
187
189
  notes: "Reconcile classification in core; deft-ts reconcile-issues argv in lifecycle-cli.",
188
190
  },
189
191
  {
190
- pythonTest: "tests/cli/test_reconcile_issues_754.py",
192
+ pythonTest: `${PY_CLI_TESTS}/test_reconcile_issues_754.py`,
191
193
  tsTarget: "packages/core/src/intake/reconcile-issues.test.ts",
192
194
  disposition: "existing-coverage",
193
195
  wave9Delete: true,
194
196
  notes: "Batch gh state fetch (>500) in TS reconcile module.",
195
197
  },
196
198
  {
197
- pythonTest: "tests/cli/test_reconcile_issues_apply.py",
199
+ pythonTest: `${PY_CLI_TESTS}/test_reconcile_issues_apply.py`,
198
200
  tsTarget: "packages/core/src/intake/reconcile-issues.test.ts",
199
201
  disposition: "existing-coverage",
200
202
  wave9Delete: true,
201
203
  notes: "Apply/move section-C entries in TS reconcile.",
202
204
  },
203
205
  {
204
- pythonTest: "tests/cli/test_reconcile_issues_direct.py",
206
+ pythonTest: `${PY_CLI_TESTS}/test_reconcile_issues_direct.py`,
205
207
  tsTarget: "packages/core/src/intake/intake-coverage-boost.test.ts",
206
208
  disposition: "existing-coverage",
207
209
  wave9Delete: true,
208
210
  notes: "gh subprocess error branches in TS reconcile helpers.",
209
211
  },
210
212
  {
211
- pythonTest: "tests/cli/test_preflight_architecture_sor.py",
213
+ pythonTest: `${PY_CLI_TESTS}/test_preflight_architecture_sor.py`,
212
214
  tsTarget: "python-oracle (scripts/preflight_architecture_sor.py)",
213
215
  disposition: "python-oracle",
214
216
  wave9Delete: false,
215
217
  notes: "Architecture SOR preflight not yet on deft-ts; stays Python until TS port.",
216
218
  },
217
219
  {
218
- pythonTest: "tests/cli/test_preflight_branch.py",
220
+ pythonTest: `${PY_CLI_TESTS}/test_preflight_branch.py`,
219
221
  tsTarget: "packages/core/src/branch/evaluate.test.ts + packages/cli/src/verify-branch.test.ts + lifecycle-cli/dispatch-preflight.test.ts",
220
222
  disposition: "lifecycle-cli-dispatch",
221
223
  wave9Delete: true,
222
224
  notes: "Branch gate in core/cli; verify-branch + vbrief:preflight alias via dispatcher.",
223
225
  },
224
226
  {
225
- pythonTest: "tests/cli/test_preflight_cache.py",
227
+ pythonTest: `${PY_CLI_TESTS}/test_preflight_cache.py`,
226
228
  tsTarget: "python-oracle (scripts/preflight_cache.py)",
227
229
  disposition: "python-oracle",
228
230
  wave9Delete: false,
229
231
  notes: "verify:cache-fresh still Python-only per Wave 8 notes; TS cache module covers fetch not preflight gate.",
230
232
  },
231
233
  {
232
- pythonTest: "tests/cli/test_preflight_gh.py",
234
+ pythonTest: `${PY_CLI_TESTS}/test_preflight_gh.py`,
233
235
  tsTarget: "python-oracle (scripts/preflight_gh.py)",
234
236
  disposition: "python-oracle",
235
237
  wave9Delete: false,
236
238
  notes: "Destructive gh preflight still Python-only; intake github-auth-modes partially overlaps read paths.",
237
239
  },
238
240
  {
239
- pythonTest: "tests/cli/test_preflight_implementation.py",
241
+ pythonTest: `${PY_CLI_TESTS}/test_preflight_implementation.py`,
240
242
  tsTarget: "packages/core/src/preflight/evaluate.test.ts + packages/cli/src/vbrief-preflight.test.ts + lifecycle-cli/dispatch-preflight.test.ts",
241
243
  disposition: "lifecycle-cli-dispatch",
242
244
  wave9Delete: true,
243
245
  notes: "#810 state matrix in core; vbrief:preflight / vbrief-preflight dispatcher in lifecycle-cli.",
244
246
  },
245
247
  {
246
- pythonTest: "tests/cli/test_preflight_story_start.py",
248
+ pythonTest: `${PY_CLI_TESTS}/test_preflight_story_start.py`,
247
249
  tsTarget: "packages/core/src/story-ready/evaluate.test.ts + packages/cli/src/verify-story-ready.test.ts + lifecycle-cli/dispatch-preflight.test.ts",
248
250
  disposition: "lifecycle-cli-dispatch",
249
251
  wave9Delete: true,
package/dist/migrate.js CHANGED
@@ -3,9 +3,13 @@
3
3
  * Bumps the committed schema marker and runs supported vbrief→xbrief migration.
4
4
  */
5
5
  import { existsSync, readFileSync } from "node:fs";
6
- import { join } from "node:path";
6
+ import { join, resolve } from "node:path";
7
7
  import { ContainedWriteError, containedWrite, } from "../vendor/directive-core/dist/fs/contained-write.js";
8
8
  import { detectLegacyVbriefLayout, detectXbriefConvergence, runXbriefMigration, } from "../vendor/directive-core/dist/xbrief-migrate/index.js";
9
+ /** Normalize caller roots (including relative `--root app`) before path probes. */
10
+ function absoluteProjectRoot(projectRoot) {
11
+ return resolve(projectRoot);
12
+ }
9
13
  export const DATA_SCHEMA_MARKER_REL = ".deft/directive/data-schema.json";
10
14
  /** YOLO initial supported schema version recorded by migrate. */
11
15
  export const CURRENT_DATA_SCHEMA_VERSION = 1;
@@ -47,16 +51,19 @@ function emptyResult(from, root, message) {
47
51
  * Marker currency alone is insufficient — unmigrated vbrief/ must stay behind.
48
52
  */
49
53
  export function projectNeedsXbriefMigration(projectRoot) {
50
- const convergence = detectXbriefConvergence(projectRoot);
54
+ const root = absoluteProjectRoot(projectRoot);
55
+ const convergence = detectXbriefConvergence(root);
51
56
  if (convergence.state === "legacy-only" ||
52
57
  convergence.state === "dual-populated" ||
53
58
  convergence.state === "empty-vbrief") {
54
59
  return true;
55
60
  }
61
+ // Marked vbrief/ retention is intentional; probe residual under xbrief/ only
62
+ // (skipLegacyRoot) so we never parse reason-string paths.
56
63
  if (convergence.state === "xbrief-marker") {
57
- return false;
64
+ return detectLegacyVbriefLayout(root, { skipLegacyRoot: true }).legacyLayout;
58
65
  }
59
- return detectLegacyVbriefLayout(projectRoot).legacyLayout;
66
+ return detectLegacyVbriefLayout(root).legacyLayout;
60
67
  }
61
68
  function applyXbriefMigration(root) {
62
69
  if (!projectNeedsXbriefMigration(root)) {
@@ -74,9 +81,7 @@ function applyXbriefMigration(root) {
74
81
  migrated: [...outcome.migratedPaths],
75
82
  archived: [...outcome.archivedPaths],
76
83
  message: `xbrief migrate: ${outcome.migratedPaths.length} migrated` +
77
- (outcome.archivedPaths.length > 0
78
- ? `, ${outcome.archivedPaths.length} archived`
79
- : ""),
84
+ (outcome.archivedPaths.length > 0 ? `, ${outcome.archivedPaths.length} archived` : ""),
80
85
  };
81
86
  case "rewritten":
82
87
  return {
@@ -3,6 +3,6 @@
3
3
  * Runtime owns fs primitives so uninstall and upgrade share one substrate.
4
4
  * Launcher stays dep-free (AC3.1); cli registry only names convert-via-removals.
5
5
  */
6
- export { clearOwnedHookEntries, isUnsafeSubmoduleGitlink, normalizeGitmodules, pruneEmptyAncestors, RemovalStepError, removeCopiedCore, removeDeftFrameworkTree, removeOrphanDeftVersion, removeOwnedSkillPointers, removeSoleAuthorHusks, runStep, stripLegacyLauncherPin, type RemovalStepId, type StepContext, type StepResult, } from "./steps.js";
7
- export { isConvertStrategyFrom, runStrategy, STRATEGIES, strategyForShape, type LayoutStrategy, type StrategyResult, type StrategyShapeId, } from "./strategies.js";
6
+ export { clearOwnedHookEntries, isUnsafeSubmoduleGitlink, normalizeGitmodules, pruneEmptyAncestors, RemovalStepError, type RemovalStepId, removeCopiedCore, removeDeftFrameworkTree, removeOrphanDeftVersion, removeOwnedSkillPointers, removeSoleAuthorHusks, runStep, type StepContext, type StepResult, stripLegacyLauncherPin, } from "./steps.js";
7
+ export { isConvertStrategyFrom, type LayoutStrategy, runStrategy, STRATEGIES, type StrategyResult, type StrategyShapeId, strategyForShape, } from "./strategies.js";
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -4,7 +4,7 @@
4
4
  * Layout steps (core / deft / hooks / skills / gitmodules / orphan): wave 3f.
5
5
  */
6
6
  import { execFileSync } from "node:child_process";
7
- import { existsSync, lstatSync, readdirSync, readFileSync, writeFileSync, } from "node:fs";
7
+ import { existsSync, lstatSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
8
8
  import { dirname, join, sep } from "node:path";
9
9
  import { containedRemove } from "../../vendor/directive-core/dist/fs/contained-write.js";
10
10
  import { CONSUMER_HEADER_PLACEHOLDER_ONELINER, renderConsumerHeader, unmanagedHeaderOneLiner, } from "../../vendor/directive-core/dist/platform/agents-consumer-header.js";
@@ -35,10 +35,7 @@ const HOST_HOOK_RELS = [
35
35
  ".codex/hooks.json",
36
36
  ".grok/hooks/deft.json",
37
37
  ];
38
- const DIRECTIVE_PACKAGE_NAMES = new Set([
39
- "@deftai/directive",
40
- "@deftai/directive-runtime",
41
- ]);
38
+ const DIRECTIVE_PACKAGE_NAMES = new Set(["@deftai/directive", "@deftai/directive-runtime"]);
42
39
  const GITIGNORE_SEED_LINES = new Set([
43
40
  "node_modules/",
44
41
  "node_modules",
@@ -215,7 +212,9 @@ function isNearEmptyLockfile(abs) {
215
212
  return true;
216
213
  if (abs.endsWith("pnpm-lock.yaml")) {
217
214
  // Near-empty pnpm lock: no package snapshots beyond lockfileVersion / settings.
218
- if (!/^\s*[^#\s].*:/m.test(trimmed.replace(/^lockfileVersion:.*$/m, "").replace(/^settings:[\s\S]*?(?=\n\S|\n*$)/m, ""))) {
215
+ if (!/^\s*[^#\s].*:/m.test(trimmed
216
+ .replace(/^lockfileVersion:.*$/m, "")
217
+ .replace(/^settings:[\s\S]*?(?=\n\S|\n*$)/m, ""))) {
219
218
  return trimmed.length < 200;
220
219
  }
221
220
  if (/importers:\s*\n\s*\.:\s*\n\s*(?:dependencies|devDependencies):\s*\n\s*\{\s*\}/.test(trimmed)) {
@@ -656,9 +655,7 @@ export function normalizeGitmodules(root) {
656
655
  export function runStep(stepId, ctx) {
657
656
  switch (stepId) {
658
657
  case "pruneEmptyAncestors": {
659
- const seeds = ctx.emptiedFrom !== undefined
660
- ? [ctx.emptiedFrom]
661
- : [...(ctx.priorRemoved ?? [])];
658
+ const seeds = ctx.emptiedFrom !== undefined ? [ctx.emptiedFrom] : [...(ctx.priorRemoved ?? [])];
662
659
  if (seeds.length === 0) {
663
660
  // Standalone call still requires a seed (uninstall / unit API).
664
661
  throw new Error("pruneEmptyAncestors requires ctx.emptiedFrom or ctx.priorRemoved");
@@ -2,7 +2,7 @@
2
2
  * WAVE3-V2 layout strategies — fixed table of ordered removal step ids.
3
3
  * Bookends dispatch detect → strategy; bulk logic stays in steps (smell test).
4
4
  */
5
- import { RemovalStepError, runStep, } from "./steps.js";
5
+ import { RemovalStepError, runStep } from "./steps.js";
6
6
  const CONVERT_SHAPE_IDS = new Set([
7
7
  "vendored-core-go",
8
8
  "go-tarball-deft-root",
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Package-relative wiring writers for Contract 1 setup (Wave 2c / R9 / AC13.1).
3
+ * All managed pointers target node_modules/@deftai/directive-runtime/ — never .deft/core.
4
+ */
1
5
  import { type HostHooksPolicy } from "@deftai/directive-core/dist/policy/host-hooks.js";
2
6
  export declare const RUNTIME_PREFIX = "node_modules/@deftai/directive-runtime/";
3
7
  export declare const HOOK_BIN_COMMAND = "node node_modules/@deftai/directive-runtime/dist/hook-bin.js";
@@ -2,9 +2,9 @@
2
2
  * Package-relative wiring writers for Contract 1 setup (Wave 2c / R9 / AC13.1).
3
3
  * All managed pointers target node_modules/@deftai/directive-runtime/ — never .deft/core.
4
4
  */
5
+ import { execFileSync } from "node:child_process";
5
6
  import { existsSync, readdirSync, readFileSync } from "node:fs";
6
7
  import { dirname, join } from "node:path";
7
- import { execFileSync } from "node:child_process";
8
8
  import { fileURLToPath } from "node:url";
9
9
  import { containedChmod, containedRemove, containedWrite, } from "../vendor/directive-core/dist/fs/contained-write.js";
10
10
  import { DIRECT_WRITE_HOOK_MATCHER, KILL_HOOK_MATCHER, MCP_HOOK_MATCHER, SHELL_HOOK_MATCHER, SPAWN_HOOK_MATCHER, } from "../vendor/directive-core/dist/hooks/tools.js";
@@ -555,7 +555,9 @@ function mergeNestedHost(existing, host, options) {
555
555
  }
556
556
  function mergeCursorHost(existing) {
557
557
  const hooks = object(existing.hooks) ?? {};
558
- const keep = (key) => Array.isArray(hooks[key]) ? hooks[key].filter((e) => !cursorManagedEntry(e)) : [];
558
+ const keep = (key) => Array.isArray(hooks[key])
559
+ ? hooks[key].filter((e) => !cursorManagedEntry(e))
560
+ : [];
559
561
  return {
560
562
  ...existing,
561
563
  version: 1,
@@ -820,8 +822,7 @@ export function ensureGitHooks(projectRoot) {
820
822
  hooksPathActive = true;
821
823
  }
822
824
  catch {
823
- inactiveDisclosure =
824
- "Git hooks inactive: could not set core.hooksPath=.githooks";
825
+ inactiveDisclosure = "Git hooks inactive: could not set core.hooksPath=.githooks";
825
826
  }
826
827
  }
827
828
  else if (current === ".githooks" || current === ".githooks/") {
@@ -842,9 +843,7 @@ includes:
842
843
  ${RUNTIME_TASKFILE_INCLUDE}
843
844
  optional: true
844
845
  `;
845
- const DEFT_INCLUDE_BLOCK = ` deft:\n` +
846
- ` taskfile: ./${RUNTIME_PREFIX}Taskfile.yml\n` +
847
- ` optional: true\n`;
846
+ const DEFT_INCLUDE_BLOCK = ` deft:\n` + ` taskfile: ./${RUNTIME_PREFIX}Taskfile.yml\n` + ` optional: true\n`;
848
847
  /**
849
848
  * Merge the Directive `deft:` include into an existing Taskfile without
850
849
  * duplicating top-level `includes:` keys or an occupied `deft` child.