@unbrained/pm-cli 2026.8.15 → 2026.8.16

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 (98) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +26 -9
  3. package/dist/cli/error-guidance.d.ts +5 -0
  4. package/dist/cli/error-guidance.js +15 -2
  5. package/dist/cli/register-history-author.js +16 -11
  6. package/dist/cli-bundle/bundle-manifest.json +142 -142
  7. package/dist/cli-bundle/chunks/{chunk-KIEGUBYQ.js → chunk-47OQEOQB.js} +2 -2
  8. package/dist/cli-bundle/chunks/{chunk-WLPDLNEZ.js → chunk-73UGEBRS.js} +2 -2
  9. package/dist/cli-bundle/chunks/{chunk-QHPCJWEJ.js → chunk-HCIYWD6M.js} +34 -34
  10. package/dist/cli-bundle/chunks/{chunk-J42EGKDK.js → chunk-I2LUWWR5.js} +2 -2
  11. package/dist/cli-bundle/chunks/{chunk-KLKYLSDX.js → chunk-IC5W2T34.js} +2 -2
  12. package/dist/cli-bundle/chunks/{chunk-AIM6VT2N.js → chunk-PANOOBIS.js} +2 -2
  13. package/dist/cli-bundle/chunks/{chunk-MEM2ZS3O.js → chunk-RIS565OA.js} +2 -2
  14. package/dist/cli-bundle/chunks/{chunk-24GAV7XL.js → chunk-TK6N7HGM.js} +2 -2
  15. package/dist/cli-bundle/chunks/chunk-TOFG2URD.js +197 -0
  16. package/dist/cli-bundle/chunks/{chunk-LJHOAVGI.js → chunk-URW4QRMI.js} +47 -41
  17. package/dist/cli-bundle/chunks/{register-list-query-CT3LFDDN.js → register-list-query-EYCXHZAG.js} +2 -2
  18. package/dist/cli-bundle/chunks/{register-mutation-NWEVA5YS.js → register-mutation-7YVIG54J.js} +4 -4
  19. package/dist/cli-bundle/chunks/{register-operations-AHIAG5KM.js → register-operations-KGDNRMCL.js} +2 -2
  20. package/dist/cli-bundle/chunks/{register-setup-ZJZFVAKE.js → register-setup-NVXBOD5I.js} +2 -2
  21. package/dist/cli-bundle/focused-chunks/{chunk-KTKH4IMG.js → chunk-4JPEBFFC.js} +2 -2
  22. package/dist/cli-bundle/focused-chunks/chunk-5NMFSX26.js +155 -0
  23. package/dist/cli-bundle/focused-chunks/{chunk-ZMFXQ7VF.js → chunk-6ROKKT4X.js} +2 -2
  24. package/dist/cli-bundle/focused-chunks/{chunk-OKA6ELTL.js → chunk-725JSCMP.js} +2 -2
  25. package/dist/cli-bundle/focused-chunks/{chunk-6XKF3PGV.js → chunk-C7JUBRFP.js} +2 -2
  26. package/dist/cli-bundle/focused-chunks/{chunk-KLVUMNXJ.js → chunk-CODV5LUT.js} +2 -2
  27. package/dist/cli-bundle/focused-chunks/chunk-DQ6SMTBF.js +2 -0
  28. package/dist/cli-bundle/focused-chunks/chunk-HAACPSUW.js +2 -0
  29. package/dist/cli-bundle/focused-chunks/{chunk-EXZA4257.js → chunk-J4UFYHOD.js} +2 -2
  30. package/dist/cli-bundle/focused-chunks/{chunk-7NJ4QYQ2.js → chunk-JX5Z344Q.js} +2 -2
  31. package/dist/cli-bundle/focused-chunks/{chunk-PUISBOPP.js → chunk-L4RDYBIQ.js} +2 -2
  32. package/dist/cli-bundle/focused-chunks/{chunk-NSPYTG6G.js → chunk-NJ5RLEFD.js} +2 -2
  33. package/dist/cli-bundle/focused-chunks/{chunk-KT5XMYSX.js → chunk-QYZERYR5.js} +2 -2
  34. package/dist/cli-bundle/focused-chunks/{chunk-M67F5AIN.js → chunk-SSNDYZTM.js} +2 -2
  35. package/dist/cli-bundle/focused-chunks/{chunk-ITAUHSO6.js → chunk-T46KLOIB.js} +45 -45
  36. package/dist/cli-bundle/focused-chunks/{chunk-WTSER4WJ.js → chunk-TZATVC4G.js} +2 -2
  37. package/dist/cli-bundle/focused-chunks/chunk-WY3WRPVN.js +2 -0
  38. package/dist/cli-bundle/main.js +10 -10
  39. package/dist/cli-bundle/sdk-authoring.js +1 -1
  40. package/dist/cli-bundle/sdk-contracts.js +1 -1
  41. package/dist/cli-bundle/sdk-core.js +27 -27
  42. package/dist/cli-bundle/sdk-governance.js +1 -1
  43. package/dist/cli-bundle/sdk-graph.js +1 -1
  44. package/dist/cli-bundle/sdk-merge.js +32 -32
  45. package/dist/cli-bundle/sdk-query.js +1 -1
  46. package/dist/cli-bundle/sdk-runtime.js +1 -1
  47. package/dist/cli-bundle/sdk-testing.js +1 -1
  48. package/dist/cli-bundle/sdk.js +2 -2
  49. package/dist/core/history/workspace-history.js +32 -10
  50. package/dist/core/output/output.js +6 -3
  51. package/dist/core/shared/errors.d.ts +2 -0
  52. package/dist/core/shared/errors.js +2 -2
  53. package/dist/core/store/item-store.js +28 -2
  54. package/dist/sdk/agent/refusal-reachability.d.ts +10 -2
  55. package/dist/sdk/agent/refusal-reachability.js +71 -3
  56. package/dist/sdk/author-attribution.d.ts +56 -11
  57. package/dist/sdk/author-attribution.js +174 -50
  58. package/dist/sdk/cli-contracts/flag-contracts.js +5 -2
  59. package/dist/sdk/cli-contracts/tool-parameter-tables.js +9 -2
  60. package/dist/sdk/cli-contracts/tool-schema.js +12 -4
  61. package/dist/sdk/completion.js +11 -4
  62. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +38 -14
  63. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +38 -2
  64. package/dist/sdk/governance/coverage-assurance.d.ts +24 -0
  65. package/dist/sdk/governance/coverage-assurance.js +61 -0
  66. package/dist/sdk/governance/extension-host-version.js +20 -9
  67. package/dist/sdk/index.d.ts +2 -1
  68. package/dist/sdk/index.js +4 -3
  69. package/dist/sdk/read-output-contracts.js +5 -3
  70. package/dist/sdk/runtime.d.ts +2 -5
  71. package/dist/sdk/runtime.js +3 -2
  72. package/docs/READ_OUTPUT_CONTRACTS.md +7 -1
  73. package/docs/RELEASING.md +13 -7
  74. package/docs/SDK_CONTEXT_INTEGRITY.md +33 -5
  75. package/docs/SDK_CONTEXT_TRUTH_CONTRACTS.md +13 -5
  76. package/marketplace.json +2 -2
  77. package/package.json +1 -1
  78. package/packages/pm-beads/package.json +1 -1
  79. package/packages/pm-calendar/package.json +1 -1
  80. package/packages/pm-command-kit/package.json +1 -1
  81. package/packages/pm-digital-twin/package.json +1 -1
  82. package/packages/pm-governance-audit/package.json +1 -1
  83. package/packages/pm-guide-shell/package.json +1 -1
  84. package/packages/pm-kanban/package.json +1 -1
  85. package/packages/pm-lifecycle-hooks/package.json +1 -1
  86. package/packages/pm-linked-test-adapters/package.json +1 -1
  87. package/packages/pm-search-advanced/package.json +1 -1
  88. package/packages/pm-templates/package.json +1 -1
  89. package/packages/pm-todos/package.json +1 -1
  90. package/packages/pm-vcs/package.json +1 -1
  91. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  92. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  93. package/sdk/public-surface.json +131 -16
  94. package/dist/cli-bundle/chunks/chunk-DSWDLTDR.js +0 -197
  95. package/dist/cli-bundle/focused-chunks/chunk-4X57RE4U.js +0 -2
  96. package/dist/cli-bundle/focused-chunks/chunk-QLNMCESQ.js +0 -155
  97. package/dist/cli-bundle/focused-chunks/chunk-SLKC6QLJ.js +0 -2
  98. package/dist/cli-bundle/focused-chunks/chunk-U65UC4G3.js +0 -2
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @module sdk/governance/coverage-assurance
3
+ *
4
+ * Provides exact integer coverage assurance for repository and package gates.
5
+ */
6
+ /** Coverage metrics required by the exact repository quality contract. */
7
+
8
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="340305b6-e3c8-5daa-bfbe-4a9c62a6d039")}catch(e){}}();
9
+ export const PM_EXACT_COVERAGE_METRICS = [
10
+ "lines",
11
+ "branches",
12
+ "functions",
13
+ "statements",
14
+ ];
15
+ /** Require a coverage report entry to expose an object-shaped metric map. */
16
+ function assertCoverageEntry(file, entry) {
17
+ if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
18
+ throw new TypeError(`Coverage entry for ${file} must be an object.`);
19
+ }
20
+ }
21
+ /** Return exact validated counts for one required metric. */
22
+ function coverageCounts(file, metric, value) {
23
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
24
+ throw new TypeError(`Coverage entry ${file} has invalid ${metric} counts.`);
25
+ }
26
+ const counts = value;
27
+ if (typeof counts.covered !== "number" ||
28
+ typeof counts.total !== "number" ||
29
+ !Number.isInteger(counts.covered) ||
30
+ !Number.isInteger(counts.total) ||
31
+ counts.covered < 0 ||
32
+ counts.total < counts.covered) {
33
+ throw new TypeError(`Coverage entry ${file} has invalid ${metric} counts.`);
34
+ }
35
+ return { covered: counts.covered, total: counts.total };
36
+ }
37
+ /** Return exact uncovered counts for every summary entry and required metric. */
38
+ export function findCoverageDeficits(summary) {
39
+ if (typeof summary !== "object" ||
40
+ summary === null ||
41
+ Array.isArray(summary)) {
42
+ throw new TypeError("Coverage summary must be a JSON object.");
43
+ }
44
+ if (!("total" in summary)) {
45
+ throw new TypeError("Coverage summary is missing the total entry.");
46
+ }
47
+ const deficits = [];
48
+ for (const [file, entry] of Object.entries(summary)) {
49
+ assertCoverageEntry(file, entry);
50
+ for (const metric of PM_EXACT_COVERAGE_METRICS) {
51
+ const counts = coverageCounts(file, metric, entry[metric]);
52
+ const uncovered = counts.total - counts.covered;
53
+ if (uncovered > 0) {
54
+ deficits.push({ file, metric, uncovered, ...counts });
55
+ }
56
+ }
57
+ }
58
+ return deficits;
59
+ }
60
+ //# sourceMappingURL=coverage-assurance.js.map
61
+ //# debugId=340305b6-e3c8-5daa-bfbe-4a9c62a6d039
@@ -5,7 +5,7 @@
5
5
  * package-manager layout skew is visible before SDK singleton state diverges.
