@unbrained/pm-cli 2026.10.14 → 2026.10.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 (753) hide show
  1. package/.agents/skills/pm-developer/references/COMMAND_PLAYBOOK.md +1 -1
  2. package/.claude-plugin/marketplace.json +1 -1
  3. package/AGENTS.md +1 -0
  4. package/CHANGELOG.md +74 -2
  5. package/dist/cli/after-command-context-usage.d.ts +7 -7
  6. package/dist/cli/argv-utils.d.ts +4 -4
  7. package/dist/cli/bundle-integrity.d.ts +16 -16
  8. package/dist/cli/command-namespaces.d.ts +1 -1
  9. package/dist/cli/commander-usage.d.ts +34 -34
  10. package/dist/cli/commands/governance/validate.d.ts +1 -1
  11. package/dist/cli/commands/history/history-compact.d.ts +1 -1
  12. package/dist/cli/commands/history/history-redact.d.ts +1 -1
  13. package/dist/cli/commands/history/history-repair.d.ts +1 -1
  14. package/dist/cli/commands/history/restore.d.ts +1 -1
  15. package/dist/cli/commands/lifecycle/close.d.ts +1 -1
  16. package/dist/cli/commands/lifecycle/copy.d.ts +1 -1
  17. package/dist/cli/commands/lifecycle/delete.d.ts +1 -1
  18. package/dist/cli/commands/lifecycle/focus.d.ts +1 -1
  19. package/dist/cli/commands/query/get.d.ts +1 -1
  20. package/dist/cli/commands/workspace/merge.d.ts +1 -1
  21. package/dist/cli/commands/workspace/schema.d.ts +1 -1
  22. package/dist/cli/context-intent-invocation.d.ts +1 -1
  23. package/dist/cli/description-stdin.d.ts +1 -1
  24. package/dist/cli/error-guidance.d.ts +119 -119
  25. package/dist/cli/extension-command-help.d.ts +64 -64
  26. package/dist/cli/extension-command-help.js +2 -2
  27. package/dist/cli/extension-command-options.d.ts +18 -16
  28. package/dist/cli/extension-command-options.js +1 -1
  29. package/dist/cli/extension-recovery.d.ts +13 -13
  30. package/dist/cli/help-content.d.ts +22 -22
  31. package/dist/cli/help-content.js +3 -3
  32. package/dist/cli/help-json-payload.d.ts +45 -45
  33. package/dist/cli/invocation-profile.d.ts +5 -5
  34. package/dist/cli/main.d.ts +217 -217
  35. package/dist/cli/migration-gates.d.ts +24 -24
  36. package/dist/cli/option-values.d.ts +1 -1
  37. package/dist/cli/public.d.ts +1 -1
  38. package/dist/cli/register-annotations.d.ts +2 -2
  39. package/dist/cli/register-assurance.d.ts +1 -1
  40. package/dist/cli/register-files-lookup.d.ts +1 -1
  41. package/dist/cli/register-history-activity.d.ts +1 -1
  42. package/dist/cli/register-history-author.d.ts +1 -1
  43. package/dist/cli/register-history-maintenance.d.ts +1 -1
  44. package/dist/cli/register-list-query.d.ts +7 -7
  45. package/dist/cli/register-list-query.js +3 -3
  46. package/dist/cli/register-mutation-options.d.ts +1 -1
  47. package/dist/cli/register-mutation.d.ts +4 -4
  48. package/dist/cli/register-mutation.js +2 -2
  49. package/dist/cli/register-operations.d.ts +75 -75
  50. package/dist/cli/register-operations.js +1 -1
  51. package/dist/cli/register-setup.d.ts +4 -4
  52. package/dist/cli/register-structured-mutation.d.ts +8 -13
  53. package/dist/cli/register-structured-mutation.js +1 -1
  54. package/dist/cli/runtime/activation.d.ts +23 -23
  55. package/dist/cli/runtime/invocation-options.d.ts +12 -12
  56. package/dist/cli/runtime/invocation-options.js +1 -1
  57. package/dist/cli/runtime/projection-retry.d.ts +1 -1
  58. package/dist/cli/runtime/selection.d.ts +16 -16
  59. package/dist/cli/runtime/telemetry-outcome.d.ts +11 -11
  60. package/dist/cli/runtime-compatibility-boundary.d.ts +7 -7
  61. package/dist/cli/schema/registration.d.ts +1 -1
  62. package/dist/cli/schema-registration-helpers.d.ts +2 -2
  63. package/dist/cli/stats-analytics-json.d.ts +1 -1
  64. package/dist/cli-bundle/bundle-manifest.json +1 -1
  65. package/dist/cli-bundle/chunks/{chunk-LKESCZEN.js → chunk-3QKI3XNX.js} +2 -2
  66. package/dist/cli-bundle/chunks/chunk-4PNPDT2N.js +236 -0
  67. package/dist/cli-bundle/chunks/{chunk-JTF6VMXH.js → chunk-6ZDKKOKM.js} +28 -28
  68. package/dist/cli-bundle/chunks/{chunk-MAT4AP7P.js → chunk-B5QVGCZX.js} +2 -2
  69. package/dist/cli-bundle/chunks/{chunk-5LU6PWA4.js → chunk-EA2CG7UM.js} +2 -2
  70. package/dist/cli-bundle/chunks/chunk-HY7FQ7QX.js +2 -0
  71. package/dist/cli-bundle/chunks/{chunk-3S5SEMEB.js → chunk-J4LPQCET.js} +2 -2
  72. package/dist/cli-bundle/chunks/chunk-JS3B2M4D.js +6 -0
  73. package/dist/cli-bundle/chunks/chunk-O4YBC3OM.js +30 -0
  74. package/dist/cli-bundle/chunks/{chunk-LE4IEHDG.js → chunk-OZCSXX4D.js} +63 -64
  75. package/dist/cli-bundle/chunks/chunk-VMCSTFSO.js +2 -0
  76. package/dist/cli-bundle/chunks/chunk-W3KZ22DW.js +2 -0
  77. package/dist/cli-bundle/chunks/{chunk-2UKKO45F.js → chunk-X2ONXFBP.js} +2 -2
  78. package/dist/cli-bundle/chunks/chunk-X53HM753.js +20 -0
  79. package/dist/cli-bundle/chunks/{register-list-query-GBLTOQQL.js → register-list-query-RU3QZSAQ.js} +7 -7
  80. package/dist/cli-bundle/chunks/register-mutation-EQYMT32A.js +20 -0
  81. package/dist/cli-bundle/chunks/{register-operations-J3WXP3MA.js → register-operations-VXBGE4XI.js} +2 -2
  82. package/dist/cli-bundle/chunks/{register-setup-HLSKKU4V.js → register-setup-UUDEGFRO.js} +2 -2
  83. package/dist/cli-bundle/focused-chunks/{chunk-ELQNEJDA.js → chunk-2IOHHNRT.js} +2 -2
  84. package/dist/cli-bundle/focused-chunks/chunk-5JEFDEL3.js +166 -0
  85. package/dist/cli-bundle/focused-chunks/{chunk-4UA7KY4V.js → chunk-AH6NX6GM.js} +2 -2
  86. package/dist/cli-bundle/focused-chunks/{chunk-ESOW6PH4.js → chunk-E33QA7PK.js} +2 -2
  87. package/dist/cli-bundle/focused-chunks/{chunk-BUAGNTLG.js → chunk-FTUZ3JF2.js} +6 -6
  88. package/dist/cli-bundle/focused-chunks/{chunk-HNRI2KBT.js → chunk-JXR6UKFM.js} +3 -3
  89. package/dist/cli-bundle/focused-chunks/chunk-LDKX4KYJ.js +2 -0
  90. package/dist/cli-bundle/focused-chunks/{chunk-IGBSAHCA.js → chunk-MBQF6HT6.js} +2 -2
  91. package/dist/cli-bundle/focused-chunks/chunk-NZO7GOXD.js +20 -0
  92. package/dist/cli-bundle/focused-chunks/{chunk-QIU4Y3AB.js → chunk-PYC7BF6Z.js} +2 -2
  93. package/dist/cli-bundle/focused-chunks/{chunk-YJNKISEI.js → chunk-QOSVJDOO.js} +61 -62
  94. package/dist/cli-bundle/focused-chunks/{chunk-RHQCQTZA.js → chunk-RBLSY6ML.js} +2 -2
  95. package/dist/cli-bundle/focused-chunks/{chunk-KSMQEB3V.js → chunk-RHTH5ILM.js} +2 -2
  96. package/dist/cli-bundle/focused-chunks/{chunk-Y5A4XOSK.js → chunk-SIGIGZCG.js} +3 -3
  97. package/dist/cli-bundle/focused-chunks/chunk-TRFVAWF2.js +26 -0
  98. package/dist/cli-bundle/focused-chunks/{chunk-AULVKHYX.js → chunk-UNTQE37U.js} +2 -2
  99. package/dist/cli-bundle/main.js +22 -22
  100. package/dist/cli-bundle/sdk-authoring.js +1 -1
  101. package/dist/cli-bundle/sdk-contracts.js +2 -2
  102. package/dist/cli-bundle/sdk-core.js +23 -23
  103. package/dist/cli-bundle/sdk-governance.js +1 -1
  104. package/dist/cli-bundle/sdk-graph.js +1 -1
  105. package/dist/cli-bundle/sdk-merge.js +54 -54
  106. package/dist/cli-bundle/sdk-query.js +1 -1
  107. package/dist/cli-bundle/sdk-runtime.js +1 -1
  108. package/dist/cli-bundle/sdk-testing.js +1 -1
  109. package/dist/cli-bundle/sdk.js +7 -7
  110. package/dist/cli.d.ts +9 -9
  111. package/dist/core/checkpoint/checkpoint-gc.d.ts +17 -17
  112. package/dist/core/checkpoint/mutation-checkpoint.d.ts +26 -26
  113. package/dist/core/config/nested-settings.d.ts +20 -20
  114. package/dist/core/config/positional-value.d.ts +9 -9
  115. package/dist/core/diagnostics/remediation.d.ts +7 -7
  116. package/dist/core/extensions/activation-summary-markdown.d.ts +4 -4
  117. package/dist/core/extensions/activation-summary.d.ts +30 -30
  118. package/dist/core/extensions/activation-transaction.d.ts +9 -9
  119. package/dist/core/extensions/capability-usage.d.ts +25 -25
  120. package/dist/core/extensions/command-hook-context.d.ts +15 -15
  121. package/dist/core/extensions/command-metadata-contract.d.ts +1 -1
  122. package/dist/core/extensions/command-visibility-tier.d.ts +1 -1
  123. package/dist/core/extensions/contribution-inventory.d.ts +24 -24
  124. package/dist/core/extensions/exporter-output-contract.d.ts +4 -4
  125. package/dist/core/extensions/extension-candidate.d.ts +14 -14
  126. package/dist/core/extensions/extension-capability-aliases.d.ts +14 -14
  127. package/dist/core/extensions/extension-hook-runtime.d.ts +14 -14
  128. package/dist/core/extensions/extension-policy.d.ts +62 -62
  129. package/dist/core/extensions/extension-registries.d.ts +8 -8
  130. package/dist/core/extensions/extension-runtime-helpers.d.ts +5 -5
  131. package/dist/core/extensions/extension-types.d.ts +717 -702
  132. package/dist/core/extensions/extension-types.js +1 -1
  133. package/dist/core/extensions/flag-definition-validation.d.ts +11 -11
  134. package/dist/core/extensions/flag-value-types.d.ts +32 -4
  135. package/dist/core/extensions/flag-value-types.js +1 -1
  136. package/dist/core/extensions/index.d.ts +34 -34
  137. package/dist/core/extensions/item-field-types.d.ts +3 -3
  138. package/dist/core/extensions/item-fields.d.ts +6 -6
  139. package/dist/core/extensions/loader.d.ts +66 -66
  140. package/dist/core/extensions/manifest-parser.d.ts +1 -1
  141. package/dist/core/extensions/manifest-schema.d.ts +13 -13
  142. package/dist/core/extensions/module-graph-snapshot.d.ts +5 -5
  143. package/dist/core/extensions/preflight-ownership.d.ts +3 -3
  144. package/dist/core/extensions/read-output-contract.d.ts +2 -2
  145. package/dist/core/extensions/registration-contracts.d.ts +12 -12
  146. package/dist/core/extensions/registration-contracts.js +1 -1
  147. package/dist/core/extensions/registration-validation.d.ts +6 -6
  148. package/dist/core/extensions/registration-values.d.ts +19 -19
  149. package/dist/core/extensions/reserved-host-flags.d.ts +5 -5
  150. package/dist/core/extensions/runtime-registrations.d.ts +6 -6
  151. package/dist/core/extensions/service-ownership.d.ts +1 -1
  152. package/dist/core/extensions/version-compat.d.ts +9 -9
  153. package/dist/core/fs/atomic-create.d.ts +1 -1
  154. package/dist/core/fs/fs-utils.d.ts +12 -12
  155. package/dist/core/fs/host-environment-errors.d.ts +10 -10
  156. package/dist/core/fs/path-utils.d.ts +1 -1
  157. package/dist/core/governance/content-fields.d.ts +25 -25
  158. package/dist/core/governance/issue-codes.d.ts +16 -16
  159. package/dist/core/governance/metadata-coverage.d.ts +64 -64
  160. package/dist/core/history/digest.d.ts +5 -5
  161. package/dist/core/history/drift-cache.d.ts +2 -2
  162. package/dist/core/history/drift-scan.d.ts +18 -18
  163. package/dist/core/history/event-classification.d.ts +4 -4
  164. package/dist/core/history/event-index.d.ts +33 -33
  165. package/dist/core/history/history-compact-bulk.d.ts +12 -12
  166. package/dist/core/history/history-diff.d.ts +15 -15
  167. package/dist/core/history/history-rewrite.d.ts +43 -43
  168. package/dist/core/history/history-storage-stats.d.ts +20 -20
  169. package/dist/core/history/history-stream-policy.d.ts +12 -12
  170. package/dist/core/history/history.d.ts +45 -45
  171. package/dist/core/history/identity.d.ts +4 -4
  172. package/dist/core/history/operation-contract.d.ts +17 -17
  173. package/dist/core/history/projection.d.ts +16 -16
  174. package/dist/core/history/read.d.ts +4 -4
  175. package/dist/core/history/replay.d.ts +47 -47
  176. package/dist/core/history/tombstone.d.ts +1 -1
  177. package/dist/core/history/version-address.d.ts +2 -2
  178. package/dist/core/history/workspace-history.d.ts +72 -72
  179. package/dist/core/io/body-file.d.ts +2 -2
  180. package/dist/core/io/bulk-ids-input.d.ts +7 -7
  181. package/dist/core/item/actionability.d.ts +30 -30
  182. package/dist/core/item/dependency-reference.d.ts +2 -2
  183. package/dist/core/item/id.d.ts +9 -9
  184. package/dist/core/item/item-format-version.d.ts +17 -15
  185. package/dist/core/item/item-format-version.js +1 -1
  186. package/dist/core/item/item-format.d.ts +54 -54
  187. package/dist/core/item/item-format.js +3 -3
  188. package/dist/core/item/item-record.d.ts +1 -1
  189. package/dist/core/item/item-type-definition.d.ts +11 -11
  190. package/dist/core/item/parent-reference-policy.d.ts +6 -6
  191. package/dist/core/item/parse.d.ts +37 -37
  192. package/dist/core/item/plan-lifecycle.d.ts +4 -4
  193. package/dist/core/item/priority.d.ts +3 -3
  194. package/dist/core/item/sprint-release-format.d.ts +4 -4
  195. package/dist/core/item/status-filter.d.ts +5 -5
  196. package/dist/core/item/status.d.ts +3 -3
  197. package/dist/core/item/toon-decode.d.ts +10 -10
  198. package/dist/core/item/type-registry.d.ts +35 -35
  199. package/dist/core/item/type-synonyms.d.ts +2 -2
  200. package/dist/core/lock/lock-gc.d.ts +28 -28
  201. package/dist/core/lock/lock.d.ts +53 -53
  202. package/dist/core/output/mutation-projection.d.ts +4 -25
  203. package/dist/core/output/mutation-projection.js +1 -1
  204. package/dist/core/output/output-control.d.ts +4 -4
  205. package/dist/core/output/output.d.ts +30 -30
  206. package/dist/core/output/query-summary.d.ts +5 -5
  207. package/dist/core/output/tabular.d.ts +3 -3
  208. package/dist/core/packages/manifest.d.ts +30 -30
  209. package/dist/core/packages/root.d.ts +4 -4
  210. package/dist/core/policy/workflow-policy-schema.d.ts +291 -291
  211. package/dist/core/policy/workflow-policy-store.d.ts +15 -15
  212. package/dist/core/policy/workflow-policy.d.ts +56 -56
  213. package/dist/core/profile/profile-describe.d.ts +22 -22
  214. package/dist/core/profile/profile-lint.d.ts +13 -13
  215. package/dist/core/profile/profile-plan.d.ts +45 -45
  216. package/dist/core/profile/profile-presets.d.ts +36 -36
  217. package/dist/core/reproducibility/context.d.ts +9 -9
  218. package/dist/core/schema/fields-file.d.ts +35 -35
  219. package/dist/core/schema/item-types-file.d.ts +29 -29
  220. package/dist/core/schema/runtime-field-filters.d.ts +3 -3
  221. package/dist/core/schema/runtime-field-values.d.ts +7 -7
  222. package/dist/core/schema/runtime-schema.d.ts +59 -59
  223. package/dist/core/schema/status-defs-file.d.ts +29 -29
  224. package/dist/core/schema/status-token.d.ts +1 -1
  225. package/dist/core/schema/type-inference.d.ts +10 -10
  226. package/dist/core/schema/type-presets.d.ts +5 -5
  227. package/dist/core/schema/type-workflows.d.ts +15 -15
  228. package/dist/core/schema/type-workflows.js +1 -1
  229. package/dist/core/search/background-refresh.d.ts +12 -12
  230. package/dist/core/search/bm25.d.ts +16 -16
  231. package/dist/core/search/cache.d.ts +34 -34
  232. package/dist/core/search/corpus.d.ts +17 -17
  233. package/dist/core/search/embedding-batches.d.ts +25 -25
  234. package/dist/core/search/eval-thresholds.d.ts +4 -4
  235. package/dist/core/search/eval.d.ts +40 -40
  236. package/dist/core/search/http-client.d.ts +24 -24
  237. package/dist/core/search/providers.d.ts +30 -30
  238. package/dist/core/search/relevance.d.ts +17 -17
  239. package/dist/core/search/semantic-defaults.d.ts +5 -5
  240. package/dist/core/search/staleness.d.ts +3 -3
  241. package/dist/core/search/vector-stores.d.ts +51 -51
  242. package/dist/core/search/vectorization-metadata.d.ts +9 -9
  243. package/dist/core/sentry/helpers.d.ts +27 -27
  244. package/dist/core/sentry/instrument.d.ts +51 -51
  245. package/dist/core/sentry/instrument.js +1 -1
  246. package/dist/core/sentry/sensitive-assignments.d.ts +9 -0
  247. package/dist/core/sentry/sensitive-assignments.js +2 -0
  248. package/dist/core/session/session-state.d.ts +37 -37
  249. package/dist/core/shared/agent-session-context.d.ts +14 -14
  250. package/dist/core/shared/author.d.ts +89 -89
  251. package/dist/core/shared/command-line.d.ts +3 -3
  252. package/dist/core/shared/command-types.d.ts +20 -20
  253. package/dist/core/shared/conflict-markers.d.ts +5 -5
  254. package/dist/core/shared/constants.d.ts +30 -30
  255. package/dist/core/shared/errors.d.ts +100 -100
  256. package/dist/core/shared/html-entity-decode.d.ts +2 -2
  257. package/dist/core/shared/item-metadata-contract.d.ts +2 -2
  258. package/dist/core/shared/lazy-module.d.ts +1 -1
  259. package/dist/core/shared/levenshtein.d.ts +1 -1
  260. package/dist/core/shared/memo.d.ts +1 -1
  261. package/dist/core/shared/numeric-parsers.d.ts +1 -1
  262. package/dist/core/shared/option-alias-visibility.d.ts +3 -3
  263. package/dist/core/shared/primitives.d.ts +13 -13
  264. package/dist/core/shared/secret-rules.d.ts +92 -92
  265. package/dist/core/shared/serial-queue.d.ts +6 -6
  266. package/dist/core/shared/serialization.d.ts +4 -4
  267. package/dist/core/shared/split-comma-list.d.ts +4 -4
  268. package/dist/core/shared/text-normalization.d.ts +5 -3
  269. package/dist/core/shared/text-normalization.js +1 -1
  270. package/dist/core/shared/time.d.ts +27 -27
  271. package/dist/core/store/item-format-migration.d.ts +7 -7
  272. package/dist/core/store/item-metadata-cache.d.ts +30 -30
  273. package/dist/core/store/item-metadata-query-index.d.ts +66 -66
  274. package/dist/core/store/item-metadata-read-work.d.ts +6 -6
  275. package/dist/core/store/item-mutation-precondition.d.ts +11 -0
  276. package/dist/core/store/item-mutation-precondition.js +2 -0
  277. package/dist/core/store/item-store.d.ts +123 -123
  278. package/dist/core/store/item-store.js +1 -1
  279. package/dist/core/store/paths.d.ts +27 -27
  280. package/dist/core/store/settings-concurrency.d.ts +1 -1
  281. package/dist/core/store/settings-read-cache.d.ts +11 -11
  282. package/dist/core/store/settings-validator.d.ts +117 -117
  283. package/dist/core/store/settings.d.ts +84 -84
  284. package/dist/core/store/sqlite-runtime.d.ts +2 -2
  285. package/dist/core/store/tracker-preflight.d.ts +3 -3
  286. package/dist/core/telemetry/consent.d.ts +1 -1
  287. package/dist/core/telemetry/observability.d.ts +16 -16
  288. package/dist/core/telemetry/policy.d.ts +7 -7
  289. package/dist/core/telemetry/read-sampling.d.ts +1 -1
  290. package/dist/core/telemetry/runtime.d.ts +275 -275
  291. package/dist/core/test/background-runs.d.ts +123 -123
  292. package/dist/core/test/item-test-run-tracking.d.ts +10 -10
  293. package/dist/core/test/run-selectors.d.ts +12 -12
  294. package/dist/core/validate/estimate-defaults.d.ts +3 -3
  295. package/dist/core/validate/fix-planning.d.ts +36 -36
  296. package/dist/core/validate/linked-artifact-reference.d.ts +1 -1
  297. package/dist/core/validate/missing-by-type.d.ts +3 -3
  298. package/dist/core/validate/missing-link-owners.d.ts +17 -17
  299. package/dist/core/validate/stale-file-classification.d.ts +6 -6
  300. package/dist/mcp/http-server.d.ts +26 -26
  301. package/dist/mcp/legacy-adapter.d.ts +18 -18
  302. package/dist/mcp/runtime-capabilities.d.ts +18 -18
  303. package/dist/mcp/server.d.ts +73 -73
  304. package/dist/mcp/server.js +1 -1
  305. package/dist/mcp/tool-definitions.d.ts +27 -27
  306. package/dist/mcp/tool-definitions.js +1 -1
  307. package/dist/sdk/actionability.d.ts +1 -1
  308. package/dist/sdk/agent/closed-domain-contracts.d.ts +11 -11
  309. package/dist/sdk/agent/command-recovery.d.ts +5 -5
  310. package/dist/sdk/agent/command-suggestions.d.ts +4 -4
  311. package/dist/sdk/agent/create-option-policy.d.ts +2 -2
  312. package/dist/sdk/agent/identity-config.d.ts +18 -18
  313. package/dist/sdk/agent/item-addressing.d.ts +6 -6
  314. package/dist/sdk/agent/refusal-closure-census.d.ts +26 -26
  315. package/dist/sdk/agent/refusal-closure.d.ts +22 -22
  316. package/dist/sdk/agent/refusal-corpus-contracts.d.ts +26 -26
  317. package/dist/sdk/agent/refusal-reachability.d.ts +65 -65
  318. package/dist/sdk/agent/subcommand-recovery.d.ts +20 -20
  319. package/dist/sdk/agent/task-transcript-contracts.d.ts +18 -18
  320. package/dist/sdk/agent/tracker-preflight-contracts.d.ts +21 -21
  321. package/dist/sdk/agent-capability-contracts.d.ts +41 -41
  322. package/dist/sdk/agent-session-context.d.ts +1 -1
  323. package/dist/sdk/annotations.d.ts +74 -74
  324. package/dist/sdk/author-attribution.d.ts +47 -47
  325. package/dist/sdk/authoring.d.ts +9 -9
  326. package/dist/sdk/cli-bootstrap.d.ts +65 -65
  327. package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +56 -56
  328. package/dist/sdk/cli-contracts/agent-output-contracts.js +1 -1
  329. package/dist/sdk/cli-contracts/bootstrap-command-scanner.d.ts +6 -6
  330. package/dist/sdk/cli-contracts/command-aliases.d.ts +19 -19
  331. package/dist/sdk/cli-contracts/command-exit-contracts.d.ts +66 -66
  332. package/dist/sdk/cli-contracts/commander-mutation-options.d.ts +7 -7
  333. package/dist/sdk/cli-contracts/commander-types.d.ts +18 -18
  334. package/dist/sdk/cli-contracts/completeness.d.ts +14 -14
  335. package/dist/sdk/cli-contracts/enum-contracts.d.ts +28 -28
  336. package/dist/sdk/cli-contracts/flag-contracts.d.ts +114 -112
  337. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  338. package/dist/sdk/cli-contracts/flag-lexicon-contracts.d.ts +27 -27
  339. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
  340. package/dist/sdk/cli-contracts/grammar-contracts.d.ts +61 -61
  341. package/dist/sdk/cli-contracts/registration-helpers.d.ts +57 -57
  342. package/dist/sdk/cli-contracts/registration-helpers.js +1 -1
  343. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +250 -250
  344. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
  345. package/dist/sdk/cli-contracts/schemas/assurance-definition.d.ts +678 -678
  346. package/dist/sdk/cli-contracts/string-lists.d.ts +1 -1
  347. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +564 -564
  348. package/dist/sdk/cli-contracts/tool-parameter-tables.d.ts +13 -13
  349. package/dist/sdk/cli-contracts/tool-schema.d.ts +54 -54
  350. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  351. package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +20 -20
  352. package/dist/sdk/cli-contracts.d.ts +15 -15
  353. package/dist/sdk/cli-program.d.ts +1 -1
  354. package/dist/sdk/cli-program.js +1 -1
  355. package/dist/sdk/command-line.d.ts +3 -3
  356. package/dist/sdk/comments.d.ts +24 -24
  357. package/dist/sdk/compile-cache.d.ts +4 -4
  358. package/dist/sdk/completion/bash.d.ts +1 -1
  359. package/dist/sdk/completion/fish.d.ts +1 -1
  360. package/dist/sdk/completion/shared.d.ts +74 -74
  361. package/dist/sdk/completion/zsh.d.ts +1 -1
  362. package/dist/sdk/completion.d.ts +3 -3
  363. package/dist/sdk/compose.d.ts +94 -94
  364. package/dist/sdk/config.d.ts +105 -105
  365. package/dist/sdk/context/recency.d.ts +1 -1
  366. package/dist/sdk/context/semantic-session-attribution.d.ts +23 -23
  367. package/dist/sdk/context/usage-egress.d.ts +1 -1
  368. package/dist/sdk/context/usage-ledger.d.ts +18 -18
  369. package/dist/sdk/context-intent-contracts.d.ts +37 -37
  370. package/dist/sdk/context-intent-contracts.js +1 -1
  371. package/dist/sdk/context-intent-runtime.d.ts +10 -10
  372. package/dist/sdk/context-packing.d.ts +44 -44
  373. package/dist/sdk/context-relevance.d.ts +110 -110
  374. package/dist/sdk/context-signal-store.d.ts +52 -52
  375. package/dist/sdk/context-usage.d.ts +78 -78
  376. package/dist/sdk/contracts.d.ts +2 -1
  377. package/dist/sdk/contracts.js +1 -1
  378. package/dist/sdk/core-governance.d.ts +5 -5
  379. package/dist/sdk/core.d.ts +9 -8
  380. package/dist/sdk/core.js +1 -1
  381. package/dist/sdk/corpus-shape.d.ts +60 -60
  382. package/dist/sdk/define.d.ts +36 -36
  383. package/dist/sdk/dependencies.d.ts +70 -70
  384. package/dist/sdk/dependency-flag-validation.d.ts +17 -17
  385. package/dist/sdk/dependency-provenance.d.ts +22 -22
  386. package/dist/sdk/docs.d.ts +17 -17
  387. package/dist/sdk/duplicates.d.ts +14 -14
  388. package/dist/sdk/environment/agent-environment.d.ts +118 -118
  389. package/dist/sdk/environment/host-environment-errors.d.ts +1 -1
  390. package/dist/sdk/environment/project-runtime-compatibility.d.ts +42 -40
  391. package/dist/sdk/environment/project-runtime-compatibility.js +2 -2
  392. package/dist/sdk/environment/source-context.d.ts +4 -4
  393. package/dist/sdk/environment/tracker-preflight.d.ts +1 -1
  394. package/dist/sdk/error-code-catalog.d.ts +33 -33
  395. package/dist/sdk/error-runtime.d.ts +5 -5
  396. package/dist/sdk/errors.d.ts +17 -17
  397. package/dist/sdk/eval.d.ts +27 -27
  398. package/dist/sdk/extension/author-manifest.d.ts +9 -9
  399. package/dist/sdk/extension/bundled-catalog.d.ts +18 -18
  400. package/dist/sdk/extension/concurrency.d.ts +1 -1
  401. package/dist/sdk/extension/copy-scope.d.ts +1 -1
  402. package/dist/sdk/extension/custom-field-collisions.d.ts +1 -1
  403. package/dist/sdk/extension/describe.d.ts +21 -21
  404. package/dist/sdk/extension/doctor.d.ts +46 -46
  405. package/dist/sdk/extension/install-plan.d.ts +32 -32
  406. package/dist/sdk/extension/install-receipts.d.ts +4 -4
  407. package/dist/sdk/extension/install-runtime.d.ts +12 -12
  408. package/dist/sdk/extension/install-snapshot.d.ts +10 -10
  409. package/dist/sdk/extension/install-sources.d.ts +106 -106
  410. package/dist/sdk/extension/managed-state.d.ts +42 -42
  411. package/dist/sdk/extension/managed-update-status.d.ts +1 -1
  412. package/dist/sdk/extension/migrations.d.ts +48 -48
  413. package/dist/sdk/extension/output-ownership.d.ts +19 -19
  414. package/dist/sdk/extension/runtime-summary.d.ts +7 -7
  415. package/dist/sdk/extension/scaffold.d.ts +15 -15
  416. package/dist/sdk/extension/shared.d.ts +16 -16
  417. package/dist/sdk/extension/source-resolution.d.ts +16 -16
  418. package/dist/sdk/extension/static-inventory.d.ts +23 -23
  419. package/dist/sdk/extension/update-check.d.ts +9 -9
  420. package/dist/sdk/extension-command-context.d.ts +1 -1
  421. package/dist/sdk/extension-contracts.d.ts +10 -10
  422. package/dist/sdk/extension.d.ts +221 -221
  423. package/dist/sdk/files.d.ts +101 -101
  424. package/dist/sdk/flag-invocation-contracts.d.ts +25 -25
  425. package/dist/sdk/flag-invocation-contracts.js +1 -1
  426. package/dist/sdk/generated/generated-error-code-catalog-part-1.d.ts +1 -1
  427. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  428. package/dist/sdk/generated/generated-error-code-catalog-part-2.d.ts +1 -1
  429. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  430. package/dist/sdk/generated-error-code-catalog.d.ts +1 -1
  431. package/dist/sdk/governance/artifact-ledgers.d.ts +19 -19
  432. package/dist/sdk/governance/assurance-action-contracts.d.ts +1 -1
  433. package/dist/sdk/governance/assurance-action.d.ts +46 -46
  434. package/dist/sdk/governance/assurance-mutation-error.d.ts +20 -20
  435. package/dist/sdk/governance/assurance-presets.d.ts +25 -25
  436. package/dist/sdk/governance/assurance-runtime.d.ts +10 -10
  437. package/dist/sdk/governance/assurance.d.ts +204 -204
  438. package/dist/sdk/governance/boundary-fixtures.d.ts +32 -32
  439. package/dist/sdk/governance/closure-timestamps.d.ts +10 -10
  440. package/dist/sdk/governance/coverage-assurance.d.ts +7 -7
  441. package/dist/sdk/governance/defect-recurrence-coverage.d.ts +40 -40
  442. package/dist/sdk/governance/defect-recurrence-graph.d.ts +11 -11
  443. package/dist/sdk/governance/defect-recurrence-signals.d.ts +1 -1
  444. package/dist/sdk/governance/defect-recurrence.d.ts +97 -97
  445. package/dist/sdk/governance/extension-host-version.d.ts +9 -9
  446. package/dist/sdk/governance/gc.d.ts +26 -26
  447. package/dist/sdk/governance/health-merge-evidence.d.ts +8 -8
  448. package/dist/sdk/governance/health.d.ts +172 -172
  449. package/dist/sdk/governance/health.js +1 -1
  450. package/dist/sdk/governance/hierarchy-validation.d.ts +16 -16
  451. package/dist/sdk/governance/linked-file-report.d.ts +15 -15
  452. package/dist/sdk/governance/merge-receipt-history.d.ts +24 -24
  453. package/dist/sdk/governance/provenance-health.d.ts +35 -35
  454. package/dist/sdk/governance/reindex.d.ts +102 -102
  455. package/dist/sdk/governance/reliability.d.ts +29 -29
  456. package/dist/sdk/governance/stale-work.d.ts +13 -13
  457. package/dist/sdk/governance/status-role-diagnostics.d.ts +8 -8
  458. package/dist/sdk/governance/storage-integrity.d.ts +28 -28
  459. package/dist/sdk/governance/tracked-runtime-cache.d.ts +7 -7
  460. package/dist/sdk/governance/upgrade.d.ts +77 -77
  461. package/dist/sdk/governance/validate-history-drift.d.ts +3 -3
  462. package/dist/sdk/governance/validate-item-reader.d.ts +9 -9
  463. package/dist/sdk/governance/validate-normalization.d.ts +4 -4
  464. package/dist/sdk/governance/validate.d.ts +176 -176
  465. package/dist/sdk/governance/validate.js +1 -1
  466. package/dist/sdk/governance/workflow-completeness.d.ts +15 -15
  467. package/dist/sdk/governance/workflow-policy.d.ts +18 -18
  468. package/dist/sdk/governance/workspace-position.d.ts +40 -40
  469. package/dist/sdk/governance.d.ts +2 -2
  470. package/dist/sdk/graph/adapter.d.ts +45 -45
  471. package/dist/sdk/graph/analytics.d.ts +36 -36
  472. package/dist/sdk/graph/assembly.d.ts +51 -51
  473. package/dist/sdk/graph/cache.d.ts +19 -19
  474. package/dist/sdk/graph/cardinality-integrity.d.ts +4 -4
  475. package/dist/sdk/graph/centrality.d.ts +20 -20
  476. package/dist/sdk/graph/conformance.d.ts +21 -21
  477. package/dist/sdk/graph/deadline-scheduling.d.ts +30 -30
  478. package/dist/sdk/graph/durable-cache.d.ts +22 -22
  479. package/dist/sdk/graph/governance-contracts.d.ts +1 -1
  480. package/dist/sdk/graph/governance.d.ts +92 -92
  481. package/dist/sdk/graph/hierarchy-integrity.d.ts +32 -32
  482. package/dist/sdk/graph/index.d.ts +15 -15
  483. package/dist/sdk/graph/lifecycle-coverage.d.ts +12 -12
  484. package/dist/sdk/graph/mutation-advisory.d.ts +15 -15
  485. package/dist/sdk/graph/query-contracts.d.ts +6 -6
  486. package/dist/sdk/graph/remediation.d.ts +15 -15
  487. package/dist/sdk/graph/run.d.ts +203 -203
  488. package/dist/sdk/graph/scheduling.d.ts +21 -21
  489. package/dist/sdk/graph/traversal.d.ts +18 -18
  490. package/dist/sdk/graph/workspace-relationship-kind-registry.d.ts +1 -1
  491. package/dist/sdk/guide-topics.d.ts +19 -19
  492. package/dist/sdk/guide-topics.js +1 -1
  493. package/dist/sdk/guide.d.ts +43 -43
  494. package/dist/sdk/history/attestation-command.d.ts +8 -8
  495. package/dist/sdk/history/attestation-contract.d.ts +43 -43
  496. package/dist/sdk/history/attestation-scan.d.ts +4 -4
  497. package/dist/sdk/history/attestation.d.ts +4 -4
  498. package/dist/sdk/history/maintenance.d.ts +25 -25
  499. package/dist/sdk/history/salvage.d.ts +19 -19
  500. package/dist/sdk/history/subject.d.ts +8 -8
  501. package/dist/sdk/history-analytics.d.ts +64 -64
  502. package/dist/sdk/history-compact.d.ts +67 -67
  503. package/dist/sdk/history-mcp.d.ts +7 -7
  504. package/dist/sdk/history-provenance.d.ts +40 -40
  505. package/dist/sdk/history-read.d.ts +24 -24
  506. package/dist/sdk/history-redact.d.ts +68 -68
  507. package/dist/sdk/history-repair.d.ts +92 -92
  508. package/dist/sdk/improvement-ledger-validation.d.ts +1 -1
  509. package/dist/sdk/improvement-ledger.d.ts +62 -62
  510. package/dist/sdk/index.d.ts +70 -69
  511. package/dist/sdk/index.js +1 -1
  512. package/dist/sdk/init-agent-guidance.d.ts +68 -68
  513. package/dist/sdk/init.d.ts +117 -117
  514. package/dist/sdk/invocation-author.d.ts +1 -1
  515. package/dist/sdk/item-children.d.ts +15 -15
  516. package/dist/sdk/item-metadata-index.d.ts +2 -2
  517. package/dist/sdk/item-schedule.d.ts +9 -9
  518. package/dist/sdk/item-transaction.d.ts +139 -76
  519. package/dist/sdk/item-transaction.js +1 -1
  520. package/dist/sdk/learnings.d.ts +23 -23
  521. package/dist/sdk/lifecycle/append.d.ts +8 -8
  522. package/dist/sdk/lifecycle/claim.d.ts +53 -39
  523. package/dist/sdk/lifecycle/claim.js +1 -1
  524. package/dist/sdk/lifecycle/close-many.d.ts +71 -71
  525. package/dist/sdk/lifecycle/close.d.ts +18 -24
  526. package/dist/sdk/lifecycle/close.js +1 -1
  527. package/dist/sdk/lifecycle/copy.d.ts +10 -10
  528. package/dist/sdk/lifecycle/core-field-recovery.d.ts +1 -1
  529. package/dist/sdk/lifecycle/core-item-fields.d.ts +6 -0
  530. package/dist/sdk/lifecycle/core-item-fields.js +2 -0
  531. package/dist/sdk/lifecycle/create.d.ts +88 -88
  532. package/dist/sdk/lifecycle/delete.d.ts +15 -15
  533. package/dist/sdk/lifecycle/event-validation-messages.d.ts +1 -1
  534. package/dist/sdk/lifecycle/focus.d.ts +6 -6
  535. package/dist/sdk/lifecycle/hierarchy-mutation-lock.d.ts +6 -6
  536. package/dist/sdk/lifecycle/legacy-none-tokens.d.ts +35 -35
  537. package/dist/sdk/lifecycle/lifecycle-transitions.d.ts +3 -3
  538. package/dist/sdk/lifecycle/mcp-actions.d.ts +10 -10
  539. package/dist/sdk/lifecycle/mcp-actions.js +1 -1
  540. package/dist/sdk/lifecycle/metadata-normalizers.d.ts +4 -4
  541. package/dist/sdk/lifecycle/mutation-command-options.d.ts +58 -58
  542. package/dist/sdk/lifecycle/mutation-facet-contracts.d.ts +1 -1
  543. package/dist/sdk/lifecycle/mutation-option-validation.d.ts +2 -0
  544. package/dist/sdk/lifecycle/mutation-option-validation.js +2 -0
  545. package/dist/sdk/lifecycle/plan-mutation-receipt.d.ts +24 -24
  546. package/dist/sdk/lifecycle/plan.d.ts +127 -127
  547. package/dist/sdk/lifecycle/recurrence-parsers.d.ts +5 -5
  548. package/dist/sdk/lifecycle/release-handoff.d.ts +12 -0
  549. package/dist/sdk/lifecycle/release-handoff.js +2 -0
  550. package/dist/sdk/lifecycle/reopen.d.ts +15 -15
  551. package/dist/sdk/lifecycle/repeatable-metadata-parsers.d.ts +7 -7
  552. package/dist/sdk/lifecycle/restore.d.ts +34 -34
  553. package/dist/sdk/lifecycle/restore.js +1 -1
  554. package/dist/sdk/lifecycle/shared-unset-fields.d.ts +20 -20
  555. package/dist/sdk/lifecycle/structured-mutation-plan.d.ts +33 -0
  556. package/dist/sdk/lifecycle/structured-mutation-plan.js +2 -0
  557. package/dist/sdk/lifecycle/task-composition.d.ts +9 -9
  558. package/dist/sdk/lifecycle/task-composition.js +1 -1
  559. package/dist/sdk/lifecycle/update-many.d.ts +61 -61
  560. package/dist/sdk/lifecycle/update.d.ts +113 -121
  561. package/dist/sdk/lifecycle/update.js +1 -1
  562. package/dist/sdk/lifecycle/workflow-transition.d.ts +13 -0
  563. package/dist/sdk/lifecycle/workflow-transition.js +2 -0
  564. package/dist/sdk/lifecycle-completion.d.ts +14 -14
  565. package/dist/sdk/lifecycle-policy.d.ts +42 -32
  566. package/dist/sdk/lifecycle-policy.js +1 -1
  567. package/dist/sdk/linked-artifacts.d.ts +58 -58
  568. package/dist/sdk/mcp/apps.d.ts +28 -28
  569. package/dist/sdk/mcp/authorization.d.ts +66 -66
  570. package/dist/sdk/mcp/discovery.d.ts +67 -67
  571. package/dist/sdk/mcp/interactions.d.ts +49 -49
  572. package/dist/sdk/mcp/protocol.d.ts +63 -63
  573. package/dist/sdk/mcp/skills.d.ts +62 -62
  574. package/dist/sdk/mcp/subscriptions.d.ts +26 -26
  575. package/dist/sdk/mcp/tasks.d.ts +51 -51
  576. package/dist/sdk/mcp/transport.d.ts +17 -17
  577. package/dist/sdk/merge/abandoned-receipts.d.ts +8 -8
  578. package/dist/sdk/merge/driver.d.ts +38 -38
  579. package/dist/sdk/merge/index.d.ts +5 -5
  580. package/dist/sdk/merge/install.d.ts +48 -48
  581. package/dist/sdk/merge/receipt-file-boundary.d.ts +6 -6
  582. package/dist/sdk/merge/receipt-operation.d.ts +6 -6
  583. package/dist/sdk/merge/receipt-schema.d.ts +11 -11
  584. package/dist/sdk/merge/receipts.d.ts +111 -111
  585. package/dist/sdk/merge/reconcile.d.ts +20 -20
  586. package/dist/sdk/merge/three-way.d.ts +50 -50
  587. package/dist/sdk/merge/three-way.js +2 -2
  588. package/dist/sdk/merge/worktree-config.d.ts +3 -3
  589. package/dist/sdk/mutation-events.d.ts +62 -62
  590. package/dist/sdk/mutation-guard.d.ts +134 -134
  591. package/dist/sdk/notes.d.ts +28 -28
  592. package/dist/sdk/output/table-rows.d.ts +6 -6
  593. package/dist/sdk/output-contracts.d.ts +26 -26
  594. package/dist/sdk/output-projection.d.ts +108 -108
  595. package/dist/sdk/output-token-accounting.d.ts +18 -18
  596. package/dist/sdk/output.d.ts +18 -18
  597. package/dist/sdk/ownership-source.d.ts +1 -1
  598. package/dist/sdk/package-import-adapters.d.ts +51 -51
  599. package/dist/sdk/package-migrations.d.ts +3 -3
  600. package/dist/sdk/package-runtime-options.d.ts +3 -3
  601. package/dist/sdk/pagination.d.ts +28 -28
  602. package/dist/sdk/pagination.js +1 -1
  603. package/dist/sdk/profile.d.ts +72 -72
  604. package/dist/sdk/provenance.d.ts +37 -37
  605. package/dist/sdk/public-surface.json +1 -1
  606. package/dist/sdk/query/activity.d.ts +84 -84
  607. package/dist/sdk/query/aggregate.d.ts +109 -109
  608. package/dist/sdk/query/calendar.d.ts +95 -95
  609. package/dist/sdk/query/complete-list.d.ts +35 -35
  610. package/dist/sdk/query/context.d.ts +300 -300
  611. package/dist/sdk/query/duplicate-candidates.d.ts +3 -3
  612. package/dist/sdk/query/get.d.ts +54 -54
  613. package/dist/sdk/query/history.d.ts +38 -38
  614. package/dist/sdk/query/item-filter-options.d.ts +41 -41
  615. package/dist/sdk/query/light-metadata.d.ts +1 -1
  616. package/dist/sdk/query/list-filter-shared.d.ts +4 -4
  617. package/dist/sdk/query/list.d.ts +167 -167
  618. package/dist/sdk/query/list.js +1 -1
  619. package/dist/sdk/query/multi-value-filters.d.ts +6 -6
  620. package/dist/sdk/query/next-ready-budget.d.ts +8 -8
  621. package/dist/sdk/query/next.d.ts +94 -94
  622. package/dist/sdk/query/parsers.d.ts +3 -3
  623. package/dist/sdk/query/projection-contracts.d.ts +18 -18
  624. package/dist/sdk/query/search/corpus.d.ts +15 -15
  625. package/dist/sdk/query/search/filters.d.ts +15 -15
  626. package/dist/sdk/query/search/input.d.ts +8 -8
  627. package/dist/sdk/query/search/lexical.d.ts +10 -10
  628. package/dist/sdk/query/search/response.d.ts +22 -22
  629. package/dist/sdk/query/search/semantic.d.ts +133 -133
  630. package/dist/sdk/query/search/types.d.ts +65 -65
  631. package/dist/sdk/query/search-contracts.d.ts +53 -53
  632. package/dist/sdk/query/search-pagination.d.ts +21 -21
  633. package/dist/sdk/query/search-rendering.d.ts +30 -30
  634. package/dist/sdk/query/search.d.ts +60 -60
  635. package/dist/sdk/query/workspace-contracts.d.ts +2 -2
  636. package/dist/sdk/query.d.ts +6 -6
  637. package/dist/sdk/read-output/continuation.d.ts +11 -11
  638. package/dist/sdk/read-output/extension.d.ts +3 -3
  639. package/dist/sdk/read-output/options.d.ts +7 -7
  640. package/dist/sdk/read-output/provenance.d.ts +6 -6
  641. package/dist/sdk/read-output-budget.d.ts +11 -11
  642. package/dist/sdk/read-output-budget.js +1 -1
  643. package/dist/sdk/read-output-contracts.d.ts +112 -112
  644. package/dist/sdk/read-output-contracts.js +1 -1
  645. package/dist/sdk/read-output-rows.d.ts +15 -15
  646. package/dist/sdk/read-output-session.d.ts +29 -29
  647. package/dist/sdk/relationship-analytics.d.ts +46 -46
  648. package/dist/sdk/relationship-context.d.ts +48 -48
  649. package/dist/sdk/relationship-history.d.ts +59 -59
  650. package/dist/sdk/relationship-kinds/contract.d.ts +18 -18
  651. package/dist/sdk/relationship-migration.d.ts +14 -14
  652. package/dist/sdk/relationships.d.ts +46 -46
  653. package/dist/sdk/reproducibility/process.d.ts +9 -9
  654. package/dist/sdk/runtime/actions.d.ts +1 -1
  655. package/dist/sdk/runtime/context.d.ts +15 -15
  656. package/dist/sdk/runtime/schema-preview.d.ts +1 -1
  657. package/dist/sdk/runtime/schema.d.ts +1 -1
  658. package/dist/sdk/runtime-action-aliases.d.ts +3 -3
  659. package/dist/sdk/runtime-extended-actions.d.ts +9 -9
  660. package/dist/sdk/runtime-input.d.ts +29 -29
  661. package/dist/sdk/runtime-input.js +1 -1
  662. package/dist/sdk/runtime-primitives.d.ts +53 -53
  663. package/dist/sdk/runtime-primitives.js +1 -1
  664. package/dist/sdk/runtime-public-contracts.d.ts +46 -46
  665. package/dist/sdk/runtime-stats-options.d.ts +1 -1
  666. package/dist/sdk/runtime.d.ts +374 -374
  667. package/dist/sdk/runtime.js +1 -1
  668. package/dist/sdk/scheduling-shortcuts.d.ts +19 -19
  669. package/dist/sdk/schema-migration.d.ts +79 -79
  670. package/dist/sdk/schema.d.ts +224 -224
  671. package/dist/sdk/search-refresh-worker.d.ts +1 -1
  672. package/dist/sdk/similarity-scoring.d.ts +10 -10
  673. package/dist/sdk/similarity.d.ts +73 -73
  674. package/dist/sdk/start-task-status.d.ts +1 -1
  675. package/dist/sdk/stats.d.ts +72 -72
  676. package/dist/sdk/structured-mutations.d.ts +64 -13
  677. package/dist/sdk/structured-mutations.js +1 -1
  678. package/dist/sdk/telemetry-flush.d.ts +1 -1
  679. package/dist/sdk/telemetry.d.ts +32 -32
  680. package/dist/sdk/templates.d.ts +35 -35
  681. package/dist/sdk/test/batch.d.ts +50 -50
  682. package/dist/sdk/test/command-args.d.ts +2 -2
  683. package/dist/sdk/test/entry.d.ts +4 -4
  684. package/dist/sdk/test/execution-receipts.d.ts +5 -5
  685. package/dist/sdk/test/execution.d.ts +247 -247
  686. package/dist/sdk/test/json-path.d.ts +4 -4
  687. package/dist/sdk/test/linked-command-detection.d.ts +36 -36
  688. package/dist/sdk/test/measurements.d.ts +10 -10
  689. package/dist/sdk/test/parsers.d.ts +18 -18
  690. package/dist/sdk/test/prerequisites.d.ts +3 -3
  691. package/dist/sdk/test/runs.d.ts +43 -43
  692. package/dist/sdk/test/trust.d.ts +15 -15
  693. package/dist/sdk/test/update.d.ts +23 -23
  694. package/dist/sdk/test/workspace-snapshot.d.ts +1 -1
  695. package/dist/sdk/testing.d.ts +248 -248
  696. package/dist/sdk/traceability/runtime-files-lookup.d.ts +1 -1
  697. package/dist/sdk/traceability/source-traceability.d.ts +50 -50
  698. package/dist/sdk/workspace-contracts-cache.d.ts +2 -2
  699. package/dist/sdk/workspace-contracts.d.ts +20 -20
  700. package/dist/sdk/workspace-memory.d.ts +42 -42
  701. package/dist/sdk/workspace-recipe.d.ts +9 -9
  702. package/dist/sdk/workspace-snapshot.d.ts +60 -60
  703. package/dist/sdk/workspace-transaction-gc.d.ts +17 -17
  704. package/dist/sdk/workspace-transaction.d.ts +26 -26
  705. package/dist/sdk/workspace-transaction.js +2 -2
  706. package/dist/sdk/workspace.d.ts +9 -9
  707. package/dist/types.d.ts +540 -540
  708. package/docs/AGENT_GUIDE.md +33 -4
  709. package/docs/CLOSE_EVIDENCE_RECOVERY.md +16 -7
  710. package/docs/COMMANDS.md +96 -12
  711. package/docs/ECOSYSTEM_PLANNING_REVIEW.md +5 -1
  712. package/docs/EXTENSIONS.md +1 -1
  713. package/docs/EXTENSION_AUTHOR_CONTRACTS.md +18 -4
  714. package/docs/LINKED_TEST_EDITS.md +15 -0
  715. package/docs/RELEASING.md +2 -0
  716. package/docs/SDK.md +114 -2
  717. package/docs/TESTING.md +36 -1
  718. package/docs/generated/FLAG_LEXICON_BUDGETS.md +1 -1
  719. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +17 -3
  720. package/marketplace.json +1 -1
  721. package/package.json +4 -1
  722. package/packages/pm-beads/package.json +1 -1
  723. package/packages/pm-calendar/package.json +1 -1
  724. package/packages/pm-command-kit/package.json +1 -1
  725. package/packages/pm-digital-twin/package.json +1 -1
  726. package/packages/pm-governance-audit/package.json +1 -1
  727. package/packages/pm-guide-shell/package.json +1 -1
  728. package/packages/pm-kanban/package.json +1 -1
  729. package/packages/pm-lifecycle-hooks/package.json +1 -1
  730. package/packages/pm-linked-test-adapters/package.json +1 -1
  731. package/packages/pm-search-advanced/package.json +1 -1
  732. package/packages/pm-templates/package.json +1 -1
  733. package/packages/pm-todos/package.json +1 -1
  734. package/packages/pm-vcs/package.json +1 -1
  735. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  736. package/plugins/pm-claude/package.json +1 -1
  737. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  738. package/plugins/pm-codex/package.json +1 -1
  739. package/plugins/pm-codex/plugin.json +1 -1
  740. package/runtime-dependencies.json +1 -1
  741. package/scripts/finalize-build.mjs +9 -3
  742. package/dist/cli-bundle/chunks/chunk-66BZVFIK.js +0 -6
  743. package/dist/cli-bundle/chunks/chunk-IDEHMKYZ.js +0 -235
  744. package/dist/cli-bundle/chunks/chunk-LOSRTNNP.js +0 -2
  745. package/dist/cli-bundle/chunks/chunk-PP3BVMFL.js +0 -30
  746. package/dist/cli-bundle/chunks/chunk-UNQZGMJL.js +0 -20
  747. package/dist/cli-bundle/chunks/chunk-YXRAYL7H.js +0 -2
  748. package/dist/cli-bundle/chunks/register-mutation-TNRHNK4N.js +0 -20
  749. package/dist/cli-bundle/focused-chunks/chunk-23ACMPGB.js +0 -2
  750. package/dist/cli-bundle/focused-chunks/chunk-JDVZF75H.js +0 -165
  751. package/dist/cli-bundle/focused-chunks/chunk-LKWDWER4.js +0 -20
  752. package/dist/cli-bundle/focused-chunks/chunk-WIXZF5SS.js +0 -26
  753. package/docs/ecosystem-review-2026-09-28.json +0 -1
