@unbrained/pm-cli 2026.8.15 → 2026.8.16
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 +26 -9
- package/dist/cli/error-guidance.d.ts +5 -0
- package/dist/cli/error-guidance.js +15 -2
- package/dist/cli/register-history-author.js +16 -11
- package/dist/cli-bundle/bundle-manifest.json +142 -142
- package/dist/cli-bundle/chunks/{chunk-KIEGUBYQ.js → chunk-47OQEOQB.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-WLPDLNEZ.js → chunk-73UGEBRS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QHPCJWEJ.js → chunk-HCIYWD6M.js} +34 -34
- package/dist/cli-bundle/chunks/{chunk-J42EGKDK.js → chunk-I2LUWWR5.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KLKYLSDX.js → chunk-IC5W2T34.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-AIM6VT2N.js → chunk-PANOOBIS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-MEM2ZS3O.js → chunk-RIS565OA.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-24GAV7XL.js → chunk-TK6N7HGM.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-TOFG2URD.js +197 -0
- package/dist/cli-bundle/chunks/{chunk-LJHOAVGI.js → chunk-URW4QRMI.js} +47 -41
- package/dist/cli-bundle/chunks/{register-list-query-CT3LFDDN.js → register-list-query-EYCXHZAG.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-NWEVA5YS.js → register-mutation-7YVIG54J.js} +4 -4
- package/dist/cli-bundle/chunks/{register-operations-AHIAG5KM.js → register-operations-KGDNRMCL.js} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-ZJZFVAKE.js → register-setup-NVXBOD5I.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-KTKH4IMG.js → chunk-4JPEBFFC.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-5NMFSX26.js +155 -0
- package/dist/cli-bundle/focused-chunks/{chunk-ZMFXQ7VF.js → chunk-6ROKKT4X.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-OKA6ELTL.js → chunk-725JSCMP.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-6XKF3PGV.js → chunk-C7JUBRFP.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-KLVUMNXJ.js → chunk-CODV5LUT.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-DQ6SMTBF.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-HAACPSUW.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-EXZA4257.js → chunk-J4UFYHOD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-7NJ4QYQ2.js → chunk-JX5Z344Q.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-PUISBOPP.js → chunk-L4RDYBIQ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-NSPYTG6G.js → chunk-NJ5RLEFD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-KT5XMYSX.js → chunk-QYZERYR5.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-M67F5AIN.js → chunk-SSNDYZTM.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-ITAUHSO6.js → chunk-T46KLOIB.js} +45 -45
- package/dist/cli-bundle/focused-chunks/{chunk-WTSER4WJ.js → chunk-TZATVC4G.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-WY3WRPVN.js +2 -0
- package/dist/cli-bundle/main.js +10 -10
- 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 +27 -27
- 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 +2 -2
- package/dist/core/history/workspace-history.js +32 -10
- package/dist/core/output/output.js +6 -3
- package/dist/core/shared/errors.d.ts +2 -0
- package/dist/core/shared/errors.js +2 -2
- package/dist/core/store/item-store.js +28 -2
- package/dist/sdk/agent/refusal-reachability.d.ts +10 -2
- package/dist/sdk/agent/refusal-reachability.js +71 -3
- package/dist/sdk/author-attribution.d.ts +56 -11
- package/dist/sdk/author-attribution.js +174 -50
- package/dist/sdk/cli-contracts/flag-contracts.js +5 -2
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +9 -2
- package/dist/sdk/cli-contracts/tool-schema.js +12 -4
- package/dist/sdk/completion.js +11 -4
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +38 -14
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +38 -2
- package/dist/sdk/governance/coverage-assurance.d.ts +24 -0
- package/dist/sdk/governance/coverage-assurance.js +61 -0
- package/dist/sdk/governance/extension-host-version.js +20 -9
- package/dist/sdk/index.d.ts +2 -1
- package/dist/sdk/index.js +4 -3
- package/dist/sdk/read-output-contracts.js +5 -3
- package/dist/sdk/runtime.d.ts +2 -5
- package/dist/sdk/runtime.js +3 -2
- package/docs/READ_OUTPUT_CONTRACTS.md +7 -1
- package/docs/RELEASING.md +13 -7
- package/docs/SDK_CONTEXT_INTEGRITY.md +33 -5
- package/docs/SDK_CONTEXT_TRUTH_CONTRACTS.md +13 -5
- 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 +131 -16
- package/dist/cli-bundle/chunks/chunk-DSWDLTDR.js +0 -197
- package/dist/cli-bundle/focused-chunks/chunk-4X57RE4U.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-QLNMCESQ.js +0 -155
- package/dist/cli-bundle/focused-chunks/chunk-SLKC6QLJ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-U65UC4G3.js +0 -2
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module sdk/governance/coverage-assurance
|
|
3
|
+
*
|
|
4
|
+
* Provides exact integer coverage assurance for repository and package gates.
|
|
5
|
+
*/
|
|
6
|
+
/** Coverage metrics required by the exact repository quality contract. */
|
|
7
|
+
|
|
8
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="340305b6-e3c8-5daa-bfbe-4a9c62a6d039")}catch(e){}}();
|
|
9
|
+
export const PM_EXACT_COVERAGE_METRICS = [
|
|
10
|
+
"lines",
|
|
11
|
+
"branches",
|
|
12
|
+
"functions",
|
|
13
|
+
"statements",
|
|
14
|
+
];
|
|
15
|
+
/** Require a coverage report entry to expose an object-shaped metric map. */
|
|
16
|
+
function assertCoverageEntry(file, entry) {
|
|
17
|
+
if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
|
|
18
|
+
throw new TypeError(`Coverage entry for ${file} must be an object.`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Return exact validated counts for one required metric. */
|
|
22
|
+
function coverageCounts(file, metric, value) {
|
|
23
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
24
|
+
throw new TypeError(`Coverage entry ${file} has invalid ${metric} counts.`);
|
|
25
|
+
}
|
|
26
|
+
const counts = value;
|
|
27
|
+
if (typeof counts.covered !== "number" ||
|
|
28
|
+
typeof counts.total !== "number" ||
|
|
29
|
+
!Number.isInteger(counts.covered) ||
|
|
30
|
+
!Number.isInteger(counts.total) ||
|
|
31
|
+
counts.covered < 0 ||
|
|
32
|
+
counts.total < counts.covered) {
|
|
33
|
+
throw new TypeError(`Coverage entry ${file} has invalid ${metric} counts.`);
|
|
34
|
+
}
|
|
35
|
+
return { covered: counts.covered, total: counts.total };
|
|
36
|
+
}
|
|
37
|
+
/** Return exact uncovered counts for every summary entry and required metric. */
|
|
38
|
+
export function findCoverageDeficits(summary) {
|
|
39
|
+
if (typeof summary !== "object" ||
|
|
40
|
+
summary === null ||
|
|
41
|
+
Array.isArray(summary)) {
|
|
42
|
+
throw new TypeError("Coverage summary must be a JSON object.");
|
|
43
|
+
}
|
|
44
|
+
if (!("total" in summary)) {
|
|
45
|
+
throw new TypeError("Coverage summary is missing the total entry.");
|
|
46
|
+
}
|
|
47
|
+
const deficits = [];
|
|
48
|
+
for (const [file, entry] of Object.entries(summary)) {
|
|
49
|
+
assertCoverageEntry(file, entry);
|
|
50
|
+
for (const metric of PM_EXACT_COVERAGE_METRICS) {
|
|
51
|
+
const counts = coverageCounts(file, metric, entry[metric]);
|
|
52
|
+
const uncovered = counts.total - counts.covered;
|
|
53
|
+
if (uncovered > 0) {
|
|
54
|
+
deficits.push({ file, metric, uncovered, ...counts });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return deficits;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=coverage-assurance.js.map
|
|
61
|
+
//# debugId=340305b6-e3c8-5daa-bfbe-4a9c62a6d039
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* package-manager layout skew is visible before SDK singleton state diverges.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
8
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c21b1a94-1d80-57c0-b090-c4831fc505a2")}catch(e){}}();
|
|
9
9
|
import fs from "node:fs/promises";
|
|
10
10
|
import { createRequire } from "node:module";
|
|
11
11
|
import path from "node:path";
|
|
@@ -48,17 +48,27 @@ async function readPackageVersion(packageJsonPath) {
|
|
|
48
48
|
return undefined;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
+
/** Resolve symlink and platform alias segments without failing soft scans for absent hosts. */
|
|
52
|
+
async function canonicalPath(candidate) {
|
|
53
|
+
try {
|
|
54
|
+
return await fs.realpath(candidate);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return path.resolve(candidate);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
51
60
|
/** Scan the host plus the nearest pm-cli package resolvable by every loaded extension. */
|
|
52
61
|
export async function scanExtensionHostVersions(loadedExtensions, workspaceRoot, hostPackageRoot = resolvePmPackageRootFromModule(import.meta.url, [
|
|
53
62
|
"../../..",
|
|
54
63
|
])) {
|
|
55
|
-
const
|
|
64
|
+
const canonicalWorkspaceRoot = await canonicalPath(workspaceRoot);
|
|
65
|
+
const hostPackageJson = await canonicalPath(path.join(hostPackageRoot, "package.json"));
|
|
56
66
|
const hostVersion = await readPackageVersion(hostPackageJson);
|
|
57
67
|
const copies = new Map();
|
|
58
68
|
if (hostVersion !== undefined) {
|
|
59
|
-
copies.set(
|
|
69
|
+
copies.set(hostPackageJson, {
|
|
60
70
|
version: hostVersion,
|
|
61
|
-
path: displayPackagePath(hostPackageJson,
|
|
71
|
+
path: displayPackagePath(hostPackageJson, canonicalWorkspaceRoot),
|
|
62
72
|
layout: "host",
|
|
63
73
|
consumers: ["pm-cli-host"],
|
|
64
74
|
});
|
|
@@ -66,10 +76,11 @@ export async function scanExtensionHostVersions(loadedExtensions, workspaceRoot,
|
|
|
66
76
|
for (const extension of loadedExtensions) {
|
|
67
77
|
try {
|
|
68
78
|
const resolved = createRequire(extension.entry_path).resolve("@unbrained/pm-cli/package.json");
|
|
69
|
-
const
|
|
79
|
+
const canonicalPackageJson = await canonicalPath(resolved);
|
|
80
|
+
const version = await readPackageVersion(canonicalPackageJson);
|
|
70
81
|
if (version === undefined)
|
|
71
82
|
continue;
|
|
72
|
-
const key =
|
|
83
|
+
const key = canonicalPackageJson;
|
|
73
84
|
const existing = copies.get(key);
|
|
74
85
|
if (existing) {
|
|
75
86
|
if (!existing.consumers.includes(extension.name)) {
|
|
@@ -80,8 +91,8 @@ export async function scanExtensionHostVersions(loadedExtensions, workspaceRoot,
|
|
|
80
91
|
}
|
|
81
92
|
copies.set(key, {
|
|
82
93
|
version,
|
|
83
|
-
path: displayPackagePath(
|
|
84
|
-
layout: dependencyLayout(
|
|
94
|
+
path: displayPackagePath(canonicalPackageJson, canonicalWorkspaceRoot),
|
|
95
|
+
layout: dependencyLayout(canonicalPackageJson),
|
|
85
96
|
consumers: [extension.name],
|
|
86
97
|
});
|
|
87
98
|
}
|
|
@@ -102,4 +113,4 @@ export async function scanExtensionHostVersions(loadedExtensions, workspaceRoot,
|
|
|
102
113
|
};
|
|
103
114
|
}
|
|
104
115
|
//# sourceMappingURL=extension-host-version.js.map
|
|
105
|
-
//# debugId=
|
|
116
|
+
//# debugId=c21b1a94-1d80-57c0-b090-c4831fc505a2
|
package/dist/sdk/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export { PM_COMMAND_VISIBILITY_CONTRACTS, PM_MCP_PROMPT_CONTRACTS, PM_MCP_RESOUR
|
|
|
7
7
|
export * from "./agent-session-context.js";
|
|
8
8
|
export type { PmCommandVisibilityContract, PmCommandVisibilityTier, PmMcpPromptArgumentContract, PmMcpPromptContract, PmMcpResourceContract, PmMcpToolProfile, } from "./agent-capability-contracts.js";
|
|
9
9
|
export { isErrnoError, limitAnnotationEntries, parseAnnotationTextInput, readAnnotationEntries, normalizeAnnotationTransportOptions, resolveAnnotationInput, resolveAnnotationIndex, runAnnotationCommand, wrapOwnershipConflict, type AnnotationCommandConfig, type AnnotationCommandOptions, type AnnotationCommandResult, type AnnotationEntry, type AnnotationInput, type AnnotationHistoryRestoration, type AnnotationMutationReceipt, type AnnotationOmissionReceipt, type AnnotationSourceOptions, type OwnershipConflictGuidance, } from "./annotations.js";
|
|
10
|
-
export { acknowledgeUnknownAuthorHistoryEvents, acknowledgeUnknownAuthorHistoryEventsFromTransport, inspectHistoryAuthorStream, parseUnknownAuthorHistoryEventCoordinates, resolveUnknownAuthorAcknowledgmentSelector, scanHistoryAuthorAttribution, type AcknowledgeUnknownAuthorEventsOptions, type HistoryAuthorAttributionScan, type UnknownAuthorHistoryEvent, } from "./author-attribution.js";
|
|
10
|
+
export { acknowledgeUnknownAuthorHistoryEvents, acknowledgeUnknownAuthorHistoryEventsFromTransport, inspectHistoryAuthorStream, parseUnknownAuthorHistoryEventCoordinates, planUnknownAuthorHistoryAcknowledgment, resolveUnknownAuthorAcknowledgmentSelector, scanHistoryAuthorAttribution, type AcknowledgeUnknownAuthorEventsOptions, type HistoryAuthorAttributionScan, type UnknownAuthorAcknowledgmentPlan, type UnknownAuthorAcknowledgmentPlanCoordinate, type UnknownAuthorAcknowledgmentResult, type UnknownAuthorHistoryEvent, } from "./author-attribution.js";
|
|
11
11
|
export { BUILTIN_CORPUS_SHAPES, PM_CORPUS_SHAPE_SCHEMA, buildCorpusShapeItemPlan, createCorpusShapeMeasurement, defineCorpusShape, listBuiltinCorpusShapes, measureCorpusShapePlan, resolveBuiltinCorpusShape, type BuiltinCorpusShapeName, type CorpusShape, type CorpusShapeEdgeWeight, type CorpusShapeItemPlan, type CorpusShapeMeasurement, type CorpusShapeProfile, } from "./corpus-shape.js";
|
|
12
12
|
export * from "./core-governance.js";
|
|
13
13
|
export { createPmCliProgram } from "./cli-program.js";
|
|
@@ -22,6 +22,7 @@ export * from "./agent/command-suggestions.js";
|
|
|
22
22
|
export * from "./agent/item-addressing.js";
|
|
23
23
|
export * from "./agent/create-option-policy.js";
|
|
24
24
|
export { runGc, type GcCheckpointsSummary, type GcLocksSummary, } from "./governance/gc.js";
|
|
25
|
+
export { PM_EXACT_COVERAGE_METRICS, findCoverageDeficits, type PmCoverageDeficit, type PmExactCoverageMetric, } from "./governance/coverage-assurance.js";
|
|
25
26
|
export { _testOnlyHealthCommand, runHealth, type HealthCheck, } from "./governance/health.js";
|
|
26
27
|
export { _testOnlyValidateCommand, projectValidateCounts, runValidate, type ValidateCheck, type ValidateCountsFixesSummary, type ValidateCountsResult, type ValidateFixesSummary, type ValidateMutationServices, } from "./governance/validate.js";
|
|
27
28
|
export { runExtension, type ExtensionCommandAction } from "./extension.js";
|
package/dist/sdk/index.js
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* Defines public SDK APIs and package-author helpers for Index.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
7
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9ec91496-fc1e-5be5-a8e8-145d884b0ef7")}catch(e){}}();
|
|
8
8
|
export { PM_COMMAND_VISIBILITY_CONTRACTS, PM_MCP_PROMPT_CONTRACTS, PM_MCP_RESOURCE_CONTRACTS, PM_MCP_TOOL_COMMAND_CONTRACTS, listPmCommandsForTier, listPmMcpToolsForProfile, renderPmCommandVisibilityMarkdown, resolvePmCommandVisibilityTier, } from "./agent-capability-contracts.js";
|
|
9
9
|
export * from "./agent-session-context.js";
|
|
10
10
|
export { isErrnoError, limitAnnotationEntries, parseAnnotationTextInput, readAnnotationEntries, normalizeAnnotationTransportOptions, resolveAnnotationInput, resolveAnnotationIndex, runAnnotationCommand, wrapOwnershipConflict, } from "./annotations.js";
|
|
11
|
-
export { acknowledgeUnknownAuthorHistoryEvents, acknowledgeUnknownAuthorHistoryEventsFromTransport, inspectHistoryAuthorStream, parseUnknownAuthorHistoryEventCoordinates, resolveUnknownAuthorAcknowledgmentSelector, scanHistoryAuthorAttribution, } from "./author-attribution.js";
|
|
11
|
+
export { acknowledgeUnknownAuthorHistoryEvents, acknowledgeUnknownAuthorHistoryEventsFromTransport, inspectHistoryAuthorStream, parseUnknownAuthorHistoryEventCoordinates, planUnknownAuthorHistoryAcknowledgment, resolveUnknownAuthorAcknowledgmentSelector, scanHistoryAuthorAttribution, } from "./author-attribution.js";
|
|
12
12
|
export { BUILTIN_CORPUS_SHAPES, PM_CORPUS_SHAPE_SCHEMA, buildCorpusShapeItemPlan, createCorpusShapeMeasurement, defineCorpusShape, listBuiltinCorpusShapes, measureCorpusShapePlan, resolveBuiltinCorpusShape, } from "./corpus-shape.js";
|
|
13
13
|
export * from "./core-governance.js";
|
|
14
14
|
export { createPmCliProgram } from "./cli-program.js";
|
|
@@ -23,6 +23,7 @@ export * from "./agent/command-suggestions.js";
|
|
|
23
23
|
export * from "./agent/item-addressing.js";
|
|
24
24
|
export * from "./agent/create-option-policy.js";
|
|
25
25
|
export { runGc, } from "./governance/gc.js";
|
|
26
|
+
export { PM_EXACT_COVERAGE_METRICS, findCoverageDeficits, } from "./governance/coverage-assurance.js";
|
|
26
27
|
export { _testOnlyHealthCommand, runHealth, } from "./governance/health.js";
|
|
27
28
|
export { _testOnlyValidateCommand, projectValidateCounts, runValidate, } from "./governance/validate.js";
|
|
28
29
|
export { runExtension } from "./extension.js";
|
|
@@ -151,4 +152,4 @@ export * from "./governance.js";
|
|
|
151
152
|
export * from "./query.js";
|
|
152
153
|
export * from "./testing.js";
|
|
153
154
|
//# sourceMappingURL=index.js.map
|
|
154
|
-
//# debugId=
|
|
155
|
+
//# debugId=9ec91496-fc1e-5be5-a8e8-145d884b0ef7
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* surface without coupling package authors to command-specific option names.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
8
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e9621264-0180-53cf-862f-b59640b971da")}catch(e){}}();
|
|
9
9
|
import { EXIT_CODE } from "../core/shared/constants.js";
|
|
10
10
|
import { PmCliError } from "../core/shared/errors.js";
|
|
11
11
|
import { compactReadOutputToBudget, estimateReadOutputTokens, updateReadOutputReceiptEstimate, } from "./read-output-budget.js";
|
|
@@ -499,7 +499,9 @@ export function resolveReadOutputDimensions(command, options) {
|
|
|
499
499
|
const encoding = resolveEncodingValue(options.outputFormat ?? options.output_format, legacyByDimension.encoding);
|
|
500
500
|
const explicitCost = resolveCostValue(options.outputBudget ?? options.output_budget, legacyByDimension.cost);
|
|
501
501
|
const completeResultIntent = command.trim().toLowerCase().replaceAll(/\s+/gu, " ").split(" ")[0] ===
|
|
502
|
-
"list-all" ||
|
|
502
|
+
"list-all" ||
|
|
503
|
+
legacyByDimension.amount?.flag === "--no-truncate" ||
|
|
504
|
+
legacyByDimension.include?.flag === "--full";
|
|
503
505
|
const budget = resolvePmCommandOutputBudget(command, {
|
|
504
506
|
generateFallback: true,
|
|
505
507
|
});
|
|
@@ -1056,4 +1058,4 @@ export function resolveReadOutputEncoding(command, options) {
|
|
|
1056
1058
|
: undefined;
|
|
1057
1059
|
}
|
|
1058
1060
|
//# sourceMappingURL=read-output-contracts.js.map
|
|
1059
|
-
//# debugId=
|
|
1061
|
+
//# debugId=e9621264-0180-53cf-862f-b59640b971da
|
package/dist/sdk/runtime.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ import { type GcCommandOptions, type GcResult } from "./governance/gc.js";
|
|
|
33
33
|
import { type HealthResult, type RunHealthOptions } from "./governance/health.js";
|
|
34
34
|
import { type ValidateCommandOptions, type ValidateCountsResult, type ValidateResult } from "./governance/validate.js";
|
|
35
35
|
import { type ExtensionCommandOptions, type ExtensionCommandResult } from "./extension.js";
|
|
36
|
-
import { type AcknowledgeUnknownAuthorEventsOptions } from "./author-attribution.js";
|
|
36
|
+
import { type AcknowledgeUnknownAuthorEventsOptions, type UnknownAuthorAcknowledgmentResult } from "./author-attribution.js";
|
|
37
37
|
import { type HistoryCompactBulkCommandOptions, type HistoryCompactBulkResult, type HistoryCompactCommandOptions, type HistoryCompactResult } from "./history-compact.js";
|
|
38
38
|
import { type HistoryRedactCommandOptions, type HistoryRedactResult } from "./history-redact.js";
|
|
39
39
|
import { type HistoryRepairAllResult, type HistoryRepairCommandOptions, type HistoryRepairResult } from "./history-repair.js";
|
|
@@ -250,10 +250,7 @@ export declare class PmClient {
|
|
|
250
250
|
/** Compact an explicit or policy-selected set of history streams. */
|
|
251
251
|
historyCompactBulk(options: HistoryCompactBulkCommandOptions): Promise<HistoryCompactBulkResult>;
|
|
252
252
|
/** Disposition immutable unknown-author events through append-only audit history. */
|
|
253
|
-
historyAuthorAcknowledge(options: AcknowledgeUnknownAuthorEventsOptions): Promise<
|
|
254
|
-
acknowledged: number;
|
|
255
|
-
history_path: string;
|
|
256
|
-
}>;
|
|
253
|
+
historyAuthorAcknowledge(options: AcknowledgeUnknownAuthorEventsOptions): Promise<UnknownAuthorAcknowledgmentResult>;
|
|
257
254
|
/** Run any typed plan workflow primitive through the shared CLI/MCP engine. */
|
|
258
255
|
plan(subcommand: PlanSubcommand, id?: string, options?: PlanCommandOptions, stepRef?: string, reorderTo?: number): Promise<PlanCommandResult>;
|
|
259
256
|
/** Create a durable plan with optional ordered seed steps. */
|
package/dist/sdk/runtime.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Defines public SDK APIs and package-author helpers for Runtime.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
7
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="bedbe090-60c3-5935-a656-da4997cd80f7")}catch(e){}}();
|
|
8
8
|
export { PM_GITIGNORE_END, PM_GITIGNORE_START, ensurePmGitignore, getPmGitignoreBlock, } from "./workspace.js";
|
|
9
9
|
export { SEARCH_EXTENSION_FLAG_DEFINITIONS } from "./extension-contracts.js";
|
|
10
10
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
@@ -442,6 +442,7 @@ export class PmClient {
|
|
|
442
442
|
return this.runTyped("history-author-acknowledge", {
|
|
443
443
|
historyEvent: (options.events ?? []).map((event) => `${event.item_id}:${String(event.line)}`),
|
|
444
444
|
allActionable: options.all_actionable === true,
|
|
445
|
+
dryRun: options.dry_run === true, planFingerprint: options.plan_fingerprint, limit: options.coordinate_limit,
|
|
445
446
|
attributedAuthor: options.attributed_author,
|
|
446
447
|
reviewer: options.reviewer,
|
|
447
448
|
reason: options.reason,
|
|
@@ -1932,4 +1933,4 @@ async function loadWorkspaceExtensionRegistrations(pmRoot, settings, cwd) {
|
|
|
1932
1933
|
}
|
|
1933
1934
|
}
|
|
1934
1935
|
//# sourceMappingURL=runtime.js.map
|
|
1935
|
-
//# debugId=
|
|
1936
|
+
//# debugId=bedbe090-60c3-5935-a656-da4997cd80f7
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Universal Read Output Contracts
|
|
2
2
|
|
|
3
|
-
Tracker references: [pm-hb7ug8](../.agents/pm/features/pm-hb7ug8.toon), [pm-cxr0jb](../.agents/pm/features/pm-cxr0jb.toon), [pm-hid9g1](../.agents/pm/features/pm-hid9g1.toon), [pm-h8tpeh](../.agents/pm/features/pm-h8tpeh.toon), [pm-5t33or](../.agents/pm/features/pm-5t33or.toon), [pm-sb0tns](../.agents/pm/issues/pm-sb0tns.toon), [pm-gjjurs](../.agents/pm/issues/pm-gjjurs.toon), [pm-eugaqy](../.agents/pm/issues/pm-eugaqy.toon), [pm-jt8aa2](../.agents/pm/issues/pm-jt8aa2.toon), [pm-kyjdne](../.agents/pm/issues/pm-kyjdne.toon), [pm-8nev0o](../.agents/pm/issues/pm-8nev0o.toon), [pm-e5gl05](../.agents/pm/issues/pm-e5gl05.toon),
|
|
3
|
+
Tracker references: [pm-hb7ug8](../.agents/pm/features/pm-hb7ug8.toon), [pm-cxr0jb](../.agents/pm/features/pm-cxr0jb.toon), [pm-hid9g1](../.agents/pm/features/pm-hid9g1.toon), [pm-h8tpeh](../.agents/pm/features/pm-h8tpeh.toon), [pm-5t33or](../.agents/pm/features/pm-5t33or.toon), [pm-sb0tns](../.agents/pm/issues/pm-sb0tns.toon), [pm-gjjurs](../.agents/pm/issues/pm-gjjurs.toon), [pm-eugaqy](../.agents/pm/issues/pm-eugaqy.toon), [pm-jt8aa2](../.agents/pm/issues/pm-jt8aa2.toon), [pm-kyjdne](../.agents/pm/issues/pm-kyjdne.toon), [pm-8nev0o](../.agents/pm/issues/pm-8nev0o.toon), [pm-e5gl05](../.agents/pm/issues/pm-e5gl05.toon), [pm-cha95z](../.agents/pm/tasks/pm-cha95z.toon), and [pm-2qvq7a](../.agents/pm/issues/pm-2qvq7a.toon).
|
|
4
4
|
|
|
5
5
|
## Agent Quick Context
|
|
6
6
|
|
|
@@ -122,6 +122,12 @@ list-family `--no-truncate` imply an unbounded cost dimension when the caller
|
|
|
122
122
|
does not supply `--output-budget`; they cannot silently return a budget-trimmed
|
|
123
123
|
subset while claiming to return every matched row. An explicit canonical
|
|
124
124
|
budget still has precedence and may request a bounded result deliberately.
|
|
125
|
+
The same SDK-native rule applies to every declared complete-result spelling,
|
|
126
|
+
including `contracts --full`: explicit completeness defeats only the implicit
|
|
127
|
+
default ceiling. If an explicit caller budget cannot retain any useful domain
|
|
128
|
+
result, the CLI still prints the parseable omission receipt but exits 2; a
|
|
129
|
+
consumer therefore cannot interpret the missing command or action arrays as a
|
|
130
|
+
successful empty contract.
|
|
125
131
|
|
|
126
132
|
```bash
|
|
127
133
|
pm list-open --output-include id,title,status --output-limit 10
|
package/docs/RELEASING.md
CHANGED
|
@@ -25,7 +25,9 @@ Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon),
|
|
|
25
25
|
classification [pm-dqtzva](../.agents/pm/issues/pm-dqtzva.toon).
|
|
26
26
|
The local/hosted gate selection contract is tracked by
|
|
27
27
|
[pm-ei6x66](../.agents/pm/tasks/pm-ei6x66.toon). Release-candidate analyzer
|
|
28
|
-
provenance is tracked by [pm-u1baah](../.agents/pm/issues/pm-u1baah.toon)
|
|
28
|
+
provenance is tracked by [pm-u1baah](../.agents/pm/issues/pm-u1baah.toon), and
|
|
29
|
+
authoritative blocker-recovery run selection by
|
|
30
|
+
[pm-db8onn](../.agents/pm/issues/pm-db8onn.toon).
|
|
29
31
|
|
|
30
32
|
## Version Policy
|
|
31
33
|
|
|
@@ -76,9 +78,10 @@ Policy:
|
|
|
76
78
|
created, a non-`github-actions[bot]` closure of the exact bot-created
|
|
77
79
|
`Auto Release blocked` issue on the same UTC day triggers one preparation
|
|
78
80
|
retry
|
|
79
|
-
- if today's tag already exists, blocker closure
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
- if today's tag already exists, blocker closure bypasses release-preparation
|
|
82
|
+
provenance, dependency installation, and build work, then selects immutable
|
|
83
|
+
Release evidence across both tag-push and guarded workflow-dispatch runs; a
|
|
84
|
+
completed success is authoritative over stale failures and is recorded as
|
|
82
85
|
recovered without republishing
|
|
83
86
|
- release preparation must pass all quality and compatibility gates before commit+tag push
|
|
84
87
|
- before dependency installation or build, auto-release verifies that the
|
|
@@ -92,9 +95,12 @@ Policy:
|
|
|
92
95
|
- when scheduled failures continue across multiple UTC days, auto-release supersedes a stale open blocker with a fresh current-day blocker so same-day retry detection follows the latest scheduled failure
|
|
93
96
|
- closing the exact bot-created `Auto Release blocked: scheduled run failed`
|
|
94
97
|
issue as a maintainer or agent records a same-day retry marker, then either
|
|
95
|
-
retries preparation when no tag exists or
|
|
96
|
-
|
|
97
|
-
|
|
98
|
+
retries preparation when no tag exists or watches an active exact-tag Release
|
|
99
|
+
workflow. If only failed or missing evidence exists, it dispatches the
|
|
100
|
+
reviewed current `release.yml` from `main` with the immutable tag input; it
|
|
101
|
+
never reruns historical workflow code. It comments with the recovered tag on
|
|
102
|
+
success and reopens the same issue on failure. A second close on the same UTC
|
|
103
|
+
day is refused
|
|
98
104
|
before release mutation and reported as `retry_already_attempted`, and
|
|
99
105
|
workflow cleanup closures by `github-actions[bot]` are ignored.
|
|
100
106
|
- after a scheduled run publishes a tag and the downstream release workflow succeeds, auto-release closes any open `Auto Release blocked` issue so the GitHub tracker reflects current release health
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# SDK Context Integrity
|
|
2
2
|
|
|
3
|
-
Tracker: [pm-0k19l7](../.agents/pm/issues/pm-0k19l7.toon), [pm-9stazf](../.agents/pm/issues/pm-9stazf.toon), [pm-tu71](../.agents/pm/issues/pm-tu71.toon), [pm-0xmajx](../.agents/pm/issues/pm-0xmajx.toon), [pm-7rrqsk](../.agents/pm/issues/pm-7rrqsk.toon), [pm-ety1qc](../.agents/pm/issues/pm-ety1qc.toon), [pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon), [pm-5y05kq](../.agents/pm/issues/pm-5y05kq.toon), [pm-gjjurs](../.agents/pm/issues/pm-gjjurs.toon), [pm-h97qxd](../.agents/pm/issues/pm-h97qxd.toon), [pm-h06944](../.agents/pm/issues/pm-h06944.toon), [pm-5t33or](../.agents/pm/features/pm-5t33or.toon), [pm-in23qu](../.agents/pm/issues/pm-in23qu.toon), [pm-h8tpeh](../.agents/pm/features/pm-h8tpeh.toon), [pm-okgxwa](../.agents/pm/issues/pm-okgxwa.toon), [pm-22rzjp](../.agents/pm/issues/pm-22rzjp.toon), [pm-76fkpp](../.agents/pm/issues/pm-76fkpp.toon), [pm-igdvfq](../.agents/pm/issues/pm-igdvfq.toon), [pm-643e0k](../.agents/pm/issues/pm-643e0k.toon),
|
|
3
|
+
Tracker: [pm-0k19l7](../.agents/pm/issues/pm-0k19l7.toon), [pm-9stazf](../.agents/pm/issues/pm-9stazf.toon), [pm-tu71](../.agents/pm/issues/pm-tu71.toon), [pm-0xmajx](../.agents/pm/issues/pm-0xmajx.toon), [pm-7rrqsk](../.agents/pm/issues/pm-7rrqsk.toon), [pm-ety1qc](../.agents/pm/issues/pm-ety1qc.toon), [pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon), [pm-5y05kq](../.agents/pm/issues/pm-5y05kq.toon), [pm-gjjurs](../.agents/pm/issues/pm-gjjurs.toon), [pm-h97qxd](../.agents/pm/issues/pm-h97qxd.toon), [pm-h06944](../.agents/pm/issues/pm-h06944.toon), [pm-5t33or](../.agents/pm/features/pm-5t33or.toon), [pm-in23qu](../.agents/pm/issues/pm-in23qu.toon), [pm-h8tpeh](../.agents/pm/features/pm-h8tpeh.toon), [pm-okgxwa](../.agents/pm/issues/pm-okgxwa.toon), [pm-22rzjp](../.agents/pm/issues/pm-22rzjp.toon), [pm-76fkpp](../.agents/pm/issues/pm-76fkpp.toon), [pm-igdvfq](../.agents/pm/issues/pm-igdvfq.toon), [pm-643e0k](../.agents/pm/issues/pm-643e0k.toon), [pm-larv4r](../.agents/pm/issues/pm-larv4r.toon), [pm-mcxk8v](../.agents/pm/issues/pm-mcxk8v.toon), and [pm-2zkvxm](../.agents/pm/issues/pm-2zkvxm.toon).
|
|
4
4
|
|
|
5
5
|
## Agent Quick Context
|
|
6
6
|
|
|
@@ -81,8 +81,13 @@ text. `verifyPmRecoveryReferences` accepts obligations derived from real error
|
|
|
81
81
|
envelopes and observations produced by executing a retry, resolving a declared
|
|
82
82
|
command path, or linking prose to an already executed recovery. Its report
|
|
83
83
|
includes the total obligation set, pass fraction, sorted findings, and stable
|
|
84
|
-
coverage buckets for `suggested_retry`, `candidate_command`, `example`,
|
|
85
|
-
`next_step`, including zero-population
|
|
84
|
+
coverage buckets for `suggested_retry`, `candidate_command`, `example`,
|
|
85
|
+
`next_step`, `migration_hint`, and `restore_with`, including zero-population
|
|
86
|
+
buckets. `derivePmRecoveryReferenceObligations` walks emitted envelopes and
|
|
87
|
+
generated read-output contracts, so tests cannot silently omit a producer
|
|
88
|
+
family. Each obligation declares `recovery`, `replacement`, or
|
|
89
|
+
`behavior_preserving` semantics and its proof must demonstrate the same
|
|
90
|
+
promise.
|
|
86
91
|
|
|
87
92
|
The repository integration corpus drives real CLI refusals, executes the
|
|
88
93
|
emitted retry in a temporary tracker, compares candidate commands with the
|
|
@@ -128,17 +133,32 @@ SDK callers use `fullHistory: true`; MCP callers use `full: true`. The default s
|
|
|
128
133
|
|
|
129
134
|
## Author acknowledgment coordinates
|
|
130
135
|
|
|
131
|
-
CLI, SDK, and MCP use the same selector and coordinate parser for `history-author-acknowledge`. A coordinate is `<item-id>:<line>` or `_workspace:<line>`, with a positive one-based line number. Exactly one of explicit events or `all_actionable` is required.
|
|
136
|
+
CLI, SDK, and MCP use the same selector and coordinate parser for `history-author-acknowledge`. A coordinate is `<item-id>:<line>` or `_workspace:<line>`, with a positive one-based line number. Exactly one of explicit events or `all_actionable` is required. Applying is a two-step operation: dry-run returns a deterministic SHA-256 over the complete, ordered coordinate set and every exact source-line hash; apply requires that fingerprint and refuses stale source or selection drift with `CONFLICT` exit 4 before writing history.
|
|
132
137
|
|
|
133
138
|
```bash
|
|
134
139
|
pm history-author-acknowledge \
|
|
135
140
|
--event _workspace:4 \
|
|
141
|
+
--dry-run
|
|
142
|
+
|
|
143
|
+
pm history-author-acknowledge \
|
|
144
|
+
--event _workspace:4 \
|
|
145
|
+
--plan-fingerprint <sha256-from-preview> \
|
|
136
146
|
--attributed-author import-agent \
|
|
137
147
|
--reviewer maintainer \
|
|
138
148
|
--reason "Verified workspace provenance"
|
|
139
149
|
```
|
|
140
150
|
|
|
141
|
-
The SDK exposes `resolveUnknownAuthorAcknowledgmentSelector
|
|
151
|
+
Preview coordinates are bounded with `--limit`, but the fingerprint and counts always cover the complete selection. Plans distinguish already acknowledged coordinates, and apply reports `effect`, `no_effect` (exit 6), or `partial_effect` (exit 7). Bulk selection appends only newly actionable rows, while explicit coordinates may append a superseding disposition as described below. The SDK exposes `planUnknownAuthorHistoryAcknowledgment`, `resolveUnknownAuthorAcknowledgmentSelector`, and `parseUnknownAuthorHistoryEventCoordinates` so packages never need a private copy of this grammar. Health and validate map actionable unknown-author warnings directly to this append-only acknowledgment command instead of sending callers through another diagnostic loop.
|
|
152
|
+
|
|
153
|
+
An explicit `--event` selection is also the append-only correction path: if a
|
|
154
|
+
coordinate already has a disposition, preview marks it
|
|
155
|
+
`already_acknowledged`, and fingerprint-bound apply appends a later disposition
|
|
156
|
+
that supersedes the earlier attribution. Recover the original coordinates from
|
|
157
|
+
`context.author_acknowledgment.events` in the applicable
|
|
158
|
+
`history/_workspace.jsonl` record, preview those same coordinates, and apply the
|
|
159
|
+
fresh fingerprint with the corrected author and review evidence. By contrast,
|
|
160
|
+
`--all-actionable` intentionally selects only undispositioned rows; an empty
|
|
161
|
+
bulk selection remains `no_effect` and never repeats existing dispositions.
|
|
142
162
|
|
|
143
163
|
## Health provider boundary
|
|
144
164
|
|
|
@@ -152,6 +172,14 @@ That agreement check reads only local history and JSON files: mismatched,
|
|
|
152
172
|
missing, or unreadable singleton paths become bounded `history_drift` evidence
|
|
153
173
|
without enabling embeddings, vector-store access, or any other provider I/O.
|
|
154
174
|
|
|
175
|
+
Every SDK operation that requires a valid `_workspace` chain refuses the same
|
|
176
|
+
way when verification fails. The typed `workspace_history_chain_invalid`
|
|
177
|
+
conflict includes `verification_errors` in CLI JSON and SDK error context plus
|
|
178
|
+
an executable `pm history _workspace --verify --json` recovery command. This
|
|
179
|
+
keeps deliberate corruption tests and recoverable tracker drift out of the
|
|
180
|
+
unexpected-runtime-error channel without weakening the fail-closed mutation
|
|
181
|
+
boundary.
|
|
182
|
+
|
|
155
183
|
Brief and summary check-only health projections use the scalar-only metadata
|
|
156
184
|
reader. Validation uses collection-bearing metadata for evidence and
|
|
157
185
|
relationship checks and materializes bodies only when strict history-drift
|
|
@@ -5,11 +5,11 @@ Tracker references: [pm-23xkss](../.agents/pm/issues/pm-23xkss.toon) and
|
|
|
5
5
|
|
|
6
6
|
## Agent Quick Context
|
|
7
7
|
|
|
8
|
-
An empty tracker, a missing tracker,
|
|
9
|
-
states. Likewise, an optional local Git optimization and
|
|
10
|
-
configuration are different health findings. The SDK
|
|
11
|
-
distinctions so automation does not infer project truth from an
|
|
12
|
-
array or a generic failed verdict.
|
|
8
|
+
An empty tracker, a missing tracker, an invalid tracker path, and an unreadable
|
|
9
|
+
tracker are different states. Likewise, an optional local Git optimization and
|
|
10
|
+
a drifted installed configuration are different health findings. The SDK
|
|
11
|
+
preserves these distinctions so automation does not infer project truth from an
|
|
12
|
+
ambiguous empty array or a generic failed verdict.
|
|
13
13
|
|
|
14
14
|
## Metadata Root Diagnostics
|
|
15
15
|
|
|
@@ -24,6 +24,11 @@ A missing root throws `PmCliError` with exit code `NOT_FOUND`, diagnostic code
|
|
|
24
24
|
`tracker_root_missing`, and context reason `missing`. A regular file or other
|
|
25
25
|
non-directory root throws `PmCliError` with exit code `USAGE`, diagnostic code
|
|
26
26
|
`tracker_root_not_directory`, and context reason `not_a_directory`.
|
|
27
|
+
An existing root that cannot be enumerated throws `PmCliError` with exit code
|
|
28
|
+
`GENERIC_FAILURE`, diagnostic code `tracker_root_unreadable`, and context reason
|
|
29
|
+
`unreadable`. On POSIX hosts, enumeration requires both read and directory-search
|
|
30
|
+
permission: a root whose mode lacks either permission is unreadable, even when a
|
|
31
|
+
privileged process could bypass those mode bits.
|
|
27
32
|
|
|
28
33
|
Consumers should branch on the stable diagnostic code:
|
|
29
34
|
|
|
@@ -35,6 +40,9 @@ try {
|
|
|
35
40
|
if (error instanceof PmCliError && error.code === "tracker_root_missing") {
|
|
36
41
|
// Ask the caller to select or initialize a tracker.
|
|
37
42
|
}
|
|
43
|
+
if (error instanceof PmCliError && error.code === "tracker_root_unreadable") {
|
|
44
|
+
// Repair tracker permissions before trusting any project context.
|
|
45
|
+
}
|
|
38
46
|
}
|
|
39
47
|
```
|
|
40
48
|
|
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.16"
|
|
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.16",
|
|
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.16",
|
|
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.16",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unbrained",
|
|
7
7
|
"url": "https://github.com/unbraind/pm-cli"
|