6
6
  */
7
7
 
8
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b55cafdc-9a3b-5386-bd85-cbd2311a5933")}catch(e){}}();
8
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c21b1a94-1d80-57c0-b090-c4831fc505a2")}catch(e){}}();
9
9
  import fs from "node:fs/promises";
10
10
  import { createRequire } from "node:module";
11
11
  import path from "node:path";
@@ -48,17 +48,27 @@ async function readPackageVersion(packageJsonPath) {
48
48
  return undefined;
49
49
  }
50
50
  }
51
+ /** Resolve symlink and platform alias segments without failing soft scans for absent hosts. */
52
+ async function canonicalPath(candidate) {
53
+ try {
54
+ return await fs.realpath(candidate);
55
+ }
56
+ catch {
57
+ return path.resolve(candidate);
58
+ }
59
+ }
51
60
  /** Scan the host plus the nearest pm-cli package resolvable by every loaded extension. */
52
61
  export async function scanExtensionHostVersions(loadedExtensions, workspaceRoot, hostPackageRoot = resolvePmPackageRootFromModule(import.meta.url, [
53
62
  "../../..",
54
63
  ])) {
55
- const hostPackageJson = path.join(hostPackageRoot, "package.json");
64
+ const canonicalWorkspaceRoot = await canonicalPath(workspaceRoot);
65
+ const hostPackageJson = await canonicalPath(path.join(hostPackageRoot, "package.json"));
56
66
  const hostVersion = await readPackageVersion(hostPackageJson);
57
67
  const copies = new Map();
58
68
  if (hostVersion !== undefined) {
59
- copies.set(path.resolve(hostPackageJson), {
69
+ copies.set(hostPackageJson, {
60
70
  version: hostVersion,
61
- path: displayPackagePath(hostPackageJson, workspaceRoot),
71
+ path: displayPackagePath(hostPackageJson, canonicalWorkspaceRoot),
62
72
  layout: "host",
63
73
  consumers: ["pm-cli-host"],
64
74
  });
@@ -66,10 +76,11 @@ export async function scanExtensionHostVersions(loadedExtensions, workspaceRoot,
66
76
  for (const extension of loadedExtensions) {
67
77
  try {
68
78
  const resolved = createRequire(extension.entry_path).resolve("@unbrained/pm-cli/package.json");
69
- const version = await readPackageVersion(resolved);
79
+ const canonicalPackageJson = await canonicalPath(resolved);
80
+ const version = await readPackageVersion(canonicalPackageJson);
70
81
  if (version === undefined)
71
82
  continue;
72
- const key = path.resolve(resolved);
83
+ const key = canonicalPackageJson;
73
84
  const existing = copies.get(key);
74
85
  if (existing) {
75
86
  if (!existing.consumers.includes(extension.name)) {
@@ -80,8 +91,8 @@ export async function scanExtensionHostVersions(loadedExtensions, workspaceRoot,
80
91
  }
81
92
  copies.set(key, {
82
93
  version,
83
- path: displayPackagePath(resolved, workspaceRoot),
84
- layout: dependencyLayout(resolved),
94
+ path: displayPackagePath(canonicalPackageJson, canonicalWorkspaceRoot),
95
+ layout: dependencyLayout(canonicalPackageJson),
85
96
  consumers: [extension.name],
86
97
  });
87
98
  }
@@ -102,4 +113,4 @@ export async function scanExtensionHostVersions(loadedExtensions, workspaceRoot,
102
113
  };
103
114
  }
104
115
  //# sourceMappingURL=extension-host-version.js.map
105
- //# debugId=b55cafdc-9a3b-5386-bd85-cbd2311a5933
116
+ //# debugId=c21b1a94-1d80-57c0-b090-c4831fc505a2
@@ -7,7 +7,7 @@ export { PM_COMMAND_VISIBILITY_CONTRACTS, PM_MCP_PROMPT_CONTRACTS, PM_MCP_RESOUR
7
7
  export * from "./agent-session-context.js";
8
8
  export type { PmCommandVisibilityContract, PmCommandVisibilityTier, PmMcpPromptArgumentContract, PmMcpPromptContract, PmMcpResourceContract, PmMcpToolProfile, } from "./agent-capability-contracts.js";
9
9
  export { isErrnoError, limitAnnotationEntries, parseAnnotationTextInput, readAnnotationEntries, normalizeAnnotationTransportOptions, resolveAnnotationInput, resolveAnnotationIndex, runAnnotationCommand, wrapOwnershipConflict, type AnnotationCommandConfig, type AnnotationCommandOptions, type AnnotationCommandResult, type AnnotationEntry, type AnnotationInput, type AnnotationHistoryRestoration, type AnnotationMutationReceipt, type AnnotationOmissionReceipt, type AnnotationSourceOptions, type OwnershipConflictGuidance, } from "./annotations.js";
10
- export { acknowledgeUnknownAuthorHistoryEvents, acknowledgeUnknownAuthorHistoryEventsFromTransport, inspectHistoryAuthorStream, parseUnknownAuthorHistoryEventCoordinates, resolveUnknownAuthorAcknowledgmentSelector, scanHistoryAuthorAttribution, type AcknowledgeUnknownAuthorEventsOptions, type HistoryAuthorAttributionScan, type UnknownAuthorHistoryEvent, } from "./author-attribution.js";
10
+ export { acknowledgeUnknownAuthorHistoryEvents, acknowledgeUnknownAuthorHistoryEventsFromTransport, inspectHistoryAuthorStream, parseUnknownAuthorHistoryEventCoordinates, planUnknownAuthorHistoryAcknowledgment, resolveUnknownAuthorAcknowledgmentSelector, scanHistoryAuthorAttribution, type AcknowledgeUnknownAuthorEventsOptions, type HistoryAuthorAttributionScan, type UnknownAuthorAcknowledgmentPlan, type UnknownAuthorAcknowledgmentPlanCoordinate, type UnknownAuthorAcknowledgmentResult, type UnknownAuthorHistoryEvent, } from "./author-attribution.js";
11
11
  export { BUILTIN_CORPUS_SHAPES, PM_CORPUS_SHAPE_SCHEMA, buildCorpusShapeItemPlan, createCorpusShapeMeasurement, defineCorpusShape, listBuiltinCorpusShapes, measureCorpusShapePlan, resolveBuiltinCorpusShape, type BuiltinCorpusShapeName, type CorpusShape, type CorpusShapeEdgeWeight, type CorpusShapeItemPlan, type CorpusShapeMeasurement, type CorpusShapeProfile, } from "./corpus-shape.js";
12
12
  export * from "./core-governance.js";
13
13
  export { createPmCliProgram } from "./cli-program.js";
@@ -22,6 +22,7 @@ export * from "./agent/command-suggestions.js";
22
22
  export * from "./agent/item-addressing.js";
23
23
  export * from "./agent/create-option-policy.js";
24
24
  export { runGc, type GcCheckpointsSummary, type GcLocksSummary, } from "./governance/gc.js";
25
+ export { PM_EXACT_COVERAGE_METRICS, findCoverageDeficits, type PmCoverageDeficit, type PmExactCoverageMetric, } from "./governance/coverage-assurance.js";
25
26
  export { _testOnlyHealthCommand, runHealth, type HealthCheck, } from "./governance/health.js";
26
27
  export { _testOnlyValidateCommand, projectValidateCounts, runValidate, type ValidateCheck, type ValidateCountsFixesSummary, type ValidateCountsResult, type ValidateFixesSummary, type ValidateMutationServices, } from "./governance/validate.js";
27
28
  export { runExtension, type ExtensionCommandAction } from "./extension.js";
package/dist/sdk/index.js CHANGED
@@ -4,11 +4,11 @@
4
4
  * Defines public SDK APIs and package-author helpers for Index.
5
5
  */
6
6
 
7
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a05170b2-a48d-5275-ac04-aafc9f8315b2")}catch(e){}}();
7
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9ec91496-fc1e-5be5-a8e8-145d884b0ef7")}catch(e){}}();
8
8
  export { PM_COMMAND_VISIBILITY_CONTRACTS, PM_MCP_PROMPT_CONTRACTS, PM_MCP_RESOURCE_CONTRACTS, PM_MCP_TOOL_COMMAND_CONTRACTS, listPmCommandsForTier, listPmMcpToolsForProfile, renderPmCommandVisibilityMarkdown, resolvePmCommandVisibilityTier, } from "./agent-capability-contracts.js";
9
9
  export * from "./agent-session-context.js";
10
10
  export { isErrnoError, limitAnnotationEntries, parseAnnotationTextInput, readAnnotationEntries, normalizeAnnotationTransportOptions, resolveAnnotationInput, resolveAnnotationIndex, runAnnotationCommand, wrapOwnershipConflict, } from "./annotations.js";
11
- export { acknowledgeUnknownAuthorHistoryEvents, acknowledgeUnknownAuthorHistoryEventsFromTransport, inspectHistoryAuthorStream, parseUnknownAuthorHistoryEventCoordinates, resolveUnknownAuthorAcknowledgmentSelector, scanHistoryAuthorAttribution, } from "./author-attribution.js";
11
+ export { acknowledgeUnknownAuthorHistoryEvents, acknowledgeUnknownAuthorHistoryEventsFromTransport, inspectHistoryAuthorStream, parseUnknownAuthorHistoryEventCoordinates, planUnknownAuthorHistoryAcknowledgment, resolveUnknownAuthorAcknowledgmentSelector, scanHistoryAuthorAttribution, } from "./author-attribution.js";
12
12
  export { BUILTIN_CORPUS_SHAPES, PM_CORPUS_SHAPE_SCHEMA, buildCorpusShapeItemPlan, createCorpusShapeMeasurement, defineCorpusShape, listBuiltinCorpusShapes, measureCorpusShapePlan, resolveBuiltinCorpusShape, } from "./corpus-shape.js";
13
13
  export * from "./core-governance.js";
14
14
  export { createPmCliProgram } from "./cli-program.js";
@@ -23,6 +23,7 @@ export * from "./agent/command-suggestions.js";
23
23
  export * from "./agent/item-addressing.js";
24
24
  export * from "./agent/create-option-policy.js";
25
25
  export { runGc, } from "./governance/gc.js";
26
+ export { PM_EXACT_COVERAGE_METRICS, findCoverageDeficits, } from "./governance/coverage-assurance.js";
26
27
  export { _testOnlyHealthCommand, runHealth, } from "./governance/health.js";
27
28
  export { _testOnlyValidateCommand, projectValidateCounts, runValidate, } from "./governance/validate.js";
28
29
  export { runExtension } from "./extension.js";
@@ -151,4 +152,4 @@ export * from "./governance.js";
151
152
  export * from "./query.js";
152
153
  export * from "./testing.js";
153
154
  //# sourceMappingURL=index.js.map
154
- //# debugId=a05170b2-a48d-5275-ac04-aafc9f8315b2
155
+ //# debugId=9ec91496-fc1e-5be5-a8e8-145d884b0ef7
@@ -5,7 +5,7 @@
5
5
  * surface without coupling package authors to command-specific option names.
6
6
  */
7
7
 
8
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f9774018-a5b7-505e-a8ea-cba08392afeb")}catch(e){}}();
8
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e9621264-0180-53cf-862f-b59640b971da")}catch(e){}}();
9
9
  import { EXIT_CODE } from "../core/shared/constants.js";
10
10
  import { PmCliError } from "../core/shared/errors.js";
11
11
  import { compactReadOutputToBudget, estimateReadOutputTokens, updateReadOutputReceiptEstimate, } from "./read-output-budget.js";
@@ -499,7 +499,9 @@ export function resolveReadOutputDimensions(command, options) {
499
499
  const encoding = resolveEncodingValue(options.outputFormat ?? options.output_format, legacyByDimension.encoding);
500
500
  const explicitCost = resolveCostValue(options.outputBudget ?? options.output_budget, legacyByDimension.cost);
501
501
  const completeResultIntent = command.trim().toLowerCase().replaceAll(/\s+/gu, " ").split(" ")[0] ===
502
- "list-all" || legacyByDimension.amount?.flag === "--no-truncate";
502
+ "list-all" ||
503
+ legacyByDimension.amount?.flag === "--no-truncate" ||
504
+ legacyByDimension.include?.flag === "--full";
503
505
  const budget = resolvePmCommandOutputBudget(command, {
504
506
  generateFallback: true,
505
507
  });
@@ -1056,4 +1058,4 @@ export function resolveReadOutputEncoding(command, options) {
1056
1058
  : undefined;
1057
1059
  }
1058
1060
  //# sourceMappingURL=read-output-contracts.js.map
1059
- //# debugId=f9774018-a5b7-505e-a8ea-cba08392afeb
1061
+ //# debugId=e9621264-0180-53cf-862f-b59640b971da
@@ -33,7 +33,7 @@ import { type GcCommandOptions, type GcResult } from "./governance/gc.js";
33
33
  import { type HealthResult, type RunHealthOptions } from "./governance/health.js";
34
34
  import { type ValidateCommandOptions, type ValidateCountsResult, type ValidateResult } from "./governance/validate.js";
35
35
  import { type ExtensionCommandOptions, type ExtensionCommandResult } from "./extension.js";
36
- import { type AcknowledgeUnknownAuthorEventsOptions } from "./author-attribution.js";
36
+ import { type AcknowledgeUnknownAuthorEventsOptions, type UnknownAuthorAcknowledgmentResult } from "./author-attribution.js";
37
37
  import { type HistoryCompactBulkCommandOptions, type HistoryCompactBulkResult, type HistoryCompactCommandOptions, type HistoryCompactResult } from "./history-compact.js";
38
38
  import { type HistoryRedactCommandOptions, type HistoryRedactResult } from "./history-redact.js";
39
39
  import { type HistoryRepairAllResult, type HistoryRepairCommandOptions, type HistoryRepairResult } from "./history-repair.js";
@@ -250,10 +250,7 @@ export declare class PmClient {
250
250
  /** Compact an explicit or policy-selected set of history streams. */
251
251
  historyCompactBulk(options: HistoryCompactBulkCommandOptions): Promise<HistoryCompactBulkResult>;
252
252
  /** Disposition immutable unknown-author events through append-only audit history. */
253
- historyAuthorAcknowledge(options: AcknowledgeUnknownAuthorEventsOptions): Promise<{
254
- acknowledged: number;
255
- history_path: string;
256
- }>;
253
+ historyAuthorAcknowledge(options: AcknowledgeUnknownAuthorEventsOptions): Promise<UnknownAuthorAcknowledgmentResult>;
257
254
  /** Run any typed plan workflow primitive through the shared CLI/MCP engine. */
258
255
  plan(subcommand: PlanSubcommand, id?: string, options?: PlanCommandOptions, stepRef?: string, reorderTo?: number): Promise<PlanCommandResult>;
259
256
  /** Create a durable plan with optional ordered seed steps. */
@@ -4,7 +4,7 @@
4
4
  * Defines public SDK APIs and package-author helpers for Runtime.
5
5
  */
6
6
 
7
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a387cd7a-cb16-5082-80e1-9632ebd02480")}catch(e){}}();
7
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="bedbe090-60c3-5935-a656-da4997cd80f7")}catch(e){}}();
8
8
  export { PM_GITIGNORE_END, PM_GITIGNORE_START, ensurePmGitignore, getPmGitignoreBlock, } from "./workspace.js";
9
9
  export { SEARCH_EXTENSION_FLAG_DEFINITIONS } from "./extension-contracts.js";
10
10
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -442,6 +442,7 @@ export class PmClient {
442
442
  return this.runTyped("history-author-acknowledge", {
443
443
  historyEvent: (options.events ?? []).map((event) => `${event.item_id}:${String(event.line)}`),
444
444
  allActionable: options.all_actionable === true,
445
+ dryRun: options.dry_run === true, planFingerprint: options.plan_fingerprint, limit: options.coordinate_limit,
445
446
  attributedAuthor: options.attributed_author,
446
447
  reviewer: options.reviewer,
447
448
  reason: options.reason,
@@ -1932,4 +1933,4 @@ async function loadWorkspaceExtensionRegistrations(pmRoot, settings, cwd) {
1932
1933
  }
1933
1934
  }
1934
1935
  //# sourceMappingURL=runtime.js.map
1935
- //# debugId=a387cd7a-cb16-5082-80e1-9632ebd02480
1936
+ //# debugId=bedbe090-60c3-5935-a656-da4997cd80f7
@@ -1,6 +1,6 @@
1
1
  # Universal Read Output Contracts
2
2
 
3
- Tracker references: [pm-hb7ug8](../.agents/pm/features/pm-hb7ug8.toon), [pm-cxr0jb](../.agents/pm/features/pm-cxr0jb.toon), [pm-hid9g1](../.agents/pm/features/pm-hid9g1.toon), [pm-h8tpeh](../.agents/pm/features/pm-h8tpeh.toon), [pm-5t33or](../.agents/pm/features/pm-5t33or.toon), [pm-sb0tns](../.agents/pm/issues/pm-sb0tns.toon), [pm-gjjurs](../.agents/pm/issues/pm-gjjurs.toon), [pm-eugaqy](../.agents/pm/issues/pm-eugaqy.toon), [pm-jt8aa2](../.agents/pm/issues/pm-jt8aa2.toon), [pm-kyjdne](../.agents/pm/issues/pm-kyjdne.toon), [pm-8nev0o](../.agents/pm/issues/pm-8nev0o.toon), [pm-e5gl05](../.agents/pm/issues/pm-e5gl05.toon), and [pm-cha95z](../.agents/pm/tasks/pm-cha95z.toon).
3
+ Tracker references: [pm-hb7ug8](../.agents/pm/features/pm-hb7ug8.toon), [pm-cxr0jb](../.agents/pm/features/pm-cxr0jb.toon), [pm-hid9g1](../.agents/pm/features/pm-hid9g1.toon), [pm-h8tpeh](../.agents/pm/features/pm-h8tpeh.toon), [pm-5t33or](../.agents/pm/features/pm-5t33or.toon), [pm-sb0tns](../.agents/pm/issues/pm-sb0tns.toon), [pm-gjjurs](../.agents/pm/issues/pm-gjjurs.toon), [pm-eugaqy](../.agents/pm/issues/pm-eugaqy.toon), [pm-jt8aa2](../.agents/pm/issues/pm-jt8aa2.toon), [pm-kyjdne](../.agents/pm/issues/pm-kyjdne.toon), [pm-8nev0o](../.agents/pm/issues/pm-8nev0o.toon), [pm-e5gl05](../.agents/pm/issues/pm-e5gl05.toon), [pm-cha95z](../.agents/pm/tasks/pm-cha95z.toon), and [pm-2qvq7a](../.agents/pm/issues/pm-2qvq7a.toon).
4
4
 
5
5
  ## Agent Quick Context
6
6
 
@@ -122,6 +122,12 @@ list-family `--no-truncate` imply an unbounded cost dimension when the caller
122
122
  does not supply `--output-budget`; they cannot silently return a budget-trimmed
123
123
  subset while claiming to return every matched row. An explicit canonical
124
124
  budget still has precedence and may request a bounded result deliberately.
125
+ The same SDK-native rule applies to every declared complete-result spelling,
126
+ including `contracts --full`: explicit completeness defeats only the implicit
127
+ default ceiling. If an explicit caller budget cannot retain any useful domain
128
+ result, the CLI still prints the parseable omission receipt but exits 2; a
129
+ consumer therefore cannot interpret the missing command or action arrays as a
130
+ successful empty contract.
125
131
 
126
132
  ```bash
127
133
  pm list-open --output-include id,title,status --output-limit 10
package/docs/RELEASING.md CHANGED
@@ -25,7 +25,9 @@ Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon),
25
25
  classification [pm-dqtzva](../.agents/pm/issues/pm-dqtzva.toon).
26
26
  The local/hosted gate selection contract is tracked by
27
27
  [pm-ei6x66](../.agents/pm/tasks/pm-ei6x66.toon). Release-candidate analyzer
28
- provenance is tracked by [pm-u1baah](../.agents/pm/issues/pm-u1baah.toon).
28
+ provenance is tracked by [pm-u1baah](../.agents/pm/issues/pm-u1baah.toon), and
29
+ authoritative blocker-recovery run selection by
30
+ [pm-db8onn](../.agents/pm/issues/pm-db8onn.toon).
29
31
 
30
32
  ## Version Policy
31
33
 
@@ -76,9 +78,10 @@ Policy:
76
78
  created, a non-`github-actions[bot]` closure of the exact bot-created
77
79
  `Auto Release blocked` issue on the same UTC day triggers one preparation
78
80
  retry
79
- - if today's tag already exists, blocker closure reruns and watches the exact
80
- tag-driven Release workflow instead of invoking release preparation or
81
- creating an ordinal replacement; an already-successful run is recorded as
81
+ - if today's tag already exists, blocker closure bypasses release-preparation
82
+ provenance, dependency installation, and build work, then selects immutable
83
+ Release evidence across both tag-push and guarded workflow-dispatch runs; a
84
+ completed success is authoritative over stale failures and is recorded as
82
85
  recovered without republishing
83
86
  - release preparation must pass all quality and compatibility gates before commit+tag push
84
87
  - before dependency installation or build, auto-release verifies that the
@@ -92,9 +95,12 @@ Policy:
92
95
  - when scheduled failures continue across multiple UTC days, auto-release supersedes a stale open blocker with a fresh current-day blocker so same-day retry detection follows the latest scheduled failure
93
96
  - closing the exact bot-created `Auto Release blocked: scheduled run failed`
94
97
  issue as a maintainer or agent records a same-day retry marker, then either
95
- retries preparation when no tag exists or reruns the exact existing tag's
96
- Release workflow; it comments with the recovered tag on success and reopens
97
- the same issue on failure. A second close on the same UTC day is refused
98
+ retries preparation when no tag exists or watches an active exact-tag Release
99
+ workflow. If only failed or missing evidence exists, it dispatches the
100
+ reviewed current `release.yml` from `main` with the immutable tag input; it
101
+ never reruns historical workflow code. It comments with the recovered tag on
102
+ success and reopens the same issue on failure. A second close on the same UTC
103
+ day is refused
98
104
  before release mutation and reported as `retry_already_attempted`, and
99
105
  workflow cleanup closures by `github-actions[bot]` are ignored.
100
106
  - after a scheduled run publishes a tag and the downstream release workflow succeeds, auto-release closes any open `Auto Release blocked` issue so the GitHub tracker reflects current release health
@@ -1,6 +1,6 @@
1
1
  # SDK Context Integrity
2
2
 
3
- Tracker: [pm-0k19l7](../.agents/pm/issues/pm-0k19l7.toon), [pm-9stazf](../.agents/pm/issues/pm-9stazf.toon), [pm-tu71](../.agents/pm/issues/pm-tu71.toon), [pm-0xmajx](../.agents/pm/issues/pm-0xmajx.toon), [pm-7rrqsk](../.agents/pm/issues/pm-7rrqsk.toon), [pm-ety1qc](../.agents/pm/issues/pm-ety1qc.toon), [pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon), [pm-5y05kq](../.agents/pm/issues/pm-5y05kq.toon), [pm-gjjurs](../.agents/pm/issues/pm-gjjurs.toon), [pm-h97qxd](../.agents/pm/issues/pm-h97qxd.toon), [pm-h06944](../.agents/pm/issues/pm-h06944.toon), [pm-5t33or](../.agents/pm/features/pm-5t33or.toon), [pm-in23qu](../.agents/pm/issues/pm-in23qu.toon), [pm-h8tpeh](../.agents/pm/features/pm-h8tpeh.toon), [pm-okgxwa](../.agents/pm/issues/pm-okgxwa.toon), [pm-22rzjp](../.agents/pm/issues/pm-22rzjp.toon), [pm-76fkpp](../.agents/pm/issues/pm-76fkpp.toon), [pm-igdvfq](../.agents/pm/issues/pm-igdvfq.toon), [pm-643e0k](../.agents/pm/issues/pm-643e0k.toon), and [pm-larv4r](../.agents/pm/issues/pm-larv4r.toon).
3
+ Tracker: [pm-0k19l7](../.agents/pm/issues/pm-0k19l7.toon), [pm-9stazf](../.agents/pm/issues/pm-9stazf.toon), [pm-tu71](../.agents/pm/issues/pm-tu71.toon), [pm-0xmajx](../.agents/pm/issues/pm-0xmajx.toon), [pm-7rrqsk](../.agents/pm/issues/pm-7rrqsk.toon), [pm-ety1qc](../.agents/pm/issues/pm-ety1qc.toon), [pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon), [pm-5y05kq](../.agents/pm/issues/pm-5y05kq.toon), [pm-gjjurs](../.agents/pm/issues/pm-gjjurs.toon), [pm-h97qxd](../.agents/pm/issues/pm-h97qxd.toon), [pm-h06944](../.agents/pm/issues/pm-h06944.toon), [pm-5t33or](../.agents/pm/features/pm-5t33or.toon), [pm-in23qu](../.agents/pm/issues/pm-in23qu.toon), [pm-h8tpeh](../.agents/pm/features/pm-h8tpeh.toon), [pm-okgxwa](../.agents/pm/issues/pm-okgxwa.toon), [pm-22rzjp](../.agents/pm/issues/pm-22rzjp.toon), [pm-76fkpp](../.agents/pm/issues/pm-76fkpp.toon), [pm-igdvfq](../.agents/pm/issues/pm-igdvfq.toon), [pm-643e0k](../.agents/pm/issues/pm-643e0k.toon), [pm-larv4r](../.agents/pm/issues/pm-larv4r.toon), [pm-mcxk8v](../.agents/pm/issues/pm-mcxk8v.toon), and [pm-2zkvxm](../.agents/pm/issues/pm-2zkvxm.toon).
4
4
 
5
5
  ## Agent Quick Context
6
6
 
@@ -81,8 +81,13 @@ text. `verifyPmRecoveryReferences` accepts obligations derived from real error
81
81
  envelopes and observations produced by executing a retry, resolving a declared
82
82
  command path, or linking prose to an already executed recovery. Its report
83
83
  includes the total obligation set, pass fraction, sorted findings, and stable
84
- coverage buckets for `suggested_retry`, `candidate_command`, `example`, and
85
- `next_step`, including zero-population buckets.
84
+ coverage buckets for `suggested_retry`, `candidate_command`, `example`,
85
+ `next_step`, `migration_hint`, and `restore_with`, including zero-population
86
+ buckets. `derivePmRecoveryReferenceObligations` walks emitted envelopes and
87
+ generated read-output contracts, so tests cannot silently omit a producer
88
+ family. Each obligation declares `recovery`, `replacement`, or
89
+ `behavior_preserving` semantics and its proof must demonstrate the same
90
+ promise.
86
91
 
87
92
  The repository integration corpus drives real CLI refusals, executes the
88
93
  emitted retry in a temporary tracker, compares candidate commands with the
@@ -128,17 +133,32 @@ SDK callers use `fullHistory: true`; MCP callers use `full: true`. The default s
128
133
 
129
134
  ## Author acknowledgment coordinates
130
135
 
131
- CLI, SDK, and MCP use the same selector and coordinate parser for `history-author-acknowledge`. A coordinate is `<item-id>:<line>` or `_workspace:<line>`, with a positive one-based line number. Exactly one of explicit events or `all_actionable` is required.
136
+ CLI, SDK, and MCP use the same selector and coordinate parser for `history-author-acknowledge`. A coordinate is `<item-id>:<line>` or `_workspace:<line>`, with a positive one-based line number. Exactly one of explicit events or `all_actionable` is required. Applying is a two-step operation: dry-run returns a deterministic SHA-256 over the complete, ordered coordinate set and every exact source-line hash; apply requires that fingerprint and refuses stale source or selection drift with `CONFLICT` exit 4 before writing history.
132
137
 
133
138
  ```bash
134
139
  pm history-author-acknowledge \
135
140
  --event _workspace:4 \
141
+ --dry-run
142
+
143
+ pm history-author-acknowledge \
144
+ --event _workspace:4 \
145
+ --plan-fingerprint <sha256-from-preview> \
136
146
  --attributed-author import-agent \
137
147
  --reviewer maintainer \
138
148
  --reason "Verified workspace provenance"
139
149
  ```
140
150
 
141
- The SDK exposes `resolveUnknownAuthorAcknowledgmentSelector` and `parseUnknownAuthorHistoryEventCoordinates` so packages never need a private copy of this grammar. Health and validate map actionable unknown-author warnings directly to this append-only acknowledgment command instead of sending callers through another diagnostic loop.
151
+ Preview coordinates are bounded with `--limit`, but the fingerprint and counts always cover the complete selection. Plans distinguish already acknowledged coordinates, and apply reports `effect`, `no_effect` (exit 6), or `partial_effect` (exit 7). Bulk selection appends only newly actionable rows, while explicit coordinates may append a superseding disposition as described below. The SDK exposes `planUnknownAuthorHistoryAcknowledgment`, `resolveUnknownAuthorAcknowledgmentSelector`, and `parseUnknownAuthorHistoryEventCoordinates` so packages never need a private copy of this grammar. Health and validate map actionable unknown-author warnings directly to this append-only acknowledgment command instead of sending callers through another diagnostic loop.
152
+
153
+ An explicit `--event` selection is also the append-only correction path: if a
154
+ coordinate already has a disposition, preview marks it
155
+ `already_acknowledged`, and fingerprint-bound apply appends a later disposition
156
+ that supersedes the earlier attribution. Recover the original coordinates from
157
+ `context.author_acknowledgment.events` in the applicable
158
+ `history/_workspace.jsonl` record, preview those same coordinates, and apply the
159
+ fresh fingerprint with the corrected author and review evidence. By contrast,
160
+ `--all-actionable` intentionally selects only undispositioned rows; an empty
161
+ bulk selection remains `no_effect` and never repeats existing dispositions.
142
162
 
143
163
  ## Health provider boundary
144
164
 
@@ -152,6 +172,14 @@ That agreement check reads only local history and JSON files: mismatched,
152
172
  missing, or unreadable singleton paths become bounded `history_drift` evidence
153
173
  without enabling embeddings, vector-store access, or any other provider I/O.
154
174
 
175
+ Every SDK operation that requires a valid `_workspace` chain refuses the same
176
+ way when verification fails. The typed `workspace_history_chain_invalid`
177
+ conflict includes `verification_errors` in CLI JSON and SDK error context plus
178
+ an executable `pm history _workspace --verify --json` recovery command. This
179
+ keeps deliberate corruption tests and recoverable tracker drift out of the
180
+ unexpected-runtime-error channel without weakening the fail-closed mutation
181
+ boundary.
182
+
155
183
  Brief and summary check-only health projections use the scalar-only metadata
156
184
  reader. Validation uses collection-bearing metadata for evidence and
157
185
  relationship checks and materializes bodies only when strict history-drift
@@ -5,11 +5,11 @@ Tracker references: [pm-23xkss](../.agents/pm/issues/pm-23xkss.toon) and
5
5
 
6
6
  ## Agent Quick Context
7
7
 
8
- An empty tracker, a missing tracker, and an invalid tracker path are different
9
- states. Likewise, an optional local Git optimization and a drifted installed
10
- configuration are different health findings. The SDK preserves these
11
- distinctions so automation does not infer project truth from an ambiguous empty
12
- array or a generic failed verdict.
8
+ An empty tracker, a missing tracker, an invalid tracker path, and an unreadable
9
+ tracker are different states. Likewise, an optional local Git optimization and
10
+ a drifted installed configuration are different health findings. The SDK
11
+ preserves these distinctions so automation does not infer project truth from an
12
+ ambiguous empty array or a generic failed verdict.
13
13
 
14
14
  ## Metadata Root Diagnostics
15
15
 
@@ -24,6 +24,11 @@ A missing root throws `PmCliError` with exit code `NOT_FOUND`, diagnostic code
24
24
  `tracker_root_missing`, and context reason `missing`. A regular file or other
25
25
  non-directory root throws `PmCliError` with exit code `USAGE`, diagnostic code
26
26
  `tracker_root_not_directory`, and context reason `not_a_directory`.
27
+ An existing root that cannot be enumerated throws `PmCliError` with exit code
28
+ `GENERIC_FAILURE`, diagnostic code `tracker_root_unreadable`, and context reason
29
+ `unreadable`. On POSIX hosts, enumeration requires both read and directory-search
30
+ permission: a root whose mode lacks either permission is unreadable, even when a
31
+ privileged process could bypass those mode bits.
27
32
 
28
33
  Consumers should branch on the stable diagnostic code:
29
34
 
@@ -35,6 +40,9 @@ try {
35
40
  if (error instanceof PmCliError && error.code === "tracker_root_missing") {
36
41
  // Ask the caller to select or initialize a tracker.
37
42
  }
43
+ if (error instanceof PmCliError && error.code === "tracker_root_unreadable") {
44
+ // Repair tracker permissions before trusting any project context.
45
+ }
38
46
  }
39
47
  ```
40
48
 
package/marketplace.json CHANGED
@@ -6,14 +6,14 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
9
- "version": "2026.8.15"
9
+ "version": "2026.8.16"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "pm-claude",
14
14
  "source": "./plugins/pm-claude",
15
15
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
16
- "version": "2026.8.15",
16
+ "version": "2026.8.16",
17
17
  "author": {
18
18
  "name": "unbrained",
19
19
  "url": "https://github.com/unbraind/pm-cli"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-cli",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.10.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-beads",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for importing Beads JSONL records.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-calendar",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for calendar and agenda views.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-command-kit",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm exemplar package for the commands capability: registerCommand, registerFlags, and registerParser.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-digital-twin",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-governance-audit",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for governance audit and normalization workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-guide-shell",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for guide and shell completion workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-kanban",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm archetype package: a complete Kanban continuous-flow profile built on public SDK primitives.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-lifecycle-hooks",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package demonstrating safe lifecycle hook registration.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-linked-test-adapters",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for optional linked-test run management adapters and reporters.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-search-advanced",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for semantic, hybrid, and reindex search workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-templates",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for reusable create templates.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-todos",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for Todo markdown import and export.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-vcs-sdk-exemplar",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Beyond-PM exemplar: a VCS-style changeset workflow built entirely on public pm SDK and extension primitives.",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pm-claude",
3
3
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents (coordinator, delivery-chain, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.",
4
- "version": "2026.8.15",
4
+ "version": "2026.8.16",
5
5
  "author": {
6
6
  "name": "unbrained",
7
7
  "url": "https://github.com/unbraind/pm-cli"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-codex",
3
- "version": "2026.8.15",
3
+ "version": "2026.8.16",
4
4
  "description": "Native Codex integration for pm-cli with bundled MCP tools, skills, commands, and agent workflows.",
5
5
  "author": {
6
6
  "name": "unbrained",