@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
|
@@ -55,19 +55,19 @@ Each includes nested facts. The historical renderer is measured at commit
|
|
|
55
55
|
Measurements are committed in `tests/fixtures/agent-encoding-baseline.json`.
|
|
56
56
|
|
|
57
57
|
| Surface / rows | Previous TOON | JSON | Nested TOON | Hoisted cells | Ordinal | Selected |
|
|
58
|
-
|
|
59
|
-
| search / 1
|
|
60
|
-
| search / 8
|
|
61
|
-
| search / 32
|
|
62
|
-
| next / 1
|
|
63
|
-
| next / 8
|
|
64
|
-
| next / 32
|
|
65
|
-
| context / 1
|
|
66
|
-
| context / 8
|
|
67
|
-
| context / 32
|
|
68
|
-
| get / 1
|
|
69
|
-
| get / 8
|
|
70
|
-
| get / 32
|
|
58
|
+
|---|---:|---:|---:|---:|---:|---:|
|
|
59
|
+
| search / 1 | 83 | 110 | 70 | 86 | 88 | 73 |
|
|
60
|
+
| search / 8 | 503 | 607 | 406 | 303 | 417 | 303 |
|
|
61
|
+
| search / 32 | 1943 | 2311 | 1558 | 1047 | 1545 | 1047 |
|
|
62
|
+
| next / 1 | 86 | 122 | 76 | 94 | 93 | 79 |
|
|
63
|
+
| next / 8 | 527 | 703 | 454 | 367 | 457 | 367 |
|
|
64
|
+
| next / 32 | 2039 | 2695 | 1750 | 1303 | 1705 | 1303 |
|
|
65
|
+
| context / 1 | 89 | 118 | 76 | 89 | 95 | 79 |
|
|
66
|
+
| context / 8 | 544 | 664 | 447 | 320 | 459 | 321 |
|
|
67
|
+
| context / 32 | 2104 | 2536 | 1719 | 1112 | 1707 | 1113 |
|
|
68
|
+
| get / 1 | 86 | 124 | 76 | 115 | 106 | 80 |
|
|
69
|
+
| get / 8 | 408 | 551 | 279 | 311 | 400 | 264 |
|
|
70
|
+
| get / 32 | 1512 | 2015 | 975 | 983 | 1408 | 840 |
|
|
71
71
|
|
|
72
72
|
These are fixture measurements, not universal compression guarantees. Selected
|
|
73
73
|
output combines the existing scalar presentation with a per-collection choice,
|
|
@@ -83,13 +83,13 @@ one for an extra JSON-cell decoding step or two for positional row interpretatio
|
|
|
83
83
|
The minimum adopted score is four; it is a design criterion alongside the
|
|
84
84
|
independent executable equivalence gate.
|
|
85
85
|
|
|
86
|
-
| Candidate
|
|
87
|
-
|
|
88
|
-
| JSON
|
|
89
|
-
| Nested TOON
|
|
90
|
-
| Hoisted cells
|
|
91
|
-
| Ordinal
|
|
92
|
-
| Selected hybrid |
|
|
86
|
+
| Candidate | Readability score / 5 | Interpretation |
|
|
87
|
+
|---|---:|---|
|
|
88
|
+
| JSON | 5 | Named fields and native nested values |
|
|
89
|
+
| Nested TOON | 5 | Named fields and standard nested decoding |
|
|
90
|
+
| Hoisted cells | 4 | Named columns and declared JSON cells |
|
|
91
|
+
| Ordinal | 3 | Column lookup plus positional nested rows |
|
|
92
|
+
| Selected hybrid | 4–5 | Expanded small rows or declared tables |
|
|
93
93
|
|
|
94
94
|
Ordinal arrays require an additional positional interpretation and save nothing
|
|
95
95
|
on these nested fixtures, so they are not adopted. The complete brief-list
|
package/docs/ASSURANCE.md
CHANGED
|
@@ -33,17 +33,17 @@ The assurance SDK keeps those semantics independent from presentation. Commander
|
|
|
33
33
|
|
|
34
34
|
Measurements support these built-in sources:
|
|
35
35
|
|
|
36
|
-
| Source
|
|
37
|
-
|
|
38
|
-
| `items`
|
|
36
|
+
| Source | Purpose |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `items` | Count authoritative full item records matching status, type, tags, an exact metadata field, or a field `state` of `present`/`missing`. |
|
|
39
39
|
| `dependency_kind` | Count typed relationship edges such as `blocked_by` or `verifies`; accepted aliases and canonical spellings measure the same population. |
|
|
40
|
-
| `graph`
|
|
41
|
-
| `validate`
|
|
42
|
-
| `health`
|
|
43
|
-
| `history`
|
|
44
|
-
| `links`
|
|
45
|
-
| `derived`
|
|
46
|
-
| `provider`
|
|
40
|
+
| `graph` | Select a numeric or labelled-set field from a public graph SDK result. |
|
|
41
|
+
| `validate` | Select a validator check status or numeric detail. |
|
|
42
|
+
| `health` | Select a health check status, numeric detail, or labelled set. |
|
|
43
|
+
| `history` | Count immutable events by operation, author, harness, or model. |
|
|
44
|
+
| `links` | Count items with present or missing file, test, or documentation evidence. |
|
|
45
|
+
| `derived` | Combine numeric measurements with deterministic arithmetic and cycle detection. |
|
|
46
|
+
| `provider` | Delegate a measurement to an explicitly supplied host/package resolver. |
|
|
47
47
|
|
|
48
48
|
`ASSURANCE_MEASUREMENT_SOURCE_KINDS` and `ASSURANCE_GATE_TRIGGERS` are the
|
|
49
49
|
public SDK constants for these closed vocabularies. Runtime validation rejects
|
|
@@ -153,7 +153,7 @@ projection, including feedback writes). The explicit scan includes the cold
|
|
|
153
153
|
derived-index rebuild; these are host observations rather than latency gates.
|
|
154
154
|
|
|
155
155
|
| Corpus items | Standard p95 | Brief p95 | Fields p95 | Explicit full scan | Verified scan rows |
|
|
156
|
-
|
|
156
|
+
|---:|---:|---:|---:|---:|---:|
|
|
157
157
|
| 100 | 4.53 ms | 4.24 ms | 3.54 ms | 48 ms | 100 |
|
|
158
158
|
| 10,000 | 3.61 ms | 3.03 ms | 4.08 ms | 4.91 s | 10,000 |
|
|
159
159
|
| 100,000 | 3.69 ms | 11.00 ms | 3.11 ms | 48.59 s | 100,000 |
|
|
@@ -162,7 +162,7 @@ Measured on 2026-09-05 with Node 26.7.0; these are observations, not portable
|
|
|
162
162
|
latency guarantees. Duplicate timings exclude filesystem ingestion.
|
|
163
163
|
|
|
164
164
|
| Items | Possible pairs | Scored pairs | Analysis time | Mean bytes written per serve | Compactions / serves | Final ledger bytes |
|
|
165
|
-
|
|
165
|
+
|---:|---:|---:|---:|---:|---:|---:|
|
|
166
166
|
| 10,000 | 49,995,000 | 5,000 | 92 ms | 18,138 | 2 / 40 | 237,785 |
|
|
167
167
|
| 100,000 | 4,999,950,000 | 50,000 | 864 ms | 18,149 | 2 / 40 | 237,821 |
|
|
168
168
|
| 1,000,000 | 499,999,500,000 | 500,000 | 10,367 ms | 18,135 | 2 / 40 | 237,857 |
|
|
@@ -175,7 +175,7 @@ receipts; these are four concurrent tasks sharing a cross-process lock, not a
|
|
|
175
175
|
measurement of four separate OS processes.
|
|
176
176
|
|
|
177
177
|
| Candidate rows per serve | Serves/s/workspace | Minimum wait | p50 wait | p95 wait | Maximum wait |
|
|
178
|
-
|
|
178
|
+
|---:|---:|---:|---:|---:|---:|
|
|
179
179
|
| 10,000 | 46.73 | 3.11 ms | 25.15 ms | 84.97 ms | 105.66 ms |
|
|
180
180
|
| 100,000 | 20.82 | 18.29 ms | 50.10 ms | 193.86 ms | 229.60 ms |
|
|
181
181
|
| 1,000,000 | 1.92 | 198.10 ms | 809.52 ms | 1,367.67 ms | 1,622.77 ms |
|
|
@@ -197,7 +197,7 @@ After installing the plugin:
|
|
|
197
197
|
## Compatibility
|
|
198
198
|
|
|
199
199
|
| pm-cli version | Plugin version | Claude Code version |
|
|
200
|
-
|
|
200
|
+
|---|---|---|
|
|
201
201
|
| Exact same date-based version as the plugin | Exact same date-based version as pm-cli | Current supported Claude Code |
|
|
202
202
|
|
|
203
203
|
The authoritative plugin version is `plugins/pm-claude/.claude-plugin/plugin.json`; `pnpm version:check` also verifies the pinned runtime dependency.
|
package/docs/CLI_GRAMMAR.md
CHANGED
|
@@ -133,7 +133,7 @@ and cross-workspace evidence exist, published aliases remain executable.
|
|
|
133
133
|
Tracked by [pm-m6g87m](../.agents/pm/tasks/pm-m6g87m.toon), [pm-fmy9ih](../.agents/pm/tasks/pm-fmy9ih.toon), and [pm-wfskfn](../.agents/pm/tasks/pm-wfskfn.toon).
|
|
134
134
|
|
|
135
135
|
| Canonical command | Compatibility alias | Responsibility |
|
|
136
|
-
|
|
136
|
+
|---|---|---|
|
|
137
137
|
| `item copy` | `copy` | Copy one item to a new ID |
|
|
138
138
|
| `workspace merge` | `merge` | Install, inspect, or run Git tracker merge drivers |
|
|
139
139
|
| `item duplicates` | `duplicates` | Discover bounded duplicate clusters in core |
|
|
@@ -216,7 +216,7 @@ Tracked by [pm-npr3](../.agents/pm/tasks/pm-npr3.toon) and
|
|
|
216
216
|
[pm-uk9dwh](../.agents/pm/tasks/pm-uk9dwh.toon).
|
|
217
217
|
|
|
218
218
|
| Canonical command | Compatibility spelling | Responsibility |
|
|
219
|
-
|
|
219
|
+
|---|---|---|
|
|
220
220
|
| `workspace init` | `init` | Bootstrap storage, settings, and optional guidance |
|
|
221
221
|
| `workspace config` | `config` | Read or change individual project/global settings |
|
|
222
222
|
| `workspace schema` | `schema` | Define types, statuses, fields, and validation contracts |
|
package/docs/COMMANDS.md
CHANGED
|
@@ -51,21 +51,21 @@ JSON ceiling; TOON uses the smaller default agent ceiling.
|
|
|
51
51
|
|
|
52
52
|
## Command Families
|
|
53
53
|
|
|
54
|
-
| Family
|
|
55
|
-
|
|
56
|
-
| Bootstrap
|
|
57
|
-
| Lifecycle
|
|
58
|
-
| Bulk
|
|
59
|
-
| Scheduling
|
|
60
|
-
| Planning
|
|
61
|
-
| Links
|
|
62
|
-
| Verification | `test`, `test-all`, `test-runs`†, `validate`, `gc`
|
|
63
|
-
| History
|
|
64
|
-
| Schema
|
|
65
|
-
| Profiles
|
|
66
|
-
| Calendar
|
|
67
|
-
| Packages
|
|
68
|
-
| Machines
|
|
54
|
+
| Family | Commands | Purpose |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| Bootstrap | `init`, `config`, `health`, `telemetry` | create and inspect tracker setup |
|
|
57
|
+
| Lifecycle | `create`, `copy`, `focus`, `claim`, `update`, `item reopen`, `append`, `close`, `release`, `close delete` | mutate item state, including terminal-work recurrence without duplicate creation |
|
|
58
|
+
| Bulk | `item mutate`, `item complete`, `update many`, `close many` | atomically commit heterogeneous SDK mutation batches or evidence-backed completion, or apply one change across a matched, dry-run-previewed set with a rollback checkpoint |
|
|
59
|
+
| Scheduling | `meet`, `event`, `remind` | low-friction Meeting/Event/Reminder creation |
|
|
60
|
+
| Planning | `plan create`, `plan add-step`, `plan update-step`, `plan complete-step`, `plan link`, `plan approve`, `plan materialize` | agent-optimized living plans with ordered steps, evidence, decisions, validation, and materialization |
|
|
61
|
+
| Links | `files`, `docs`, `test`, `deps` | connect items to artifacts, tests, and relationships |
|
|
62
|
+
| Verification | `test`, `test-all`, `test-runs`†, `validate`, `gc` | run linked tests and repository checks |
|
|
63
|
+
| History | `history`, `history-compact`, `history-redact`, `history-repair`, `activity`, `restore`, `stats` | inspect, compact, redact, re-anchor, and recover item state |
|
|
64
|
+
| Schema | `schema add/remove-*` / `rename-type` / `rename-field` / `remap-status` / `apply-preset` | manage config-driven types, statuses, and fields; losslessly migrate existing items when definitions evolve; adopt presets or infer types |
|
|
65
|
+
| Profiles | `profile list` / `show` / `apply` / `lint` | compose item types, statuses, fields, workflows, config, templates, and recommended packages into archetype bundles (agile/ops/research); `apply` stages every dimension idempotently; `lint` reports author-time consistency findings without writing |
|
|
66
|
+
| Calendar | `calendar`, `cal` | project deadlines, reminders, and events |
|
|
67
|
+
| Packages | `install`, `upgrade`, `package`, `packages`, `extension`, package/extension command groups | install, upgrade, manage, and run package-backed extension commands |
|
|
68
|
+
| Machines | `contracts`, `help`, optional `guide`/`completion` | command contracts plus optional guide-shell docs routing and shell helpers |
|
|
69
69
|
|
|
70
70
|
`†` `test-runs` subcommands are provided by the optional `linked-test-adapters` package (`pm package install linked-test-adapters --project`).
|
|
71
71
|
|
|
@@ -968,8 +968,12 @@ Starting work respects declared blockers
|
|
|
968
968
|
in_progress`, `pm claim <id> --start`, `pm claim --next --start` and the
|
|
969
969
|
`start-task` action refuse with `start_blocked_by_open_dependency` (exit 4)
|
|
970
970
|
when the item moves into the start status while a `blocked_by` target is still
|
|
971
|
-
open.
|
|
972
|
-
|
|
971
|
+
open. `pm claim --next --start` skips a ranked candidate refused this way (its
|
|
972
|
+
blocker opened after ranking, and nothing is written to it), claims the next
|
|
973
|
+
eligible candidate, and lists the skipped ids in `start_refused`. When the walk
|
|
974
|
+
is exhausted, the `no_available_next_item` refusal (or the `--if-available`
|
|
975
|
+
empty result) carries them too. An item already in that status is not
|
|
976
|
+
rechecked, so `claim --start` on it succeeds. The check runs before any write: the
|
|
973
977
|
explicit `claim <id> --start` judges it under the claim's item lock, and its
|
|
974
978
|
status update judges again under its own lock. When the first check refuses,
|
|
975
979
|
nothing is written. When a blocker opens between the two writes, the start
|
|
@@ -1031,7 +1035,24 @@ carrying `error_code`, `expected_revision`, `current_revision` and
|
|
|
1031
1035
|
`details.changes_since`. When `close` auto-unblocks a guarded dependent whose revision
|
|
1032
1036
|
moved, the close stays committed and the command refuses with that dependent's
|
|
1033
1037
|
`item_revision_conflict` once the fan-out finishes. `side_effects` names every
|
|
1034
|
-
write that committed first: the close and each dependent already unblocked.
|
|
1038
|
+
write that committed first: the close and each dependent already unblocked. Do
|
|
1039
|
+
not retry the close; it is already terminal. `required` and `nextSteps` name
|
|
1040
|
+
only the remaining step for each refused guarded dependent
|
|
1041
|
+
(`details.pending_unblock`): re-read it, confirm every blocker it declares is
|
|
1042
|
+
resolved, then run the scoped unblock `nextSteps` lists (`pm update <dependent>
|
|
1043
|
+
--status <open-status> --unset blocked_by --unset blocked_reason --expect-hash
|
|
1044
|
+
<dependent>=<item_hash>`, carrying the configured open status and tracker
|
|
1045
|
+
scope). `--unset blocked_by` removes every `blocked_by` edge, including one a
|
|
1046
|
+
concurrent change added, so skipping the check can reopen a still-blocked item.
|
|
1047
|
+
Dependents whose unblock failed for another reason are in
|
|
1048
|
+
`details.auto_unblock_failed` with that reason; fix the cause first. Each list
|
|
1049
|
+
names at most 10 ids and counts the rest in `*_omitted`, keeping the details
|
|
1050
|
+
within the error-details size limit. When ids were omitted, or the steps exceed
|
|
1051
|
+
the 20-step cap (ten conflicts plus one other failure make 21), the last step
|
|
1052
|
+
lists every item in a blocked-role status (`pm list --status <blocked-statuses>
|
|
1053
|
+
--fields id,title,blocked_by,dependencies`, over the statuses the fan-out drew
|
|
1054
|
+
from), so a dependent whose step was cut is still found; it returns 200 rows per
|
|
1055
|
+
page, so follow `--after <next_cursor>` while `has_more: true`. `close-many` reports such a row as `closed` (`update-many` closing
|
|
1035
1056
|
through `--status`, as `updated`), with the dependent's conflict under
|
|
1036
1057
|
`dependent_revision_conflict`. A guarded `restore` refuses to recover
|
|
1037
1058
|
over a live file that cannot be read as a document; an unguarded restore still
|
|
@@ -1578,23 +1599,23 @@ pm plan show <plan-id> --fields id,title,steps_summary
|
|
|
1578
1599
|
|
|
1579
1600
|
Subcommand cheatsheet:
|
|
1580
1601
|
|
|
1581
|
-
| Subcommand
|
|
1582
|
-
|
|
1583
|
-
| `create`
|
|
1584
|
-
| `show`
|
|
1585
|
-
| `add-step`
|
|
1586
|
-
| `update-step`
|
|
1587
|
-
| `complete-step`
|
|
1588
|
-
| `block-step`
|
|
1589
|
-
| `reorder-step`
|
|
1590
|
-
| `remove-step`
|
|
1591
|
-
| `link` / `unlink` | Add or remove `linked_items` on a step (with optional `--promote-to-item-dep`)
|
|
1592
|
-
| `decision`
|
|
1593
|
-
| `discovery`
|
|
1594
|
-
| `validation`
|
|
1595
|
-
| `resume`
|
|
1596
|
-
| `approve`
|
|
1597
|
-
| `materialize`
|
|
1602
|
+
| Subcommand | Purpose |
|
|
1603
|
+
|---|---|
|
|
1604
|
+
| `create` | Create a Plan item with scope, harness, parent, related, blocked-by, and optional auto-claim |
|
|
1605
|
+
| `show` | Progressive-disclosure read (brief / standard / deep) with current step + next-action hints |
|
|
1606
|
+
| `add-step` | Append a step with title/body/owner/status/dependencies/files/tests/docs |
|
|
1607
|
+
| `update-step` | Patch one step (title, body, status, evidence, owner, blocked reason) |
|
|
1608
|
+
| `complete-step` | Shortcut for setting a step to `completed` with evidence |
|
|
1609
|
+
| `block-step` | Shortcut for setting a step to `blocked` with required `--step-blocked-reason` |
|
|
1610
|
+
| `reorder-step` | Move a step to a new 1-based order |
|
|
1611
|
+
| `remove-step` | Drop a step and renumber remaining steps |
|
|
1612
|
+
| `link` / `unlink` | Add or remove `linked_items` on a step (with optional `--promote-to-item-dep`) |
|
|
1613
|
+
| `decision` | Append a decision log entry (decision/rationale/evidence) |
|
|
1614
|
+
| `discovery` | Append a discovery log entry |
|
|
1615
|
+
| `validation` | Append a validation check (text/command/expected) |
|
|
1616
|
+
| `resume` | Replace the resume-context summary for stateless agents |
|
|
1617
|
+
| `approve` | Move `plan_mode` to `approved` (default) or any other mode via `--mode` |
|
|
1618
|
+
| `materialize` | Create real pm items (default `Task`) from selected steps with bidirectional links |
|
|
1598
1619
|
|
|
1599
1620
|
Invariants:
|
|
1600
1621
|
|
|
@@ -9,7 +9,7 @@ spellings remain executable compatibility aliases with the same arguments,
|
|
|
9
9
|
results, exit codes, and SDK behavior.
|
|
10
10
|
|
|
11
11
|
| Native invocation | Compatibility spelling | Purpose |
|
|
12
|
-
|
|
12
|
+
|---|---|---|
|
|
13
13
|
| `pm context next` | `pm next` | Select ready work and explain blockers |
|
|
14
14
|
| `pm context focus` | `pm focus` | Read, set, or clear the focused item |
|
|
15
15
|
| `pm ops stats` | `pm stats` | Inspect tracker statistics |
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -37,7 +37,7 @@ it to the right typed flag based on the key (so `--policy`/`--format`/`--criteri
|
|
|
37
37
|
remain optional for single values):
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
pm config set telemetry-tracking off # off|on|true|false
|
|
40
|
+
pm config set telemetry-tracking off # off|on|true|false; global profile
|
|
41
41
|
pm config set item-format toon # same as --format toon
|
|
42
42
|
pm config set governance-preset strict # same as --policy strict
|
|
43
43
|
pm config set definition-of-done "Tests pass" # same as --criterion "Tests pass"
|
|
@@ -80,35 +80,35 @@ If the existing `settings.json` is valid JSON but fails schema validation (for e
|
|
|
80
80
|
|
|
81
81
|
## Common Settings
|
|
82
82
|
|
|
83
|
-
| Setting
|
|
84
|
-
|
|
85
|
-
| `id_prefix`
|
|
86
|
-
| `ids.token_length`
|
|
87
|
-
| `author_default`
|
|
88
|
-
| `mutation_guard.require_attributed_author` | reject mutations whose effective author remains `unknown` (default `false`)
|
|
89
|
-
| `mutation_guard.secret_guard`
|
|
90
|
-
| `mutation_guard.stale_in_progress_hours`
|
|
91
|
-
| `item_format`
|
|
92
|
-
| `output.default_format`
|
|
93
|
-
| `locks.ttl_seconds`
|
|
94
|
-
| `locks.wait_ms`
|
|
95
|
-
| `history.missing_stream`
|
|
96
|
-
| `history.compact_policy.enabled`
|
|
97
|
-
| `history.compact_policy.max_entries`
|
|
98
|
-
| `history.compact_policy.trigger`
|
|
99
|
-
| `testing.record_results_to_items`
|
|
100
|
-
| `testing.allow_untrusted_linked_tests`
|
|
101
|
-
| `validation.sprint_release_format`
|
|
102
|
-
| `validation.parent_reference`
|
|
103
|
-
| `item_types.definitions[]`
|
|
104
|
-
| `governance.create_default_type`
|
|
105
|
-
| `governance.workflow_enforcement`
|
|
106
|
-
| `governance.start_blocker_enforcement`
|
|
107
|
-
| `governance.duplicate_detection_mode`
|
|
108
|
-
| `governance.duplicate_detection_threshold` | inclusive likely-duplicate score from `0` through `1` (default `0.8`)
|
|
109
|
-
| `governance.duplicate_detection_limit`
|
|
110
|
-
| `schema.type_workflows[]`
|
|
111
|
-
| `search.*`
|
|
83
|
+
| Setting | Purpose |
|
|
84
|
+
|---|---|
|
|
85
|
+
| `id_prefix` | generated item ID prefix, default `pm-` |
|
|
86
|
+
| `ids.token_length` | random base36 token length for newly minted item ids (4-12, default `4`); raise it to shrink cross-branch id collision odds in concurrent multi-agent workflows (see [Merge Safety](MERGE_SAFETY.md)) |
|
|
87
|
+
| `author_default` | configured mutation author before automatic harness detection |
|
|
88
|
+
| `mutation_guard.require_attributed_author` | reject mutations whose effective author remains `unknown` (default `false`) |
|
|
89
|
+
| `mutation_guard.secret_guard` | credential-shaped content policy: `off`, `advise`, or `block` (default `advise`) |
|
|
90
|
+
| `mutation_guard.stale_in_progress_hours` | age threshold for unclaimed in-progress work surfaced by `pm health` (integer >= 1, default `72`) |
|
|
91
|
+
| `item_format` | item storage format (`toon` writes; legacy markdown is read/migrate only) |
|
|
92
|
+
| `output.default_format` | default renderer, usually `toon` |
|
|
93
|
+
| `locks.ttl_seconds` | stale lock threshold |
|
|
94
|
+
| `locks.wait_ms` | wait budget before a contended lock returns `lock_conflict`; item-store mutations, restore and the hierarchy lock restart it on each owner handoff (120 s cap), other locks use it as a fixed total (default `3000`; `0` fails fast) |
|
|
95
|
+
| `history.missing_stream` | `auto_create` or `strict_error` |
|
|
96
|
+
| `history.compact_policy.enabled` | enable the compaction advisory: `pm health` warns on over-threshold streams (default `false`); when disabled, `max_entries`/`trigger` are inert |
|
|
97
|
+
| `history.compact_policy.max_entries` | when the policy is enabled, the entry count above which a stream is flagged by `pm health` and the default `pm history-compact --all-over` threshold (default `500`) |
|
|
98
|
+
| `history.compact_policy.trigger` | policy intent when enabled: `health_warn` (advisory only) or `auto` (scheduled sweeps expected) |
|
|
99
|
+
| `testing.record_results_to_items` | persist bounded linked-test summaries |
|
|
100
|
+
| `testing.allow_untrusted_linked_tests` | permit the explicit `pm test --allow-untrusted-linked-tests` one-run override (default `false`; does not trust or execute commands by itself) |
|
|
101
|
+
| `validation.sprint_release_format` | `warn` or `strict_error` |
|
|
102
|
+
| `validation.parent_reference` | `warn` or `strict_error` (`strict_error` is the built-in default; `pm create --allow-missing-parent` is the explicit escape hatch) |
|
|
103
|
+
| `item_types.definitions[]` | custom item types and type options |
|
|
104
|
+
| `governance.create_default_type` | default `--type` used by `pm create "title"` when `--type` is omitted (defaults to `Task`); must resolve to a known item type |
|
|
105
|
+
| `governance.workflow_enforcement` | per-type transition enforcement mode for `pm update --status` (`off` default, `warn`, or `strict`) |
|
|
106
|
+
| `governance.start_blocker_enforcement` | starting an item (`update --status in_progress`, `claim --start`, `claim --next --start`, `start-task`) while a declared `blocked_by` target is open: `strict` (default; refuse unless `--force`), `warn`, or `off`; `claim --next --start` skips a refused candidate and claims the next eligible one |
|
|
107
|
+
| `governance.duplicate_detection_mode` | create/copy similarity policy: `off`, `advisory`, or `strict`; the minimal preset uses `off`, while the default and strict presets use `strict` |
|
|
108
|
+
| `governance.duplicate_detection_threshold` | inclusive likely-duplicate score from `0` through `1` (default `0.8`) |
|
|
109
|
+
| `governance.duplicate_detection_limit` | maximum matches attached to a create/copy advisory from `0` through `20` (default `3`) |
|
|
110
|
+
| `schema.type_workflows[]` | per-type allowed status transitions (see Per-Type Workflows below) |
|
|
111
|
+
| `search.*` | search mode, scoring, providers, embedding timeout, and vector settings |
|
|
112
112
|
|
|
113
113
|
Lock recovery is tracked by
|
|
114
114
|
[pm-02z97f](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-02z97f.toon)
|
|
@@ -219,15 +219,15 @@ underscore aliases remain accepted for compatibility.
|
|
|
219
219
|
|
|
220
220
|
## Environment Variables
|
|
221
221
|
|
|
222
|
-
| Variable
|
|
223
|
-
|
|
224
|
-
| `PM_AUTHOR`
|
|
225
|
-
| `PM_PATH`
|
|
226
|
-
| `PM_GLOBAL_PATH`
|
|
227
|
-
| `PM_LOCK_WAIT_MS`
|
|
228
|
-
| `PM_OLLAMA_MODEL`
|
|
229
|
-
| `PM_DISABLE_OLLAMA_AUTO_DEFAULTS` | disable implicit Ollama search defaults
|
|
230
|
-
| `PM_CONTEXT_USAGE_DISABLED`
|
|
222
|
+
| Variable | Use |
|
|
223
|
+
|---|---|
|
|
224
|
+
| `PM_AUTHOR` | optional explicit session-wide mutation author override |
|
|
225
|
+
| `PM_PATH` | override project tracker root for tests or sandboxes |
|
|
226
|
+
| `PM_GLOBAL_PATH` | override global profile root for tests or sandboxes |
|
|
227
|
+
| `PM_LOCK_WAIT_MS` | per-process override for the `locks.wait_ms` budget (a no-progress window only where that lock uses the progress policy); non-negative integer milliseconds, with `0` restoring fail-fast lock conflicts |
|
|
228
|
+
| `PM_OLLAMA_MODEL` | choose default Ollama embedding model |
|
|
229
|
+
| `PM_DISABLE_OLLAMA_AUTO_DEFAULTS` | disable implicit Ollama search defaults |
|
|
230
|
+
| `PM_CONTEXT_USAGE_DISABLED` | set to `1` to disable the derived context/next usage-feedback ledger with zero filesystem reads or writes |
|
|
231
231
|
|
|
232
232
|
For command-level tracker targeting, prefer `--pm-path <tracker-root>`. The old
|
|
233
233
|
`--path` flag is still accepted, but it means the pm tracker storage directory
|
|
@@ -264,23 +264,31 @@ Tests should set both `PM_PATH` and `PM_GLOBAL_PATH` to temporary directories. T
|
|
|
264
264
|
|
|
265
265
|
### Telemetry environment variables
|
|
266
266
|
|
|
267
|
-
Telemetry is enabled by default. Use `pm config set telemetry-tracking off` to opt out persistently (see [Common Settings](#common-settings)).
|
|
267
|
+
Telemetry is enabled by default. Use `pm config set telemetry-tracking off` to opt out persistently (see [Common Settings](#common-settings)). Consent and the event endpoint live only in the global profile:
|
|
268
268
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
269
|
+
- A scope-less `telemetry-tracking` call targets the global profile.
|
|
270
|
+
- Project-scope `get` and `set` refuse. Project `list` and `export` omit the key.
|
|
271
|
+
- `pm init` asks only while no choice is recorded in the global profile. It keeps a choice another process records while its prompt is open. It reports the global value and writes no project `telemetry` block.
|
|
272
|
+
- An older project `telemetry` block is ignored.
|
|
273
|
+
|
|
274
|
+
When enabled, these environment variables tune runtime behaviour. All boolean knobs accept `1`, `true`, `yes`, or `on` (case-insensitive); any other value leaves the knob off.
|
|
275
|
+
|
|
276
|
+
| Variable | Values | Use |
|
|
277
|
+
|---|---|---|
|
|
278
|
+
| `PM_TELEMETRY_DISABLED` | boolean | Hard-disable all telemetry for this process, ignoring settings. |
|
|
272
279
|
| `DO_NOT_TRACK` | boolean | Hard-disable event capture, identity creation, flush workers, endpoint probes, and Sentry, regardless of persisted preferences. |
|
|
273
280
|
| `PM_TELEMETRY_SEND_TEST_EVENTS` | boolean | Explicitly allow inferred test events. Hard opt-outs still take precedence. |
|
|
274
281
|
| `PM_TELEMETRY_READ_SAMPLE_RATE` | number greater than `0` and at most `1` | Override automatic successful-read sampling; `1`, empty, or invalid values retain every invocation. Omit for automatic frequency bounding. |
|
|
275
|
-
| `PM_NO_TELEMETRY`
|
|
276
|
-
| `PM_TELEMETRY_OTEL_DISABLED`
|
|
277
|
-
| `PM_TELEMETRY_INLINE_FLUSH`
|
|
278
|
-
| `PM_TELEMETRY_SOURCE_CONTEXT`
|
|
279
|
-
| `PM_TELEMETRY_HTTP_TIMEOUT_MS`
|
|
280
|
-
| `PM_TELEMETRY_INGEST_KEY`
|
|
281
|
-
| `
|
|
282
|
-
| `
|
|
283
|
-
| `
|
|
282
|
+
| `PM_NO_TELEMETRY` | boolean | Alias for `PM_TELEMETRY_DISABLED` (honoured by the same checks). |
|
|
283
|
+
| `PM_TELEMETRY_OTEL_DISABLED` | boolean | Disable only OTLP trace-span export; the event queue still flushes. |
|
|
284
|
+
| `PM_TELEMETRY_INLINE_FLUSH` | boolean | Flush the queue and OTLP spans inline instead of dispatching the detached worker. Mainly for tests; normal use relies on the background worker. |
|
|
285
|
+
| `PM_TELEMETRY_SOURCE_CONTEXT` | `user` \| `automation` \| `test` \| `dogfood` | Override the inferred source context recorded on each event. Unrecognized nonempty values use inferred context with `source_context_source=env_override_rejected`; the raw value is never emitted. |
|
|
286
|
+
| `PM_TELEMETRY_HTTP_TIMEOUT_MS` | integer milliseconds | Bound each background event or OTLP request (default `20000`, clamped to `1000`–`25000` to stay below the worker lock TTL). |
|
|
287
|
+
| `PM_TELEMETRY_INGEST_KEY` | string | Sent as the `x-pm-telemetry-key` header on queue flushes; never logged. |
|
|
288
|
+
| `PM_TELEMETRY_ENDPOINT` | http(s) URL | Deliver events to this collector instead of the configured endpoint. Events captured under it go to a queue and state file of their own that only a process with the same value reads or reports; a later flush removes them after a day idle. `pm telemetry clear` removes them too, but it also revokes consent and deletes every telemetry queue and state file of the profile. An empty value uses the configured endpoint; any other value that is not an http(s) URL disables delivery. URL credentials are sent as Basic auth, by `pm health --check-telemetry` too. |
|
|
289
|
+
| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | URL | OTLP/HTTP traces endpoint for command spans. Takes precedence over the base endpoint. |
|
|
290
|
+
| `OTEL_EXPORTER_OTLP_ENDPOINT` | URL | Base OTLP endpoint; the traces endpoint is derived by appending `/v1/traces`. |
|
|
291
|
+
| `OTEL_SERVICE_NAME` | string | `service.name` attribute on exported spans (defaults to `pm-cli`). |
|
|
284
292
|
|
|
285
293
|
Unrecognized source-context overrides produce one bounded warning per process on
|
|
286
294
|
stderr, naming the accepted values without echoing the rejected input. JSON
|
|
@@ -326,9 +334,12 @@ Interaction rules:
|
|
|
326
334
|
|
|
327
335
|
Test environments inferred from `VITEST`, `VITEST_WORKER_ID`, `NODE_TEST_CONTEXT`
|
|
328
336
|
(native `node --test` children), or `NODE_ENV=test` suppress telemetry and Sentry
|
|
329
|
-
before identity creation. A valid explicit `PM_TELEMETRY_SOURCE_CONTEXT
|
|
330
|
-
`PM_TELEMETRY_SEND_TEST_EVENTS=1` permits intentional test
|
|
331
|
-
|
|
337
|
+
before identity creation. A valid explicit `PM_TELEMETRY_SOURCE_CONTEXT`,
|
|
338
|
+
including `test`, or `PM_TELEMETRY_SEND_TEST_EVENTS=1` permits intentional test
|
|
339
|
+
delivery, so a test that only wants the label must also set
|
|
340
|
+
`PM_TELEMETRY_DISABLED=1`. Point such tests at a local collector: set
|
|
341
|
+
`PM_TELEMETRY_ENDPOINT` for events, `SENTRY_DSN` for errors, and
|
|
342
|
+
`OTEL_EXPORTER_OTLP_*` for spans. Inferred tests use inline telemetry flushing even
|
|
332
343
|
after an opt in, so CLI delivery settles before process exit and disposable-root
|
|
333
344
|
cleanup. SDK telemetry completion also awaits inline delivery before returning.
|
|
334
345
|
Neither setting overrides a hard opt-out. `pm telemetry status` exposes effective `enabled`, persisted
|
|
@@ -361,12 +372,12 @@ Tracing and privacy delivery: [pm-58yzil](../.agents/pm/features/pm-58yzil.toon)
|
|
|
361
372
|
|
|
362
373
|
Crash and error diagnostics are reported to Sentry only when telemetry is enabled and the process is not opted out. These environment variables tune the Sentry client.
|
|
363
374
|
|
|
364
|
-
| Variable
|
|
365
|
-
|
|
366
|
-
| `PM_SENTRY_DISABLED`
|
|
367
|
-
| `SENTRY_DSN`
|
|
368
|
-
| `SENTRY_ENVIRONMENT`
|
|
369
|
-
| `PM_SENTRY_TRACE_COMMANDS`
|
|
375
|
+
| Variable | Values | Use |
|
|
376
|
+
|---|---|---|
|
|
377
|
+
| `PM_SENTRY_DISABLED` | boolean | Disable Sentry error reporting for this process (the Sentry SDK is not even imported). `PM_TELEMETRY_DISABLED` / `PM_NO_TELEMETRY` also disable it. |
|
|
378
|
+
| `SENTRY_DSN` | URL | Override the destination DSN. Defaults to the bundled pm-cli project DSN. |
|
|
379
|
+
| `SENTRY_ENVIRONMENT` | string | Override the reported environment tag. Defaults to `test` under Vitest, `ci` when `CI` is set, otherwise `production`. |
|
|
380
|
+
| `PM_SENTRY_TRACE_COMMANDS` | boolean | Explicitly initialize Sentry for successful commands. Defaults to off, preserving lazy startup. All consent opt-outs and test isolation still apply; a zero trace sample rate avoids initialization. |
|
|
370
381
|
| `SENTRY_TRACES_SAMPLE_RATE` | number `0`–`1` | Fraction of command spans sampled for performance tracing. Defaults to `0.2` (20%). Set to `1` for full-trace performance debugging or `0` to disable tracing. Non-numeric or out-of-range values fall back to the default. |
|
|
371
382
|
|
|
372
383
|
> Sentry is hard-disabled under Vitest (`VITEST` / `VITEST_WORKER_ID`), so these knobs are no-ops inside the test suite.
|
|
@@ -629,21 +640,21 @@ When query expansion or rerank providers fail, `pm search` degrades gracefully a
|
|
|
629
640
|
|
|
630
641
|
`search.default_mode` decides the mode a bare `pm search` runs in (`--mode` always wins):
|
|
631
642
|
|
|
632
|
-
| Value
|
|
633
|
-
|
|
634
|
-
| `auto`
|
|
635
|
-
| `keyword`
|
|
636
|
-
| `semantic`, `hybrid` | pin the semantic path; an unreachable provider still degrades to keyword hits with a `search_semantic_fallback` warning
|
|
643
|
+
| Value | Behavior |
|
|
644
|
+
|---|---|
|
|
645
|
+
| `auto` | default; `hybrid` when `search.provider` names the active embedding provider and a vector store or extension adapter resolves (or an extension search provider is active), `keyword` otherwise |
|
|
646
|
+
| `keyword` | pin exact-token ranking for every bare search |
|
|
647
|
+
| `semantic`, `hybrid` | pin the semantic path; an unreachable provider still degrades to keyword hits with a `search_semantic_fallback` warning |
|
|
637
648
|
|
|
638
649
|
Every search result reports `mode_source` (`explicit`, `settings`, or `auto`) beside the effective `mode`.
|
|
639
650
|
|
|
640
651
|
Mutation commands invalidate keyword search caches immediately. Semantic vector refresh is controlled by `search.mutation_refresh_policy`:
|
|
641
652
|
|
|
642
|
-
| Policy
|
|
643
|
-
|
|
644
|
-
| `semantic_configured` | default; refresh vectors during mutations only when semantic provider/store settings are explicitly configured
|
|
645
|
-
| `cache_only`
|
|
646
|
-
| `semantic_auto`
|
|
653
|
+
| Policy | Behavior |
|
|
654
|
+
|---|---|
|
|
655
|
+
| `semantic_configured` | default; refresh vectors during mutations only when semantic provider/store settings are explicitly configured |
|
|
656
|
+
| `cache_only` | fastest writes; invalidate keyword caches and leave vector refresh to `pm reindex` or `pm health --refresh-vectors` |
|
|
657
|
+
| `semantic_auto` | also apply implicit local Ollama/LanceDB defaults during mutations |
|
|
647
658
|
|
|
648
659
|
Useful commands:
|
|
649
660
|
|
|
@@ -28,7 +28,7 @@ Where two descriptions express one experiment, both slugs resolve to its owner.
|
|
|
28
28
|
Existing acceptance owners retain their original delivery boundary.
|
|
29
29
|
|
|
30
30
|
| Stable slug | Historical ordinal | Source note (UTC) | Canonical owner | Disposition |
|
|
31
|
-
|
|
31
|
+
|---|---|---|---|---|
|
|
32
32
|
| `act-r-activation` | 1 | 2026-07-07T15:12:12.161Z | [pm-fr9ok0](../.agents/pm/tasks/pm-fr9ok0.toon) | Proposed experiment |
|
|
33
33
|
| `typed-spreading-activation` | 2 | 2026-07-07T15:12:12.161Z | [pm-fdb8e8](../.agents/pm/tasks/pm-fdb8e8.toon) | Proposed experiment |
|
|
34
34
|
| `learned-linear-signal-weights` | 3 | 2026-07-07T15:12:12.161Z | [pm-ex5p2u](../.agents/pm/tasks/pm-ex5p2u.toon) | Proposed experiment |
|
|
@@ -112,7 +112,7 @@ The 18 candidate compositions from pm-vvib retain the architecture decision gate
|
|
|
112
112
|
Individual experiment drafts record the ideas without accepting that decision.
|
|
113
113
|
|
|
114
114
|
| Candidate | Composition | Canonical owner |
|
|
115
|
-
|
|
115
|
+
|---|---|---|
|
|
116
116
|
| 1 | Prospective memory | [pm-0uvib0](../.agents/pm/tasks/pm-0uvib0.toon) |
|
|
117
117
|
| 2 | Metacognitive revalidation | [pm-ur2t9o](../.agents/pm/tasks/pm-ur2t9o.toon) |
|
|
118
118
|
| 3 | Interference and belief revision | [pm-xfta80](../.agents/pm/tasks/pm-xfta80.toon) |
|
|
@@ -53,11 +53,11 @@ History writers using item-hash epoch 2 always emit `item_hash_version: 2`. An e
|
|
|
53
53
|
|
|
54
54
|
Repair keeps implicit legacy streams implicit and byte-stable when no drift exists. Unsupported explicit epochs still fail with a typed `unsupported_item_hash_version` diagnostic instead of being rewritten.
|
|
55
55
|
|
|
56
|
-
| Writer/runtime range
|
|
57
|
-
|
|
58
|
-
| Legacy writers before an explicit marker | implicit epoch 1 | Modern readers retain legacy canonicalization candidates.
|
|
59
|
-
| Observed 2026.8.24 through 2026.8.28
|
|
60
|
-
| 2026.8.31 and newer
|
|
56
|
+
| Writer/runtime range | Item-hash output | Read contract |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| Legacy writers before an explicit marker | implicit epoch 1 | Modern readers retain legacy canonicalization candidates. |
|
|
59
|
+
| Observed 2026.8.24 through 2026.8.28 | explicit epoch 2 | Modern readers accept both field-frozen and expanded epoch-2 forms without mixing forms inside one entry. |
|
|
60
|
+
| 2026.8.31 and newer | explicit epoch 3 | Exact pins and bounded ranges that cannot select an epoch-3 reader cause current runtimes to reject the write before mutation. |
|
|
61
61
|
|
|
62
62
|
The table records confirmed release boundaries rather than inventing an exact
|
|
63
63
|
first release for legacy epoch 1 or epoch 2. The SDK exports
|
package/docs/CORPUS_SHAPES.md
CHANGED
|
@@ -46,7 +46,7 @@ identifier is `https://schema.unbrained.dev/pm/corpus-shape/v1`.
|
|
|
46
46
|
## Built-in populations
|
|
47
47
|
|
|
48
48
|
| Shape | Purpose |
|
|
49
|
-
|
|
49
|
+
|---|---|
|
|
50
50
|
| `scratch` | Seconds-old, shallow project with minimal history |
|
|
51
51
|
| `representative` | Medium-lived project with rich evidence and typed lineage |
|
|
52
52
|
| `deep-graph` | Deep relationship graph with deterministic cycles |
|
|
@@ -4,12 +4,12 @@ Tracker: [pm-4020c5](../.agents/pm/issues/pm-4020c5.toon), [pm-jkbqt8](../.agent
|
|
|
4
4
|
|
|
5
5
|
Dependency rows have one canonical stored spelling per relationship meaning. Command inputs remain compatibility-friendly: hyphens normalize to underscores and the aliases below are accepted, but `pm create` and `pm update` persist the canonical kind. Existing historical rows are never rewritten implicitly.
|
|
6
6
|
|
|
7
|
-
| Canonical kind | Accepted legacy aliases
|
|
8
|
-
|
|
9
|
-
| `blocked_by`
|
|
10
|
-
| `related`
|
|
11
|
-
| `parent`
|
|
12
|
-
| `child`
|
|
7
|
+
| Canonical kind | Accepted legacy aliases |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `blocked_by` | `depends_on`, `depends-on` |
|
|
10
|
+
| `related` | `related_to`, `related-to` |
|
|
11
|
+
| `parent` | `child_of`, `child-of`, `epic` |
|
|
12
|
+
| `child` | `parent_child`, `parent-child`, `task` |
|
|
13
13
|
|
|
14
14
|
`epic` and `task` are compatibility aliases, not item types embedded in the relationship ontology. New integrations should use `parent` or `child` and express the work classification through the item `type` field.
|
|
15
15
|
|