@deftai/directive-runtime 0.126.0-beta.1 → 0.126.0-beta.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 (80) hide show
  1. package/contracts/human-origin-authz.md +14 -8
  2. package/dist/coverage-hotspots.d.ts +3 -0
  3. package/dist/coverage-hotspots.js +42 -2
  4. package/dist/occupancy-release.d.ts +5 -0
  5. package/dist/occupancy-release.js +11 -3
  6. package/dist/policy.d.ts +2 -0
  7. package/dist/policy.js +6 -0
  8. package/dist/triage-actions.js +10 -2
  9. package/docs/framework-gap-filing.md +85 -0
  10. package/docs/product-signal.md +1 -1
  11. package/package.json +1 -1
  12. package/packs/skills/skills-pack-0.1.json +6 -3
  13. package/scm/github.md +1 -1
  14. package/skills/deft-directive-feedback/SKILL.md +19 -14
  15. package/skills/deft-directive-product-signal/SKILL.md +1 -1
  16. package/vendor/directive-content/contracts/human-origin-authz.md +14 -8
  17. package/vendor/directive-content/docs/framework-gap-filing.md +85 -0
  18. package/vendor/directive-content/docs/product-signal.md +1 -1
  19. package/vendor/directive-content/packs/skills/skills-pack-0.1.json +6 -3
  20. package/vendor/directive-content/scm/github.md +1 -1
  21. package/vendor/directive-content/skills/deft-directive-feedback/SKILL.md +19 -14
  22. package/vendor/directive-content/skills/deft-directive-product-signal/SKILL.md +1 -1
  23. package/vendor/directive-core/dist/.tsbuildinfo +1 -1
  24. package/vendor/directive-core/dist/coverage-applicability/evaluate.d.ts.map +1 -1
  25. package/vendor/directive-core/dist/coverage-applicability/evaluate.js +39 -0
  26. package/vendor/directive-core/dist/coverage-applicability/evaluate.js.map +1 -1
  27. package/vendor/directive-core/dist/coverage-hotspots/evaluate.d.ts +24 -5
  28. package/vendor/directive-core/dist/coverage-hotspots/evaluate.d.ts.map +1 -1
  29. package/vendor/directive-core/dist/coverage-hotspots/evaluate.js +89 -8
  30. package/vendor/directive-core/dist/coverage-hotspots/evaluate.js.map +1 -1
  31. package/vendor/directive-core/dist/hooks/dispatcher.d.ts.map +1 -1
  32. package/vendor/directive-core/dist/hooks/dispatcher.js +10 -2
  33. package/vendor/directive-core/dist/hooks/dispatcher.js.map +1 -1
  34. package/vendor/directive-core/dist/init-deposit/skill-discovery-deposit.d.ts.map +1 -1
  35. package/vendor/directive-core/dist/init-deposit/skill-discovery-deposit.js +15 -0
  36. package/vendor/directive-core/dist/init-deposit/skill-discovery-deposit.js.map +1 -1
  37. package/vendor/directive-core/dist/intake/issue-ingest.d.ts +13 -0
  38. package/vendor/directive-core/dist/intake/issue-ingest.d.ts.map +1 -1
  39. package/vendor/directive-core/dist/intake/issue-ingest.js +164 -21
  40. package/vendor/directive-core/dist/intake/issue-ingest.js.map +1 -1
  41. package/vendor/directive-core/dist/pre-pr-controller/controller.d.ts.map +1 -1
  42. package/vendor/directive-core/dist/pre-pr-controller/controller.js +118 -12
  43. package/vendor/directive-core/dist/pre-pr-controller/controller.js.map +1 -1
  44. package/vendor/directive-core/dist/pre-pr-controller/index.d.ts +1 -1
  45. package/vendor/directive-core/dist/pre-pr-controller/index.d.ts.map +1 -1
  46. package/vendor/directive-core/dist/pre-pr-controller/index.js +1 -1
  47. package/vendor/directive-core/dist/pre-pr-controller/index.js.map +1 -1
  48. package/vendor/directive-core/dist/pre-pr-controller/phases.d.ts +5 -0
  49. package/vendor/directive-core/dist/pre-pr-controller/phases.d.ts.map +1 -1
  50. package/vendor/directive-core/dist/pre-pr-controller/phases.js +10 -0
  51. package/vendor/directive-core/dist/pre-pr-controller/phases.js.map +1 -1
  52. package/vendor/directive-core/dist/scope/promote-from-issue.d.ts +2 -1
  53. package/vendor/directive-core/dist/scope/promote-from-issue.d.ts.map +1 -1
  54. package/vendor/directive-core/dist/scope/promote-from-issue.js +17 -61
  55. package/vendor/directive-core/dist/scope/promote-from-issue.js.map +1 -1
  56. package/vendor/directive-core/dist/session/occupancy-recovery.d.ts +10 -0
  57. package/vendor/directive-core/dist/session/occupancy-recovery.d.ts.map +1 -1
  58. package/vendor/directive-core/dist/session/occupancy-recovery.js +43 -7
  59. package/vendor/directive-core/dist/session/occupancy-recovery.js.map +1 -1
  60. package/vendor/directive-core/dist/session/occupancy.d.ts +47 -1
  61. package/vendor/directive-core/dist/session/occupancy.d.ts.map +1 -1
  62. package/vendor/directive-core/dist/session/occupancy.js +240 -33
  63. package/vendor/directive-core/dist/session/occupancy.js.map +1 -1
  64. package/vendor/directive-core/dist/session/session-start.d.ts.map +1 -1
  65. package/vendor/directive-core/dist/session/session-start.js +6 -1
  66. package/vendor/directive-core/dist/session/session-start.js.map +1 -1
  67. package/vendor/directive-core/dist/triage/actions/index.d.ts +8 -5
  68. package/vendor/directive-core/dist/triage/actions/index.d.ts.map +1 -1
  69. package/vendor/directive-core/dist/triage/actions/index.js +248 -22
  70. package/vendor/directive-core/dist/triage/actions/index.js.map +1 -1
  71. package/vendor/directive-core/dist/triage/actions/types.d.ts +16 -2
  72. package/vendor/directive-core/dist/triage/actions/types.d.ts.map +1 -1
  73. package/vendor/directive-core/dist/triage/bulk/index.d.ts +8 -1
  74. package/vendor/directive-core/dist/triage/bulk/index.d.ts.map +1 -1
  75. package/vendor/directive-core/dist/triage/bulk/index.js +30 -11
  76. package/vendor/directive-core/dist/triage/bulk/index.js.map +1 -1
  77. package/vendor/directive-core/dist/value/feedback-file.d.ts +5 -0
  78. package/vendor/directive-core/dist/value/feedback-file.d.ts.map +1 -1
  79. package/vendor/directive-core/dist/value/feedback-file.js +26 -4
  80. package/vendor/directive-core/dist/value/feedback-file.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"occupancy.d.ts","sourceRoot":"","sources":["../../src/session/occupancy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"occupancy.d.ts","sourceRoot":"","sources":["../../src/session/occupancy.ts"],"names":[],"mappings":"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"}
@@ -75,6 +75,7 @@ import { assertWriteTargetSafe } from "../fs/projection-containment.js";
75
75
  import { assertAppendLockOwned, withAppendLock } from "../slice/lock.js";
76
76
  import { SWARM_WORKER_ROLES } from "../swarm/routing.js";
77
77
  import { recordChildOccupancyLease } from "./child-occupancy.js";
78
+ import { worktreePathOrNull } from "./git.js";
78
79
  import { ambientHostSessionOwner, claimsHostSessionIdShape, detectDeclaredIdentityHosts, isUsableHostSessionId, parseCanonicalHostSessionId, printCompanionHostOwner, } from "./host-session-owner.js";
79
80
  import { stableJson } from "./json.js";
80
81
  import { isLinkedWorktreePath, isMainWorktreePath, listLinkedWorktreeCheckouts, mainWorktreeRoot, } from "./main-worktree.js";
@@ -82,6 +83,13 @@ import { readRitualState } from "./ritual-sentinel.js";
82
83
  import { parseTimestamp, timestampIso } from "./time.js";
83
84
  export const OCCUPANCY_SCHEMA_VERSION = 1;
84
85
  export const OCCUPANCY_RELPATH = [".deft", "occupancy.json"];
86
+ /**
87
+ * Harbor / cell bootstrap signal (#5544 Prefer-A): a declared agent host will
88
+ * attach to this tree. Claimer surface is Harbor ritual applying
89
+ * `applyWorktreeOccupancy`. When set, last-resort UUID mint is refused so the
90
+ * later host can self-claim.
91
+ */
92
+ export const DEFT_EXPECTED_DECLARED_HOST_ATTACH = "DEFT_EXPECTED_DECLARED_HOST_ATTACH";
85
93
  /** Crash recovery TTL: 20 minutes without heartbeat (15–30 window). */
86
94
  export const OCCUPANCY_TTL_MS = 20 * 60 * 1000;
87
95
  /**
@@ -227,6 +235,115 @@ export const OCCUPANCY_MAX_GRANTS = 32;
227
235
  export function occupancyPath(projectRoot) {
228
236
  return join(resolve(projectRoot), ...OCCUPANCY_RELPATH);
229
237
  }
238
+ /**
239
+ * Resolve the lease root CLI and hooks share for the same worktree (#5544 P2).
240
+ *
241
+ * Uses the Git worktree toplevel when available (same tree hooks select when
242
+ * payload alone gates, or when writes stay inside that worktree). Linked
243
+ * worktrees keep their own toplevel — never collapsed into the main checkout.
244
+ */
245
+ const occupancyLeaseRootCache = new Map();
246
+ /**
247
+ * Process-local cache so Write-hook double probes (preview + refresh) and
248
+ * nested readOccupancy calls do not re-shell `git rev-parse` for the same path.
249
+ */
250
+ export function resolveOccupancyLeaseRoot(projectRoot) {
251
+ const absolute = resolve(projectRoot);
252
+ const cached = occupancyLeaseRootCache.get(absolute);
253
+ if (cached !== undefined)
254
+ return cached;
255
+ const toplevel = worktreePathOrNull(absolute);
256
+ const root = toplevel ?? absolute;
257
+ occupancyLeaseRootCache.set(absolute, root);
258
+ occupancyLeaseRootCache.set(root, root);
259
+ return root;
260
+ }
261
+ /** Print the occupancy file (and optional Write-gate effectiveRoot) (#5544 P2). */
262
+ export function formatOccupancyLeaseViewNote(occupancyFilePath, options = {}) {
263
+ const parts = [`occupancyFile=${occupancyFilePath}`];
264
+ if (options.effectiveRoot !== undefined && options.effectiveRoot.length > 0) {
265
+ parts.push(`effectiveRoot=${options.effectiveRoot}`);
266
+ }
267
+ return parts.join(" ");
268
+ }
269
+ export function formatOccupancyAlreadyFree(occupancyFilePath, options = {}) {
270
+ return `occupancy already free (${formatOccupancyLeaseViewNote(occupancyFilePath, options)})`;
271
+ }
272
+ export function expectedDeclaredHostAttachSignaled(input = {}) {
273
+ if (input.expectedDeclaredHostAttach === true)
274
+ return true;
275
+ const raw = (input.env ?? process.env)[DEFT_EXPECTED_DECLARED_HOST_ATTACH]?.trim() ?? "";
276
+ if (raw.length === 0)
277
+ return false;
278
+ return raw === "1" || raw.toLowerCase() === "true" || raw.toLowerCase() === "yes";
279
+ }
280
+ export function formatOccupancyExpectedHostMintRefusal() {
281
+ return ("occupancy refuses last-resort mint: Harbor/bootstrap signaled a declared agent host will attach " +
282
+ `(${DEFT_EXPECTED_DECLARED_HOST_ATTACH}=1 or expectedDeclaredHostAttach). ` +
283
+ "Claimer surface: Harbor ritual applying applyWorktreeOccupancy. " +
284
+ "Default is host-self-claim after attach. Stay read-only (`session:start --read-only`) or skip mutation session:start. " +
285
+ "If a pre-attach mutation lease is required, bind the exact later host session id " +
286
+ "(`session:start --session-id=<host:provider:v1:...>`) and release successfully before agent launch — " +
287
+ "failed cleanup blocks launch (assertOccupancyFreeForHostLaunch).");
288
+ }
289
+ /**
290
+ * Harbor launch gate (#5544 Prefer-A): failed pre-attach occupancy cleanup
291
+ * blocks agent launch. Exit 0 only when this lease root is free.
292
+ */
293
+ export function assertOccupancyFreeForHostLaunch(projectRoot, input = {}) {
294
+ const root = resolveOccupancyLeaseRoot(projectRoot);
295
+ const path = occupancyPath(root);
296
+ const live = liveOccupant(root, input.now ?? new Date());
297
+ if (live === null) {
298
+ return {
299
+ action: "released",
300
+ sessionId: "",
301
+ record: null,
302
+ path,
303
+ message: formatOccupancyAlreadyFree(path),
304
+ code: 0,
305
+ };
306
+ }
307
+ const occupantArg = commandSessionId(live.sessionId, "<reported-session-id>");
308
+ return {
309
+ action: "denied",
310
+ sessionId: "",
311
+ record: live,
312
+ path,
313
+ message: `Harbor launch blocked: live occupancy lease still holds (${formatOccupancyLeaseViewNote(path)}). ` +
314
+ `session=${live.sessionId}. Failed pre-attach cleanup blocks launch. ` +
315
+ `Release with \`occupancy:release --session-id=${occupantArg} --project-root=${root}\` before attaching the agent host.`,
316
+ code: 1,
317
+ };
318
+ }
319
+ /**
320
+ * Narrow #5544 Prefer-A P3 gate: live minted lease + canonical host-shaped
321
+ * presenter may steal under confirm. Does not broaden steal defaults.
322
+ */
323
+ export function occupancyMintedDeclaredHostStealAdmitted(record, presented) {
324
+ if (record.identityProvenance !== "minted")
325
+ return false;
326
+ const actor = presented?.trim() ?? "";
327
+ if (actor.length === 0)
328
+ return false;
329
+ return parseCanonicalHostSessionId(actor) !== null;
330
+ }
331
+ export function formatOccupancyMintedDeclaredHostStealRemediation(record, presented, projectRoot) {
332
+ const root = projectRoot !== undefined ? resolveOccupancyLeaseRoot(projectRoot) : undefined;
333
+ const path = root !== undefined ? occupancyPath(root) : undefined;
334
+ const occupantArg = commandSessionId(record.sessionId, "<reported-session-id>");
335
+ const hostArg = commandSessionId(presented, "<host-published-id>");
336
+ const rootFlag = root !== undefined ? ` --project-root=${JSON.stringify(root)}` : "";
337
+ const view = path !== undefined ? ` Lease view: ${formatOccupancyLeaseViewNote(path)}.` : "";
338
+ const rootNote = root !== undefined ? ` Target root: ${root}.` : "";
339
+ return (`Closed recovery for a minted lease while host-shaped presenter ${presented} is already on this tree:${view}${rootNote} ` +
340
+ `Run \`occupancy:steal --occupant=${occupantArg} --session-id=${hostArg} --confirm${rootFlag}\`` +
341
+ `. That is the permitted lease operation under the minted+declared-host gate (not a broad steal default). ` +
342
+ "Steal changes the lease only; then restore ceremony as the same presenter: " +
343
+ `\`session:start --rearm --session-id=${hostArg}${rootFlag}\` when re-arm is eligible, otherwise ` +
344
+ `\`session:start --session-id=${hostArg}${rootFlag}\` for a cold ceremony. ` +
345
+ "Owner-only UUID release then host re-claim remains available but is not the primary agent path.");
346
+ }
230
347
  /**
231
348
  * Whether a stored lease names this worktree (#3926).
232
349
  *
@@ -430,7 +547,7 @@ function isOwnInheritedPresentation(occupantId, presented) {
430
547
  }
431
548
  /** Advisory coordination preface for occupancy denials (#3729 Prefer-A AC4). */
432
549
  export const OCCUPANCY_ADVISORY_COORDINATION_PREFACE = "Occupancy is advisory coordination for accidental same-machine collision, not same-user authorization.";
433
- export function formatOccupancyRemediation(record, now = new Date(), presented, env) {
550
+ export function formatOccupancyRemediation(record, now = new Date(), presented, env, projectRoot) {
434
551
  const age = heartbeatAgeSeconds(record, now);
435
552
  const header = `${OCCUPANCY_ADVISORY_COORDINATION_PREFACE}\n` +
436
553
  `Worktree occupied by session ${record.sessionId} (intent=${record.intent}, heartbeat ${age}s ago, ` +
@@ -439,6 +556,13 @@ export function formatOccupancyRemediation(record, now = new Date(), presented,
439
556
  const worktreeFirst = "Use another worktree.";
440
557
  const occupantArg = commandSessionId(record.sessionId, "<reported-session-id>");
441
558
  if (record.identityProvenance === "minted") {
559
+ // #5544 Prefer-A P3: when a canonical host-shaped id is already presenting,
560
+ // replace "Do not steal" with the closed steal-then-ceremony path.
561
+ const hostPresenter = presented?.trim() ?? "";
562
+ if (occupancyMintedDeclaredHostStealAdmitted(record, hostPresenter)) {
563
+ return (`${header}This lease was claimed under a minted owner. No later hook process can present that id.\n` +
564
+ `${formatOccupancyMintedDeclaredHostStealRemediation(record, hostPresenter, projectRoot)}`);
565
+ }
442
566
  const hosts = detectDeclaredIdentityHosts(env ?? process.env);
443
567
  const suggested = uniquePrintCompanion(hosts, env ?? process.env);
444
568
  const named = suggested === null
@@ -446,7 +570,8 @@ export function formatOccupancyRemediation(record, now = new Date(), presented,
446
570
  : commandSessionId(suggested, "<host-published-id>");
447
571
  return (`${header}This lease was claimed under a minted owner. No later hook process can present that id.\n` +
448
572
  `${formatOccupancySkipMutationClaimWhenMinted()}\n` +
449
- `${worktreeFirst} Do not steal this lease. Stay read-only (\`session:start --read-only\`), or ` +
573
+ `${worktreeFirst} Do not steal this lease unless a declared host-shaped id is already presenting ` +
574
+ `(then use the minted+declared-host \`occupancy:steal\` gate). Stay read-only (\`session:start --read-only\`), or ` +
450
575
  `release it (\`occupancy:release --session-id=${occupantArg}\` / \`session:end\`) and re-claim ` +
451
576
  `with the host-published owner (\`session:start --session-id=${named}\`).${tail}`);
452
577
  }
@@ -624,6 +749,35 @@ export function formatPresentedIdentityDisagreement(identity) {
624
749
  */
625
750
  export function resolveOccupancySessionClaim(input = {}) {
626
751
  const identity = resolvePresentedIdentity(input);
752
+ // #5544 Prefer-A: when Harbor signals expected declared-host attach, the only
753
+ // pre-attach mutation exception is an explicit argv --session-id that is
754
+ // already host-shaped. Inherited DEFT_SESSION_ID (even host-shaped) and
755
+ // opaque ids are refused so the later host is not locked out.
756
+ if (expectedDeclaredHostAttachSignaled(input)) {
757
+ const explicitHostBind = identity.source === "explicit" &&
758
+ identity.sessionId.length > 0 &&
759
+ parseCanonicalHostSessionId(identity.sessionId) !== null;
760
+ if (explicitHostBind) {
761
+ return {
762
+ status: "ok",
763
+ sessionId: identity.sessionId,
764
+ provenance: "explicit",
765
+ source: "explicit",
766
+ };
767
+ }
768
+ if (identity.sessionId.length > 0 || identity.disagreeingHostOwner !== null) {
769
+ return {
770
+ status: "refuse-mint",
771
+ sessionId: "",
772
+ provenance: null,
773
+ source: "mint",
774
+ hosts: [],
775
+ suggestedSessionId: null,
776
+ message: formatOccupancyExpectedHostMintRefusal(),
777
+ };
778
+ }
779
+ // No presented identity yet — fall through to declared-host / empty-mint refuse.
780
+ }
627
781
  // #4066: host-authoritative claim. Inherited DEFT_SESSION_ID must not beat the
628
782
  // host-published owner -- that split is the measured steal-from-self loop.
629
783
  if (identity.source === "environment" && identity.disagreeingHostOwner !== null) {
@@ -658,6 +812,20 @@ export function resolveOccupancySessionClaim(input = {}) {
658
812
  message,
659
813
  };
660
814
  }
815
+ // #5544 Prefer-A P1: Harbor pre-attach empty-hosts mint window. Signal closes
816
+ // last-resort mint before the declared host attaches; exact --session-id bind
817
+ // is the only pre-attach mutation exception (already returned above when set).
818
+ if (expectedDeclaredHostAttachSignaled(input)) {
819
+ return {
820
+ status: "refuse-mint",
821
+ sessionId: "",
822
+ provenance: null,
823
+ source: "mint",
824
+ hosts: [],
825
+ suggestedSessionId: null,
826
+ message: formatOccupancyExpectedHostMintRefusal(),
827
+ };
828
+ }
661
829
  return {
662
830
  status: "ok",
663
831
  sessionId: (input.newSessionId ?? randomUUID)(),
@@ -696,6 +864,8 @@ function occupancyMintRefusalDecision(projectRoot, claim) {
696
864
  };
697
865
  }
698
866
  export function readOccupancy(projectRoot) {
867
+ // #5544: reads share the claim/release lease-root view.
868
+ projectRoot = resolveOccupancyLeaseRoot(projectRoot);
699
869
  const path = occupancyPath(projectRoot);
700
870
  try {
701
871
  if (!existsSync(path))
@@ -796,6 +966,8 @@ export const OCCUPANCY_CEREMONY_CASES = [
796
966
  * session:ready. Matches persist, including the sibling-lease primary fence.
797
967
  */
798
968
  export function evaluateOccupancyCeremonyEligibility(projectRoot, input = {}) {
969
+ // #5544: same lease-root view as claim / release / Write-gate.
970
+ projectRoot = resolveOccupancyLeaseRoot(projectRoot);
799
971
  const now = input.now ?? new Date();
800
972
  const claim = resolveOccupancySessionClaim(input);
801
973
  if (claim.status === "refuse-mint") {
@@ -822,7 +994,7 @@ export function evaluateOccupancyCeremonyEligibility(projectRoot, input = {}) {
822
994
  sessionId: incoming,
823
995
  occupantId: live.sessionId,
824
996
  restrictedPrimary,
825
- denialMessage: formatOccupancyRemediation(live, now, incoming, input.env),
997
+ denialMessage: formatOccupancyRemediation(live, now, incoming, input.env, projectRoot),
826
998
  };
827
999
  }
828
1000
  if (live !== null) {
@@ -830,7 +1002,7 @@ export function evaluateOccupancyCeremonyEligibility(projectRoot, input = {}) {
830
1002
  if (admission === "member") {
831
1003
  const grant = occupancyGrantFor(live, incoming, now);
832
1004
  const memberText = grant === null
833
- ? formatOccupancyRemediation(live, now, incoming, input.env)
1005
+ ? formatOccupancyRemediation(live, now, incoming, input.env, projectRoot)
834
1006
  : formatOccupancyMemberAdministrationRefusal(live, grant, "session:start");
835
1007
  return {
836
1008
  admitCeremony: false,
@@ -848,7 +1020,7 @@ export function evaluateOccupancyCeremonyEligibility(projectRoot, input = {}) {
848
1020
  sessionId: incoming,
849
1021
  occupantId: live.sessionId,
850
1022
  restrictedPrimary,
851
- denialMessage: formatOccupancyRemediation(live, now, incoming, input.env),
1023
+ denialMessage: formatOccupancyRemediation(live, now, incoming, input.env, projectRoot),
852
1024
  };
853
1025
  }
854
1026
  return {
@@ -903,6 +1075,8 @@ export function evaluateOccupancyCeremonyEligibility(projectRoot, input = {}) {
903
1075
  };
904
1076
  }
905
1077
  export function applyWorktreeOccupancy(projectRoot, input = {}) {
1078
+ // #5544: claim/read/release share one lease-root view (git worktree toplevel).
1079
+ projectRoot = resolveOccupancyLeaseRoot(projectRoot);
906
1080
  const now = input.now ?? new Date();
907
1081
  const path = occupancyPath(projectRoot);
908
1082
  const claim = resolveOccupancySessionClaim(input);
@@ -942,7 +1116,7 @@ export function applyWorktreeOccupancy(projectRoot, input = {}) {
942
1116
  // A granted child reads the member refusal rather than an offer of the
943
1117
  // write grant it already holds (#3954 item 5): membership admits writes,
944
1118
  // and claiming the lease stays owner-only.
945
- message: membershipOwnerDenial(live, incoming, now, "session:start"),
1119
+ message: membershipOwnerDenial(live, incoming, now, "session:start", projectRoot),
946
1120
  code: 1,
947
1121
  };
948
1122
  }
@@ -976,7 +1150,7 @@ export function applyWorktreeOccupancy(projectRoot, input = {}) {
976
1150
  sessionId: incoming,
977
1151
  record: liveLocked,
978
1152
  path,
979
- message: membershipOwnerDenial(liveLocked, incoming, now, "session:start"),
1153
+ message: membershipOwnerDenial(liveLocked, incoming, now, "session:start", projectRoot),
980
1154
  code: 1,
981
1155
  };
982
1156
  }
@@ -1068,6 +1242,8 @@ function occupancyStealUsesMintedWriter(input, claim) {
1068
1242
  return claim.status === "ok" && (claim.provenance === "minted" || claim.source === "mint");
1069
1243
  }
1070
1244
  export function stealOccupancy(projectRoot, input = {}) {
1245
+ // #5544: steal uses the same lease-root view as claim/release.
1246
+ projectRoot = resolveOccupancyLeaseRoot(projectRoot);
1071
1247
  const now = input.now ?? new Date();
1072
1248
  const path = occupancyPath(projectRoot);
1073
1249
  const claim = resolveOccupancySessionClaim(input);
@@ -1099,7 +1275,9 @@ export function stealOccupancy(projectRoot, input = {}) {
1099
1275
  // Show the occupant's write recency before the steal, not only after it
1100
1276
  // (#3599): heartbeat age alone hides an occupant that is mid-edit.
1101
1277
  const liveCurrent = liveOccupancyOnTree(projectRoot, current, now);
1102
- const occupantDetail = liveCurrent !== null ? `\n${formatOccupancyRemediation(liveCurrent, now)}` : "";
1278
+ const occupantDetail = liveCurrent !== null
1279
+ ? `\n${formatOccupancyRemediation(liveCurrent, now, undefined, undefined, projectRoot)}`
1280
+ : "";
1103
1281
  return {
1104
1282
  action: "denied",
1105
1283
  sessionId: incoming,
@@ -1145,7 +1323,7 @@ export function stealOccupancy(projectRoot, input = {}) {
1145
1323
  record: live,
1146
1324
  path,
1147
1325
  message: `occupancy:steal named occupant ${named} does not match live occupant ${live.sessionId}.\n` +
1148
- formatOccupancyRemediation(live, now),
1326
+ formatOccupancyRemediation(live, now, undefined, undefined, projectRoot),
1149
1327
  code: 1,
1150
1328
  };
1151
1329
  }
@@ -1189,7 +1367,7 @@ export function stealOccupancy(projectRoot, input = {}) {
1189
1367
  record: liveLocked,
1190
1368
  path,
1191
1369
  message: `occupancy:steal named occupant ${named} does not match live occupant ${liveLocked.sessionId}.\n` +
1192
- formatOccupancyRemediation(liveLocked, now),
1370
+ formatOccupancyRemediation(liveLocked, now, undefined, undefined, projectRoot),
1193
1371
  code: 1,
1194
1372
  };
1195
1373
  }
@@ -1224,16 +1402,19 @@ export function stealOccupancy(projectRoot, input = {}) {
1224
1402
  };
1225
1403
  }
1226
1404
  const record = written.record;
1405
+ const root = resolve(projectRoot);
1227
1406
  return {
1228
1407
  action: "stolen",
1229
1408
  sessionId: record.sessionId,
1230
1409
  record,
1231
1410
  path,
1232
1411
  message: `occupancy stolen from ${named}${priorClock}; writer is now session ${record.sessionId}. ` +
1412
+ `Lease view: ${formatOccupancyLeaseViewNote(path)}. Target root: ${root}. ` +
1413
+ `Presenter/writer: ${record.sessionId}. Permitted lease operation completed: occupancy:steal. ` +
1233
1414
  "This command changes the lease only; direct writes remain denied unless ritual state already names the same owner. " +
1234
- "If the owners differ, run `deft session:start --rearm --session-id=<same-session-id>` " +
1235
- "when re-arm is eligible; otherwise run `deft session:start --session-id=<same-session-id>` " +
1236
- "for a cold ceremony, using the writer ID above.",
1415
+ "Required ceremony: run " +
1416
+ "`deft session:start --rearm --session-id=<same-session-id>` when re-arm is eligible; otherwise run " +
1417
+ "`deft session:start --session-id=<same-session-id>` for a cold ceremony, using the writer ID above.",
1237
1418
  code: 0,
1238
1419
  };
1239
1420
  }, input.lockDeps);
@@ -1254,23 +1435,26 @@ export function stealOccupancy(projectRoot, input = {}) {
1254
1435
  */
1255
1436
  export function releaseOccupancy(projectRoot, input = {}) {
1256
1437
  const now = input.now ?? new Date();
1257
- const path = occupancyPath(projectRoot);
1438
+ // #5544 P2: share the lease-root view CLI and Write hooks use for this tree.
1439
+ const root = resolveOccupancyLeaseRoot(projectRoot);
1440
+ const path = occupancyPath(root);
1258
1441
  const identity = resolvePresentedIdentity(input);
1259
1442
  const caller = identity.sessionId;
1260
1443
  const split = formatPresentedIdentityDisagreement(identity);
1261
- return withOccupancyLock(projectRoot, (fence) => {
1262
- const existing = readOccupancy(projectRoot);
1444
+ const leaseNote = ` ${formatOccupancyLeaseViewNote(path)}`;
1445
+ return withOccupancyLock(root, (fence) => {
1446
+ const existing = readOccupancy(root);
1263
1447
  if (existing === null) {
1264
1448
  return {
1265
1449
  action: "released",
1266
1450
  sessionId: caller,
1267
1451
  record: null,
1268
1452
  path,
1269
- message: "occupancy already free",
1453
+ message: formatOccupancyAlreadyFree(path),
1270
1454
  code: 0,
1271
1455
  };
1272
1456
  }
1273
- const expired = liveOccupancyOnTree(projectRoot, existing, now) === null;
1457
+ const expired = liveOccupancyOnTree(root, existing, now) === null;
1274
1458
  const owns = caller.length > 0 && caller === existing.sessionId;
1275
1459
  if (!expired && !owns) {
1276
1460
  return {
@@ -1278,7 +1462,9 @@ export function releaseOccupancy(projectRoot, input = {}) {
1278
1462
  sessionId: caller,
1279
1463
  record: existing,
1280
1464
  path,
1281
- message: membershipOwnerDenial(existing, caller, now, "occupancy:release") + split,
1465
+ message: membershipOwnerDenial(existing, caller, now, "occupancy:release", root) +
1466
+ split +
1467
+ leaseNote,
1282
1468
  code: 1,
1283
1469
  };
1284
1470
  }
@@ -1286,6 +1472,8 @@ export function releaseOccupancy(projectRoot, input = {}) {
1286
1472
  // never stamp Prefer-A marker / rewrite AGENTS.md for a denied caller (#4544 P1).
1287
1473
  // Session exit with this-session untracked product evidence must still reach
1288
1474
  // enforce when markWrite persist never ran (Shell-bypass / hookless).
1475
+ // Prefer-A #5544 residual / babysit P1: header check uses the supplied project
1476
+ // root (consumer AGENTS.md), not the git lease root (which may be a parent repo).
1289
1477
  const evidenceGate = enforceConsumerHeaderPlaceholderWhenProductEvidence(projectRoot);
1290
1478
  if (!evidenceGate.ok) {
1291
1479
  return {
@@ -1293,19 +1481,19 @@ export function releaseOccupancy(projectRoot, input = {}) {
1293
1481
  sessionId: caller,
1294
1482
  record: existing,
1295
1483
  path,
1296
- message: evidenceGate.message,
1484
+ message: evidenceGate.message + leaseNote,
1297
1485
  code: 1,
1298
1486
  };
1299
1487
  }
1300
1488
  fence();
1301
- const still = readOccupancy(projectRoot);
1489
+ const still = readOccupancy(root);
1302
1490
  if (still === null) {
1303
1491
  return {
1304
1492
  action: "released",
1305
1493
  sessionId: caller,
1306
1494
  record: null,
1307
1495
  path,
1308
- message: "occupancy already free",
1496
+ message: formatOccupancyAlreadyFree(path),
1309
1497
  code: 0,
1310
1498
  };
1311
1499
  }
@@ -1318,17 +1506,19 @@ export function releaseOccupancy(projectRoot, input = {}) {
1318
1506
  sessionId: caller,
1319
1507
  record: still,
1320
1508
  path,
1321
- message: membershipOwnerDenial(still, caller, now, "occupancy:release") + split,
1509
+ message: membershipOwnerDenial(still, caller, now, "occupancy:release", root) +
1510
+ split +
1511
+ leaseNote,
1322
1512
  code: 1,
1323
1513
  };
1324
1514
  }
1325
- removeOccupancyFile(projectRoot, fence);
1515
+ removeOccupancyFile(root, fence);
1326
1516
  return {
1327
1517
  action: "released",
1328
1518
  sessionId: still.sessionId,
1329
1519
  record: null,
1330
1520
  path,
1331
- message: `occupancy released session ${still.sessionId}`,
1521
+ message: `occupancy released session ${still.sessionId} (${formatOccupancyLeaseViewNote(path)})`,
1332
1522
  code: 0,
1333
1523
  };
1334
1524
  }, input.lockDeps);
@@ -1374,6 +1564,8 @@ function ritualAlignedAfterAcquisition(projectRoot, acquired) {
1374
1564
  * this persist.
1375
1565
  */
1376
1566
  export function rollbackAcquiredOccupancy(projectRoot, acquired, input = {}) {
1567
+ // #5544: rollback must target the same lease root claim wrote.
1568
+ projectRoot = resolveOccupancyLeaseRoot(projectRoot);
1377
1569
  const path = occupancyPath(projectRoot);
1378
1570
  if (!isPersistTimeAcquisition(acquired.action)) {
1379
1571
  return {
@@ -1393,7 +1585,7 @@ export function rollbackAcquiredOccupancy(projectRoot, acquired, input = {}) {
1393
1585
  sessionId: acquired.sessionId,
1394
1586
  record: null,
1395
1587
  path,
1396
- message: "occupancy already free",
1588
+ message: formatOccupancyAlreadyFree(path),
1397
1589
  code: 0,
1398
1590
  };
1399
1591
  }
@@ -1425,7 +1617,7 @@ export function rollbackAcquiredOccupancy(projectRoot, acquired, input = {}) {
1425
1617
  sessionId: acquired.sessionId,
1426
1618
  record: null,
1427
1619
  path,
1428
- message: "occupancy already free",
1620
+ message: formatOccupancyAlreadyFree(path),
1429
1621
  code: 0,
1430
1622
  };
1431
1623
  }
@@ -1470,10 +1662,10 @@ export function rollbackAcquiredOccupancy(projectRoot, acquired, input = {}) {
1470
1662
  * have chosen explicitly, so a refusal that does not name what was presented
1471
1663
  * leaves it guessing which identity it was refused under.
1472
1664
  */
1473
- function membershipOwnerDenial(live, caller, now, verb) {
1665
+ function membershipOwnerDenial(live, caller, now, verb, projectRoot) {
1474
1666
  const grant = occupancyGrantFor(live, caller, now);
1475
1667
  return grant === null
1476
- ? formatOccupancyRemediation(live, now, caller)
1668
+ ? formatOccupancyRemediation(live, now, caller, undefined, projectRoot)
1477
1669
  : formatOccupancyMemberAdministrationRefusal(live, grant, verb);
1478
1670
  }
1479
1671
  /**
@@ -1486,6 +1678,8 @@ function membershipOwnerDenial(live, caller, now, verb) {
1486
1678
  * cap — and it buys writes alone.
1487
1679
  */
1488
1680
  export function grantOccupancyMembership(projectRoot, input = {}) {
1681
+ // #5544: membership verbs share claim/release lease-root view.
1682
+ projectRoot = resolveOccupancyLeaseRoot(projectRoot);
1489
1683
  const now = input.now ?? new Date();
1490
1684
  const path = occupancyPath(projectRoot);
1491
1685
  const identity = resolvePresentedIdentity(input);
@@ -1604,7 +1798,7 @@ export function grantOccupancyMembership(projectRoot, input = {}) {
1604
1798
  sessionId: owner,
1605
1799
  record: live,
1606
1800
  path,
1607
- message: membershipOwnerDenial(live, owner, now, "occupancy:grant") + split,
1801
+ message: membershipOwnerDenial(live, owner, now, "occupancy:grant", projectRoot) + split,
1608
1802
  code: 1,
1609
1803
  };
1610
1804
  }
@@ -1695,6 +1889,8 @@ export function grantOccupancyMembership(projectRoot, input = {}) {
1695
1889
  * never have been admitted, and the owner wants that true now.
1696
1890
  */
1697
1891
  export function revokeOccupancyMembership(projectRoot, input = {}) {
1892
+ // #5544: membership verbs share claim/release lease-root view.
1893
+ projectRoot = resolveOccupancyLeaseRoot(projectRoot);
1698
1894
  const now = input.now ?? new Date();
1699
1895
  const path = occupancyPath(projectRoot);
1700
1896
  const identity = resolvePresentedIdentity(input);
@@ -1734,7 +1930,8 @@ export function revokeOccupancyMembership(projectRoot, input = {}) {
1734
1930
  sessionId: owner,
1735
1931
  record: live,
1736
1932
  path,
1737
- message: membershipOwnerDenial(live, owner, now, "occupancy:grant --revoke") + split,
1933
+ message: membershipOwnerDenial(live, owner, now, "occupancy:grant --revoke", projectRoot) +
1934
+ split,
1738
1935
  code: 1,
1739
1936
  };
1740
1937
  }
@@ -1795,6 +1992,10 @@ export function revokeOccupancyMembership(projectRoot, input = {}) {
1795
1992
  */
1796
1993
  export function evaluateOccupancyWriteGate(projectRoot, input = {}) {
1797
1994
  const now = input.now ?? new Date();
1995
+ // #5544: lease identity is always the git worktree toplevel. leaseRoot is only
1996
+ // a preferred base path (hook effectiveRoot may be a subdirectory when writes
1997
+ // leave the git tree); never skip resolve, or read/match disagree (#5544 P1).
1998
+ projectRoot = resolveOccupancyLeaseRoot(input.leaseRoot ?? projectRoot);
1798
1999
  const incoming = input.sessionId?.trim() || (input.env ?? process.env).DEFT_SESSION_ID?.trim() || "";
1799
2000
  const stored = readOccupancy(projectRoot);
1800
2001
  const record = stored !== null && occupancyWorktreeMatches(stored.worktreePath, projectRoot) ? stored : null;
@@ -1848,12 +2049,16 @@ export function evaluateOccupancyWriteGate(projectRoot, input = {}) {
1848
2049
  // Two-axis unknown-identity axis (#3729 Prefer-A): live lease + stranger →
1849
2050
  // fail closed (OCCUPANCY_UNKNOWN_IDENTITY_POLICY). Advisory coordination,
1850
2051
  // not authorization — prefer another worktree / grant over steal-as-primary.
2052
+ // #5544 P2: name the occupancy file (and effectiveRoot when the Write gate
2053
+ // supplies this projectRoot) so CLI/hook split-brain is diagnosable.
2054
+ const path = occupancyPath(projectRoot);
1851
2055
  return {
1852
2056
  allow: false,
1853
2057
  // The refused caller is told what identity it actually presented (#3873).
1854
2058
  // A hook process cannot otherwise know, and the grant this message offers
1855
2059
  // is only runnable when the occupant can name a non-empty child.
1856
- message: formatOccupancyRemediation(live, now, incoming, input.env),
2060
+ message: `${formatOccupancyRemediation(live, now, incoming, input.env, projectRoot)} ` +
2061
+ formatOccupancyLeaseViewNote(path, { effectiveRoot: projectRoot }),
1857
2062
  occupant: live,
1858
2063
  refreshed: false,
1859
2064
  warning: null,
@@ -2031,6 +2236,8 @@ persistProductMutationMarker = false) {
2031
2236
  * heartbeat into long verbs cannot close that deadlock: this verb is owner-only.
2032
2237
  */
2033
2238
  export function heartbeatOccupancy(projectRoot, input = {}) {
2239
+ // #5544: heartbeat shares claim/release lease-root view.
2240
+ projectRoot = resolveOccupancyLeaseRoot(projectRoot);
2034
2241
  const now = input.now ?? new Date();
2035
2242
  const path = occupancyPath(projectRoot);
2036
2243
  const identity = resolvePresentedIdentity(input);
@@ -2072,7 +2279,7 @@ export function heartbeatOccupancy(projectRoot, input = {}) {
2072
2279
  sessionId: caller,
2073
2280
  record: live,
2074
2281
  path,
2075
- message: membershipOwnerDenial(live, caller, now, "occupancy:heartbeat") + split,
2282
+ message: membershipOwnerDenial(live, caller, now, "occupancy:heartbeat", projectRoot) + split,
2076
2283
  code: 1,
2077
2284
  };
2078
2285
  }