@@ -1,97 +1,111 @@
1
1
  import { type GlobalOptions } from "../runtime-primitives.js";
2
- import { type NextRecommendation, type NextOptions } from "../query/next.js";
2
+ import { type NextRecommendation,type NextOptions } from "../query/next.js";
3
3
  /** Stable warning/error code for an exhausted atomic next-work walk. */
4
4
  export declare const NO_AVAILABLE_NEXT_ITEM_CODE = "no_available_next_item";
5
5
  /** Documents the claim result payload exchanged by command, SDK, and package integrations. */
6
6
  export interface ClaimResult {
7
7
  /** Value that configures or reports item for this contract. */
8
- item: Record<string, unknown>;
8
+ item:Record<string,unknown>;
9
9
  /** Metadata fields changed by this claim; empty for an idempotent or skipped claim. */
10
- changed_fields?: string[];
10
+ changed_fields?:string[];
11
11
  /** Value that configures or reports claimed by for this contract. */
12
- claimed_by: string;
12
+ claimed_by:string;
13
13
  /** Value that configures or reports previous assignee for this contract. */
14
- previous_assignee: string | null;
14
+ previous_assignee:string | null;
15
15
  /** Value that configures or reports forced for this contract. */
16
- forced: boolean;
16
+ forced:boolean;
17
17
  /** Value that configures or reports skipped for this contract. */
18
- skipped?: boolean;
18
+ skipped?:boolean;
19
19
  /** Value that configures or reports warnings for this contract. */
20
- warnings?: string[];
20
+ warnings?:string[];
21
21
  }
