@unbrained/pm-cli 2026.9.9 → 2026.9.11
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/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +48 -11
- package/dist/cli/command-namespaces.d.ts +9 -0
- package/dist/cli/command-namespaces.js +2 -0
- package/dist/cli/extension-command-help.js +3 -3
- package/dist/cli/help-content.js +1 -1
- package/dist/cli/help-json-payload.d.ts +5 -1
- package/dist/cli/help-json-payload.js +2 -2
- package/dist/cli/main.d.ts +5 -0
- package/dist/cli/main.js +3 -3
- package/dist/cli/register-history-maintenance.js +2 -1
- package/dist/cli/register-list-query.js +2 -2
- package/dist/cli/register-mutation.js +2 -2
- package/dist/cli/register-operations.d.ts +0 -5
- package/dist/cli/register-operations.js +1 -1
- package/dist/cli-bundle/bundle-manifest.json +154 -162
- package/dist/cli-bundle/chunks/{chunk-L5RCDKQ2.js → chunk-BN5QVWNY.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-DAWH7TGV.js +3 -0
- package/dist/cli-bundle/chunks/chunk-FBY6PEIR.js +20 -0
- package/dist/cli-bundle/chunks/chunk-IRUNFLLG.js +2 -0
- package/dist/cli-bundle/chunks/chunk-JMQKJ7CJ.js +8 -0
- package/dist/cli-bundle/chunks/{chunk-OHNLSGGV.js → chunk-QER6OSOP.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-RJQSCK74.js +6 -0
- package/dist/cli-bundle/chunks/chunk-RJZFAXBW.js +235 -0
- package/dist/cli-bundle/chunks/chunk-SGAKQIGQ.js +29 -0
- package/dist/cli-bundle/chunks/chunk-T3AMFUCN.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-ECBLPN7B.js → chunk-TDKWJQD7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-TFVKBJJ4.js +2247 -0
- package/dist/cli-bundle/chunks/{chunk-3IPRM75M.js → chunk-VFKBNGF6.js} +2 -2
- package/dist/cli-bundle/chunks/{register-list-query-UIHRCS6D.js → register-list-query-U6MY437C.js} +6 -6
- package/dist/cli-bundle/chunks/register-mutation-HAPHD4S7.js +20 -0
- package/dist/cli-bundle/chunks/register-operations-EHWIZW3X.js +2 -0
- package/dist/cli-bundle/chunks/{register-setup-PERI45EM.js → register-setup-BZYL3HBL.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-YJUXGS57.js → chunk-3JVTLBCW.js} +4 -4
- package/dist/cli-bundle/focused-chunks/chunk-6JF66HAG.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-ZTCE4UO6.js → chunk-7WISPJRZ.js} +53 -52
- package/dist/cli-bundle/focused-chunks/chunk-BEQAW7OT.js +12 -0
- package/dist/cli-bundle/focused-chunks/{chunk-PNKIANFZ.js → chunk-DZ3ATEFS.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-BUCJUZVG.js → chunk-FJDEFA64.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-QQQ4SAUO.js → chunk-GKUF7TM5.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-7PC4R5QB.js → chunk-HM6JS6Q3.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-M74YW332.js +164 -0
- package/dist/cli-bundle/focused-chunks/{chunk-7N6DOREF.js → chunk-MOT32PR2.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-ONDKO4EL.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-5FHTCOHS.js → chunk-TGMSSI3Z.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-TWE3GPQM.js +30 -0
- package/dist/cli-bundle/focused-chunks/chunk-UJCQXUD2.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-VS6MR2HT.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-YOPNRWSX.js +2 -0
- package/dist/cli-bundle/main.js +26 -26
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +2 -2
- package/dist/cli-bundle/sdk-core.js +37 -37
- 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 +42 -42
- 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 +10 -10
- package/dist/core/history/digest.d.ts +12 -0
- package/dist/core/history/digest.js +2 -0
- package/dist/core/history/drift-scan.js +1 -1
- package/dist/core/history/history.d.ts +5 -3
- package/dist/core/history/history.js +2 -2
- package/dist/core/history/replay.d.ts +3 -2
- package/dist/core/history/replay.js +1 -1
- package/dist/core/telemetry/runtime.d.ts +1 -0
- package/dist/core/telemetry/runtime.js +2 -2
- package/dist/sdk/agent/command-recovery.js +1 -1
- package/dist/sdk/agent/item-addressing.js +1 -1
- package/dist/sdk/agent/refusal-corpus-contracts.js +1 -1
- package/dist/sdk/agent-capability-contracts.js +1 -1
- package/dist/sdk/cli-bootstrap.d.ts +2 -1
- package/dist/sdk/cli-bootstrap.js +1 -1
- package/dist/sdk/cli-contracts/command-aliases.d.ts +13 -1
- package/dist/sdk/cli-contracts/command-aliases.js +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +4 -1
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
- package/dist/sdk/cli-contracts/tool-schema.d.ts +3 -3
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1
- package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +2 -0
- package/dist/sdk/cli-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts.js +1 -1
- package/dist/sdk/completion.d.ts +2 -0
- package/dist/sdk/completion.js +375 -350
- package/dist/sdk/contracts.d.ts +1 -0
- package/dist/sdk/contracts.js +1 -1
- package/dist/sdk/governance.d.ts +3 -0
- package/dist/sdk/governance.js +1 -1
- package/dist/sdk/history/attestation-command.d.ts +22 -0
- package/dist/sdk/history/attestation-command.js +3 -0
- package/dist/sdk/history/attestation-contract.d.ts +103 -0
- package/dist/sdk/history/attestation-contract.js +2 -0
- package/dist/sdk/history/attestation-scan.d.ts +16 -0
- package/dist/sdk/history/attestation-scan.js +2 -0
- package/dist/sdk/history/attestation.d.ts +8 -0
- package/dist/sdk/history/attestation.js +2 -0
- package/dist/sdk/history/salvage.js +1 -1
- package/dist/sdk/history-compact.js +1 -1
- package/dist/sdk/history-read.js +1 -1
- package/dist/sdk/history-redact.js +1 -1
- package/dist/sdk/history-repair.js +1 -1
- package/dist/sdk/index.d.ts +3 -1
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/lifecycle/claim.js +1 -1
- package/dist/sdk/lifecycle/lifecycle-transitions.d.ts +1 -1
- package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -1
- package/dist/sdk/lifecycle/mcp-actions.js +1 -1
- package/dist/sdk/lifecycle/task-composition.d.ts +17 -0
- package/dist/sdk/lifecycle/task-composition.js +2 -0
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/workspace-contracts.d.ts +3 -0
- package/dist/sdk/query/workspace-contracts.js +2 -0
- package/dist/sdk/read-output-budget.d.ts +4 -10
- package/dist/sdk/read-output-budget.js +1 -1
- package/dist/sdk/read-output-contracts.d.ts +1 -1
- package/dist/sdk/read-output-contracts.js +1 -1
- package/dist/sdk/read-output-session.d.ts +1 -1
- package/dist/sdk/read-output-session.js +1 -1
- package/dist/sdk/runtime-input.js +1 -1
- package/dist/sdk/runtime.d.ts +72 -9
- package/dist/sdk/runtime.js +1 -1
- package/dist/types.d.ts +5 -1
- package/dist/types.js +1 -1
- package/docs/CLI_GRAMMAR.md +23 -0
- package/docs/COMMANDS.md +26 -24
- package/docs/COMMAND_NAMESPACES.md +65 -0
- package/docs/HISTORY_ATTESTATION.md +164 -0
- package/docs/LIFECYCLE_COMMANDS.md +77 -0
- package/docs/README.md +3 -0
- package/docs/READ_OUTPUT_CONTRACTS.md +13 -0
- package/docs/generated/AGENT_CAPABILITY_ROUTING.md +6 -6
- package/docs/generated/AGENT_COMMAND_SURFACE.md +24 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +26 -3
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +4 -4
- package/marketplace.json +2 -2
- package/package.json +4 -4
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/README.md +13 -9
- package/packages/pm-governance-audit/extensions/governance-audit/index.ts +6 -3
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +7 -19
- package/packages/pm-guide-shell/package.json +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/README.md +15 -9
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +3 -2
- 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/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/dist/cli-bundle/chunks/chunk-4VL5P22L.js +0 -2
- package/dist/cli-bundle/chunks/chunk-AAFBV3U3.js +0 -29
- package/dist/cli-bundle/chunks/chunk-D3YVILJJ.js +0 -20
- package/dist/cli-bundle/chunks/chunk-J6ERHBV2.js +0 -235
- package/dist/cli-bundle/chunks/chunk-JUNJ5EKI.js +0 -2
- package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +0 -2
- package/dist/cli-bundle/chunks/chunk-WQKMSFBV.js +0 -5
- package/dist/cli-bundle/chunks/chunk-XZ6T7YPP.js +0 -2217
- package/dist/cli-bundle/chunks/chunk-Z3XVXUVF.js +0 -8
- package/dist/cli-bundle/chunks/register-mutation-WHWMGRVX.js +0 -20
- package/dist/cli-bundle/chunks/register-operations-64YZYTC5.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-2W4XIYOB.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-2WSBXIGF.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-FE3BABLJ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-IWITF53W.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-OQUGRHKV.js +0 -10
- package/dist/cli-bundle/focused-chunks/chunk-TTYXF5YD.js +0 -177
- package/dist/cli-bundle/focused-chunks/chunk-XNR3DM6J.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-XSS3APUF.js +0 -9
- package/dist/cli-bundle/focused-chunks/chunk-YCDQ2N23.js +0 -8
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Context and operations command namespaces
|
|
2
|
+
|
|
3
|
+
Tracked in [pm-kcs4](../.agents/pm/tasks/pm-kcs4.toon),
|
|
4
|
+
[pm-6apl](../.agents/pm/tasks/pm-6apl.toon), and
|
|
5
|
+
[pm-3i9q8g](../.agents/pm/tasks/pm-3i9q8g.toon).
|
|
6
|
+
|
|
7
|
+
The CLI groups navigation and maintenance under stable nouns. Existing root
|
|
8
|
+
spellings remain executable compatibility aliases with the same arguments,
|
|
9
|
+
results, exit codes, and SDK behavior.
|
|
10
|
+
|
|
11
|
+
| Native invocation | Compatibility spelling | Purpose |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| `pm context next` | `pm next` | Select ready work and explain blockers |
|
|
14
|
+
| `pm context focus` | `pm focus` | Read, set, or clear the focused item |
|
|
15
|
+
| `pm ops stats` | `pm stats` | Inspect tracker statistics |
|
|
16
|
+
| `pm ops health` | `pm health` | Diagnose tracker health |
|
|
17
|
+
| `pm ops validate` | `pm validate` | Validate metadata and history |
|
|
18
|
+
| `pm ops gc` | `pm gc` | Clean optional cache artifacts |
|
|
19
|
+
| `pm ops telemetry` | `pm telemetry` | Inspect and manage telemetry |
|
|
20
|
+
| `pm ops eval` | `pm eval` | Evaluate retrieval quality |
|
|
21
|
+
| `pm ops test-all` | `pm test-all` | Run selected linked tests |
|
|
22
|
+
| `pm ops reindex` | `pm reindex` | Refresh indexes through search-advanced |
|
|
23
|
+
| `pm ops normalize` | `pm normalize` | Normalize through an active governance package |
|
|
24
|
+
| `pm history events` | `pm events` | Read or follow committed mutation events |
|
|
25
|
+
|
|
26
|
+
`pm context --limit 10 --for orient` still produces a context snapshot.
|
|
27
|
+
`pm history <id> --verify` still reads and verifies one item's history.
|
|
28
|
+
Namespace leaves do not change either default operation.
|
|
29
|
+
|
|
30
|
+
## Discover only what the current task needs
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pm context next --limit 5 --ready-only
|
|
34
|
+
pm context focus --id pm-example
|
|
35
|
+
pm ops health --check-only --summary
|
|
36
|
+
pm ops validate --check-history-drift
|
|
37
|
+
pm history events --item pm-example --limit 10
|
|
38
|
+
pm ops --help
|
|
39
|
+
pm contracts --command "ops stats" --flags-only
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Help, contracts, and shell completion expose native paths. Compatibility aliases
|
|
43
|
+
remain declared in the SDK alias table. Alias guidance uses the existing
|
|
44
|
+
`ux.deprecation_hints` setting. Human-readable calls emit it on stderr; JSON and
|
|
45
|
+
quiet calls suppress it. Compact contract summaries omit duplicate root alias
|
|
46
|
+
rows; full and explicitly selected contracts retain them. Optional commands appear only when their providing package is active;
|
|
47
|
+
namespace placement does not promote package behavior into core.
|
|
48
|
+
|
|
49
|
+
## SDK and package integration
|
|
50
|
+
|
|
51
|
+
`PM_NAMESPACED_COMMAND_ALIASES` and `resolvePmCommandOperation` are exported
|
|
52
|
+
from `@unbrained/pm-cli/sdk` and `@unbrained/pm-cli/sdk/contracts`.
|
|
53
|
+
The resolver maps a native path such as `context next` to the existing SDK
|
|
54
|
+
operation identity `next`. Unknown paths are preserved. SDK functions, MCP
|
|
55
|
+
action names, extension activation selectors, and command hooks retain their
|
|
56
|
+
existing operation identities.
|
|
57
|
+
|
|
58
|
+
Packages that provide `reindex` or `normalize` keep their existing command
|
|
59
|
+
registration. The CLI places the registered handler beneath `ops` after
|
|
60
|
+
activation, preserving flags, argument parsing, and nested commands. A conflicting
|
|
61
|
+
native destination fails explicitly instead of silently replacing a handler.
|
|
62
|
+
|
|
63
|
+
Generated Bash, Zsh, and Fish scripts recognize namespace command positions and
|
|
64
|
+
skip global option values when selecting a leaf. Re-generate installed completion
|
|
65
|
+
scripts after upgrading with `pm completion <shell>` from guide-shell.
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# History algorithms and detached attestations
|
|
2
|
+
|
|
3
|
+
Tracking: [pm-bbk8we](../.agents/pm/issues/pm-bbk8we.toon),
|
|
4
|
+
[pm-3z0k](../.agents/pm/features/pm-3z0k.toon).
|
|
5
|
+
|
|
6
|
+
A detached attestation commits to the exact bytes of every retained history
|
|
7
|
+
stream. Keep the bundle, or its workspace digest, independently of the tracker.
|
|
8
|
+
Verification can then detect a rewritten stream even when its author recomputed
|
|
9
|
+
an internally valid hash chain.
|
|
10
|
+
|
|
11
|
+
## CLI
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
pm history attest --output proof.json
|
|
15
|
+
pm history attest --verify proof.json
|
|
16
|
+
pm history attest --hash-algorithm sha512 --output proof-sha512.json
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Export with `--output` creates a new JSON file exclusively and returns a compact
|
|
20
|
+
receipt containing its path, workspace digest, and stream count. Existing files
|
|
21
|
+
are not overwritten. Without `--output`, export writes the complete JSON bundle
|
|
22
|
+
to stdout. Proof bytes bypass default row projection and output budgets so a
|
|
23
|
+
redirected artifact retains its digest. Explicit universal output controls such
|
|
24
|
+
as `--output-limit` are rejected. `--quiet` suppresses stdout. Verification returns a nonzero process
|
|
25
|
+
exit status if any stream changed, appeared, disappeared, or failed validation.
|
|
26
|
+
`--verify` cannot be combined with export options.
|
|
27
|
+
|
|
28
|
+
Only the tracker directory and its `history/*.jsonl` files are needed. For a
|
|
29
|
+
bare history copy, select the directory containing `history`:
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
pm --pm-path /path/to/copied-tracker history attest --verify proof.json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Item files, settings, indexes, extensions, and the original Git checkout are not
|
|
36
|
+
needed. The verifier does not acquire tracker locks or create derived state.
|
|
37
|
+
CLI attestation invocations disable extension loading automatically.
|
|
38
|
+
|
|
39
|
+
## SDK
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
import {
|
|
43
|
+
exportAttestation,
|
|
44
|
+
parseHistoryAttestation,
|
|
45
|
+
verifyAttestation,
|
|
46
|
+
} from "@unbrained/pm-cli/sdk/governance";
|
|
47
|
+
|
|
48
|
+
const proof = await exportAttestation({
|
|
49
|
+
pmRoot: "/path/to/tracker",
|
|
50
|
+
hashAlgorithm: "sha256",
|
|
51
|
+
});
|
|
52
|
+
const parsed = parseHistoryAttestation(proof);
|
|
53
|
+
const result = await verifyAttestation(parsed, {
|
|
54
|
+
pmRoot: "/path/to/copied-tracker",
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The same APIs are available from the SDK root. `generatedAt` optionally accepts
|
|
59
|
+
an RFC 3339 timestamp with millisecond precision for reproducible exports.
|
|
60
|
+
Equal stream bytes, options, and timestamps yield identical bundle digests.
|
|
61
|
+
`PmClient.historyAttest` and `runAction({ action: "history-attest", ... })` expose
|
|
62
|
+
the adapter used by CLI and MCP. Local CLI and SDK callers may use proof paths;
|
|
63
|
+
SDK callers may also pass a typed bundle as `verify`. Direct export and verify functions
|
|
64
|
+
accept and return typed bundles without requiring a proof file.
|
|
65
|
+
|
|
66
|
+
## MCP
|
|
67
|
+
|
|
68
|
+
Call `pm_run` with `action: "history-attest"` to receive the complete JSON bundle.
|
|
69
|
+
Retain it on the client and pass that object as `verify` to compare the tracker.
|
|
70
|
+
Both flat arguments and nested `options` use this data-only proof transport.
|
|
71
|
+
MCP refuses `output` and string `verify` values before accessing proof files;
|
|
72
|
+
server-local proof paths are available only to local CLI and SDK callers.
|
|
73
|
+
|
|
74
|
+
## Version 1 wire format
|
|
75
|
+
|
|
76
|
+
`PM_HISTORY_ATTESTATION_CONTRACT` is exported from the SDK contracts entrypoint.
|
|
77
|
+
The JSON document has exactly these fields:
|
|
78
|
+
|
|
79
|
+
| Field | Meaning |
|
|
80
|
+
| --- | --- |
|
|
81
|
+
| `format` | Literal `pm-history-attestation` |
|
|
82
|
+
| `version` | Integer `1` |
|
|
83
|
+
| `hash_algorithm` | `sha256` or `sha512`, for bundle commitments |
|
|
84
|
+
| `generated_at` | Exporter's asserted timestamp |
|
|
85
|
+
| `streams` | Complete retained stream inventory, sorted by ID |
|
|
86
|
+
| `workspace_digest` | Digest of the stable JSON encoding of all other fields |
|
|
87
|
+
|
|
88
|
+
Each stream contains its filename stem, exact byte length, nonblank record count,
|
|
89
|
+
exact-byte digest, latest item-state and whole-record anchors, latest record
|
|
90
|
+
algorithm, retained rewrite-evidence count, compact checkpoint digest, and last
|
|
91
|
+
maintenance marker. Empty streams have null anchors and no maintenance marker.
|
|
92
|
+
The workspace stream and streams belonging to deleted items are included.
|
|
93
|
+
Identifiers contain only ASCII letters, digits, underscores, and hyphens.
|
|
94
|
+
No item content, author, filesystem root, or patch value is embedded in a bundle.
|
|
95
|
+
The bundle grows with the number of streams, not their event counts.
|
|
96
|
+
|
|
97
|
+
Stream digests hash all file bytes, including blank lines, whitespace, and line
|
|
98
|
+
endings. Thus a formatting-only change is also a divergence. The workspace
|
|
99
|
+
rollup uses the SDK's recursive stable JSON encoding with sorted object keys
|
|
100
|
+
and preserved array order, excluding only `workspace_digest`. Stream ordering
|
|
101
|
+
uses ascending JavaScript code-unit comparison of IDs, not locale collation.
|
|
102
|
+
Lowercase hexadecimal digest lengths are 64 for SHA-256 and 128 for SHA-512.
|
|
103
|
+
|
|
104
|
+
Verification validates the bundle schema and rollup before inspecting files.
|
|
105
|
+
It reports `changed_streams`, `missing_streams`, `added_streams`, and
|
|
106
|
+
`invalid_streams`; these categories may overlap. `transitions` includes before
|
|
107
|
+
and after byte digests plus the current last maintenance marker for each changed
|
|
108
|
+
stream. Export refuses invalid streams instead of producing partial evidence.
|
|
109
|
+
Unknown format versions and algorithms are rejected.
|
|
110
|
+
|
|
111
|
+
## Record algorithms and migration
|
|
112
|
+
|
|
113
|
+
Each new history entry names `hash_algorithm`. This label selects the digest
|
|
114
|
+
used for `before_hash`, `after_hash`, and `record_hash`. Current writers default
|
|
115
|
+
to `sha256`; callers constructing entries may explicitly select `sha512`.
|
|
116
|
+
The immutable record digest covers the algorithm label itself.
|
|
117
|
+
|
|
118
|
+
An absent label **always means SHA-256**, regardless of future writer defaults.
|
|
119
|
+
Existing unlabeled history remains verifiable without rewriting it. A stream
|
|
120
|
+
may mix algorithms: replay reconstructs the prior state and verifies each link
|
|
121
|
+
using that entry's declared algorithm. Adjacent bare digest strings need not be
|
|
122
|
+
equal when algorithms differ. Unknown labels fail verification even on legacy
|
|
123
|
+
entries without whole-record seals.
|
|
124
|
+
|
|
125
|
+
`item_hash_version` selects canonical item encoding and remains separate from
|
|
126
|
+
`hash_algorithm`. The item document `format_version` does not change for this
|
|
127
|
+
additive history field. `record_hash_version: 1` still defines stable record
|
|
128
|
+
encoding; the algorithm field defines the digest. Older readers lacking the
|
|
129
|
+
algorithm capability cannot verify SHA-512 entries and should be upgraded
|
|
130
|
+
before such entries are introduced. No automatic archive migration is needed.
|
|
131
|
+
|
|
132
|
+
Retained rewrite evidence carries the original entry's algorithm. Repair,
|
|
133
|
+
redaction, merge reconciliation, and compaction preserve verifiable original
|
|
134
|
+
algorithm commitments where they retain evidence. Version 1 patch digests and
|
|
135
|
+
compact pruned-prefix commitments remain explicitly fixed to SHA-256; they are
|
|
136
|
+
separate commitments, not item-state or record digests.
|
|
137
|
+
|
|
138
|
+
Advancing the default affects future writes only. Never infer an unlabeled
|
|
139
|
+
record's algorithm from digest length or the current default, and never rewrite
|
|
140
|
+
an archive simply to add labels. Bundle algorithms are independent of record
|
|
141
|
+
algorithms: a SHA-256 bundle can cover SHA-512 records and vice versa. Existing
|
|
142
|
+
bundles retain their declared verification algorithm. Re-export after an
|
|
143
|
+
intentional append or maintenance operation, review the reported transition,
|
|
144
|
+
and retain both proofs if historical comparison matters.
|
|
145
|
+
|
|
146
|
+
## Trust and consistency
|
|
147
|
+
|
|
148
|
+
A self-consistent bundle is not a digital signature or a trusted timestamp. It
|
|
149
|
+
does not identify an author, prove that events happened in the real world, or
|
|
150
|
+
recover a pruned prefix. If an attacker can replace both tracker and trusted
|
|
151
|
+
bundle, these hashes do not establish authenticity. Packages can anchor the
|
|
152
|
+
workspace digest in an independent repository, signing service, or transparency
|
|
153
|
+
log without changing this baseline format.
|
|
154
|
+
|
|
155
|
+
Verification establishes equality with the retained proof and checks each
|
|
156
|
+
current stream's internal replay integrity. It does not assert that current
|
|
157
|
+
item files match history, or that every intended mutation was recorded. Use
|
|
158
|
+
normal workspace validation for those checks.
|
|
159
|
+
|
|
160
|
+
The scanner takes a snapshot per stream and checks filename inventories and
|
|
161
|
+
file metadata again before returning. Observable concurrent changes fail with
|
|
162
|
+
a retry error. This is not a transaction across independent writers; use a
|
|
163
|
+
quiescent or externally snapshotted copy when a single workspace-wide instant
|
|
164
|
+
is required. Symlink stream files and malformed UTF-8/JSONL are invalid.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Lifecycle Commands and Ownership
|
|
2
|
+
|
|
3
|
+
Tracked by [pm-ik19](../.agents/pm/tasks/pm-ik19.toon) and
|
|
4
|
+
[pm-eq4x](../.agents/pm/tasks/pm-eq4x.toon).
|
|
5
|
+
|
|
6
|
+
Bulk mutations and ownership compositions share SDK implementations with their
|
|
7
|
+
compatibility spellings. Runtime help and contracts describe the active surface:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pm update many --help
|
|
11
|
+
pm close many --help
|
|
12
|
+
pm close delete --help
|
|
13
|
+
pm contracts --command 'close many' --flags-only --json
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Command migration
|
|
17
|
+
|
|
18
|
+
| Canonical invocation | Compatibility invocation |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| `pm update many --ids <ids> --priority 1` | `pm update-many --ids <ids> --priority 1` |
|
|
21
|
+
| `pm close many --ids <ids> --reason "Verified"` | `pm close-many --ids <ids> --reason "Verified"` |
|
|
22
|
+
| `pm close delete <id> --dry-run` | `pm delete <id> --dry-run` |
|
|
23
|
+
| `pm claim <id> --start` | `pm start-task <id>` |
|
|
24
|
+
| `pm release <id> --pause` | `pm pause-task <id>` |
|
|
25
|
+
| `pm close <id> "Verified" --release-assignment` | `pm close-task <id> "Verified"` |
|
|
26
|
+
|
|
27
|
+
The old spellings remain accepted as hidden aliases. Bulk aliases are permanent;
|
|
28
|
+
the three task aliases are deprecated. Human output for deprecated aliases can
|
|
29
|
+
include migration hints according to `ux.deprecation_hints`; JSON and quiet
|
|
30
|
+
invocations suppress those hints. Bulk commands retain their existing filters,
|
|
31
|
+
stdin selection, dry runs, rollback behavior, and evidence flags. Put bulk flags
|
|
32
|
+
after `many`. Deletion recovery remains `pm history restore <id> <version>`.
|
|
33
|
+
|
|
34
|
+
Plain `claim`, `release`, `update`, and `close` keep their original semantics.
|
|
35
|
+
`claim --start` requires an explicit item and rejects `--next` and
|
|
36
|
+
`--if-available` before mutation. It claims ownership, then moves the item to the
|
|
37
|
+
configured in-progress status. `release --pause` moves work to the configured
|
|
38
|
+
open status, then releases ownership. `close --release-assignment` records the
|
|
39
|
+
close and its inline evidence, then releases ownership.
|
|
40
|
+
|
|
41
|
+
Each constituent operation enforces its own policy and writes its own history.
|
|
42
|
+
Compositions do not provide rollback across operations: for example, if the
|
|
43
|
+
status transition fails after a successful claim, the claim remains. Inspect the
|
|
44
|
+
item before retrying after an error.
|
|
45
|
+
|
|
46
|
+
## SDK and MCP
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
import { PmClient } from "@unbrained/pm-cli/sdk";
|
|
50
|
+
|
|
51
|
+
const pm = new PmClient({ pmRoot: "/project/.agents/pm" });
|
|
52
|
+
const started = await pm.claim("pm-example", { start: true });
|
|
53
|
+
const paused = await pm.release("pm-example", { pause: true });
|
|
54
|
+
const closed = await pm.close("pm-example", "Acceptance verified", {
|
|
55
|
+
releaseAssignment: true,
|
|
56
|
+
resolution: "Implemented the requested behavior",
|
|
57
|
+
expectedResult: "Acceptance checks pass",
|
|
58
|
+
actualResult: "Acceptance checks passed",
|
|
59
|
+
validateClose: "warn",
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Literal `true` options return typed `StartTaskResult`, `PauseTaskResult`, or
|
|
64
|
+
`CloseTaskResult` receipts. Their discriminators remain `start_task`,
|
|
65
|
+
`pause_task`, and `close_task`, with the constituent results available under
|
|
66
|
+
`claim`, `update`, `close`, or `release`. Public `runStartTask`, `runPauseTask`, and
|
|
67
|
+
`runCloseTask` primitives expose the same SDK-owned compositions.
|
|
68
|
+
|
|
69
|
+
MCP actions remain `claim`, `release`, and `close`, using `start`, `pause`, and
|
|
70
|
+
`releaseAssignment`. Action-specific discovery types claim's `start` as boolean;
|
|
71
|
+
scheduling actions retain string timestamps. For the broad provider tool schema,
|
|
72
|
+
pass the claim boolean through `options: { start: true }` because its shared flat
|
|
73
|
+
`start` property retains the scheduling string contract. Bulk action names remain
|
|
74
|
+
`update_many`, `close_many`, and `delete` for transport compatibility.
|
|
75
|
+
|
|
76
|
+
See [SDK Lifecycle Policy](SDK_LIFECYCLE.md) for transaction and policy ownership
|
|
77
|
+
and [CLI Scripting Contract](SCRIPTING.md) for output projection.
|
package/docs/README.md
CHANGED
|
@@ -35,6 +35,7 @@ pm guide release --json
|
|
|
35
35
|
- [Onboarding](ONBOARDING.md) - first-two-hours maintainer and contributor setup.
|
|
36
36
|
- [Agent Guide](AGENT_GUIDE.md) - canonical agent loop, tracker linking, and token-minimal command choices.
|
|
37
37
|
- [Command Reference](COMMANDS.md) - command families with examples and when to use each family.
|
|
38
|
+
- [Context and Operations Namespaces](COMMAND_NAMESPACES.md) - native navigation, diagnostics, event streams, and compatibility aliases.
|
|
38
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.
|
|
39
40
|
- [Configuration](CONFIGURATION.md) - settings, storage formats, output, search, validation, and environment variables.
|
|
40
41
|
- [Testing](TESTING.md) - sandbox-safe local tests and linked-test orchestration.
|
|
@@ -61,6 +62,7 @@ pm guide release --json
|
|
|
61
62
|
- [Generated Refusal Closure Census](generated/REFUSAL_CLOSURE_CENSUS.md) - complete error-catalog join to executable refusal evidence and explicit uncovered obligations.
|
|
62
63
|
- [Universal Read Output Contracts](READ_OUTPUT_CONTRACTS.md) - cross-command include, amount, cost, and encoding controls for CLI, SDK, MCP, and packages.
|
|
63
64
|
- [Diagnostic Output Contracts](DIAGNOSTIC_OUTPUT_CONTRACTS.md) - action-first error budgets, deterministic degradation, SDK projection, and executable refusal assurance.
|
|
65
|
+
- [History Algorithms and Detached Attestations](HISTORY_ATTESTATION.md) - named record digests, portable exact-byte proofs, and read-only verification.
|
|
64
66
|
- [History Maintenance and Recovery](HISTORY_MAINTENANCE.md) - native history commands, permanent aliases, shared SDK transforms, and transactional recovery.
|
|
65
67
|
- [Declarative Workflow Policies](WORKFLOW_POLICIES.md) - portable lifecycle requirements, independent approvals, and completeness reports.
|
|
66
68
|
- [Mutation Integrity](MUTATION_INTEGRITY.md) - shared CLI/SDK/MCP author, secret, append-only disposition, and stale-work guardrails.
|
|
@@ -100,6 +102,7 @@ Additional SDK, operations, and generated contracts:
|
|
|
100
102
|
- [Item Read Projections](ITEM_READ_PROJECTIONS.md) - identity, projections, and read completeness.
|
|
101
103
|
- [MCP Capability Surfaces](MCP_CAPABILITY_SURFACES.md) - negotiated MCP discovery contracts.
|
|
102
104
|
- [PR Review Loop](PR_REVIEW_LOOP.md) - complete review inventories and feedback acknowledgment.
|
|
105
|
+
- [Lifecycle Commands and Ownership](LIFECYCLE_COMMANDS.md) - canonical bulk commands, ownership compositions, and SDK/MCP migration.
|
|
103
106
|
- [SDK Lifecycle](SDK_LIFECYCLE.md) - lifecycle primitives and package integration.
|
|
104
107
|
- [SDK Runtime Boundaries](SDK_RUNTIME_BOUNDARIES.md) - runtime ownership and import boundaries.
|
|
105
108
|
- [Sentry Contract Epochs](SENTRY_CONTRACT_EPOCHS.md) - diagnostic compatibility and release epochs.
|
|
@@ -153,6 +153,19 @@ pm contracts --full --json
|
|
|
153
153
|
|
|
154
154
|
Every projected result carries a `read_output` receipt with the requested dimensions, precedence, observed option provenance, deterministic estimated token count, string/row compaction signals, and budget outcome. When canonical controls are present, `canonical_options_used` records spellings such as `--output-include`; the optional field is omitted when no canonical control was supplied so minimum-budget session receipts remain compact. `legacy_aliases_used` and `migration_hints` record only compatibility flags the caller actually supplied. A command-local flag synthesized internally to execute a canonical projection mode is therefore never misreported as deprecated syntax. When both spellings are supplied, both provenance arrays report that mixed invocation. Budget degradation discovers nested arrays as well as declared result rows, so validation diagnostics and other governance payloads compact their inner findings before the useful result is omitted. `compacted_row_paths` names every reduced collection without redefining those nested arrays as ordinary pagination rows.
|
|
155
155
|
|
|
156
|
+
The estimate is `ceil(utf8_bytes / 4)` for the complete envelope. The CLI uses
|
|
157
|
+
its selected built-in JSON or TOON representation, including indentation and
|
|
158
|
+
the final newline. SDK calls that select `outputFormat` use that representation;
|
|
159
|
+
structured SDK calls without a renderer retain compact JSON measurement.
|
|
160
|
+
Those unformatted calls keep the conservative workload-class ceiling
|
|
161
|
+
(`default_max_estimated_tokens`, also used as the generated TOON ceiling).
|
|
162
|
+
Selecting JSON explicitly opts into its larger declared rendering allowance;
|
|
163
|
+
serializing an SDK object for measurement does not implicitly select that policy.
|
|
164
|
+
Per-call and session receipts include their own cost and continuation disclosure.
|
|
165
|
+
Compaction reserves room for that disclosure before returning a useful page, so
|
|
166
|
+
an envelope cannot claim to fit merely because its rows fit before receipts were
|
|
167
|
+
added. An infeasible ceiling returns the explicit omission result.
|
|
168
|
+
|
|
156
169
|
For `context` and `next`, that final projection is also the usage-feedback
|
|
157
170
|
delivery boundary. The SDK carries a JSON-invisible serve receipt through
|
|
158
171
|
intent and universal output projection, then appends the final omitted decision
|
|
@@ -6,12 +6,12 @@ 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`, `merge`, `schema`, `profile`, `telemetry`, `health`, `gc`, `workspace` |
|
|
10
|
-
| intake | `create`, `copy`, `focus`, `restore` |
|
|
11
|
-
| context | `list`, `aggregate`, `context`, `get`, `search`, `duplicates`, `eval`, `next`, `activity`, `stats`, `help` |
|
|
12
|
-
| lifecycle | `update`, `update
|
|
13
|
-
| evidence | `history`, `events`, `history
|
|
9
|
+
| workspace | `init`, `config`, `workspace merge`, `schema`, `profile`, `ops telemetry`, `ops health`, `ops gc`, `workspace` |
|
|
10
|
+
| intake | `create`, `item copy`, `context focus`, `history restore` |
|
|
11
|
+
| context | `list`, `aggregate`, `context`, `get`, `search`, `item duplicates`, `ops eval`, `context next`, `history activity`, `ops stats`, `help` |
|
|
12
|
+
| lifecycle | `update`, `update many`, `close`, `close many`, `close delete`, `claim`, `release` |
|
|
13
|
+
| evidence | `history`, `history events`, `history redact`, `history repair`, `history compact`, `history attest`, `history-author-acknowledge`, `append`, `comments`, `notes`, `learnings`, `files`, `docs` |
|
|
14
14
|
| graph | `graph`, `deps`, `plan` |
|
|
15
|
-
| quality | `test`, `test-all`, `validate`, `assurance`, `contracts` |
|
|
15
|
+
| quality | `test`, `ops test-all`, `ops validate`, `assurance`, `contracts`, `ops` |
|
|
16
16
|
| automation | `meet`, `event`, `remind` |
|
|
17
17
|
| extensions | `package` |
|
|
@@ -14,7 +14,9 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
|
|
|
14
14
|
| `create` | core | intake |
|
|
15
15
|
| `item-reopen` | full | lifecycle |
|
|
16
16
|
| `copy` | full | intake |
|
|
17
|
+
| `item copy` | full | intake |
|
|
17
18
|
| `focus` | standard | intake |
|
|
19
|
+
| `context focus` | standard | intake |
|
|
18
20
|
| `list` | core | context |
|
|
19
21
|
| `list-all` | standard | context |
|
|
20
22
|
| `list-draft` | full | context |
|
|
@@ -30,24 +32,39 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
|
|
|
30
32
|
| `graph` | standard | graph |
|
|
31
33
|
| `search` | core | context |
|
|
32
34
|
| `duplicates` | full | context |
|
|
35
|
+
| `item duplicates` | full | context |
|
|
33
36
|
| `eval` | full | context |
|
|
37
|
+
| `ops eval` | full | context |
|
|
34
38
|
| `next` | core | context |
|
|
39
|
+
| `context next` | core | context |
|
|
35
40
|
| `history` | standard | evidence |
|
|
36
41
|
| `events` | standard | evidence |
|
|
42
|
+
| `history events` | standard | evidence |
|
|
37
43
|
| `history-redact` | full | evidence |
|
|
44
|
+
| `history redact` | full | evidence |
|
|
38
45
|
| `history-repair` | full | evidence |
|
|
46
|
+
| `history repair` | full | evidence |
|
|
39
47
|
| `history-compact` | full | evidence |
|
|
48
|
+
| `history compact` | full | evidence |
|
|
49
|
+
| `history-attest` | full | evidence |
|
|
50
|
+
| `history attest` | full | evidence |
|
|
40
51
|
| `history-author-acknowledge` | full | evidence |
|
|
41
52
|
| `merge` | full | workspace |
|
|
53
|
+
| `workspace merge` | full | workspace |
|
|
42
54
|
| `schema` | standard | workspace |
|
|
43
55
|
| `profile` | standard | workspace |
|
|
44
56
|
| `activity` | full | context |
|
|
57
|
+
| `history activity` | full | context |
|
|
45
58
|
| `restore` | full | intake |
|
|
59
|
+
| `history restore` | full | intake |
|
|
46
60
|
| `update` | core | lifecycle |
|
|
47
61
|
| `update-many` | full | lifecycle |
|
|
62
|
+
| `update many` | full | lifecycle |
|
|
48
63
|
| `close` | core | lifecycle |
|
|
49
64
|
| `close-many` | full | lifecycle |
|
|
65
|
+
| `close many` | full | lifecycle |
|
|
50
66
|
| `delete` | full | lifecycle |
|
|
67
|
+
| `close delete` | full | lifecycle |
|
|
51
68
|
| `append` | standard | evidence |
|
|
52
69
|
| `comments` | standard | evidence |
|
|
53
70
|
| `notes` | standard | evidence |
|
|
@@ -58,12 +75,18 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
|
|
|
58
75
|
| `plan` | core | graph |
|
|
59
76
|
| `test` | standard | quality |
|
|
60
77
|
| `test-all` | full | quality |
|
|
78
|
+
| `ops test-all` | full | quality |
|
|
61
79
|
| `telemetry` | full | workspace |
|
|
80
|
+
| `ops telemetry` | full | workspace |
|
|
62
81
|
| `stats` | full | context |
|
|
82
|
+
| `ops stats` | full | context |
|
|
63
83
|
| `health` | standard | workspace |
|
|
84
|
+
| `ops health` | standard | workspace |
|
|
64
85
|
| `validate` | core | quality |
|
|
86
|
+
| `ops validate` | core | quality |
|
|
65
87
|
| `assurance` | full | quality |
|
|
66
88
|
| `gc` | full | workspace |
|
|
89
|
+
| `ops gc` | full | workspace |
|
|
67
90
|
| `workspace` | full | workspace |
|
|
68
91
|
| `contracts` | standard | quality |
|
|
69
92
|
| `claim` | core | lifecycle |
|
|
@@ -75,6 +98,7 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
|
|
|
75
98
|
| `event` | full | automation |
|
|
76
99
|
| `remind` | full | automation |
|
|
77
100
|
| `help` | core | context |
|
|
101
|
+
| `ops` | core | quality |
|
|
78
102
|
| `completion-statuses` | internal | internal |
|
|
79
103
|
| `completion-tags` | internal | internal |
|
|
80
104
|
| `completion-types` | internal | internal |
|
|
@@ -33,6 +33,7 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
|
|
|
33
33
|
| `next` | context | 38 | 38 |
|
|
34
34
|
| `history` | evidence | 35 | 35 |
|
|
35
35
|
| `events` | evidence | 33 | 33 |
|
|
36
|
+
| `history-attest` | evidence | 23 | 23 |
|
|
36
37
|
| `history-redact` | evidence | 27 | 27 |
|
|
37
38
|
| `history-repair` | evidence | 27 | 27 |
|
|
38
39
|
| `history-compact` | evidence | 30 | 30 |
|
|
@@ -44,7 +45,7 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
|
|
|
44
45
|
| `restore` | intake | 23 | 23 |
|
|
45
46
|
| `update` | lifecycle | 105 | 105 |
|
|
46
47
|
| `update-many` | lifecycle | 146 | 146 |
|
|
47
|
-
| `close` | lifecycle |
|
|
48
|
+
| `close` | lifecycle | 32 | 32 |
|
|
48
49
|
| `close-many` | lifecycle | 72 | 72 |
|
|
49
50
|
| `delete` | lifecycle | 24 | 24 |
|
|
50
51
|
| `append` | evidence | 25 | 25 |
|
|
@@ -65,8 +66,8 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
|
|
|
65
66
|
| `gc` | workspace | 22 | 22 |
|
|
66
67
|
| `workspace` | workspace | 23 | 23 |
|
|
67
68
|
| `contracts` | quality | 29 | 29 |
|
|
68
|
-
| `claim` | lifecycle |
|
|
69
|
-
| `release` | lifecycle |
|
|
69
|
+
| `claim` | lifecycle | 39 | 39 |
|
|
70
|
+
| `release` | lifecycle | 24 | 24 |
|
|
70
71
|
| `start-task` | lifecycle | 23 | 23 |
|
|
71
72
|
| `pause-task` | lifecycle | 23 | 23 |
|
|
72
73
|
| `close-task` | lifecycle | 24 | 24 |
|
|
@@ -74,3 +75,25 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
|
|
|
74
75
|
| `event` | automation | 33 | 33 |
|
|
75
76
|
| `remind` | automation | 29 | 29 |
|
|
76
77
|
| `test-runs-worker` | internal | 25 | 25 |
|
|
78
|
+
| `history attest` | evidence | 23 | 23 |
|
|
79
|
+
| `history redact` | evidence | 27 | 27 |
|
|
80
|
+
| `history repair` | evidence | 27 | 27 |
|
|
81
|
+
| `history compact` | evidence | 30 | 30 |
|
|
82
|
+
| `history activity` | context | 35 | 35 |
|
|
83
|
+
| `history restore` | intake | 23 | 23 |
|
|
84
|
+
| `context next` | context | 38 | 38 |
|
|
85
|
+
| `context focus` | intake | 22 | 22 |
|
|
86
|
+
| `ops stats` | context | 29 | 29 |
|
|
87
|
+
| `ops health` | workspace | 36 | 36 |
|
|
88
|
+
| `ops validate` | quality | 46 | 46 |
|
|
89
|
+
| `ops gc` | workspace | 22 | 22 |
|
|
90
|
+
| `ops telemetry` | workspace | 21 | 21 |
|
|
91
|
+
| `ops eval` | context | 25 | 25 |
|
|
92
|
+
| `ops test-all` | quality | 40 | 40 |
|
|
93
|
+
| `history events` | evidence | 33 | 33 |
|
|
94
|
+
| `update many` | lifecycle | 146 | 146 |
|
|
95
|
+
| `close many` | lifecycle | 72 | 72 |
|
|
96
|
+
| `close delete` | lifecycle | 24 | 24 |
|
|
97
|
+
| `item copy` | intake | 24 | 24 |
|
|
98
|
+
| `workspace merge` | workspace | 27 | 27 |
|
|
99
|
+
| `item duplicates` | context | 25 | 25 |
|
|
@@ -11,7 +11,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
11
11
|
- Uncovered error codes: 352
|
|
12
12
|
- Coverage fraction: 0.051213
|
|
13
13
|
- Closed-domain probes: 19
|
|
14
|
-
- Grammar probes:
|
|
14
|
+
- Grammar probes: 101
|
|
15
15
|
|
|
16
16
|
| Error code | Canonical code | Disposition | Evidence kinds | Probe count |
|
|
17
17
|
| --- | --- | --- | --- | --- |
|
|
@@ -211,7 +211,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
211
211
|
| `missing_parameter_alias` | `missing_parameter_alias` | uncovered | none | 0 |
|
|
212
212
|
| `missing_positive_execution_receipt` | `missing_positive_execution_receipt` | uncovered | none | 0 |
|
|
213
213
|
| `missing_probe` | `missing_probe` | uncovered | none | 0 |
|
|
214
|
-
| `missing_required_argument` | `missing_required_argument` | executable | grammar |
|
|
214
|
+
| `missing_required_argument` | `missing_required_argument` | executable | grammar | 63 |
|
|
215
215
|
| `missing_required_option` | `missing_required_option` | uncovered | none | 0 |
|
|
216
216
|
| `missing_suggested_retry` | `missing_suggested_retry` | uncovered | none | 0 |
|
|
217
217
|
| `missing_suggested_retry_args` | `missing_suggested_retry_args` | uncovered | none | 0 |
|
|
@@ -313,13 +313,13 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
313
313
|
| `unknown_field` | `unknown_field` | uncovered | none | 0 |
|
|
314
314
|
| `unknown_field_projection` | `unknown_field_projection` | executable | closed_domain | 10 |
|
|
315
315
|
| `unknown_item_type` | `unknown_item_type` | uncovered | none | 0 |
|
|
316
|
-
| `unknown_lifecycle_action` | `unknown_subcommand` | executable | grammar, owned_state |
|
|
316
|
+
| `unknown_lifecycle_action` | `unknown_subcommand` | executable | grammar, owned_state | 12 |
|
|
317
317
|
| `unknown_noun` | `unknown_noun` | uncovered | none | 0 |
|
|
318
318
|
| `unknown_option` | `unknown_option` | executable | owned_state | 1 |
|
|
319
319
|
| `unknown_plan_template` | `unknown_plan_template` | uncovered | none | 0 |
|
|
320
320
|
| `unknown_provenance_dimension` | `unknown_provenance_dimension` | uncovered | none | 0 |
|
|
321
321
|
| `unknown_status` | `unknown_status` | uncovered | none | 0 |
|
|
322
|
-
| `unknown_subcommand` | `unknown_subcommand` | executable | grammar, owned_state |
|
|
322
|
+
| `unknown_subcommand` | `unknown_subcommand` | executable | grammar, owned_state | 12 |
|
|
323
323
|
| `unsafe_init_recovery` | `unsafe_init_recovery` | uncovered | none | 0 |
|
|
324
324
|
| `unsupported_update_option` | `unsupported_update_option` | uncovered | none | 0 |
|
|
325
325
|
| `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.
|
|
9
|
+
"version": "2026.9.11"
|
|
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.
|
|
16
|
+
"version": "2026.9.11",
|
|
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.
|
|
3
|
+
"version": "2026.9.11",
|
|
4
4
|
"description": "Git-native project management CLI for humans and agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@11.10.0",
|
|
@@ -205,7 +205,7 @@
|
|
|
205
205
|
"node": ">=22.18.0"
|
|
206
206
|
},
|
|
207
207
|
"dependencies": {
|
|
208
|
-
"@sentry/node": "10.
|
|
208
|
+
"@sentry/node": "10.74.0",
|
|
209
209
|
"@toon-format/toon": "^4.1.1",
|
|
210
210
|
"@types/node": ">=22",
|
|
211
211
|
"commander": "^15.0.0",
|
|
@@ -218,7 +218,7 @@
|
|
|
218
218
|
"devDependencies": {
|
|
219
219
|
"@codspeed/vitest-plugin": "^5.7.1",
|
|
220
220
|
"@eslint/js": "^10.0.1",
|
|
221
|
-
"@modelcontextprotocol/ext-apps": "
|
|
221
|
+
"@modelcontextprotocol/ext-apps": "2.0.0",
|
|
222
222
|
"@sentry/cli": "^3.7.0",
|
|
223
223
|
"@types/node": "^26.5.0",
|
|
224
224
|
"@types/npm-package-arg": "^6.1.4",
|
|
@@ -230,7 +230,7 @@
|
|
|
230
230
|
"fast-check": "^4.9.0",
|
|
231
231
|
"github-slugger": "2.0.0",
|
|
232
232
|
"greptile": "^3.5.2",
|
|
233
|
-
"jscpd": "^5.
|
|
233
|
+
"jscpd": "^5.2.0",
|
|
234
234
|
"marked": "18.0.12",
|
|
235
235
|
"parse5": "8.0.1",
|
|
236
236
|
"tsx": "^4.23.13",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-digital-twin",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.11",
|
|
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.",
|