@unbrained/pm-cli 2026.8.30 → 2026.8.31

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 (136) hide show
  1. package/.agents/skills/HARNESS_COMPATIBILITY.md +1 -1
  2. package/.agents/skills/README.md +1 -1
  3. package/.agents/skills/pm-developer/SKILL.md +1 -1
  4. package/.agents/skills/pm-developer/references/COMMAND_PLAYBOOK.md +2 -2
  5. package/.agents/skills/pm-developer/references/MULTI_AGENT_MERGE.md +1 -1
  6. package/.agents/skills/pm-developer/references/TOKEN_BUDGETS.md +1 -1
  7. package/.agents/skills/pm-extensions/SKILL.md +2 -2
  8. package/.agents/skills/pm-extensions/references/AUTHORING.md +1 -1
  9. package/.agents/skills/pm-extensions/references/LIFECYCLE.md +1 -1
  10. package/.agents/skills/pm-sdk/SKILL.md +1 -1
  11. package/.agents/skills/pm-user/SKILL.md +2 -2
  12. package/.agents/skills/pm-user/references/WORKFLOWS.md +2 -2
  13. package/.claude-plugin/marketplace.json +2 -2
  14. package/AGENTS.md +1 -1
  15. package/CHANGELOG.md +18 -0
  16. package/dist/cli/register-list-query.js +32 -17
  17. package/dist/cli/register-operations.d.ts +2 -0
  18. package/dist/cli/register-operations.js +20 -9
  19. package/dist/cli-bundle/bundle-manifest.json +137 -137
  20. package/dist/cli-bundle/chunks/chunk-2XVV45NJ.js +35 -0
  21. package/dist/cli-bundle/chunks/{chunk-N6OR6FAR.js → chunk-3FCSFWZT.js} +12 -12
  22. package/dist/cli-bundle/chunks/{chunk-WS2GJQVG.js → chunk-52JXYSDW.js} +2 -2
  23. package/dist/cli-bundle/chunks/{chunk-TGNAA66W.js → chunk-5DH5XCJL.js} +2 -2
  24. package/dist/cli-bundle/chunks/{chunk-2UETTHY6.js → chunk-IEFJ3ZEB.js} +29 -29
  25. package/dist/cli-bundle/chunks/{chunk-MTTKAUBX.js → chunk-JIFYOJF7.js} +2 -2
  26. package/dist/cli-bundle/chunks/{chunk-3TEF3HM5.js → chunk-MWIN6OH2.js} +2 -2
  27. package/dist/cli-bundle/chunks/{chunk-GNWPTEBW.js → chunk-NW6LV3TU.js} +64 -64
  28. package/dist/cli-bundle/chunks/{chunk-7SKMLSMX.js → chunk-OUGDA7NR.js} +2 -2
  29. package/dist/cli-bundle/chunks/{chunk-2MKLQL2E.js → chunk-QZCIBZR3.js} +2 -2
  30. package/dist/cli-bundle/chunks/{chunk-CMIEDWAY.js → chunk-SXMHPK4V.js} +41 -41
  31. package/dist/cli-bundle/chunks/{register-list-query-OMKJ5ONN.js → register-list-query-7C7DKZ2U.js} +11 -11
  32. package/dist/cli-bundle/chunks/{register-mutation-QBSNCOY3.js → register-mutation-OI4BJLUX.js} +2 -2
  33. package/dist/cli-bundle/chunks/register-operations-IIMA5OKO.js +2 -0
  34. package/dist/cli-bundle/chunks/{register-setup-GLQ5SYV3.js → register-setup-52H36QCB.js} +2 -2
  35. package/dist/cli-bundle/focused-chunks/{chunk-HVQ22RC4.js → chunk-2FEZ5SKM.js} +2 -2
  36. package/dist/cli-bundle/focused-chunks/{chunk-Y3JJXRVK.js → chunk-4O4CJAR6.js} +5 -5
  37. package/dist/cli-bundle/focused-chunks/{chunk-RKOKG43G.js → chunk-APN4QN6R.js} +2 -2
  38. package/dist/cli-bundle/focused-chunks/{chunk-LYFWQMVC.js → chunk-BEVHCEWG.js} +2 -2
  39. package/dist/cli-bundle/focused-chunks/{chunk-3UMBF26I.js → chunk-BMD42PUG.js} +2 -2
  40. package/dist/cli-bundle/focused-chunks/{chunk-XXOWRJZ5.js → chunk-BPWJ4QM5.js} +2 -2
  41. package/dist/cli-bundle/focused-chunks/{chunk-G6PATS5E.js → chunk-EUTABA4M.js} +15 -15
  42. package/dist/cli-bundle/focused-chunks/{chunk-73EDXGYE.js → chunk-FOMZ6NG5.js} +2 -2
  43. package/dist/cli-bundle/focused-chunks/chunk-JCOOAUHK.js +51 -0
  44. package/dist/cli-bundle/focused-chunks/chunk-JEFKLWMM.js +2 -0
  45. package/dist/cli-bundle/focused-chunks/{chunk-JZYPPMXF.js → chunk-KB5OFSFD.js} +2 -2
  46. package/dist/cli-bundle/focused-chunks/{chunk-AD6ULRAF.js → chunk-QDFJIRKN.js} +4 -4
  47. package/dist/cli-bundle/focused-chunks/{chunk-THEPQMLX.js → chunk-SVXJYD6G.js} +2 -2
  48. package/dist/cli-bundle/focused-chunks/{chunk-3AVAWVZA.js → chunk-UN34D63M.js} +2 -2
  49. package/dist/cli-bundle/focused-chunks/{chunk-TDK3OCX3.js → chunk-VJ7EFMFL.js} +2 -2
  50. package/dist/cli-bundle/main.js +2 -2
  51. package/dist/cli-bundle/sdk-authoring.js +1 -1
  52. package/dist/cli-bundle/sdk-contracts.js +1 -1
  53. package/dist/cli-bundle/sdk-core.js +29 -29
  54. package/dist/cli-bundle/sdk-governance.js +1 -1
  55. package/dist/cli-bundle/sdk-graph.js +1 -1
  56. package/dist/cli-bundle/sdk-merge.js +33 -33
  57. package/dist/cli-bundle/sdk-query.js +1 -1
  58. package/dist/cli-bundle/sdk-runtime.js +1 -1
  59. package/dist/cli-bundle/sdk-testing.js +1 -1
  60. package/dist/cli-bundle/sdk.js +9 -9
  61. package/dist/core/schema/runtime-schema.d.ts +4 -0
  62. package/dist/core/schema/runtime-schema.js +60 -48
  63. package/dist/core/schema/status-defs-file.js +5 -2
  64. package/dist/mcp/legacy-adapter.d.ts +11 -2
  65. package/dist/mcp/legacy-adapter.js +26 -12
  66. package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
  67. package/dist/sdk/cli-contracts/flag-contracts.js +6 -2
  68. package/dist/sdk/cli-contracts/grammar-contracts.d.ts +1 -1
  69. package/dist/sdk/cli-contracts/grammar-contracts.js +12 -2
  70. package/dist/sdk/cli-contracts/runtime-contracts.js +3 -2
  71. package/dist/sdk/cli-contracts/tool-schema.js +11 -3
  72. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +14 -2
  73. package/dist/sdk/governance/health.js +17 -6
  74. package/dist/sdk/governance/status-role-diagnostics.d.ts +27 -0
  75. package/dist/sdk/governance/status-role-diagnostics.js +36 -0
  76. package/dist/sdk/governance/validate-normalization.d.ts +6 -0
  77. package/dist/sdk/governance/validate-normalization.js +37 -0
  78. package/dist/sdk/governance/validate.d.ts +1 -1
  79. package/dist/sdk/governance/validate.js +20 -35
  80. package/dist/sdk/governance/workspace-position.d.ts +69 -0
  81. package/dist/sdk/governance/workspace-position.js +164 -0
  82. package/dist/sdk/governance.d.ts +2 -0
  83. package/dist/sdk/governance.js +4 -2
  84. package/dist/sdk/index.d.ts +1 -1
  85. package/dist/sdk/index.js +3 -3
  86. package/dist/sdk/mcp/protocol.d.ts +10 -2
  87. package/dist/sdk/mcp/protocol.js +15 -4
  88. package/dist/sdk/query/context.js +11 -14
  89. package/dist/sdk/query/list.d.ts +2 -0
  90. package/dist/sdk/query/list.js +33 -12
  91. package/dist/sdk/runtime-extended-actions.js +8 -4
  92. package/dist/sdk/schema.js +12 -2
  93. package/dist/sdk/test/execution.d.ts +15 -0
  94. package/dist/sdk/test/execution.js +35 -27
  95. package/docs/AGENT_GUIDE.md +1 -1
  96. package/docs/AGENT_PROVENANCE_ADR.md +1 -1
  97. package/docs/AGENT_RUNTIME_PRIMITIVES.md +2 -2
  98. package/docs/CLAUDE_CODE_PLUGIN.md +3 -3
  99. package/docs/COMMANDS.md +12 -12
  100. package/docs/CONFIGURATION.md +1 -1
  101. package/docs/DEFECT_RECURRENCE.md +2 -0
  102. package/docs/MCP_2026_07_28.md +28 -8
  103. package/docs/MCP_2026_07_28_CONFORMANCE.md +1 -0
  104. package/docs/MCP_REMOTE_TRANSPORT_SECURITY.md +4 -2
  105. package/docs/ONBOARDING.md +1 -1
  106. package/docs/README.md +2 -1
  107. package/docs/READ_OUTPUT_CONTRACTS.md +1 -1
  108. package/docs/RECURRENCE_RECOVERY_CONTRACTS.md +1 -1
  109. package/docs/SDK.md +3 -3
  110. package/docs/TESTING.md +23 -14
  111. package/docs/WORKSPACE_POSITION_AND_LIFECYCLE.md +113 -0
  112. package/docs/examples/policy-restricted-extension/README.md +2 -2
  113. package/docs/examples/starter-extension/README.md +1 -1
  114. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +4 -3
  115. package/marketplace.json +2 -2
  116. package/package.json +3 -3
  117. package/packages/pm-beads/package.json +1 -1
  118. package/packages/pm-calendar/package.json +1 -1
  119. package/packages/pm-command-kit/package.json +1 -1
  120. package/packages/pm-digital-twin/package.json +1 -1
  121. package/packages/pm-governance-audit/package.json +1 -1
  122. package/packages/pm-guide-shell/package.json +1 -1
  123. package/packages/pm-kanban/package.json +1 -1
  124. package/packages/pm-lifecycle-hooks/package.json +1 -1
  125. package/packages/pm-linked-test-adapters/package.json +1 -1
  126. package/packages/pm-search-advanced/package.json +1 -1
  127. package/packages/pm-templates/package.json +1 -1
  128. package/packages/pm-todos/package.json +1 -1
  129. package/packages/pm-vcs/package.json +1 -1
  130. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  131. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  132. package/sdk/public-surface.json +171 -10
  133. package/dist/cli-bundle/chunks/chunk-7X6OZEIV.js +0 -34
  134. package/dist/cli-bundle/chunks/register-operations-UC77FQZC.js +0 -2
  135. package/dist/cli-bundle/focused-chunks/chunk-AXZ5AJAF.js +0 -50
  136. package/dist/cli-bundle/focused-chunks/chunk-LLNTHF5X.js +0 -2
