@unbrained/pm-cli 2026.8.26 → 2026.8.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/HARNESS_COMPATIBILITY.md +32 -0
- package/.agents/skills/README.md +47 -0
- package/.agents/skills/pm-developer/SKILL.md +117 -0
- package/.agents/skills/pm-developer/references/COMMAND_PLAYBOOK.md +49 -0
- package/.agents/skills/pm-developer/references/GRAPH_AND_RELATIONSHIPS.md +91 -0
- package/.agents/skills/pm-developer/references/MULTI_AGENT_MERGE.md +72 -0
- package/.agents/skills/pm-developer/references/PROMPTS.md +17 -0
- package/.agents/skills/pm-developer/references/SCRIPTING_COMPOSITION.md +82 -0
- package/.agents/skills/pm-developer/references/TOKEN_BUDGETS.md +85 -0
- package/.agents/skills/pm-extensions/SKILL.md +106 -0
- package/.agents/skills/pm-extensions/references/AUTHORING.md +95 -0
- package/.agents/skills/pm-extensions/references/LIFECYCLE.md +40 -0
- package/.agents/skills/pm-extensions/references/TROUBLESHOOTING.md +25 -0
- package/.agents/skills/pm-sdk/SKILL.md +107 -0
- package/.agents/skills/pm-sdk/references/DOMAIN_MODELING.md +78 -0
- package/.agents/skills/pm-sdk/references/INTEGRATION_CHECKLIST.md +31 -0
- package/.agents/skills/pm-sdk/references/PROMPTS.md +13 -0
- package/.agents/skills/pm-sdk/references/SURFACE_MAP.md +82 -0
- package/.agents/skills/pm-user/SKILL.md +111 -0
- package/.agents/skills/pm-user/references/BACKLOG_SHAPING.md +105 -0
- package/.agents/skills/pm-user/references/PROMPTS.md +17 -0
- package/.agents/skills/pm-user/references/WORKFLOWS.md +35 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +50 -4
- package/README.md +8 -5
- package/dist/cli/commander-usage.js +11 -7
- package/dist/cli/error-guidance.js +62 -8
- package/dist/cli/help-content.d.ts +2 -0
- package/dist/cli/help-content.js +53 -17
- package/dist/cli/help-json-payload.d.ts +8 -2
- package/dist/cli/help-json-payload.js +46 -12
- package/dist/cli/main.js +52 -74
- package/dist/cli/register-annotations.js +83 -60
- package/dist/cli/register-setup.js +98 -57
- package/dist/cli-bundle/bundle-manifest.json +151 -151
- package/dist/cli-bundle/chunks/{chunk-UKBCRPA2.js → chunk-BY2FQ2NI.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-E73FDIWT.js +3 -0
- package/dist/cli-bundle/chunks/{chunk-WRHJ3MB6.js → chunk-FEVBFFCQ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KBFP3E4E.js → chunk-M7OXRQE3.js} +66 -44
- package/dist/cli-bundle/chunks/{chunk-S4U76VZF.js → chunk-NBCBFVZI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ZNRLJ54C.js → chunk-NTXZHRKA.js} +45 -45
- package/dist/cli-bundle/chunks/chunk-QE6WQXFO.js +3 -0
- package/dist/cli-bundle/chunks/chunk-TIQ6AMH2.js +13 -0
- package/dist/cli-bundle/chunks/chunk-X2RROGZE.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-E2GCFJSU.js → chunk-XRVVYRRO.js} +33 -33
- package/dist/cli-bundle/chunks/chunk-XWEQGHHG.js +202 -0
- package/dist/cli-bundle/chunks/{register-list-query-EMCPMICY.js → register-list-query-J35ZPQQ5.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-OJ67ABCB.js → register-mutation-J6XJJOGU.js} +4 -4
- package/dist/cli-bundle/chunks/{register-operations-H2GLP7LT.js → register-operations-AE3JEMFT.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-OQERLLWE.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-72T6JGAE.js → chunk-4ZDRZYYJ.js} +43 -43
- package/dist/cli-bundle/focused-chunks/{chunk-OHIHZ7HS.js → chunk-6GCRSLPG.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-UYBA57GY.js → chunk-AD6ULRAF.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-FXDLT6FL.js → chunk-AHAM2HAU.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-LV5N3LK5.js → chunk-FC2AXLB5.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-IBHXMFE7.js → chunk-HC7ODMH3.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-4K2II4TV.js → chunk-HVQ22RC4.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-MMXUPDDJ.js → chunk-JZYPPMXF.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-LLNTHF5X.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-LYFWQMVC.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-A644DUFQ.js → chunk-MEASX544.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-YO3ZF3FI.js → chunk-THEPQMLX.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-57XY346D.js → chunk-XDPYBQCF.js} +9 -9
- package/dist/cli-bundle/focused-chunks/{chunk-TMJDFHVD.js → chunk-Y3JJXRVK.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-66VGB23P.js → chunk-Y5A7SJJ7.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-YJLDHJOD.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-P2E6LDAE.js → chunk-YVVZ3LQ6.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-Z2USIBR2.js +5 -0
- package/dist/cli-bundle/main.js +15 -14
- 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 +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 +31 -31
- 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 +32 -7
- package/dist/core/governance/issue-codes.d.ts +11 -2
- package/dist/core/governance/issue-codes.js +29 -10
- package/dist/core/item/item-format.js +3 -3
- package/dist/core/store/item-store.js +12 -5
- package/dist/mcp/server.js +123 -9
- package/dist/mcp/tool-definitions.d.ts +2 -0
- package/dist/mcp/tool-definitions.js +5 -5
- package/dist/sdk/agent/closed-domain-contracts.d.ts +1 -1
- package/dist/sdk/agent/closed-domain-contracts.js +24 -2
- package/dist/sdk/agent/command-recovery.js +3 -3
- package/dist/sdk/agent/task-transcript-contracts.d.ts +52 -0
- package/dist/sdk/agent/task-transcript-contracts.js +198 -0
- package/dist/sdk/agent-capability-contracts.js +6 -2
- package/dist/sdk/annotations.d.ts +5 -2
- package/dist/sdk/annotations.js +66 -36
- package/dist/sdk/cli-bootstrap.d.ts +2 -8
- package/dist/sdk/cli-bootstrap.js +7 -66
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.d.ts +23 -0
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +80 -0
- package/dist/sdk/cli-contracts/command-aliases.js +15 -2
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +4 -1
- package/dist/sdk/cli-contracts/enum-contracts.js +7 -2
- package/dist/sdk/cli-contracts/flag-contracts.js +12 -5
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +5 -5
- package/dist/sdk/cli-contracts/grammar-contracts.d.ts +3 -3
- package/dist/sdk/cli-contracts/grammar-contracts.js +24 -17
- package/dist/sdk/cli-contracts/runtime-contracts.js +13 -11
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +15 -2
- package/dist/sdk/cli-contracts/tool-schema.d.ts +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +32 -16
- package/dist/sdk/cli-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts.js +3 -3
- package/dist/sdk/cli-program.js +3 -2
- package/dist/sdk/comments.d.ts +4 -0
- package/dist/sdk/comments.js +2 -2
- package/dist/sdk/completion.js +47 -16
- package/dist/sdk/contracts.d.ts +1 -0
- package/dist/sdk/contracts.js +3 -2
- package/dist/sdk/extension/install-sources.d.ts +13 -0
- package/dist/sdk/extension/install-sources.js +62 -30
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +26 -2
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +38 -14
- package/dist/sdk/governance/upgrade.d.ts +2 -0
- package/dist/sdk/governance/upgrade.js +30 -8
- package/dist/sdk/governance/validate.js +8 -6
- package/dist/sdk/guide-topics.js +6 -6
- package/dist/sdk/index.d.ts +5 -2
- package/dist/sdk/index.js +6 -3
- package/dist/sdk/learnings.d.ts +4 -0
- package/dist/sdk/learnings.js +7 -4
- package/dist/sdk/lifecycle/close.js +4 -3
- package/dist/sdk/mcp/apps.d.ts +70 -0
- package/dist/sdk/mcp/apps.js +154 -0
- package/dist/sdk/mcp/skills.d.ts +127 -0
- package/dist/sdk/mcp/skills.js +390 -0
- package/dist/sdk/notes.d.ts +4 -0
- package/dist/sdk/notes.js +2 -2
- package/dist/sdk/read-output-contracts.js +16 -3
- package/dist/sdk/runtime-action-aliases.js +7 -3
- package/dist/sdk/runtime-input.js +15 -4
- package/dist/sdk/runtime-primitives.d.ts +1 -1
- package/dist/sdk/runtime-primitives.js +3 -3
- package/dist/sdk/runtime.d.ts +6 -6
- package/dist/sdk/runtime.js +8 -8
- package/docs/CLI_GRAMMAR.md +7 -1
- package/docs/COMMANDS.md +5 -4
- package/docs/EXTENSIONS.md +33 -32
- package/docs/MCP_2026_07_28.md +24 -2
- package/docs/MCP_2026_07_28_CONFORMANCE.md +4 -4
- package/docs/MCP_SKILLS_AND_APPS.md +107 -0
- package/docs/OUTPUT_TOKEN_ACCOUNTING.md +20 -7
- package/docs/QUICKSTART.md +15 -15
- package/docs/README.md +1 -0
- package/docs/RELEASING.md +20 -4
- package/docs/SDK.md +12 -0
- package/docs/SDK_CONTEXT_INTEGRITY.md +18 -1
- package/docs/SDK_EVIDENCE_TRACEABILITY.md +9 -1
- package/docs/SDK_RUNTIME_BOUNDARIES.md +10 -0
- package/docs/TESTING.md +6 -2
- package/docs/agent-task-token-baseline.json +97 -11
- package/docs/agent-task-transcripts.json +211 -0
- package/docs/generated/AGENT_CAPABILITY_ROUTING.md +1 -1
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +3 -3
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +11 -7
- package/docs/performance/cli-transport-overhead.md +10 -2
- package/marketplace.json +2 -2
- package/package.json +10 -8
- package/packages/pm-beads/README.md +12 -6
- package/packages/pm-beads/docs/MIGRATION.md +53 -0
- package/packages/pm-beads/extensions/beads/index.ts +8 -0
- package/packages/pm-beads/extensions/beads/runtime.ts +671 -112
- 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 +430 -36
- package/dist/cli-bundle/chunks/chunk-ES25LX3D.js +0 -202
- package/dist/cli-bundle/chunks/chunk-FRDWWB6R.js +0 -3
- package/dist/cli-bundle/chunks/chunk-ICQ3RVIY.js +0 -2
- package/dist/cli-bundle/chunks/chunk-IV64RJVE.js +0 -13
- package/dist/cli-bundle/chunks/chunk-MVYLQ67M.js +0 -3
- package/dist/cli-bundle/chunks/register-setup-GLZAHLVI.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-4XNH2HM7.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-7I23XGWO.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-7YCDTCBC.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-LMKG3DFE.js +0 -5
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# MCP Skills and Apps
|
|
2
|
+
|
|
3
|
+
Tracker references: [pm-8nzivt](../.agents/pm/features/pm-8nzivt.toon),
|
|
4
|
+
[pm-pznhee](../.agents/pm/features/pm-pznhee.toon), and
|
|
5
|
+
[pm-55yf1t](../.agents/pm/tasks/pm-55yf1t.toon).
|
|
6
|
+
|
|
7
|
+
pm exposes optional workflow guidance and interactive context views without
|
|
8
|
+
moving authority out of the public SDK or the tracker. Both extensions require
|
|
9
|
+
explicit request-local negotiation. Clients that do not negotiate them retain
|
|
10
|
+
the complete CLI, SDK, tool, prompt, and ordinary resource behavior.
|
|
11
|
+
|
|
12
|
+
## Skills over MCP
|
|
13
|
+
|
|
14
|
+
Skills support follows the current SEP-2640 draft at the exact revision
|
|
15
|
+
`a3e147ca2710f68214247aecc729731ee1ae8d03`. Because the proposal is not a
|
|
16
|
+
stable MCP extension, discovery advertises both `status: draft` and that exact
|
|
17
|
+
revision. Every `skills/list`, `skills/get`, skill `resources/read`, and
|
|
18
|
+
`resources/directory/read` request must independently declare:
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"extensions": {
|
|
23
|
+
"io.modelcontextprotocol/skills": {
|
|
24
|
+
"revision": "SEP-2640@a3e147ca2710f68214247aecc729731ee1ae8d03",
|
|
25
|
+
"directoryRead": true
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`skills/list` is lexically ordered and cursor-paginated. Descriptors contain
|
|
32
|
+
the parsed SKILL.md frontmatter, every file URI, byte size, SHA-256 digest,
|
|
33
|
+
estimated token cost, package/MCP compatibility, origin, and an explicit
|
|
34
|
+
`untrusted` trust marker. `skills/get` returns one descriptor without loading
|
|
35
|
+
file bodies. Digests use the draft's `sha256:<hex>` representation.
|
|
36
|
+
`resources/read` fetches one digest-bound file; the optional, cursor-paginated
|
|
37
|
+
directory read returns one directory's direct child resource metadata only.
|
|
38
|
+
Clients read selected file bodies through ordinary `resources/read` calls.
|
|
39
|
+
|
|
40
|
+
The published package carries the four canonical pm skills. A repository may
|
|
41
|
+
override a package skill by placing the same validated name below
|
|
42
|
+
`.agents/skills`, and the returned origin changes to `workspace`. Overrides do
|
|
43
|
+
not inherit trust: skill text is guidance, never implicit permission to execute
|
|
44
|
+
commands or mutate the tracker.
|
|
45
|
+
|
|
46
|
+
Security limits reject symbolic links, malformed or aliased YAML, mismatched
|
|
47
|
+
directory/frontmatter names, stale cursors, oversized files, excessive file
|
|
48
|
+
counts, and aggregate skill bodies above the declared bound. In accordance with
|
|
49
|
+
the draft, pm accepts at most 512 resources and 16 MiB of total content per
|
|
50
|
+
skill; the same 16 MiB ceiling applies to an individual resource. An origin is
|
|
51
|
+
limited to 100 candidate skill directories and 32 MiB across all retained
|
|
52
|
+
bodies. File counts and both byte budgets are reserved from filesystem metadata
|
|
53
|
+
before a body is read, so an untrusted workspace cannot exceed the declared
|
|
54
|
+
memory envelope before rejection. Each read is resolved from the immutable
|
|
55
|
+
in-memory registry used to compute its digest.
|
|
56
|
+
|
|
57
|
+
## MCP Apps
|
|
58
|
+
|
|
59
|
+
pm implements the stable MCP Apps `2026-01-26` extension through the official
|
|
60
|
+
`@modelcontextprotocol/ext-apps` metadata contracts. A client opts in with:
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"extensions": {
|
|
65
|
+
"io.modelcontextprotocol/ui": {
|
|
66
|
+
"specVersion": "2026-01-26",
|
|
67
|
+
"mimeTypes": ["text/html;profile=mcp-app"]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Negotiated `tools/list` attaches `_meta.ui.resourceUri` to five existing,
|
|
74
|
+
SDK-backed tools. `resources/list` and `resources/read` expose the corresponding
|
|
75
|
+
`ui://` documents:
|
|
76
|
+
|
|
77
|
+
| View | Authoritative tool | Purpose |
|
|
78
|
+
| --- | --- | --- |
|
|
79
|
+
| Context explorer | `pm_context` | Context, provenance, omissions, and token cost |
|
|
80
|
+
| Relationship graph | `pm_graph` | Typed edges, explaining paths, and governance |
|
|
81
|
+
| Plan and milestone | `pm_plan` | Steps, dependencies, decisions, and validation |
|
|
82
|
+
| Assurance dashboard | `pm_validate` | Verdicts, evidence, and recovery paths |
|
|
83
|
+
| Long-operation view | `pm_test` | Durable test and operation results |
|
|
84
|
+
|
|
85
|
+
Every view is self-contained and requests no network, storage, camera,
|
|
86
|
+
microphone, or location permission. It performs the MCP Apps initialization
|
|
87
|
+
handshake, listens for tool input/result/cancellation and host-context events,
|
|
88
|
+
bounds large renderings with an explicit truncation message, and retains the
|
|
89
|
+
tool result's text fallback. Layout is responsive, keyboard focus is visible,
|
|
90
|
+
and reduced-motion preferences are honored.
|
|
91
|
+
|
|
92
|
+
Apps keep no durable project state and expose no hidden mutation path. The
|
|
93
|
+
tracker, task store, mutation guards, consent, idempotency, and immutable
|
|
94
|
+
receipts remain owned by existing SDK-backed MCP tools. A host that cannot or
|
|
95
|
+
does not render Apps still receives meaningful tool text and structured data.
|
|
96
|
+
Missing or incompatible optional Apps declarations therefore leave core tool
|
|
97
|
+
and resource discovery undecorated; an explicit read of a `ui://` resource
|
|
98
|
+
continues to fail closed unless the stable capability was negotiated.
|
|
99
|
+
|
|
100
|
+
## Public SDK
|
|
101
|
+
|
|
102
|
+
Use `PmMcpSkillRegistry`, `assertPmMcpSkillsCapability()`,
|
|
103
|
+
`PM_MCP_SKILLS_SERVER_CAPABILITY`, `PM_MCP_APP_CONTRACTS`,
|
|
104
|
+
`hasPmMcpAppsCapability()`, `decoratePmMcpToolsWithApps()`, and
|
|
105
|
+
`renderPmMcpAppHtml()` from `@unbrained/pm-cli/sdk`. The server is a thin
|
|
106
|
+
adapter over these contracts; custom hosts can project the same resources and
|
|
107
|
+
security policy without importing pm server internals.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Output Token Accounting
|
|
2
2
|
|
|
3
|
-
Tracker references: [pm-t5dt4z](../.agents/pm/tasks/pm-t5dt4z.toon)
|
|
3
|
+
Tracker references: [pm-t5dt4z](../.agents/pm/tasks/pm-t5dt4z.toon), [pm-g3n00m](../.agents/pm/stories/pm-g3n00m.toon), [pm-8pnj](../.agents/pm/features/pm-8pnj.toon), [pm-f05lsg](../.agents/pm/features/pm-f05lsg.toon), and [pm-srns](../.agents/pm/issues/pm-srns.toon).
|
|
4
4
|
|
|
5
5
|
## Agent Quick Context
|
|
6
6
|
|
|
@@ -39,20 +39,33 @@ The command still exits with its normal non-zero status; the receipt is additive
|
|
|
39
39
|
|
|
40
40
|
## Release-Level Task Entitlement
|
|
41
41
|
|
|
42
|
-
[`agent-task-token-baseline.json`](agent-task-token-baseline.json) is
|
|
42
|
+
[`agent-task-transcripts.json`](agent-task-transcripts.json) is the SDK-validated, versioned golden corpus. [`agent-task-token-baseline.json`](agent-task-token-baseline.json) is its externally shipped release ratchet. The gate executes the built CLI against independent, identically seeded accounting-on and accounting-off workspaces. Its five complete workflows cover:
|
|
43
43
|
|
|
44
|
-
-
|
|
45
|
-
- a
|
|
46
|
-
-
|
|
47
|
-
-
|
|
44
|
+
- bounded triage, scaled-workspace orientation, and returning-agent inspection;
|
|
45
|
+
- a closed-domain refusal followed by the exact advertised shell-free retry;
|
|
46
|
+
- an unknown option after valid flags followed by a corrected command;
|
|
47
|
+
- create, inspect, close, and final-state confirmation through mutation receipts;
|
|
48
|
+
- successful bulk partial-effect and no-effect exits without collapsing them into exit zero.
|
|
48
49
|
|
|
49
|
-
|
|
50
|
+
Every step verifies its public SDK output family, canonical successful or refusal exit status, required own-property paths, declared `expected_field_values`, and refusal identity where applicable. Recovery steps must declare a successful output family instead of chaining one refusal to another, every refusal in a completed task must have a later successful `recovery_for` step, and every completed task must terminate with successful output. Successful steps cannot carry refusal-only metadata. Dot-separated `required_fields` and `expected_field_values` paths are traversed structurally from the output root, so incidental prose or nested key names cannot satisfy completeness or terminal-state assertions. The report publishes bytes and estimated tokens for each step and completed task, retry counts, corpus digest, and composite cost. Accounting-on application payloads must be byte-equivalent to their independently captured accounting-off payloads after removing only the receipt. Receipt byte and token fields are independently measured rather than trusted. Runtime refusals verify that their self-reported `total_bytes` matches the independent transport and that `total_estimated_tokens` equals `ceil(total_bytes / 4)`; Commander usage refusals that happen before accounting attachment are measured directly from the captured transport and labeled `independent_transport`.
|
|
51
|
+
|
|
52
|
+
The baseline fails closed on corpus digest, task identity, step identity, missing or non-finite per-step and per-task ceilings, and missing or non-finite composite cost ceilings. A seeded million-token completed-task regression proves the ratchet fails. Run it with:
|
|
50
53
|
|
|
51
54
|
```bash
|
|
52
55
|
pnpm quality:agent-task-token
|
|
53
56
|
node scripts/release/agent-task-token-gate.mjs --negative-control
|
|
54
57
|
```
|
|
55
58
|
|
|
59
|
+
Package authors can validate their own corpus with the same public contract before replay:
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
import { parsePmAgentTaskTranscriptCorpus } from "@unbrained/pm-cli/sdk/contracts";
|
|
63
|
+
|
|
64
|
+
const corpus = parsePmAgentTaskTranscriptCorpus(JSON.parse(source));
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
The parser rejects unknown versions, empty tasks or steps, duplicate identities, output families that disagree with the command contract, refusal-only metadata on successful steps, terminal or otherwise unrecovered refusals, and recovery edges that do not point from a successful step to an earlier refusal.
|
|
68
|
+
|
|
56
69
|
Refresh the committed ceiling only after an intentional reviewed output change:
|
|
57
70
|
|
|
58
71
|
```bash
|
package/docs/QUICKSTART.md
CHANGED
|
@@ -9,7 +9,7 @@ Use this page to get from a clean repository to a tracked, verified item.
|
|
|
9
9
|
- Claim before implementation.
|
|
10
10
|
- Link changed files, docs, and tests to the item.
|
|
11
11
|
- Close only after evidence is recorded.
|
|
12
|
-
- Use `pm install guide-shell --project` before `pm guide quickstart` or `pm guide workflows` when you need local docs routing.
|
|
12
|
+
- Use `pm package install guide-shell --project` before `pm guide quickstart` or `pm guide workflows` when you need local docs routing.
|
|
13
13
|
|
|
14
14
|
Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon).
|
|
15
15
|
|
|
@@ -23,10 +23,10 @@ pm --version
|
|
|
23
23
|
For updates, use the registry package again:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
pm upgrade --cli-only
|
|
26
|
+
pm package upgrade --cli-only
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
`pm upgrade` uses `npm install -g @unbrained/pm-cli@latest` for the CLI/SDK and can also refresh installed pm packages. Do not use the GitHub git URL as the normal global update path. If a previous git-sourced install left a stale `pm` shim, run `pm upgrade --cli-only --repair`, run `bash scripts/install.sh --repair` from a checkout, or uninstall the package before reinstalling from npm.
|
|
29
|
+
`pm package upgrade` uses `npm install -g @unbrained/pm-cli@latest` for the CLI/SDK and can also refresh installed pm packages. Do not use the GitHub git URL as the normal global update path. If a previous git-sourced install left a stale `pm` shim, run `pm package upgrade --cli-only --repair`, run `bash scripts/install.sh --repair` from a checkout, or uninstall the package before reinstalling from npm. The hidden `pm upgrade` alias remains compatible with existing automation and emits a migration hint on stderr.
|
|
30
30
|
|
|
31
31
|
For one-off use:
|
|
32
32
|
|
|
@@ -39,8 +39,8 @@ Optional first-party packages are installable during init or on demand:
|
|
|
39
39
|
```bash
|
|
40
40
|
pm init --defaults --with-packages
|
|
41
41
|
pm package catalog --project
|
|
42
|
-
pm install '*' --project
|
|
43
|
-
pm install all --project
|
|
42
|
+
pm package install '*' --project
|
|
43
|
+
pm package install all --project
|
|
44
44
|
pm package doctor --project --detail summary
|
|
45
45
|
```
|
|
46
46
|
|
|
@@ -78,16 +78,16 @@ pm create \
|
|
|
78
78
|
|
|
79
79
|
Useful item types:
|
|
80
80
|
|
|
81
|
-
| Type
|
|
82
|
-
|
|
83
|
-
| `Epic`
|
|
84
|
-
| `Feature`
|
|
85
|
-
| `Task`
|
|
86
|
-
| `Chore`
|
|
87
|
-
| `Issue`
|
|
88
|
-
| `Decision`
|
|
89
|
-
| `Plan`
|
|
90
|
-
| `Event`, `Reminder`, `Milestone`, `Meeting` | calendar-aware planning
|
|
81
|
+
| Type | Use |
|
|
82
|
+
| ------------------------------------------- | ----------------------------------------------------------- |
|
|
83
|
+
| `Epic` | broad outcome or initiative |
|
|
84
|
+
| `Feature` | user-facing capability or major slice |
|
|
85
|
+
| `Task` | implementation work |
|
|
86
|
+
| `Chore` | maintenance, refactoring, or housekeeping work |
|
|
87
|
+
| `Issue` | bug or defect |
|
|
88
|
+
| `Decision` | recorded choice and rationale |
|
|
89
|
+
| `Plan` | agent-optimized living plan with ordered steps and evidence |
|
|
90
|
+
| `Event`, `Reminder`, `Milestone`, `Meeting` | calendar-aware planning |
|
|
91
91
|
|
|
92
92
|
## Find and Claim Work
|
|
93
93
|
|
package/docs/README.md
CHANGED
|
@@ -47,6 +47,7 @@ pm guide release --json
|
|
|
47
47
|
- [MCP 2026-07-28 Protocol Decision](MCP_2026_07_28.md) - stateless request metadata, discovery, result envelopes, explicit legacy boundary, and migration policy.
|
|
48
48
|
- [MCP 2026-07-28 Conformance Matrix](MCP_2026_07_28_CONFORMANCE.md) - official revision changes mapped to canonical owners and executable evidence.
|
|
49
49
|
- [MCP Interaction and Task SDK](SDK_MCP_INTERACTIONS.md) - public MRTR continuation, cache/schema validation, and durable task-store contracts.
|
|
50
|
+
- [MCP Skills and Apps](MCP_SKILLS_AND_APPS.md) - negotiated draft workflow discovery, stable interactive views, digests, provenance, accessibility, and trust boundaries.
|
|
50
51
|
- [MCP Remote Transport, Authorization, and Migration](MCP_REMOTE_TRANSPORT_SECURITY.md) - Streamable HTTP operation, subscriptions, OAuth and trace boundaries, threat model, and deprecated-feature ratchet.
|
|
51
52
|
- [SDK Artifact Output Contracts](SDK_ARTIFACT_OUTPUT.md) - clean stdout/file exporter channels, bounded receipts, binary-safe delivery, and shared NDJSON terminal framing.
|
|
52
53
|
- [Context Relevance and Packing](CONTEXT_RELEVANCE.md) - shared CLI/SDK signals, derived-store provenance, ranking explanations, and token budgets.
|
package/docs/RELEASING.md
CHANGED
|
@@ -29,6 +29,8 @@ provenance is tracked by [pm-u1baah](../.agents/pm/issues/pm-u1baah.toon), and
|
|
|
29
29
|
authoritative blocker-recovery run selection by
|
|
30
30
|
[pm-db8onn](../.agents/pm/issues/pm-db8onn.toon), and queued automatic
|
|
31
31
|
same-day recovery by [pm-dm2vfz](../.agents/pm/issues/pm-dm2vfz.toon).
|
|
32
|
+
Bounded Sentry request latency is tracked by
|
|
33
|
+
[pm-b9g2cs](../.agents/pm/issues/pm-b9g2cs.toon).
|
|
32
34
|
|
|
33
35
|
## Version Policy
|
|
34
36
|
|
|
@@ -210,6 +212,12 @@ events, and every `generic_failure` or `dependency_failed` remain blocking.
|
|
|
210
212
|
This keeps rewording independent from release policy and makes stale or broad
|
|
211
213
|
message allowlists impossible.
|
|
212
214
|
|
|
215
|
+
Sentry API requests use a 120-second deadline by default. Operators can set
|
|
216
|
+
`--sentry-request-timeout-ms` between `1` and `300000` when reproducing
|
|
217
|
+
provider latency, while the emitted gate receipt records the effective value.
|
|
218
|
+
The release workflow pins `120000`; query timeouts remain fail-closed and must
|
|
219
|
+
not be treated as an empty issue set.
|
|
220
|
+
|
|
213
221
|
If private reliability checks identify repeated user friction, either confirm the current release already contains the remediation with regression coverage or fix it before continuing.
|
|
214
222
|
|
|
215
223
|
The build writes `dist/cli-bundle/bundle-manifest.json` atomically with SHA-256 digests for every emitted bundle file. At startup, `pm` reports `bundle_integrity_torn_install` only when a module-loader failure is accompanied by manifest proof that an upgrade or rebuild changed, removed, or corrupted the active bundle. Reinstall `@unbrained/pm-cli` and retry after that diagnostic. Ordinary `ERR_MODULE_NOT_FOUND` and export failures with an intact manifest remain unexpected failures and must continue to block reliability gates.
|
|
@@ -358,7 +366,7 @@ git push origin v<version>
|
|
|
358
366
|
tracked source path (apart from managed-extension install metadata).
|
|
359
367
|
- static quality gate (shared complexity, duplication, dead/orphan module, file/folder hygiene, source/exported docstring coverage profile)
|
|
360
368
|
- temporary-project compatibility gate against latest published tracker data
|
|
361
|
-
- reliability threshold gate (Sentry severity threshold, bounded to a recent-activity window via `--sentry-window-days` (default `14`, `0` = unbounded) so a stale benign unresolved issue cannot block every scheduled release; `--telemetry-mode` gate policy: `off` | `best-effort` | `required`). Scheduled `auto-release.yml` failures open/update an `Auto Release blocked` GitHub issue so blocked daily releases are never silently skipped.
|
|
369
|
+
- reliability threshold gate (Sentry severity threshold, bounded to a recent-activity window via `--sentry-window-days` (default `14`, `0` = unbounded) so a stale benign unresolved issue cannot block every scheduled release; Sentry requests use the fail-closed bounded `--sentry-request-timeout-ms` contract (default `120000`, maximum `300000`); `--telemetry-mode` gate policy: `off` | `best-effort` | `required`). Scheduled `auto-release.yml` failures open/update an `Auto Release blocked` GitHub issue so blocked daily releases are never silently skipped.
|
|
362
370
|
- sandboxed `pm` coverage
|
|
363
371
|
- optional Sentry release metadata and sourcemap upload when `SENTRY_AUTH_TOKEN` is configured
|
|
364
372
|
- npm pack dry run and npx tarball smoke test
|
|
@@ -387,9 +395,17 @@ git push origin v<version>
|
|
|
387
395
|
metadata cannot mask a public-registry outage. The verifier dispatches a real
|
|
388
396
|
`pm contracts` command through both explicit-bin and package-default
|
|
389
397
|
invocations, performs stateless JSON-RPC `server/discover` against the
|
|
390
|
-
symlink-resolved `pm-mcp` bin under both npx and bunx,
|
|
391
|
-
`
|
|
392
|
-
|
|
398
|
+
symlink-resolved `pm-mcp` bin under both npx and bunx, and launches the exact
|
|
399
|
+
public `pm-mcp-http` bin under both executors on an isolated loopback port for
|
|
400
|
+
a real Streamable HTTP `server/discover` exchange. Both transports require
|
|
401
|
+
canonical `2026-07-28` metadata/result envelopes. HTTP startup is bounded to
|
|
402
|
+
two 20-second attempts per executor so the complete retry budget remains below
|
|
403
|
+
the hosted step timeout. Signal-aware process-group cleanup escalates from
|
|
404
|
+
`SIGTERM` to `SIGKILL` after a bounded grace period, including when the outer
|
|
405
|
+
evaluator times out or an intermediate executor exits before its server
|
|
406
|
+
descendant. Direct executor exit is not treated as process-group cleanup. The
|
|
407
|
+
verifier derives bin coverage from `package.json`, and proves missing-bin and
|
|
408
|
+
missing-command controls fail.
|
|
393
409
|
- exact-package installed acceptance through
|
|
394
410
|
`scripts/release/verify-installed-agent-session.mjs`. Separate npm and Bun
|
|
395
411
|
install roots must contain the resolved executable, then each drives the
|
package/docs/SDK.md
CHANGED
|
@@ -1512,6 +1512,18 @@ edit/delete semantics, ownership guidance, history mutation metadata, and stable
|
|
|
1512
1512
|
list pagination. MCP tool actions intentionally omit file input to prevent host
|
|
1513
1513
|
filesystem access. Package authors can build custom annotation presentation
|
|
1514
1514
|
layers without importing CLI modules.
|
|
1515
|
+
`CommentsCommandOptions.ifAbsent`, `NotesCommandOptions.ifAbsent`, and
|
|
1516
|
+
`LearningsCommandOptions.ifAbsent` give retrying agents one explicit idempotent
|
|
1517
|
+
annotation append contract. Equality is evaluated under the item writer lock
|
|
1518
|
+
after author resolution and text normalization, using the resolved author plus
|
|
1519
|
+
exact stored text. The first append returns `changed: true` and
|
|
1520
|
+
`mutation_receipt.changed_count: 1`; an exact retry returns the existing entry,
|
|
1521
|
+
`changed: false`, and `changed_count: 0` without changing the item, history, or
|
|
1522
|
+
derived search state. Different authors remain distinct, and the default
|
|
1523
|
+
without `ifAbsent` continues to append intentional duplicates. The option is
|
|
1524
|
+
valid only for append input and fails closed for list, edit, or delete modes.
|
|
1525
|
+
CLI `comments|notes|learnings --if-absent` and the corresponding MCP actions
|
|
1526
|
+
with `options.ifAbsent: true` are thin transports over this SDK behavior.
|
|
1515
1527
|
`PmClient.notes` also accepts `addJson` for a validated structured context event. The persisted entry remains backward-readable through canonical `text` while exposing typed `format: "json"`, `data`, and `event_type` fields. `since`, `eventType`, `limit`, and `includeMeta` form the bounded query contract; the collection continues to use field-aware union merge semantics for concurrent branches.
|
|
1516
1528
|
|
|
1517
1529
|
Customization convenience methods are the SDK baseline for project-specific pm
|
|
@@ -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), [pm-larv4r](../.agents/pm/issues/pm-larv4r.toon), [pm-mcxk8v](../.agents/pm/issues/pm-mcxk8v.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), [pm-2zkvxm](../.agents/pm/issues/pm-2zkvxm.toon), and [pm-ea1yh2](../.agents/pm/issues/pm-ea1yh2.toon).
|
|
4
4
|
|
|
5
5
|
Current closure tranche: [pm-fs8q9x](../.agents/pm/tasks/pm-fs8q9x.toon), [pm-gy885b](../.agents/pm/issues/pm-gy885b.toon), and [pm-f05lsg](../.agents/pm/features/pm-f05lsg.toon).
|
|
6
6
|
|
|
@@ -16,10 +16,16 @@ These contracts keep project management equal to context management: reads say w
|
|
|
16
16
|
pm get pm-a1b2 --output-include id,title
|
|
17
17
|
pm get pm-a1b2 --output-include item.id,item.title,linked
|
|
18
18
|
pm get pm-a1b2 --output-include item,claim_state
|
|
19
|
+
pm get pm-a1b2 --output-include comments,learnings,tests
|
|
19
20
|
```
|
|
20
21
|
|
|
21
22
|
An unknown selector is a usage refusal that lists the valid vocabulary. Selecting the complete `item` object together with an item field is also refused because the two selectors express conflicting projection depths. Every successful projection carries an `omission_receipt` with the exact selectors needed to restore withheld item fields or sections.
|
|
22
23
|
|
|
24
|
+
Collection selectors participate in the same pre-execution projection on CLI,
|
|
25
|
+
SDK, and MCP transports. Requesting `comments`, `notes`, `learnings`, `files`,
|
|
26
|
+
`tests`, `docs`, `reminders`, or `events` therefore loads only the named item
|
|
27
|
+
collections before the universal output layer removes unrequested fields.
|
|
28
|
+
|
|
23
29
|
Automatic receipts cover every heavy item collection (`comments`, `notes`,
|
|
24
30
|
`learnings`, `files`, `tests`, `docs`, `reminders`, and `events`) plus `body`,
|
|
25
31
|
`children`, `claim_state`, `linked`, and `schedule`. Empty included collections
|
|
@@ -76,6 +82,17 @@ The structured `option_scope` is `declared_on_path`, `declared_elsewhere`, or
|
|
|
76
82
|
case, while the third names the nearest current-path spellings and explicitly
|
|
77
83
|
terminates the otherwise-unbounded command search.
|
|
78
84
|
|
|
85
|
+
## Retry-safe annotation mutations
|
|
86
|
+
|
|
87
|
+
Comments, notes, and learnings expose one SDK-owned `ifAbsent` append contract.
|
|
88
|
+
The item writer lock compares the resolved author and exact normalized stored
|
|
89
|
+
text, so concurrent retries create one entry and one history event. The winning
|
|
90
|
+
append reports `changed: true` and `mutation_receipt.changed_count: 1`; later
|
|
91
|
+
exact retries return the existing entry with `changed: false` and
|
|
92
|
+
`changed_count: 0`. Default appends remain duplicate-preserving. CLI
|
|
93
|
+
`--if-absent` and MCP `ifAbsent` are thin transports, and `--full-history`
|
|
94
|
+
remains the explicit escape hatch from bounded mutation receipts.
|
|
95
|
+
|
|
79
96
|
## Semantic flag and spelling contracts
|
|
80
97
|
|
|
81
98
|
`listPmFlagLexicon()` classifies flags by meaning rather than spelling alone.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# SDK Evidence Traceability and Integrity
|
|
2
2
|
|
|
3
|
-
Tracker references: [pm-f86lth](../.agents/pm/features/pm-f86lth.toon), [pm-cstuys](../.agents/pm/issues/pm-cstuys.toon), [pm-jb1ron](../.agents/pm/issues/pm-jb1ron.toon), [pm-2irc1p](../.agents/pm/issues/pm-2irc1p.toon),
|
|
3
|
+
Tracker references: [pm-f86lth](../.agents/pm/features/pm-f86lth.toon), [pm-cstuys](../.agents/pm/issues/pm-cstuys.toon), [pm-jb1ron](../.agents/pm/issues/pm-jb1ron.toon), [pm-2irc1p](../.agents/pm/issues/pm-2irc1p.toon), [pm-u5c27w](../.agents/pm/issues/pm-u5c27w.toon), and [pm-blvfye](../.agents/pm/issues/pm-blvfye.toon).
|
|
4
4
|
|
|
5
5
|
This contract turns linked evidence into a bidirectional context primitive. Items can continue to declare the files that explain their implementation, while agents and packages can resolve a source path back to its owning work without scanning tracker files at indexed scale.
|
|
6
6
|
|
|
@@ -127,3 +127,11 @@ such as `BD-30-A` and `BD-30-B` are distinct sibling work and receive only their
|
|
|
127
127
|
ordinary title-token similarity; exact repetitions of the full code retain the
|
|
128
128
|
strong `issue_code` signal. This keeps duplicate-close guidance from collapsing
|
|
129
129
|
decomposed work that shares a numeric family prefix.
|
|
130
|
+
|
|
131
|
+
Metadata validation applies a separate, evidence-backed title classifier.
|
|
132
|
+
Upper-case prefixes remain conventional issue codes. Mixed-case prefixes must
|
|
133
|
+
have a code delimiter, an explicit body marker/backtick reference, or match the
|
|
134
|
+
configured item-id prefix. Natural-language compounds such as `Match-3`,
|
|
135
|
+
`Covid-19`, and `Wi-Fi-6` therefore do not produce dishonest rename-or-merge
|
|
136
|
+
warnings, while `GH-1118`, `Bug-12: ...`, and configured formats remain
|
|
137
|
+
detectable without an ever-growing word dictionary.
|
|
@@ -61,6 +61,16 @@ published error vocabulary while still sharing classification, path redaction,
|
|
|
61
61
|
and recovery guidance. Workspace snapshots use this compatibility path for
|
|
62
62
|
their stable storage, resource, and permission fault codes.
|
|
63
63
|
|
|
64
|
+
Package archives use one bounded validation and extraction boundary whether
|
|
65
|
+
they come from a local path or `npm pack`. The SDK rejects links, escaping
|
|
66
|
+
paths, unsupported entry types, oversized archives, and decompression growth
|
|
67
|
+
before extraction. If npm reports an archive it did not create, callers receive
|
|
68
|
+
the path-redacted `npm_package_archive_missing` refusal instead of a raw system
|
|
69
|
+
`tar` exception; an archive reported outside the isolated pack destination is
|
|
70
|
+
rejected as `npm_package_archive_unsafe`. This keeps package install behavior
|
|
71
|
+
portable and prevents an untrusted registry artifact or package-manager result
|
|
72
|
+
from bypassing the local-archive policy.
|
|
73
|
+
|
|
64
74
|
## CLI refusal ownership
|
|
65
75
|
|
|
66
76
|
CLI adapters preserve SDK error codes, exit semantics, and actionable recovery
|
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), [pm-95h7pg](../.agents/pm/issues/pm-95h7pg.toon), [pm-giks4s](../.agents/pm/issues/pm-giks4s.toon), [pm-xa3t0o](../.agents/pm/issues/pm-xa3t0o.toon), [pm-e97jyf](../.agents/pm/issues/pm-e97jyf.toon), [pm-efkvdy](../.agents/pm/issues/pm-efkvdy.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), [pm-xa3t0o](../.agents/pm/issues/pm-xa3t0o.toon), [pm-e97jyf](../.agents/pm/issues/pm-e97jyf.toon), [pm-efkvdy](../.agents/pm/issues/pm-efkvdy.toon), [pm-ed28wi](../.agents/pm/issues/pm-ed28wi.toon), and [pm-5ug5xq](../.agents/pm/issues/pm-5ug5xq.toon).
|
|
6
6
|
|
|
7
7
|
## Agent Quick Context
|
|
8
8
|
|
|
@@ -43,7 +43,11 @@ claims to the same canonical gate IDs. Hosted-only environment isolation and
|
|
|
43
43
|
tracker-integrity steps remain explicit entries with reasons rather than
|
|
44
44
|
silently disappearing from local parity.
|
|
45
45
|
|
|
46
|
-
`node scripts/run-tests.mjs` wraps Vitest in temporary tracker roots,
|
|
46
|
+
`node scripts/run-tests.mjs` wraps Vitest in temporary tracker roots, disables
|
|
47
|
+
external Sentry delivery for the build, test workers, and their nested CLI
|
|
48
|
+
children, then cleans the roots up. Instrumentation tests can still exercise
|
|
49
|
+
Sentry initialization through their mocked module boundary; ordinary negative
|
|
50
|
+
fixtures must never create production incidents from a developer host.
|
|
47
51
|
|
|
48
52
|
Public SDK changes additionally run semantic surface and import-cost contracts:
|
|
49
53
|
|
|
@@ -1,25 +1,111 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version":
|
|
2
|
+
"version": 3,
|
|
3
|
+
"transcript_version": 2,
|
|
4
|
+
"transcript_digest": "sha256:2bf91406426d2a9e5de1da10ba67f7b8e9d4a4baa09eb488fe89ae3925c78f3f",
|
|
3
5
|
"estimator": "ceil(utf8_bytes / 4)",
|
|
4
6
|
"measurement_scope": "output_before_token_accounting",
|
|
5
7
|
"published_with_release": true,
|
|
6
|
-
"
|
|
8
|
+
"tasks": [
|
|
7
9
|
{
|
|
8
|
-
"id": "
|
|
9
|
-
"max_estimated_tokens":
|
|
10
|
+
"id": "context-bootstrap",
|
|
11
|
+
"max_estimated_tokens": 1978,
|
|
12
|
+
"steps": [
|
|
13
|
+
{
|
|
14
|
+
"id": "triage",
|
|
15
|
+
"max_estimated_tokens": 552,
|
|
16
|
+
"accounting_mode": "self_reported"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "orient",
|
|
20
|
+
"max_estimated_tokens": 1055,
|
|
21
|
+
"accounting_mode": "self_reported"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "inspect",
|
|
25
|
+
"max_estimated_tokens": 371,
|
|
26
|
+
"accounting_mode": "self_reported"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
10
29
|
},
|
|
11
30
|
{
|
|
12
|
-
"id": "
|
|
13
|
-
"max_estimated_tokens":
|
|
31
|
+
"id": "closed-domain-recovery",
|
|
32
|
+
"max_estimated_tokens": 630,
|
|
33
|
+
"steps": [
|
|
34
|
+
{
|
|
35
|
+
"id": "refuse-intent",
|
|
36
|
+
"max_estimated_tokens": 259,
|
|
37
|
+
"accounting_mode": "self_reported"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "retry-intent",
|
|
41
|
+
"max_estimated_tokens": 371,
|
|
42
|
+
"accounting_mode": "self_reported"
|
|
43
|
+
}
|
|
44
|
+
]
|
|
14
45
|
},
|
|
15
46
|
{
|
|
16
|
-
"id": "
|
|
17
|
-
"max_estimated_tokens":
|
|
47
|
+
"id": "unknown-option-recovery",
|
|
48
|
+
"max_estimated_tokens": 585,
|
|
49
|
+
"steps": [
|
|
50
|
+
{
|
|
51
|
+
"id": "refuse-option",
|
|
52
|
+
"max_estimated_tokens": 422,
|
|
53
|
+
"accounting_mode": "independent_transport"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "retry-option",
|
|
57
|
+
"max_estimated_tokens": 163,
|
|
58
|
+
"accounting_mode": "self_reported"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
18
61
|
},
|
|
19
62
|
{
|
|
20
|
-
"id": "
|
|
21
|
-
"max_estimated_tokens":
|
|
63
|
+
"id": "lifecycle-mutation",
|
|
64
|
+
"max_estimated_tokens": 812,
|
|
65
|
+
"steps": [
|
|
66
|
+
{
|
|
67
|
+
"id": "create",
|
|
68
|
+
"max_estimated_tokens": 20,
|
|
69
|
+
"accounting_mode": "self_reported"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "inspect-open",
|
|
73
|
+
"max_estimated_tokens": 363,
|
|
74
|
+
"accounting_mode": "self_reported"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "close",
|
|
78
|
+
"max_estimated_tokens": 31,
|
|
79
|
+
"accounting_mode": "self_reported"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "inspect-closed",
|
|
83
|
+
"max_estimated_tokens": 398,
|
|
84
|
+
"accounting_mode": "self_reported"
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"id": "bulk-effect-outcomes",
|
|
90
|
+
"max_estimated_tokens": 326,
|
|
91
|
+
"steps": [
|
|
92
|
+
{
|
|
93
|
+
"id": "create-bulk-target",
|
|
94
|
+
"max_estimated_tokens": 20,
|
|
95
|
+
"accounting_mode": "self_reported"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "partial-effect",
|
|
99
|
+
"max_estimated_tokens": 174,
|
|
100
|
+
"accounting_mode": "self_reported"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "no-effect",
|
|
104
|
+
"max_estimated_tokens": 132,
|
|
105
|
+
"accounting_mode": "self_reported"
|
|
106
|
+
}
|
|
107
|
+
]
|
|
22
108
|
}
|
|
23
109
|
],
|
|
24
|
-
"composite_max_estimated_tokens":
|
|
110
|
+
"composite_max_estimated_tokens": 4331
|
|
25
111
|
}
|