@deftai/directive-runtime 0.129.0 → 0.129.2

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 (79) hide show
  1. package/.githooks/_directive-run.sh +9 -12
  2. package/.githooks/pre-push +1 -5
  3. package/UPGRADING.md +2 -2
  4. package/dist/doctor-diagnose.d.ts +8 -3
  5. package/dist/doctor-diagnose.js +29 -8
  6. package/dist/hook-dispatch.js +2 -1
  7. package/dist/pre-pr-run.js +9 -2
  8. package/dist/self-complete.d.ts +4 -0
  9. package/dist/self-complete.js +18 -0
  10. package/dist/setup-wiring.d.ts +5 -0
  11. package/dist/setup-wiring.js +123 -41
  12. package/dist/setup.js +73 -1
  13. package/package.json +1 -1
  14. package/packs/skills/skills-pack-0.1.json +2 -2
  15. package/skills/deft-directive-refinement/SKILL.md +2 -2
  16. package/skills/deft-directive-setup/SKILL.md +2 -2
  17. package/skills/deft-directive-swarm/references/core-phase-0.md +1 -1
  18. package/tasks/docs.yml +1 -1
  19. package/tasks/engine-invoke.cjs +37 -2
  20. package/tasks/engine-invoke.test.cjs +14 -0
  21. package/tasks/engine.yml +5 -0
  22. package/vendor/directive-content/.githooks/_directive-run.sh +9 -12
  23. package/vendor/directive-content/.githooks/pre-push +1 -5
  24. package/vendor/directive-content/UPGRADING.md +2 -2
  25. package/vendor/directive-content/packs/skills/skills-pack-0.1.json +2 -2
  26. package/vendor/directive-content/skills/deft-directive-refinement/SKILL.md +2 -2
  27. package/vendor/directive-content/skills/deft-directive-setup/SKILL.md +2 -2
  28. package/vendor/directive-content/skills/deft-directive-swarm/references/core-phase-0.md +1 -1
  29. package/vendor/directive-content/tasks/docs.yml +1 -1
  30. package/vendor/directive-content/tasks/engine-invoke.cjs +37 -2
  31. package/vendor/directive-content/tasks/engine-invoke.test.cjs +14 -0
  32. package/vendor/directive-content/tasks/engine.yml +5 -0
  33. package/vendor/directive-core/dist/.tsbuildinfo +1 -1
  34. package/vendor/directive-core/dist/class-checks/evaluate.d.ts.map +1 -1
  35. package/vendor/directive-core/dist/class-checks/evaluate.js +25 -0
  36. package/vendor/directive-core/dist/class-checks/evaluate.js.map +1 -1
  37. package/vendor/directive-core/dist/coverage-applicability/evaluate.d.ts.map +1 -1
  38. package/vendor/directive-core/dist/coverage-applicability/evaluate.js +135 -6
  39. package/vendor/directive-core/dist/coverage-applicability/evaluate.js.map +1 -1
  40. package/vendor/directive-core/dist/coverage-hotspots/evaluate.d.ts +2 -0
  41. package/vendor/directive-core/dist/coverage-hotspots/evaluate.d.ts.map +1 -1
  42. package/vendor/directive-core/dist/coverage-hotspots/evaluate.js +19 -6
  43. package/vendor/directive-core/dist/coverage-hotspots/evaluate.js.map +1 -1
  44. package/vendor/directive-core/dist/fs/contained-write.d.ts +12 -0
  45. package/vendor/directive-core/dist/fs/contained-write.d.ts.map +1 -1
  46. package/vendor/directive-core/dist/fs/contained-write.js +35 -1
  47. package/vendor/directive-core/dist/fs/contained-write.js.map +1 -1
  48. package/vendor/directive-core/dist/init-deposit/agent-hooks.d.ts +1 -0
  49. package/vendor/directive-core/dist/init-deposit/agent-hooks.d.ts.map +1 -1
  50. package/vendor/directive-core/dist/init-deposit/agent-hooks.js +75 -72
  51. package/vendor/directive-core/dist/init-deposit/agent-hooks.js.map +1 -1
  52. package/vendor/directive-core/dist/init-deposit/host-hook-outer.d.ts +26 -0
  53. package/vendor/directive-core/dist/init-deposit/host-hook-outer.d.ts.map +1 -0
  54. package/vendor/directive-core/dist/init-deposit/host-hook-outer.js +158 -0
  55. package/vendor/directive-core/dist/init-deposit/host-hook-outer.js.map +1 -0
  56. package/vendor/directive-core/dist/init-deposit/hygiene.d.ts.map +1 -1
  57. package/vendor/directive-core/dist/init-deposit/hygiene.js +29 -1
  58. package/vendor/directive-core/dist/init-deposit/hygiene.js.map +1 -1
  59. package/vendor/directive-core/dist/install-health/wiring.d.ts.map +1 -1
  60. package/vendor/directive-core/dist/install-health/wiring.js +141 -1
  61. package/vendor/directive-core/dist/install-health/wiring.js.map +1 -1
  62. package/vendor/directive-core/dist/pre-pr-controller/controller.d.ts +1 -1
  63. package/vendor/directive-core/dist/pre-pr-controller/controller.d.ts.map +1 -1
  64. package/vendor/directive-core/dist/pre-pr-controller/controller.js +43 -15
  65. package/vendor/directive-core/dist/pre-pr-controller/controller.js.map +1 -1
  66. package/vendor/directive-core/dist/pre-pr-controller/coverage-report.d.ts +22 -0
  67. package/vendor/directive-core/dist/pre-pr-controller/coverage-report.d.ts.map +1 -0
  68. package/vendor/directive-core/dist/pre-pr-controller/coverage-report.js +48 -0
  69. package/vendor/directive-core/dist/pre-pr-controller/coverage-report.js.map +1 -0
  70. package/vendor/directive-core/dist/pre-pr-controller/types.d.ts +7 -0
  71. package/vendor/directive-core/dist/pre-pr-controller/types.d.ts.map +1 -1
  72. package/vendor/directive-core/dist/pre-pr-controller/types.js.map +1 -1
  73. package/vendor/directive-core/dist/xbrief-migrate/migrate-project.d.ts +5 -4
  74. package/vendor/directive-core/dist/xbrief-migrate/migrate-project.d.ts.map +1 -1
  75. package/vendor/directive-core/dist/xbrief-migrate/migrate-project.js +65 -46
  76. package/vendor/directive-core/dist/xbrief-migrate/migrate-project.js.map +1 -1
  77. package/vendor/directive-core/dist/xbrief-migrate/transforms.d.ts.map +1 -1
  78. package/vendor/directive-core/dist/xbrief-migrate/transforms.js +13 -6
  79. package/vendor/directive-core/dist/xbrief-migrate/transforms.js.map +1 -1
