@unbrained/pm-cli 2026.8.15 → 2026.8.17

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 (176) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +56 -12
  3. package/README.md +13 -13
  4. package/dist/cli/error-guidance.d.ts +5 -0
  5. package/dist/cli/error-guidance.js +15 -2
  6. package/dist/cli/public.d.ts +2 -0
  7. package/dist/cli/public.js +21 -0
  8. package/dist/cli/register-history-author.js +16 -11
  9. package/dist/cli/register-mutation.js +4 -4
  10. package/dist/cli-bundle/bundle-manifest.json +143 -143
  11. package/dist/cli-bundle/chunks/{chunk-J42EGKDK.js → chunk-2QLOXC3V.js} +2 -2
  12. package/dist/cli-bundle/chunks/{chunk-LJHOAVGI.js → chunk-3UEGXBMR.js} +49 -43
  13. package/dist/cli-bundle/chunks/chunk-4JPYF536.js +35 -0
  14. package/dist/cli-bundle/chunks/chunk-6VDLG2FC.js +13 -0
  15. package/dist/cli-bundle/chunks/chunk-7IBRGCHX.js +2 -0
  16. package/dist/cli-bundle/chunks/chunk-HBJAS566.js +8 -0
  17. package/dist/cli-bundle/chunks/chunk-ION3E43Q.js +197 -0
  18. package/dist/cli-bundle/chunks/{chunk-WLPDLNEZ.js → chunk-JOKATURE.js} +4 -4
  19. package/dist/cli-bundle/chunks/{chunk-MEM2ZS3O.js → chunk-TPXZIBIV.js} +5 -5
  20. package/dist/cli-bundle/chunks/chunk-YM2YAMF7.js +2 -0
  21. package/dist/cli-bundle/chunks/{register-list-query-CT3LFDDN.js → register-list-query-Q7KII4G5.js} +2 -2
  22. package/dist/cli-bundle/chunks/{register-mutation-NWEVA5YS.js → register-mutation-4WBRPXLV.js} +3 -3
  23. package/dist/cli-bundle/chunks/{register-operations-AHIAG5KM.js → register-operations-SSENDH5B.js} +2 -2
  24. package/dist/cli-bundle/chunks/{register-setup-ZJZFVAKE.js → register-setup-DOSFBGKE.js} +2 -2
  25. package/dist/cli-bundle/focused-chunks/{chunk-WTSER4WJ.js → chunk-267MUUS6.js} +11 -11
  26. package/dist/cli-bundle/focused-chunks/chunk-2NNFLLNG.js +2 -0
  27. package/dist/cli-bundle/focused-chunks/chunk-2QSAKMIH.js +2 -0
  28. package/dist/cli-bundle/focused-chunks/{chunk-ZMFXQ7VF.js → chunk-ATEY76SX.js} +2 -2
  29. package/dist/cli-bundle/focused-chunks/chunk-BUCG4ZI2.js +2 -0
  30. package/dist/cli-bundle/focused-chunks/{chunk-M67F5AIN.js → chunk-CYFK5UPB.js} +2 -2
  31. package/dist/cli-bundle/focused-chunks/chunk-EHXIKD6K.js +2 -0
  32. package/dist/cli-bundle/focused-chunks/{chunk-EXZA4257.js → chunk-KGEXTMPG.js} +2 -2
  33. package/dist/cli-bundle/focused-chunks/chunk-KP2VQQVQ.js +2 -0
  34. package/dist/cli-bundle/focused-chunks/chunk-MHPIL773.js +2 -0
  35. package/dist/cli-bundle/focused-chunks/chunk-POEEAD2V.js +4 -0
  36. package/dist/cli-bundle/focused-chunks/{chunk-ITAUHSO6.js → chunk-SALH6B6K.js} +47 -47
  37. package/dist/cli-bundle/focused-chunks/{chunk-KLVUMNXJ.js → chunk-SYZENPIT.js} +3 -3
  38. package/dist/cli-bundle/focused-chunks/{chunk-KTKH4IMG.js → chunk-XKAMP5OU.js} +2 -2
  39. package/dist/cli-bundle/focused-chunks/{chunk-NSPYTG6G.js → chunk-XPIC53VA.js} +2 -2
  40. package/dist/cli-bundle/focused-chunks/{chunk-6XKF3PGV.js → chunk-ZQPGZZWQ.js} +2 -2
  41. package/dist/cli-bundle/focused-chunks/chunk-ZT2DJS27.js +155 -0
  42. package/dist/cli-bundle/main.js +10 -10
  43. package/dist/cli-bundle/sdk-authoring.js +1 -1
  44. package/dist/cli-bundle/sdk-contracts.js +1 -1
  45. package/dist/cli-bundle/sdk-core.js +31 -31
  46. package/dist/cli-bundle/sdk-governance.js +1 -1
  47. package/dist/cli-bundle/sdk-graph.js +1 -1
  48. package/dist/cli-bundle/sdk-merge.js +32 -32
  49. package/dist/cli-bundle/sdk-query.js +1 -1
  50. package/dist/cli-bundle/sdk-runtime.js +1 -1
  51. package/dist/cli-bundle/sdk-testing.js +1 -1
  52. package/dist/cli-bundle/sdk.js +4 -2
  53. package/dist/core/extensions/loader.js +10 -6
  54. package/dist/core/extensions/manifest-schema.d.ts +20 -0
  55. package/dist/core/extensions/manifest-schema.js +52 -0
  56. package/dist/core/history/replay.js +32 -14
  57. package/dist/core/history/workspace-history.js +32 -10
  58. package/dist/core/output/output.js +6 -3
  59. package/dist/core/schema/fields-file.d.ts +1 -1
  60. package/dist/core/schema/fields-file.js +2 -2
  61. package/dist/core/schema/runtime-field-values.js +115 -9
  62. package/dist/core/schema/runtime-schema.d.ts +3 -1
  63. package/dist/core/schema/runtime-schema.js +124 -3
  64. package/dist/core/shared/errors.d.ts +12 -0
  65. package/dist/core/shared/errors.js +2 -2
  66. package/dist/core/shared/time.d.ts +2 -0
  67. package/dist/core/shared/time.js +27 -2
  68. package/dist/core/store/item-store.js +28 -2
  69. package/dist/sdk/agent/refusal-reachability.d.ts +56 -8
  70. package/dist/sdk/agent/refusal-reachability.js +414 -4
  71. package/dist/sdk/author-attribution.d.ts +56 -11
  72. package/dist/sdk/author-attribution.js +174 -50
  73. package/dist/sdk/cli-contracts/flag-contracts.js +5 -2
  74. package/dist/sdk/cli-contracts/tool-parameter-tables.js +12 -4
  75. package/dist/sdk/cli-contracts/tool-schema.js +12 -4
  76. package/dist/sdk/completion.js +11 -4
  77. package/dist/sdk/compose.d.ts +6 -2
  78. package/dist/sdk/compose.js +33 -3
  79. package/dist/sdk/context-intent-contracts.d.ts +8 -4
  80. package/dist/sdk/context-intent-contracts.js +76 -31
  81. package/dist/sdk/dependency-flag-validation.d.ts +9 -2
  82. package/dist/sdk/dependency-flag-validation.js +101 -35
  83. package/dist/sdk/environment/host-environment-errors.js +25 -7
  84. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +62 -14
  85. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +50 -2
  86. package/dist/sdk/governance/assurance-action.d.ts +3 -7
  87. package/dist/sdk/governance/assurance-action.js +97 -2
  88. package/dist/sdk/governance/boundary-fixtures.d.ts +86 -0
  89. package/dist/sdk/governance/boundary-fixtures.js +201 -0
  90. package/dist/sdk/governance/coverage-assurance.d.ts +24 -0
  91. package/dist/sdk/governance/coverage-assurance.js +61 -0
  92. package/dist/sdk/governance/defect-recurrence-signals.d.ts +10 -0
  93. package/dist/sdk/governance/defect-recurrence-signals.js +25 -0
  94. package/dist/sdk/governance/defect-recurrence.d.ts +242 -0
  95. package/dist/sdk/governance/defect-recurrence.js +523 -0
  96. package/dist/sdk/governance/extension-host-version.js +20 -9
  97. package/dist/sdk/governance.d.ts +2 -0
  98. package/dist/sdk/governance.js +4 -2
  99. package/dist/sdk/graph/governance.js +3 -2
  100. package/dist/sdk/guide-topics.js +191 -2
  101. package/dist/sdk/index.d.ts +5 -1
  102. package/dist/sdk/index.js +6 -3
  103. package/dist/sdk/lifecycle/create.js +4 -2
  104. package/dist/sdk/lifecycle/update-many.js +15 -2
  105. package/dist/sdk/lifecycle/update.js +5 -2
  106. package/dist/sdk/linked-artifacts.js +63 -14
  107. package/dist/sdk/query/get.d.ts +2 -0
  108. package/dist/sdk/query/get.js +32 -7
  109. package/dist/sdk/read-output-contracts.js +5 -3
  110. package/dist/sdk/relationship-analytics.js +90 -14
  111. package/dist/sdk/relationship-kinds/contract.d.ts +4 -0
  112. package/dist/sdk/relationship-kinds/contract.js +3 -2
  113. package/dist/sdk/relationships.d.ts +1 -1
  114. package/dist/sdk/relationships.js +11 -2
  115. package/dist/sdk/runtime.d.ts +2 -5
  116. package/dist/sdk/runtime.js +3 -2
  117. package/dist/sdk/schema.d.ts +1 -0
  118. package/dist/sdk/schema.js +2 -2
  119. package/dist/sdk/test/execution.d.ts +6 -2
  120. package/dist/sdk/test/execution.js +39 -13
  121. package/dist/types.d.ts +29 -2
  122. package/dist/types.js +4 -2
  123. package/docs/CONFIGURATION.md +58 -1
  124. package/docs/CONTEXT_INTEGRITY_CONTRACTS.md +58 -0
  125. package/docs/DEFECT_RECURRENCE.md +134 -0
  126. package/docs/DEPENDENCY_KIND_CONTRACT.md +12 -2
  127. package/docs/README.md +2 -0
  128. package/docs/READ_OUTPUT_CONTRACTS.md +7 -1
  129. package/docs/RELATIONSHIP_GRAPH.md +16 -2
  130. package/docs/RELEASING.md +13 -7
  131. package/docs/SDK.md +38 -5
  132. package/docs/SDK_CONTEXT_INTEGRITY.md +33 -5
  133. package/docs/SDK_CONTEXT_TRUTH_CONTRACTS.md +13 -5
  134. package/docs/SDK_RUNTIME_BOUNDARIES.md +9 -1
  135. package/docs/TESTING.md +18 -1
  136. package/docs/TRUSTWORTHY_CONTEXT_EVIDENCE.md +1 -1
  137. package/marketplace.json +2 -2
  138. package/package.json +6 -4
  139. package/packages/pm-beads/package.json +1 -1
  140. package/packages/pm-calendar/package.json +1 -1
  141. package/packages/pm-command-kit/package.json +1 -1
  142. package/packages/pm-digital-twin/package.json +1 -1
  143. package/packages/pm-governance-audit/package.json +1 -1
  144. package/packages/pm-guide-shell/package.json +1 -1
  145. package/packages/pm-kanban/package.json +1 -1
  146. package/packages/pm-lifecycle-hooks/package.json +1 -1
  147. package/packages/pm-linked-test-adapters/package.json +1 -1
  148. package/packages/pm-search-advanced/package.json +1 -1
  149. package/packages/pm-templates/package.json +1 -1
  150. package/packages/pm-todos/package.json +1 -1
  151. package/packages/pm-vcs/package.json +1 -1
  152. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  153. package/plugins/pm-claude/skills/pm-audit/SKILL.md +26 -0
  154. package/plugins/pm-claude/skills/pm-developer/SKILL.md +26 -0
  155. package/plugins/pm-claude/skills/pm-planner/SKILL.md +26 -0
  156. package/plugins/pm-claude/skills/pm-release/SKILL.md +26 -0
  157. package/plugins/pm-claude/skills/pm-workflow/SKILL.md +26 -0
  158. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  159. package/plugins/pm-codex/skills/pm-auditor/SKILL.md +26 -0
  160. package/plugins/pm-codex/skills/pm-native/SKILL.md +26 -0
  161. package/plugins/pm-codex/skills/pm-release/SKILL.md +26 -0
  162. package/sdk/public-surface.json +716 -33
  163. package/dist/cli-bundle/chunks/chunk-24GAV7XL.js +0 -8
  164. package/dist/cli-bundle/chunks/chunk-AIM6VT2N.js +0 -13
  165. package/dist/cli-bundle/chunks/chunk-DSWDLTDR.js +0 -197
  166. package/dist/cli-bundle/chunks/chunk-KIEGUBYQ.js +0 -2
  167. package/dist/cli-bundle/chunks/chunk-KLKYLSDX.js +0 -2
  168. package/dist/cli-bundle/chunks/chunk-QHPCJWEJ.js +0 -35
  169. package/dist/cli-bundle/focused-chunks/chunk-4X57RE4U.js +0 -2
  170. package/dist/cli-bundle/focused-chunks/chunk-7NJ4QYQ2.js +0 -2
  171. package/dist/cli-bundle/focused-chunks/chunk-KT5XMYSX.js +0 -4
  172. package/dist/cli-bundle/focused-chunks/chunk-OKA6ELTL.js +0 -2
  173. package/dist/cli-bundle/focused-chunks/chunk-PUISBOPP.js +0 -2
  174. package/dist/cli-bundle/focused-chunks/chunk-QLNMCESQ.js +0 -155
  175. package/dist/cli-bundle/focused-chunks/chunk-SLKC6QLJ.js +0 -2
  176. package/dist/cli-bundle/focused-chunks/chunk-U65UC4G3.js +0 -2
