@unbrained/pm-cli 2026.8.27 → 2026.8.29
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 +49 -1
- package/dist/cli/error-guidance.js +61 -7
- package/dist/cli/register-annotations.js +58 -41
- package/dist/cli-bundle/bundle-manifest.json +142 -142
- package/dist/cli-bundle/chunks/{chunk-TNX6HC54.js → chunk-2MKLQL2E.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SKXLJIEK.js → chunk-2UETTHY6.js} +49 -49
- package/dist/cli-bundle/chunks/{chunk-SHMDY36D.js → chunk-3TEF3HM5.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SH6P7FXI.js → chunk-7SKMLSMX.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-7X6OZEIV.js +34 -0
- package/dist/cli-bundle/chunks/{chunk-CVBBGWW5.js → chunk-CMIEDWAY.js} +54 -50
- package/dist/cli-bundle/chunks/{chunk-3OO3W6FW.js → chunk-GNWPTEBW.js} +64 -61
- package/dist/cli-bundle/chunks/chunk-MTTKAUBX.js +2 -0
- package/dist/cli-bundle/chunks/chunk-N6OR6FAR.js +13 -0
- package/dist/cli-bundle/chunks/{chunk-R4ETAOJC.js → chunk-TGNAA66W.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-52EKTW6V.js → chunk-WS2GJQVG.js} +2 -2
- package/dist/cli-bundle/chunks/{register-list-query-EUWM6VII.js → register-list-query-OMKJ5ONN.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-FD4HSAVU.js → register-mutation-QBSNCOY3.js} +4 -4
- package/dist/cli-bundle/chunks/{register-operations-HRMNFEC3.js → register-operations-UC77FQZC.js} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-33GNICLX.js → register-setup-GLQ5SYV3.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-HC7ODMH3.js → chunk-3AVAWVZA.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-3UMBF26I.js +158 -0
- package/dist/cli-bundle/focused-chunks/{chunk-YVVZ3LQ6.js → chunk-73EDXGYE.js} +16 -15
- package/dist/cli-bundle/focused-chunks/{chunk-4BR5UU52.js → chunk-AXZ5AJAF.js} +45 -45
- package/dist/cli-bundle/focused-chunks/{chunk-MXTYGECH.js → chunk-G6PATS5E.js} +3 -3
- package/dist/cli-bundle/focused-chunks/{chunk-SUBSWYW3.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-RKOKG43G.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-TDK3OCX3.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-EKX37ZHA.js → chunk-THEPQMLX.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-FC2AXLB5.js → chunk-XXOWRJZ5.js} +2 -2
- package/dist/cli-bundle/main.js +14 -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 -32
- 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 +34 -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 +10 -10
- package/dist/core/diagnostics/remediation.js +16 -6
- package/dist/core/history/drift-scan.d.ts +2 -0
- package/dist/core/history/drift-scan.js +72 -36
- package/dist/core/history/history.d.ts +3 -3
- package/dist/core/history/history.js +5 -5
- package/dist/core/history/replay.d.ts +1 -1
- package/dist/core/history/replay.js +50 -19
- package/dist/core/item/actionability.d.ts +7 -1
- package/dist/core/item/actionability.js +44 -11
- package/dist/core/item/dependency-reference.d.ts +10 -0
- package/dist/core/item/dependency-reference.js +21 -0
- package/dist/core/item/parse.d.ts +4 -0
- package/dist/core/item/parse.js +38 -16
- package/dist/core/shared/author.js +69 -17
- package/dist/mcp/tool-definitions.js +5 -5
- 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/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 -67
- 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/flag-contracts.js +5 -2
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +5 -5
- 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 +16 -3
- package/dist/sdk/comments.d.ts +4 -0
- package/dist/sdk/comments.js +2 -2
- package/dist/sdk/completion.js +9 -5
- package/dist/sdk/contracts.d.ts +1 -0
- package/dist/sdk/contracts.js +3 -2
- package/dist/sdk/dependency-provenance.d.ts +51 -2
- package/dist/sdk/dependency-provenance.js +91 -7
- package/dist/sdk/extension/install-sources.d.ts +8 -1
- package/dist/sdk/extension/install-sources.js +132 -39
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +74 -14
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +86 -38
- package/dist/sdk/governance/health.js +86 -22
- package/dist/sdk/governance/validate-history-drift.js +5 -2
- package/dist/sdk/graph/assembly.js +51 -22
- package/dist/sdk/history-repair.d.ts +1 -1
- package/dist/sdk/history-repair.js +20 -10
- package/dist/sdk/index.d.ts +1 -0
- package/dist/sdk/index.js +3 -2
- 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/lifecycle/create.js +43 -19
- package/dist/sdk/linked-artifacts.js +21 -31
- package/dist/sdk/merge/reconcile.js +3 -16
- package/dist/sdk/notes.d.ts +4 -0
- package/dist/sdk/notes.js +2 -2
- package/dist/sdk/query/next.d.ts +6 -0
- package/dist/sdk/query/next.js +7 -2
- package/dist/sdk/runtime-input.js +5 -2
- package/dist/sdk/runtime.d.ts +6 -6
- package/dist/sdk/runtime.js +8 -8
- package/dist/sdk/test/entry.d.ts +1 -1
- package/dist/sdk/test/entry.js +5 -9
- package/dist/sdk/test/execution.d.ts +3 -0
- package/dist/sdk/test/execution.js +54 -13
- package/docs/COMMANDS.md +4 -3
- package/docs/CONTEXT_RECOVERY_PRIMITIVES.md +67 -0
- package/docs/MERGE_SAFETY.md +23 -10
- package/docs/OUTPUT_TOKEN_ACCOUNTING.md +20 -7
- package/docs/README.md +1 -0
- package/docs/RELEASING.md +9 -1
- package/docs/SDK.md +12 -0
- package/docs/SDK_CONTEXT_INTEGRITY.md +12 -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/FLAG_LEXICON_BUDGETS.md +3 -3
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +13 -4
- package/docs/performance/cli-transport-overhead.md +10 -2
- package/marketplace.json +2 -2
- package/package.json +8 -8
- 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 +297 -36
- package/dist/cli-bundle/chunks/chunk-MFNTKMTI.js +0 -13
- package/dist/cli-bundle/chunks/chunk-OS27HHBN.js +0 -35
- package/dist/cli-bundle/chunks/chunk-QTO7USTH.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-2AGZ5BRT.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-AQ5IYEZZ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-XDPYBQCF.js +0 -156
- package/dist/cli-bundle/focused-chunks/chunk-Y5A7SJJ7.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-YHWHX6YY.js +0 -2
|
@@ -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/README.md
CHANGED
|
@@ -68,6 +68,7 @@ pm guide release --json
|
|
|
68
68
|
- [Recurrence and Executable Recovery Contracts](RECURRENCE_RECOVERY_CONTRACTS.md) - terminal-item recurrence, duplicate-intake routing, capability-aware reindex recovery, and target-aware generated test guidance.
|
|
69
69
|
- [Trustworthy Context and Evidence Contracts](TRUSTWORTHY_CONTEXT_EVIDENCE.md) - full-record assurance, graph composition, boolean health rows, lossless linked-test removal, and role-labelled recovery.
|
|
70
70
|
- [Context Integrity Contracts](CONTEXT_INTEGRITY_CONTRACTS.md) - sparse-read identity, closed extension manifests, lossless remote docs, direction-locked graph impact, and cross-version history epochs.
|
|
71
|
+
- [Context Integrity and Recovery Primitives](CONTEXT_RECOVERY_PRIMITIVES.md) - lossless metadata, write-time link receipts, executed-test evidence, external blockers, npm receipts, history capabilities, and truthful recovery.
|
|
71
72
|
- [SDK Evidence Traceability and Integrity](SDK_EVIDENCE_TRACEABILITY.md) - reverse source-to-item lookup, atomic evidence replacement, no-op history, linked-test collision classification, and telemetry drain receipts.
|
|
72
73
|
- [SDK Context and Evidence Contracts](SDK_CONTEXT_EVIDENCE_CONTRACTS.md) - material omission receipts, scoped preflight activation, truthful merge preference, claim-race classification, and versioned history hashes.
|
|
73
74
|
- [Reproducible Workspaces and Snapshots](REPRODUCIBLE_WORKSPACES.md) - deterministic SDK recipes and content-addressed authoritative tracker restore points.
|
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
|
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
|
|
|
@@ -82,6 +82,17 @@ The structured `option_scope` is `declared_on_path`, `declared_elsewhere`, or
|
|
|
82
82
|
case, while the third names the nearest current-path spellings and explicitly
|
|
83
83
|
terminates the otherwise-unbounded command search.
|
|
84
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
|
+
|
|
85
96
|
## Semantic flag and spelling contracts
|
|
86
97
|
|
|
87
98
|
`listPmFlagLexicon()` classifies flags by meaning rather than spelling alone.
|
|
@@ -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
|
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 2,
|
|
3
|
+
"tasks": [
|
|
4
|
+
{
|
|
5
|
+
"id": "context-bootstrap",
|
|
6
|
+
"description": "Orient in a scaled workspace and inspect the canonical focus item.",
|
|
7
|
+
"steps": [
|
|
8
|
+
{
|
|
9
|
+
"id": "triage",
|
|
10
|
+
"args": ["list", "--for", "triage", "--limit", "2"],
|
|
11
|
+
"expected_exit_code": 0,
|
|
12
|
+
"expected_output_kind": "collection",
|
|
13
|
+
"expected_accounting_mode": "self_reported",
|
|
14
|
+
"required_fields": ["items"]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "orient",
|
|
18
|
+
"args": ["context", "--for", "orient", "--limit", "5"],
|
|
19
|
+
"expected_exit_code": 0,
|
|
20
|
+
"expected_output_kind": "diagnostic",
|
|
21
|
+
"expected_accounting_mode": "self_reported",
|
|
22
|
+
"required_fields": ["summary.active_items", "hierarchy", "activity"]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "inspect",
|
|
26
|
+
"args": ["get", "$ANCHOR_ID", "--for", "inspect"],
|
|
27
|
+
"expected_exit_code": 0,
|
|
28
|
+
"expected_output_kind": "entity",
|
|
29
|
+
"expected_accounting_mode": "self_reported",
|
|
30
|
+
"required_fields": ["item.id"]
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "closed-domain-recovery",
|
|
36
|
+
"description": "Reject an invalid context intent and execute the advertised shell-free retry.",
|
|
37
|
+
"steps": [
|
|
38
|
+
{
|
|
39
|
+
"id": "refuse-intent",
|
|
40
|
+
"args": ["get", "$ANCHOR_ID", "--for", "invalid-agent-intent"],
|
|
41
|
+
"expected_exit_code": 2,
|
|
42
|
+
"expected_output_kind": "refusal",
|
|
43
|
+
"expected_accounting_mode": "self_reported",
|
|
44
|
+
"required_fields": ["code", "refusal", "recovery"],
|
|
45
|
+
"expected_error_code": "unknown_context_intent",
|
|
46
|
+
"expected_refusal_surface": "--for"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "retry-intent",
|
|
50
|
+
"args": ["get", "$ANCHOR_ID", "--for", "inspect"],
|
|
51
|
+
"expected_exit_code": 0,
|
|
52
|
+
"expected_output_kind": "entity",
|
|
53
|
+
"expected_accounting_mode": "self_reported",
|
|
54
|
+
"required_fields": ["item.id"],
|
|
55
|
+
"recovery_for": "refuse-intent"
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "unknown-option-recovery",
|
|
61
|
+
"description": "Identify an unsupported option after valid flags and continue with the corrected command.",
|
|
62
|
+
"steps": [
|
|
63
|
+
{
|
|
64
|
+
"id": "refuse-option",
|
|
65
|
+
"args": [
|
|
66
|
+
"search",
|
|
67
|
+
"agent task",
|
|
68
|
+
"--status",
|
|
69
|
+
"open",
|
|
70
|
+
"--limit",
|
|
71
|
+
"5",
|
|
72
|
+
"--include-body"
|
|
73
|
+
],
|
|
74
|
+
"expected_exit_code": 2,
|
|
75
|
+
"expected_output_kind": "refusal",
|
|
76
|
+
"expected_accounting_mode": "independent_transport",
|
|
77
|
+
"required_fields": ["code", "refusal", "recovery"],
|
|
78
|
+
"expected_error_code": "unknown_option",
|
|
79
|
+
"expected_refusal_surface": "--include-body"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "retry-option",
|
|
83
|
+
"args": ["search", "agent task", "--status", "open", "--limit", "5"],
|
|
84
|
+
"expected_exit_code": 0,
|
|
85
|
+
"expected_output_kind": "collection",
|
|
86
|
+
"expected_accounting_mode": "self_reported",
|
|
87
|
+
"required_fields": ["items"],
|
|
88
|
+
"recovery_for": "refuse-option"
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "lifecycle-mutation",
|
|
94
|
+
"description": "Create, inspect, close, and confirm a project item through public CLI receipts.",
|
|
95
|
+
"steps": [
|
|
96
|
+
{
|
|
97
|
+
"id": "create",
|
|
98
|
+
"args": [
|
|
99
|
+
"create",
|
|
100
|
+
"--id",
|
|
101
|
+
"$LIFECYCLE_ID",
|
|
102
|
+
"--title",
|
|
103
|
+
"Transcript lifecycle item",
|
|
104
|
+
"--description",
|
|
105
|
+
"Golden multi-step lifecycle task",
|
|
106
|
+
"--type",
|
|
107
|
+
"Task",
|
|
108
|
+
"--status",
|
|
109
|
+
"open",
|
|
110
|
+
"--create-mode",
|
|
111
|
+
"progressive"
|
|
112
|
+
],
|
|
113
|
+
"expected_exit_code": 0,
|
|
114
|
+
"expected_output_kind": "mutation_receipt",
|
|
115
|
+
"expected_accounting_mode": "self_reported",
|
|
116
|
+
"required_fields": ["id", "changed_field_count"]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"id": "inspect-open",
|
|
120
|
+
"args": ["get", "$LIFECYCLE_ID", "--for", "inspect"],
|
|
121
|
+
"expected_exit_code": 0,
|
|
122
|
+
"expected_output_kind": "entity",
|
|
123
|
+
"expected_accounting_mode": "self_reported",
|
|
124
|
+
"required_fields": ["item.id", "item.status"],
|
|
125
|
+
"expected_field_values": { "item.status": "open" }
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"id": "close",
|
|
129
|
+
"args": ["close", "$LIFECYCLE_ID", "Golden task completed"],
|
|
130
|
+
"expected_exit_code": 0,
|
|
131
|
+
"expected_output_kind": "mutation_receipt",
|
|
132
|
+
"expected_accounting_mode": "self_reported",
|
|
133
|
+
"required_fields": ["id", "status", "close_reason"]
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id": "inspect-closed",
|
|
137
|
+
"args": ["get", "$LIFECYCLE_ID", "--for", "inspect"],
|
|
138
|
+
"expected_exit_code": 0,
|
|
139
|
+
"expected_output_kind": "entity",
|
|
140
|
+
"expected_accounting_mode": "self_reported",
|
|
141
|
+
"required_fields": ["item.id", "item.status"],
|
|
142
|
+
"expected_field_values": { "item.status": "closed" }
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"id": "bulk-effect-outcomes",
|
|
148
|
+
"description": "Preserve successful partial-effect and no-effect outcomes across a bulk lifecycle task.",
|
|
149
|
+
"steps": [
|
|
150
|
+
{
|
|
151
|
+
"id": "create-bulk-target",
|
|
152
|
+
"args": [
|
|
153
|
+
"create",
|
|
154
|
+
"--id",
|
|
155
|
+
"$BULK_ID",
|
|
156
|
+
"--title",
|
|
157
|
+
"Transcript bulk effect target",
|
|
158
|
+
"--description",
|
|
159
|
+
"Golden bulk outcome transcript target",
|
|
160
|
+
"--type",
|
|
161
|
+
"Task",
|
|
162
|
+
"--status",
|
|
163
|
+
"open",
|
|
164
|
+
"--create-mode",
|
|
165
|
+
"progressive"
|
|
166
|
+
],
|
|
167
|
+
"expected_exit_code": 0,
|
|
168
|
+
"expected_output_kind": "mutation_receipt",
|
|
169
|
+
"expected_accounting_mode": "self_reported",
|
|
170
|
+
"required_fields": ["id", "status", "changed_field_count"]
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"id": "partial-effect",
|
|
174
|
+
"args": [
|
|
175
|
+
"close-many",
|
|
176
|
+
"--ids",
|
|
177
|
+
"$BULK_ID,pm-transcript-missing",
|
|
178
|
+
"--reason",
|
|
179
|
+
"Golden partial-effect transcript",
|
|
180
|
+
"--validate-close",
|
|
181
|
+
"off",
|
|
182
|
+
"--no-checkpoint"
|
|
183
|
+
],
|
|
184
|
+
"expected_exit_code": 7,
|
|
185
|
+
"expected_output_kind": "collection",
|
|
186
|
+
"expected_accounting_mode": "self_reported",
|
|
187
|
+
"required_fields": ["rows", "outcome", "exit_code"],
|
|
188
|
+
"expected_field_values": { "outcome": "partial_effect" }
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"id": "no-effect",
|
|
192
|
+
"args": [
|
|
193
|
+
"close-many",
|
|
194
|
+
"--ids",
|
|
195
|
+
"$BULK_ID",
|
|
196
|
+
"--reason",
|
|
197
|
+
"Golden no-effect transcript",
|
|
198
|
+
"--validate-close",
|
|
199
|
+
"off",
|
|
200
|
+
"--no-checkpoint"
|
|
201
|
+
],
|
|
202
|
+
"expected_exit_code": 6,
|
|
203
|
+
"expected_output_kind": "collection",
|
|
204
|
+
"expected_accounting_mode": "self_reported",
|
|
205
|
+
"required_fields": ["rows", "outcome", "exit_code"],
|
|
206
|
+
"expected_field_values": { "outcome": "no_effect" }
|
|
207
|
+
}
|
|
208
|
+
]
|
|
209
|
+
}
|
|
210
|
+
]
|
|
211
|
+
}
|
|
@@ -48,9 +48,9 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
|
|
|
48
48
|
| `close-many` | lifecycle | 72 | 72 |
|
|
49
49
|
| `delete` | lifecycle | 24 | 24 |
|
|
50
50
|
| `append` | evidence | 24 | 24 |
|
|
51
|
-
| `comments` | evidence |
|
|
52
|
-
| `notes` | evidence |
|
|
53
|
-
| `learnings` | evidence |
|
|
51
|
+
| `comments` | evidence | 31 | 31 |
|
|
52
|
+
| `notes` | evidence | 35 | 35 |
|
|
53
|
+
| `learnings` | evidence | 27 | 27 |
|
|
54
54
|
| `files` | evidence | 39 | 39 |
|
|
55
55
|
| `docs` | evidence | 30 | 30 |
|
|
56
56
|
| `deps` | graph | 32 | 32 |
|
|
@@ -4,12 +4,12 @@ Tracker: `pm-f05lsg`.
|
|
|
4
4
|
|
|
5
5
|
Every catalog code is listed. An `uncovered` row is an explicit closure obligation, never an omission or implied approval.
|
|
6
6
|
|
|
7
|
-
- Catalog error codes:
|
|
7
|
+
- Catalog error codes: 353
|
|
8
8
|
- Executable error codes: 19
|
|
9
9
|
- Executable-code ratchet floor: 18
|
|
10
10
|
- Required executable canonical codes: `bulk_ids_input_empty`, `bulk_ids_input_missing_path`, `bulk_ids_input_unreadable`, `invalid_argument_value`, `manifest_unknown_key`, `missing_lifecycle_target`, `missing_required_argument`, `no_version_bounds_declared`, `projection_options_mutually_exclusive`, `tracker_not_initialized`, `tracker_root_missing`, `tracker_root_not_directory`, `tracker_root_unreadable`, `unknown_context_intent`, `unknown_field_projection`, `unknown_option`, `unknown_subcommand`
|
|
11
|
-
- Uncovered error codes:
|
|
12
|
-
- Coverage fraction: 0.
|
|
11
|
+
- Uncovered error codes: 334
|
|
12
|
+
- Coverage fraction: 0.053824
|
|
13
13
|
- Closed-domain probes: 19
|
|
14
14
|
- Grammar probes: 94
|
|
15
15
|
|
|
@@ -25,10 +25,12 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
25
25
|
| `ambiguous_option_combination` | `ambiguous_option_combination` | uncovered | none | 0 |
|
|
26
26
|
| `annotation_alias_conflict` | `annotation_alias_conflict` | uncovered | none | 0 |
|
|
27
27
|
| `annotation_flag_like_value` | `annotation_flag_like_value` | uncovered | none | 0 |
|
|
28
|
+
| `annotation_if_absent_without_append` | `annotation_if_absent_without_append` | uncovered | none | 0 |
|
|
28
29
|
| `annotation_message_without_text` | `annotation_message_without_text` | uncovered | none | 0 |
|
|
29
30
|
| `annotation_transposed_subcommand` | `annotation_transposed_subcommand` | uncovered | none | 0 |
|
|
30
31
|
| `append_empty_body` | `append_empty_body` | uncovered | none | 0 |
|
|
31
32
|
| `assurance_registry_invalid` | `assurance_registry_invalid` | uncovered | none | 0 |
|
|
33
|
+
| `bare_comma_entry_ambiguous` | `bare_comma_entry_ambiguous` | uncovered | none | 0 |
|
|
32
34
|
| `body_file_conflicts_with_body` | `body_file_conflicts_with_body` | uncovered | none | 0 |
|
|
33
35
|
| `body_file_missing_path` | `body_file_missing_path` | uncovered | none | 0 |
|
|
34
36
|
| `body_file_unreadable` | `body_file_unreadable` | uncovered | none | 0 |
|
|
@@ -114,6 +116,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
114
116
|
| `history_drift_merge_receipt` | `history_drift_merge_receipt` | uncovered | none | 0 |
|
|
115
117
|
| `history_drift_missing_stream` | `history_drift_missing_stream` | uncovered | none | 0 |
|
|
116
118
|
| `history_drift_unreadable_stream` | `history_drift_unreadable_stream` | uncovered | none | 0 |
|
|
119
|
+
| `history_drift_version_skew` | `history_drift_version_skew` | uncovered | none | 0 |
|
|
117
120
|
| `history_merge_conflict_markers_detected` | `merge_conflict_markers_detected` | uncovered | none | 0 |
|
|
118
121
|
| `history_stream_over_compact_threshold` | `history_stream_over_compact_threshold` | uncovered | none | 0 |
|
|
119
122
|
| `history_target_out_of_range` | `history_target_out_of_range` | uncovered | none | 0 |
|
|
@@ -184,7 +187,6 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
184
187
|
| `merge_git_config_unwritable` | `merge_git_config_unwritable` | uncovered | none | 0 |
|
|
185
188
|
| `merge_receipt_evidence_invalid` | `merge_receipt_evidence_invalid` | uncovered | none | 0 |
|
|
186
189
|
| `merge_receipts_pending` | `merge_receipts_pending` | uncovered | none | 0 |
|
|
187
|
-
| `merge_reconcile_discards_require_acceptance` | `merge_reconcile_discards_require_acceptance` | uncovered | none | 0 |
|
|
188
190
|
| `merge_reconcile_receipt_evidence_untrusted` | `merge_reconcile_receipt_evidence_untrusted` | uncovered | none | 0 |
|
|
189
191
|
| `merge_root_not_found` | `merge_root_not_found` | uncovered | none | 0 |
|
|
190
192
|
| `missing_allowed_values` | `missing_allowed_values` | uncovered | none | 0 |
|
|
@@ -197,6 +199,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
197
199
|
| `missing_observation` | `missing_observation` | uncovered | none | 0 |
|
|
198
200
|
| `missing_observed_signature` | `missing_observed_signature` | uncovered | none | 0 |
|
|
199
201
|
| `missing_parameter_alias` | `missing_parameter_alias` | uncovered | none | 0 |
|
|
202
|
+
| `missing_positive_execution_receipt` | `missing_positive_execution_receipt` | uncovered | none | 0 |
|
|
200
203
|
| `missing_probe` | `missing_probe` | uncovered | none | 0 |
|
|
201
204
|
| `missing_required_argument` | `missing_required_argument` | executable | grammar | 57 |
|
|
202
205
|
| `missing_required_option` | `missing_required_option` | uncovered | none | 0 |
|
|
@@ -213,6 +216,9 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
213
216
|
| `no_update_fields` | `no_update_fields` | uncovered | none | 0 |
|
|
214
217
|
| `no_version_bounds_declared` | `no_version_bounds_declared` | executable | owned_state | 1 |
|
|
215
218
|
| `non_refusal_exit` | `non_refusal_exit` | uncovered | none | 0 |
|
|
219
|
+
| `npm_pack_json_shape_unsupported` | `npm_pack_json_shape_unsupported` | uncovered | none | 0 |
|
|
220
|
+
| `npm_package_archive_missing` | `npm_package_archive_missing` | uncovered | none | 0 |
|
|
221
|
+
| `npm_package_archive_unsafe` | `npm_package_archive_unsafe` | uncovered | none | 0 |
|
|
216
222
|
| `npm_package_not_found` | `npm_package_not_found` | uncovered | none | 0 |
|
|
217
223
|
| `ownership_conflict` | `ownership_conflict` | uncovered | none | 0 |
|
|
218
224
|
| `ownership_dependency_bypass_restricted_options` | `ownership_dependency_bypass_restricted_options` | uncovered | none | 0 |
|
|
@@ -246,6 +252,8 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
246
252
|
| `reopen_reason_required` | `reopen_reason_required` | uncovered | none | 0 |
|
|
247
253
|
| `reopen_receipt_missing` | `reopen_receipt_missing` | uncovered | none | 0 |
|
|
248
254
|
| `reopen_target_status_invalid` | `reopen_target_status_invalid` | uncovered | none | 0 |
|
|
255
|
+
| `reported_zero_passes` | `reported_zero_passes` | uncovered | none | 0 |
|
|
256
|
+
| `reported_zero_tests` | `reported_zero_tests` | uncovered | none | 0 |
|
|
249
257
|
| `reserved_item_field` | `reserved_item_field` | uncovered | none | 0 |
|
|
250
258
|
| `retry_failed` | `retry_failed` | uncovered | none | 0 |
|
|
251
259
|
| `schema_migration_input_required` | `schema_migration_input_required` | uncovered | none | 0 |
|
|
@@ -314,6 +322,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
314
322
|
| `validate_history_drift_hash_mismatches` | `history_drift_hash_mismatch` | uncovered | none | 0 |
|
|
315
323
|
| `validate_history_drift_missing_streams` | `history_drift_missing_stream` | uncovered | none | 0 |
|
|
316
324
|
| `validate_history_drift_unreadable_streams` | `history_drift_unreadable_stream` | uncovered | none | 0 |
|
|
325
|
+
| `validate_history_drift_version_skews` | `history_drift_version_skew` | uncovered | none | 0 |
|
|
317
326
|
| `validate_history_unknown_author_events` | `history_unknown_author_events` | uncovered | none | 0 |
|
|
318
327
|
| `validate_lifecycle_active_closure_like_metadata` | `validate_lifecycle_active_closure_like_metadata` | uncovered | none | 0 |
|
|
319
328
|
| `validate_lifecycle_active_terminal_parent` | `validate_lifecycle_active_terminal_parent` | uncovered | none | 0 |
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
# CLI transport overhead
|
|
2
2
|
|
|
3
|
-
Tracked by [pm-yse5dt](../../.agents/pm/tasks/pm-yse5dt.toon)
|
|
3
|
+
Tracked by [pm-yse5dt](../../.agents/pm/tasks/pm-yse5dt.toon), with RSS
|
|
4
|
+
admission reliability owned by
|
|
5
|
+
[pm-pz49xc](../../.agents/pm/issues/pm-pz49xc.toon).
|
|
4
6
|
|
|
5
7
|
Each result starts from a fresh isolated workspace containing exactly one item.
|
|
6
8
|
The command runs in a fresh Node v26.5.0 process on
|
|
7
9
|
linux/x64; setup and fixture generation are
|
|
8
10
|
outside the timed interval. Short local gates use the best observed latency,
|
|
9
|
-
while the report retains p50 and p95 evidence.
|
|
11
|
+
while the report retains p50 and p95 evidence. RSS admission uses the measured
|
|
12
|
+
median so one page-level outlier cannot false-fail the gate; the maximum remains
|
|
13
|
+
in the report as diagnostic evidence. Every post-warmup RSS sample must be a
|
|
14
|
+
finite measurement; an unavailable sample makes the admission median unavailable
|
|
15
|
+
and fails closed when a budget exists. Admission adds a fixed 512 KiB noise margin
|
|
16
|
+
without changing the committed budget; a majority persistent increase beyond
|
|
17
|
+
that bounded margin still fails.
|
|
10
18
|
|
|
11
19
|
| Command | best | p50 | p95 |
|
|
12
20
|
| --------- | -----: | -----: | -----: |
|