22
22
  /** Result of atomically selecting and claiming the next caller-available item. */
23
23
  export interface ClaimNextAvailableResult extends ClaimResult {
24
24
  /** True when an actionable candidate was claimed. */
25
- available: true;
25
+ available:true;
26
26
  /** Value that configures or reports recommendation for this contract. */
27
- recommendation: NextRecommendation;
27
+ recommendation:NextRecommendation;
28
28
  /** Value that configures or reports attempts for this contract. */
29
- attempts: number;
29
+ attempts:number;
30
30
  }
31
31
  /** Non-error empty result returned when an if-available candidate walk is exhausted. */
32
32
  export interface ClaimNextUnavailableResult {
33
33
  /** Indicates that no candidate remained claimable. */
34
- available: false;
34
+ available:false;
35
35
  /** Empty item projection for a deliberately unavailable selection. */
36
- item: null;
36
+ item:null;
37
37
  /** Caller identity that attempted the selection. */
38
- claimed_by: string;
38
+ claimed_by:string;
39
39
  /** No previous owner exists for an empty selection. */
40
- previous_assignee: null;
40
+ previous_assignee:null;
41
41
  /** Whether forced selection was requested. */
42
- forced: boolean;
42
+ forced:boolean;
43
43
  /** Signals a deliberate non-error skip. */
44
- skipped: true;
44
+ skipped:true;
45
45
  /** No recommendation survived the bounded walk. */
46
- recommendation: null;
46
+ recommendation:null;
47
47
  /** Number of ranked candidates attempted. */
48
- attempts: number;
48
+ attempts:number;
49
49
  /** Stable machine-readable exhaustion warning. */
50
- warnings: [typeof NO_AVAILABLE_NEXT_ITEM_CODE];
50
+ warnings:[typeof NO_AVAILABLE_NEXT_ITEM_CODE];
51
51
  }
