@unbrained/pm-cli 2026.9.25 → 2026.9.27

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 (161) hide show
  1. package/.agents/skills/README.md +1 -0
  2. package/.agents/skills/pm-developer/SKILL.md +3 -0
  3. package/.agents/skills/pm-test-audit/LICENSE.txt +21 -0
  4. package/.agents/skills/pm-test-audit/SKILL.md +103 -0
  5. package/.agents/skills/pm-test-audit/references/AUDIT.md +54 -0
  6. package/.agents/skills/pm-test-audit/references/CAMPAIGN.md +47 -0
  7. package/.claude-plugin/marketplace.json +2 -2
  8. package/CHANGELOG.md +28 -1
  9. package/dist/cli/commander-usage.js +2 -2
  10. package/dist/cli/error-guidance.js +1 -1
  11. package/dist/cli/main.js +2 -2
  12. package/dist/cli/register-list-query.js +2 -2
  13. package/dist/cli/register-setup.js +1 -1
  14. package/dist/cli/runtime/selection.d.ts +3 -1
  15. package/dist/cli/runtime/selection.js +1 -1
  16. package/dist/cli/schema/registration.js +2 -2
  17. package/dist/cli-bundle/bundle-manifest.json +155 -147
  18. package/dist/cli-bundle/chunks/chunk-3BTJ66CB.js +238 -0
  19. package/dist/cli-bundle/chunks/{chunk-5AP67ZXH.js → chunk-4SLLCDFL.js} +39 -39
  20. package/dist/cli-bundle/chunks/{chunk-GAU55CWI.js → chunk-4UPZLUT2.js} +7 -7
  21. package/dist/cli-bundle/chunks/{chunk-25KTCTBL.js → chunk-6OJVQ7SW.js} +2 -2
  22. package/dist/cli-bundle/chunks/{chunk-445ARBKY.js → chunk-7TAGYNFP.js} +2 -2
  23. package/dist/cli-bundle/chunks/{chunk-GOWZEBTH.js → chunk-AUS6USO4.js} +2 -2
  24. package/dist/cli-bundle/chunks/{chunk-YDIGMRLZ.js → chunk-IEP3VAT5.js} +2 -2
  25. package/dist/cli-bundle/chunks/{chunk-3IB4THWX.js → chunk-JX6WCCHL.js} +6 -6
  26. package/dist/cli-bundle/chunks/chunk-LC6WEA5U.js +2 -0
  27. package/dist/cli-bundle/chunks/{chunk-CZ3VJJEA.js → chunk-LKGQUZ5M.js} +2 -2
  28. package/dist/cli-bundle/chunks/{chunk-P7ZSJOWH.js → chunk-OKVDVERQ.js} +2 -2
  29. package/dist/cli-bundle/chunks/{chunk-COFQCKF4.js → chunk-TSF2LPIH.js} +2 -2
  30. package/dist/cli-bundle/chunks/{chunk-YABJDOOX.js → chunk-V5UGBYHN.js} +3 -3
  31. package/dist/cli-bundle/chunks/{register-list-query-IZ7ZVTDE.js → register-list-query-6PAJ4PBU.js} +4 -4
  32. package/dist/cli-bundle/chunks/{register-mutation-IPAZTFDZ.js → register-mutation-RZCXZXYS.js} +4 -4
  33. package/dist/cli-bundle/chunks/{register-operations-APN33LNI.js → register-operations-GK6VU2H2.js} +2 -2
  34. package/dist/cli-bundle/chunks/register-setup-ASEMNMBF.js +2 -0
  35. package/dist/cli-bundle/focused-chunks/{chunk-KRIHJH5U.js → chunk-6J2YCGSN.js} +5 -5
  36. package/dist/cli-bundle/focused-chunks/{chunk-XKH2FC5D.js → chunk-6UNKK3UH.js} +2 -2
  37. package/dist/cli-bundle/focused-chunks/{chunk-NRHTXBTI.js → chunk-DQ3MB7BO.js} +2 -2
  38. package/dist/cli-bundle/focused-chunks/{chunk-PMPFLA6X.js → chunk-E7LYK7V5.js} +2 -2
  39. package/dist/cli-bundle/focused-chunks/chunk-GZD4ZYIB.js +20 -0
  40. package/dist/cli-bundle/focused-chunks/chunk-KMPKKSA6.js +2 -0
  41. package/dist/cli-bundle/focused-chunks/{chunk-TLF6N56J.js → chunk-LBDWUHQD.js} +2 -2
  42. package/dist/cli-bundle/focused-chunks/{chunk-UIFVIE5F.js → chunk-MILJCOFJ.js} +2 -2
  43. package/dist/cli-bundle/focused-chunks/{chunk-MK5AKKHK.js → chunk-NETVXIH5.js} +2 -2
  44. package/dist/cli-bundle/focused-chunks/{chunk-Q355NPLH.js → chunk-NWRVNHAD.js} +2 -2
  45. package/dist/cli-bundle/focused-chunks/{chunk-IXNNMP2R.js → chunk-NZAG7OKB.js} +12 -12
  46. package/dist/cli-bundle/focused-chunks/{chunk-OY3VHCTX.js → chunk-OJKJFDIG.js} +2 -2
  47. package/dist/cli-bundle/focused-chunks/chunk-OJRX6G22.js +2 -0
  48. package/dist/cli-bundle/focused-chunks/{chunk-NVVB2HJC.js → chunk-PDVL7QYU.js} +16 -16
  49. package/dist/cli-bundle/focused-chunks/{chunk-O7MIBEMK.js → chunk-QO4MTAEA.js} +2 -2
  50. package/dist/cli-bundle/focused-chunks/{chunk-ABA3KRPY.js → chunk-SMADBUPL.js} +2 -2
  51. package/dist/cli-bundle/main.js +21 -21
  52. package/dist/cli-bundle/sdk-authoring.js +1 -1
  53. package/dist/cli-bundle/sdk-contracts.js +1 -1
  54. package/dist/cli-bundle/sdk-core.js +20 -20
  55. package/dist/cli-bundle/sdk-governance.js +1 -1
  56. package/dist/cli-bundle/sdk-graph.js +1 -1
  57. package/dist/cli-bundle/sdk-merge.js +46 -46
  58. package/dist/cli-bundle/sdk-query.js +1 -1
  59. package/dist/cli-bundle/sdk-runtime.js +1 -1
  60. package/dist/cli-bundle/sdk-testing.js +1 -1
  61. package/dist/cli-bundle/sdk.js +8 -8
  62. package/dist/core/search/embedding-batches.d.ts +47 -15
  63. package/dist/core/search/embedding-batches.js +1 -1
  64. package/dist/core/search/eval-thresholds.d.ts +14 -0
  65. package/dist/core/search/eval-thresholds.js +2 -0
  66. package/dist/core/search/eval.d.ts +4 -1
  67. package/dist/core/search/eval.js +1 -1
  68. package/dist/core/search/http-client.d.ts +7 -0
  69. package/dist/core/search/http-client.js +1 -1
  70. package/dist/sdk/agent-capability-contracts.js +1 -1
  71. package/dist/sdk/cli-contracts/command-aliases.js +1 -1
  72. package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
  73. package/dist/sdk/completion/shared.d.ts +1 -1
  74. package/dist/sdk/completion/shared.js +1 -1
  75. package/dist/sdk/eval.d.ts +19 -17
  76. package/dist/sdk/eval.js +1 -1
  77. package/dist/sdk/extension/static-inventory.d.ts +54 -0
  78. package/dist/sdk/extension/static-inventory.js +2 -0
  79. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  80. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  81. package/dist/sdk/governance/reindex.d.ts +4 -1
  82. package/dist/sdk/governance/reindex.js +2 -2
  83. package/dist/sdk/guide-topics.js +1 -1
  84. package/dist/sdk/index.d.ts +1 -0
  85. package/dist/sdk/index.js +1 -1
  86. package/dist/sdk/public-surface.json +1 -1
  87. package/dist/sdk/query/complete-list.js +1 -1
  88. package/dist/sdk/query.d.ts +3 -0
  89. package/dist/sdk/query.js +1 -1
  90. package/dist/sdk/read-output/provenance.d.ts +20 -0
  91. package/dist/sdk/read-output/provenance.js +2 -0
  92. package/dist/sdk/read-output-contracts.js +1 -1
  93. package/dist/sdk/runtime/schema-preview.d.ts +2 -0
  94. package/dist/sdk/runtime/schema-preview.js +2 -0
  95. package/dist/sdk/runtime/schema.js +1 -1
  96. package/dist/sdk/runtime-input.js +1 -1
  97. package/dist/sdk/runtime-primitives.d.ts +2 -1
  98. package/dist/sdk/runtime-primitives.js +1 -1
  99. package/docs/CLI_GRAMMAR.md +31 -0
  100. package/docs/CODEX_PLUGIN.md +8 -0
  101. package/docs/EXTENSION_LIFECYCLE.md +18 -0
  102. package/docs/README.md +1 -0
  103. package/docs/RELEASING.md +51 -2
  104. package/docs/SEARCH_QUALITY.md +116 -0
  105. package/docs/agent-task-token-baseline.json +4 -4
  106. package/docs/generated/AGENT_CAPABILITY_ROUTING.md +1 -1
  107. package/docs/generated/AGENT_COMMAND_SURFACE.md +5 -1
  108. package/docs/generated/FLAG_LEXICON_BUDGETS.md +4 -0
  109. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +14 -7
  110. package/marketplace.json +2 -2
  111. package/package.json +2 -2
  112. package/packages/pm-beads/package.json +1 -1
  113. package/packages/pm-calendar/package.json +1 -1
  114. package/packages/pm-command-kit/package.json +1 -1
  115. package/packages/pm-digital-twin/package.json +1 -1
  116. package/packages/pm-governance-audit/package.json +1 -1
  117. package/packages/pm-guide-shell/package.json +1 -1
  118. package/packages/pm-kanban/package.json +1 -1
  119. package/packages/pm-lifecycle-hooks/package.json +1 -1
  120. package/packages/pm-linked-test-adapters/package.json +1 -1
  121. package/packages/pm-search-advanced/package.json +1 -1
  122. package/packages/pm-templates/package.json +1 -1
  123. package/packages/pm-todos/package.json +1 -1
  124. package/packages/pm-vcs/package.json +1 -1
  125. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  126. package/plugins/pm-claude/README.md +5 -1
  127. package/plugins/pm-claude/package.json +2 -2
  128. package/plugins/pm-claude/skills/pm-audit/SKILL.md +14 -103
  129. package/plugins/pm-claude/skills/pm-audit/agents/openai.yaml +4 -0
  130. package/plugins/pm-claude/skills/pm-developer/SKILL.md +20 -143
  131. package/plugins/pm-claude/skills/pm-developer/agents/openai.yaml +4 -0
  132. package/plugins/pm-claude/skills/pm-planner/SKILL.md +16 -167
  133. package/plugins/pm-claude/skills/pm-planner/agents/openai.yaml +4 -0
  134. package/plugins/pm-claude/skills/pm-release/SKILL.md +18 -102
  135. package/plugins/pm-claude/skills/pm-release/agents/openai.yaml +4 -0
  136. package/plugins/pm-claude/skills/pm-workflow/SKILL.md +25 -156
  137. package/plugins/pm-claude/skills/pm-workflow/agents/openai.yaml +4 -0
  138. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  139. package/plugins/pm-codex/README.md +10 -2
  140. package/plugins/pm-codex/mcp.json +11 -0
  141. package/plugins/pm-codex/package.json +2 -2
  142. package/plugins/pm-codex/plugin.json +45 -0
  143. package/plugins/pm-codex/skills/pm-audit/SKILL.md +21 -0
  144. package/plugins/pm-codex/skills/pm-audit/agents/openai.yaml +4 -0
  145. package/plugins/pm-codex/skills/pm-auditor/SKILL.md +5 -40
  146. package/plugins/pm-codex/skills/pm-auditor/agents/openai.yaml +3 -5
  147. package/plugins/pm-codex/skills/pm-developer/SKILL.md +26 -0
  148. package/plugins/pm-codex/skills/pm-developer/agents/openai.yaml +4 -0
  149. package/plugins/pm-codex/skills/pm-native/SKILL.md +7 -87
  150. package/plugins/pm-codex/skills/pm-native/agents/openai.yaml +3 -5
  151. package/plugins/pm-codex/skills/pm-planner/SKILL.md +22 -0
  152. package/plugins/pm-codex/skills/pm-planner/agents/openai.yaml +4 -0
  153. package/plugins/pm-codex/skills/pm-release/SKILL.md +17 -38
  154. package/plugins/pm-codex/skills/pm-release/agents/openai.yaml +2 -4
  155. package/plugins/pm-codex/skills/pm-workflow/SKILL.md +39 -0
  156. package/plugins/pm-codex/skills/pm-workflow/agents/openai.yaml +4 -0
  157. package/dist/cli-bundle/chunks/chunk-JDHWZYZU.js +0 -238
  158. package/dist/cli-bundle/chunks/register-setup-HPHIKG5U.js +0 -2
  159. package/dist/cli-bundle/focused-chunks/chunk-HQPTDJLF.js +0 -2
  160. package/dist/cli-bundle/focused-chunks/chunk-V2X37U6J.js +0 -2
  161. package/dist/cli-bundle/focused-chunks/chunk-Y2M4QLAA.js +0 -20
