@unbrained/pm-cli 2026.8.8 → 2026.8.9

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 (144) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +19 -0
  3. package/dist/cli-bundle/bundle-manifest.json +154 -154
  4. package/dist/cli-bundle/chunks/chunk-2DTCZXSD.js +13 -0
  5. package/dist/cli-bundle/chunks/{chunk-ALDHXLPS.js → chunk-5JO6R4BS.js} +2 -2
  6. package/dist/cli-bundle/chunks/chunk-5KN4DZYV.js +194 -0
  7. package/dist/cli-bundle/chunks/chunk-EF43KODO.js +2 -0
  8. package/dist/cli-bundle/chunks/{chunk-NUXRRNAB.js → chunk-GMX5YOI3.js} +25 -25
  9. package/dist/cli-bundle/chunks/chunk-HUV2Z7IS.js +28 -0
  10. package/dist/cli-bundle/chunks/{chunk-SQ7QZFQ6.js → chunk-MHBVCUF2.js} +2 -2
  11. package/dist/cli-bundle/chunks/chunk-PYO5GZU6.js +5 -0
  12. package/dist/cli-bundle/chunks/{chunk-CBLA33YK.js → chunk-RJC7TPF4.js} +2 -2
  13. package/dist/cli-bundle/chunks/{chunk-2ZMXX3Q6.js → chunk-YC3UF2IO.js} +64 -64
  14. package/dist/cli-bundle/chunks/{register-list-query-WFZAMJHZ.js → register-list-query-BUE7PTCU.js} +2 -2
  15. package/dist/cli-bundle/chunks/{register-mutation-SOKKOTHQ.js → register-mutation-FC3XLVIK.js} +2 -2
  16. package/dist/cli-bundle/chunks/{register-operations-5XQETS6E.js → register-operations-YH2WAOXU.js} +2 -2
  17. package/dist/cli-bundle/chunks/{register-setup-2HL5ZHMK.js → register-setup-UQDTNTLJ.js} +2 -2
  18. package/dist/cli-bundle/focused-chunks/chunk-2VVP5RAA.js +153 -0
  19. package/dist/cli-bundle/focused-chunks/{chunk-IAS7PMLG.js → chunk-3GSFUDAI.js} +2 -2
  20. package/dist/cli-bundle/focused-chunks/chunk-3WVHTUAW.js +5 -0
  21. package/dist/cli-bundle/focused-chunks/chunk-4H6MVCK3.js +16 -0
  22. package/dist/cli-bundle/focused-chunks/{chunk-ZOLDTUU7.js → chunk-54TZJ4BM.js} +2 -2
  23. package/dist/cli-bundle/focused-chunks/{chunk-YKPE4PPY.js → chunk-5NK5TJ5D.js} +2 -2
  24. package/dist/cli-bundle/focused-chunks/{chunk-ANTMGYLI.js → chunk-6DO4YQWZ.js} +2 -2
  25. package/dist/cli-bundle/focused-chunks/chunk-73FIJONU.js +2 -0
  26. package/dist/cli-bundle/focused-chunks/{chunk-PL2EYDJK.js → chunk-C3GCHDSQ.js} +29 -27
  27. package/dist/cli-bundle/focused-chunks/{chunk-U646T7Z6.js → chunk-JGRSQZJT.js} +3 -3
  28. package/dist/cli-bundle/focused-chunks/{chunk-YSAHYUXX.js → chunk-KNEHLPBF.js} +2 -2
  29. package/dist/cli-bundle/focused-chunks/chunk-MRWVJ3ZG.js +2 -0
  30. package/dist/cli-bundle/focused-chunks/chunk-NL57J7BZ.js +4 -0
  31. package/dist/cli-bundle/focused-chunks/{chunk-DMKOMTTY.js → chunk-P6BBIQRG.js} +2 -2
  32. package/dist/cli-bundle/focused-chunks/{chunk-GWI6YIKJ.js → chunk-PZAGVQNN.js} +2 -2
  33. package/dist/cli-bundle/focused-chunks/chunk-QDAO3XEK.js +14 -0
  34. package/dist/cli-bundle/focused-chunks/{chunk-SM2PJGP3.js → chunk-T4IGQCSY.js} +2 -2
  35. package/dist/cli-bundle/focused-chunks/chunk-U46GQJNY.js +2 -0
  36. package/dist/cli-bundle/focused-chunks/{chunk-TCSAPH33.js → chunk-VRXJSGIT.js} +6 -6
  37. package/dist/cli-bundle/focused-chunks/{chunk-FI6DWU2M.js → chunk-XC2ZW3CJ.js} +2 -2
  38. package/dist/cli-bundle/focused-chunks/chunk-ZG54B4XG.js +2 -0
  39. package/dist/cli-bundle/main.js +2 -2
  40. package/dist/cli-bundle/sdk-authoring.js +1 -1
  41. package/dist/cli-bundle/sdk-contracts.js +1 -1
  42. package/dist/cli-bundle/sdk-core.js +29 -29
  43. package/dist/cli-bundle/sdk-governance.js +1 -1
  44. package/dist/cli-bundle/sdk-graph.js +1 -1
  45. package/dist/cli-bundle/sdk-merge.js +1 -1
  46. package/dist/cli-bundle/sdk-query.js +1 -1
  47. package/dist/cli-bundle/sdk-runtime.js +1 -1
  48. package/dist/cli-bundle/sdk-testing.js +1 -1
  49. package/dist/cli-bundle/sdk.js +2 -2
  50. package/dist/core/diagnostics/remediation.js +12 -2
  51. package/dist/core/history/history.js +13 -4
  52. package/dist/core/item/actionability.d.ts +7 -1
  53. package/dist/core/item/actionability.js +71 -15
  54. package/dist/core/shared/author.d.ts +25 -0
  55. package/dist/core/shared/author.js +114 -9
  56. package/dist/sdk/actionability.d.ts +1 -1
  57. package/dist/sdk/actionability.js +3 -3
  58. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +8 -0
  59. package/dist/sdk/cli-contracts/runtime-contracts.js +17 -2
  60. package/dist/sdk/core-governance.d.ts +1 -1
  61. package/dist/sdk/core-governance.js +3 -3
  62. package/dist/sdk/dependencies.d.ts +2 -0
  63. package/dist/sdk/dependencies.js +7 -6
  64. package/dist/sdk/extension/bundled-catalog.js +19 -6
  65. package/dist/sdk/generated-error-code-catalog.js +38 -2
  66. package/dist/sdk/governance/health.js +29 -10
  67. package/dist/sdk/governance/provenance-health.d.ts +26 -0
  68. package/dist/sdk/governance/provenance-health.js +139 -0
  69. package/dist/sdk/governance/validate.js +13 -8
  70. package/dist/sdk/governance.d.ts +1 -0
  71. package/dist/sdk/governance.js +3 -2
  72. package/dist/sdk/graph/assembly.d.ts +4 -0
  73. package/dist/sdk/graph/assembly.js +22 -2
  74. package/dist/sdk/graph/run.d.ts +2 -0
  75. package/dist/sdk/graph/run.js +3 -2
  76. package/dist/sdk/lifecycle/close.js +13 -8
  77. package/dist/sdk/lifecycle/create.js +6 -12
  78. package/dist/sdk/lifecycle/plan.js +6 -3
  79. package/dist/sdk/lifecycle/update.js +6 -20
  80. package/dist/sdk/merge/driver.d.ts +2 -1
  81. package/dist/sdk/merge/driver.js +7 -4
  82. package/dist/sdk/merge/install.js +3 -3
  83. package/dist/sdk/merge/receipts.d.ts +14 -1
  84. package/dist/sdk/merge/receipts.js +36 -8
  85. package/dist/sdk/merge/reconcile.js +21 -4
  86. package/dist/sdk/merge/three-way.d.ts +6 -2
  87. package/dist/sdk/merge/three-way.js +24 -10
  88. package/dist/sdk/query/get.d.ts +11 -0
  89. package/dist/sdk/query/get.js +37 -3
  90. package/dist/sdk/read-output-contracts.d.ts +1 -1
  91. package/dist/sdk/read-output-contracts.js +23 -4
  92. package/dist/sdk/relationship-kinds/contract.d.ts +48 -0
  93. package/dist/sdk/relationship-kinds/contract.js +22 -0
  94. package/dist/sdk/relationships.d.ts +6 -41
  95. package/dist/sdk/relationships.js +12 -126
  96. package/dist/sdk/runtime-primitives.d.ts +1 -1
  97. package/dist/sdk/runtime-primitives.js +3 -3
  98. package/dist/sdk/similarity.d.ts +5 -0
  99. package/dist/sdk/similarity.js +40 -10
  100. package/dist/sdk/structured-mutations.js +5 -2
  101. package/dist/sdk/test/linked-command-detection.d.ts +2 -7
  102. package/dist/sdk/test/linked-command-detection.js +22 -9
  103. package/docs/AGENT_GUIDE.md +2 -1
  104. package/docs/COMMANDS.md +19 -1
  105. package/docs/DEPENDENCY_KIND_CONTRACT.md +29 -0
  106. package/docs/ITEM_READ_PROJECTIONS.md +26 -0
  107. package/docs/MERGE_SAFETY.md +10 -3
  108. package/docs/RELATIONSHIP_GRAPH.md +1 -1
  109. package/docs/SDK_AGENT_SESSION_CONTEXT.md +35 -2
  110. package/docs/SDK_CONTEXT_INTEGRITY.md +16 -1
  111. package/docs/SENTRY_CONTRACT_EPOCHS.md +20 -0
  112. package/docs/agent-task-token-baseline.json +2 -2
  113. package/marketplace.json +2 -2
  114. package/package.json +1 -1
  115. package/packages/pm-beads/package.json +1 -1
  116. package/packages/pm-calendar/package.json +1 -1
  117. package/packages/pm-command-kit/package.json +1 -1
  118. package/packages/pm-digital-twin/package.json +1 -1
  119. package/packages/pm-governance-audit/package.json +1 -1
  120. package/packages/pm-guide-shell/package.json +1 -1
  121. package/packages/pm-kanban/package.json +1 -1
  122. package/packages/pm-lifecycle-hooks/package.json +1 -1
  123. package/packages/pm-linked-test-adapters/package.json +1 -1
  124. package/packages/pm-search-advanced/package.json +1 -1
  125. package/packages/pm-templates/package.json +1 -1
  126. package/packages/pm-todos/package.json +1 -1
  127. package/packages/pm-vcs/package.json +1 -1
  128. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  129. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  130. package/sdk/public-surface.json +231 -27
  131. package/dist/cli-bundle/chunks/chunk-GKA54IJM.js +0 -5
  132. package/dist/cli-bundle/chunks/chunk-KRY7SRUO.js +0 -2
  133. package/dist/cli-bundle/chunks/chunk-MNJ4NNSY.js +0 -26
  134. package/dist/cli-bundle/chunks/chunk-OJPCFDDY.js +0 -13
  135. package/dist/cli-bundle/chunks/chunk-PFSD3DAN.js +0 -194
  136. package/dist/cli-bundle/focused-chunks/chunk-54EU2UVO.js +0 -2
  137. package/dist/cli-bundle/focused-chunks/chunk-5FLBTZJQ.js +0 -2
  138. package/dist/cli-bundle/focused-chunks/chunk-5GJ57YKN.js +0 -2
  139. package/dist/cli-bundle/focused-chunks/chunk-CMDS3KYT.js +0 -14
  140. package/dist/cli-bundle/focused-chunks/chunk-F5B3HBEZ.js +0 -5
  141. package/dist/cli-bundle/focused-chunks/chunk-FNOKJG6N.js +0 -16
  142. package/dist/cli-bundle/focused-chunks/chunk-FPDYXZBK.js +0 -4
  143. package/dist/cli-bundle/focused-chunks/chunk-HCUC62AB.js +0 -2
  144. package/dist/cli-bundle/focused-chunks/chunk-HGNKPSCB.js +0 -153