@@ -26,7 +26,7 @@ Use the same low-token route in every harness:
26
26
  Before release, run:
27
27
 
28
28
  ```bash
29
- pm install guide-shell --project
29
+ pm package install guide-shell --project
30
30
  pm guide skills --depth standard
31
31
  node scripts/release/docs-skills-gate.mjs
32
32
  ```
@@ -35,7 +35,7 @@ contracts.
35
35
  ## Runtime Routing
36
36
 
37
37
  ```bash
38
- pm install guide-shell --project
38
+ pm package install guide-shell --project
39
39
  pm guide # topic index
40
40
  pm guide skills
41
41
  pm guide harnesses --depth standard
@@ -34,7 +34,7 @@ routed into by section from the references below.
34
34
  Optional deep routing that never goes stale:
35
35
 
36
36
  ```bash
37
- pm install guide-shell --project
37
+ pm package install guide-shell --project
38
38
  pm guide workflows --depth brief
39
39
  ```
40
40
 
@@ -15,7 +15,7 @@ pnpm build
15
15
  ```bash
16
16
  pm context --limit 10
17
17
  pm search "<keywords>" --limit 10
18
- pm list-open --limit 20
18
+ pm list --status open --limit 20
19
19
  pm claim <ID>
20
20
  pm update <ID> --status in_progress --description "..."