@@ -192,3 +192,34 @@ command migration.
192
192
  Full discovery uses a uniform destination table. Its `reason` column contains
193
193
  the rationale for exceptions and an empty string where no exception applies,
194
194
  so adding a rationale does not expand every row into repeated field names.
195
+
196
+ ## Workspace customization and optional authoring
197
+
198
+ Tracked by [pm-npr3](../.agents/pm/tasks/pm-npr3.toon) and
199
+ [pm-uk9dwh](../.agents/pm/tasks/pm-uk9dwh.toon).
200
+
201
+ | Canonical command | Compatibility spelling | Responsibility |
202
+ | --- | --- | --- |
203
+ | `workspace init` | `init` | Bootstrap storage, settings, and optional guidance |
204
+ | `workspace config` | `config` | Read or change individual project/global settings |
205
+ | `workspace schema` | `schema` | Define types, statuses, fields, and validation contracts |
206
+ | `workspace profile` | `profile` | Apply reusable bundles of schema, settings, and templates |
207
+
208
+ These facets share workspace ownership. Schema defines what records mean;
209
+ configuration sets operating policy; profiles compose those primitives for a
210
+ domain; initialization creates their storage. The original SDK methods and MCP
211
+ actions keep their names and semantics. Root spellings remain permanent silent
212
+ aliases, including their arguments and flags.
213
+
214
+ `templates` remains owned by the optional templates package, within the workspace
215
+ authoring family. Its list/save/show operations provide reusable creation defaults;
216
+ they do not define schema or replace profiles. The destination census declares
217
+ these optional paths even when the package is inactive. `guide` remains owned by
218
+ `guide-shell` within the help family, so reading documentation is not a prerequisite
219
+ for core operation. `workspace position` and `workspace snapshot` retain their
220
+ existing state and recovery roles.
221
+
222
+ The bounded orientation sequence remains `pm context --for orient`, followed by
223
+ `pm contracts --command "workspace schema" --flags-only` (or the relevant command).
224
+ Use `pm workspace --help` to discover customization facets. No additional core noun
225
+ or mandatory package is introduced.
@@ -7,6 +7,14 @@ MCP server. Its cached runtime installs the exact version declared by the plugin
7
7
  audit, verified gaps, and phased remediation plan are documented in