package/dist/setup.js CHANGED
@@ -9,14 +9,20 @@ import { existsSync, readdirSync, readFileSync } from "node:fs";
9
9
  import { dirname, join } from "node:path";
10
10
  import { fileURLToPath } from "node:url";
11
11
  import { ContainedWriteError, containedRemove, containedWrite, } from "../vendor/directive-core/dist/fs/contained-write.js";
12
+ import { defaultTrackedNames, isTrackedDeletePath, stageFrameworkPaths, } from "../vendor/directive-core/dist/init-deposit/hygiene.js";
13
+ import { seedMinimalProjectDefinition } from "../vendor/directive-core/dist/init-deposit/init-deposit.js";
12
14
  import { buildOwnershipRecord, fingerprintContent, ownershipRecordsEqual, readEvidenceGenerationNumber, readOwnershipRecord, writeOwnershipRecord, } from "../vendor/directive-core/dist/install-health/index.js";
13
15
  import { assertInventoryCompleteness } from "./installer-output-inventory.js";
14
16
  import { CURRENT_DATA_SCHEMA_VERSION, DATA_SCHEMA_MARKER_REL } from "./migrate.js";
15
17
  import { isConvertStrategyFrom, runStrategy } from "./removal-steps/index.js";
16
18
  import { ensureAgentsManagedSection, ensureGitHooks, ensureHostHooks, ensureOpenClawIntegrations, ensureSkillPointers, ensureSlashCommands, ensureTaskfileInclude, listSkillPointerPaths, listVerifiedManagedSlashCommandPaths, RUNTIME_PREFIX, } from "./setup-wiring.js";
17
19
  const SEED_PLACEHOLDER_REL = "xbrief/.directive-seed-placeholder";
20
+ const PD_REL = "xbrief/PROJECT-DEFINITION.xbrief.json";
18
21
  const GEN_REL = ".deft/GENERATION.json";
19
22
  const WIRING_READY_DIR_REL = ".deft/directive";