21
21
  pm append <ID> --body "Implementation notes"
@@ -42,7 +42,7 @@ pm release <ID>
42
42
  ## Local Docs Routing
43
43
 
44
44
  ```bash
45
- pm install guide-shell --project
45
+ pm package install guide-shell --project
46
46
  pm guide workflows
47
47
  pm guide commands --depth standard
48
48
  pm guide release --json
@@ -22,7 +22,7 @@ Skipping this is the single most common cause of tracker merge conflicts.
22
22
  - `pm claim <ID>` before substantial edits. A claim is a recorded lease, not a
23
23
  lock file, and it survives branching.
24
24
  - `pm release <ID>` when pausing, handing off, closing, or canceling.
25
- - `pm list-in-progress` shows what the fleet currently holds.
25
+ - `pm list --status in_progress` shows what the fleet currently holds.
26
26
  - Never force an ownership or lock override without explicit human approval.
27
27
 
28
28
  Author identity is detected per invocation — harness, model, effort, role, and
@@ -81,5 +81,5 @@ pm next # ~2.5k tok — one actionable item with its context
81
81
  pm contracts --summary # ~2.6k tok — the command surface with per-command ceilings
82
82
  ```
83
83
 
84
- Prefer `pm next` over `pm list-open` when the goal is to start work: it applies
84
+ Prefer `pm next` over `pm list --status open` when the goal is to start work: it applies
85
85
  relevance ranking and returns a working set rather than a page of rows.
