@unbrained/pm-cli 2026.11.4 → 2026.11.5
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.
- package/.agents/skills/HARNESS_COMPATIBILITY.md +1 -1
- package/.agents/skills/README.md +14 -14
- package/.agents/skills/pm-developer/SKILL.md +16 -16
- package/.agents/skills/pm-developer/references/GRAPH_AND_RELATIONSHIPS.md +14 -14
- package/.agents/skills/pm-developer/references/SCRIPTING_COMPOSITION.md +10 -10
- package/.agents/skills/pm-extensions/SKILL.md +13 -13
- package/.agents/skills/pm-extensions/references/AUTHORING.md +12 -12
- package/.agents/skills/pm-sdk/SKILL.md +27 -27
- package/.agents/skills/pm-sdk/references/SURFACE_MAP.md +32 -32
- package/.agents/skills/pm-test-audit/references/AUDIT.md +1 -1
- package/.agents/skills/pm-user/SKILL.md +35 -35
- package/.claude-plugin/marketplace.json +1 -1
- package/AGENTS.md +9 -9
- package/CHANGELOG.md +9 -0
- package/README.md +13 -13
- package/dist/cli/register-setup.js +1 -1
- package/dist/cli-bundle/bundle-manifest.json +1 -1
- package/dist/cli-bundle/chunks/chunk-2RPORE7M.js +31 -0
- package/dist/cli-bundle/chunks/{chunk-NPEDFOVQ.js → chunk-335BZ75D.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-5GWEY4P6.js +122 -0
- package/dist/cli-bundle/chunks/chunk-6VRX2CM7.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-7PGNAHNW.js → chunk-7DEKAXVA.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3OXQGGRD.js → chunk-7ZRCYESH.js} +42 -41
- package/dist/cli-bundle/chunks/{chunk-BWAXA6S4.js → chunk-AUEKTX7V.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SRDO2NJU.js → chunk-D7KYPRK4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ODMJ3HIB.js → chunk-DAX3AOFI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-L4BKTPJ6.js → chunk-F6NDMKZ4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-T56MB6SF.js → chunk-FRNMQM45.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5S6RT5LX.js → chunk-HNGLDMSZ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-QN7VCOUU.js → chunk-HRCMORE7.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BK2XAQVC.js → chunk-HRFGFIYU.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-CERNIZLB.js → chunk-JI2GDE4I.js} +42 -42
- package/dist/cli-bundle/chunks/{chunk-6T2V3UIK.js → chunk-LS3GI3H4.js} +53 -53
- package/dist/cli-bundle/chunks/chunk-OH6WQ7VT.js +3 -0
- package/dist/cli-bundle/chunks/{chunk-BRIPGUAO.js → chunk-OJDMJT7Y.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-7RCI7AAA.js → chunk-S4LPZ4TN.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-AQ5UHHQS.js → chunk-UEGXWXUZ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5BVZ32G7.js → chunk-XLSHFYXZ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-2GW662DP.js → chunk-YKXATU2G.js} +2 -2
- package/dist/cli-bundle/chunks/{item-revision-UAZOBP2Q.js → item-revision-OJJVPQY7.js} +2 -2
- package/dist/cli-bundle/chunks/item-transaction-QEPBUCMY.js +2 -0
- package/dist/cli-bundle/chunks/{mutation-admission-QZQI2NN5.js → mutation-admission-INMM3HHG.js} +2 -2
- package/dist/cli-bundle/chunks/{register-list-query-P3NOKQUA.js → register-list-query-5Y5JKWU5.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-A6I5K5N6.js → register-mutation-WC7OSQID.js} +2 -2
- package/dist/cli-bundle/chunks/{register-operations-SPKB3TNM.js → register-operations-PO63DBZH.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-RRFOS7IT.js +2 -0
- package/dist/cli-bundle/chunks/{stage-L3T725DS.js → stage-E3MMV4TV.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-5PMJOJCZ.js +44 -0
- package/dist/cli-bundle/focused-chunks/{chunk-TFYTTDAK.js → chunk-7KK66ISG.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-Y5GOUUYJ.js → chunk-AHWJPZSJ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-C7UX2ZI3.js → chunk-C6P6HPCX.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-Q4OIRSKL.js → chunk-CPMSL4HS.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-CZM75DE3.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-CO2DNPH7.js → chunk-D2TBEBNW.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-E56OXRYH.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-FXFDVM5O.js → chunk-F62XGAAY.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-G4QP365K.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-J7M52SCZ.js → chunk-G5PJCR7R.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-GS3JC5UU.js +23 -0
- package/dist/cli-bundle/focused-chunks/{chunk-W3CSX6GI.js → chunk-LW64TINU.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-MEJKELWC.js → chunk-M6V7UMWL.js} +3 -3
- package/dist/cli-bundle/focused-chunks/{chunk-CXTDEQ3N.js → chunk-MC7IE7D7.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-MG7C3JUY.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-QEVJ3Y67.js → chunk-MK4HV4JO.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-A2246ZM7.js → chunk-NQ7GYFOX.js} +54 -54
- package/dist/cli-bundle/focused-chunks/chunk-O7EI33NP.js +91 -0
- package/dist/cli-bundle/focused-chunks/{chunk-FFO7RBLN.js → chunk-RFTJZ5VB.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-PNPYQDHU.js → chunk-SNOXXRSJ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-JQS7TYQ6.js → chunk-UPJUTP2V.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-SDLIUZEL.js → chunk-VWWTIX5L.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-J6FDCAMH.js → chunk-XHOBYCVE.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-J3YOATXR.js → chunk-YMGB2O4E.js} +25 -24
- package/dist/cli-bundle/focused-chunks/{item-revision-L6GVT42D.js → item-revision-CTDO4H3I.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{item-transaction-GYGP264N.js → item-transaction-AEAYVVHA.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{mutation-admission-UWTH56OD.js → mutation-admission-4WM7TNHZ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{stage-WRSNJ7VI.js → stage-WV7QXR4C.js} +2 -2
- package/dist/cli-bundle/main.js +2 -2
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +1 -1
- package/dist/cli-bundle/sdk-core.js +1 -1
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +57 -57
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +9 -9
- package/dist/core/config/positional-value.d.ts +6 -0
- package/dist/core/config/positional-value.js +1 -1
- package/dist/core/item/literal-mutation-input.d.ts +17 -0
- package/dist/core/item/literal-mutation-input.js +1 -1
- package/dist/core/item/parent-reference-policy.d.ts +8 -4
- package/dist/core/item/parent-reference-policy.js +1 -1
- package/dist/core/item/sprint-release-format.d.ts +2 -1
- package/dist/core/item/sprint-release-format.js +1 -1
- package/dist/core/output/mutation-projection.js +1 -1
- package/dist/core/store/item-mutation-precondition.d.ts +3 -1
- package/dist/core/store/item-mutation-precondition.js +1 -1
- package/dist/core/store/item-store.js +1 -1
- package/dist/core/store/settings.d.ts +14 -0
- package/dist/core/store/settings.js +5 -4
- package/dist/core/telemetry/policy.d.ts +27 -1
- package/dist/core/telemetry/policy.js +1 -1
- package/dist/core/telemetry/runtime.d.ts +18 -7
- package/dist/core/telemetry/runtime.js +4 -4
- package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +8 -5
- package/dist/sdk/cli-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts.js +1 -1
- package/dist/sdk/config.d.ts +2 -2
- package/dist/sdk/config.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
- package/dist/sdk/governance/health.d.ts +2 -2
- package/dist/sdk/governance/health.js +2 -2
- package/dist/sdk/index.d.ts +4 -2
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/init.d.ts +4 -4
- package/dist/sdk/init.js +8 -8
- package/dist/sdk/lifecycle/claim.d.ts +4 -0
- package/dist/sdk/lifecycle/claim.js +1 -1
- package/dist/sdk/lifecycle/close.d.ts +10 -0
- package/dist/sdk/lifecycle/close.js +1 -1
- package/dist/sdk/lifecycle/create.d.ts +7 -5
- package/dist/sdk/lifecycle/create.js +1 -1
- package/dist/sdk/lifecycle/shared-unset-fields.d.ts +628 -4
- package/dist/sdk/lifecycle/shared-unset-fields.js +1 -1
- package/dist/sdk/lifecycle/update.d.ts +5 -4
- package/dist/sdk/lifecycle/update.js +2 -2
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/runtime/actions.js +1 -1
- package/dist/sdk/runtime/mutation-value-validation.js +1 -1
- package/dist/sdk/runtime-input.js +1 -1
- package/dist/sdk/runtime-primitives.d.ts +1 -0
- package/dist/sdk/runtime-primitives.js +1 -1
- package/dist/sdk/telemetry.d.ts +1 -1
- package/dist/sdk/telemetry.js +2 -2
- package/docs/AGENT_GUIDE.md +48 -48
- package/docs/AGENT_OUTPUT_ENCODINGS.md +20 -20
- package/docs/ASSURANCE.md +10 -10
- package/docs/BOUNDED_CONTEXT_READS.md +3 -3
- package/docs/CLAUDE_CODE_PLUGIN.md +1 -1
- package/docs/CLI_GRAMMAR.md +2 -2
- package/docs/COMMANDS.md +56 -35
- package/docs/COMMAND_NAMESPACES.md +1 -1
- package/docs/CONFIGURATION.md +82 -71
- package/docs/CONTEXT_ALGORITHM_PORTFOLIO.md +2 -2
- package/docs/CONTEXT_INTEGRITY_CONTRACTS.md +5 -5
- package/docs/CORPUS_SHAPES.md +1 -1
- package/docs/DEPENDENCY_KIND_CONTRACT.md +6 -6
- package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +5 -5
- package/docs/ECOSYSTEM_PLANNING_REVIEW.md +3 -3
- package/docs/EXTENSION_AUTHOR_CONTRACTS.md +4 -4
- package/docs/HISTORY_ATTESTATION.md +1 -1
- package/docs/HISTORY_MAINTENANCE.md +1 -1
- package/docs/LIFECYCLE_COMMANDS.md +1 -1
- package/docs/MCP_2026_07_28.md +16 -16
- package/docs/MCP_2026_07_28_CONFORMANCE.md +19 -19
- package/docs/MCP_REMOTE_TRANSPORT_SECURITY.md +22 -22
- package/docs/MCP_SKILLS_AND_APPS.md +1 -1
- package/docs/MERGE_SAFETY.md +6 -6
- package/docs/MUTATION_INTEGRITY.md +5 -5
- package/docs/OUTPUT_PROJECTION_CONTRACTS.md +14 -14
- package/docs/PACKED_FIRST_RUN.md +1 -1
- package/docs/QUICKSTART.md +10 -10
- package/docs/README.md +21 -21
- package/docs/READ_OUTPUT_CONTRACTS.md +9 -9
- package/docs/RECURRENCE_RECOVERY_CONTRACTS.md +1 -1
- package/docs/RELEASING.md +19 -10
- package/docs/SCRIPTING.md +10 -10
- package/docs/SDK.md +74 -38
- package/docs/SDK_ARTIFACT_OUTPUT.md +1 -1
- package/docs/SDK_PRIMITIVE_INVENTORY.md +2 -2
- package/docs/SELF_DESCRIBING_CONTEXT_CONTRACTS.md +7 -7
- package/docs/TESTING.md +1 -1
- package/docs/WORKFLOW_POLICIES.md +2 -2
- package/docs/WORKSPACE_POSITION_AND_LIFECYCLE.md +8 -8
- package/docs/generated/AGENT_CAPABILITY_ROUTING.md +1 -1
- package/docs/generated/AGENT_COMMAND_SURFACE.md +1 -1
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +1 -1
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +1 -1
- package/docs/performance/cli-transport-overhead.md +7 -7
- package/marketplace.json +1 -1
- package/package.json +1 -1
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/README.md +5 -5
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/GAP_REPORT.md +16 -16
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/README.md +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/GAP_REPORT.md +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/README.md +6 -6
- package/plugins/pm-claude/package.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/package.json +1 -1
- package/plugins/pm-codex/plugin.json +1 -1
- package/runtime-dependencies.json +1 -1
- package/dist/cli-bundle/chunks/chunk-5Z6LWFDL.js +0 -31
- package/dist/cli-bundle/chunks/chunk-DSCFJTHB.js +0 -122
- package/dist/cli-bundle/chunks/chunk-QQHMNUZT.js +0 -2
- package/dist/cli-bundle/chunks/chunk-TX2W6G37.js +0 -3
- package/dist/cli-bundle/chunks/item-transaction-N5F4LXYV.js +0 -2
- package/dist/cli-bundle/chunks/register-setup-ZZRHJ4IS.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-5NGNO54M.js +0 -44
- package/dist/cli-bundle/focused-chunks/chunk-B6U44WPW.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-BAW3DGQO.js +0 -91
- package/dist/cli-bundle/focused-chunks/chunk-BHNY3KPJ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-CBG67HUP.js +0 -23
- package/dist/cli-bundle/focused-chunks/chunk-FEPE2CE4.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-PMKR4MJI.js +0 -2
package/docs/SCRIPTING.md
CHANGED
|
@@ -6,16 +6,16 @@ Use this contract when composing `pm` with shells, CI runners, `jq`, or another
|
|
|
6
6
|
|
|
7
7
|
## Process Contract
|
|
8
8
|
|
|
9
|
-
| Exit | Meaning
|
|
10
|
-
|
|
11
|
-
| `0`
|
|
12
|
-
| `1`
|
|
13
|
-
| `2`
|
|
14
|
-
| `3`
|
|
15
|
-
| `4`
|
|
16
|
-
| `5`
|
|
17
|
-
| `6`
|
|
18
|
-
| `7`
|
|
9
|
+
| Exit | Meaning | Script response |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `0` | The requested operation completed. A successful read may still return zero rows. | Parse stdout. |
|
|
12
|
+
| `1` | Runtime or unexpected failure. | Preserve stderr and stop. |
|
|
13
|
+
| `2` | Invalid flags, values, or command composition. | Correct the invocation; do not retry unchanged. |
|
|
14
|
+
| `3` | Requested tracker or resource was not found. | Correct the path or ID. |
|
|
15
|
+
| `4` | State or concurrency conflict. | Refresh live state before deciding whether to retry. |
|
|
16
|
+
| `5` | A required dependency operation failed. | Inspect the dependency evidence before retrying. |
|
|
17
|
+
| `6` | The request succeeded but matched nothing to change. | Treat as success and inspect the effect receipt. |
|
|
18
|
+
| `7` | The request succeeded and changed only part of the selected targets. | Treat as success and inspect unmatched/skipped rows. |
|
|
19
19
|
|
|
20
20
|
Exits `0`, `6`, and `7` are successful outcomes. Bulk mutation envelopes repeat
|
|
21
21
|
the distinction as `outcome: effect`, `outcome: no_effect`, or `outcome:
|
package/docs/SDK.md
CHANGED
|
@@ -107,19 +107,19 @@ Choose the narrowest stable entrypoint that owns the capability you need. This
|
|
|
107
107
|
keeps package startup and memory proportional to its purpose while the aggregate
|
|
108
108
|
barrel remains source-compatible:
|
|
109
109
|
|
|
110
|
-
| Package export
|
|
111
|
-
|
|
112
|
-
| `@unbrained/pm-cli/sdk/authoring`
|
|
113
|
-
| `@unbrained/pm-cli/sdk/contracts`
|
|
114
|
-
| `@unbrained/pm-cli/sdk/core`
|
|
115
|
-
| `@unbrained/pm-cli/sdk/governance`
|
|
116
|
-
| `@unbrained/pm-cli/sdk/graph`
|
|
117
|
-
| `@unbrained/pm-cli/sdk/merge`
|
|
118
|
-
| `@unbrained/pm-cli/sdk/query`
|
|
119
|
-
| `@unbrained/pm-cli/sdk/runtime`
|
|
120
|
-
| `@unbrained/pm-cli/sdk/testing`
|
|
121
|
-
| `@unbrained/pm-cli/sdk/public-surface.json` | Published machine-readable SDK compatibility snapshot
|
|
122
|
-
| `@unbrained/pm-cli/sdk`
|
|
110
|
+
| Package export | Intended capability family |
|
|
111
|
+
|---|---|
|
|
112
|
+
| `@unbrained/pm-cli/sdk/authoring` | Extension blueprints, builders, manifests, and package-author helpers |
|
|
113
|
+
| `@unbrained/pm-cli/sdk/contracts` | Static CLI command/action contracts and expected-error protocol |
|
|
114
|
+
| `@unbrained/pm-cli/sdk/core` | Broad item, schema, profile, transaction, and runtime primitives |
|
|
115
|
+
| `@unbrained/pm-cli/sdk/governance` | Validation, health, garbage collection, and transaction cleanup |
|
|
116
|
+
| `@unbrained/pm-cli/sdk/graph` | Relationship stores, graph assembly, traversal, analytics, and remediation |
|
|
117
|
+
| `@unbrained/pm-cli/sdk/merge` | VCS-neutral tracker merge contracts |
|
|
118
|
+
| `@unbrained/pm-cli/sdk/query` | List/search engines, filtering, pagination, and query rendering |
|
|
119
|
+
| `@unbrained/pm-cli/sdk/runtime` | Embedded command execution and package runtime helpers |
|
|
120
|
+
| `@unbrained/pm-cli/sdk/testing` | Package and extension assertion/invocation helpers |
|
|
121
|
+
| `@unbrained/pm-cli/sdk/public-surface.json` | Published machine-readable SDK compatibility snapshot |
|
|
122
|
+
| `@unbrained/pm-cli/sdk` | Compatibility aggregate containing every supported SDK export |
|
|
123
123
|
|
|
124
124
|
`@unbrained/pm-cli/cli` is the supported embeddable CLI entrypoint and exports
|
|
125
125
|
only `runPmCli`. Repository tests import their internal seams from source; those
|
|
@@ -177,6 +177,13 @@ preflight refusal. An absent property gives no guarantee about writes; do not
|
|
|
177
177
|
coerce it to `false` or treat an executed failure as safe to retry. Consumers
|
|
178
178
|
that enumerate error keys should accept the additional optional property.
|
|
179
179
|
|
|
180
|
+
The telemetry consent update (pm-gh1660) records two conservative breaking
|
|
181
|
+
acknowledgements. `WriteSettingsOptions` gains optional `omitSections` and
|
|
182
|
+
`skipIfStored`; existing calls compile and behave unchanged. `ConfigResult.values`
|
|
183
|
+
becomes `Partial`, because project-scope `list` and `export` omit the global-only
|
|
184
|
+
`telemetry_tracking` key: treat that key as possibly absent, and read consent
|
|
185
|
+
from a global-scope export. No data migration or new dependency bounds are needed.
|
|
186
|
+
|
|
180
187
|
Validation refusals for item status and priority carry producer-owned
|
|
181
188
|
`code: "invalid_argument_value"` and `context.field`, `context.value` and
|
|
182
189
|
`context.allowed`. The allowed spellings come from the active status schema or
|
|
@@ -228,7 +235,7 @@ entrypoint from [Import Surfaces](#import-surfaces) for direct primitives.
|
|
|
228
235
|
Use these focused guides to choose the primitive and understand its policy:
|
|
229
236
|
|
|
230
237
|
| Capability | Reference |
|
|
231
|
-
|
|
238
|
+
|---|---|
|
|
232
239
|
| Item lifecycle, schema, profiles and initialization | [Customization primitives](SDK_CUSTOMIZATION_PRIMITIVES.md), [Lifecycle](SDK_LIFECYCLE.md) |
|
|
233
240
|
| History, whole-item input, transactions and previews | [Audited mutations](SDK_AUDITED_MUTATIONS.md), [Atomic transactions](#atomic-workspace-transactions), [Schema evolution](#schema-evolution-and-workspace-history) |
|
|
234
241
|
| Context ranking, packing, memory and evaluation | [Context relevance](#context-relevance-and-evaluation), [Context coordination](SDK_CONTEXT_COORDINATION.md) |
|
|
@@ -1220,8 +1227,31 @@ SDK `create`, `update`, and `append` inputs are data: `"-"` remains text,
|
|
|
1220
1227
|
file. This also applies to the corresponding `runCreate`, `runUpdate`,
|
|
1221
1228
|
`runAppend` operations and update-many mutation values. Normal field validation,
|
|
1222
1229
|
whitespace handling, structured collection syntax, and project schemas still
|
|
1223
|
-
apply. Clear
|
|
1224
|
-
`
|
|
1230
|
+
apply. Clear a scalar field with `unset: ["assignee"]`, or pass JavaScript
|
|
1231
|
+
`null` for any option the command's `unset` list covers: `{ parent: null }` is
|
|
1232
|
+
`unset: ["parent"]`, and `tags: null` clears the tags (`tags` takes a CSV string,
|
|
1233
|
+
not an array, and has no `clearTags`).
|
|
1234
|
+
The nullable keys are exactly the unset table's option keys
|
|
1235
|
+
(`CreateNullClearableOptionKey`, `UpdateNullClearableOptionKey`). `rank` is only
|
|
1236
|
+
an unset alias of `order`, so `rank: null` is refused (pass `order: null`), and
|
|
1237
|
+
create accepts `unset: ["author"]` but refuses `author: null`. `null` on any
|
|
1238
|
+
other option (`title`, `author`, collection options such as `comment` or `dep`)
|
|
1239
|
+
refuses by name; clear collections with their `clear*` options. When typed input
|
|
1240
|
+
stores a former clear sentinel (`"none"`, `"null"` or `"-"`) in a clearable
|
|
1241
|
+
field, the result warns `literal_sentinel_stored:<field>:<value>`: the value is
|
|
1242
|
+
now data (an assignee called `none`). The advisory appears only while the
|
|
1243
|
+
document pm committed and recorded in history still holds the value, so an
|
|
1244
|
+
`item_store_write` override that rewrites stored contents can drop it from
|
|
1245
|
+
storage while the advisory still reports it. Typed SDK and MCP refusals name the
|
|
1246
|
+
option key and the `unset` remedy both accept, for example `parent must not be
|
|
1247
|
+
the placeholder "none". Pass unset: ["parent"] to clear it, or omit parent.`;
|
|
1248
|
+
CLI refusals keep their flag wording. `PmCreateActionOptions`,
|
|
1249
|
+
`PmUpdateActionOptions`, `CreateOperationOptions` and `UpdateOperationOptions`
|
|
1250
|
+
type the clearable fields as nullable, so `runCreate`/`runUpdate` accept the
|
|
1251
|
+
same input as `PmClient.create`/`update`. A direct SDK `runUpdateMany` folds a
|
|
1252
|
+
null in its update record like `runUpdate`, but `runAction("update-many")` drops
|
|
1253
|
+
it (pm-w7clh6), so `PmUpdateManyActionOptions` stays non-nullable: use `unset`
|
|
1254
|
+
there and in MCP tools.
|
|
1225
1255
|
CLI adapters retain `--description -`, append stdin, file flags, and legacy
|
|
1226
1256
|
clear-token compatibility. Values inside CLI `--stdin-json` documents are
|
|
1227
1257
|
literal data, including `"none"` and `"null"`. Explicit CLI flags override
|
|
@@ -1236,7 +1266,7 @@ For example, `estimatedMinutes` requires `"45"`, while `priority` accepts a
|
|
|
1236
1266
|
string or finite number. JavaScript and JSON bridge callers must correct invalid
|
|
1237
1267
|
types instead of relying on coercion. Integrations that previously used `"-"`
|
|
1238
1268
|
to request stdin should read that input themselves and pass the resulting text;
|
|
1239
|
-
integrations that used `"none"` to clear must migrate to `unset`.
|
|
1269
|
+
integrations that used `"none"` to clear must migrate to `unset` or `null`.
|
|
1240
1270
|
Direct `runCreate`/`runUpdate` calls require the declared string arrays for
|
|
1241
1271
|
repeatable fields. Generic action dispatch retains its documented scalar-to-array
|
|
1242
1272
|
normalization before invoking those operations.
|
|
@@ -1433,7 +1463,13 @@ and `close-many` keep their partial-success semantics: a stale row fails with
|
|
|
1433
1463
|
`error_code: "item_revision_conflict"` plus its `expected_revision`,
|
|
1434
1464
|
`current_revision` and the same `details` (`changes_since`,
|
|
1435
1465
|
`changes_since_omitted`) a single-item refusal carries, while fresh rows
|
|
1436
|
-
proceed.
|
|
1466
|
+
proceed. The exported `ItemRevisionConflictRowFields` type declares those row
|
|
1467
|
+
fields; `HistoryCompactBulkItemResult` and `HistoryRepairAllStreamResult` extend
|
|
1468
|
+
it. When an `item_store_write` or `item_store_delete` override transforms,
|
|
1469
|
+
redirects or skips a guarded write, the scope advances to the revision read back
|
|
1470
|
+
from storage under the item lock: its own next write is admitted, a competing
|
|
1471
|
+
one refuses. If the item cannot be read back, or its embedded id was rewritten,
|
|
1472
|
+
the next guarded write refuses (fail closed). When a peer writes while `restore` or history maintenance waits for
|
|
1437
1473
|
its lock, a declared revision turns the generic drift refusal into this typed
|
|
1438
1474
|
conflict. Linked-test result recording (`test --run`, `test-all` with
|
|
1439
1475
|
`test_result_tracking` enabled) stays best-effort, except that a stale declared
|
|
@@ -2668,25 +2704,25 @@ For provider-safe schemas, use `PM_PROVIDER_TOOL_PARAMETERS_SCHEMA`. It is flat
|
|
|
2668
2704
|
|
|
2669
2705
|
## Capability Requirements
|
|
2670
2706
|
|
|
2671
|
-
| Registration
|
|
2672
|
-
|
|
2673
|
-
| `registerCommand`
|
|
2674
|
-
| inline command flags
|
|
2675
|
-
| `registerFlags`
|
|
2676
|
-
| `registerItemFields`
|
|
2677
|
-
| `registerItemTypes`
|
|
2678
|
-
| `registerRelationshipKinds`
|
|
2679
|
-
| `registerMigration`
|
|
2680
|
-
| `registerProfile`
|
|
2681
|
-
| `registerImporter`
|
|
2682
|
-
| `registerExporter`
|
|
2683
|
-
| `registerParser`
|
|
2684
|
-
| `registerPreflight`
|
|
2685
|
-
| `registerService`
|
|
2686
|
-
| `registerRenderer`
|
|
2687
|
-
| lifecycle hooks
|
|
2688
|
-
| `registerSearchProvider`
|
|
2689
|
-
| `registerVectorStoreAdapter` | `search`
|
|
2707
|
+
| Registration | Manifest capability |
|
|
2708
|
+
|---|---|
|
|
2709
|
+
| `registerCommand` | `commands` |
|
|
2710
|
+
| inline command flags | `schema` |
|
|
2711
|
+
| `registerFlags` | `schema` |
|
|
2712
|
+
| `registerItemFields` | `schema` |
|
|
2713
|
+
| `registerItemTypes` | `schema` |
|
|
2714
|
+
| `registerRelationshipKinds` | `schema` |
|
|
2715
|
+
| `registerMigration` | `schema` |
|
|
2716
|
+
| `registerProfile` | `schema` |
|
|
2717
|
+
| `registerImporter` | `importers` |
|
|
2718
|
+
| `registerExporter` | `importers` |
|
|
2719
|
+
| `registerParser` | `parser` |
|
|
2720
|
+
| `registerPreflight` | `preflight` |
|
|
2721
|
+
| `registerService` | `services` |
|
|
2722
|
+
| `registerRenderer` | `renderers` |
|
|
2723
|
+
| lifecycle hooks | `hooks` |
|
|
2724
|
+
| `registerSearchProvider` | `search` |
|
|
2725
|
+
| `registerVectorStoreAdapter` | `search` |
|
|
2690
2726
|
|
|
2691
2727
|
Some override surfaces are single-winner: command overrides, parser overrides,
|
|
2692
2728
|
preflight overrides, and output renderers. Preflight overrides can declare
|
|
@@ -3717,7 +3753,7 @@ const report = assertExtensionPreflight(blueprint, {
|
|
|
3717
3753
|
When a custom harness needs individual registries, use this ownership map:
|
|
3718
3754
|
|
|
3719
3755
|
| Surface | Registry from `activateExtensionForTest` | Assertion / invocation |
|
|
3720
|
-
|
|
3756
|
+
|---|---|---|
|
|
3721
3757
|
| Commands, schema types/fields, migrations, importers/exporters, search/vector providers | `registrations` | `assertRegisteredCommandContract`, corresponding `assertRegistered*` |
|
|
3722
3758
|
| Command overrides | `commands` | `assertRegisteredCommandOverride`, `runRegisteredCommandOverrideForTest` |
|
|
3723
3759
|
| Parser overrides | `parsers` | `assertRegisteredParserOverride`, `runRegisteredParserOverrideForTest` |
|
|
@@ -49,7 +49,7 @@ description.
|
|
|
49
49
|
## Channel behavior
|
|
50
50
|
|
|
51
51
|
| Artifact channel | Default receipt | stdout | stderr |
|
|
52
|
-
|
|
52
|
+
|---|---|---|---|
|
|
53
53
|
| `stdout` | `suppress` | Artifact bytes only | Extension-owned diagnostics or summary |
|
|
54
54
|
| `file` | `render` | Bounded structured receipt | Extension-owned diagnostics |
|
|
55
55
|
|
|
@@ -35,7 +35,7 @@ inline tracker-not-initialized message anywhere under `src/sdk`.
|
|
|
35
35
|
## Promotion Partition
|
|
36
36
|
|
|
37
37
|
| Promotion item | Primitive family | Primary private domains to promote |
|
|
38
|
-
|
|
38
|
+
|---|---|---|
|
|
39
39
|
| [pm-98cz](../.agents/pm/features/pm-98cz.toon) | Item lifecycle | `core/item`, `core/store`, `core/lock`, mutation checkpoints |
|
|
40
40
|
| [pm-rjqr](../.agents/pm/features/pm-rjqr.toon) | Query and read | `core/search`, read projections, context/next/list/get aggregation |
|
|
41
41
|
| [pm-zwpp](../.agents/pm/features/pm-zwpp.toon) | Annotations and links | comments, notes, learnings, files, docs, deps, append metadata |
|
|
@@ -48,7 +48,7 @@ inline tracker-not-initialized message anywhere under `src/sdk`.
|
|
|
48
48
|
## Command Family Map
|
|
49
49
|
|
|
50
50
|
| CLI/MCP source family | SDK destination | Notes |
|
|
51
|
-
|
|
51
|
+
|---|---|---|
|
|
52
52
|
| `create`, `update`, `update-many`, `copy`, `delete`, `restore` | [pm-98cz](../.agents/pm/features/pm-98cz.toon) | Item CRUD and replay paths should become typed lifecycle SDK calls. |
|
|
53
53
|
| `claim`, `release`, `focus`, lifecycle shortcut helpers | [pm-98cz](../.agents/pm/features/pm-98cz.toon) | Ownership and actionable-state changes belong beside lifecycle primitives. |
|
|
54
54
|
| `list`, `get`, `search`, `context`, `next`, `aggregate`, `stats` | [pm-rjqr](../.agents/pm/features/pm-rjqr.toon) | `list` and `search` implementations now live under `src/sdk/query/**`; remaining read models should follow the same SDK-owned pattern. |
|
|
@@ -17,13 +17,13 @@ Use `pm contracts --summary --json` for the bounded bootstrap and `pm contracts
|
|
|
17
17
|
|
|
18
18
|
The read primitives accept `--for <intent>`:
|
|
19
19
|
|
|
20
|
-
| Command
|
|
21
|
-
|
|
22
|
-
| `context`
|
|
23
|
-
| `get`
|
|
24
|
-
| `list` and list aliases | `triage`
|
|
25
|
-
| `next`
|
|
26
|
-
| `search`
|
|
20
|
+
| Command | Built-in intent | Purpose |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `context` | `orient`, `handoff` | Active hierarchy or continuation context |
|
|
23
|
+
| `get` | `inspect` | Complete item lifecycle and relationship context |
|
|
24
|
+
| `list` and list aliases | `triage` | Compact governance and ownership fields |
|
|
25
|
+
| `next` | `execute` | One actionable recommendation |
|
|
26
|
+
| `search` | `discover` | Ranked canonical-lineage candidates |
|
|
27
27
|
|
|
28
28
|
Explicit projection and token flags win over intent defaults:
|
|
29
29
|
|
package/docs/TESTING.md
CHANGED
|
@@ -280,7 +280,7 @@ required CI asks for as few runners as the proofs allow
|
|
|
280
280
|
([pm-m6ig79](../.agents/pm/issues/pm-m6ig79.toon)):
|
|
281
281
|
|
|
282
282
|
| Job | Runs |
|
|
283
|
-
|
|
283
|
+
|---|---|
|
|
284
284
|
| `Build foundation (Ubuntu, Node 24)` | Build, `dist` artifact, packed tarball. |
|
|
285
285
|
| `Packed runtime (<os>)` × 3 | Packed first run on Node 22.18.0 and 24 in isolated prefixes, dist version smoke; Ubuntu adds the Node 22 telemetry and snapshot regressions, macOS the native shell and portability checks, Windows the full npm npx and Bun bunx acceptance. |
|
|
286
286
|
| `Gates (static)` | Typecheck, version, changelog, secret scan, `pnpm lint` (`quality:static`), package artifact, token budgets, tracker merge-safety and assurance gates. |
|
|
@@ -40,7 +40,7 @@ match the destination; other selectors inspect both snapshots so a mutation cann
|
|
|
40
40
|
escape a protected scope by removing its tag or changing its type.
|
|
41
41
|
|
|
42
42
|
| Rule kind | Required properties | Behavior |
|
|
43
|
-
|
|
43
|
+
|---|---|---|
|
|
44
44
|
| `require_fields` | `fields` | Checks evidence on lifecycle, scope, or required-field changes |
|
|
45
45
|
| `transition` | `allowed` | Allows listed `[from, to]` status pairs; `$create` and `$delete` represent absent records |
|
|
46
46
|
| `authors` | `authors` | Requires a listed mutation actor |
|
|
@@ -153,7 +153,7 @@ violated. It does not establish that a project declared any requirements.
|
|
|
153
153
|
The receipt exposes these independent measurements even in counts mode:
|
|
154
154
|
|
|
155
155
|
| Field | Meaning |
|
|
156
|
-
|
|
156
|
+
|---|---|
|
|
157
157
|
| `declared_requirement_count` | Number of `require_fields` declarations, including operation-specific ones |
|
|
158
158
|
| `state_requirement_count` | Number eligible for a state scan, without operation selectors |
|
|
159
159
|
| `applicable_requirement_count` | Distinct requirements that matched at least one supplied item |
|
|
@@ -69,14 +69,14 @@ tokenized recovery actions.
|
|
|
69
69
|
|
|
70
70
|
Recovery precedence is intentional:
|
|
71
71
|
|
|
72
|
-
| State
|
|
73
|
-
|
|
74
|
-
| `merge_evidence_invalid`
|
|
75
|
-
| `history_evidence_invalid`
|
|
76
|
-
| `merge_reconciliation_required` | `pm merge reconcile`
|
|
77
|
-
| `history_repair_required`
|
|
78
|
-
| `merge_fence_unprepared`
|
|
79
|
-
| `ready`
|
|
72
|
+
| State | Next action | Why it comes first |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| `merge_evidence_invalid` | `pm merge report` | Untrusted evidence must be inspected before it can drive repair. |
|
|
75
|
+
| `history_evidence_invalid` | `pm validate --check-history-drift --full` | Required history evidence could not be interpreted safely. |
|
|
76
|
+
| `merge_reconciliation_required` | `pm merge reconcile` | Pending scalar decisions can explain and settle merge-created divergence. |
|
|
77
|
+
| `history_repair_required` | `pm history-repair --all` | Remaining append-only drift needs an audited re-anchor. |
|
|
78
|
+
| `merge_fence_unprepared` | `pm merge install` | The committed fence or clone-local drivers are absent or drifted. |
|
|
79
|
+
| `ready` | none | All included readiness predicates passed. |
|
|
80
80
|
|
|
81
81
|
`pm health --strict-exit` also treats missing clone-local merge drivers as blocking. Default health remains advisory for never-installed drivers so ordinary diagnostics retain backward compatibility.
|
|
82
82
|
|
|
@@ -5,7 +5,7 @@ Tracker: `pm-kxci8x`.
|
|
|
5
5
|
This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it manually.
|
|
6
6
|
|
|
7
7
|
| Capability family | Commands |
|
|
8
|
-
|
|
8
|
+
|---|---|
|
|
9
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` |
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it manually.
|
|
4
4
|
|
|
5
5
|
| Command | Minimum visibility tier | Capability family |
|
|
6
|
-
|
|
6
|
+
|---|---|---|
|
|
7
7
|
| `init` | core | workspace |
|
|
8
8
|
| `workspace init` | core | workspace |
|
|
9
9
|
| `config` | standard | workspace |
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not consume canonical budget.
|
|
4
4
|
|
|
5
5
|
| Command | Capability family | Canonical flags | Maximum |
|
|
6
|
-
|
|
6
|
+
|---|---|---:|---:|
|
|
7
7
|
| `init` | workspace | 31 | 31 |
|
|
8
8
|
| `item` | intake | 21 | 21 |
|
|
9
9
|
| `config` | workspace | 37 | 37 |
|
|
@@ -14,7 +14,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
14
14
|
- Grammar probes: 117
|
|
15
15
|
|
|
16
16
|
| Error code | Canonical code | Disposition | Evidence kinds | Probe count |
|
|
17
|
-
|
|
17
|
+
|---|---|---|---|---|
|
|
18
18
|
| `acceptance_criteria_mutation_conflict` | `acceptance_criteria_mutation_conflict` | uncovered | none | 0 |
|
|
19
19
|
| `acceptance_criteria_remove_unmatched` | `acceptance_criteria_remove_unmatched` | uncovered | none | 0 |
|
|
20
20
|
| `acceptance_criteria_semicolon_forbidden` | `acceptance_criteria_semicolon_forbidden` | uncovered | none | 0 |
|
|
@@ -18,14 +18,14 @@ fails closed when a budget exists. Admission adds a fixed 512 KiB noise margin
|
|
|
18
18
|
without changing the committed budget; a majority persistent increase beyond
|
|
19
19
|
that bounded margin still fails.
|
|
20
20
|
|
|
21
|
-
| Command
|
|
22
|
-
|
|
23
|
-
| `get`
|
|
24
|
-
| `list`
|
|
21
|
+
| Command | best | p50 | p95 |
|
|
22
|
+
|---|---:|---:|---:|
|
|
23
|
+
| `get` | 269 ms | 316 ms | 388 ms |
|
|
24
|
+
| `list` | 315 ms | 354 ms | 357 ms |
|
|
25
25
|
| `context` | 326 ms | 345 ms | 428 ms |
|
|
26
|
-
| `next`
|
|
27
|
-
| `create`
|
|
28
|
-
| `claim`
|
|
26
|
+
| `next` | 332 ms | 339 ms | 352 ms |
|
|
27
|
+
| `create` | 298 ms | 317 ms | 326 ms |
|
|
28
|
+
| `claim` | 312 ms | 331 ms | 350 ms |
|
|
29
29
|
|
|
30
30
|
## Current attribution
|
|
31
31
|
|
package/marketplace.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"pm","owner":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"description":"Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.","version":"2026.11.
|
|
1
|
+
{"name":"pm","owner":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"description":"Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.","version":"2026.11.5","plugins":[{"name":"pm-claude","source":"./plugins/pm-claude","description":"Native pm CLI integration for Claude Code — 32 MCP tools, 14 workflow skills with slash invocations, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.","version":"2026.11.5","author":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"homepage":"https://github.com/unbraind/pm-cli","repository":"https://github.com/unbraind/pm-cli","license":"MIT","keywords":["pm-cli","project-management","mcp","tasks","agents","workflows","git-native","task-tracker","ai"],"category":"productivity"}]}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@unbrained/pm-beads","version":"2026.11.
|
|
1
|
+
{"name":"@unbrained/pm-beads","version":"2026.11.5","private":true,"type":"module","description":"First-party pm package for importing Beads JSONL records.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-beads"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","beads"],"pm":{"aliases":["beads"],"extensions":["extensions/beads"],"catalog":{"display_name":"Beads Import","category":"migration","summary":"Import Beads JSONL records into pm while preserving source IDs.","tags":["migration","beads","import"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@unbrained/pm-calendar","version":"2026.11.
|
|
1
|
+
{"name":"@unbrained/pm-calendar","version":"2026.11.5","private":true,"type":"module","description":"First-party pm package for calendar and agenda views.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-calendar"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","calendar","agenda"],"pm":{"aliases":["calendar"],"extensions":["extensions/calendar"],"catalog":{"display_name":"Calendar Views","category":"workflow","summary":"Show agenda, day, week, and month views for deadlines, reminders, and scheduled events.","tags":["calendar","agenda","workflow"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
|
|
@@ -6,11 +6,11 @@ command-facing SDK registration APIs in their smallest complete form.
|
|
|
6
6
|
|
|
7
7
|
## What it demonstrates
|
|
8
8
|
|
|
9
|
-
| API
|
|
10
|
-
|
|
11
|
-
| `api.registerCommand(definition)`
|
|
12
|
-
| `api.registerParser(command, override)`
|
|
13
|
-
| `api.registerFlags(targetCommand, flags)` | Injects an inert, namespaced `--kit-note <text>` flag into the EXISTING core `pm list` command — the pattern for augmenting commands you do not own.
|
|
9
|
+
| API | What the exemplar does |
|
|
10
|
+
|---|---|
|
|
11
|
+
| `api.registerCommand(definition)` | Registers `pm command-kit echo` with a FULL `CommandDefinition`: `name`, `action`, `tier`, `family`, `description`, `intent`, `arguments` (required variadic positional), `flags`, `examples`, `failure_hints`, and a pure `run` handler. |
|
|
12
|
+
| `api.registerParser(command, override)` | Preprocesses parsed options before the handler runs: rewrites the deprecated `--shout` alias to `--upper`, coerces `--repeat` to a positive integer, and trims/dedupes `--decorations` values. The override returns a delta (`{ options }`) that is merged over the parsed input. |
|
|
13
|
+
| `api.registerFlags(targetCommand, flags)` | Injects an inert, namespaced `--kit-note <text>` flag into the EXISTING core `pm list` command — the pattern for augmenting commands you do not own. |
|
|
14
14
|
|
|
15
15
|
## Install
|
|
16
16
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@unbrained/pm-command-kit","version":"2026.11.
|
|
1
|
+
{"name":"@unbrained/pm-command-kit","version":"2026.11.5","private":true,"type":"module","description":"First-party pm exemplar package for the commands capability: registerCommand, registerFlags, and registerParser.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-command-kit"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","sdk","commands","exemplar"],"pm":{"aliases":["command-kit"],"extensions":["extensions/command-kit"],"catalog":{"display_name":"Command Kit Exemplar","category":"sdk","summary":"Copy-paste-able exemplar for registerCommand, registerFlags, and registerParser.","tags":["sdk","commands","parser","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
|
|
@@ -5,22 +5,22 @@ phase-two acceptance inventory for
|
|
|
5
5
|
[pm-8ngt](../../.agents/pm/stories/pm-8ngt.toon) and the SDK-first epic
|
|
6
6
|
[pm-usfg](../../.agents/pm/epics/pm-usfg.toon).
|
|
7
7
|
|
|
8
|
-
| Domain need
|
|
9
|
-
|
|
10
|
-
| Stable facility and asset identities
|
|
11
|
-
| Attributable immutable observations
|
|
12
|
-
| Crash-consistent identity plus initial event
|
|
13
|
-
| Typed containment, flow, and utility topology | `RelationshipKindRegistry`, `RelationshipGraph`, package-contributed kinds
|
|
14
|
-
| Current and point-in-time state
|
|
15
|
-
| Topology blast radius
|
|
16
|
-
| Domain invariants
|
|
17
|
-
| Corrections without rewriting history
|
|
18
|
-
| Schema evolution
|
|
19
|
-
| Offline and federated replicas
|
|
20
|
-
| Atomic bulk import
|
|
21
|
-
| Tamper evidence and restore
|
|
22
|
-
| Bounded shell export
|
|
23
|
-
| Live cross-process subscription
|
|
8
|
+
| Domain need | Public primitive used | Result | Canonical lineage |
|
|
9
|
+
|---|---|---|---|
|
|
10
|
+
| Stable facility and asset identities | `PmClient.create/get/list`, custom item types and fields, project profiles | Complete | [pm-3mna](../../.agents/pm/features/pm-3mna.toon) |
|
|
11
|
+
| Attributable immutable observations | `RelationshipEventStore.append`, custom payloads, optimistic versions | Complete | [pm-ju83](../../.agents/pm/features/pm-ju83.toon) |
|
|
12
|
+
| Crash-consistent identity plus initial event | `commitWorkspaceTransaction` with idempotent inspect/apply/compensate steps | Complete | [pm-4e12](../../.agents/pm/features/pm-4e12.toon) |
|
|
13
|
+
| Typed containment, flow, and utility topology | `RelationshipKindRegistry`, `RelationshipGraph`, package-contributed kinds | Complete | [pm-ju83](../../.agents/pm/features/pm-ju83.toon) |
|
|
14
|
+
| Current and point-in-time state | Event-time replay plus `RelationshipEventLog.snapshot` | Complete; late-arrival correctness fixed by [pm-j3swnb](../../.agents/pm/issues/pm-j3swnb.toon) | [pm-hib1](../../.agents/pm/features/pm-hib1.toon) |
|
|
15
|
+
| Topology blast radius | `analyzeGraphImpact` with bounds and exact paths | Complete | [pm-7ob5](../../.agents/pm/features/pm-7ob5.toon) |
|
|
16
|
+
| Domain invariants | Package-owned pure policies over SDK graph and replay projections | Complete | [pm-xc68](../../.agents/pm/features/pm-xc68.toon) |
|
|
17
|
+
| Corrections without rewriting history | `supersede` events plus explicit `supersedes_event_id` provenance | Complete | [pm-ju83](../../.agents/pm/features/pm-ju83.toon) |
|
|
18
|
+
| Schema evolution | Versioned event payload normalization with explicit unsupported-version findings | Complete for exemplar; general bulk schema migration remains planned | [pm-dijg](../../.agents/pm/features/pm-dijg.toon) |
|
|
19
|
+
| Offline and federated replicas | Deterministic event-time merge, idempotent identical-event skips, explicit content conflicts | Complete at package boundary; cross-workspace transport remains planned | [pm-is1a](../../.agents/pm/features/pm-is1a.toon) |
|
|
20
|
+
| Atomic bulk import | `RelationshipEventStore.appendBatch` validation and atomic replacement | Complete | [pm-ju83](../../.agents/pm/features/pm-ju83.toon) |
|
|
21
|
+
| Tamper evidence and restore | Canonical SHA-256 checkpoints plus full durable replay | Complete at package boundary | [pm-klo8](../../.agents/pm/features/pm-klo8.toon) |
|
|
22
|
+
| Bounded shell export | Compact JSON command result, explicit limit and truncation | Complete | [pm-646c](../../.agents/pm/features/pm-646c.toon) |
|
|
23
|
+
| Live cross-process subscription | Durable store can be reopened and paged, but follow-mode subscription is intentionally outside this exemplar | Existing planned capability; no duplicate filed | [pm-e200](../../.agents/pm/features/pm-e200.toon) |
|
|
24
24
|
|
|
25
25
|
## Findings
|
|
26
26
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@unbrained/pm-digital-twin","version":"2026.11.
|
|
1
|
+
{"name":"@unbrained/pm-digital-twin","version":"2026.11.5","private":true,"type":"module","description":"Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-digital-twin"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","sdk","digital-twin","event-sourcing","temporal-graph","exemplar"],"pm":{"aliases":["digital-twin","twin"],"extensions":["extensions/digital-twin"],"catalog":{"display_name":"Digital Twin SDK Exemplar","category":"sdk","summary":"Temporal facility graph proving event replay, point-in-time state, invariants, federation, checkpoints, and compact exports through public SDK contracts.","tags":["sdk","digital-twin","event-sourcing","graph","offline-first","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin","report":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin/GAP_REPORT.md"}},"docs":["README.md","GAP_REPORT.md"],"examples":["README.md"]}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@unbrained/pm-governance-audit","version":"2026.11.
|
|
1
|
+
{"name":"@unbrained/pm-governance-audit","version":"2026.11.5","private":true,"type":"module","description":"First-party pm package for governance audit and normalization workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-governance-audit"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","governance","audit","normalize","hooks"],"pm":{"aliases":["governance-audit","audit"],"extensions":["extensions/governance-audit"],"catalog":{"display_name":"Governance Audit","category":"governance","summary":"Run dedupe audits, comments audits, and normalize sweeps as package-owned workflows.","tags":["governance","audit","normalize","hooks"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@unbrained/pm-guide-shell","version":"2026.11.
|
|
1
|
+
{"name":"@unbrained/pm-guide-shell","version":"2026.11.5","private":true,"type":"module","description":"First-party pm package for guide and shell completion workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-guide-shell"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","guide","completion","shell"],"pm":{"aliases":["guide-shell"],"extensions":["extensions/guide-shell"],"catalog":{"display_name":"Guide + Shell UX","category":"workflow","summary":"Restore guide documentation and shell completion commands as package-owned UX surfaces.","tags":["guide","completion","shell"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
|
|
@@ -13,7 +13,7 @@ core-baked profiles (`agile`, `ops`, `research`) without modifying core.
|
|
|
13
13
|
## What it demonstrates
|
|
14
14
|
|
|
15
15
|
| Surface | What the exemplar does |
|
|
16
|
-
|
|
16
|
+
|---|---|
|
|
17
17
|
| `api.registerItemTypes([...])` | Registers the `Card` flow item type (`folder: cards`, alias `kanban-card`) as a GLOBAL schema contribution. |
|
|
18
18
|
| `api.registerItemFields([...])` | Registers the flow fields `wip_limit` (number), `class_of_service` (string), and `impediment` (string). |
|
|
19
19
|
| `api.registerProfile(kanbanProfile)` | Registers the complete archetype — types, custom statuses (`doing`, `verifying`), fields, the `Card` workflow, offline search config, a `card` create template, and package recommendations — so `pm profile apply kanban` stages it idempotently, alongside the core `agile`/`ops`/`research` archetypes. |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@unbrained/pm-kanban","version":"2026.11.
|
|
1
|
+
{"name":"@unbrained/pm-kanban","version":"2026.11.5","private":true,"type":"module","description":"First-party pm archetype package: a complete Kanban continuous-flow profile built on public SDK primitives.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-kanban"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","sdk","profile","archetype","kanban","exemplar"],"pm":{"aliases":["kanban"],"extensions":["extensions/kanban"],"catalog":{"display_name":"Kanban Archetype","category":"sdk","summary":"Installable Kanban continuous-flow archetype: Card item type, flow fields, and a ProjectProfileDefinition built on public SDK primitives.","tags":["sdk","profile","archetype","kanban","schema","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@unbrained/pm-lifecycle-hooks","version":"2026.11.
|
|
1
|
+
{"name":"@unbrained/pm-lifecycle-hooks","version":"2026.11.5","private":true,"type":"module","description":"First-party pm package demonstrating safe lifecycle hook registration.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-lifecycle-hooks"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","hooks","lifecycle","sdk"],"pm":{"aliases":["lifecycle-hooks"],"extensions":["extensions/lifecycle-hooks"],"catalog":{"display_name":"Lifecycle Hooks","category":"sdk","summary":"Default-inert lifecycle hook exemplar for package authors.","tags":["hooks","lifecycle","sdk"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@unbrained/pm-linked-test-adapters","version":"2026.11.
|
|
1
|
+
{"name":"@unbrained/pm-linked-test-adapters","version":"2026.11.5","private":true,"type":"module","description":"First-party pm package for optional linked-test run management adapters and reporters.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-linked-test-adapters#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-linked-test-adapters"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","linked-tests","background-runs","test-runs"],"pm":{"aliases":["linked-test-adapters"],"extensions":["extensions/linked-test-adapters"],"catalog":{"display_name":"Linked Test Adapters","category":"testing","summary":"Restore optional linked-test run management/reporting command surfaces.","tags":["tests","linked-tests","background","reporting"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-linked-test-adapters#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-linked-test-adapters","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@unbrained/pm-search-advanced","version":"2026.11.
|
|
1
|
+
{"name":"@unbrained/pm-search-advanced","version":"2026.11.5","private":true,"type":"module","description":"First-party pm package for semantic, hybrid, and reindex search workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-search-advanced#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-search-advanced"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","search","reindex","semantic","hybrid"],"pm":{"aliases":["search-advanced"],"extensions":["extensions/search-advanced"],"catalog":{"display_name":"Advanced Search","category":"search","summary":"Enable semantic/hybrid search modes and reindex workflows.","tags":["search","semantic","hybrid","reindex"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-search-advanced#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-search-advanced","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
|