52
52
  /** Result of a successful or deliberately empty atomic next-work claim. */
53
53
  export type ClaimNextResult = ClaimNextAvailableResult | ClaimNextUnavailableResult;
54
54
  /** Returns whether a failed claim lost the atomic test-and-set race. */
55
- export declare function isAlreadyClaimedError(error: unknown): boolean;
56
- type ClaimRunner = (id: string, force: boolean, global: GlobalOptions, options: ClaimMutationOptions) => Promise<ClaimResult>;
55
+ export declare function isAlreadyClaimedError(error:unknown):boolean;
56
+ type ClaimRunner = (id:string,force:boolean,global:GlobalOptions,options:ClaimMutationOptions) => Promise<ClaimResult>;
57
57
  /** Documents the release result payload exchanged by command, SDK, and package integrations. */
58
58
  export interface ReleaseResult {
59
59
  /** Value that configures or reports item for this contract. */
60
- item: Record<string, unknown>;
60
+ item:Record<string,unknown>;
61
61
  /** Ownership fields actually removed, or an empty list for an unclaimed item. */
62
- changed_fields?: string[];
62
+ changed_fields?:string[];
63
63
  /** Value that configures or reports released by for this contract. */
64
- released_by: string;
64
+ released_by:string;
65
65
  /** Value that configures or reports previous assignee for this contract. */
66
- previous_assignee: string | null;
66
+ previous_assignee:string | null;
67
67
  /** Value that configures or reports forced for this contract. */
68
- forced: boolean;
68
+ forced:boolean;
69
69
  /** Stable handoff diagnostics shared by CLI and MCP consumers. */
70
- warnings?: string[];
70
+ warnings?:string[];
71
71
  /** Concrete recovery commands when releasing ownership leaves work in progress. */
72
- suggestions?: string[];
72
+ suggestions?:string[];
73
+ /** Evidence and queue transition recorded with the ownership release. */
74
+ handoff?:{
75
+ /** Lifecycle status observed under the item lock. */
76
+ from_status:string;
77
+ /** Project-defined queue receiving the unclaimed work. */
78
+ to_status:string;
79
+ /** Author-supplied evidence retained in the release history event. */
80
+ message:string;
81
+ };
73
82
  }
74
83
  /** Documents the claim mutation options payload exchanged by command, SDK, and package integrations. */
75
84
  export interface ClaimMutationOptions {
76
85
  /** Value that configures or reports author for this contract. */
77
- author?: string;
86
+ author?:string;
78
87
  /** Human-readable explanation suitable for logs and agent-facing output. */
79
- message?: string;
88
+ message?:string;
80
89
  /** Value that configures or reports if available for this contract. */
81
- ifAvailable?: boolean;
90
+ ifAvailable?:boolean;
82
91
  /** Maximum ranked candidates attempted by `claim --next`. */
83
- maxAttempts?: string | number;
92
+ maxAttempts?:string | number;
84
93
  }
85
94
  /** Documents the release mutation options payload exchanged by command, SDK, and package integrations. */
86
- export type ReleaseMutationOptions = ClaimMutationOptions;
95
+ export interface ReleaseMutationOptions extends ClaimMutationOptions {
96
+ /** Configured non-terminal queue to enter atomically with release. */
97
+ handoff?:string;
98
+ /** Pause composition, mutually exclusive with a handoff queue. */
99
+ pause?:boolean;
100
+ }
87
101
  /** Implements run claim for the public runtime surface of this module. */
88
- export declare function runClaim(id: string, force: boolean, global: GlobalOptions, options?: ClaimMutationOptions): Promise<ClaimResult>;
102
+ export declare function runClaim(id:string,force:boolean,global:GlobalOptions,options?:ClaimMutationOptions):Promise<ClaimResult>;
89
103
  /** Selects ranked actionable work and claims the first candidate still available under the item lock. Conflicts caused by parallel claimers advance to the next candidate instead of returning a thundering-herd failure. */
90
- export declare function runClaimNext(force: boolean, global: GlobalOptions, options?: ClaimMutationOptions, nextOptions?: NextOptions): Promise<ClaimNextResult>;
104
+ export declare function runClaimNext(force:boolean,global:GlobalOptions,options?:ClaimMutationOptions,nextOptions?:NextOptions):Promise<ClaimNextResult>;
91
105
  /** Parses the bounded candidate walk used by `claim --next`. */
92
- export declare function parseClaimNextAttempts(raw: string | number | undefined): number;
106
+ export declare function parseClaimNextAttempts(raw:string | number | undefined):number;
93
107
  /** Claims the first still-available row from a pre-ranked recommendation set. */