@@ -29,7 +29,7 @@ profiles over the same substrate.
29
29
  Optional deep routing that never goes stale:
30
30
 
31
31
  ```bash
32
- pm install guide-shell --project
32
+ pm package install guide-shell --project
33
33
  pm guide extensions
34
34
  ```
35
35
 
@@ -59,7 +59,7 @@ pm contracts --runtime-only --availability-only
59
59
  pm package explore --project # inspect state first
60
60
  pm package manage --detail summary
61
61
  pm package doctor --detail deep
62
- pm install <package> --project # then mutate
62
+ pm package install <package> --project # then mutate
63
63
  pm contracts --command <extension-command> --flags-only
64
64
  pm package doctor --detail deep # verify after
65
65
  ```
@@ -74,7 +74,7 @@ moment the package publishes.
74
74
  ```bash
75
75
  pm package init <name> # scaffold
76
76
  # ...implement extensions/*.ts...
77
- pm install <path-or-name> --project # install locally
77
+ pm package install <path-or-name> --project # install locally
78
78
  pm package doctor --detail deep # activation diagnostics
79
79
  pm contracts --command <your-command> --flags-only
80
80
  pm <your-command> --help --json # the contract a consumer will read
@@ -11,7 +11,7 @@ pm package doctor --detail deep
11
11
  ## Install and Activate
12
12
 
13
13
  ```bash
14
- pm install <target> --project
14
+ pm package install <target> --project
15
15
  pm package activate <target> --project
16
16
  pm package doctor --detail summary
17
17
  ```
@@ -29,7 +29,7 @@ integration should never import repository internals to get it.
29
29
  Optional deep routing that never goes stale:
30
30
 
31
31
  ```bash
32
- pm install guide-shell --project
32
+ pm package install guide-shell --project
33
33
  pm guide sdk
34
34
  pm guide tokens --depth brief
35
35
  ```
@@ -28,7 +28,7 @@ agent can rebuild the full situation from it alone.
28
28
  Optional deep routing that never goes stale:
29
29
 