@@ -5,7 +5,7 @@
5
5
  * workspace configuration, and packages.
6
6
  */
7
7
 
8
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fa03d543-ff0d-5556-8558-9bed82838a58")}catch(e){}}();
8
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d09393aa-0253-5ad6-a2fe-245f31b9eb87")}catch(e){}}();
9
9
  import { AsyncLocalStorage } from "node:async_hooks";
10
10
  import { attachOutputOmissionReceipt } from "./output-projection.js";
11
11
  import { encodeQueryCursor } from "./pagination.js";
@@ -25,7 +25,7 @@ export const PM_CONTEXT_INTENT_CONTRACTS = Object.freeze([
25
25
  "blockers",
26
26
  "activity",
27
27
  ],
28
- token_budget: 2400,
28
+ token_budget: 3000,
29
29
  source: "core",
30
30
  },
31
31
  {
@@ -211,10 +211,14 @@ const CONTEXT_INTENT_DEFAULT_APPLIERS = {
211
211
  : ["hierarchy", "blockers", "activity"];
212
212
  }
213
213
  const tokenBudget = resolveIntentTokenBudget(projected.tokenBudget, contract.token_budget);
214
- const calculatedLimit = Math.max(1, Math.floor((tokenBudget - 800) / 500));
215
- const derivedLimit = String(explicitTokenBudget ? calculatedLimit : Math.min(20, calculatedLimit));
216
- if (projected.limit === undefined)
214
+ const budgetDerivedLimit = resolveIntentRowBudget("context", contract.intent, tokenBudget, explicitTokenBudget);
215
+ const requestedLimit = parsePositiveIntentTokenBudget(projected.limit);
216
+ const derivedLimit = String(requestedLimit === undefined
217
+ ? budgetDerivedLimit
218
+ : Math.min(requestedLimit, budgetDerivedLimit));
219
+ if (projected.limit === undefined || requestedLimit !== undefined) {
217
220
  projected.limit = derivedLimit;
221
+ }
218
222
  if (projected.activityLimit === undefined) {
219
223
  projected.activityLimit = derivedLimit;
220
224
  }
@@ -232,10 +236,13 @@ const CONTEXT_INTENT_DEFAULT_APPLIERS = {
232
236
  projected.fields =
233
237
  "id,title,status,type,priority,parent,assignee,risk,blocked_by";
234
238
  }
235
- if (projected.limit === undefined) {
236
- const tokenBudget = resolveIntentTokenBudget(projected.tokenBudget, contract.token_budget);
237
- const calculatedLimit = Math.max(2, Math.floor((tokenBudget - 520) / 16));
238
- projected.limit = String(explicitTokenBudget ? calculatedLimit : Math.min(100, calculatedLimit));
239
+ const tokenBudget = resolveIntentTokenBudget(projected.tokenBudget, contract.token_budget);
240
+ const budgetDerivedLimit = resolveIntentRowBudget("list", contract.intent, tokenBudget, explicitTokenBudget);
241
+ const requestedLimit = parsePositiveIntentTokenBudget(projected.limit);
242
+ if (projected.limit === undefined || requestedLimit !== undefined) {
243
+ projected.limit = String(requestedLimit === undefined
244
+ ? budgetDerivedLimit
245
+ : Math.min(requestedLimit, budgetDerivedLimit));
239
246
  }
240
247
  },
241
248
  next: (projected) => {
@@ -248,10 +255,13 @@ const CONTEXT_INTENT_DEFAULT_APPLIERS = {
248
255
  projected.fields === undefined) {
249
256
  projected.compact = true;
250
257
  }
251
- if (projected.limit === undefined) {
252
- const tokenBudget = resolveIntentTokenBudget(projected.tokenBudget, contract.token_budget);
253
- const calculatedLimit = Math.max(2, Math.floor((tokenBudget - 480) / 16));
254
- projected.limit = String(explicitTokenBudget ? calculatedLimit : Math.min(100, calculatedLimit));
258
+ const tokenBudget = resolveIntentTokenBudget(projected.tokenBudget, contract.token_budget);
259
+ const budgetDerivedLimit = resolveIntentRowBudget("search", contract.intent, tokenBudget, explicitTokenBudget);
260
+ const requestedLimit = parsePositiveIntentTokenBudget(projected.limit);
261
+ if (projected.limit === undefined || requestedLimit !== undefined) {
262
+ projected.limit = String(requestedLimit === undefined
263
+ ? budgetDerivedLimit
264
+ : Math.min(requestedLimit, budgetDerivedLimit));
255
265
  }
256
266
  },
257
267
  };
@@ -341,6 +351,23 @@ function resolveIntentTokenBudget(value, declaredBudget) {
341
351
  }
342
352
  return parsed;
343
353
  }