94
- export declare function claimNextFromRecommendations(recommendations: NextRecommendation[], force: boolean, global: GlobalOptions, options?: ClaimMutationOptions, claimRunner?: ClaimRunner): Promise<ClaimNextResult>;
108
+ export declare function claimNextFromRecommendations(recommendations:NextRecommendation[],force:boolean,global:GlobalOptions,options?:ClaimMutationOptions,claimRunner?:ClaimRunner):Promise<ClaimNextResult>;
95
109
  /** Implements run release for the public runtime surface of this module. */
96
- export declare function runRelease(id: string, force: boolean, global: GlobalOptions, options?: ReleaseMutationOptions): Promise<ReleaseResult>;
110
+ export declare function runRelease(id:string,force:boolean,global:GlobalOptions,options?:ReleaseMutationOptions):Promise<ReleaseResult>;
97
111
  export {};
@@ -1,2 +1,2 @@
1
- (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ce03100c-3a4f-5ce4-a216-a3fabcfc655e")}catch{}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{resolveRuntimeStatusRegistry,statusIsTerminal,EXIT_CODE,PmCliError,toItemRecord,mutateItem,resolvePmRoot,readSettings,resolveAuthor,resolveClaimPrincipal,normalizeStatusForRegistry}from"../runtime-primitives.js";import{wrapOwnershipConflict}from"../annotations.js";import{describeItemOwnershipConflict}from"../ownership-source.js";import{runNext}from"../query/next.js";import{recordClaimSemanticAttribution,recordReleaseSemanticAttribution}from"../context/semantic-session-attribution.js";const NO_AVAILABLE_NEXT_ITEM_CODE="no_available_next_item";function isAlreadyClaimedError(error){if(!(error instanceof Error)||error.name!=="PmCliError")return!1;const context=error.context;return typeof context=="object"&&context!==null&&"code"in context&&context.code==="already_claimed_by"}async function runClaim(id,force,global2,options={}){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot),statusRegistry=resolveRuntimeStatusRegistry(settings.schema),author=resolveAuthor(options.author,settings.author_default),claimPrincipal=resolveClaimPrincipal(author);let previousAssignee=null,skipped=!1;const mutationWarnings=[],result=await mutateItem({pmRoot,settings,id,op:"claim",author,message:options.message,force,skipNoop:!0,async mutate(document){const currentAssigneeText=document.metadata.assignee??"",currentClaimPrincipal=document.metadata.claim_principal?.trim()||currentAssigneeText;if(previousAssignee=currentAssigneeText.trim().length>0?currentAssigneeText:null,statusIsTerminal(document.metadata.status,statusRegistry)&&!force)throw new PmCliError(`Cannot claim terminal item ${document.metadata.id} without --force`,EXIT_CODE.CONFLICT);if(previousAssignee!==null&&currentClaimPrincipal!==claimPrincipal){if(options.ifAvailable===!0)return skipped=!0,mutationWarnings.push(`claim_skipped_held_by:${previousAssignee}`),{changedFields:[]};if(!force){const ownershipPhrase=await describeItemOwnershipConflict(pmRoot,document.metadata.id,currentAssigneeText);throw new PmCliError(`Item ${document.metadata.id} is already ${ownershipPhrase}. Use --force to take over, or --if-available to skip without failing.`,EXIT_CODE.CONFLICT,{code:"already_claimed_by",why:"Claim is an atomic test-and-set so parallel agents never proceed believing they own the same item.",nextSteps:["Run pm next to pick a different unclaimed item.","Re-run with --if-available to treat a held item as a no-op skip.","Re-run with --force only when taking over the item is coordinated."]})}mutationWarnings.push(`claim_takeover:${previousAssignee}->${author}`)}const ownership={assignee:author,claim_principal:claimPrincipal},changedFields=["assignee","claim_principal"].filter(field=>document.metadata[field]!==ownership[field]);return Object.assign(document.metadata,ownership),{changedFields,warnings:mutationWarnings}}});return skipped||await recordClaimSemanticAttribution({pmRoot,settings,principal:claimPrincipal,itemId:result.item.id}),{item:toItemRecord(result.item),changed_fields:result.changedFields,claimed_by:skipped&&previousAssignee!==null?previousAssignee:author,previous_assignee:previousAssignee,forced:force,...skipped?{skipped:!0}:{},...mutationWarnings.length>0?{warnings:mutationWarnings}:{}}}async function runClaimNext(force,global2,options={},nextOptions={}){const maxAttempts=parseClaimNextAttempts(options.maxAttempts),settings=await readSettings(resolvePmRoot(process.cwd(),global2.path)),claimOptions={...options,author:resolveAuthor(options.author,settings.author_default)},next=await runNext({...nextOptions,callerAuthor:claimOptions.author,limit:String(maxAttempts)},global2),recommendations=[next.recommended,...next.ready].filter(entry=>entry!==null).map(entry=>({...entry,reasons:"reasons"in entry?entry.reasons:["ranked ready candidate"]}));return claimNextFromRecommendations(recommendations.slice(0,maxAttempts),force,global2,claimOptions)}function parseClaimNextAttempts(raw){if(raw===void 0)return 10;const parsed=Number(raw);if(!Number.isSafeInteger(parsed)||parsed<1||parsed>100)throw new PmCliError("--max-attempts must be an integer from 1 to 100",EXIT_CODE.USAGE);return parsed}async function claimNextFromRecommendations(recommendations,force,global2,options={},claimRunner=runClaim){let attempts=0;for(const recommendation of recommendations){attempts+=1;try{const claimed=await claimRunner(recommendation.id,force,global2,options),result={...claimed,recommendation,attempts,available:!0};if(!claimed.skipped)return result}catch(error){if(!isAlreadyClaimedError(error))throw error}}if(options.ifAvailable===!0)return{available:!1,item:null,claimed_by:resolveAuthor(options.author,""),previous_assignee:null,forced:force,skipped:!0,recommendation:null,attempts,warnings:[NO_AVAILABLE_NEXT_ITEM_CODE]};const noCandidatesMatched=attempts===0;throw new PmCliError(noCandidatesMatched?"No actionable items matched the selection filters":"No actionable item remained available to claim",noCandidatesMatched?EXIT_CODE.NOT_FOUND:EXIT_CODE.CONFLICT,{code:NO_AVAILABLE_NEXT_ITEM_CODE,why:noCandidatesMatched?"No ready items matched the specified filters or selection criteria.":"Every ranked candidate was claimed by another agent before this atomic selection completed.",nextSteps:[noCandidatesMatched?"Verify the filters or run pm next to inspect all ready work.":"Run pm claim --next again to refresh the ranked candidate set."]})}async function runRelease(id,force,global2,options={}){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot),author=resolveAuthor(options.author,settings.author_default),claimPrincipal=resolveClaimPrincipal(author),ownershipReleaseBypass=options.ownershipReleaseBypass===!0;let previousAssignee=null,result;try{result=await mutateItem({pmRoot,settings,id,op:"release",author,message:options.message,force,bypassAssigneeConflict:ownershipReleaseBypass,mutate(document){return previousAssignee=document.metadata.assignee??null,!previousAssignee&&!document.metadata.claim_principal?{changedFields:[]}:(delete document.metadata.assignee,delete document.metadata.claim_principal,{changedFields:["assignee","claim_principal"]})}})}catch(error){wrapOwnershipConflict(error,{required:"For approved non-owner handoffs, prefer the ownership-release bypass before considering --force.",examples:['pm release pm-a1b2 --author "reviewer" --force'],nextSteps:["Use the package-provided ownership-release bypass for handoffs that only clear assignee metadata.","Use --force only when an explicit override is approved for broader ownership conflicts."]})}await recordReleaseSemanticAttribution({pmRoot,principal:claimPrincipal,itemId:result.item.id});const statusRegistry=resolveRuntimeStatusRegistry(settings.schema),stillInProgress=normalizeStatusForRegistry(result.item.status,statusRegistry)===normalizeStatusForRegistry(statusRegistry.in_progress_status,statusRegistry);return{item:toItemRecord(result.item),released_by:author,changed_fields:result.changedFields,previous_assignee:previousAssignee,forced:force,...stillInProgress?{warnings:["released_unclaimed_in_progress"],suggestions:[`${result.item.id} remains ${result.item.status} and unclaimed. If work is paused, run pm release ${result.item.id} --pause to move it to ${statusRegistry.open_status}.`]}:{}}}export{NO_AVAILABLE_NEXT_ITEM_CODE,claimNextFromRecommendations,isAlreadyClaimedError,parseClaimNextAttempts,runClaim,runClaimNext,runRelease};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ca9fb199-0de6-5eea-bed8-7afac49123bc")}catch{}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{resolveRuntimeStatusRegistry,statusIsTerminal,EXIT_CODE,PmCliError,toItemRecord,mutateItem,resolvePmRoot,readSettings,resolveAuthor,resolveClaimPrincipal,normalizeStatusForRegistry}from"../runtime-primitives.js";import{wrapOwnershipConflict}from"../annotations.js";import{describeItemOwnershipConflict}from"../ownership-source.js";import{applyReleaseHandoff,resolveReleaseHandoff}from"./release-handoff.js";import{runNext}from"../query/next.js";import{recordClaimSemanticAttribution,recordReleaseSemanticAttribution}from"../context/semantic-session-attribution.js";const NO_AVAILABLE_NEXT_ITEM_CODE="no_available_next_item";function isAlreadyClaimedError(error){if(!(error instanceof Error)||error.name!=="PmCliError")return!1;const context=error.context;return typeof context=="object"&&context!==null&&"code"in context&&context.code==="already_claimed_by"}async function runClaim(id,force,global2,options={}){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot),statusRegistry=resolveRuntimeStatusRegistry(settings.schema),author=resolveAuthor(options.author,settings.author_default),claimPrincipal=resolveClaimPrincipal(author);let previousAssignee=null,skipped=!1;const mutationWarnings=[],result=await mutateItem({pmRoot,settings,id,op:"claim",author,message:options.message,force,skipNoop:!0,async mutate(document){const currentAssigneeText=document.metadata.assignee??"",currentClaimPrincipal=document.metadata.claim_principal?.trim()||currentAssigneeText;if(previousAssignee=currentAssigneeText.trim().length>0?currentAssigneeText:null,statusIsTerminal(document.metadata.status,statusRegistry)&&!force)throw new PmCliError(`Cannot claim terminal item ${document.metadata.id} without --force`,EXIT_CODE.CONFLICT);if(previousAssignee!==null&&currentClaimPrincipal!==claimPrincipal){if(options.ifAvailable===!0)return skipped=!0,mutationWarnings.push(`claim_skipped_held_by:${previousAssignee}`),{changedFields:[]};if(!force){const ownershipPhrase=await describeItemOwnershipConflict(pmRoot,document.metadata.id,currentAssigneeText);throw new PmCliError(`Item ${document.metadata.id} is already ${ownershipPhrase}. Use --force to take over, or --if-available to skip without failing.`,EXIT_CODE.CONFLICT,{code:"already_claimed_by",why:"Claim is an atomic test-and-set so parallel agents never proceed believing they own the same item.",nextSteps:["Run pm next to pick a different unclaimed item.","Re-run with --if-available to treat a held item as a no-op skip.","Re-run with --force only when taking over the item is coordinated."]})}mutationWarnings.push(`claim_takeover:${previousAssignee}->${author}`)}const ownership={assignee:author,claim_principal:claimPrincipal},changedFields=["assignee","claim_principal"].filter(field=>document.metadata[field]!==ownership[field]);return Object.assign(document.metadata,ownership),{changedFields,warnings:mutationWarnings}}});return skipped||await recordClaimSemanticAttribution({pmRoot,settings,principal:claimPrincipal,itemId:result.item.id}),{item:toItemRecord(result.item),changed_fields:result.changedFields,claimed_by:skipped&&previousAssignee!==null?previousAssignee:author,previous_assignee:previousAssignee,forced:force,...skipped?{skipped:!0}:{},...mutationWarnings.length>0?{warnings:mutationWarnings}:{}}}async function runClaimNext(force,global2,options={},nextOptions={}){const maxAttempts=parseClaimNextAttempts(options.maxAttempts),settings=await readSettings(resolvePmRoot(process.cwd(),global2.path)),claimOptions={...options,author:resolveAuthor(options.author,settings.author_default)},next=await runNext({...nextOptions,callerAuthor:claimOptions.author,limit:String(maxAttempts)},global2),recommendations=[next.recommended,...next.ready].filter(entry=>entry!==null).map(entry=>({...entry,reasons:"reasons"in entry?entry.reasons:["ranked ready candidate"]}));return claimNextFromRecommendations(recommendations.slice(0,maxAttempts),force,global2,claimOptions)}function parseClaimNextAttempts(raw){if(raw===void 0)return 10;const parsed=Number(raw);if(!Number.isSafeInteger(parsed)||parsed<1||parsed>100)throw new PmCliError("--max-attempts must be an integer from 1 to 100",EXIT_CODE.USAGE);return parsed}async function claimNextFromRecommendations(recommendations,force,global2,options={},claimRunner=runClaim){let attempts=0;for(const recommendation of recommendations){attempts+=1;try{const claimed=await claimRunner(recommendation.id,force,global2,options),result={...claimed,recommendation,attempts,available:!0};if(!claimed.skipped)return result}catch(error){if(!isAlreadyClaimedError(error))throw error}}if(options.ifAvailable===!0)return{available:!1,item:null,claimed_by:resolveAuthor(options.author,""),previous_assignee:null,forced:force,skipped:!0,recommendation:null,attempts,warnings:[NO_AVAILABLE_NEXT_ITEM_CODE]};const noCandidatesMatched=attempts===0;throw new PmCliError(noCandidatesMatched?"No actionable items matched the selection filters":"No actionable item remained available to claim",noCandidatesMatched?EXIT_CODE.NOT_FOUND:EXIT_CODE.CONFLICT,{code:NO_AVAILABLE_NEXT_ITEM_CODE,why:noCandidatesMatched?"No ready items matched the specified filters or selection criteria.":"Every ranked candidate was claimed by another agent before this atomic selection completed.",nextSteps:[noCandidatesMatched?"Verify the filters or run pm next to inspect all ready work.":"Run pm claim --next again to refresh the ranked candidate set."]})}async function runRelease(id,force,global2,options={}){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot),author=resolveAuthor(options.author,settings.author_default),claimPrincipal=resolveClaimPrincipal(author),ownershipReleaseBypass=options.ownershipReleaseBypass===!0;let previousAssignee=null;const statusRegistry=resolveRuntimeStatusRegistry(settings.schema),handoffStatus=resolveReleaseHandoff(options,statusRegistry);if(handoffStatus!==void 0&&ownershipReleaseBypass)throw new PmCliError("Ownership-release bypass only clears ownership; it cannot change a handoff status.",EXIT_CODE.USAGE);let handoff,result;try{result=await mutateItem({pmRoot,settings,id,op:"release",author,message:options.message,force,bypassAssigneeConflict:ownershipReleaseBypass,mutate(document){previousAssignee=document.metadata.assignee??null;const transition=handoffStatus===void 0?void 0:applyReleaseHandoff(document.metadata,handoffStatus,settings,statusRegistry,options.message);return handoff=transition?.receipt,!previousAssignee&&!document.metadata.claim_principal?{changedFields:[]}:(delete document.metadata.assignee,delete document.metadata.claim_principal,{changedFields:["assignee","claim_principal",...transition?.changedFields??[]],warnings:transition?.warnings})}})}catch(error){wrapOwnershipConflict(error,{required:"For approved non-owner handoffs, prefer the ownership-release bypass before considering --force.",examples:['pm release pm-a1b2 --author "reviewer" --force'],nextSteps:["Use the package-provided ownership-release bypass for handoffs that only clear assignee metadata.","Use --force only when an explicit override is approved for broader ownership conflicts."]})}await recordReleaseSemanticAttribution({pmRoot,principal:claimPrincipal,itemId:result.item.id});const stillInProgress=normalizeStatusForRegistry(result.item.status,statusRegistry)===normalizeStatusForRegistry(statusRegistry.in_progress_status,statusRegistry);return{item:toItemRecord(result.item),released_by:author,changed_fields:result.changedFields,previous_assignee:previousAssignee,forced:force,...handoff===void 0?{}:{handoff},...result.warnings.length>0||stillInProgress?{warnings:[...result.warnings,...stillInProgress?["released_unclaimed_in_progress"]:[]]}:{},...stillInProgress?{suggestions:[`${result.item.id} remains ${result.item.status} and unclaimed. If work is paused, run pm release ${result.item.id} --pause to move it to ${statusRegistry.open_status}.`]}:{}}}export{NO_AVAILABLE_NEXT_ITEM_CODE,claimNextFromRecommendations,isAlreadyClaimedError,parseClaimNextAttempts,runClaim,runClaimNext,runRelease};
2
2
  //# sourceMappingURL=claim.js.map