@@ -1,8 +1,3 @@
1
- /**
2
- * @module sdk/test/linked-command-detection
3
- *
4
- * Parses linked-test command invocations for sandbox and context-safety checks.
5
- */
6
1
  /** Public contract for pm global flags with value, shared by SDK and presentation-layer consumers. */
7
2
  export declare const PM_GLOBAL_FLAGS_WITH_VALUE: Set<string>;
8
3
  /** Value-bearing flags accepted before item positionals by item-referencing commands. */
@@ -28,7 +23,7 @@ export declare const SCRIPT_RUN_FLAGS_WITH_VALUE: Set<string>;
28
23
  /** Implements split normalized command segments for the public runtime surface of this module. */
29
24
  export declare function splitNormalizedCommandSegments(normalizedCommand: string): string[];
30
25
  /** Extract pm CLI arguments from one normalized shell-command segment. */
31
- export declare function extractPmInvocationArgsFromSegment(segment: string): string[] | null;
26
+ export declare function extractPmInvocationArgsFromSegment(segment: string, cwd?: string): string[] | null;
32
27
  /** Extract referenced item IDs from pm CLI invocations embedded in one command. */
33
28
  export declare const extractReferencedPmItemIdsFromCommand: (command: string, idPrefix?: string) => string[];
34
29
  /** Implements strip leading env assignments for the public runtime surface of this module. */
