@unbrained/pm-cli 2026.8.16 → 2026.8.18
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/AGENTS.md +4 -3
- package/CHANGELOG.md +65 -6
- package/README.md +16 -16
- package/dist/cli/error-guidance.js +7 -4
- package/dist/cli/public.d.ts +2 -0
- package/dist/cli/public.js +21 -0
- package/dist/cli/register-list-query.js +132 -51
- package/dist/cli/register-mutation.js +4 -4
- package/dist/cli-bundle/bundle-manifest.json +148 -148
- package/dist/cli-bundle/chunks/chunk-5UZZAJKR.js +3 -0
- package/dist/cli-bundle/chunks/chunk-ALDJGKAK.js +2 -0
- package/dist/cli-bundle/chunks/chunk-BSK2IN3C.js +8 -0
- package/dist/cli-bundle/chunks/chunk-DY4DMUMC.js +197 -0
- package/dist/cli-bundle/chunks/{chunk-73UGEBRS.js → chunk-GNFAFIJI.js} +10 -10
- package/dist/cli-bundle/chunks/chunk-L5Q2CLPE.js +35 -0
- package/dist/cli-bundle/chunks/{chunk-RIS565OA.js → chunk-PVRUN5ZS.js} +5 -5
- package/dist/cli-bundle/chunks/chunk-RZQTVMRQ.js +2 -0
- package/dist/cli-bundle/chunks/chunk-SARFF5H5.js +3 -0
- package/dist/cli-bundle/chunks/chunk-UYCLQVL2.js +13 -0
- package/dist/cli-bundle/chunks/{chunk-URW4QRMI.js → chunk-YRGOLZA7.js} +59 -55
- package/dist/cli-bundle/chunks/register-list-query-I23LALEE.js +11 -0
- package/dist/cli-bundle/chunks/register-mutation-6YGU3GPH.js +20 -0
- package/dist/cli-bundle/chunks/{register-operations-KGDNRMCL.js → register-operations-4HTFC6J7.js} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-NVXBOD5I.js → register-setup-PPPEF3SN.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-2PN4TJXH.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-C7JUBRFP.js → chunk-3TKWMNKF.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-5AF3ZBNB.js +155 -0
- package/dist/cli-bundle/focused-chunks/chunk-C5IW2NDA.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-CODV5LUT.js → chunk-EUEGXZ2A.js} +3 -3
- package/dist/cli-bundle/focused-chunks/{chunk-4JPEBFFC.js → chunk-EX6MKP2X.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-SSNDYZTM.js → chunk-K43KKAFS.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-6ROKKT4X.js → chunk-M62NO7EI.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-T46KLOIB.js → chunk-ODOVCP45.js} +47 -47
- package/dist/cli-bundle/focused-chunks/chunk-RNDNMARJ.js +16 -0
- package/dist/cli-bundle/focused-chunks/chunk-TN4AE665.js +26 -0
- package/dist/cli-bundle/focused-chunks/chunk-TVV2DONO.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-UI6AJ5TD.js +4 -0
- package/dist/cli-bundle/focused-chunks/chunk-V5XTGLK7.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-WGHQVU6P.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-XYNBXTDQ.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-Z56ECT7I.js +2 -0
- package/dist/cli-bundle/main.js +7 -7
- 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 +31 -31
- 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 +32 -32
- 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 +4 -2
- package/dist/core/config/nested-settings.js +8 -2
- package/dist/core/extensions/exporter-output-contract.d.ts +12 -0
- package/dist/core/extensions/exporter-output-contract.js +67 -0
- package/dist/core/extensions/extension-types.d.ts +36 -1
- package/dist/core/extensions/extension-types.js +2 -2
- package/dist/core/extensions/loader.js +43 -48
- package/dist/core/extensions/manifest-schema.d.ts +20 -0
- package/dist/core/extensions/manifest-schema.js +52 -0
- package/dist/core/history/event-index.d.ts +5 -0
- package/dist/core/history/event-index.js +133 -27
- package/dist/core/history/replay.js +32 -14
- package/dist/core/schema/fields-file.d.ts +1 -1
- package/dist/core/schema/fields-file.js +2 -2
- package/dist/core/schema/runtime-field-values.js +115 -9
- package/dist/core/schema/runtime-schema.d.ts +3 -1
- package/dist/core/schema/runtime-schema.js +124 -3
- package/dist/core/sentry/helpers.js +3 -3
- package/dist/core/shared/constants.js +5 -2
- package/dist/core/shared/errors.d.ts +10 -0
- package/dist/core/shared/errors.js +2 -2
- package/dist/core/shared/time.d.ts +2 -0
- package/dist/core/shared/time.js +27 -2
- package/dist/core/store/settings-validator.d.ts +4 -0
- package/dist/core/store/settings-validator.js +3 -2
- package/dist/core/store/settings.js +8 -2
- package/dist/mcp/tool-definitions.js +12 -7
- package/dist/sdk/agent/refusal-reachability.d.ts +46 -6
- package/dist/sdk/agent/refusal-reachability.js +350 -8
- package/dist/sdk/authoring.d.ts +1 -1
- package/dist/sdk/authoring.js +2 -2
- package/dist/sdk/cli-bootstrap.d.ts +2 -2
- package/dist/sdk/cli-bootstrap.js +4 -4
- package/dist/sdk/cli-contracts/command-aliases.d.ts +34 -2
- package/dist/sdk/cli-contracts/command-aliases.js +64 -13
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +4 -0
- package/dist/sdk/cli-contracts/enum-contracts.js +9 -2
- package/dist/sdk/cli-contracts/flag-contracts.js +11 -7
- package/dist/sdk/cli-contracts/grammar-contracts.d.ts +70 -0
- package/dist/sdk/cli-contracts/grammar-contracts.js +345 -0
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +19 -2
- package/dist/sdk/cli-contracts/runtime-contracts.js +61 -14
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +10 -4
- package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -2
- package/dist/sdk/cli-contracts/tool-schema.js +20 -11
- package/dist/sdk/cli-contracts.d.ts +2 -2
- package/dist/sdk/cli-contracts.js +4 -4
- package/dist/sdk/completion.js +13 -15
- package/dist/sdk/compose.d.ts +9 -5
- package/dist/sdk/compose.js +33 -3
- package/dist/sdk/context-intent-contracts.d.ts +8 -4
- package/dist/sdk/context-intent-contracts.js +76 -31
- package/dist/sdk/contracts.d.ts +1 -0
- package/dist/sdk/contracts.js +3 -2
- package/dist/sdk/core.d.ts +1 -1
- package/dist/sdk/core.js +3 -3
- package/dist/sdk/dependency-flag-validation.d.ts +9 -2
- package/dist/sdk/dependency-flag-validation.js +101 -35
- package/dist/sdk/environment/host-environment-errors.js +25 -7
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +78 -14
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +62 -14
- package/dist/sdk/governance/assurance-action.d.ts +3 -7
- package/dist/sdk/governance/assurance-action.js +97 -2
- package/dist/sdk/governance/boundary-fixtures.d.ts +86 -0
- package/dist/sdk/governance/boundary-fixtures.js +201 -0
- package/dist/sdk/governance/defect-recurrence-signals.d.ts +10 -0
- package/dist/sdk/governance/defect-recurrence-signals.js +25 -0
- package/dist/sdk/governance/defect-recurrence.d.ts +242 -0
- package/dist/sdk/governance/defect-recurrence.js +523 -0
- package/dist/sdk/governance.d.ts +2 -0
- package/dist/sdk/governance.js +4 -2
- package/dist/sdk/graph/governance.js +3 -2
- package/dist/sdk/guide-topics.js +193 -4
- package/dist/sdk/index.d.ts +7 -3
- package/dist/sdk/index.js +8 -5
- package/dist/sdk/init-agent-guidance.js +3 -3
- package/dist/sdk/lifecycle/create.js +4 -2
- package/dist/sdk/lifecycle/update-many.js +15 -2
- package/dist/sdk/lifecycle/update.js +5 -2
- package/dist/sdk/linked-artifacts.js +63 -14
- package/dist/sdk/mutation-events.d.ts +18 -2
- package/dist/sdk/mutation-events.js +59 -16
- package/dist/sdk/output.d.ts +44 -0
- package/dist/sdk/output.js +28 -2
- package/dist/sdk/query/complete-list.d.ts +94 -0
- package/dist/sdk/query/complete-list.js +173 -0
- package/dist/sdk/query/get.d.ts +2 -0
- package/dist/sdk/query/get.js +32 -7
- package/dist/sdk/query/list.js +5 -2
- package/dist/sdk/query.d.ts +1 -0
- package/dist/sdk/query.js +3 -2
- package/dist/sdk/read-output-contracts.d.ts +2 -2
- package/dist/sdk/read-output-contracts.js +36 -9
- package/dist/sdk/relationship-analytics.js +90 -14
- package/dist/sdk/relationship-kinds/contract.d.ts +4 -0
- package/dist/sdk/relationship-kinds/contract.js +3 -2
- package/dist/sdk/relationships.d.ts +1 -1
- package/dist/sdk/relationships.js +11 -2
- package/dist/sdk/runtime-extended-actions.js +10 -2
- package/dist/sdk/runtime.d.ts +8 -2
- package/dist/sdk/runtime.js +11 -8
- package/dist/sdk/schema.d.ts +1 -0
- package/dist/sdk/schema.js +2 -2
- package/dist/sdk/test/execution.d.ts +6 -2
- package/dist/sdk/test/execution.js +39 -13
- package/dist/types.d.ts +34 -2
- package/dist/types.js +4 -2
- package/docs/AGENT_GUIDE.md +25 -9
- package/docs/CLI_GRAMMAR.md +106 -0
- package/docs/COMMANDS.md +23 -23
- package/docs/CONFIGURATION.md +58 -1
- package/docs/CONTEXT_INTEGRITY_CONTRACTS.md +58 -0
- package/docs/DEFECT_RECURRENCE.md +134 -0
- package/docs/DEPENDENCY_KIND_CONTRACT.md +12 -2
- package/docs/ONBOARDING.md +4 -4
- package/docs/QUICKSTART.md +1 -1
- package/docs/README.md +4 -0
- package/docs/RELATIONSHIP_GRAPH.md +16 -2
- package/docs/RELEASING.md +30 -6
- package/docs/SDK.md +74 -7
- package/docs/SDK_ARTIFACT_OUTPUT.md +72 -0
- package/docs/SDK_CONTEXT_COORDINATION.md +46 -12
- package/docs/SDK_RUNTIME_BOUNDARIES.md +9 -1
- package/docs/TESTING.md +18 -1
- package/docs/TRUSTWORTHY_CONTEXT_EVIDENCE.md +1 -1
- package/docs/agent-task-token-baseline.json +5 -5
- package/marketplace.json +2 -2
- package/package.json +8 -5
- 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/package.json +1 -1
- 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/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-claude/skills/pm-audit/SKILL.md +26 -0
- package/plugins/pm-claude/skills/pm-developer/SKILL.md +26 -0
- package/plugins/pm-claude/skills/pm-planner/SKILL.md +26 -0
- package/plugins/pm-claude/skills/pm-release/SKILL.md +26 -0
- package/plugins/pm-claude/skills/pm-workflow/SKILL.md +26 -0
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/skills/pm-auditor/SKILL.md +26 -0
- package/plugins/pm-codex/skills/pm-native/SKILL.md +26 -0
- package/plugins/pm-codex/skills/pm-release/SKILL.md +26 -0
- package/sdk/public-surface.json +1243 -54
- package/dist/cli-bundle/chunks/chunk-47OQEOQB.js +0 -2
- package/dist/cli-bundle/chunks/chunk-HCIYWD6M.js +0 -35
- package/dist/cli-bundle/chunks/chunk-I2LUWWR5.js +0 -3
- package/dist/cli-bundle/chunks/chunk-IC5W2T34.js +0 -2
- package/dist/cli-bundle/chunks/chunk-OAC5NIV4.js +0 -3
- package/dist/cli-bundle/chunks/chunk-PANOOBIS.js +0 -13
- package/dist/cli-bundle/chunks/chunk-TK6N7HGM.js +0 -8
- package/dist/cli-bundle/chunks/chunk-TOFG2URD.js +0 -197
- package/dist/cli-bundle/chunks/register-list-query-EYCXHZAG.js +0 -10
- package/dist/cli-bundle/chunks/register-mutation-7YVIG54J.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-5NMFSX26.js +0 -155
- package/dist/cli-bundle/focused-chunks/chunk-725JSCMP.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-DQ6SMTBF.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-HAACPSUW.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-J4UFYHOD.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-JX5Z344Q.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-L4RDYBIQ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-NJ5RLEFD.js +0 -26
- package/dist/cli-bundle/focused-chunks/chunk-QYZERYR5.js +0 -4
- package/dist/cli-bundle/focused-chunks/chunk-TZATVC4G.js +0 -16
- package/dist/cli-bundle/focused-chunks/chunk-WY3WRPVN.js +0 -2
package/docs/SDK.md
CHANGED
|
@@ -42,6 +42,14 @@ semantic command discovery, and append-stable linked tests are tracked by
|
|
|
42
42
|
[pm-st7wgu](../.agents/pm/issues/pm-st7wgu.toon),
|
|
43
43
|
[pm-g543](../.agents/pm/issues/pm-g543.toon), and
|
|
44
44
|
[pm-x2vx](../.agents/pm/issues/pm-x2vx.toon).
|
|
45
|
+
The supported CLI entrypoint boundary, truthful context-intent receipts, and
|
|
46
|
+
first-class recurrence relationships are tracked by
|
|
47
|
+
[pm-rf120g](../.agents/pm/tasks/pm-rf120g.toon),
|
|
48
|
+
[pm-3crymx](../.agents/pm/issues/pm-3crymx.toon), and
|
|
49
|
+
[pm-ouyq3n](../.agents/pm/issues/pm-ouyq3n.toon).
|
|
50
|
+
Fail-closed whole-corpus reads and package-catalog output controls are tracked by
|
|
51
|
+
[pm-y4aaol](../.agents/pm/issues/pm-y4aaol.toon) and
|
|
52
|
+
[pm-2firut](../.agents/pm/issues/pm-2firut.toon).
|
|
45
53
|
|
|
46
54
|
Use it for extension authoring, package authoring, command/action contract discovery, and deterministic app or CI automation. Do not import private `src/core/...` modules from external integrations or packages.
|
|
47
55
|
|
|
@@ -90,8 +98,14 @@ barrel remains source-compatible:
|
|
|
90
98
|
| `@unbrained/pm-cli/sdk/public-surface.json` | Published machine-readable SDK compatibility snapshot |
|
|
91
99
|
| `@unbrained/pm-cli/sdk` | Compatibility aggregate containing every supported SDK export |
|
|
92
100
|
|
|
93
|
-
`@unbrained/pm-cli/cli`
|
|
94
|
-
|
|
101
|
+
`@unbrained/pm-cli/cli` is the supported embeddable CLI entrypoint and exports
|
|
102
|
+
only `runPmCli`. Repository tests import their internal seams from source; those
|
|
103
|
+
helpers are not package API. The surface snapshot records the subpath under the
|
|
104
|
+
`executable_entry` classification, so any future exposure is a classified
|
|
105
|
+
surface change. The bare
|
|
106
|
+
`@unbrained/pm-cli` root export is recorded as an `aggregate_alias` of
|
|
107
|
+
`@unbrained/pm-cli/sdk`: its symbols are not duplicated, but a retarget of its
|
|
108
|
+
declaration path is a snapshot change. The committed
|
|
95
109
|
[entrypoint import-cost table](performance/sdk-entrypoint-import-costs.md)
|
|
96
110
|
records fresh-process latency, RSS, and reduction versus the aggregate barrel.
|
|
97
111
|
Every narrow entrypoint is bundled and type-tested independently.
|
|
@@ -137,6 +151,12 @@ from every non-testing SDK subpath must be available from
|
|
|
137
151
|
Consumers and release tooling can read the exact shipped artifact from
|
|
138
152
|
`@unbrained/pm-cli/sdk/public-surface.json` without locating repository files.
|
|
139
153
|
|
|
154
|
+
The denominator is the package export map itself, not a list inside the
|
|
155
|
+
generator. Every `exports` entry that declares a `types` path must carry a
|
|
156
|
+
classification, and `pnpm sdk:surface:check` refuses to run while any published
|
|
157
|
+
code export is unclassified — so adding a public entrypoint cannot ship it
|
|
158
|
+
ungoverned.
|
|
159
|
+
|
|
140
160
|
## Public Exports
|
|
141
161
|
|
|
142
162
|
Source of truth:
|
|
@@ -182,6 +202,7 @@ Source of truth:
|
|
|
182
202
|
- [`src/sdk/merge/index.ts`](../src/sdk/merge/index.ts)
|
|
183
203
|
- [`src/sdk/workspace-transaction-gc.ts`](../src/sdk/workspace-transaction-gc.ts)
|
|
184
204
|
- [`src/sdk/query/list.ts`](../src/sdk/query/list.ts)
|
|
205
|
+
- [`src/sdk/query/complete-list.ts`](../src/sdk/query/complete-list.ts)
|
|
185
206
|
- [`src/sdk/query/search.ts`](../src/sdk/query/search.ts)
|
|
186
207
|
- [`src/sdk/query/search-pagination.ts`](../src/sdk/query/search-pagination.ts)
|
|
187
208
|
- [`src/sdk/query/search-rendering.ts`](../src/sdk/query/search-rendering.ts)
|
|
@@ -275,7 +296,7 @@ Storage format-version exports (under `@unbrained/pm-cli/sdk/runtime`):
|
|
|
275
296
|
Command/action contract exports:
|
|
276
297
|
|
|
277
298
|
- `PmClient` / `runAction` (high-level in-process action execution for custom tools, bots, CI, and embedded runtimes)
|
|
278
|
-
- Typed read primitives on `PmClient`: `get` (including `GetOptions.at` point-in-time reads), `list`, `search`, `context`, `next`, `aggregate`, `stats`, and `duplicates`; direct `getItemAt` reconstructs a canonical historical document without mutation. `duplicates` performs one bounded all-status metadata sweep and returns deterministic canonical-candidate and close-command guidance without mutating items.
|
|
299
|
+
- Typed read primitives on `PmClient`: `get` (including `GetOptions.at` point-in-time reads), `list`, `listAllComplete`, `search`, `context`, `next`, `aggregate`, `stats`, and `duplicates`; direct `getItemAt` reconstructs a canonical historical document without mutation. `listAllComplete` forces an all-status, full, strict, unbounded read and fails closed unless the returned envelope proves source completeness, unique ids, exact counts, no pagination, no field or budget omission, and no session projection. `duplicates` performs one bounded all-status metadata sweep and returns deterministic canonical-candidate and close-command guidance without mutating items.
|
|
279
300
|
- Read primitive option/result contracts: `GetOptions` / `GetResult`, `ListOptions` / `ListResult`, `SearchOptions` / `SearchResult`, `ContextOptions` / `ContextResult`, `NextOptions` / `NextResult`, `AggregateOptions` / `AggregateResult`, `StatsCommandOptions` / `StatsResult`. Standard and brief `get` projections omit note bodies but expose `item.notes_count`; deep/full reads return the notes themselves, and narrow consumers can request `notes_count` explicitly.
|
|
280
301
|
- Stream projection primitive: `serializeNdjsonRows` frames SDK-owned object rows as newline-delimited JSON without a trailing newline and rejects scalar/array rows, so package transports can match list/search/context CLI semantics without importing presentation code.
|
|
281
302
|
- Context relevance primitives: `buildItemContextRelevanceCandidates`, `buildContextSignalSnapshot`, `ContextSignalStore`, `JsonFileContextSignalStoreAdapter`, `parseContextSignalSnapshot`, `defaultScoreContextCandidates`, `scoreContextCandidates`, `scoreContextCandidatesWithActiveExtensions`, `evaluateContextRanking`, `runContextEvaluationScenario`, `runContextEvaluationCorpus`, and `summarizeContextEvaluationReports`
|
|
@@ -301,6 +322,7 @@ Command/action contract exports:
|
|
|
301
322
|
- Actionability primitives: `collectBlockedByIds`, `resolveItemBlockers`, `collectDependencyBlockedIds`, and `computeActionabilityReport` expose the same edge-aware blocked/ready definition used by `pm next`, `pm context`, and `pm list-blocked`. Embedded schedulers can therefore classify custom lifecycle schemas without importing CLI or core modules.
|
|
302
323
|
- Dependency-governance primitives: `collectDanglingDependencyReferences`, `collectMissingDependencyTargetIds`, and `assembleWorkspaceRelationshipGraph` normalize hierarchy, scalar blockers, and structured dependencies into one graph while partitioning missing targets into actionable active holders, informational terminal-history holders, and the legacy `no-active-blocker` sentinel without mutating stored history.
|
|
303
324
|
- Relationship graph primitives: `RelationshipKindRegistry`, `createRelationshipKindRegistry`, `assertRelationshipEdgeAllowed`, `RelationshipGraph`, `RelationshipEventLog`, `RelationshipEventStore`, `planRelationshipEventBackfill`, `buildRelationshipContext`, `buildDepsRelationshipContext`, `hierarchyAncestors`, `hierarchyDescendants`, `orderingPredecessors`, `orderingSuccessors`, `enumerateRelationshipPaths`, `auditWorkspaceRelationshipGraph`, `isOrderingRelationshipKind`, and `dependencyToRelationship` provide application-defined edge semantics, durable replay, deterministic legacy migration, bounded semantic traversal, policy-aware governance, and explainable context queries. Mutation adapters should call `assertRelationshipEdgeAllowed` with the active registry before persistence; it resolves aliases and honors custom `allowSelf` definitions while built-in self edges fail before item or history writes. `RelationshipEventLog.stream/project` and their durable-store equivalents page immutable prefixes and fold them into deterministic application state with exact version, processed-count, and as-of metadata. `RelationshipEventStore.appendBatch` validates a complete import under one cross-process lock and atomically publishes it; `skip_identical` resume mode rejects same-id semantic collisions. `RelationshipGraphAdapter`, `createRelationshipGraphSnapshot`, `syncRelationshipGraphAdapter`, `loadRelationshipGraphAdapter`, and `federateRelationshipGraphSnapshots` form the backend-neutral content-addressed projection boundary for database or remote graph packages. `MemoryRelationshipGraphAdapter`, `assertRelationshipGraphAdapterConformance`, and `createRelationshipGraphScaleFixture` give package authors a reference implementation, reusable compatibility contract, and lazy deterministic fixtures through one million nodes. See [Relationship graph semantics](RELATIONSHIP_GRAPH.md).
|
|
325
|
+
- Built-in `recurs_from` records that the source is a later occurrence of the target. Its registry contract is directed, `source_after_target`, non-ordering, many-to-many, and persistent across terminal lifecycle states. Local mutation paths enforce strictly later source `created_at` metadata before item or history persistence and return structured source/target evidence when chronology is equal, reversed, or unverifiable. It therefore connects an incident family for traversal and analytics without reclassifying `supersedes` replacements or `duplicate_of` identity collapse.
|
|
304
326
|
- Atomic application transactions: `commitWorkspaceTransaction` coordinates ordered, idempotent item and relationship mutations under one workspace writer lock and a durable replay journal. Interrupted work resumes from step inspection; ordinary failures append reverse-order compensations without rewriting immutable histories.
|
|
305
327
|
- Multi-branch merge primitives: `mergeItemDocuments`, `mergeHistoryStreams`, `mergeRelationshipEventStreams`, `mergeJsonDocuments`, `runMergeDriver`, `runMergeInstall`, and `runMergeReconcile` provide the same field-aware item, hash-chain-preserving history, sequence-renumbering relationship-event, key-level configuration, and audited post-merge repair-and-verify semantics as `pm merge`; `installMergeFence` and `findGitWorkspaceRoot` let custom init hosts install the same contract with explicit roots, while `buildMergeAttributePatterns`, `refreshMergeAttributeFenceIfInstalled`, and `auditMergeAttributeFence` expose fence coverage, refresh, and validation. See [Multi-Branch Merge Safety](MERGE_SAFETY.md).
|
|
306
328
|
- Dependency provenance primitives: `EXTERNAL_DEPENDENCY_SOURCE_KIND`, `EXTERNAL_DEPENDENCY_SOURCE_KIND_ALIAS`, `isExternalDependencySourceKind`, and `normalizeDependencySeedId` let custom importers preserve cross-workspace dependency ids explicitly while retaining local prefix normalization for ordinary seeds. `source_kind: "external"` is the human-facing alias and persists canonically as `global`; a `blocked_by` row with that provenance is a real external predecessor, so graph governance does not require a fabricated local item or misreport `stale_lifecycle_block`. Newly created dependency rows also carry the effective `author`, `author_source` (`asserted` or `detected`), and a mutation `source_kind`; legacy rows remain readable without invented provenance. Tracked by [pm-6sc8jq](../.agents/pm/issues/pm-6sc8jq.toon).
|
|
@@ -348,9 +370,10 @@ rendering stay at the edge.
|
|
|
348
370
|
Embedded hosts can also import the SDK-owned bootstrap normalization primitives
|
|
349
371
|
(`normalizeBootstrapInvocation`, `parseBootstrapGlobalOptions`, and related
|
|
350
372
|
contracts) when they intentionally expose pm-compatible argv. Every
|
|
351
|
-
`runPmCli()` call constructs a fresh Commander graph
|
|
352
|
-
|
|
353
|
-
the next
|
|
373
|
+
`runPmCli()` call constructs a fresh Commander graph and restores the host's
|
|
374
|
+
existing `process.exitCode` after both successful and failed invocations, so
|
|
375
|
+
extension state and CLI exit state from one workspace cannot leak into the next
|
|
376
|
+
in-process invocation.
|
|
354
377
|
|
|
355
378
|
### Build a non-PM temporal domain
|
|
356
379
|
|
|
@@ -653,6 +676,20 @@ representative medium-workspace answers use the live
|
|
|
653
676
|
negative control: the gate fails unless that deliberately unsafe request
|
|
654
677
|
exceeds the default contract.
|
|
655
678
|
|
|
679
|
+
Named read intents additionally return `context_intent`. The receipt separates
|
|
680
|
+
the declaration (`declared_token_budget`) from the effective ceiling
|
|
681
|
+
(`token_budget`) and reports their signed `token_budget_override`. Row-oriented
|
|
682
|
+
reads clamp an explicit limit to the budget-derived ceiling and identify the
|
|
683
|
+
binding constraint. `declaration_feasible` evaluates the useful projection
|
|
684
|
+
against the declared ceiling independently of whether a lower or higher caller
|
|
685
|
+
override is effective. `within_budget` evaluates that same projection against
|
|
686
|
+
the effective `token_budget`, so it can legitimately differ from declaration
|
|
687
|
+
feasibility. If even compacted useful output cannot fit,
|
|
688
|
+
`result_omitted` is true, `estimated_tokens` retains the measured pre-omission
|
|
689
|
+
size (and is therefore greater than `token_budget`), and
|
|
690
|
+
`budget_exceeded.restore_with` is an executable bounded retry rather than a
|
|
691
|
+
generic suggestion.
|
|
692
|
+
|
|
656
693
|
Unfiltered `pm contracts` now selects the summary projection by default. It
|
|
657
694
|
returns canonical commands, terse intents, the most useful flags for the core
|
|
658
695
|
agent loop, per-command ceilings, and the shared output policy. Use
|
|
@@ -1435,6 +1472,10 @@ helpers return `ExtensionCommandResult`; both names describe the same lifecycle
|
|
|
1435
1472
|
payload shape with vocabulary-appropriate SDK signatures. `UpgradeResult` is the
|
|
1436
1473
|
same structured payload rendered by the CLI, so embedded tools can own their
|
|
1437
1474
|
presentation layer while sharing pm's package/install/doctor semantics.
|
|
1475
|
+
`packageCatalog` is a read surface and accepts the universal output controls;
|
|
1476
|
+
the CLI-equivalent `pm --output-budget unbounded package --catalog --json`
|
|
1477
|
+
therefore composes with the same output contract while catalog-plus-mutation
|
|
1478
|
+
invocations fail before any package state can change.
|
|
1438
1479
|
|
|
1439
1480
|
Annotation and relationship convenience methods turn "project management =
|
|
1440
1481
|
context management" into a typed SDK surface. Use `pm.comments`, `pm.notes`,
|
|
@@ -1543,9 +1584,35 @@ compact or `fields` projections return `ListProjectedItem` dictionaries. Use
|
|
|
1543
1584
|
a `partial` scan with unreadable item/directory counts, and an `unchecked`
|
|
1544
1585
|
derived-index page. Set `ListOptions.strictRead` (CLI `--strict-read`) when an
|
|
1545
1586
|
automation must fail instead of accepting omissions.
|
|
1546
|
-
`full: true` when an integration requires complete item metadata; the overload
|
|
1587
|
+
Use `full: true` when an integration requires complete item metadata; the overload
|
|
1547
1588
|
then returns `ListFullResult` without an assertion or cast.
|
|
1548
1589
|
|
|
1590
|
+
When correctness depends on the entire workspace rather than a page, use the
|
|
1591
|
+
certifying primitive instead of rebuilding these conditions at every call site:
|
|
1592
|
+
|
|
1593
|
+
```ts
|
|
1594
|
+
import {
|
|
1595
|
+
PmClient,
|
|
1596
|
+
certifyCompleteListResult,
|
|
1597
|
+
createCompleteListOptions,
|
|
1598
|
+
} from "@unbrained/pm-cli/sdk/runtime";
|
|
1599
|
+
|
|
1600
|
+
const pm = new PmClient({ pmRoot: "/workspace/.agents/pm" });
|
|
1601
|
+
const corpus = await pm.listAllComplete({ includeBody: true });
|
|
1602
|
+
corpus.complete_list.source_complete; // true, otherwise the call throws
|
|
1603
|
+
|
|
1604
|
+
// Custom transports can apply the same request and certificate independently.
|
|
1605
|
+
const candidate = await pm.list(createCompleteListOptions());
|
|
1606
|
+
const certified = certifyCompleteListResult(candidate);
|
|
1607
|
+
```
|
|
1608
|
+
|
|
1609
|
+
`PmCompleteListValidationError.receipt` lists every failed invariant and carries
|
|
1610
|
+
the exact recovery command
|
|
1611
|
+
`pm list-all --full --strict-read --no-truncate --output-budget unbounded --json`.
|
|
1612
|
+
The helper never infers completeness from a large limit: derived-index reads,
|
|
1613
|
+
terminal-state filtering, duplicate ids, cursor/session projection, compaction,
|
|
1614
|
+
and any omission receipt all prevent certification.
|
|
1615
|
+
|
|
1549
1616
|
CLI JSON consumers can add `--lean` to compact null and empty values. On
|
|
1550
1617
|
item-list envelopes, lean output also removes request echoes (`filters`, `now`,
|
|
1551
1618
|
`projection`, and `sorting`) and removes `next_cursor` when `has_more` is not
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# SDK artifact output contracts
|
|
2
|
+
|
|
3
|
+
Trackers: [pm-dilou2](../.agents/pm/issues/pm-dilou2.toon) and [pm-mav1ak](../.agents/pm/features/pm-mav1ak.toon).
|
|
4
|
+
|
|
5
|
+
Exporter artifacts are data streams, not command receipts. A package declares
|
|
6
|
+
the channel when it registers an exporter so the host never guesses whether a
|
|
7
|
+
returned value should be appended to artifact bytes.
|
|
8
|
+
|
|
9
|
+
## Agent quick context
|
|
10
|
+
|
|
11
|
+
- Declare `output.channel: "stdout"` for JSON, NDJSON, CSV, or opaque bytes.
|
|
12
|
+
The host suppresses its receipt by default, including under global `--json`.
|
|
13
|
+
- Declare `output.channel: "file"` when the exporter writes a file. The host
|
|
14
|
+
renders the returned bounded receipt by default.
|
|
15
|
+
- An exporter may still return a structured result. Suppressed receipts remain
|
|
16
|
+
available to hooks, telemetry, and embedding hosts.
|
|
17
|
+
- Write optional human progress or summaries to stderr. Never mix them into a
|
|
18
|
+
stdout artifact.
|
|
19
|
+
- Legacy registrations without `output` retain their previous rendering.
|
|
20
|
+
|
|
21
|
+
## Registration
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import type { ExtensionApi } from "@unbrained/pm-cli/sdk";
|
|
25
|
+
|
|
26
|
+
export function activate(api: ExtensionApi): void {
|
|
27
|
+
api.registerExporter(
|
|
28
|
+
"report-json",
|
|
29
|
+
async () => {
|
|
30
|
+
process.stdout.write('{"items":[]}\n');
|
|
31
|
+
return { exported: 0 };
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
description: "Export a complete JSON report to stdout.",
|
|
35
|
+
output: {
|
|
36
|
+
channel: "stdout",
|
|
37
|
+
media_type: "application/json",
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The normalized contract is visible in the extension contribution inventory.
|
|
45
|
+
Derived help also states that stdout artifact bytes are exclusive and host
|
|
46
|
+
receipt rendering is suppressed when the extension does not supply a custom
|
|
47
|
+
description.
|
|
48
|
+
|
|
49
|
+
## Channel behavior
|
|
50
|
+
|
|
51
|
+
| Artifact channel | Default receipt | stdout | stderr |
|
|
52
|
+
| --- | --- | --- | --- |
|
|
53
|
+
| `stdout` | `suppress` | Artifact bytes only | Extension-owned diagnostics or summary |
|
|
54
|
+
| `file` | `render` | Bounded structured receipt | Extension-owned diagnostics |
|
|
55
|
+
|
|
56
|
+
File exporters may select `receipt: "render"` or `receipt: "suppress"` as an
|
|
57
|
+
explicit compatibility control. Stdout artifacts always suppress the host
|
|
58
|
+
receipt; declaring `receipt: "render"` with `channel: "stdout"` is rejected at
|
|
59
|
+
registration so redirection, `jq`, and binary output remain clean by
|
|
60
|
+
construction.
|
|
61
|
+
|
|
62
|
+
The host does not decode, re-encode, buffer, or inspect stdout artifact bytes.
|
|
63
|
+
Consequently NUL bytes and non-UTF-8 payloads pass through unchanged. The
|
|
64
|
+
extension owns media correctness and stream completion; the host owns only the
|
|
65
|
+
post-handler receipt policy.
|
|
66
|
+
|
|
67
|
+
## Shared NDJSON framing
|
|
68
|
+
|
|
69
|
+
SDK-built producers can use `serializeNdjsonStream(rows, trailer)` to append one
|
|
70
|
+
typed `pm.stream.trailer` after a bounded row batch. It supplies one stable
|
|
71
|
+
place for counts, continuation cursors, source identity, and constant-size
|
|
72
|
+
producer metadata without adding per-row overhead.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# SDK context coordination primitives
|
|
2
2
|
|
|
3
|
-
Trackers: [pm-e200](../.agents/pm/features/pm-e200.toon), [pm-4ri6](../.agents/pm/features/pm-4ri6.toon), and [pm-hcrmye](../.agents/pm/issues/pm-hcrmye.toon).
|
|
3
|
+
Trackers: [pm-e200](../.agents/pm/features/pm-e200.toon), [pm-ez1dfg](../.agents/pm/tasks/pm-ez1dfg.toon), [pm-4ri6](../.agents/pm/features/pm-4ri6.toon), and [pm-hcrmye](../.agents/pm/issues/pm-hcrmye.toon).
|
|
4
4
|
|
|
5
5
|
`pm` treats project management as context management. These primitives let an
|
|
6
6
|
agent learn what changed, avoid creating redundant work, and keep that work
|
|
@@ -26,38 +26,72 @@ Read committed history facts as newline-delimited JSON:
|
|
|
26
26
|
pm events --type create --author agent-a --limit 100
|
|
27
27
|
pm events --since <cursor> --item pm-abcd
|
|
28
28
|
pm events --since <cursor> --follow --interval-ms 250
|
|
29
|
+
pm events --cursor-mode row --since <cursor>
|
|
29
30
|
```
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
`patch_count
|
|
32
|
+
By default, event rows carry `item_id`, `version`, `ts`, `author`, `type`, and
|
|
33
|
+
`patch_count`, followed by one `pm.stream.trailer` record with `count`,
|
|
34
|
+
`has_more`, `next_cursor`, and `source`. Persist the trailer cursor only after
|
|
35
|
+
the batch is durable. A crash before cursor persistence can replay the last
|
|
36
|
+
batch repeatedly, including across multiple crashes. Consumers must process
|
|
37
|
+
idempotently or deduplicate replays. `--cursor-mode row` preserves the previous
|
|
38
|
+
shape with one `cursor` per event and no trailer for consumers that checkpoint
|
|
39
|
+
every row. Already issued version-1 cursors remain accepted by `--since`.
|
|
40
|
+
|
|
41
|
+
Node runtimes use the rebuildable SQLite event projection. Runtimes such as Bun
|
|
42
|
+
that do not expose `node:sqlite` transparently scan the authoritative history
|
|
43
|
+
streams with the same ordering, filters, pagination, and cursor contract; pages
|
|
44
|
+
identify that path with `source: "authoritative_history"`.
|
|
45
|
+
|
|
46
|
+
`--full` also includes the complete authoritative history entry.
|
|
33
47
|
`--type`, `--author`, and `--item` accept repeatable or comma-separated values.
|
|
34
48
|
`--since` accepts either a cursor or an ISO timestamp. The CLI emits only event
|
|
35
|
-
rows, so
|
|
49
|
+
rows and the typed terminal record, so consumers can distinguish data from
|
|
50
|
+
recovery metadata without relying on position alone. Under `--follow`, every
|
|
51
|
+
non-empty page ends at the same batch boundary and an empty boundary is emitted
|
|
52
|
+
as an idle heartbeat.
|
|
36
53
|
|
|
37
54
|
The public SDK provides bounded pages and an abortable async iterator:
|
|
38
55
|
|
|
39
56
|
```ts
|
|
40
57
|
import {
|
|
41
58
|
listMutationEvents,
|
|
59
|
+
subscribeMutationEventBatches,
|
|
42
60
|
subscribeMutationEvents,
|
|
43
61
|
} from "@unbrained/pm-cli/sdk";
|
|
44
62
|
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
63
|
+
const eventTypes = ["create", "update"] as const;
|
|
64
|
+
let cursor: string | undefined;
|
|
65
|
+
let hasMore = true;
|
|
66
|
+
while (hasMore) {
|
|
67
|
+
const page = await listMutationEvents({
|
|
68
|
+
pmRoot,
|
|
69
|
+
type: eventTypes,
|
|
70
|
+
limit: 100,
|
|
71
|
+
...(cursor === undefined ? {} : { since: cursor }),
|
|
72
|
+
});
|
|
73
|
+
await consumeBatch(page.events);
|
|
74
|
+
await persistCursor(page.next_cursor);
|
|
75
|
+
cursor = page.next_cursor;
|
|
76
|
+
hasMore = page.has_more;
|
|
77
|
+
}
|
|
50
78
|
|
|
51
79
|
const controller = new AbortController();
|
|
52
|
-
for await (const
|
|
80
|
+
for await (const batch of subscribeMutationEventBatches({
|
|
53
81
|
pmRoot,
|
|
54
|
-
|
|
82
|
+
type: eventTypes,
|
|
83
|
+
...(cursor === undefined ? {} : { since: cursor }),
|
|
55
84
|
signal: controller.signal,
|
|
56
85
|
})) {
|
|
57
|
-
await
|
|
86
|
+
await consumeBatch(batch.events);
|
|
87
|
+
await persistCursor(batch.next_cursor);
|
|
58
88
|
}
|
|
59
89
|
```
|
|
60
90
|
|
|
91
|
+
`subscribeMutationEvents` remains the per-event compatibility iterator and
|
|
92
|
+
defaults to row cursors. `subscribeMutationEventBatches` is the token-efficient
|
|
93
|
+
coordination primitive; it exposes the same boundaries used by the CLI.
|
|
94
|
+
|
|
61
95
|
The `pm_events` MCP tool exposes the same bounded page contract. Consumers such
|
|
62
96
|
as notification packages can store `next_cursor`, catch up after a restart,
|
|
63
97
|
then follow without requiring a daemon. A pm-slack migration can replace
|
|
@@ -45,9 +45,17 @@ the stable, path-redacted `host_environment_capacity_fault`,
|
|
|
45
45
|
`host_environment_permission_fault`, or `host_environment_resource_fault`
|
|
46
46
|
contracts. `classifyHostEnvironmentFault` supports diagnostics that need a
|
|
47
47
|
non-throwing classification, while `translateHostEnvironmentFault` supports an
|
|
48
|
-
existing catch boundary.
|
|
48
|
+
existing catch boundary. The classifier accepts both symbolic Node `code`
|
|
49
|
+
values and declared numeric `errno` values from `node:os.constants.errno`; this
|
|
50
|
+
also recognizes platform errors that Node renders only as a number, such as a
|
|
51
|
+
Linux `-122` quota failure. Non-errno failures are returned unchanged and must
|
|
49
52
|
not be relabeled as environment faults.
|
|
50
53
|
|
|
54
|
+
Linked-test tracker seeding uses this boundary. A required sandbox copy that
|
|
55
|
+
exceeds temporary-filesystem capacity fails with a stable recovery contract,
|
|
56
|
+
while linked tests whose effective context is schema avoid materializing
|
|
57
|
+
tracker data at all.
|
|
58
|
+
|
|
51
59
|
Existing SDK surfaces can supply category-specific `codes` to preserve their
|
|
52
60
|
published error vocabulary while still sharing classification, path redaction,
|
|
53
61
|
and recovery guidance. Workspace snapshots use this compatibility path for
|
package/docs/TESTING.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This page describes safe local tests, linked tests, coverage, and release-readiness checks.
|
|
4
4
|
|
|
5
|
-
Tracked implementation updates: [pm-52eh](../.agents/pm/features/pm-52eh.toon), [pm-mcxr](../.agents/pm/issues/pm-mcxr.toon), [pm-u42x](../.agents/pm/issues/pm-u42x.toon), [pm-atfm](../.agents/pm/features/pm-atfm.toon), [pm-xmp5](../.agents/pm/tasks/pm-xmp5.toon), [pm-39cqqx](../.agents/pm/tasks/pm-39cqqx.toon), [pm-5cgm2z](../.agents/pm/chores/pm-5cgm2z.toon), [pm-avv3wx](../.agents/pm/issues/pm-avv3wx.toon), [pm-rizqb6](../.agents/pm/issues/pm-rizqb6.toon).
|
|
5
|
+
Tracked implementation updates: [pm-52eh](../.agents/pm/features/pm-52eh.toon), [pm-mcxr](../.agents/pm/issues/pm-mcxr.toon), [pm-u42x](../.agents/pm/issues/pm-u42x.toon), [pm-atfm](../.agents/pm/features/pm-atfm.toon), [pm-xmp5](../.agents/pm/tasks/pm-xmp5.toon), [pm-39cqqx](../.agents/pm/tasks/pm-39cqqx.toon), [pm-5cgm2z](../.agents/pm/chores/pm-5cgm2z.toon), [pm-avv3wx](../.agents/pm/issues/pm-avv3wx.toon), [pm-rizqb6](../.agents/pm/issues/pm-rizqb6.toon), [pm-95h7pg](../.agents/pm/issues/pm-95h7pg.toon), [pm-giks4s](../.agents/pm/issues/pm-giks4s.toon).
|
|
6
6
|
|
|
7
7
|
## Agent Quick Context
|
|
8
8
|
|
|
@@ -353,6 +353,13 @@ The manifest records baseline bytes and estimated tokens for visible review
|
|
|
353
353
|
deltas. Updating it cannot raise answer ceilings, which remain owned by
|
|
354
354
|
`PM_COMMAND_OUTPUT_BUDGET_CONTRACTS`.
|
|
355
355
|
|
|
356
|
+
The gate derives every supported harness, model, session, and provenance
|
|
357
|
+
environment key from the SDK-owned harness descriptor registry. It deletes
|
|
358
|
+
those host inputs before each fixture invocation, then supplies only the
|
|
359
|
+
fixture's deterministic author and isolated tracker settings. Unrelated host
|
|
360
|
+
environment values remain available, so the test process stays representative
|
|
361
|
+
without allowing the launching agent or CI harness to change measured output.
|
|
362
|
+
|
|
356
363
|
## Linked Tests
|
|
357
364
|
|
|
358
365
|
Add tests to the item that owns the work:
|
|
@@ -399,6 +406,16 @@ When a linked command is a PM tracker-read such as `pm validate`, the default mi
|
|
|
399
406
|
`--auto-pm-context`, which keeps schema isolation for ordinary commands and routes only tracker-read PM commands
|
|
400
407
|
through seeded tracker data.
|
|
401
408
|
|
|
409
|
+
The runner resolves every selected command's effective context before it
|
|
410
|
+
creates temporary sandboxes. Runs whose effective context is schema initialize
|
|
411
|
+
only their schema roots; a non-PM command explicitly configured with
|
|
412
|
+
`pm_context_mode: "tracker"` still requires tracker data. Tracker roots and item
|
|
413
|
+
data are materialized only when at least one selected command requires tracker
|
|
414
|
+
context. This preserves source isolation without copying an unrelated tracker
|
|
415
|
+
into constrained temporary storage.
|
|
416
|
+
Capacity, permission, and resource failures while seeding a required tracker
|
|
417
|
+
surface as typed, path-redacted host-environment refusals with recovery steps.
|
|
418
|
+
|
|
402
419
|
Use explicit modes when needed:
|
|
403
420
|
|
|
404
421
|
```bash
|
|
@@ -61,7 +61,7 @@ Each measurement result carries `definition_fingerprint`; assertion verdicts cop
|
|
|
61
61
|
}
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
The semantic numerator is the sum of `discovered_from`, `incident_from`, `supersedes`, and `verifies`. Audit baselines preserve the new fields, accept older snapshots with explicit zero defaults, and report signed count/share deltas.
|
|
64
|
+
The semantic numerator is the sum of `discovered_from`, `incident_from`, `recurs_from`, `supersedes`, and `verifies`. Audit baselines preserve the new fields, accept older snapshots with explicit zero defaults, and report signed count/share deltas.
|
|
65
65
|
|
|
66
66
|
## Health Row Predicate
|
|
67
67
|
|
|
@@ -6,20 +6,20 @@
|
|
|
6
6
|
"scenarios": [
|
|
7
7
|
{
|
|
8
8
|
"id": "small-workspace",
|
|
9
|
-
"max_estimated_tokens":
|
|
9
|
+
"max_estimated_tokens": 552
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
"id": "large-workspace",
|
|
13
|
-
"max_estimated_tokens":
|
|
13
|
+
"max_estimated_tokens": 1055
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
"id": "returning-agent",
|
|
17
|
-
"max_estimated_tokens":
|
|
17
|
+
"max_estimated_tokens": 371
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
"id": "failing-command",
|
|
21
|
-
"max_estimated_tokens":
|
|
21
|
+
"max_estimated_tokens": 200
|
|
22
22
|
}
|
|
23
23
|
],
|
|
24
|
-
"composite_max_estimated_tokens":
|
|
24
|
+
"composite_max_estimated_tokens": 2178
|
|
25
25
|
}
|
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.8.
|
|
9
|
+
"version": "2026.8.18"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "pm-claude",
|
|
14
14
|
"source": "./plugins/pm-claude",
|
|
15
15
|
"description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
|
|
16
|
-
"version": "2026.8.
|
|
16
|
+
"version": "2026.8.18",
|
|
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.8.
|
|
3
|
+
"version": "2026.8.18",
|
|
4
4
|
"description": "Git-native project management CLI for humans and agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@11.10.0",
|
|
@@ -77,9 +77,9 @@
|
|
|
77
77
|
},
|
|
78
78
|
"./sdk/public-surface.json": "./sdk/public-surface.json",
|
|
79
79
|
"./cli": {
|
|
80
|
-
"types": "./dist/cli/
|
|
81
|
-
"import": "./dist/cli/
|
|
82
|
-
"default": "./dist/cli/
|
|
80
|
+
"types": "./dist/cli/public.d.ts",
|
|
81
|
+
"import": "./dist/cli/public.js",
|
|
82
|
+
"default": "./dist/cli/public.js"
|
|
83
83
|
},
|
|
84
84
|
"./package.json": "./package.json"
|
|
85
85
|
},
|
|
@@ -120,7 +120,8 @@
|
|
|
120
120
|
"lint:complexity:baseline": "eslint . --suppress-rule complexity --suppress-rule sonarjs/cognitive-complexity",
|
|
121
121
|
"lint:duplicates": "jscpd --config .jscpd.json",
|
|
122
122
|
"lint:codefactor": "pnpm quality:static",
|
|
123
|
-
"quality:static": "pnpm build && node scripts/release/repository-assurance.mjs repository-static-quality --trigger ci --json && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check && node dist/cli.js assurance run graph-composition --trigger ci --dry-run --json --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded",
|
|
123
|
+
"quality:static": "pnpm build && node scripts/release/repository-assurance.mjs repository-static-quality --trigger ci --json && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/command-grammar-gate.mjs && node dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check && node dist/cli.js assurance run graph-composition --trigger ci --dry-run --json --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded",
|
|
124
|
+
"quality:command-grammar": "pnpm build && node scripts/release/command-grammar-gate.mjs",
|
|
124
125
|
"quality:token-budget": "node scripts/release/token-budget-gate.mjs",
|
|
125
126
|
"quality:token-surface": "node scripts/measure-agent-token-surface.mjs --check",
|
|
126
127
|
"quality:token-surface:update": "pnpm build && node scripts/measure-agent-token-surface.mjs --update",
|
|
@@ -136,6 +137,7 @@
|
|
|
136
137
|
"quality:absence-tolerance": "node scripts/release/absence-tolerance-gate.mjs",
|
|
137
138
|
"quality:docs-skills": "node scripts/release/docs-skills-gate.mjs",
|
|
138
139
|
"quality:docs-links": "node scripts/release/docs-skills-gate.mjs --links-only",
|
|
140
|
+
"quality:defect-evidence": "pnpm build && node scripts/release/defect-evidence-gate.mjs",
|
|
139
141
|
"quality:hosted-analysis": "node scripts/release/hosted-analysis-gate.mjs",
|
|
140
142
|
"benchmark:scale:generate": "node scripts/bench/scale-workspace.mjs",
|
|
141
143
|
"benchmark:scale": "node scripts/bench/run-scale-benchmarks.mjs",
|
|
@@ -145,6 +147,7 @@
|
|
|
145
147
|
"benchmark:sdk-entrypoints:check": "pnpm build && node scripts/bench/sdk-entrypoint-costs.mjs --check",
|
|
146
148
|
"benchmark:transport:update": "pnpm build && node scripts/bench/cli-transport-floor.mjs --update",
|
|
147
149
|
"benchmark:transport:check": "pnpm build && node scripts/bench/cli-transport-floor.mjs --check",
|
|
150
|
+
"benchmark:defect-recurrence": "pnpm build && node scripts/bench/defect-recurrence-index.mjs --check",
|
|
148
151
|
"contracts:update": "node scripts/contracts-snapshot.mjs --update",
|
|
149
152
|
"contracts:check": "pnpm build && node scripts/contracts-snapshot.mjs --check && node scripts/generate-agent-capability-surfaces.mjs --check && node scripts/generate-error-code-catalog.mjs --check",
|
|
150
153
|
"contracts:errors:update": "node scripts/generate-error-code-catalog.mjs",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-digital-twin",
|
|
3
|
-
"version": "2026.8.
|
|
3
|
+
"version": "2026.8.18",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pm-claude",
|
|
3
3
|
"description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents (coordinator, delivery-chain, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.",
|
|
4
|
-
"version": "2026.8.
|
|
4
|
+
"version": "2026.8.18",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unbrained",
|
|
7
7
|
"url": "https://github.com/unbraind/pm-cli"
|