@@ -1,123 +1,123 @@
1
- import { type GlobalOptions, readSettings } from "../runtime-primitives.js";
1
+ import { type GlobalOptions,readSettings } from "../runtime-primitives.js";
2
2
  import { type ListOptions } from "../query/list.js";
3
3
  import { type PmCommandEffectReceipt } from "../cli-contracts/command-exit-contracts.js";
4
4
  /** Documents the close many command options payload exchanged by command, SDK, and package integrations. */
5
5
  export interface CloseManyCommandOptions {
6
6
  /** Lifecycle state reported for status. */
7
- status?: string;
7
+ status?:string;
8
8
  /** Value that configures or reports list for this contract. */
9
- list?: ListOptions;
9
+ list?:ListOptions;
10
10
  /** Value that configures or reports reason for this contract. */
11
- reason?: string;
11
+ reason?:string;
12
12
  /** Actual completion time shared by every matched close. */
13
- completedAt?: string;
13
+ completedAt?:string;
14
14
  /** Value that configures or reports resolution for this contract. */
15
- resolution?: string;
15
+ resolution?:string;
16
16
  /** Structured result returned by the expected operation. */
17
- expectedResult?: string;
17
+ expectedResult?:string;
18
18
  /** Structured result returned by the actual operation. */
19
- actualResult?: string;
19
+ actualResult?:string;
20
20
  /** Value that configures or reports validate close for this contract. */
21
- validateClose?: string;
21
+ validateClose?:string;
22
22
  /** Value that configures or reports author for this contract. */
23
- author?: string;
23
+ author?:string;
24
24
  /** Human-readable explanation suitable for logs and agent-facing output. */
25
- message?: string;
25
+ message?:string;
26
26
  /** Value that configures or reports force for this contract. */
27
- force?: boolean;
27
+ force?:boolean;
28
28
  /** Value that configures or reports dry run for this contract. */
29
- dryRun?: boolean;
29
+ dryRun?:boolean;
30
30
  /** Value that configures or reports rollback for this contract. */
31
- rollback?: string;
31
+ rollback?:string;
32
32
  /** Value that configures or reports checkpoint for this contract. */
33
- checkpoint?: boolean;
33
+ checkpoint?:boolean;
34
34
  }
35
35
  /** Presentation-neutral input accepted by the SDK-owned bulk close operation. */
36
36
  export type CloseManyOperationOptions = CloseManyCommandOptions;
37
37
  interface CloseManyPlanRow {
38
- id: string;
39
- title: string;
40
- status: string;
41
- action: "close" | "skip";
42
- skip_reason?: string;
43
- active_child_ids?: string[];
38
+ id:string;
39
+ title:string;
40
+ status:string;
41
+ action:"close" | "skip";
42
+ skip_reason?:string;
43
+ active_child_ids?:string[];
44
44
  }
45
45
  interface CloseManyApplyRow {
46
- id: string;
47
- status: "closed" | "skipped" | "failed";
48
- skip_reason?: string;
49
- changed_fields?: string[];
50
- warnings?: string[];
51
- error?: string;
46
+ id:string;
47
+ status:"closed" | "skipped" | "failed";
48
+ skip_reason?:string;
49
+ changed_fields?:string[];
50
+ warnings?:string[];
51
+ error?:string;
52
52
  }
53
53
  /** Documents the close many result payload exchanged by command, SDK, and package integrations. */