30
30
  ```bash
31
- pm install guide-shell --project
31
+ pm package install guide-shell --project
32
32
  pm guide quickstart
33
33
  pm guide commands --depth brief
34
34
  ```
@@ -47,7 +47,7 @@ pm guide commands --depth brief
47
47
  ```bash
48
48
  pm context --limit 10
49
49
  pm search "<request keywords>" --limit 10
50
- pm list-open --limit 20 --output-include id,title,type,priority
50
+ pm list --status open --limit 20 --brief
51
51
  # reuse if it exists; otherwise create with lineage
52
52
  pm create --create-mode progressive \
53
53
  --title "..." --description "..." --type Task --status open \
@@ -7,8 +7,8 @@
7
7
  ```bash
8
8
  pm context --limit 10
9
9
  pm search "<keywords>" --limit 10
10
- pm list-open --limit 20
11
- pm list-in-progress --limit 20
10
+ pm list --status open --limit 20
11
+ pm list --status in_progress --limit 20
12
12
  ```
13
13
 
14
14
  2. If existing item matches, reuse and update it.
@@ -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.30"
9
+ "version": "2026.8.31"
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.30",
16
+ "version": "2026.8.31",
17
17
  "author": {
18
18
  "name": "unbrained",
19
19
  "url": "https://github.com/unbraind/pm-cli"
package/AGENTS.md CHANGED
@@ -19,7 +19,7 @@ Use runtime contracts for exact flags because packages and settings can change t
19
19
  ```bash
20
20
  pm <command> --help --json
21
21
  pm contracts --command <command> --flags-only --json
22
- pm install guide-shell --project
22
+ pm package install guide-shell --project
23
23
  pm guide <topic>