@@ -42,7 +37,7 @@ export declare function normalizePackageSpecifier(token: string): string;
42
37
  /** Implements check whether pm cli package token for the public runtime surface of this module. */
43
38
  export declare function isPmCliPackageToken(token: string): boolean;
44
39
  /** Implements check whether pm cli script token for the public runtime surface of this module. */
45
- export declare function isPmCliScriptToken(token: string): boolean;
40
+ export declare function isPmCliScriptToken(token: string, cwd?: string): boolean;
46
41
  /** Implements parse npx command for the public runtime surface of this module. */
47
42
  export declare function parseNpxCommand(tokens: string[]): {
48
43
  command: string;
@@ -9,7 +9,9 @@
9
9
  // normalized command string. Kept in core so SDK governance and CLI test
10
10
  // execution share one dependency-direction-safe parser.
11
11
 
12
- !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]="8c4d45cf-6b97-5151-a325-db09d31962a7")}catch(e){}}();
12
+ !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]="673a5a26-6214-58d6-af19-baee5a8359f0")}catch(e){}}();
13
+ import { readFileSync } from "node:fs";
14
+ import path from "node:path";
13
15
  const PM_SUBCOMMANDS_WITH_ITEM_REFERENCE = new Set([
14
16
  "get",
15
17
  "history",
@@ -277,15 +279,15 @@ export function splitNormalizedCommandSegments(normalizedCommand) {
277
279
  .filter((segment) => segment.length > 0);
278
280
  }
279
281
  /** Extract pm CLI arguments from one normalized shell-command segment. */
280
- export function extractPmInvocationArgsFromSegment(segment) {
282
+ export function extractPmInvocationArgsFromSegment(segment, cwd = process.cwd()) {
281
283
  const tokens = stripLeadingEnvAssignments(segment.split(" ").filter((token) => token.length > 0));
282
284
  if (tokens.length === 0)
283
285
  return null;
284
286
  const [executable, ...args] = tokens;
285
- if (isPmExecutableToken(executable) || isPmCliScriptToken(executable)) {
287
+ if (isPmExecutableToken(executable) || isPmCliScriptToken(executable, cwd)) {
286
288
  return args;
287
289
  }
288
- if (executable === "node" && args[0] && isPmCliScriptToken(args[0])) {
290
+ if (executable === "node" && args[0] && isPmCliScriptToken(args[0], cwd)) {
289
291
  return args.slice(1);
290
292
  }
291
293
  const invocation = executable === "npx" || executable === "bunx"
@@ -408,10 +410,21 @@ export function isPmCliPackageToken(token) {
408
410
  token.endsWith("/pm-cli"));
409
411
  }
410
412
  /** Implements check whether pm cli script token for the public runtime surface of this module. */
411
- export function isPmCliScriptToken(token) {
412
- return (token === "dist/cli.js" ||
413
- token === "./dist/cli.js" ||
414
- token.endsWith("/dist/cli.js"));
413
+ export function isPmCliScriptToken(token, cwd = process.cwd()) {
414
+ const normalized = token.replaceAll("\\", "/");
415
+ if (normalized !== "dist/cli.js" &&
416
+ normalized !== "./dist/cli.js" &&
417
+ !normalized.endsWith("/dist/cli.js")) {
418
+ return false;
419
+ }
420
+ const scriptPath = path.resolve(cwd, token);
421
+ try {
422
+ const packageJson = JSON.parse(readFileSync(path.join(path.dirname(path.dirname(scriptPath)), "package.json"), "utf8"));
423
+ return packageJson.name === "@unbrained/pm-cli";
424
+ }
425
+ catch {
426
+ return false;
427
+ }
415
428
  }
416
429
  /** Implements parse npx command for the public runtime surface of this module. */
417
430
  export function parseNpxCommand(tokens) {
@@ -531,4 +544,4 @@ export function firstPositionalToken(tokens, flagsWithValue = new Set()) {
531
544
  return undefined;
532
545
  }
533
546
  //# sourceMappingURL=linked-command-detection.js.map
534
- //# debugId=8c4d45cf-6b97-5151-a325-db09d31962a7
547
+ //# debugId=673a5a26-6214-58d6-af19-baee5a8359f0
@@ -189,6 +189,7 @@ Use these defaults unless the task requires otherwise:
189
189
  - `pm validate --check-resolution --check-history-drift` before closing broad work.
190
190
  - `pm history-redact <id> --dry-run` before rewriting sensitive history payloads, then rerun without `--dry-run` once scope is confirmed.
191
191
  - `pm history-repair <id> --dry-run` when `pm health` or `pm validate --check-history-drift` report drifted streams; it re-anchors the hash chain and reconciles with the on-disk item without touching item content. Rerun without `--dry-run` to apply.
192
+ - `pm merge reconcile --dry-run --json` after a branch merge that touched tracker data. Review every discarded-value receipt before applying; a lossy reconciliation requires the explicit `--force` acceptance flag. `history-repair` alone does not settle merge receipts.
192
193
  - `pm schema list` and `pm schema show <Type>` before creating custom-domain work; they show built-in, persisted custom, and extension-provided item types without reading schema files by hand.
193
194
  - `pm schema add-type <Name>` when `pm create`/`pm update` reject a project-specific type as invalid; it registers the type in `.agents/pm/schema/types.json` so `pm create <Name> "..."` works. Built-in types are reserved; the upsert is idempotent. `pm schema remove-type <Name>` removes a custom type (warns, non-blocking, if items still use it).
194
195
  - `pm schema add-status <id> --role <role>` / `pm schema remove-status <id>` manage custom lifecycle statuses in `.agents/pm/schema/statuses.json`; roles come from the runtime status-role vocabulary, the upsert is idempotent, and built-in default statuses cannot be removed. `pm schema list` now reports statuses (builtin vs custom) alongside types.
@@ -204,7 +205,7 @@ Use these defaults unless the task requires otherwise:
204
205
  Concurrent agents work on ordinary Git branches/worktrees; tracker artifacts need the semantic merge contract from [Merge Safety](MERGE_SAFETY.md). The short loop:
205
206
 
206
207
  - After a fresh clone or new worktree, run `pm merge install` once so the field-aware merge drivers back the committed `.gitattributes` fence.
207
- - After every merge that touches `.agents/pm`, run `pm validate --check-storage-integrity` and `pm history --verify --strict-exit`; follow the remediation output (`pm history-repair` wiring included).
208
+ - After every merge that touches `.agents/pm`, run `pm merge reconcile --dry-run --json`, review the receipt classification, then apply `pm merge reconcile`. Add `--force` only after explicitly accepting or re-applying every discarded scalar value. Finish with `pm validate --check-storage-integrity` and `pm history --verify --strict-exit`.
208
209
  - Repositories fanning out many branches between merges should raise id entropy: `pm config project set ids_token_length 6`.
209
210
  - Use `--add-ac`/`--remove-ac` (not `--ac`) so concurrent acceptance-criteria edits merge instead of clobbering.
210
211
 
package/docs/COMMANDS.md CHANGED
@@ -78,6 +78,7 @@ Use `--with-packages` for one-step agent setup when bundled package commands sho
78
78
  pm package # bare command defaults to --explore (list installed)
79
79
  pm install '*' --project
80
80
  pm package catalog --project
81
+ pm package manage --project --output-format json
81
82
  pm install npm:@scope/pm-package --project
82
83
  pm package describe --project # by-name surface map of every loaded package
83
84
  pm package describe my-package --markdown --output docs/my-package-reference.md
@@ -90,6 +91,11 @@ pm upgrade --cli-only --repair
90
91
  ```
91
92
 
92
93
  `pm install` and `pm package` are the preferred package-first workflow. `pm package` and `pm extension` bare invocations default to `--explore` so agents can list installed packages without remembering an action flag. `pm install '*'`, shell-expanded `pm install *`, and `pm install all` install bundled first-party packages. `pm extension` remains as a compatibility command for direct extension lifecycle operations.
94
+ `pm package catalog` emits one row per package, with every resolvable bundled
95
+ alias preserved in `aliases`; totals therefore measure packages rather than
96
+ alias-index entries. `pm package manage` participates in the universal read
97
+ output contract, so `--output-include`, `--output-limit`, `--output-budget`, and
98
+ `--output-format` behave like the same controls on other SDK-backed reads.
93
99
  Install output includes a light `verification` summary with target tracker root, activation state, registered commands/actions/item types, and an `ok|degraded` health verdict. Runtime activation failure sets the command result and process exit status to failure; inspect `activation_diagnostics` and `command_discovery.next_steps` for the exact recovery path.
94
100
  Bare install names use bundled aliases before installed npm packages. Every
95
101
  install result reports `source_resolution`; when both candidates exist it marks
@@ -113,6 +119,7 @@ pm list-open --type Task --priority 1 --limit 20
113
119
  pm list-in-progress --limit 20
114
120
  pm aggregate --group-by parent,type --status open
115
121
  pm aggregate --group-by parent,type --completion --include-unparented
122
+ pm duplicates --status all --threshold 0.8
116
123
  ```
117
124
 
118
125
  Use `pm next` when the only question is "what should I work on now?" It computes dependency-aware readiness, keeps dangling dependency ids blocked until repaired, and combines lifecycle-blocked plus graph-blocked work in the companion queue. The `recommended` projection is excluded from the `ready` tail; every actionable row carries its one-based `rank`, and the tail preserves the exact recommendation order. Foreign-owned in-progress work is summarized under `held_by_others`. Human-gated `Decision` records remain visible under `decision_needed` but are excluded from agent recommendations by default.
@@ -126,6 +133,10 @@ pm next --ready-only --limit 3 --json # tightest agent-loop projection
126
133
  ```
127
134
 
128
135
  Use `context` first for a compact active-work snapshot. Use `search` when the request names a concept, component, or prior issue.
136
+ Use `duplicates --status all` for a true whole-history duplicate check. The
137
+ result echoes `filters.statuses: null` for the unrestricted corpus; named or
138
+ custom statuses are normalized through the runtime status registry and an
139
+ unknown status fails instead of returning a false-clean result.
129
140
  Use `pm get <id>` to read a single item by ID — the single-item read primitive used throughout the agent loop. It accepts `--fields <list>` and `--depth brief|standard|deep|full` for token-minimal projections, and `--tree`/`--tree-depth <n>` to include descendants. Standard/deep reads expose a normalized `schedule` facet (`deadline`, `start_at`, `end_at`, `location`, reminders, and events) when scheduling metadata exists. Container-oriented built-ins (Epic, Feature, Milestone, and Plan) plus custom types automatically expose type-agnostic child counts and continuation metadata. Standard depth keeps that rollup counts-only; `--depth deep|full` or an explicit `--fields id,children` request adds the deterministic bounded child sample. Built-in leaf reads avoid a workspace scan unless children are explicitly requested. `pm get <id> --json` returns the `body` inside the `item` object (`.item.body`); see [Full results, totals, and bodies](#full-results-totals-and-bodies). To duplicate an existing item as a starting point, `pm copy <id> --title "New title"` clones it into a fresh id with lifecycle fields reset.
130
141
 
131
142
  Add `--at <version|ISO-timestamp>` for a verified point-in-time read. It replays the same hash-checked history kernel used by restore but never acquires a lock, writes the item, or appends history. The result always includes `reconstructed: true`, `as_of_version`, and `as_of_timestamp`. Future/out-of-range targets fail with structured `valid_range` metadata. `--at` cannot be combined with `--tree`; workspace-wide historical graph projections require a future indexed primitive.
@@ -891,12 +902,19 @@ one-command reconciliation gate:
891
902
  ```bash
892
903
  pm merge reconcile --dry-run --json
893
904
  pm merge reconcile --message "Reconcile branch histories" --json
905
+ # Only after reviewing every discarded-value receipt:
906
+ pm merge reconcile --force --message "Accept reviewed merge decisions" --json
894
907
  ```
895
908
 
896
909
  The command scans every history stream, delegates repairs to the audited
897
910
  `history-repair --all` engine, then runs the history-drift and storage-integrity
898
911
  validation checks. Dry-run leaves drift intact and reports it in `validation`;
899
- apply exits nonzero if any stream fails or either invariant stays red. No Git
912
+ apply exits nonzero if any stream fails or either invariant stays red. Lossless
913
+ receipts remain visible in `pm merge report` but do not count as discarded-value
914
+ decisions. When a receipt contains a discarded scalar value, apply refuses with
915
+ `merge_reconcile_discards_require_acceptance` until the coordinator reviews or
916
+ re-applies the value and passes `--force`. `pm history-repair` is the narrower
917
+ drift-only tool and never substitutes for receipt reconciliation. No Git
900
918
  hook is installed automatically—teams may call this command from an explicit
901
919
  post-merge hook after opting into that policy.
902
920
 
@@ -0,0 +1,29 @@
1
+ # Dependency-kind contract
2
+
3
+ Tracker: [pm-4020c5](../.agents/pm/issues/pm-4020c5.toon), [pm-jkbqt8](../.agents/pm/issues/pm-jkbqt8.toon)
4
+
5
+ Dependency rows have one canonical stored spelling per relationship meaning. Command inputs remain compatibility-friendly: hyphens normalize to underscores and the aliases below are accepted, but `pm create` and `pm update` persist the canonical kind. Existing historical rows are never rewritten implicitly.
6
+
7
+ | Canonical kind | Accepted legacy aliases |
8
+ | --- | --- |
9
+ | `blocked_by` | `depends_on`, `depends-on` |
10
+ | `related` | `related_to`, `related-to` |
11
+ | `parent` | `child_of`, `child-of`, `epic` |
12
+ | `child` | `parent_child`, `parent-child`, `task` |
13
+
14
+ `epic` and `task` are compatibility aliases, not item types embedded in the relationship ontology. New integrations should use `parent` or `child` and express the work classification through the item `type` field.
15
+
16
+ The SDK relationship registry is authoritative. `canonicalizeRelationshipKind()` rejects unknown spellings, while `resolveCanonicalRelationshipKind()` supports validation flows that need an undefined result. `pm contracts` publishes `relationship_kind_contracts` with canonical names, aliases, inverses, and ordering/hierarchy semantics.
17
+
18
+ ## Direction and actionability
19
+
20
+ `blocked_by` and `blocks` are inverse storage directions with identical scheduling meaning:
21
+
22
+ - `A --blocked_by--> B` means A waits for B.
23
+ - `B --blocks--> A` means A waits for B.
24
+
25
+ Readiness, `pm next`, context blocker summaries, `pm list-blocked`, downstream `unblocks` projections, and close-time auto-unblock use that shared interpretation. This applies to mixed-direction corpora without migrating existing rows.
26
+
27
+ ## Legacy observability
28
+
29
+ `pm deps` returns `legacy_alias_counts` for the workspace. `pm graph audit` returns the same field beside the canonical `profile.edges_by_kind` counts. Empty objects mean no stored alias debt. These diagnostics are read-only; terminal history remains untouched until an explicitly governed migration is requested.
@@ -0,0 +1,26 @@
1
+ # Stable Item Read Projections
2
+
3
+ Tracker reference: [pm-b1w8vr](../.agents/pm/issues/pm-b1w8vr.toon).
4
+
5
+ Item mutation and read-back surfaces share one collection vocabulary:
6
+ `comments`, `notes`, `learnings`, `files`, `tests`, `docs`, `reminders`, and
7
+ `events`. Every normal `pm get` and SDK `runGet` result carries
8
+ `item.collection_counts` with all eight keys, including zero values. This gives
9
+ agents a stable, low-token way to verify a write without requesting complete
10
+ collection payloads.
11
+
12
+ `brief` and `standard` omit the collection arrays but retain the stable counts.
13
+ `deep`, `full`, and `--full` include every collection array, normalizing absent
14
+ collections to `[]`, and retain `notes_count`, `tests_count`, and
15
+ `collection_counts`. A full projection is therefore a structural superset of
16
+ the standard item projection rather than a different shape.
17
+
18
+ Field projections can request `collection_counts` directly:
19
+
20
+ ```bash
21
+ pm get pm-example --fields id,updated_at,collection_counts
22
+ ```
23
+
24
+ Package authors receive the same contract from `runGet`. Do not infer whether
25
+ a collection exists by checking for an omitted key; use the count projection,
26
+ or request a full projection when the entries themselves are needed.
@@ -1,6 +1,6 @@
1
1
  # Multi-Branch Tracker Merge Safety
2
2
 
3
- Tracked by [pm-wc1r](../.agents/pm/features/pm-wc1r.toon), with the integrity and concurrency fixes [pm-9q2t](../.agents/pm/issues/pm-9q2t.toon), [pm-cxyv](../.agents/pm/issues/pm-cxyv.toon), [pm-gpo7](../.agents/pm/issues/pm-gpo7.toon), [pm-m3nl](../.agents/pm/issues/pm-m3nl.toon), [pm-wwfd](../.agents/pm/issues/pm-wwfd.toon), and [pm-xdn6](../.agents/pm/issues/pm-xdn6.toon). Fresh-init fence ownership is tracked by [pm-1w3ljt](../.agents/pm/issues/pm-1w3ljt.toon); runtime-cache index governance by [pm-hous](../.agents/pm/issues/pm-hous.toon); local allocation safety by [pm-khdq](../.agents/pm/issues/pm-khdq.toon); fence-coverage completeness and drift detection by [pm-i4fx](../.agents/pm/issues/pm-i4fx.toon); package-defined item coverage by [pm-5rexki](../.agents/pm/issues/pm-5rexki.toon); non-item JSON coverage by [pm-gjicmx](../.agents/pm/issues/pm-gjicmx.toon); portable driver identity by [pm-w91mvg](../.agents/pm/issues/pm-w91mvg.toon); pending receipt validation by [pm-ysqb6n](../.agents/pm/issues/pm-ysqb6n.toon); cross-branch id collision safety by [pm-pibw](../.agents/pm/issues/pm-pibw.toon); auditable merge history by [pm-9j2r3b](../.agents/pm/tasks/pm-9j2r3b.toon); durable conflict decisions by [pm-rh98vo](../.agents/pm/issues/pm-rh98vo.toon); continuous conformance by [pm-76dnfg](../.agents/pm/tasks/pm-76dnfg.toon); workspace-wide CI enforcement by [pm-pdr8t1](../.agents/pm/tasks/pm-pdr8t1.toon); post-merge reconciliation by [pm-mfkv92](../.agents/pm/issues/pm-mfkv92.toon); this repository's own adoption by [pm-iwsj](../.agents/pm/chores/pm-iwsj.toon).
3
+ Tracked by [pm-wc1r](../.agents/pm/features/pm-wc1r.toon), with the integrity and concurrency fixes [pm-9q2t](../.agents/pm/issues/pm-9q2t.toon), [pm-cxyv](../.agents/pm/issues/pm-cxyv.toon), [pm-gpo7](../.agents/pm/issues/pm-gpo7.toon), [pm-m3nl](../.agents/pm/issues/pm-m3nl.toon), [pm-wwfd](../.agents/pm/issues/pm-wwfd.toon), and [pm-xdn6](../.agents/pm/issues/pm-xdn6.toon). Fresh-init fence ownership is tracked by [pm-1w3ljt](../.agents/pm/issues/pm-1w3ljt.toon); runtime-cache index governance by [pm-hous](../.agents/pm/issues/pm-hous.toon); local allocation safety by [pm-khdq](../.agents/pm/issues/pm-khdq.toon); fence-coverage completeness and drift detection by [pm-i4fx](../.agents/pm/issues/pm-i4fx.toon); package-defined item coverage by [pm-5rexki](../.agents/pm/issues/pm-5rexki.toon); non-item JSON coverage by [pm-gjicmx](../.agents/pm/issues/pm-gjicmx.toon); portable driver identity by [pm-w91mvg](../.agents/pm/issues/pm-w91mvg.toon); pending receipt validation by [pm-ysqb6n](../.agents/pm/issues/pm-ysqb6n.toon); receipt classification by [pm-jtwsct](../.agents/pm/issues/pm-jtwsct.toon); direction-independent item conflict selection by [pm-dlx7v7](../.agents/pm/issues/pm-dlx7v7.toon); corrected reconciliation guidance by [pm-lwmstb](../.agents/pm/issues/pm-lwmstb.toon); cross-branch id collision safety by [pm-pibw](../.agents/pm/issues/pm-pibw.toon); auditable merge history by [pm-9j2r3b](../.agents/pm/tasks/pm-9j2r3b.toon); durable conflict decisions by [pm-rh98vo](../.agents/pm/issues/pm-rh98vo.toon); continuous conformance by [pm-76dnfg](../.agents/pm/tasks/pm-76dnfg.toon); workspace-wide CI enforcement by [pm-pdr8t1](../.agents/pm/tasks/pm-pdr8t1.toon); post-merge reconciliation by [pm-mfkv92](../.agents/pm/issues/pm-mfkv92.toon); this repository's own adoption by [pm-iwsj](../.agents/pm/chores/pm-iwsj.toon).
4
4
 
5
5
  pm stores project context as reviewable repository files. Concurrent agents can therefore use ordinary branches and worktrees, but tracker artifacts need semantic merge behavior: raw line merging cannot preserve TOON collection counts, JSON object structure, or append-only history hash chains.
6
6
 
@@ -56,12 +56,12 @@ pm merge install --dry-run --json
56
56
 
57
57
  | Artifact | Driver | Merge behavior |
58
58
  | ---------------------------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
59
- | Item `.toon` / `.md` | `pm-item-toon` / `pm-item-markdown` | Three-way field merge; format-specific drivers avoid passing the repository path through Git's shell command, append-like collections use set union, `updated_at` uses latest timestamp, and canonical serialization recomputes TOON counts. |
59
+ | Item `.toon` / `.md` | `pm-item-toon` / `pm-item-markdown` | Three-way field merge; append-like collections use set union, `updated_at` uses latest timestamp, scalar conflicts select a stable direction-independent value, and canonical serialization recomputes TOON counts. |
60
60
  | `history/*.jsonl` | `pm-history` | Preserves the common prefix and both divergent suffixes, orders deterministically, then re-anchors the resulting hash chain. |
61
61
  | tracker `**/*.jsonl` except the later `history/*.jsonl` override | `pm-relationship` | Covers default and package-owned custom relationship event paths, unions divergent suffixes by `eventId` (timestamp-ordered, ours-first on ties), and renumbers `sequence` consecutively so the strict-sequence store loader accepts the merged stream. |
62
62
  | root `settings.json` and nested `**/*.json` | `pm-json` | Recursively merges objects per key. Arrays compose when both branches preserve the base and add distinct entries, so independent extension installs and evaluation additions merge without weakening edit/removal conflict detection. |
63
63
 
64
- When both sides change the same scalar or JSON leaf differently, the driver writes a parseable preferred-side result but exits nonzero. Git keeps the path conflicted so a human or coordinating agent must review the losing value and explicitly `git add` the resolution. Use `--prefer theirs` only when that is the intended resolution policy.
64
+ When both sides change the same item scalar differently, the driver writes the same stable value regardless of which branch Git labels ours or theirs, but exits nonzero. JSON leaf conflicts retain the explicit preferred-side policy. Git keeps either path conflicted so a human or coordinating agent must review the discarded value and explicitly `git add` the resolution.
65
65
 
66
66
  The driver result's `guidance` always points unresolved conflicts to `pm merge report`. When a clone-local receipt exists, guidance includes its privacy-safe receipt and item ids for exact correlation; discarded values remain confined to the local receipt and never appear in generic logs or tracker history. Tracked by [pm-fbrz7p](../.agents/pm/issues/pm-fbrz7p.toon).
67
67
 
@@ -97,9 +97,16 @@ After every branch merge that touches `.agents/pm`, run:
97
97
  ```bash
98
98
  pm merge reconcile --dry-run --json
99
99
  pm merge reconcile --message "Reconcile merged tracker histories" --json
100
+ # Required only after every discarded field has been reviewed or re-applied:
101
+ pm merge reconcile --force --message "Accept reviewed merge decisions" --json
100
102
  ```
101
103
 
102
104
  The preview reports every drifted stream and pending receipt without mutation.
105
+ Lossless receipts are reported as provenance but do not become blocking merge
106
+ decisions. Receipts with discarded scalar values remain blocking and the apply
107
+ pass refuses them unless the coordinator explicitly supplies `--force` after
108
+ review. This prevents a routine history repair from silently accepting data
109
+ loss while preserving a zero-noise path for merges that retained both changes.
103
110
  It exits nonzero while either merge-critical validation check is non-green, so
104
111
  CI and explicit post-merge hooks cannot approve unresolved receipts or drift.
105
112
  The apply pass uses the audited history rewrite boundary to append a
@@ -16,7 +16,7 @@ Ordering-cycle validation considers only kinds whose registry definition sets `o
16
16
 
17
17
  SDK queries are deterministic, bounded, cancellation-aware, and return explicit visited-node, inspected-edge, truncation, and continuation metadata. The graph kernel supplies adjacency, incoming and outgoing traversal, closure, shortest path, reverse impact through incoming traversal, and induced subgraphs. The in-memory index is rebuildable directly from item metadata; durable large-workspace indexes remain an interchangeable storage implementation.
18
18
 
19
- Ordering kinds also declare precedence. `source_before_target` means the source must execute first; `target_before_source` models dependency-shaped edges such as `blocked_by`. Custom kinds default to source-first for compatibility, but domain packages should declare the direction explicitly. Analytics consume this field and never infer execution meaning from the label.
19
+ Ordering kinds also declare precedence. `source_before_target` means the source must execute first; `target_before_source` models dependency-shaped edges such as `blocked_by`. Custom kinds default to source-first for compatibility, but domain packages should declare the direction explicitly. Analytics consume this field and never infer execution meaning from the label. Built-in canonical spellings, compatibility aliases, and inverse actionability are defined in [Dependency-kind contract](DEPENDENCY_KIND_CONTRACT.md).
20
20
 
21
21
  Hierarchy kinds likewise declare which endpoint is the structural parent. `source_parent` supports domain edges such as company `owns` asset, while `target_parent` preserves item-shaped child `parent` parent storage. Custom hierarchy kinds default to `source_parent`; packages should declare the orientation explicitly when their persisted edge shape differs. Context explanations use this contract instead of inferring ancestry from a kind name.
22
22
 
@@ -2,7 +2,10 @@
2
2
 
3
3
  Tracker references: [pm-9wbiye](../.agents/pm/issues/pm-9wbiye.toon),
4
4
  [pm-rbg1qo](../.agents/pm/issues/pm-rbg1qo.toon), and
5
- [pm-oqo9l2](../.agents/pm/features/pm-oqo9l2.toon).
5
+ [pm-oqo9l2](../.agents/pm/features/pm-oqo9l2.toon),
6
+ [pm-3zgh2c](../.agents/pm/features/pm-3zgh2c.toon),
7
+ [pm-eq9dlw](../.agents/pm/issues/pm-eq9dlw.toon), and
8
+ [pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon).
6
9
 
7
10
  Project management is context management. The public SDK therefore carries a
8
11
  session's purpose and episode boundary through the same immutable history that
@@ -59,7 +62,7 @@ import { spawn } from "node:child_process";
59
62
  import { agentSessionEnvironment } from "@unbrained/pm-cli/sdk";
60
63
 
61
64
  const session = {
62
- provenance: { role: "grader", topic: "package acceptance" },
65
+ provenance: { role: "release-operator", topic: "package acceptance" },
63
66
  episode: { id: "package-acceptance", label: "Package acceptance" },
64
67
  };
65
68
 
@@ -75,6 +78,36 @@ The environment contract is `PM_AGENT_SESSION_ROLE`,
75
78
  context keys, distinct from intentional per-observation overrides such as
76
79
  `PM_AGENT_MODEL`.
77
80
 
81
+ Roles use the controlled values `implementer`, `implementation`,
82
+ `investigator`, `orchestrator`, `planner`, `release-operator`, and `reviewer`.
83
+ Case, spaces, and underscores normalize to lowercase hyphenated values. Other
84
+ values are ignored instead of polluting analytics. Presence-only harness flags,
85
+ including `CLAUDE_CODE_CHILD_SESSION=1`, are detection evidence and are never
86
+ persisted as semantic roles.
87
+
88
+ For ordinary CLI mutations, the detector can infer an `implementer` or
89
+ `reviewer` role from the bounded command verb and a topic from an explicit
90
+ `pm-...` item argument. Explicit overrides, session declarations, and trusted
91
+ host declarations retain precedence over this inference.
92
+
93
+ ## Diagnose missing provenance
94
+
95
+ `diagnoseAgentIdentity()` is the additive diagnostic companion to
96
+ `detectAgentIdentity()`. It returns the same privacy-safe identity plus a
97
+ `provenance_outcomes` row for every built-in dimension. Each row is
98
+ `resolved`, `unavailable`, or `failed`, carries rule version `v1`, and may name
99
+ the bounded built-in resolver. It never contains environment values, session
100
+ paths, prompts, or file contents.
101
+
102
+ New mutation history records failed resolver outcomes under
103
+ `context.agent_provenance_outcomes`; ordinary unavailable dimensions retain
104
+ the compact legacy-compatible null projection. A resolver is only counted as
105
+ attempted when its required input exists. Consequently `pm health` can report
106
+ `provenance_resolver_zero_success:<harness>:<dimension>:<resolver>:<attempts>`
107
+ without confusing an unavailable harness signal with a failed resolver. The
108
+ warning is advisory and the storage check includes the bounded attempt and
109
+ success counters for diagnosis.
110
+
78
111
  ## Cross an MCP boundary
79
112
 
80
113
  An embedding MCP client can add bounded `provenance` and `episode` fields to
@@ -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), and [pm-ety1qc](../.agents/pm/issues/pm-ety1qc.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), and [pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon).
4
4
 
5
5
  ## Agent Quick Context
6
6
 
@@ -18,6 +18,13 @@ pm get pm-a1b2 --output-include item,claim_state
18
18
 
19
19
  An unknown selector is a usage refusal that lists the valid vocabulary. Selecting the complete `item` object together with an item field is also refused because the two selectors express conflicting projection depths. Every successful projection carries an `omission_receipt` with the exact selectors needed to restore withheld item fields or sections.
20
20
 
21
+ Standard and brief item reads expose the stable `collection_counts` selector;
22
+ full reads retain those counts and normalize every supported collection key to
23
+ an array. `--output-include item.collection_counts` therefore uses the same
24
+ selector grammar and omission receipts as any other SDK-owned item field.
25
+
26
+ The same SDK-owned read-output registry now declares `package manage` as a first-class read surface. Package authors can resolve either `package manage` or `package-manage` to its canonical contract and discover the universal include, amount, cost, and encoding dimensions without copying CLI knowledge.
27
+
21
28
  ## Bounded annotation mutations
22
29
 
23
30
  Adding, editing, or deleting a comment, note, or learning returns the changed entry plus mutation and omission receipts. The reply size therefore stays independent of the item’s existing annotation history. Pass `--full-history` when a human or integration genuinely needs the complete post-mutation collection:
@@ -48,6 +55,14 @@ The SDK exposes `resolveUnknownAuthorAcknowledgmentSelector` and `parseUnknownAu
48
55
 
49
56
  `pm health` is read-only by default and never refreshes embeddings merely because a semantic provider is configured. Provider I/O requires `--refresh-vectors`; `--skip-vectors` or `--no-refresh` records the explicit non-provider path. Provider requests remain bounded by the configured embedding timeout, and a failed refresh reports the responsible vector diagnostic plus the skip remediation.
50
57
 
58
+ Storage integrity is evaluated independently of that provider boundary. Lossless merge receipts remain visible as provenance, while only receipts containing discarded scalar values produce `merge_decisions_unreviewed` guidance; neither classification enables vector refresh or remote provider I/O.
59
+
60
+ The storage check also reads at most 10,000 local immutable events for bounded
61
+ agent-provenance resolver outcomes. This scan performs no network or provider
62
+ I/O, tolerates malformed streams already owned by integrity diagnostics, and
63
+ reports an advisory warning only when a resolver was actually attempted but
64
+ never succeeded.
65
+
51
66
  ## Replication and refusal gate
52
67
 
53
68
  `scripts/release/surface-replication-sets.json` declares replicated SDK, CLI, MCP, documentation, and test members. `pnpm quality:surface-replication` activates sets from the Git changeset, verifies every member invariant, and reports:
@@ -0,0 +1,20 @@
1
+ # Sentry Error Contract Epochs
2
+
3
+ Tracker reference: [pm-h75tjh](../.agents/pm/issues/pm-h75tjh.toon).
4
+
5
+ The release reliability gate declares `2026.8.7` as the minimum producer
6
+ version for canonical `pm.error_code` and `pm.exit_code` tags. An unresolved
7
+ event with a known older release is reported as `legacy_pre_contract`; it does
8
+ not block a current release merely because it cannot satisfy a future
9
+ producer contract.
10
+
11
+ Events from the minimum producer or newer remain blocking when they are
12
+ unexpected faults or lack the required tags. Events with no parseable producer
13
+ version are also blocking. JSON output includes the minimum version,
14
+ `legacy_pre_contract_total`, bounded legacy ids, and a bounded blocking-reason
15
+ row for each current issue. Expected handled usage, not-found, and conflict
16
+ errors remain a separate non-blocking class.
17
+
18
+ This epoch rule only changes gate classification. It does not resolve, delete,
19
+ or hide Sentry issues, and it does not weaken fatal or error thresholds for
20
+ current producers.
@@ -14,12 +14,12 @@
14
14
  },
15
15
  {
16
16
  "id": "returning-agent",
17
- "max_estimated_tokens": 336
17
+ "max_estimated_tokens": 383
18
18
  },
19
19
  {
20
20
  "id": "failing-command",
21
21
  "max_estimated_tokens": 197
22
22
  }
23
23
  ],
24
- "composite_max_estimated_tokens": 2390
24
+ "composite_max_estimated_tokens": 2437
25
25
  }
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.8"
9
+ "version": "2026.8.9"
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.8",
16
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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.8",
4
+ "version": "2026.8.9",
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.8",
3
+ "version": "2026.8.9",
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",