54
54
  export interface CloseManyResult extends PmCommandEffectReceipt {
55
55
  /** Value that configures or reports mode for this contract. */
56
- mode: "dry_run" | "apply" | "rollback";
56
+ mode:"dry_run" | "apply" | "rollback";
57
57
  /** Number of matched entries represented by this result. */
58
- matched_count: number;
58
+ matched_count:number;
59
59
  /** Value that configures or reports dry run for this contract. */
60
- dry_run: boolean;
60
+ dry_run:boolean;
61
61
  /** Value that configures or reports reason for this contract. */
62
- reason?: string;
62
+ reason?:string;
63
63
  /** Value that configures or reports filters for this contract. */
64
- filters?: Record<string, unknown>;
64
+ filters?:Record<string,unknown>;
65
65
  /** Value that configures or reports validate close for this contract. */
66
- validate_close?: string;
66
+ validate_close?:string;
67
67
  /** Value that configures or reports item plans for this contract. */
68
- item_plans?: CloseManyPlanRow[];
68
+ item_plans?:CloseManyPlanRow[];
69
69
  /** Value that configures or reports checkpoint for this contract. */
70
- checkpoint?: {
71
- id: string;
72
- created_at: string;
73
- path: string;
74
- rollback_command: string;
70
+ checkpoint?:{
71
+ id:string;
72
+ created_at:string;
73
+ path:string;
74
+ rollback_command:string;
75
75
  };
76
76
  /** Number of closed entries represented by this result. */
77
- closed_count?: number;
77
+ closed_count?:number;
78
78
  /** Number of skipped entries represented by this result. */
79
- skipped_count?: number;
79
+ skipped_count?:number;
80
80
  /** Number of failed entries represented by this result. */
81
- failed_count?: number;
81
+ failed_count?:number;
82
82
  /** Number of restored entries represented by this result. */
83
- restored_count?: number;
83
+ restored_count?:number;
84
84
  /** Value that configures or reports rollback checkpoint id for this contract. */
85
- rollback_checkpoint_id?: string;
85
+ rollback_checkpoint_id?:string;
86
86
  /** Value that configures or reports rows for this contract. */
87
- rows?: CloseManyApplyRow[] | Array<{
88
- id: string;
89
- status: "restored" | "failed";
90
- changed_fields?: string[];
91
- warnings?: string[];
92
- error?: string;
87
+ rows?:CloseManyApplyRow[] | Array<{
88
+ id:string;
89
+ status:"restored" | "failed";
90
+ changed_fields?:string[];
91
+ warnings?:string[];
92
+ error?:string;
93
93
  }>;
94
94
  /** Value that configures or reports ids for this contract. */
95
- ids: string[];
95
+ ids:string[];
96
96
  /** Explicitly requested --ids values that matched no selected item. */
97
- unmatched_ids?: string[];
97
+ unmatched_ids?:string[];
98
98
  /** Number of explicitly requested --ids values that matched no selected item. */
99
- unmatched_count?: number;
99
+ unmatched_count?:number;
100
100
  }
101
- declare function hasCloseManyFilters(list: ListOptions | undefined, status: string | undefined): boolean;
102
- declare function hasCloseManyRollbackConflicts(list: ListOptions | undefined, status: string | undefined): boolean;
103
- declare function rejectBlankIdsFilter(list: ListOptions | undefined): void;
104
- declare function activeListOptions(list: ListOptions | undefined): ListOptions;
105
- declare function resolveReason(reason: unknown, required: boolean): string | undefined;
106
- declare function buildActiveChildrenByParent(pmRoot: string, settings: Awaited<ReturnType<typeof readSettings>>): Promise<{
107
- childrenByParent: Map<string, string[]>;
108
- parentByChild: Map<string, string>;
101
+ declare function hasCloseManyFilters(list:ListOptions | undefined,status:string | undefined):boolean;
102
+ declare function hasCloseManyRollbackConflicts(list:ListOptions | undefined,status:string | undefined):boolean;
103
+ declare function rejectBlankIdsFilter(list:ListOptions | undefined):void;
104
+ declare function activeListOptions(list:ListOptions | undefined):ListOptions;
105
+ declare function resolveReason(reason:unknown,required:boolean):string | undefined;
106
+ declare function buildActiveChildrenByParent(pmRoot:string,settings:Awaited<ReturnType<typeof readSettings>>):Promise<{
107
+ childrenByParent:Map<string,string[]>;
108
+ parentByChild:Map<string,string>;
109
109
  }>;
110
- declare function hierarchyDepth(id: string, parentByChild: Map<string, string>, cache?: Map<string, number>): number;
110
+ declare function hierarchyDepth(id:string,parentByChild:Map<string,string>,cache?:Map<string,number>):number;
111
111
  /** Implements run close many for the public runtime surface of this module. */
112
- export declare function runCloseMany(options: CloseManyCommandOptions, global: GlobalOptions): Promise<CloseManyResult>;
112
+ export declare function runCloseMany(options:CloseManyCommandOptions,global:GlobalOptions):Promise<CloseManyResult>;
113
113
  /** Public contract for test only, shared by SDK and presentation-layer consumers. */
114
- export declare const _testOnly: {
115
- activeListOptions: typeof activeListOptions;
116
- buildActiveChildrenByParent: typeof buildActiveChildrenByParent;
117
- hasCloseManyFilters: typeof hasCloseManyFilters;
118
- hasCloseManyRollbackConflicts: typeof hasCloseManyRollbackConflicts;
119
- hierarchyDepth: typeof hierarchyDepth;
120
- rejectBlankIdsFilter: typeof rejectBlankIdsFilter;
121
- resolveReason: typeof resolveReason;
114
+ export declare const _testOnly:{
115
+ activeListOptions:typeof activeListOptions;
116
+ buildActiveChildrenByParent:typeof buildActiveChildrenByParent;
117
+ hasCloseManyFilters:typeof hasCloseManyFilters;
118
+ hasCloseManyRollbackConflicts:typeof hasCloseManyRollbackConflicts;
119
+ hierarchyDepth:typeof hierarchyDepth;
120
+ rejectBlankIdsFilter:typeof rejectBlankIdsFilter;
121
+ resolveReason:typeof resolveReason;
122
122
  };
123
123
  export {};
@@ -1,49 +1,43 @@
1
- /**
2
- * @module sdk/lifecycle/close
3
- *
4
- * Implements the pm close command surface and its agent-facing runtime behavior.
5
- */
6
- import type { PmCliErrorRecoveryPayload } from "../../core/shared/errors.js";
7
1
  import { type GlobalOptions } from "../runtime-primitives.js";
8
2
  import { collectBlockedByIds } from "../actionability.js";
9
- import { type CloseOperationOptions, type CloseOperationResult } from "../lifecycle-policy.js";
3
+ import { type CloseOperationOptions,type CloseOperationResult,type CloseEvidenceFollowUp } from "../lifecycle-policy.js";
10
4
  /** Compatibility options for command-shaped close consumers. */
11
5
  export interface CloseCommandOptions {
12
6
  /** Mutation author. */
13
- author?: string;
7
+ author?:string;
14
8
  /** Immutable history message. */
15
- message?: string;
9
+ message?:string;
16
10
  /** Closure validation mode. */
17
- validateClose?: string;
11
+ validateClose?:string;
18
12
  /** Permit repeat closure. */
19
- force?: boolean;
13
+ force?:boolean;
20
14
  /** Structured resolution evidence. */
21
- resolution?: string;
15
+ resolution?:string;
22
16
  /** Expected outcome evidence. */
23
- expectedResult?: string;
17
+ expectedResult?:string;
24
18
  /** Actual outcome evidence. */
25
- actualResult?: string;
19
+ actualResult?:string;
26
20
  /** Canonical duplicate target. */
27
- duplicateOf?: string;
21
+ duplicateOf?:string;
28
22
  /** Actual completion time. */
29
- completedAt?: string;
23
+ completedAt?:string;
30
24
  }
31
25
  /** Compatibility result for command-shaped close consumers. */
32
26
  export interface CloseResult {
33
27
  /** Closed item record. */
34
- item: Record<string, unknown>;
28
+ item:Record<string,unknown>;
35
29
  /** Changed metadata fields. */
36
- changed_fields: string[];
30
+ changed_fields:string[];
37
31
  /** Evidence-only update guidance when acceptance fields are missing. */
38
- recovery?: PmCliErrorRecoveryPayload;
32
+ follow_up?:CloseEvidenceFollowUp;
39
33
  /** Validation and lifecycle receipts. */
40
- warnings: string[];
34
+ warnings:string[];
41
35
  }
42
36
  /** Public contract for test only close command, shared by SDK and presentation-layer consumers. */
43
- export declare const _testOnlyCloseCommand: {
44
- blockedByIds: typeof collectBlockedByIds;
37
+ export declare const _testOnlyCloseCommand:{
38
+ blockedByIds:typeof collectBlockedByIds;
45
39
  };
46
40
  /** Close one item through the SDK-owned lifecycle transaction and policy. */
47
- export declare function closeItem(id: string, closeReasonText: string | undefined, options: CloseOperationOptions, global: GlobalOptions): Promise<CloseOperationResult>;
41
+ export declare function closeItem(id:string,closeReasonText:string | undefined,options:CloseOperationOptions,global:GlobalOptions):Promise<CloseOperationResult>;
48
42
  /** Compatibility command-shaped wrapper over the SDK-owned close operation. */
49
- export declare function runClose(id: string, closeReasonText: string | undefined, options: CloseCommandOptions, global: GlobalOptions): Promise<CloseResult>;
43
+ export declare function runClose(id:string,closeReasonText:string | undefined,options:CloseCommandOptions,global:GlobalOptions):Promise<CloseResult>;
@@ -1,2 +1,2 @@
1
- (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ab15186d-b8bc-5740-bc16-d5af1eeeaa02")}catch{}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{toItemRecord,isTerminalStatus,resolveItemTypeRegistry,resolveRuntimeStatusRegistry,EXIT_CODE,PmCliError,buildItemNotFoundError,listAllItemMetadataLight,locateItem,mutateItem,readLocatedItem,resolvePmRoot,readSettings,resolveAuthor,resolveIsoOrRelative,shouldCompletePlanOnClose,getActiveExtensionRegistrations}from"../runtime-primitives.js";import{collectBlockedByIds,indexBlockedByIds}from"../actionability.js";import{applyTerminalOrderingPolicy,requireTerminalReason}from"../lifecycle-policy.js";import{nowIso}from"../../core/shared/time.js";import{renderPmCommand}from"../command-line.js";const CLOSE_VALIDATION_FIELDS=[{key:"resolution",label:"resolution (--resolution)"},{key:"expected_result",label:"expected_result (--expected-result)"},{key:"actual_result",label:"actual_result (--actual-result)"}];function parseValidateCloseMode(raw){if(raw===void 0)return;const normalized=raw.trim().toLowerCase();if(normalized.length===0||normalized==="warn")return"warn";if(normalized==="off"||normalized==="none"||normalized==="disabled")return"off";if(normalized==="strict")return"strict";throw new PmCliError(`Invalid --validate-close mode "${raw}" (expected "off", "warn", or "strict")`,EXIT_CODE.USAGE)}function findMissingCloseValidationFields(itemMetadata){const missing=[];for(const field of CLOSE_VALIDATION_FIELDS){const rawValue=itemMetadata[field.key];(typeof rawValue!="string"||rawValue.trim().length===0)&&missing.push(field)}return missing}function closeEvidenceRecovery(metadata,pmRoot,options={}){const missing=findMissingCloseValidationFields(metadata);if(missing.length===0)return;const values={resolution:options.resolution,expected_result:options.expectedResult,actual_result:options.actualResult},missingFlags=missing.map(field=>`--${field.key.replaceAll("_","-")}`),args=["--pm-path",pmRoot,"update",metadata.id,...missing.flatMap((field,index)=>[missingFlags[index],values[field.key]?.trim()||"<value>"])];return{missing:missingFlags,suggested_retry:renderPmCommand(args),suggested_retry_args:args}}async function duplicateChainReferencesClosingItem(loadItemById,initialDuplicateOf,closingId){const visited=new Set;let current=initialDuplicateOf;for(;typeof current=="string"&&current.trim().length>0;){const currentId=current.trim();if(currentId===closingId)return!0;if(visited.has(currentId))return!1;visited.add(currentId),current=(await loadItemById(currentId))?.duplicate_of}return!1}function shouldApplyDuplicateFallback(value){return typeof value!="string"||value.trim().length===0}async function assertDuplicateTargetExists(pmRoot,settings,duplicateOf,closingId){const rawTarget=duplicateOf?.trim();if(!rawTarget)return;if(rawTarget===closingId)throw new PmCliError("An item cannot be closed as a duplicate of itself.",EXIT_CODE.USAGE,{code:"duplicate_target_self",why:"--duplicate-of must identify the canonical item that should remain open or already represent the work."});const typeRegistry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations()),itemCache=new Map,loadItemById=async id=>{if(itemCache.has(id))return itemCache.get(id)??null;const located=await locateItem(pmRoot,id,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder);if(!located)return itemCache.set(id,null),null;const{document}=await readLocatedItem(located,{schema:settings.schema});return itemCache.set(id,document.metadata),document.metadata},target=await loadItemById(rawTarget);if(!target)throw new PmCliError(`Duplicate target "${rawTarget}" was not found. Create or locate the canonical item first.`,EXIT_CODE.USAGE,{code:"duplicate_target_missing",why:"Duplicate closure should point at a real canonical pm item so future dedupe and changelog tooling can trace the relationship.",examples:[`pm close ${closingId} "Duplicate of ${rawTarget}" --duplicate-of ${rawTarget}`],nextSteps:["Run pm search/list to find the canonical item, then retry with --duplicate-of <id>."]});if(await duplicateChainReferencesClosingItem(loadItemById,target.duplicate_of,closingId))throw new PmCliError(`Circular duplicate reference detected. Target "${rawTarget}" points back to "${closingId}".`,EXIT_CODE.USAGE,{code:"duplicate_target_circular",why:"Circular duplicate relationships create loops for dedupe and status propagation tooling.",nextSteps:["Choose the existing canonical item, or clear the target duplicate_of metadata before closing this item as a duplicate."]});if(typeof target.duplicate_of=="string"&&target.duplicate_of.trim().length>0)throw new PmCliError(`Duplicate target "${rawTarget}" is already marked as a duplicate of "${target.duplicate_of.trim()}".`,EXIT_CODE.USAGE,{code:"duplicate_target_is_duplicate",why:"Duplicate closure should point directly at the canonical item, not another duplicate.",examples:[`pm close ${closingId} "Duplicate of ${target.duplicate_of.trim()}" --duplicate-of ${target.duplicate_of.trim()}`],nextSteps:["Use the canonical item referenced by duplicate_of as the --duplicate-of target."]});return target.id}function findActiveChildIds(items,parentId,statusRegistry){return items.filter(item=>item.parent===parentId&&!isTerminalStatus(item.status,statusRegistry)).map(item=>item.id).sort((left,right)=>left.localeCompare(right))}function findAutoUnblockCandidates(items,closedId,statusRegistry){const itemsById=new Map(items.map(item=>[item.id.trim().toLowerCase(),item])),blockerIdsByItem=indexBlockedByIds(items),normalizedClosedId=closedId.trim().toLowerCase(),blockedStatuses=statusRegistry.blocked_statuses;return items.filter(item=>blockedStatuses.has(item.status)).map(item=>({item,blockerIds:blockerIdsByItem.get(item.id.trim().toLowerCase())})).filter(({blockerIds})=>blockerIds.includes(normalizedClosedId)).filter(({blockerIds})=>blockerIds.every(blockerId=>{if(blockerId===normalizedClosedId)return!0;const blocker=itemsById.get(blockerId);return blocker!==void 0&&isTerminalStatus(blocker.status,statusRegistry)})).map(({item,blockerIds})=>({id:item.id,blocker_ids:blockerIds})).sort((left,right)=>left.id.localeCompare(right.id))}async function autoUnblockResolvedDependents(pmRoot,settings,items,closedId,author,statusRegistry){const candidates=findAutoUnblockCandidates(items,closedId,statusRegistry),warnings=[];for(const candidate of candidates)try{const unblocked=await mutateItem({pmRoot,settings,id:candidate.id,op:"update",author,message:`Auto-unblocked after blocker ${closedId} closed`,mutate(document){const dependencies=document.metadata.dependencies??[],remainingDependencies=dependencies.filter(dependency=>{const dependencyId=dependency.id.trim().toLowerCase();return dependency.kind!=="blocked_by"||!candidate.blocker_ids.includes(dependencyId)});document.metadata.status=statusRegistry.open_status,delete document.metadata.blocked_by,delete document.metadata.blocked_reason,document.metadata.unblock_note=`Auto-unblocked after blocker ${closedId} closed; all blockers resolved (${candidate.blocker_ids.join(", ")}).`,remainingDependencies.length>0?document.metadata.dependencies=remainingDependencies:delete document.metadata.dependencies;const changedFields=["status","blocked_by","blocked_reason","unblock_note"];return remainingDependencies.length!==dependencies.length&&changedFields.push("dependencies"),{changedFields}}});warnings.push(`auto_unblocked:${unblocked.item.id}:resolved_blockers=${candidate.blocker_ids.join(",")}`)}catch(error){const reason=error instanceof Error?error.message.replace(/\s+/g," ").trim():"unknown";warnings.push(`auto_unblock_failed:${candidate.id}:${reason}`)}return warnings}function applyInlineCloseFields(metadata,options){const changedFields=[],inlineCloseFields=[{option:options.resolution,key:"resolution"},{option:options.expectedResult,key:"expected_result"},{option:options.actualResult,key:"actual_result"}];for(const{option,key}of inlineCloseFields){if(typeof option!="string")continue;const trimmed=option.trim();trimmed.length!==0&&(metadata[key]=trimmed,changedFields.push(key))}return changedFields}function applyDuplicateCloseMetadata(metadata,duplicateOf){if(duplicateOf===void 0)return[];metadata.duplicate_of=duplicateOf;const duplicateFallbackFields=[],fallbackValues=[{key:"resolution",value:`Duplicate of ${duplicateOf}`},{key:"expected_result",value:`Canonical item ${duplicateOf} tracks the work.`},{key:"actual_result",value:`Closed as duplicate of ${duplicateOf}.`}];for(const{key,value}of fallbackValues)shouldApplyDuplicateFallback(metadata[key])&&(metadata[key]=value,duplicateFallbackFields.push(key));return duplicateFallbackFields}function collectCloseValidationWarnings(metadata,validateCloseMode,activeChildIds,pmRoot){const warnings=[];if(validateCloseMode!=="off"){const missingFields=findMissingCloseValidationFields(metadata);if(missingFields.length>0){const missingLabels=missingFields.map(field=>field.label);if(validateCloseMode==="strict"){const missingFlags=missingFields.map(field=>`--${field.key.replaceAll("_","-")}`),updateTokens=["--pm-path",pmRoot,"update",metadata.id,...missingFlags.flatMap(flag=>[flag,"<value>"])];throw new PmCliError(`Cannot close item ${metadata.id}: missing ${missingLabels.join(", ")}. Populate fields or use --validate-close warn.`,EXIT_CODE.USAGE,{code:"close_validation_missing_fields",recovery:{missing:missingFlags,suggested_retry:renderPmCommand(updateTokens)},nextSteps:["Run the suggested pm update, then retry the original pm close invocation.","Use --validate-close warn only when governance permits an evidenced exception."]})}warnings.push(`close_validation_missing_fields:${metadata.id}:${missingLabels.join(",")}`)}if(activeChildIds.length>0){if(validateCloseMode==="strict")throw new PmCliError(`Cannot close item ${metadata.id}: active child items remain open (${activeChildIds.join(", ")}). Close, cancel, or re-parent them first, or use --validate-close warn.`,EXIT_CODE.USAGE);warnings.push(`close_validation_active_children:${metadata.id}:${activeChildIds.join(",")}`)}return warnings}return activeChildIds.length>0&&warnings.push(`closed_with_active_children:${metadata.id}:${activeChildIds.join(",")}`),warnings}function applyCloseReason(metadata,closeReason){return closeReason!==void 0?(metadata.close_reason=closeReason,["close_reason"]):[]}function clearCloseAssignee(metadata){return metadata.assignee===void 0?[]:(delete metadata.assignee,["assignee"])}function mutateCloseMetadata(metadata,context){if(isTerminalStatus(metadata.status,context.statusRegistry)&&!context.force)throw new PmCliError(`Item ${metadata.id} is already terminal; use pm update to append acceptance evidence, or --force only for an intentional repeat closure.`,EXIT_CODE.CONFLICT,{recovery:closeEvidenceRecovery(metadata,context.pmRoot,context.options)});const inlineChangedFields=applyInlineCloseFields(metadata,context.options),duplicateFallbackFields=applyDuplicateCloseMetadata(metadata,context.duplicateOf),mutationWarnings=collectCloseValidationWarnings(metadata,context.validateCloseMode,context.activeChildIds,context.pmRoot);metadata.status=context.statusRegistry.close_status,metadata.closed_at=context.closedAt;const shouldWriteCompletedAt=context.options.completedAt!==void 0||metadata.completed_at===void 0;shouldWriteCompletedAt&&(metadata.completed_at=context.completedAt);const changedFields=["status","closed_at",...shouldWriteCompletedAt?["completed_at"]:[],...applyCloseReason(metadata,context.closeReason),...inlineChangedFields];if(shouldCompletePlanOnClose(metadata)&&(metadata.plan_mode="completed",changedFields.push("plan_mode")),context.duplicateOf!==void 0){changedFields.push("duplicate_of");for(const key of duplicateFallbackFields)changedFields.includes(key)||changedFields.push(key)}changedFields.push(...clearCloseAssignee(metadata));const blockerCleanup=applyTerminalOrderingPolicy(metadata,context.lifecyclePolicy);return changedFields.push(...blockerCleanup.changedFields),mutationWarnings.push(...blockerCleanup.warnings),{changedFields,...mutationWarnings.length>0?{warnings:mutationWarnings}:{}}}const _testOnlyCloseCommand={blockedByIds:collectBlockedByIds};async function closeItem(id,closeReasonText,options,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot),statusRegistry=resolveRuntimeStatusRegistry(settings.schema),author=resolveAuthor(options.author,settings.author_default),typeToFolder=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations()).type_to_folder,located=await locateItem(pmRoot,id,settings.id_prefix,settings.item_format,typeToFolder);if(!located)throw await buildItemNotFoundError(pmRoot,id,settings.id_prefix,typeToFolder);const duplicateOf=await assertDuplicateTargetExists(pmRoot,settings,options.duplicateOf,located.id),lifecyclePolicy={requireCloseReason:options.lifecyclePolicy?.requireCloseReason??settings.governance.require_close_reason,orderingEdges:options.lifecyclePolicy?.orderingEdges??"preserve"},closeReason=requireTerminalReason({explicit:closeReasonText,duplicateOf,resolution:options.resolution,message:options.message},lifecyclePolicy.requireCloseReason).closeReason,validateCloseMode=parseValidateCloseMode(options.validateClose)??settings.governance.close_validation_default,trackerItems=await listAllItemMetadataLight(pmRoot,settings.item_format,typeToFolder,void 0,settings.schema),activeChildIds=findActiveChildIds(trackerItems,located.id,statusRegistry),closedAt=nowIso(),completedAt=options.completedAt===void 0?closedAt:resolveIsoOrRelative(options.completedAt,new Date(closedAt),"completed-at"),result=await mutateItem({pmRoot,settings,id:located.id,op:"close",author,message:options.message,force:options.force,mutate(document){return mutateCloseMetadata(document.metadata,{pmRoot,statusRegistry,force:options.force,options,duplicateOf,validateCloseMode,activeChildIds,closeReason,closedAt,completedAt,lifecyclePolicy})}}),recovery=validateCloseMode==="warn"?closeEvidenceRecovery(result.item,pmRoot):void 0;return{item:toItemRecord(result.item),changed_fields:result.changedFields,...recovery?{recovery}:{},warnings:[...result.warnings,...await autoUnblockResolvedDependents(pmRoot,settings,trackerItems,located.id,author,statusRegistry)]}}function runClose(id,closeReasonText,options,global2){return closeItem(id,closeReasonText,options,global2)}export{_testOnlyCloseCommand,closeItem,runClose};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6b7f5ee8-94ca-574f-b660-963eb574d571")}catch{}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{toItemRecord,isTerminalStatus,resolveItemTypeRegistry,resolveRuntimeStatusRegistry,EXIT_CODE,PmCliError,buildItemNotFoundError,listAllItemMetadataLight,locateItem,mutateItem,readLocatedItem,resolvePmRoot,readSettings,resolveAuthor,resolveIsoOrRelative,shouldCompletePlanOnClose,getActiveExtensionRegistrations}from"../runtime-primitives.js";import{collectBlockedByIds,indexBlockedByIds}from"../actionability.js";import{applyTerminalOrderingPolicy,requireTerminalReason}from"../lifecycle-policy.js";import{nowIso}from"../../core/shared/time.js";import{renderPmCommand}from"../command-line.js";const CLOSE_VALIDATION_FIELDS=[{key:"resolution",label:"resolution (--resolution)"},{key:"expected_result",label:"expected_result (--expected-result)"},{key:"actual_result",label:"actual_result (--actual-result)"}];function parseValidateCloseMode(raw){if(raw===void 0)return;const normalized=raw.trim().toLowerCase();if(normalized.length===0||normalized==="warn")return"warn";if(normalized==="off"||normalized==="none"||normalized==="disabled")return"off";if(normalized==="strict")return"strict";throw new PmCliError(`Invalid --validate-close mode "${raw}" (expected "off", "warn", or "strict")`,EXIT_CODE.USAGE)}function findMissingCloseValidationFields(itemMetadata){const missing=[];for(const field of CLOSE_VALIDATION_FIELDS){const rawValue=itemMetadata[field.key];(typeof rawValue!="string"||rawValue.trim().length===0)&&missing.push(field)}return missing}function closeEvidenceRecovery(metadata,pmRoot,options={}){const missing=findMissingCloseValidationFields(metadata);if(missing.length===0)return;const values={resolution:options.resolution,expected_result:options.expectedResult,actual_result:options.actualResult},missingFlags=missing.map(field=>`--${field.key.replaceAll("_","-")}`),args=["--pm-path",pmRoot,"update",metadata.id,...missing.flatMap((field,index)=>[missingFlags[index],values[field.key]?.trim()||"<value>"])];return{missing:missingFlags,suggested_retry:renderPmCommand(args),suggested_retry_args:args}}async function duplicateChainReferencesClosingItem(loadItemById,initialDuplicateOf,closingId){const visited=new Set;let current=initialDuplicateOf;for(;typeof current=="string"&&current.trim().length>0;){const currentId=current.trim();if(currentId===closingId)return!0;if(visited.has(currentId))return!1;visited.add(currentId),current=(await loadItemById(currentId))?.duplicate_of}return!1}function shouldApplyDuplicateFallback(value){return typeof value!="string"||value.trim().length===0}async function assertDuplicateTargetExists(pmRoot,settings,duplicateOf,closingId){const rawTarget=duplicateOf?.trim();if(!rawTarget)return;if(rawTarget===closingId)throw new PmCliError("An item cannot be closed as a duplicate of itself.",EXIT_CODE.USAGE,{code:"duplicate_target_self",why:"--duplicate-of must identify the canonical item that should remain open or already represent the work."});const typeRegistry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations()),itemCache=new Map,loadItemById=async id=>{if(itemCache.has(id))return itemCache.get(id)??null;const located=await locateItem(pmRoot,id,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder);if(!located)return itemCache.set(id,null),null;const{document}=await readLocatedItem(located,{schema:settings.schema});return itemCache.set(id,document.metadata),document.metadata},target=await loadItemById(rawTarget);if(!target)throw new PmCliError(`Duplicate target "${rawTarget}" was not found. Create or locate the canonical item first.`,EXIT_CODE.USAGE,{code:"duplicate_target_missing",why:"Duplicate closure should point at a real canonical pm item so future dedupe and changelog tooling can trace the relationship.",examples:[`pm close ${closingId} "Duplicate of ${rawTarget}" --duplicate-of ${rawTarget}`],nextSteps:["Run pm search/list to find the canonical item, then retry with --duplicate-of <id>."]});if(await duplicateChainReferencesClosingItem(loadItemById,target.duplicate_of,closingId))throw new PmCliError(`Circular duplicate reference detected. Target "${rawTarget}" points back to "${closingId}".`,EXIT_CODE.USAGE,{code:"duplicate_target_circular",why:"Circular duplicate relationships create loops for dedupe and status propagation tooling.",nextSteps:["Choose the existing canonical item, or clear the target duplicate_of metadata before closing this item as a duplicate."]});if(typeof target.duplicate_of=="string"&&target.duplicate_of.trim().length>0)throw new PmCliError(`Duplicate target "${rawTarget}" is already marked as a duplicate of "${target.duplicate_of.trim()}".`,EXIT_CODE.USAGE,{code:"duplicate_target_is_duplicate",why:"Duplicate closure should point directly at the canonical item, not another duplicate.",examples:[`pm close ${closingId} "Duplicate of ${target.duplicate_of.trim()}" --duplicate-of ${target.duplicate_of.trim()}`],nextSteps:["Use the canonical item referenced by duplicate_of as the --duplicate-of target."]});return target.id}function findActiveChildIds(items,parentId,statusRegistry){return items.filter(item=>item.parent===parentId&&!isTerminalStatus(item.status,statusRegistry)).map(item=>item.id).sort((left,right)=>left.localeCompare(right))}function findAutoUnblockCandidates(items,closedId,statusRegistry){const itemsById=new Map(items.map(item=>[item.id.trim().toLowerCase(),item])),blockerIdsByItem=indexBlockedByIds(items),normalizedClosedId=closedId.trim().toLowerCase(),blockedStatuses=statusRegistry.blocked_statuses;return items.filter(item=>blockedStatuses.has(item.status)).map(item=>({item,blockerIds:blockerIdsByItem.get(item.id.trim().toLowerCase())})).filter(({blockerIds})=>blockerIds.includes(normalizedClosedId)).filter(({blockerIds})=>blockerIds.every(blockerId=>{if(blockerId===normalizedClosedId)return!0;const blocker=itemsById.get(blockerId);return blocker!==void 0&&isTerminalStatus(blocker.status,statusRegistry)})).map(({item,blockerIds})=>({id:item.id,blocker_ids:blockerIds})).sort((left,right)=>left.id.localeCompare(right.id))}async function autoUnblockResolvedDependents(pmRoot,settings,items,closedId,author,statusRegistry){const candidates=findAutoUnblockCandidates(items,closedId,statusRegistry),warnings=[];for(const candidate of candidates)try{const unblocked=await mutateItem({pmRoot,settings,id:candidate.id,op:"update",author,message:`Auto-unblocked after blocker ${closedId} closed`,mutate(document){const dependencies=document.metadata.dependencies??[],remainingDependencies=dependencies.filter(dependency=>{const dependencyId=dependency.id.trim().toLowerCase();return dependency.kind!=="blocked_by"||!candidate.blocker_ids.includes(dependencyId)});document.metadata.status=statusRegistry.open_status,delete document.metadata.blocked_by,delete document.metadata.blocked_reason,document.metadata.unblock_note=`Auto-unblocked after blocker ${closedId} closed; all blockers resolved (${candidate.blocker_ids.join(", ")}).`,remainingDependencies.length>0?document.metadata.dependencies=remainingDependencies:delete document.metadata.dependencies;const changedFields=["status","blocked_by","blocked_reason","unblock_note"];return remainingDependencies.length!==dependencies.length&&changedFields.push("dependencies"),{changedFields}}});warnings.push(`auto_unblocked:${unblocked.item.id}:resolved_blockers=${candidate.blocker_ids.join(",")}`)}catch(error){const reason=error instanceof Error?error.message.replace(/\s+/g," ").trim():"unknown";warnings.push(`auto_unblock_failed:${candidate.id}:${reason}`)}return warnings}function applyInlineCloseFields(metadata,options){const changedFields=[],inlineCloseFields=[{option:options.resolution,key:"resolution"},{option:options.expectedResult,key:"expected_result"},{option:options.actualResult,key:"actual_result"}];for(const{option,key}of inlineCloseFields){if(typeof option!="string")continue;const trimmed=option.trim();trimmed.length!==0&&(metadata[key]=trimmed,changedFields.push(key))}return changedFields}function applyDuplicateCloseMetadata(metadata,duplicateOf){if(duplicateOf===void 0)return[];metadata.duplicate_of=duplicateOf;const duplicateFallbackFields=[],fallbackValues=[{key:"resolution",value:`Duplicate of ${duplicateOf}`},{key:"expected_result",value:`Canonical item ${duplicateOf} tracks the work.`},{key:"actual_result",value:`Closed as duplicate of ${duplicateOf}.`}];for(const{key,value}of fallbackValues)shouldApplyDuplicateFallback(metadata[key])&&(metadata[key]=value,duplicateFallbackFields.push(key));return duplicateFallbackFields}function collectCloseValidationWarnings(metadata,validateCloseMode,activeChildIds,pmRoot){const warnings=[];if(validateCloseMode!=="off"){const missingFields=findMissingCloseValidationFields(metadata);if(missingFields.length>0){const missingLabels=missingFields.map(field=>field.label);if(validateCloseMode==="strict"){const missingFlags=missingFields.map(field=>`--${field.key.replaceAll("_","-")}`),updateTokens=["--pm-path",pmRoot,"update",metadata.id,...missingFlags.flatMap(flag=>[flag,"<value>"])];throw new PmCliError(`Cannot close item ${metadata.id}: missing ${missingLabels.join(", ")}. Populate fields or use --validate-close warn.`,EXIT_CODE.USAGE,{code:"close_validation_missing_fields",recovery:{missing:missingFlags,suggested_retry:renderPmCommand(updateTokens)},nextSteps:["Run the suggested pm update, then retry the original pm close invocation.","Use --validate-close warn only when governance permits an evidenced exception."]})}warnings.push(`close_validation_missing_fields:${metadata.id}:${missingLabels.join(",")}`)}if(activeChildIds.length>0){if(validateCloseMode==="strict")throw new PmCliError(`Cannot close item ${metadata.id}: active child items remain open (${activeChildIds.join(", ")}). Close, cancel, or re-parent them first, or use --validate-close warn.`,EXIT_CODE.USAGE);warnings.push(`close_validation_active_children:${metadata.id}:${activeChildIds.join(",")}`)}return warnings}return activeChildIds.length>0&&warnings.push(`closed_with_active_children:${metadata.id}:${activeChildIds.join(",")}`),warnings}function applyCloseReason(metadata,closeReason){return closeReason!==void 0?(metadata.close_reason=closeReason,["close_reason"]):[]}function clearCloseAssignee(metadata){return metadata.assignee===void 0?[]:(delete metadata.assignee,["assignee"])}function mutateCloseMetadata(metadata,context){if(isTerminalStatus(metadata.status,context.statusRegistry)&&!context.force)throw new PmCliError(`Item ${metadata.id} is already terminal; use pm update to append acceptance evidence, or --force only for an intentional repeat closure.`,EXIT_CODE.CONFLICT,{recovery:closeEvidenceRecovery(metadata,context.pmRoot,context.options)});const inlineChangedFields=applyInlineCloseFields(metadata,context.options),duplicateFallbackFields=applyDuplicateCloseMetadata(metadata,context.duplicateOf),mutationWarnings=collectCloseValidationWarnings(metadata,context.validateCloseMode,context.activeChildIds,context.pmRoot);metadata.status=context.statusRegistry.close_status,metadata.closed_at=context.closedAt;const shouldWriteCompletedAt=context.options.completedAt!==void 0||metadata.completed_at===void 0;shouldWriteCompletedAt&&(metadata.completed_at=context.completedAt);const changedFields=["status","closed_at",...shouldWriteCompletedAt?["completed_at"]:[],...applyCloseReason(metadata,context.closeReason),...inlineChangedFields];if(shouldCompletePlanOnClose(metadata)&&(metadata.plan_mode="completed",changedFields.push("plan_mode")),context.duplicateOf!==void 0){changedFields.push("duplicate_of");for(const key of duplicateFallbackFields)changedFields.includes(key)||changedFields.push(key)}changedFields.push(...clearCloseAssignee(metadata));const blockerCleanup=applyTerminalOrderingPolicy(metadata,context.lifecyclePolicy);return changedFields.push(...blockerCleanup.changedFields),mutationWarnings.push(...blockerCleanup.warnings),{changedFields,...mutationWarnings.length>0?{warnings:mutationWarnings}:{}}}const _testOnlyCloseCommand={blockedByIds:collectBlockedByIds};async function closeItem(id,closeReasonText,options,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot),statusRegistry=resolveRuntimeStatusRegistry(settings.schema),author=resolveAuthor(options.author,settings.author_default),typeToFolder=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations()).type_to_folder,located=await locateItem(pmRoot,id,settings.id_prefix,settings.item_format,typeToFolder);if(!located)throw await buildItemNotFoundError(pmRoot,id,settings.id_prefix,typeToFolder);const duplicateOf=await assertDuplicateTargetExists(pmRoot,settings,options.duplicateOf,located.id),lifecyclePolicy={requireCloseReason:options.lifecyclePolicy?.requireCloseReason??settings.governance.require_close_reason,orderingEdges:options.lifecyclePolicy?.orderingEdges??"preserve"},closeReason=requireTerminalReason({explicit:closeReasonText,duplicateOf,resolution:options.resolution,message:options.message},lifecyclePolicy.requireCloseReason).closeReason,validateCloseMode=parseValidateCloseMode(options.validateClose)??settings.governance.close_validation_default,trackerItems=await listAllItemMetadataLight(pmRoot,settings.item_format,typeToFolder,void 0,settings.schema),activeChildIds=findActiveChildIds(trackerItems,located.id,statusRegistry),closedAt=nowIso(),completedAt=options.completedAt===void 0?closedAt:resolveIsoOrRelative(options.completedAt,new Date(closedAt),"completed-at"),result=await mutateItem({pmRoot,settings,id:located.id,op:"close",author,message:options.message,force:options.force,mutate(document){return mutateCloseMetadata(document.metadata,{pmRoot,statusRegistry,force:options.force,options,duplicateOf,validateCloseMode,activeChildIds,closeReason,closedAt,completedAt,lifecyclePolicy})}}),evidence=validateCloseMode==="warn"?closeEvidenceRecovery(result.item,pmRoot):void 0;return{item:toItemRecord(result.item),changed_fields:result.changedFields,...evidence?{follow_up:{kind:"complete_close_evidence",missing:evidence.missing,suggested_command:evidence.suggested_retry,suggested_command_args:evidence.suggested_retry_args}}:{},warnings:[...result.warnings,...await autoUnblockResolvedDependents(pmRoot,settings,trackerItems,located.id,author,statusRegistry)]}}function runClose(id,closeReasonText,options,global2){return closeItem(id,closeReasonText,options,global2)}export{_testOnlyCloseCommand,closeItem,runClose};
2
2
  //# sourceMappingURL=close.js.map
@@ -4,26 +4,26 @@ import type { ItemMetadata } from "../../types/index.js";
4
4
  /** Documents the copy options payload exchanged by command, SDK, and package integrations. */
5
5
  export interface CopyOptions {
6
6
  /** Value that configures or reports title for this contract. */
7
- title?: string;
7
+ title?:string;
8
8
  /** Value that configures or reports author for this contract. */
9
- author?: string;
9
+ author?:string;
10
10
  /** Human-readable explanation suitable for logs and agent-facing output. */
11
- message?: string;
11
+ message?:string;
12
12
  /** Explicitly permit a likely duplicate when strict governance is enabled. */
13
- allowDuplicate?: boolean;
13
+ allowDuplicate?:boolean;
14
14
  }
15
15
  /** Documents the copy result payload exchanged by command, SDK, and package integrations. */
16
16
  export interface CopyResult {
17
17
  /** Value that configures or reports source id for this contract. */
18
- source_id: string;
18
+ source_id:string;
19
19
  /** Value that configures or reports item for this contract. */
20
- item: ItemMetadata;
20
+ item:ItemMetadata;
21
21
  /** Value that configures or reports changed fields for this contract. */
22
- changed_fields: string[];
22
+ changed_fields:string[];
23
23
  /** Value that configures or reports warnings for this contract. */
24
- warnings: string[];
24
+ warnings:string[];
25
25
  /** Likely existing items found before the mutation committed. */
26
- similarity_advisory?: SimilarityAdvisory;
26
+ similarity_advisory?:SimilarityAdvisory;
27
27
  }
28
28
  /** Implements run copy for the public runtime surface of this module. */
29
- export declare function runCopy(sourceId: string, options: CopyOptions, global: GlobalOptions): Promise<CopyResult>;
29
+ export declare function runCopy(sourceId:string,options:CopyOptions,global:GlobalOptions):Promise<CopyResult>;
@@ -4,4 +4,4 @@
4
4
  */
5
5
  import type { PmCliErrorContext } from "../../core/shared/errors.js";
6
6
  /** Name only declared mutation routes; storage keys never imply CLI flags. */
7
- export declare function resolveCoreFieldRecovery(field: string): Pick<PmCliErrorContext, "recovery" | "nextSteps">;
7
+ export declare function resolveCoreFieldRecovery(field:string):Pick<PmCliErrorContext,"recovery" | "nextSteps">;
@@ -0,0 +1,6 @@
1
+ /** Core item document fields; extension metadata retains its independently declared spelling. */
2
+ export declare const CORE_ITEM_FIELD_KEYS:ReadonlySet<string>;
3
+ /** Normalize only known core option targets; preserve unrelated extension metadata keys verbatim. */
4
+ export declare function resolveCoreUpsertMetadataKey(key:string):string;
5
+ /** Preserve an omitted key while normalizing a supplied core option target. */
6
+ export declare function resolveCoreUpsertMetadataKey(key:string | undefined):string | undefined;
@@ -0,0 +1,2 @@
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="01728cbc-2037-50d2-8318-5f106714b8da")}catch{}})();import{ITEM_PROJECT_CONTEXT_KEYS}from"../../core/shared/constants.js";const CORE_ITEM_FIELD_KEYS=new Set(["id","title","description","type","status","priority","tags","body","deadline","estimated_minutes","acceptance_criteria","definition_of_ready","order","rank","assignee",...ITEM_PROJECT_CONTEXT_KEYS,"affected_version","fixed_version","component","regression","customer_impact","close_reason","completed_at","dependencies","comments","notes","learnings","files","tests","docs","reminders","events","type_options"]);function resolveCoreUpsertMetadataKey(key){if(key===void 0)return;const stored=key.replace(/[A-Z]/gu,letter=>`_${letter.toLowerCase()}`);return CORE_ITEM_FIELD_KEYS.has(stored)?stored:key}export{CORE_ITEM_FIELD_KEYS,resolveCoreUpsertMetadataKey};
2
+ //# sourceMappingURL=core-item-fields.js.map