23
+ const XBRIEF_LIFECYCLE_DIRS = ["proposed", "pending", "active", "completed", "cancelled"];
24
+ const XBRIEF_LIFECYCLE_GITKEEP = "# Keeps this xbrief/ lifecycle directory present in version control so the\n" +
25
+ "# deft-directive-setup pre-cutover guard does not fire on a fresh install (#4666).\n";
20
26
  function readOwnRuntimeVersion() {
21
27
  try {
22
28
  const here = dirname(fileURLToPath(import.meta.url));
@@ -144,6 +150,59 @@ function createSeedPlaceholder(projectRoot) {
144
150
  writeContained(projectRoot, SEED_PLACEHOLDER_REL, "# Directive initial seed placeholder (install only; repair must not create this).\n");
145
151
  return SEED_PLACEHOLDER_REL;
146
152
  }
153
+ /** Install-only: five xbrief lifecycle dirs + .gitkeeps (#4666 / AC8.4). */
154
+ function ensureXbriefLifecycleGitkeeps(projectRoot) {
155
+ const created = [];
156
+ for (const sub of XBRIEF_LIFECYCLE_DIRS) {
157
+ const rel = relPosix("xbrief", sub, ".gitkeep");
158
+ if (existsSync(join(projectRoot, rel)))
159
+ continue;
160
+ writeContained(projectRoot, rel, XBRIEF_LIFECYCLE_GITKEEP);
161
+ created.push(rel);
162
+ }
163
+ return created;
164
+ }
165
+ /**
166
+ * Stage this-run setup writes after install/upgrade (#4666).
167
+ * Always includes PD + lifecycle gitkeeps when present (fix the 0.126 hole).
168
+ * Does not `git add` every existing managed matcher path — that would stage
169
+ * unrelated dirty peers (package.json / custom .githooks/*). Keeps exact
170
+ * this-run paths (no skill/command parent compaction) so sibling untracked
171
+ * skills stay unstaged. This-run removals may be missing on disk so tracked
172
+ * deletions can reach `git add`; untracked missing paths are skipped so one
173
+ * unmatched pathspec cannot fail the whole staging batch (#5883 P1 / #3394).
174
+ */
175
+ function stageSetupManagedPaths(projectRoot, thisRunPaths) {
176
+ const present = [];
177
+ const missingAllow = [];
178
+ const seen = new Set();
179
+ const add = (rel, opts = {}) => {
180
+ const normalized = rel.replace(/\\/g, "/");
181
+ if (!normalized || seen.has(normalized))
182
+ return;
183
+ const onDisk = existsSync(join(projectRoot, normalized));
184
+ if (!onDisk && !opts.allowMissing)
185
+ return;
186
+ seen.add(normalized);
187
+ if (onDisk)
188
+ present.push(normalized);
189
+ else
190
+ missingAllow.push(normalized);
191
+ };
192
+ for (const rel of thisRunPaths) {
193
+ add(rel, { allowMissing: true });
194
+ }
195
+ add(PD_REL);
196
+ for (const sub of XBRIEF_LIFECYCLE_DIRS) {
197
+ add(relPosix("xbrief", sub, ".gitkeep"));
198
+ }
199
+ const tracked = new Set(defaultTrackedNames(projectRoot, missingAllow));
200
+ const stagePaths = [
201
+ ...present,
202
+ ...missingAllow.filter((path) => isTrackedDeletePath(path, tracked)),
203
+ ];
204
+ stageFrameworkPaths(projectRoot, stagePaths);
205
+ }
147
206
  /** Shared host settings / Taskfile: only Directive entries are owned (structured-entry). */
148
207
  const STRUCTURED_ENTRY_RELS = [
149
208
  { path: ".claude/settings.json", entryKey: "hooks" },
@@ -207,7 +266,9 @@ function buildOwnershipArtifacts(projectRoot) {
207
266
  });
208
267
  }
209
268
  const seedAbs = join(projectRoot, SEED_PLACEHOLDER_REL);
210
- if (existsSync(seedAbs)) {
269
+ const pdAbs = join(projectRoot, PD_REL);
270
+ const hasLifecycle = XBRIEF_LIFECYCLE_DIRS.some((sub) => existsSync(join(projectRoot, "xbrief", sub, ".gitkeep")));
271
+ if (existsSync(seedAbs) || existsSync(pdAbs) || hasLifecycle) {
211
272
  artifacts.push({
212
273
  path: "xbrief",
213
274
  kind: "retained",
@@ -312,10 +373,15 @@ export function runSetup(options) {
312
373
  // Seeds only on first-time install (AC8.4); repair/upgrade never create them.
313
374
  // AC6.2: leave data-schema current for empty/seeded install. Repair may write a
314
375
  // missing marker (not a migration); upgrade still migrates when data is behind.
376
+ // #4666: greenfield retain — PD + lifecycle dirs (not placeholder-only); no schemas.
315
377
  if (operation === "install" && conflicts.length === 0) {
316
378
  const seed = createSeedPlaceholder(root);
317
379
  if (seed !== null)
318
380
  created.push(seed);
381
+ created.push(...ensureXbriefLifecycleGitkeeps(root));
382
+ if (seedMinimalProjectDefinition(root, { printf: () => undefined })) {
383
+ created.push(PD_REL);
384
+ }
319
385
  }
320
386
  if ((operation === "install" || operation === "repair") &&
321
387
  conflicts.length === 0 &&
@@ -338,6 +404,12 @@ export function runSetup(options) {
338
404
  created.push(GEN_REL);
339
405
  else if (!unchanged || legacyConversion || convertViaRemovals)
340
406
  modified.push(GEN_REL);
407
+ // #4666: stage this-run managed peers including PD + lifecycle after install/upgrade.
408
+ // Still no auto-commit. Repair does not stage (seeds are install-only; upgrade stages
409
+ // existing PD/lifecycle with refreshed wiring).
410
+ if (conflicts.length === 0 && (operation === "install" || operation === "upgrade")) {
411
+ stageSetupManagedPaths(root, [...created, ...modified, ...removed]);
412
+ }
341
413
  if (conflicts.length > 0) {
342
414
  // Never publish readiness after conflict; invalidate any existing marker (AC8.6).
343
415
  invalidateReadinessMarkers(root, removed);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deftai/directive-runtime",
3
- "version": "0.129.0",
3
+ "version": "0.129.2",
4
4
  "description": "Directive runtime — pinned product commands, hooks, content, and engine.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://deftai.github.io/directive/",