24
24
  ```
25
25
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.8.31 - 2026-08-31
4
+
5
+ ### Added
6
+
7
+ - Workspace position read: one bounded answer to where this workspace stands in the branch-and-merge workflow and what to run next, replacing a protocol the agent must remember ([pm-bq0ii8](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-bq0ii8.toon))
8
+
9
+ ### Fixed
10
+
11
+ - Custom statuses registered without a lifecycle role are silently orphaned from every work-selection surface ([pm-0mhspz](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-0mhspz.toon))
12
+ - GH-1158: Windows Node 24 nightly receipt fixture derives a root-relative expectation from a drive-qualified path ([pm-46hpx8](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-46hpx8.toon))
13
+ - GH-1154: linked-test sandbox guard is command-shape inconsistent and undocumented ([pm-s8cth5](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-s8cth5.toon))
14
+ - The local preflight token-budget gate is red on a workstation and green in hosted CI for the same commit again, because the earlier remediation closed the one ambient channel that had bitten instead of closing the fixture's environment ([pm-4o7tlx](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-4o7tlx.toon))
15
+ - The bounded legacy MCP compatibility set stops one revision short of the spec's own legacy boundary, so every current host is refused at initialize and the dual-era guarantee is unmet ([pm-edywqn](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-edywqn.toon))
16
+
17
+ ### Deprecated
18
+
19
+ - The project's own agent-facing documentation and skills instruct deprecated command spellings, so the alias-usage signal that decides when a spelling can be retired is manufactured by the instructions rather than observed from callers ([pm-q2n4vd](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-q2n4vd.toon))
20
+
3
21
  ## 2026.8.30 - 2026-08-30
4
22
 
5
23
  ### Other
@@ -1,11 +1,11 @@
1
1
 
2
- !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]="102d4534-fb3a-57a3-91d1-db344492b812")}catch(e){}}();
2
+ !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]="1c6a0524-a8eb-5a20-b395-b488249c4e83")}catch(e){}}();
3
3
  import { EXIT_CODE, PmCliError, readSettings, renderRowsAsCsv, renderRowsAsTable, resolvePmRoot, } from "../sdk/runtime-primitives.js";
4
4
  import { renderPmCommandAliasMigrationHint, resolvePmCommandAlias, } from "../sdk/cli-contracts.js";
5
5
  import { EVAL_QUERY_SET_SCHEMA_ID } from "../sdk/eval.js";
6
6
  import { applyContextIntentProjection } from "../sdk/context-intent-contracts.js";
7
7
  import { renderPmClosedDomainHelp } from "../sdk/agent/closed-domain-contracts.js";
8
- import { serializeNdjsonRows, serializeNdjsonStream, } from "../sdk/output.js";
8
+ import { serializeNdjsonRows, serializeNdjsonStream } from "../sdk/output.js";
9
9
  import { listMutationEvents, subscribeMutationEventBatches, subscribeMutationEvents, } from "../sdk/mutation-events.js";
10
10
  import { runActivity } from "./commands/activity.js";
11
11
  import { runAggregate } from "./commands/aggregate.js";
@@ -169,6 +169,22 @@ async function runRegisteredListCommand(params) {
169
169
  }
170
170
  const intentOptions = applyContextIntentProjection("list", params.options);
171
171
  const listOptions = normalizeListOptions(intentOptions);
172
+ const selection = resolveRegisteredListSelection(params, listOptions);
173
+ const { effectiveName, effectiveStatus, effectiveDependencyBlocked, effectiveExcludeTerminal, } = selection;
174
+ applyDefaultListProjection(listOptions, effectiveName);
175
+ Object.assign(listOptions, { projectionCommand: effectiveName });
176
+ if (effectiveExcludeTerminal)
177
+ listOptions.excludeTerminal = true;
178
+ listOptions.dependencyBlocked = effectiveDependencyBlocked;
179
+ const output = resolveRegisteredListOutputContext(intentOptions, globalOptions);
180
+ const result = await runList(effectiveDependencyBlocked ? undefined : effectiveStatus, listOptions, globalOptions);
181
+ renderRegisteredListResult("list", result, output);
182
+ if (globalOptions.profile) {
183
+ printError(`profile:command=list took_ms=${Date.now() - startedAt}`);
184
+ }
185
+ }
186
+ /** Resolve aliases and lifecycle buckets into one SDK list selection. */
187
+ function resolveRegisteredListSelection(params, listOptions) {
172
188
  let effectiveName = params.name;
173
189
  let effectiveStatus = params.status;
174
190
  let effectiveDependencyBlocked = params.dependencyBlocked === true;
@@ -183,7 +199,8 @@ async function runRegisteredListCommand(params) {
183
199
  effectiveExcludeTerminal = false;
184
200
  listOptions.status = undefined;
185
201
  }
186
- else if (requestedStatus !== undefined && requestedVariant !== undefined) {
202
+ else if (requestedStatus !== undefined &&
203
+ requestedVariant !== undefined) {
187
204
  effectiveName = requestedVariant.name;
188
205
  effectiveStatus = requestedStatus;
189
206
  effectiveDependencyBlocked = requestedVariant.dependencyBlocked;
@@ -191,17 +208,17 @@ async function runRegisteredListCommand(params) {
191
208
  listOptions.status = undefined;
192
209
  }
193
210
  }
194
- applyDefaultListProjection(listOptions, effectiveName);
195
- Object.assign(listOptions, { projectionCommand: effectiveName });
196
- if (effectiveExcludeTerminal)
197
- listOptions.excludeTerminal = true;
198
- listOptions.dependencyBlocked = effectiveDependencyBlocked;
199
- const output = resolveRegisteredListOutputContext(intentOptions, globalOptions);
200
- const result = await runList(effectiveDependencyBlocked ? undefined : effectiveStatus, listOptions, globalOptions);
201
- renderRegisteredListResult("list", result, output);
202
- if (globalOptions.profile) {
203
- printError(`profile:command=list took_ms=${Date.now() - startedAt}`);
211
+ if (effectiveName === "list-open" || effectiveName === "list-in-progress") {
212
+ listOptions.lifecycleBucket =
213
+ effectiveName === "list-open" ? "open" : "in_progress";
214
+ effectiveStatus = undefined;
204
215
  }
216
+ return {
217
+ effectiveName,
218
+ effectiveStatus,
219
+ effectiveDependencyBlocked,
220
+ effectiveExcludeTerminal,
221
+ };
205
222
  }
206
223
  function registerListCommand(program, descriptor) {
207
224
  const { name, description, status, excludeTerminal, allowStatusFilter, dependencyBlocked, aliasContract, } = descriptor;
@@ -465,9 +482,7 @@ function buildMutationEventOptions(options, pmRoot) {
465
482
  limit: typeof options.limit === "string" ? Number(options.limit) : undefined,
466
483
  full: options.full === true,
467
484
  ...(options.provenance === true ? { provenance: true } : {}),
468
- ...(options.provenanceSummary === true
469
- ? { provenanceSummary: true }
470
- : {}),
485
+ ...(options.provenanceSummary === true ? { provenanceSummary: true } : {}),
471
486
  ...(harness === undefined ? {} : { harness }),
472
487
  ...(agentInstance === undefined ? {} : { agentInstance }),
473
488
  ...(provenanceFilter === undefined ? {} : { provenanceFilter }),
@@ -924,4 +939,4 @@ export const _testOnlyRegisterListQuery = {
924
939
  parseListFormat,
925
940
  };
926
941
  //# sourceMappingURL=register-list-query.js.map
927
- //# debugId=102d4534-fb3a-57a3-91d1-db344492b812
942
+ //# debugId=1c6a0524-a8eb-5a20-b395-b488249c4e83
@@ -53,6 +53,7 @@ declare function buildRunTestOptions(options: Record<string, unknown>, values: {
53
53
  export declare const _testOnlyRegisterOperations: {
54
54
  buildRunTestOptions: typeof buildRunTestOptions;
55
55
  buildRunTestAllOptions: typeof buildRunTestAllOptions;
56
+ runWorkspacePositionAction: typeof runWorkspacePositionAction;
56
57
  validateBackgroundTestOptions: typeof validateBackgroundTestOptions;
57
58
  };
58
59
  declare function buildRunTestAllOptions(options: Record<string, unknown>): {
@@ -76,6 +77,7 @@ declare function buildRunTestAllOptions(options: Record<string, unknown>): {
76
77
  checkContext: boolean;
77
78
  autoPmContext: boolean;
78
79
  };
80
+ declare function runWorkspacePositionAction(_options: Record<string, unknown>, command: Command): Promise<void>;
79
81
  /** Enforces the claim target XOR selection contract before dispatch. */
80
82
  export declare function requireClaimTarget(id: string | undefined, next: boolean): void;
81
83
  /** Implements register operation commands for the public runtime surface of this module. */
@@ -1,9 +1,10 @@
1
1
 
2
- !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]="7377fa65-aaa9-5d28-b3fb-a8becaf0d484")}catch(e){}}();
2
+ !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]="ecf75f5d-6345-5487-b7e4-1bd8f97326fd")}catch(e){}}();
3
3
  import { resolveRuntimeStatusRegistry, setActiveCommandResult, EXIT_CODE, PmCliError, createUnknownSubcommandError, resolveAuthor, resolvePmRoot, readSettings, } from "../sdk/runtime-primitives.js";
4
4
  import { resolveStartTaskInProgressStatus } from "../sdk/start-task-status.js";
5
5
  import { parseStatsAnalyticsJson } from "./stats-analytics-json.js";
6
6
  import { createWorkspaceSnapshot, deleteWorkspaceSnapshot, inspectWorkspaceSnapshot, listWorkspaceSnapshots, planWorkspaceSnapshotRestore, restoreWorkspaceSnapshotWithRecovery, WORKSPACE_SNAPSHOT_ACTIONS, } from "../sdk/workspace-snapshot.js";
7
+ import { readWorkspacePosition } from "../sdk/governance/workspace-position.js";
7
8
  import { runClaim, runClaimNext, runRelease } from "./commands/claim.js";
8
9
  import { runClose } from "./commands/close.js";
9
10
  import { runContracts } from "./commands/contracts.js";
@@ -141,6 +142,7 @@ function buildRunTestOptions(options, values) {
141
142
  export const _testOnlyRegisterOperations = {
142
143
  buildRunTestOptions,
143
144
  buildRunTestAllOptions,
145
+ runWorkspacePositionAction,
144
146
  validateBackgroundTestOptions,
145
147
  };
146
148
  async function runForegroundLinkedTests(id, options, globalOptions, values) {
@@ -308,7 +310,7 @@ async function runHealthAction(options, command) {
308
310
  const strictExit = Boolean(options.strictExit) || Boolean(options.failOnWarn);
309
311
  const result = await runHealth(globalOptions, {
310
312
  strictDirectories: Boolean(options.strictDirectories),
311
- requireMergeDrivers: Boolean(options.requireMergeDrivers),
313
+ requireMergeDrivers: Boolean(options.requireMergeDrivers) || strictExit,
312
314
  checkOnly: Boolean(options.checkOnly),
313
315
  checkTelemetry: Boolean(options.checkTelemetry),
314
316
  noRefresh: Boolean(options.noRefresh),
@@ -446,6 +448,10 @@ async function runWorkspaceSnapshotAction(action, target, options, command) {
446
448
  }
447
449
  printResult(await deleteWorkspaceSnapshot(pmRoot, target), globalOptions);
448
450
  }
451
+ async function runWorkspacePositionAction(_options, command) {
452
+ const globalOptions = getGlobalOptions(command);
453
+ printResult(await readWorkspacePosition(globalOptions), globalOptions);
454
+ }
449
455
  async function runContractsAction(options, command) {
450
456
  const globalOptions = getGlobalOptions(command);
451
457
  const startedAt = Date.now();
@@ -595,8 +601,8 @@ export function registerOperationCommands(program) {
595
601
  const testCommand = program
596
602
  .command("test")
597
603
  .argument("<id>", "Item id")
598
- .option("--add <value>", "Add linked test entry (CSV/markdown pairs or - for stdin)", collect)
599
- .option("--add-json <value>", "Add linked test entry from JSON object/array (or - for stdin)", collect)
604
+ .option("--add <value>", "Add verified isolated test (CSV/markdown or stdin)", collect)
605
+ .option("--add-json <value>", "Add verified isolated test (JSON object/array or stdin)", collect)
600
606
  .option("--remove <value>", "Remove linked test entry by exact command/path (command=<value> and path=<value> preserve commas and equals signs; or - for stdin)", collect)
601
607
  .option("--remove-index <n>", "Remove the 1-based linked-test index from --list order (repeatable)", collect)
602
608
  .option("--list", "List linked tests without mutating")
@@ -712,13 +718,18 @@ export function registerOperationCommands(program) {
712
718
  .option("--scope <value>", "Limit cleanup to one or more scopes (comma-separated or repeatable): index, embeddings, runtime, locks, checkpoints, transactions", collect)
713
719
  .description("Delete optional cache artifacts by default (including expired lock debris) and show a summary.")
714
720
  .action(runGcAction);
715
- program
721
+ const workspaceCommand = program
716
722
  .command("workspace")
717
- .description("Manage portable workspace-level SDK primitives.")
723
+ .description("Inspect workspace state and snapshots.");
724
+ workspaceCommand
725
+ .command("position")
726
+ .description("Show merge and history readiness.")
727
+ .action(runWorkspacePositionAction);
728
+ workspaceCommand
718
729
  .command("snapshot")
719
- .argument("<action>", "Snapshot action: create, list, inspect, restore, delete")
730
+ .argument("<action>", "Action: create, list, inspect, restore, delete")
720
731
  .argument("[target]", "Optional name for create; name or fingerprint otherwise")
721
- .description("Create, inspect, list, restore, or delete content-addressed tracker snapshots.")
732
+ .description("Manage content-addressed tracker snapshots.")
722
733
  .option("--dry-run", "Preview restore file, item, stream, and history-entry impact without mutating state")
723
734
  .option("--force", "Explicitly confirm a whole-workspace snapshot restore")
724
735
  .option("--author <value>", "Actor recorded on the restore audit event")
@@ -898,4 +909,4 @@ function registerSchedulingShortcutCommands(program) {
898
909
  });
899
910
  }
900
911
  //# sourceMappingURL=register-operations.js.map
901
- //# debugId=7377fa65-aaa9-5d28-b3fb-a8becaf0d484
912
+ //# debugId=ecf75f5d-6345-5487-b7e4-1bd8f97326fd