354
+ function resolveIntentRowBudget(command, intent, tokenBudget, explicitTokenBudget) {
355
+ if (command === "get" || command === "next")
356
+ return undefined;
357
+ const contextOrient = command === "context" && intent === "orient";
358
+ const overhead = command === "context"
359
+ ? contextOrient
360
+ ? 1200
361
+ : 800
362
+ : command === "list"
363
+ ? 520
364
+ : 480;
365
+ const rowCost = command === "context" ? (contextOrient ? 600 : 500) : 16;
366
+ const calculatedLimit = Math.max(command === "context" ? 1 : 2, Math.floor((tokenBudget - overhead) / rowCost));
367
+ return explicitTokenBudget
368
+ ? calculatedLimit
369
+ : Math.min(command === "context" ? 20 : 100, calculatedLimit);
370
+ }
344
371
  /** Update a receipt until its estimate matches the serialized projection that contains it. */
345
372
  function updateContextIntentEstimate(projected, receipt) {
346
373
  let measuredTokens = receipt.estimated_tokens;
@@ -495,12 +522,15 @@ export function attachContextIntentReceipt(command, options, result) {
495
522
  return result;
496
523
  const builtInCommand = normalizedCommand;
497
524
  const contract = resolveContextIntentContract(builtInCommand, options.for);
525
+ const effectiveTokenBudget = resolveIntentTokenBudget(options.tokenBudget ?? options.token_budget, contract.token_budget);
498
526
  const receipt = {
499
527
  command: builtInCommand,
500
528
  intent: contract.intent,
501
529
  source: contract.source,
502
530
  included_field_groups: [...contract.included_field_groups],
503
- token_budget: resolveIntentTokenBudget(options.tokenBudget ?? options.token_budget, contract.token_budget),
531
+ token_budget: effectiveTokenBudget,
532
+ declared_token_budget: contract.token_budget,
533
+ token_budget_override: effectiveTokenBudget - contract.token_budget,
504
534
  estimated_tokens: 0,
505
535
  within_budget: true,
506
536
  degradation: CONTEXT_INTENT_DEGRADATIONS[builtInCommand],
@@ -508,21 +538,17 @@ export function attachContextIntentReceipt(command, options, result) {
508
538
  result_omitted: false,
509
539
  };
510
540
  const resultWithDiagnostics = { ...result };
511
- if (builtInCommand === "list" || builtInCommand === "search") {
512
- const overhead = builtInCommand === "list" ? 520 : 480;
513
- const calculatedLimit = Math.max(2, Math.floor((receipt.token_budget - overhead) / 16));
514
- const explicitTokenBudget = parsePositiveIntentTokenBudget(options.tokenBudget ?? options.token_budget) !== undefined;
515
- const budgetDerivedLimit = explicitTokenBudget
516
- ? calculatedLimit
517
- : Math.min(100, calculatedLimit);
518
- const hasExplicitLimit = options.limit !== undefined;
541
+ const budgetDerivedLimit = resolveIntentRowBudget(builtInCommand, contract.intent, receipt.token_budget, parsePositiveIntentTokenBudget(options.tokenBudget ?? options.token_budget) !== undefined);
542
+ if (budgetDerivedLimit !== undefined) {
543
+ const effectiveLimit = parsePositiveIntentTokenBudget(options.limit);
544
+ const explicitLimitBinds = effectiveLimit !== undefined && effectiveLimit < budgetDerivedLimit;
519
545
  receipt.budget_derived_limit = budgetDerivedLimit;
520
- receipt.binding_constraint = hasExplicitLimit
546
+ receipt.binding_constraint = explicitLimitBinds
521
547
  ? "explicit_limit"
522
548
  : "token_budget";
523
- receipt.limit_reason = hasExplicitLimit
524
- ? "The caller supplied an explicit row limit; the budget-derived limit remains diagnostic."
525
- : "The selected intent token budget determines the row ceiling.";
549
+ receipt.limit_reason = explicitLimitBinds
550
+ ? "The caller supplied a smaller row limit than the budget-derived ceiling."
551
+ : "The selected intent token budget constrains the effective row ceiling.";
526
552
  resultWithDiagnostics.budget_derived_limit = budgetDerivedLimit;
527
553
  }
528
554
  let projected = {
@@ -543,20 +569,22 @@ export function attachContextIntentReceipt(command, options, result) {
543
569
  receipt.degradation = "budget_row_compaction";
544
570
  updateContextIntentEstimate(projected, receipt);
545
571
  }
572
+ receipt.declaration_feasible =
573
+ receipt.estimated_tokens <= receipt.declared_token_budget;
546
574
  if (receipt.estimated_tokens > receipt.token_budget) {
547
575
  receipt.degradation = "budget_receipt_only";
548
- receipt.declaration_feasible = false;
549
576
  receipt.result_omitted = true;
550
577
  receipt.within_budget = false;
551
578
  projected = {
552
579
  budget_exceeded: {
553
580
  omitted_result: true,
554
- reason: "declared_budget_infeasible",
555
- restore_with: "Increase --token-budget or narrow the request; the unprojected command may be larger.",
581
+ reason: receipt.token_budget_override === 0
582
+ ? "declared_budget_infeasible"
583
+ : "effective_budget_infeasible",
584
+ restore_with: buildContextIntentRecoveryCommand(command, builtInCommand, contract.intent, receipt, resultWithDiagnostics),
556
585
  },
557
586
  context_intent: receipt,
558
587
  };
559
- updateContextIntentEstimate(projected, receipt);
560
588
  }
561
589
  return projected;
562
590
  }
@@ -594,6 +622,23 @@ function collapseContinuationMetadata(options, result) {
594
622
  function isOutputRecord(value) {
595
623
  return value !== null && typeof value === "object" && !Array.isArray(value);
596
624
  }
625
+ /** Build a shell-safe bounded retry while retaining required read positionals. */
626
+ function buildContextIntentRecoveryCommand(command, builtInCommand, intent, receipt, result) {
627
+ const recoveryTarget = builtInCommand === "get" &&
628
+ isOutputRecord(result.item) &&
629
+ typeof result.item.id === "string"
630
+ ? result.item.id
631
+ : builtInCommand === "search" && typeof result.query === "string"
632
+ ? result.query
633
+ : undefined;
634
+ const recoveryPositional = recoveryTarget === undefined
635
+ ? ""
636
+ : ` '${recoveryTarget.replaceAll("'", `'"'"'`)}'`;
637
+ const boundedRowLimit = builtInCommand === "get"
638
+ ? ""
639
+ : ` --limit ${receipt.budget_derived_limit ?? 1}`;
640
+ return `pm ${command}${recoveryPositional} --for ${intent} --token-budget ${Math.ceil(receipt.estimated_tokens / 100) * 100}${boundedRowLimit}`;
641
+ }
597
642
  /** Read one numeric fixed-point estimate from an optional receipt. */
598
643
  function receiptEstimate(value, field) {
599
644
  if (!isOutputRecord(value))
@@ -641,4 +686,4 @@ export function attachReadOutputContracts(command, options, result) {
641
686
  return stabilizeSuppressedRowContractReceipts(Object.fromEntries(Object.entries(projected).filter(([key]) => key !== "row_contract")), options);
642
687
  }
643
688
  //# sourceMappingURL=context-intent-contracts.js.map
644
- //# debugId=fa03d543-ff0d-5556-8558-9bed82838a58
689
+ //# debugId=d09393aa-0253-5ad6-a2fe-245f31b9eb87
@@ -1,4 +1,4 @@
1
- import type { Dependency, ItemFormat } from "../types/index.js";
1
+ import type { Dependency, ItemFormat, RuntimeSchemaSettings } from "../types/index.js";
2
2
  import { type RelationshipKindRegistry } from "./relationships.js";
3
3
  /** Reject malformed shorthand before item-id prefix normalization can create a dangling graph node. */
4
4
  export declare function assertValidBareDependencyFlagValue(value: string, structured: boolean): void;
@@ -8,7 +8,8 @@ export declare function assertValidBareDependencyFlagValue(value: string, struct
8
8
  */
9
9
  export declare function assertDependencyEdgesAllowed(holderId: string, dependencies: readonly Dependency[] | undefined, registry?: RelationshipKindRegistry): void;
10
10
  /**
11
- * Resolve every newly supplied local dependency before a mutation commits.
11
+ * Resolve every newly supplied local dependency and enforce declared endpoint
12
+ * chronology before a mutation commits.
12
13
  * Explicit external provenance bypasses workspace lookup, while the opt-in
13
14
  * unresolved mode returns durable warning tokens instead of pretending that
14
15
  * the graph edge resolved successfully.
@@ -20,4 +21,10 @@ export declare function assertDependencyTargetsResolvable(params: {
20
21
  itemFormat: ItemFormat;
21
22
  typeToFolder: Record<string, string>;
22
23
  allowUnresolved?: boolean;
24
+ holders?: readonly {
25
+ id: string;
26
+ createdAt?: string;
27
+ }[];
28
+ schema?: RuntimeSchemaSettings;
29
+ registry?: RelationshipKindRegistry;
23
30
  }): Promise<string[]>;
@@ -1,10 +1,10 @@
1
1
  /** @module cli/commands/dependency-flag-validation */
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e7cd6092-ed18-52ea-94a0-03bed42eb858")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f9c9b926-c912-548e-a9c7-64c2c69767cd")}catch(e){}}();
4
4
  import { EXIT_CODE } from "../core/shared/constants.js";
5
5
  import { PmCliError } from "../core/shared/errors.js";
6
6
  import { toErrorMessage } from "../core/shared/primitives.js";
7
- import { locateItem } from "../core/store/item-store.js";
7
+ import { locateItem, readLocatedItem, } from "../core/store/item-store.js";
8
8
  import { isExternalDependencySourceKind } from "./dependency-provenance.js";
9
9
  import { resolveWorkspaceRelationshipKindRegistry } from "./graph/assembly.js";
10
10
  import { assertRelationshipEdgeAllowed, } from "./relationships.js";
@@ -31,55 +31,121 @@ export function assertDependencyEdgesAllowed(holderId, dependencies, registry =
31
31
  }
32
32
  }
33
33
  }
34
+ async function readDependencyEndpointCreatedAt(located, schema) {
35
+ return (await readLocatedItem(located, { schema })).document.metadata
36
+ .created_at;
37
+ }
38
+ async function resolveDependencyHolderCreatedAt(holder, context) {
39
+ if (holder.createdAt !== undefined)
40
+ return holder.createdAt;
41
+ const located = await locateItem(context.pmRoot, holder.id, context.idPrefix, context.itemFormat, context.typeToFolder);
42
+ return located === null
43
+ ? undefined
44
+ : readDependencyEndpointCreatedAt(located, context.schema);
45
+ }
46
+ function dependencyTemporalOrderError(params) {
47
+ const definition = params.registry.require(params.dependency.kind);
48
+ return new PmCliError(`${definition.kind} requires source ${params.holder.id} to be created after target ${params.dependency.id}`, EXIT_CODE.USAGE, {
49
+ code: "dependency_temporal_order_invalid",
50
+ reason: "source_not_after_target",
51
+ required: `${params.holder.id}.created_at must be later than ${params.dependency.id}.created_at for ${definition.kind}.`,
52
+ why: "Chronological recurrence direction must be validated before the relationship is persisted.",
53
+ source_id: params.holder.id,
54
+ source_created_at: params.sourceCreatedAt,
55
+ target_id: params.dependency.id,
56
+ target_created_at: params.targetCreatedAt,
57
+ temporal_order: definition.temporalOrder,
58
+ });
59
+ }
60
+ async function assertTemporalDependencyChronology(params) {
61
+ const temporalDependencies = params.dependencies.filter((dependency) => params.registry.resolve(dependency.kind)?.temporalOrder ===
62
+ "source_after_target" &&
63
+ !params.missingTargets.includes(dependency.id));
64
+ if (temporalDependencies.length === 0 || params.holders.length === 0)
65
+ return;
66
+ const locatedTargets = new Map(params.resolutions.flatMap(({ target, located }) => located === null ? [] : [[target, located]]));
67
+ const targetCreatedAt = new Map(await Promise.all([...new Set(temporalDependencies.map(({ id }) => id))].map(async (target) => [
68
+ target,
69
+ await readDependencyEndpointCreatedAt(locatedTargets.get(target), params.context.schema),
70
+ ])));
71
+ for (const holder of params.holders) {
72
+ const sourceCreatedAt = await resolveDependencyHolderCreatedAt(holder, params.context);
73
+ if (sourceCreatedAt === undefined)
74
+ continue;
75
+ for (const dependency of temporalDependencies) {
76
+ const targetTimestamp = targetCreatedAt.get(dependency.id);
77
+ const sourceTime = Date.parse(sourceCreatedAt);
78
+ const targetTime = Date.parse(targetTimestamp);
79
+ if (Number.isFinite(sourceTime) &&
80
+ Number.isFinite(targetTime) &&
81
+ sourceTime > targetTime) {
82
+ continue;
83
+ }
84
+ throw dependencyTemporalOrderError({
85
+ holder,
86
+ dependency,
87
+ sourceCreatedAt,
88
+ targetCreatedAt: targetTimestamp,
89
+ registry: params.registry,
90
+ });
91
+ }
92
+ }
93
+ }
34
94
  /**
35
- * Resolve every newly supplied local dependency before a mutation commits.
95
+ * Resolve every newly supplied local dependency and enforce declared endpoint
96
+ * chronology before a mutation commits.
36
97
  * Explicit external provenance bypasses workspace lookup, while the opt-in
37
98
  * unresolved mode returns durable warning tokens instead of pretending that
38
99
  * the graph edge resolved successfully.
39
100
  */
40
101
  export async function assertDependencyTargetsResolvable(params) {
102
+ const registry = params.registry ?? resolveWorkspaceRelationshipKindRegistry();
103
+ const localDependencies = (params.dependencies ?? []).filter((dependency) => !isExternalDependencySourceKind(dependency.source_kind));
41
104
  const localTargets = [
42
- ...new Set((params.dependencies ?? [])
43
- .filter((dependency) => !isExternalDependencySourceKind(dependency.source_kind))
44
- .map((dependency) => dependency.id)),
105
+ ...new Set(localDependencies.map((dependency) => dependency.id)),
45
106
  ];
46
107
  const resolutions = await Promise.all(localTargets.map(async (target) => ({
47
108
  target,
48
109
  located: await locateItem(params.pmRoot, target, params.idPrefix, params.itemFormat, params.typeToFolder),
49
110
  })));
50
- const targets = resolutions
111
+ const missingTargets = resolutions
51
112
  .filter(({ located }) => located === null)
52
113
  .map(({ target }) => target)
53
114
  .sort((left, right) => (left < right ? -1 : 1));
54
- if (targets.length === 0) {
55
- return [];
56
- }
57
- if (params.allowUnresolved === true) {
58
- return targets.map((target) => `dependency_target_unresolved:${target}`);
115
+ if (missingTargets.length > 0 && params.allowUnresolved !== true) {
116
+ throw new PmCliError(`Dependency target${missingTargets.length === 1 ? "" : "s"} not found: ${missingTargets.join(", ")}`, EXIT_CODE.NOT_FOUND, {
117
+ code: "dependency_target_not_found",
118
+ reason: "unresolved_local_dependency",
119
+ required: "Every local dependency target must exist before the edge is committed.",
120
+ why: "Fail-fast target resolution prevents dangling graph nodes and preserves reliable traversal semantics.",
121
+ unresolved_targets: missingTargets,
122
+ examples: [
123
+ "--dep id=<existing-item-id>,kind=related",
124
+ "--dep id=<external-id>,kind=related,source_kind=external",
125
+ "--allow-unresolved-deps --dep id=<future-item-id>,kind=related",
126
+ ],
127
+ nextSteps: [
128
+ `Create or correct ${missingTargets.length === 1 ? "the target" : "the targets"}, then retry the mutation.`,
129
+ "Use source_kind=external for a cross-workspace reference.",
130
+ "Use --allow-unresolved-deps only when the dangling local edge is intentional.",
131
+ ],
132
+ recovery: {
133
+ recovery_mode: "compact",
134
+ missing: missingTargets,
135
+ suggested_flags: ["--allow-unresolved-deps"],
136
+ suggested_retry: `pm search "${missingTargets[0]}" --limit 10`,
137
+ },
138
+ });
59
139
  }
60
- throw new PmCliError(`Dependency target${targets.length === 1 ? "" : "s"} not found: ${targets.join(", ")}`, EXIT_CODE.NOT_FOUND, {
61
- code: "dependency_target_not_found",
62
- reason: "unresolved_local_dependency",
63
- required: "Every local dependency target must exist before the edge is committed.",
64
- why: "Fail-fast target resolution prevents dangling graph nodes and preserves reliable traversal semantics.",
65
- unresolved_targets: targets,
66
- examples: [
67
- "--dep id=<existing-item-id>,kind=related",
68
- "--dep id=<external-id>,kind=related,source_kind=external",
69
- "--allow-unresolved-deps --dep id=<future-item-id>,kind=related",
70
- ],
71
- nextSteps: [
72
- `Create or correct ${targets.length === 1 ? "the target" : "the targets"}, then retry the mutation.`,
73
- "Use source_kind=external for a cross-workspace reference.",
74
- "Use --allow-unresolved-deps only when the dangling local edge is intentional.",
75
- ],
76
- recovery: {
77
- recovery_mode: "compact",
78
- missing: targets,
79
- suggested_flags: ["--allow-unresolved-deps"],
80
- suggested_retry: `pm search "${targets[0]}" --limit 10`,
81
- },
140
+ await assertTemporalDependencyChronology({
141
+ dependencies: localDependencies,
142
+ missingTargets,
143
+ resolutions,
144
+ holders: params.holders ?? [],
145
+ registry,
146
+ context: params,
82
147
  });
148
+ return missingTargets.map((target) => `dependency_target_unresolved:${target}`);
83
149
  }
84
150
  //# sourceMappingURL=dependency-flag-validation.js.map
85
- //# debugId=e7cd6092-ed18-52ea-94a0-03bed42eb858
151
+ //# debugId=f9c9b926-c912-548e-a9c7-64c2c69767cd
@@ -5,7 +5,8 @@
5
5
  * leaking local paths or swallowing genuine implementation defects.
6
6
  */
7
7
 
8
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="41fec0f3-5cc8-5007-a896-f8d8b83ae4f5")}catch(e){}}();
8
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="679bb2a0-aada-586e-a831-591266be2ee0")}catch(e){}}();
9
+ import { constants as osConstants } from "node:os";
9
10
  import { EXIT_CODE } from "../../core/shared/constants.js";
