@unbrained/pm-cli 2026.8.20 → 2026.8.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +22 -0
- package/dist/cli/error-guidance.d.ts +20 -0
- package/dist/cli/error-guidance.js +29 -30
- package/dist/cli-bundle/bundle-manifest.json +151 -151
- package/dist/cli-bundle/chunks/chunk-2MA6ZQVZ.js +197 -0
- package/dist/cli-bundle/chunks/{chunk-K3EN3LK2.js → chunk-3AFAUHUE.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-7VHZS727.js +5 -0
- package/dist/cli-bundle/chunks/{chunk-L4LGPBJU.js → chunk-BKYB45NQ.js} +68 -68
- package/dist/cli-bundle/chunks/{chunk-4GB2LTOQ.js → chunk-BUNIEJNE.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-XYDDWBZN.js → chunk-JSLOFXGA.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-TSMWLCHS.js → chunk-LARJJ3RK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-7BRF2BX2.js → chunk-LOVTQ52Z.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-US2ZQW2M.js → chunk-N3DSV4CH.js} +47 -47
- package/dist/cli-bundle/chunks/chunk-OCLPLFAY.js +35 -0
- package/dist/cli-bundle/chunks/chunk-S4IRYKBU.js +13 -0
- package/dist/cli-bundle/chunks/{register-list-query-JSAQCVOC.js → register-list-query-F57EWDEF.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-XJPAW63D.js → register-mutation-7IY2D5KO.js} +2 -2
- package/dist/cli-bundle/chunks/{register-operations-DSOSB2XQ.js → register-operations-FALL3YTU.js} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-QUR6QL2C.js → register-setup-HXU7IZZD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-FUREQLQN.js → chunk-2NIY5NKG.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-G3C5ERXG.js → chunk-4ERLO7QD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-7WZRLCYF.js +50 -0
- package/dist/cli-bundle/focused-chunks/{chunk-AZBACT5T.js → chunk-CKKQSJNN.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-EEFKYMDR.js +16 -0
- package/dist/cli-bundle/focused-chunks/{chunk-GXWQBE3T.js → chunk-F2A56DHV.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-M32HFIQB.js → chunk-F4YEW5I2.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-UGSS4F5X.js → chunk-FH6DYED3.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-TDR5OGG3.js → chunk-FJ22HNRP.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-FV5ACOK7.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-Q47EX4DI.js → chunk-JEAVFOWM.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-OM65KHGF.js → chunk-KDNG7TKQ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-NJ63LOP6.js +155 -0
- package/dist/cli-bundle/focused-chunks/chunk-NXRTQ7HI.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-JWKEDZJI.js → chunk-TJ7EMJ46.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-5L7M4AI7.js → chunk-UZE7XUZK.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-325UXIO7.js → chunk-YKBKIEAJ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-BLJCGGID.js → chunk-ZOSEELYJ.js} +2 -2
- package/dist/cli-bundle/main.js +12 -12
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +2 -2
- package/dist/cli-bundle/sdk-core.js +40 -40
- 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 +5 -5
- package/dist/core/shared/errors.d.ts +16 -0
- package/dist/core/shared/errors.js +2 -2
- package/dist/core/store/item-store.js +6 -91
- package/dist/core/store/tracker-preflight.d.ts +7 -0
- package/dist/core/store/tracker-preflight.js +142 -0
- package/dist/sdk/agent/tracker-preflight-contracts.d.ts +63 -0
- package/dist/sdk/agent/tracker-preflight-contracts.js +127 -0
- package/dist/sdk/annotations.js +6 -7
- package/dist/sdk/config.d.ts +5 -0
- package/dist/sdk/config.js +5 -5
- package/dist/sdk/context-intent-runtime.js +7 -4
- package/dist/sdk/contracts.d.ts +1 -0
- package/dist/sdk/contracts.js +3 -2
- package/dist/sdk/dependencies.js +5 -7
- package/dist/sdk/dependency-flag-validation.d.ts +1 -1
- package/dist/sdk/dependency-flag-validation.js +10 -4
- package/dist/sdk/environment/tracker-preflight.d.ts +6 -0
- package/dist/sdk/environment/tracker-preflight.js +10 -0
- package/dist/sdk/eval.js +5 -7
- package/dist/sdk/files.js +6 -10
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +39 -3
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +69 -8
- package/dist/sdk/governance/assurance.d.ts +36 -2
- package/dist/sdk/governance/assurance.js +184 -10
- package/dist/sdk/governance/gc.js +5 -6
- package/dist/sdk/governance/health.js +5 -6
- package/dist/sdk/governance/reindex.js +5 -6
- package/dist/sdk/governance/validate.d.ts +1 -2
- package/dist/sdk/governance/validate.js +6 -12
- package/dist/sdk/graph/governance.d.ts +7 -5
- package/dist/sdk/graph/governance.js +32 -16
- package/dist/sdk/graph/run.js +5 -7
- package/dist/sdk/graph/traversal.js +14 -5
- package/dist/sdk/history-compact.js +6 -9
- package/dist/sdk/history-read.js +5 -7
- package/dist/sdk/history-redact.js +5 -6
- package/dist/sdk/history-repair.js +6 -9
- package/dist/sdk/improvement-ledger.js +7 -10
- package/dist/sdk/index.d.ts +2 -0
- package/dist/sdk/index.js +4 -2
- package/dist/sdk/lifecycle/append.d.ts +0 -5
- package/dist/sdk/lifecycle/append.js +5 -6
- package/dist/sdk/lifecycle/claim.d.ts +0 -5
- package/dist/sdk/lifecycle/claim.js +6 -9
- package/dist/sdk/lifecycle/close-many.d.ts +0 -5
- package/dist/sdk/lifecycle/close-many.js +5 -6
- package/dist/sdk/lifecycle/close.d.ts +0 -5
- package/dist/sdk/lifecycle/close.js +5 -6
- package/dist/sdk/lifecycle/copy.d.ts +0 -5
- package/dist/sdk/lifecycle/copy.js +5 -6
- package/dist/sdk/lifecycle/create.d.ts +0 -5
- package/dist/sdk/lifecycle/create.js +5 -9
- package/dist/sdk/lifecycle/delete.js +5 -6
- package/dist/sdk/lifecycle/focus.d.ts +0 -5
- package/dist/sdk/lifecycle/focus.js +5 -6
- package/dist/sdk/lifecycle/plan.d.ts +0 -5
- package/dist/sdk/lifecycle/plan.js +5 -6
- package/dist/sdk/lifecycle/restore.js +5 -6
- package/dist/sdk/lifecycle/update-many.d.ts +0 -5
- package/dist/sdk/lifecycle/update-many.js +5 -6
- package/dist/sdk/lifecycle/update.d.ts +0 -5
- package/dist/sdk/lifecycle/update.js +48 -9
- package/dist/sdk/linked-artifacts.js +6 -7
- package/dist/sdk/merge/install.js +5 -6
- package/dist/sdk/mutation-events.js +5 -7
- package/dist/sdk/package-import-adapters.js +6 -8
- package/dist/sdk/profile.js +6 -7
- package/dist/sdk/query/activity.js +5 -6
- package/dist/sdk/query/calendar.js +5 -6
- package/dist/sdk/query/get.d.ts +0 -5
- package/dist/sdk/query/get.js +5 -6
- package/dist/sdk/query/history.d.ts +0 -5
- package/dist/sdk/query/history.js +5 -6
- package/dist/sdk/query/list.js +5 -7
- package/dist/sdk/query/search.js +5 -7
- package/dist/sdk/relationship-kinds/contract.d.ts +8 -0
- package/dist/sdk/relationship-kinds/contract.js +13 -13
- package/dist/sdk/relationships.d.ts +1 -1
- package/dist/sdk/relationships.js +20 -2
- package/dist/sdk/schema-migration.js +6 -7
- package/dist/sdk/schema.js +5 -6
- package/dist/sdk/stats.js +5 -8
- package/dist/sdk/templates.js +5 -6
- package/dist/sdk/test/batch.js +5 -7
- package/dist/sdk/test/execution.js +4 -5
- package/dist/sdk/test/runs.js +5 -7
- package/docs/AGENT_UX_CONTRACTS.md +8 -1
- package/docs/DEPENDENCY_KIND_CONTRACT.md +12 -1
- package/docs/RECURRENCE_RECOVERY_CONTRACTS.md +37 -0
- package/docs/RELATIONSHIP_GRAPH.md +92 -10
- package/docs/SDK_PRIMITIVE_INVENTORY.md +15 -1
- package/marketplace.json +2 -2
- 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/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-codex/.codex-plugin/plugin.json +1 -1
- package/sdk/public-surface.json +255 -21
- package/dist/cli-bundle/chunks/chunk-2RDVGYWE.js +0 -13
- package/dist/cli-bundle/chunks/chunk-BLVQHFSY.js +0 -35
- package/dist/cli-bundle/chunks/chunk-CU25EQVV.js +0 -5
- package/dist/cli-bundle/chunks/chunk-RS3IV2R6.js +0 -197
- package/dist/cli-bundle/focused-chunks/chunk-6AHG2YW7.js +0 -50
- package/dist/cli-bundle/focused-chunks/chunk-KYZ6JGPL.js +0 -155
- package/dist/cli-bundle/focused-chunks/chunk-RIHDMCUM.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-T4ZFY7ZJ.js +0 -16
- package/dist/cli-bundle/focused-chunks/chunk-Z3PLWSGM.js +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Relationship graph semantics
|
|
2
2
|
|
|
3
|
-
Tracked by [pm-4jqm](../.agents/pm/decisions/pm-4jqm.toon), [pm-dwj33e](../.agents/pm/decisions/pm-dwj33e.toon), [pm-ju83](../.agents/pm/features/pm-ju83.toon), [pm-8xr8](../.agents/pm/stories/pm-8xr8.toon), [pm-m2il](../.agents/pm/chores/pm-m2il.toon), [pm-jiusod](../.agents/pm/issues/pm-jiusod.toon), [pm-mfvsng](../.agents/pm/issues/pm-mfvsng.toon), [pm-9gzr4r](../.agents/pm/issues/pm-9gzr4r.toon), [pm-xvt7ps](../.agents/pm/issues/pm-xvt7ps.toon),
|
|
3
|
+
Tracked by [pm-4jqm](../.agents/pm/decisions/pm-4jqm.toon), [pm-dwj33e](../.agents/pm/decisions/pm-dwj33e.toon), [pm-ju83](../.agents/pm/features/pm-ju83.toon), [pm-8xr8](../.agents/pm/stories/pm-8xr8.toon), [pm-m2il](../.agents/pm/chores/pm-m2il.toon), [pm-jiusod](../.agents/pm/issues/pm-jiusod.toon), [pm-mfvsng](../.agents/pm/issues/pm-mfvsng.toon), [pm-9gzr4r](../.agents/pm/issues/pm-9gzr4r.toon), [pm-xvt7ps](../.agents/pm/issues/pm-xvt7ps.toon), [pm-ouyq3n](../.agents/pm/issues/pm-ouyq3n.toon), [pm-ayg31c](../.agents/pm/issues/pm-ayg31c.toon), [pm-3dyec2](../.agents/pm/issues/pm-3dyec2.toon), [pm-c90tfh](../.agents/pm/issues/pm-c90tfh.toon), and [pm-ob9z4y](../.agents/pm/features/pm-ob9z4y.toon).
|
|
4
4
|
|
|
5
5
|
## Decision
|
|
6
6
|
|
|
@@ -10,7 +10,17 @@ The alternatives were rejected as follows: a closed enum cannot model applicatio
|
|
|
10
10
|
|
|
11
11
|
## Contract
|
|
12
12
|
|
|
13
|
-
Each relationship kind declares direction, inverse,
|
|
13
|
+
Each relationship kind declares direction, inverse, a traversal family,
|
|
14
|
+
optional typed-outcome traversal direction, ordering and hierarchy
|
|
15
|
+
participation, optional temporal order, incoming and outgoing cardinality,
|
|
16
|
+
lifecycle, aliases, payload schema, self-edge policy, and compatibility version.
|
|
17
|
+
Built-ins normalize legacy `related_to`, `depends_on`, `child_of`,
|
|
18
|
+
`parent_child`, `epic`, and `task` spellings. Unknown custom kinds remain
|
|
19
|
+
importable only after their definitions are registered, preventing algorithms
|
|
20
|
+
from guessing their meaning. Omitted custom traversal metadata remains
|
|
21
|
+
compatible: hierarchy and ordering declarations select their corresponding
|
|
22
|
+
families, undirected kinds are associative, and other directed kinds are
|
|
23
|
+
semantic.
|
|
14
24
|
|
|
15
25
|
`recurs_from` is the canonical recurrence relation: `new --recurs_from--> old`
|
|
16
26
|
means the source is a later event with the same observable failure identity as
|
|
@@ -153,10 +163,9 @@ await assertRelationshipGraphAdapterConformance(adapter, {
|
|
|
153
163
|
workspace: "isolated-conformance-workspace",
|
|
154
164
|
});
|
|
155
165
|
|
|
156
|
-
const portfolio = federateRelationshipGraphSnapshots(
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
);
|
|
166
|
+
const portfolio = federateRelationshipGraphSnapshots([productA, productB], {
|
|
167
|
+
createdAt: new Date().toISOString(),
|
|
168
|
+
});
|
|
160
169
|
```
|
|
161
170
|
|
|
162
171
|
`createRelationshipGraphScaleFixture` supplies reiterable lazy `nodes` and
|
|
@@ -251,6 +260,14 @@ for domain packages that need more than generic adjacency:
|
|
|
251
260
|
- `enumerateRelationshipPaths` returns bounded simple paths with edge evidence,
|
|
252
261
|
cost metadata, cancellation, direction/kind filters, and explicit truncation.
|
|
253
262
|
|
|
263
|
+
An explicit kind filter may include `traversal: "semantic"` kinds on either
|
|
264
|
+
hierarchy or ordering walks, giving package-defined lineage edges a bounded
|
|
265
|
+
semantic traversal surface without pretending that they are structural or
|
|
266
|
+
scheduling edges. Default walks remain family-strict when no kind filter is
|
|
267
|
+
provided. Association kinds refuse these walks with an `impact --direction
|
|
268
|
+
both` recovery route; selecting the other structural family points to the
|
|
269
|
+
matching hierarchy or ordering commands.
|
|
270
|
+
|
|
254
271
|
All semantic walks are breadth-first and deterministic. `limit`, `maxDepth`,
|
|
255
272
|
and `after` provide bounded continuation for hierarchy and ordering walks;
|
|
256
273
|
path enumeration separately bounds returned paths and expanded partial paths.
|
|
@@ -281,8 +298,17 @@ identities and structured rows proven to contradict scalar blocker precedence.
|
|
|
281
298
|
censuses so repair can tighten their ceilings without weakening the
|
|
282
299
|
information-bearing floor. `articulation_points` and `bridge_edges` reuse the exact cut-structure
|
|
283
300
|
algorithm; outcome metrics count explicit `Milestone` titles beginning with
|
|
284
|
-
`Outcome milestone:` and follow
|
|
285
|
-
|
|
301
|
+
`Outcome milestone:` and follow the registry's declared
|
|
302
|
+
`outcomeTraversal` directions toward them. The audit publishes that exact
|
|
303
|
+
`outcome_reachability_basis` direction groups beside the rates, using sorted
|
|
304
|
+
comma-separated kind names so consumers never infer lineage meaning from
|
|
305
|
+
labels while repeated direction labels stay out of the token surface. Built-in
|
|
306
|
+
hierarchy, implementation, verification,
|
|
307
|
+
discovery, incident, recurrence, and supersession edges opt in explicitly;
|
|
308
|
+
`supersedes` traverses both directions so an archived predecessor remains
|
|
309
|
+
connected to the replacement outcome lineage. Generic `related` and ordering
|
|
310
|
+
edges declare no outcome traversal and cannot satisfy the metric. Active and
|
|
311
|
+
terminal populations are reported separately, with integer
|
|
286
312
|
basis-point rates and all-status reachable/unreachable totals; the explicit
|
|
287
313
|
outcome milestones are roots, not work subjects, and are excluded from those
|
|
288
314
|
populations. Rate or
|
|
@@ -290,8 +316,7 @@ all-status floors are lifecycle-stable; an absolute active-population floor is
|
|
|
290
316
|
invalid because completing reachable work legitimately moves it into the
|
|
291
317
|
terminal population. `finding_subjects_by_code` includes every known finding
|
|
292
318
|
code even when its population is zero, so assurance selectors never confuse a
|
|
293
|
-
clean class with a missing contract field.
|
|
294
|
-
satisfy outcome reachability.
|
|
319
|
+
clean class with a missing contract field.
|
|
295
320
|
|
|
296
321
|
```ts
|
|
297
322
|
import {
|
|
@@ -318,6 +343,63 @@ policy findings. A VCS, company operating model, digital twin, or other
|
|
|
318
343
|
non-project domain can replace the assembly adapter while reusing the same
|
|
319
344
|
registry, traversal, event, context, and audit contracts.
|
|
320
345
|
|
|
346
|
+
### Relationship assurance sources
|
|
347
|
+
|
|
348
|
+
Repository assurance can ratchet graph quality without baking one project's
|
|
349
|
+
policy into the graph kernel. A `dependency_kind` measurement may partition a
|
|
350
|
+
canonical dependency kind by exact `source_kind`, by `source_kind_prefix`, or
|
|
351
|
+
by whether provenance is present or missing. These filters are mutually
|
|
352
|
+
exclusive and preserve the unfiltered measurement contract. This supports
|
|
353
|
+
independent evidence-backed and uncited-edge floors or ceilings while keeping
|
|
354
|
+
the dependency vocabulary extensible.
|
|
355
|
+
|
|
356
|
+
The `prose_edge_gap` source measures distinct holder-target pairs where item
|
|
357
|
+
descriptions, bodies, comments, notes, or learnings mention another canonical
|
|
358
|
+
item but no structured relationship exists in either direction. It performs one
|
|
359
|
+
bounded pass over the supplied items, resolves the collected mentions after the
|
|
360
|
+
canonical id set is complete, reports the exact gap count, partitions the result
|
|
361
|
+
into `explicit_subject` and `implicit_subject` pairs, and caps contributor
|
|
362
|
+
diagnostics with `sample_limit`. Reasoned exemptions may name a whole holder,
|
|
363
|
+
one holder-target pair, or a text fragment within one holder; an exemption
|
|
364
|
+
without a non-empty reason is invalid. This makes roadmap ledgers, negative
|
|
365
|
+
statements, and analysis subjects explicit policy rather than hidden
|
|
366
|
+
false-positive suppression.
|
|
367
|
+
|
|
368
|
+
```ts
|
|
369
|
+
const evidenceBlocks = {
|
|
370
|
+
kind: "dependency_kind" as const,
|
|
371
|
+
dependency_kind: "blocks",
|
|
372
|
+
source_kind_prefix: "evidence:",
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
const unlinkedMentions = {
|
|
376
|
+
kind: "prose_edge_gap" as const,
|
|
377
|
+
sample_limit: 25,
|
|
378
|
+
exemptions: [
|
|
379
|
+
{
|
|
380
|
+
holder_id: "roadmap-ledger",
|
|
381
|
+
reason: "The ledger inventories work without asserting pairwise edges.",
|
|
382
|
+
},
|
|
383
|
+
],
|
|
384
|
+
};
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
Assurance assertions should pin these measurements to observed repository
|
|
388
|
+
baselines: an evidence partition uses a non-regression floor, while uncited
|
|
389
|
+
edges and prose gaps use ceilings. Negative controls must prove the observed
|
|
390
|
+
value passes and a one-unit regression fails before the assertions join the
|
|
391
|
+
repository's graph-composition gate.
|
|
392
|
+
|
|
393
|
+
The scale acceptance runs the public SDK over one million items whose 999,999
|
|
394
|
+
prose mentions each have a corresponding structured edge. It verifies an exact
|
|
395
|
+
zero-gap result, bounded empty diagnostics, a 2,999,998-unit cost receipt, and
|
|
396
|
+
the real item scan count:
|
|
397
|
+
|
|
398
|
+
```bash
|
|
399
|
+
pnpm build
|
|
400
|
+
node --max-old-space-size=4096 scripts/benchmarks/prose-edge-gap-scale.mjs
|
|
401
|
+
```
|
|
402
|
+
|
|
321
403
|
The native workspace adapter is `pm graph <subcommand>`, also available as
|
|
322
404
|
`PmClient.graph`, `runAction({ action: "graph" })`, and the MCP `pm_graph`
|
|
323
405
|
tool. `ancestors`/`descendants`/`predecessors`/`successors` expose the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# SDK Primitive Inventory
|
|
2
2
|
|
|
3
|
-
Tracked work: [pm-lodl](../.agents/pm/tasks/pm-lodl.toon), [pm-8778](../.agents/pm/tasks/pm-8778.toon), [pm-rjqr](../.agents/pm/features/pm-rjqr.toon), [pm-oslr](../.agents/pm/features/pm-oslr.toon), capstone [pm-9x6e](../.agents/pm/tasks/pm-9x6e.toon), parent [pm-usfg](../.agents/pm/epics/pm-usfg.toon).
|
|
3
|
+
Tracked work: [pm-lodl](../.agents/pm/tasks/pm-lodl.toon), [pm-8778](../.agents/pm/tasks/pm-8778.toon), [pm-rjqr](../.agents/pm/features/pm-rjqr.toon), [pm-oslr](../.agents/pm/features/pm-oslr.toon), [pm-6qiwan](../.agents/pm/chores/pm-6qiwan.toon), capstone [pm-9x6e](../.agents/pm/tasks/pm-9x6e.toon), parent [pm-usfg](../.agents/pm/epics/pm-usfg.toon).
|
|
4
4
|
|
|
5
5
|
This inventory records the completed SDK-first migration for the principle `project management = context management`.
|
|
6
6
|
CLI and MCP modules now import shared host services through `src/sdk/runtime-primitives.ts`; direct `src/core` imports, type-only edges, re-exports, and computed dynamic imports are unconditionally rejected by the static quality gate. There is no allowance file or ratchet escape hatch.
|
|
@@ -18,6 +18,20 @@ CLI and MCP modules now import shared host services through `src/sdk/runtime-pri
|
|
|
18
18
|
|
|
19
19
|
`src/sdk/runtime-primitives.ts` is the curated low-level seam for presentation hosts. It exposes filesystem, schema, history, extension-runtime, telemetry, search, output, and storage services needed to compose the shipped CLI and MCP adapters. External integrations should still prefer typed `PmClient` and top-level SDK operations; runtime primitives exist for embedded hosts that need to build an equivalent presentation layer without private imports.
|
|
20
20
|
|
|
21
|
+
## Tracker Preflight Primitive
|
|
22
|
+
|
|
23
|
+
`assertInitializedTracker` is the shared SDK boundary for commands that require
|
|
24
|
+
an initialized project, while `assertReadableTrackerRoot` supports low-level
|
|
25
|
+
metadata enumeration that intentionally accepts an empty directory. The former
|
|
26
|
+
replaced 50 literal checks across 45 SDK modules. It preserves one structured
|
|
27
|
+
error vocabulary and one exact recovery contract for CLI, MCP dispatch through
|
|
28
|
+
the SDK runtime, first-party packages, and external SDK consumers.
|
|
29
|
+
|
|
30
|
+
The preflight is public from the aggregate SDK; its four-state static recovery
|
|
31
|
+
corpus is also public from `@unbrained/pm-cli/sdk/contracts`. A source-derived
|
|
32
|
+
ratchet prevents the adoption count from falling below 50 and refuses the old
|
|
33
|
+
inline tracker-not-initialized message anywhere under `src/sdk`.
|
|
34
|
+
|
|
21
35
|
## Promotion Partition
|
|
22
36
|
|
|
23
37
|
| Promotion item | Primitive family | Primary private domains to promote |
|
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.21"
|
|
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.21",
|
|
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-digital-twin",
|
|
3
|
-
"version": "2026.8.
|
|
3
|
+
"version": "2026.8.21",
|
|
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.21",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unbrained",
|
|
7
7
|
"url": "https://github.com/unbraind/pm-cli"
|