8
8
  [Native ChatGPT and Codex Plugin Implementation Plan](CHATGPT_CODEX_PLUGIN_IMPLEMENTATION.md).
9
9
 
10
+ The portable package uses root `plugin.json` and `mcp.json`. The existing
11
+ `.codex-plugin/plugin.json` and `.mcp.json` remain compatibility manifests for
12
+ older hosts. The portable MCP entry launches the same exact-version cached
13
+ server as the compatibility entry. `pnpm version:check` and the release
14
+ provenance gate cover both versioned plugin manifests. The five portable skills
15
+ are generated from `templates/agent-skills/` into both plugin bundles, with
16
+ static drift checking before release.
17
+
10
18
  ## Install From This Repo
11
19
 
12
20
  ```bash
@@ -3,6 +3,24 @@
3
3
  Tracked by [pm-ig5cfe](../.agents/pm/issues/pm-ig5cfe.toon),
4
4
  [pm-495lkc](../.agents/pm/issues/pm-495lkc.toon), and
5
5
  [pm-miy5k6](../.agents/pm/issues/pm-miy5k6.toon).
6
+ Static inventory is tracked by [pm-lhhnx9](../.agents/pm/issues/pm-lhhnx9.toon).
7
+
8
+ ## Read-only configured inventory
9
+
10
+ Use `pm package inventory --project --json` (or `--global`) for a host GET route
11
+ or agent read. Pass a name to receive an explicit `absent` row. The public SDK
12
+ equivalent is `inspectStaticExtensionInventory({ pmRoot, scope, name })` from
13
+ `@unbrained/pm-cli/sdk`. Both read settings, managed metadata, and manifests
14
+ without importing package entrypoints, running hooks, checking for updates,
15
+ adopting installs, or writing workspace files. An absent managed-state file is
16
+ reported separately from an invalid one. `complete: false` and `errors` mean
17
+ the list must not be treated as authoritative; the CLI also exits nonzero.
18
+
19
+ `configured_enabled` is the effective saved enablement setting, while
20
+ `runtime_active` is always `null`. The static read does not prove that a package
21
+ will activate successfully. `pm package explore`, `manage`, `doctor`, and
22
+ `describe` probe runtime state and may execute installed package code. Run
23
+ those commands only when an activation probe is intended.
6
24
 
7
25
  ## Explicit Install-Source Identity
8
26
 
package/docs/README.md CHANGED
@@ -38,6 +38,7 @@ pm guide release --json
38
38
  - [Context and Operations Namespaces](COMMAND_NAMESPACES.md) - native navigation, diagnostics, event streams, and compatibility aliases.
39
39
  - [CLI Scripting Contract](SCRIPTING.md) - exit codes, flat mutation receipts versus read envelopes, stdout/stderr boundaries, stable JSON fields, uniform OR filters, and shell composition recipes.
40
40
  - [Configuration](CONFIGURATION.md) - settings, storage formats, output, search, validation, and environment variables.
41
+ - [Semantic Batching and Retrieval Quality](SEARCH_QUALITY.md) - independent request bounds, execution receipts, and per-query quality floors.
41
42
  - [Testing](TESTING.md) - sandbox-safe local tests and linked-test orchestration.
42
43
  - [Completion Portability and Bounded Replication Checks](VALIDATION_PORTABILITY.md) - literal Bash choices across versions and locales, and semantic Git diff collection.
43
44
  - [Build and Release Acceptance](BUILD_AND_RELEASE_ACCEPTANCE.md) - complete-build leases and cross-platform registry installation controls.
package/docs/RELEASING.md CHANGED
@@ -76,7 +76,52 @@ pnpm version:check
76
76
 
77
77
  `.github/workflows/auto-release.yml` runs once per day and can also be dispatched manually.
78
78
 
79
- Policy:
79
+ ### Independent morning dispatch
80
+
81
+ Tracked by [pm-9url9h](../.agents/pm/tasks/pm-9url9h.toon). An independent
82
+ operator-managed timer can invoke `scripts/release/dispatch-daily-release.mjs`
83
+ at **04:45 Europe/Vienna** (02:45 UTC in summer, 03:45 UTC in winter).
84
+ The aim is completion before 06:30–07:00 local time; host availability, GitHub
85
+ runner capacity and release gates can prevent that target. The host must be
86
+ awake, online and able to authenticate with `gh` unattended.
87
+
88
+ The existing **02:35 UTC GitHub cron remains enabled as a fallback**. Either
89
+ clock can arrive first. The dispatcher checks both release workflows for active
90
+ runs and skips an existing exact UTC-day tag. Tag existence is explicitly not
91
+ publication proof: incomplete publication still requires the normal immutable-tag
92
+ recovery procedure. Hosted concurrency and the one-release-per-UTC-day guard
93
+ remain the final protection if a native run races the external request.
94
+
95
+ The standalone dispatcher requires an absolute private state directory:
96
+
97
+ ```bash
98
+ node scripts/release/dispatch-daily-release.mjs --state-dir /absolute/private/state --check
99
+ ```
100
+
101
+ `--check` reads prerequisites without dispatching or writing state, including
102
+ outside the morning window. Without it, the dispatcher accepts only
103
+ 04:45–05:15 Vienna time and sends `workflow_dispatch` to `auto-release.yml` on
104
+ `main` with explicit `push=true`, `dry_run=false`, and `telemetry_mode=off`,
105
+ matching scheduled production policy. It never builds from the operator's
106
+ working branch, changes release secrets or bypasses hosted gates.
107
+
108
+ An exclusive daily intent file is written **before** sending the request. A
109
+ timeout can mean GitHub accepted the request, so an uncertain attempt is retained
110
+ and never automatically resent that UTC day. Inspect hosted run history before
111
+ any manual recovery. Pre-dispatch read failures leave no intent; a timer may
112
+ try again within the morning window. Late persistent-timer catch-up is a no-op.
113
+ Install a reviewed copy outside development checkouts so branch edits cannot
114
+ silently change an unattended service.
115
+
116
+ Keep dispatcher output in the service journal: `dispatch_accepted` proves only
117
+ API acceptance. Verify the hosted run, GitHub Release and exact npm version
118
+ separately. These runs remain `workflow_dispatch`; they do not improve or erase
119
+ the native `schedule` denominator in [Release Reliability](RELEASE_RELIABILITY.md).
120
+ Disable the independent timer to roll back; the original hosted schedule and
121
+ publication path continue unchanged. Host-specific unit files and authentication
122
+ configuration belong in private operator documentation.
123
+
124
+ ### Hosted release policy
80
125
 
81
126
  - release only when commits exist after the latest release tag
82
127
  - ignore tracker-governance-only commits for publish eligibility: `.agents/pm/**` and the mechanically generated `CHANGELOG.md` projection do not create a package release by themselves, while any product, test, documentation, workflow, or other changed path remains release-relevant
@@ -282,7 +327,11 @@ The automatic release commit is the sole non-identical-tree derivation. The
282
327
  gate requires one parent, the canonical release subject and body, an immutable
283
328
  `v<version>` tag resolving to the candidate, the complete expected manifest
284
329
  inventory, exact old-version to new-version substitutions in every manifest,
285
- and an exact `Unreleased` changelog-heading replacement. The package-generated
330
+ and an exact `Unreleased` changelog-heading replacement. Fixed distribution
331
+ paths come from the same inventory as version synchronization and staging.
332
+ Plugin runtime package manifests are mandatory when present in the immutable
333
+ parent tree; historical parents that predate those files remain verifiable.
334
+ The package-generated
286
335
  replacement may be `## <version>` or the historical
287
336
  `## <version> - <YYYY-MM-DD>` form, with the date matching the calendar version.
288
337
  The complete heading must match and every other changelog byte must remain
@@ -0,0 +1,116 @@
1
+ # Semantic Batching and Retrieval Quality
2
+
3
+ Tracked by [pm-vjgqj5](../.agents/pm/issues/pm-vjgqj5.toon) and
4
+ [pm-p1g43q](../.agents/pm/features/pm-p1g43q.toon).
5
+
6
+ ## Agent Quick Context
7
+
8
+ Use `pm reindex --mode semantic --progress` to refresh stale embeddings and
9
+ `pm eval --queries ./queries.json --k 10` to measure retrieval. A successful
10
+ index refresh proves that vectors were written, not that relevant items rank
11
+ well. Evaluate quality separately.
12
+
13
+ ## Independent Input and Request Limits
14
+
15
+ The built-in scheduler preserves `search.embedding_batch_size` as the maximum
16
+ number of input positions per planned batch. Per-input text truncation still
17
+ uses `search.embedding_corpus_max_characters` or the provider default.
18
+
19
+ Requests additionally have a 256 KiB encoded JSON byte ceiling. This counts
20
+ UTF-8, JSON escaping, array separators, and model metadata; it is independent of
21
+ the per-input character limit. OpenAI's single-string encoding and duplicate
22
+ input elimination can make the actual payload smaller than this conservative
23
+ planning bound. An individual input that cannot fit is refused before any
24
+ request is sent. Empty inputs are also refused rather than silently shifting
25
+ vector positions.
26
+
27
+ SDK hosts may supply `maxRequestBytes` to
28
+ `executeEmbeddingBatchesWithRetry`, exported by
29
+ `@unbrained/pm-cli/sdk/query`. The request ceiling is a transport
30
+ bound, not a model tokenizer or context-window claim. Model input limits remain
31
+ provider-owned. [Ollama's embedding API](https://docs.ollama.com/api/embed)
32
+ accepts arrays of inputs and describes its own context truncation behavior.
33
+
34
+ HTTP 413 and timeout failures split a multi-input batch in half. Both halves
35
+ complete in source order. Other failures use the configured bounded retry
36
+ policy. A singleton failure terminates the operation; failed execution never
37
+ returns a partial vector array. Sequential execution avoids creating a burst
38
+ of concurrent requests against a local embedding model.
39
+
40
+ HTTP status takes precedence over response text: a non-413 error containing
41
+ the word "timeout" does not trigger splitting. For a planned batch of `n`
42
+ positions, binary subdivision creates at most `2n - 1` request nodes, each
43
+ with at most `scanner_max_batch_retries + 1` attempts. SDK hosts accepting
44
+ untrusted workloads should constrain corpus size, retry settings and the
45
+ caller-supplied byte ceiling to their provider budget; this primitive does not
46
+ impose a universal account-level quota.
47
+
48
+ `pm reindex` exposes `semantic.batching` for built-in providers:
49
+
50
+ - `planned_batches` counts batches before adaptation;
51
+ - `requests`, `successful_batches`, `split_batches`, and `retries` describe
52
+ actual execution;
53
+ - `batch_size_histogram` counts successful requests by input positions;
54
+ - `elapsed_ms` and `inputs_per_second` include retry backoff;
55
+ - `provider`, `model`, `max_request_bytes`, and `limit_source` explain the run.
56
+
57
+ These receipts contain no input text, credentials, or endpoint addresses.
58
+ Empty work retains the existing empty result; extension providers do not
59
+ receive a fabricated built-in batching receipt.
60
+
61
+ ## Per-query Quality Floors
62
+
63
+ A golden query may declare a `minimum` object containing any of `ndcg`, `mrr`,
64
+ `precision`, and `recall`. Each value must be a finite number in `[0, 1]`.
65
+ Unknown metric names fail validation so a spelling error cannot remove a gate.
66
+
67
+ ```json
68
+ [
69
+ {
70
+ "query": "snapshot restore durability",
71
+ "relevant_ids": ["pm-snapshot", "pm-restore"],
72
+ "mode": "keyword",
73
+ "minimum": { "recall": 0.5, "mrr": 0.5 }
74
+ }
75
+ ]
76
+ ```
77
+
78
+ Replace the example IDs with judgments from your workspace. `pm eval` compares
79
+ unrounded scores to these floors and reports `violations` on the affected query.
80
+ It exits nonzero if any floor fails, even when no `--fail-under` is supplied or
81
+ the aggregate nDCG passes. Existing query sets without floors retain their
82
+ aggregate-only behavior. The public query SDK exports `parseEvalMetricFloors`
83
+ and `evaluateMetricFloors` for package-owned evaluations.
84
+
85
+ The repository's `quality:retrieval-eval` gate also pins floors by query text
86
+ and retrieval mode. Missing, unexpected or duplicated identities and mismatched
87
+ declared row counts fail. Explicit
88
+ `--update` refreshes never lower a prior floor or discard a missing required
89
+ query. A baseline update is a reviewed policy change; it is not permission to
90
+ change relevance judgments until a score turns green.
91
+
92
+ ## Verification Boundaries
93
+
94
+ Real loopback HTTP tests exercise batching, Unicode payloads, 413 recovery,
95
+ vector ordering, and pre-dispatch refusal. Evaluator tests exercise the case
96
+ where the macro average passes while one query fails. These are transport and
97
+ quality-contract proofs, not measured million-item model throughput, semantic
98
+ ranking improvements, parallel scheduling, or durable partial-run resume.
99
+ Those broader acceptance criteria remain tracked by the linked items.
100
+
101
+ ## Portable Delivery Evidence
102
+
103
+ Workspace-owned custom types used by delivery records must be declared in the
104
+ tracked project schema. An ignored local extension installation does not make
105
+ its types available to a fresh CI checkout. This repository declares `Changeset`
106
+ in `schema/types.json` through `pm schema add-type`, and verifies changelog output
107
+ in a clean checkout with only the published changelog package installed.
108
+
109
+ Schema `--dry-run` applies to rename/remap migrations and workflow-policy
110
+ actions. Other schema operations refuse the flag before writing, through the
111
+ shared SDK guard used by CLI and SDK/MCP dispatch. For example,
112
+ `pm schema rename-type Spike --to Experiment --dry-run` previews a migration;
113
+ `pm schema add-type Spike --dry-run` is refused. Adding a type is an explicit
114
+ write operation. Tracked by [pm-s74dca](../.agents/pm/issues/pm-s74dca.toon).
115
+ SDK hosts can reuse `assertSchemaPreviewSupported(subcommand, dryRun)` from
116
+ `@unbrained/pm-cli/sdk` when dispatching built-in schema operations.
@@ -77,7 +77,7 @@
77
77
  {
78
78
  "task_id": "orientation-contracts-next",
79
79
  "command_count": 2,
80
- "estimated_tokens": 5180,
80
+ "estimated_tokens": 5203,
81
81
  "capabilities": [
82
82
  "actionable_work",
83
83
  "active_ownership",
@@ -120,11 +120,11 @@
120
120
  },
121
121
  {
122
122
  "id": "orientation-contracts-next",
123
- "max_estimated_tokens": 5180,
123
+ "max_estimated_tokens": 5203,
124
124
  "steps": [
125
125
  {
126
126
  "id": "contracts",
127
- "max_estimated_tokens": 4458,
127
+ "max_estimated_tokens": 4481,
128
128
  "accounting_mode": "self_reported"
129
129
  },
130
130
  {
@@ -261,5 +261,5 @@
261
261
  ]
262
262
  }
263
263
  ],
264
- "composite_max_estimated_tokens": 13011
264
+ "composite_max_estimated_tokens": 13034
265
265
  }
@@ -6,7 +6,7 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
6
6
 
7
7
  | Capability family | Commands |
8
8
  | --- | --- |
9
- | workspace | `init`, `config`, `workspace merge`, `schema`, `profile`, `ops telemetry`, `ops health`, `ops gc`, `workspace` |
9
+ | workspace | `workspace init`, `workspace config`, `workspace merge`, `workspace schema`, `workspace profile`, `ops telemetry`, `ops health`, `ops gc`, `workspace` |
10
10
  | intake | `create`, `item`, `item copy`, `context focus`, `history restore` |
11
11
  | context | `list`, `aggregate`, `context`, `get`, `search`, `item duplicates`, `ops eval`, `context next`, `history activity`, `ops stats`, `help` |
12
12
  | lifecycle | `update`, `update many`, `close`, `close many`, `close delete`, `claim`, `release` |
@@ -5,7 +5,9 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
5
5
  | Command | Minimum visibility tier | Capability family |
6
6
  | --- | --- | --- |
7
7
  | `init` | core | workspace |
8
+ | `workspace init` | core | workspace |
8
9
  | `config` | standard | workspace |
10
+ | `workspace config` | standard | workspace |
9
11
  | `extension` | full | extensions |
10
12
  | `package` | full | extensions |
11
13
  | `packages` | full | extensions |
@@ -54,7 +56,9 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
54
56
  | `merge` | full | workspace |
55
57
  | `workspace merge` | full | workspace |
56
58
  | `schema` | standard | workspace |
59
+ | `workspace schema` | standard | workspace |
57
60
  | `profile` | standard | workspace |
61
+ | `workspace profile` | standard | workspace |
58
62
  | `activity` | full | context |
59
63
  | `history activity` | full | context |
60
64
  | `restore` | full | intake |
@@ -97,7 +101,7 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
97
101
  | `assurance` | full | quality |
98
102
  | `gc` | full | workspace |
99
103
  | `ops gc` | full | workspace |
100
- | `workspace` | full | workspace |
104
+ | `workspace` | core | workspace |
101
105
  | `contracts` | standard | quality |
102
106
  | `claim` | core | lifecycle |
103
107
  | `release` | core | lifecycle |
@@ -95,6 +95,10 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
95
95
  | `update many` | lifecycle | 146 | 146 |
96
96
  | `close many` | lifecycle | 72 | 72 |
97
97
  | `close delete` | lifecycle | 24 | 24 |
98
+ | `workspace init` | workspace | 30 | 30 |
99
+ | `workspace config` | workspace | 36 | 36 |
100
+ | `workspace schema` | workspace | 43 | 43 |
101
+ | `workspace profile` | workspace | 22 | 22 |
98
102
  | `item comments` | evidence | 31 | 31 |
99
103
  | `item notes` | evidence | 35 | 35 |
100
104
  | `item learnings` | evidence | 31 | 31 |
@@ -4,14 +4,14 @@ Tracker: `pm-f05lsg`.
4
4
 
5
5
  Every catalog code is listed. An `uncovered` row is an explicit closure obligation, never an omission or implied approval.
6
6
 
7
- - Catalog error codes: 378
7
+ - Catalog error codes: 385
8
8
  - Executable error codes: 19
9
9
  - Executable-code ratchet floor: 18
10
10
  - Required executable canonical codes: `bulk_ids_input_empty`, `bulk_ids_input_missing_path`, `bulk_ids_input_unreadable`, `invalid_argument_value`, `manifest_unknown_key`, `missing_lifecycle_target`, `missing_required_argument`, `no_version_bounds_declared`, `projection_options_mutually_exclusive`, `tracker_not_initialized`, `tracker_root_missing`, `tracker_root_not_directory`, `tracker_root_unreadable`, `unknown_context_intent`, `unknown_field_projection`, `unknown_option`, `unknown_subcommand`
11
- - Uncovered error codes: 359
12
- - Coverage fraction: 0.050265
11
+ - Uncovered error codes: 366
12
+ - Coverage fraction: 0.049351
13
13
  - Closed-domain probes: 19
14
- - Grammar probes: 113
14
+ - Grammar probes: 117
15
15
 
16
16
  | Error code | Canonical code | Disposition | Evidence kinds | Probe count |
17
17
  | --- | --- | --- | --- | --- |
@@ -96,6 +96,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
96
96
  | `extension_mutation_guard_invalid_denial` | `extension_mutation_guard_invalid_denial` | uncovered | none | 0 |
97
97
  | `extension_mutation_guard_timed_out` | `extension_mutation_guard_timed_out` | uncovered | none | 0 |
98
98
  | `extension_update_health_partial_coverage` | `extension_update_health_partial_coverage` | uncovered | none | 0 |
99
+ | `extensions_unreadable` | `extensions_unreadable` | uncovered | none | 0 |
99
100
  | `field_duplicate` | `field_duplicate` | uncovered | none | 0 |
100
101
  | `field_invalid` | `field_invalid` | uncovered | none | 0 |
101
102
  | `field_mcp_input_collision` | `field_mcp_input_collision` | uncovered | none | 0 |
@@ -189,8 +190,12 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
189
190
  | `locks_stale_count` | `locks_stale_count` | uncovered | none | 0 |
190
191
  | `locks_unreadable` | `locks_unreadable` | uncovered | none | 0 |
191
192
  | `malformed_plan_step_evidence` | `malformed_plan_step_evidence` | uncovered | none | 0 |
193
+ | `managed_state_invalid` | `managed_state_invalid` | uncovered | none | 0 |
194
+ | `managed_state_unreadable` | `managed_state_unreadable` | uncovered | none | 0 |
192
195
  | `manifest_capabilities_absent` | `manifest_capabilities_absent` | uncovered | none | 0 |
196
+ | `manifest_invalid` | `manifest_invalid` | uncovered | none | 0 |
193
197
  | `manifest_unknown_key` | `manifest_unknown_key` | executable | owned_state | 1 |
198
+ | `manifest_unreadable` | `manifest_unreadable` | uncovered | none | 0 |
194
199
  | `mcp_annotation_file_unavailable` | `mcp_annotation_file_unavailable` | uncovered | none | 0 |
195
200
  | `mcp_stdin_unavailable` | `mcp_stdin_unavailable` | uncovered | none | 0 |
196
201
  | `mcp_task_not_found_or_not_authorized` | `mcp_task_not_found_or_not_authorized` | uncovered | none | 0 |
@@ -216,7 +221,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
216
221
  | `missing_parameter_alias` | `missing_parameter_alias` | uncovered | none | 0 |
217
222
  | `missing_positive_execution_receipt` | `missing_positive_execution_receipt` | uncovered | none | 0 |
218
223
  | `missing_probe` | `missing_probe` | uncovered | none | 0 |
219
- | `missing_required_argument` | `missing_required_argument` | executable | grammar | 75 |
224
+ | `missing_required_argument` | `missing_required_argument` | executable | grammar | 77 |
220
225
  | `missing_required_option` | `missing_required_option` | uncovered | none | 0 |
221
226
  | `missing_suggested_retry` | `missing_suggested_retry` | uncovered | none | 0 |
222
227
  | `missing_suggested_retry_args` | `missing_suggested_retry_args` | uncovered | none | 0 |
@@ -274,10 +279,12 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
274
279
  | `retry_failed` | `retry_failed` | uncovered | none | 0 |
275
280
  | `schema_migration_input_required` | `schema_migration_input_required` | uncovered | none | 0 |
276
281
  | `semantic_spelling_collision` | `semantic_spelling_collision` | uncovered | none | 0 |
282
+ | `settings_invalid` | `settings_invalid` | uncovered | none | 0 |
277
283
  | `settings_read_fs_error` | `settings_read_fs_error` | uncovered | none | 0 |
278
284
  | `settings_read_invalid_json` | `settings_read_invalid_json` | uncovered | none | 0 |
279
285
  | `settings_read_invalid_schema` | `settings_read_invalid_schema` | uncovered | none | 0 |
280
286
  | `settings_read_merge_failed` | `settings_read_merge_failed` | uncovered | none | 0 |
287
+ | `settings_unreadable` | `settings_unreadable` | uncovered | none | 0 |
281
288
  | `stale_budget` | `stale_budget` | uncovered | none | 0 |
282
289
  | `stale_destination` | `stale_destination` | uncovered | none | 0 |
283
290
  | `stale_observed_signature` | `stale_observed_signature` | uncovered | none | 0 |
@@ -318,13 +325,13 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
318
325
  | `unknown_field` | `unknown_field` | uncovered | none | 0 |
319
326
  | `unknown_field_projection` | `unknown_field_projection` | executable | closed_domain | 10 |
320
327
  | `unknown_item_type` | `unknown_item_type` | uncovered | none | 0 |
321
- | `unknown_lifecycle_action` | `unknown_subcommand` | executable | grammar, owned_state | 12 |
328
+ | `unknown_lifecycle_action` | `unknown_subcommand` | executable | grammar, owned_state | 14 |
322
329
  | `unknown_noun` | `unknown_noun` | uncovered | none | 0 |
323
330
  | `unknown_option` | `unknown_option` | executable | owned_state | 1 |
324
331
  | `unknown_plan_template` | `unknown_plan_template` | uncovered | none | 0 |
325
332
  | `unknown_provenance_dimension` | `unknown_provenance_dimension` | uncovered | none | 0 |
326
333
  | `unknown_status` | `unknown_status` | uncovered | none | 0 |
327
- | `unknown_subcommand` | `unknown_subcommand` | executable | grammar, owned_state | 12 |
334
+ | `unknown_subcommand` | `unknown_subcommand` | executable | grammar, owned_state | 14 |
328
335
  | `unsafe_init_recovery` | `unsafe_init_recovery` | uncovered | none | 0 |
329
336
  | `unsupported_update_option` | `unsupported_update_option` | uncovered | none | 0 |
330
337
  | `validate_command_references_stale_pm_ids` | `validate_command_references_stale_pm_ids` | uncovered | none | 0 |
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.9.25"
9
+ "version": "2026.9.27"
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.9.25",
16
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.10.0",
@@ -123,7 +123,7 @@
123
123
  "lint:complexity:baseline": "eslint . --suppress-rule complexity --suppress-rule sonarjs/cognitive-complexity",
124
124
  "lint:duplicates": "jscpd --config .jscpd.json && jscpd --config .jscpd.source.json && jscpd --config .jscpd.tables.json",
125
125
  "lint:codefactor": "pnpm quality:static",
126
- "quality:static": "pnpm quality:docstrings && pnpm quality:exports && pnpm lint:eslint && pnpm lint:duplicates && node scripts/check-workflow-permissions.mjs && node scripts/check-dependency-cooldown.mjs && node scripts/gen-plugin-mcp-wrappers.mjs --check && pnpm build && node scripts/contracts-snapshot.mjs --check && node scripts/generate-agent-capability-surfaces.mjs --check && node scripts/generate-error-code-catalog.mjs --check && node scripts/release/repository-assurance.mjs repository-static-quality --trigger ci --json && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs && node scripts/release/refusal-closure-gate.mjs && node scripts/release/agent-task-token-gate.mjs && pnpm quality:mcp-deprecations && node dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check && node dist/cli.js assurance run graph-composition --trigger ci --dry-run --json --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded && pnpm quality:mutation -- --prebuilt",
126
+ "quality:static": "pnpm quality:docstrings && pnpm quality:exports && pnpm lint:eslint && pnpm lint:duplicates && node scripts/check-workflow-permissions.mjs && node scripts/check-dependency-cooldown.mjs && node scripts/gen-plugin-mcp-wrappers.mjs --check && node scripts/gen-agent-plugin-skills.mjs --check && pnpm build && node scripts/contracts-snapshot.mjs --check && node scripts/generate-agent-capability-surfaces.mjs --check && node scripts/generate-error-code-catalog.mjs --check && node scripts/release/repository-assurance.mjs repository-static-quality --trigger ci --json && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs && node scripts/release/refusal-closure-gate.mjs && node scripts/release/agent-task-token-gate.mjs && pnpm quality:mcp-deprecations && node dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check && node dist/cli.js assurance run graph-composition --trigger ci --dry-run --json --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded && pnpm quality:mutation -- --prebuilt",
127
127
  "quality:exports": "knip --no-config-hints && node scripts/run-tests.mjs test -- tests/unit/scripts/release/dead-exports.spec.ts",
128
128
  "quality:command-grammar": "pnpm build && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs",
129
129
  "quality:recovery-closure": "pnpm build && node scripts/release/refusal-closure-gate.mjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-beads",
3
- "version": "2026.9.25",
3
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
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.9.25",
3
+ "version": "2026.9.27",
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.9.25",
4
+ "version": "2026.9.27",
5
5
  "author": {
6
6
  "name": "unbrained",
7
7
  "url": "https://github.com/unbraind/pm-cli"
@@ -13,6 +13,10 @@ Native pm CLI integration for Claude Code. Use pm project management tools direc
13
13
  | **Hybrid TUI tracking** | pm items sync to Claude Code's task panel — pm is the persistent store, the task panel is the live session view |
14
14
  | **Session hook** | Injects active pm item summary at session start using the same pinned pm-cli runtime as the MCP server |
15
15
 
16
+ The five skills are generated from the shared portable source in
17
+ `templates/agent-skills/`. Both plugin packages carry identical workflow
18
+ guidance; the Claude task panel mapping is conditional on its tools.
19
+
16
20
  ## Installation
17
21
 
18
22
  ### Option A: Plugin marketplace — canonical install (recommended)
@@ -177,7 +181,7 @@ Spawn pm-triage-agent to set up the pm item for: add OAuth2 login support
177
181
 
178
182
  ## Hybrid TUI Sync Pattern
179
183
 
180
- All skills and commands implement this pattern for every claimed item:
184
+ Claude commands can mirror claimed items with this pattern:
181
185
 
182
186
  ```
183
187
  1. pm_claim → [pm stores claim]
@@ -2,8 +2,8 @@
2
2
  "name": "pm-claude-runtime",
3
3
  "private": true,
4
4
  "type": "module",
5
- "version": "2026.9.25",
5
+ "version": "2026.9.27",
6
6
  "dependencies": {
7
- "@unbrained/pm-cli": "2026.9.25"
7
+ "@unbrained/pm-cli": "2026.9.27"
8
8
  }
9
9
  }