10
11
  import { PmCliError } from "../../core/shared/errors.js";
11
12
  const HOST_ENVIRONMENT_FAULTS = new Map([
@@ -75,6 +76,16 @@ const HOST_ENVIRONMENT_FAULTS = new Map([
75
76
  ],
76
77
  ]);
77
78
  const OPERATION_PATTERN = /^[a-z][a-z0-9_]{0,63}$/u;
79
+ const HOST_ENVIRONMENT_ERRNO_NAMES = new Map([
80
+ [osConstants.errno.EACCES, "EACCES"],
81
+ [osConstants.errno.EDQUOT, "EDQUOT"],
82
+ [osConstants.errno.EMFILE, "EMFILE"],
83
+ [osConstants.errno.ENFILE, "ENFILE"],
84
+ [osConstants.errno.ENOMEM, "ENOMEM"],
85
+ [osConstants.errno.ENOSPC, "ENOSPC"],
86
+ [osConstants.errno.EPERM, "EPERM"],
87
+ [osConstants.errno.EROFS, "EROFS"],
88
+ ]);
78
89
  const HOST_ENVIRONMENT_FAULT_CODES = {
79
90
  capacity: { code: "host_environment_capacity_fault" },
80
91
  permission: { code: "host_environment_permission_fault" },
@@ -82,12 +93,19 @@ const HOST_ENVIRONMENT_FAULT_CODES = {
82
93
  };
83
94
  /** Return a declared host errno only when it represents recoverable environment state. */
84
95
  export function classifyHostEnvironmentFault(error) {
85
- if (typeof error !== "object" || error === null || !("code" in error))
96
+ if (typeof error !== "object" || error === null) {
86
97
  return null;
87
- const code = error.code;
88
- return typeof code === "string" && HOST_ENVIRONMENT_FAULTS.has(code)
89
- ? code
90
- : null;
98
+ }
99
+ const errorRecord = error;
100
+ if (typeof errorRecord.code === "string" &&
101
+ HOST_ENVIRONMENT_FAULTS.has(errorRecord.code)) {
102
+ return errorRecord.code;
103
+ }
104
+ if (typeof errorRecord.errno !== "number" ||
105
+ !Number.isInteger(errorRecord.errno)) {
106
+ return null;
107
+ }
108
+ return HOST_ENVIRONMENT_ERRNO_NAMES.get(Math.abs(errorRecord.errno)) ?? null;
91
109
  }
92
110
  /** Translate one known host fault into a stable path-redacted SDK refusal. */
93
111
  export function translateHostEnvironmentFault(error, operation, options = {}) {
@@ -121,4 +139,4 @@ export async function withHostEnvironmentBoundary(operation, run, options = {})
121
139
  }
122
140
  }
123
141
  //# sourceMappingURL=host-environment-errors.js.map
124
- //# debugId=41fec0f3-5cc8-5007-a896-f8d8b83ae4f5
142
+ //# debugId=679bb2a0-aada-586e-a831-591266be2ee0
@@ -1,6 +1,6 @@
1
1
  /** Generated partition 1 of the exhaustive error-code catalog. */
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3891c17c-c79d-54d4-8b62-da8fe9c1eaf4")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d188630b-bf34-53f4-a93e-78698013994e")}catch(e){}}();
4
4
  export const PM_ERROR_CODE_CATALOG_PART_1 = [
5
5
  {
6
6
  code: "acceptance_criteria_mutation_conflict",
@@ -470,6 +470,18 @@ export const PM_ERROR_CODE_CATALOG_PART_1 = [
470
470
  canonical_code: "dependency_target_not_found",
471
471
  aliases: [],
472
472
  },
473
+ {
474
+ code: "dependency_temporal_order_invalid",
475
+ meaning: "Dependency temporal order invalid condition.",
476
+ stability: "provisional",
477
+ exit_code: 2,
478
+ class: "usage",
479
+ recovery: "Inspect the structured error guidance and retry the suggested command.",
480
+ sources: ["sdk/dependency-flag-validation.ts"],
481
+ emitting_commands: ["*"],
482
+ canonical_code: "dependency_temporal_order_invalid",
483
+ aliases: [],
484
+ },
473
485
  {
474
486
  code: "duplicate_command",
475
487
  meaning: "Duplicate command condition.",
@@ -806,6 +818,42 @@ export const PM_ERROR_CODE_CATALOG_PART_1 = [
806
818
  canonical_code: "github_source_entry_unbuilt",
807
819
  aliases: [],
808
820
  },
821
+ {
822
+ code: "history_author_acknowledge_plan_conflict",
823
+ meaning: "History author acknowledge plan conflict condition.",
824
+ stability: "provisional",
825
+ exit_code: 4,
826
+ class: "conflict",
827
+ recovery: "Inspect the structured error guidance and retry the suggested command.",
828
+ sources: ["sdk/author-attribution.ts"],
829
+ emitting_commands: ["*"],
830
+ canonical_code: "history_author_acknowledge_plan_conflict",
831
+ aliases: [],
832
+ },
833
+ {
834
+ code: "history_author_acknowledge_plan_fingerprint_required",
835
+ meaning: "History author acknowledge plan fingerprint required condition.",
836
+ stability: "provisional",
837
+ exit_code: 2,
838
+ class: "usage",
839
+ recovery: "Inspect the structured error guidance and retry the suggested command.",
840
+ sources: ["sdk/author-attribution.ts"],
841
+ emitting_commands: ["*"],
842
+ canonical_code: "history_author_acknowledge_plan_fingerprint_required",
843
+ aliases: [],
844
+ },
845
+ {
846
+ code: "history_author_acknowledge_preview_limit_invalid",
847
+ meaning: "History author acknowledge preview limit invalid condition.",
848
+ stability: "provisional",
849
+ exit_code: 2,
850
+ class: "usage",
851
+ recovery: "Inspect the structured error guidance and retry the suggested command.",
852
+ sources: ["sdk/author-attribution.ts"],
853
+ emitting_commands: ["*"],
854
+ canonical_code: "history_author_acknowledge_preview_limit_invalid",
855
+ aliases: [],
856
+ },
809
857
  {
810
858
  code: "history_author_acknowledge_required_values_missing",
811
859
  meaning: "History author acknowledge required values missing condition.",
@@ -1592,6 +1640,18 @@ export const PM_ERROR_CODE_CATALOG_PART_1 = [
1592
1640
  canonical_code: "manifest_capabilities_absent",
1593
1641
  aliases: [],
1594
1642
  },
1643
+ {
1644
+ code: "manifest_unknown_key",
1645
+ meaning: "Manifest unknown key condition.",
1646
+ stability: "provisional",
1647
+ exit_code: 2,
1648
+ class: "usage",
1649
+ recovery: "Inspect the structured error guidance and retry the suggested command.",
1650
+ sources: ["sdk/compose.ts"],
1651
+ emitting_commands: ["*"],
1652
+ canonical_code: "manifest_unknown_key",
1653
+ aliases: [],
1654
+ },
1595
1655
  {
1596
1656
  code: "merge_conflict_markers_detected",
1597
1657
  meaning: "Merge conflict markers detected condition.",
@@ -1604,18 +1664,6 @@ export const PM_ERROR_CODE_CATALOG_PART_1 = [
1604
1664
  canonical_code: "merge_conflict_markers_detected",
1605
1665
  aliases: ["history_merge_conflict_markers_detected"],
1606
1666
  },
1607
- {
1608
- code: "merge_decisions_unreviewed",
1609
- meaning: "Merge decisions unreviewed condition.",
1610
- stability: "provisional",
1611
- exit_code: 1,
1612
- class: "generic_failure",
1613
- recovery: "Inspect the structured error guidance and retry the suggested command.",
1614
- sources: ["core/diagnostics/remediation.ts"],
1615
- emitting_commands: ["*"],
1616
- canonical_code: "merge_decisions_unreviewed",
1617
- aliases: [],
1618
- },
1619
1667
  ];
1620
1668
  //# sourceMappingURL=generated-error-code-catalog-part-1.js.map
1621
- //# debugId=3891c17c-c79d-54d4-8b62-da8fe9c1eaf4
1669
+ //# debugId=d188630b-bf34-53f4-a93e-78698013994e
@@ -1,7 +1,19 @@
1
1
  /** Generated partition 2 of the exhaustive error-code catalog. */
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5d64a86d-6ba6-5bbe-a83a-9703690a851e")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="43b9f478-8b90-5644-aa06-b6787514ffa1")}catch(e){}}();
4
4
  export const PM_ERROR_CODE_CATALOG_PART_2 = [
5
+ {
6
+ code: "merge_decisions_unreviewed",
7
+ meaning: "Merge decisions unreviewed condition.",
8
+ stability: "provisional",
9
+ exit_code: 1,
10
+ class: "generic_failure",
11
+ recovery: "Inspect the structured error guidance and retry the suggested command.",
12
+ sources: ["core/diagnostics/remediation.ts"],
13
+ emitting_commands: ["*"],
14
+ canonical_code: "merge_decisions_unreviewed",
15
+ aliases: [],
16
+ },
5
17
  {
6
18
  code: "merge_git_config_unwritable",
7
19
  meaning: "Merge git config unwritable condition.",
@@ -207,6 +219,18 @@ export const PM_ERROR_CODE_CATALOG_PART_2 = [
207
219
  canonical_code: "no_update_fields",
208
220
  aliases: [],
209
221
  },
222
+ {
223
+ code: "no_version_bounds_declared",
224
+ meaning: "No version bounds declared condition.",
225
+ stability: "provisional",
226
+ exit_code: 1,
227
+ class: "generic_failure",
228
+ recovery: "Inspect the structured error guidance and retry the suggested command.",
229
+ sources: ["sdk/compose.ts"],
230
+ emitting_commands: ["*"],
231
+ canonical_code: "no_version_bounds_declared",
232
+ aliases: [],
233
+ },
210
234
  {
211
235
  code: "npm_package_not_found",
212
236
  meaning: "Npm package not found condition.",
@@ -774,6 +798,18 @@ export const PM_ERROR_CODE_CATALOG_PART_2 = [
774
798
  canonical_code: "tracker_root_not_directory",
775
799
  aliases: [],
776
800
  },
801
+ {
802
+ code: "tracker_root_unreadable",
803
+ meaning: "Tracker root unreadable condition.",
804
+ stability: "provisional",
805
+ exit_code: 1,
806
+ class: "generic_failure",
807
+ recovery: "Inspect the structured error guidance and retry the suggested command.",
808
+ sources: ["core/store/item-store.ts"],
809
+ emitting_commands: ["*"],
810
+ canonical_code: "tracker_root_unreadable",
811
+ aliases: [],
812
+ },
777
813
  {
778
814
  code: "type_duplicate",
779
815
  meaning: "Type duplicate condition.",
@@ -1507,6 +1543,18 @@ export const PM_ERROR_CODE_CATALOG_PART_2 = [
1507
1543
  canonical_code: "workflow_type_unknown",
1508
1544
  aliases: [],
1509
1545
  },
1546
+ {
1547
+ code: "workspace_history_chain_invalid",
1548
+ meaning: "Workspace history chain invalid condition.",
1549
+ stability: "provisional",
1550
+ exit_code: 4,
1551
+ class: "conflict",
1552
+ recovery: "Inspect the structured error guidance and retry the suggested command.",
1553
+ sources: ["core/history/workspace-history.ts"],
1554
+ emitting_commands: ["*"],
1555
+ canonical_code: "workspace_history_chain_invalid",
1556
+ aliases: [],
1557
+ },
1510
1558
  {
1511
1559
  code: "workspace_history_state_conflict",
1512
1560
  meaning: "Workspace history state conflict condition.",
@@ -1629,4 +1677,4 @@ export const PM_ERROR_CODE_CATALOG_PART_2 = [
1629
1677
  },
1630
1678
  ];
1631
1679
  //# sourceMappingURL=generated-error-code-catalog-part-2.js.map
1632
- //# debugId=5d64a86d-6ba6-5bbe-a83a-9703690a851e
1680
+ //# debugId=43b9f478-8b90-5644-aa06-b6787514ffa1