@unbrained/pm-cli 2026.9.23 → 2026.9.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/AGENTS.md +6 -20
- package/CHANGELOG.md +37 -0
- package/dist/cli/error-guidance.d.ts +9 -0
- package/dist/cli/error-guidance.js +1 -1
- package/dist/cli/help-content.js +1 -1
- package/dist/cli-bundle/bundle-manifest.json +153 -153
- package/dist/cli-bundle/chunks/{chunk-KOUT5SAA.js → chunk-25KTCTBL.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-E6ZES2X7.js → chunk-3IB4THWX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-PFWCAI4X.js → chunk-445ARBKY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-VO7DHENB.js → chunk-5AP67ZXH.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-SXRMM72R.js → chunk-COFQCKF4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-WBB5B7G5.js → chunk-CZ3VJJEA.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-OBTHQ6UX.js → chunk-GAU55CWI.js} +28 -28
- package/dist/cli-bundle/chunks/{chunk-ZSVINTXT.js → chunk-GOWZEBTH.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-7IABMUB6.js → chunk-JDHWZYZU.js} +73 -73
- package/dist/cli-bundle/chunks/{chunk-ZWSWR2GX.js → chunk-P7ZSJOWH.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-6WBR6GMW.js → chunk-YABJDOOX.js} +63 -62
- package/dist/cli-bundle/chunks/{chunk-NBGSRFZE.js → chunk-YDIGMRLZ.js} +2 -2
- package/dist/cli-bundle/chunks/{register-list-query-IFPQ4YRD.js → register-list-query-IZ7ZVTDE.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-C3O7OSXW.js → register-mutation-IPAZTFDZ.js} +2 -2
- package/dist/cli-bundle/chunks/{register-operations-LGO7DBZ7.js → register-operations-APN33LNI.js} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-4EW2PPZD.js → register-setup-HPHIKG5U.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-YE6F5HGF.js → chunk-ABA3KRPY.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-S5JYIFFS.js → chunk-HQPTDJLF.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-FIQYVDLL.js → chunk-IXNNMP2R.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-KRIHJH5U.js +75 -0
- package/dist/cli-bundle/focused-chunks/{chunk-LZOEUNHR.js → chunk-MK5AKKHK.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-6CWR2QFM.js → chunk-NRHTXBTI.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-L554BKFH.js → chunk-NVVB2HJC.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-PIHQNL32.js → chunk-O7MIBEMK.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-BKXYQQDT.js → chunk-OY3VHCTX.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-N2JYYEHM.js → chunk-PMPFLA6X.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-HJA6OHWT.js → chunk-Q355NPLH.js} +28 -28
- package/dist/cli-bundle/focused-chunks/{chunk-BQSKFRL2.js → chunk-TLF6N56J.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-QREDJ77O.js → chunk-UIFVIE5F.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-KMNH4G6Y.js → chunk-V2X37U6J.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-E5AOEXF5.js → chunk-XKH2FC5D.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-BULUJEOL.js → chunk-Y2M4QLAA.js} +2 -2
- package/dist/cli-bundle/main.js +22 -22
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +1 -1
- package/dist/cli-bundle/sdk-core.js +30 -45
- 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 +58 -42
- 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 +9 -10
- package/dist/core/policy/workflow-policy-store.js +1 -1
- package/dist/core/shared/errors.d.ts +13 -0
- package/dist/core/shared/errors.js +1 -1
- package/dist/sdk/completion/bash.js +1 -1
- package/dist/sdk/governance/health.d.ts +1 -1
- package/dist/sdk/governance/health.js +1 -1
- package/dist/sdk/init-agent-guidance.d.ts +2 -1
- package/dist/sdk/init-agent-guidance.js +2 -2
- package/dist/sdk/merge/install.js +2 -2
- package/dist/sdk/merge/worktree-config.d.ts +9 -0
- package/dist/sdk/merge/worktree-config.js +2 -0
- package/dist/sdk/public-surface.json +1 -1
- package/docs/AGENT_RECOVERY_AND_GUIDANCE.md +49 -0
- package/docs/CHATGPT_CODEX_PLUGIN_IMPLEMENTATION.md +2 -0
- package/docs/CLAUDE_CODE_PLUGIN.md +18 -7
- package/docs/CODEX_PLUGIN.md +5 -12
- package/docs/DEFECT_RECURRENCE.md +8 -1
- package/docs/DEPENDENCY_KIND_CONTRACT.md +27 -0
- package/docs/MERGE_SAFETY.md +28 -5
- package/docs/README.md +1 -0
- package/docs/RELEASE_RELIABILITY.md +70 -0
- package/docs/RELEASING.md +4 -0
- package/docs/TESTING.md +17 -0
- package/docs/VALIDATION_PORTABILITY.md +20 -11
- package/marketplace.json +2 -2
- package/package.json +6 -5
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/README.md +6 -5
- package/plugins/pm-claude/hooks/hooks.json +1 -1
- package/plugins/pm-claude/hooks/session-start.mjs +9 -6
- package/plugins/pm-claude/package.json +9 -0
- package/plugins/pm-claude/scripts/plugin-runtime.mjs +84 -0
- package/plugins/pm-claude/scripts/pm-mcp-server.mjs +39 -96
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.mcp.json +0 -3
- package/plugins/pm-codex/README.md +1 -1
- package/plugins/pm-codex/package.json +9 -0
- package/plugins/pm-codex/scripts/plugin-runtime.mjs +84 -0
- package/plugins/pm-codex/scripts/pm-mcp-server.mjs +38 -99
- package/dist/cli-bundle/focused-chunks/chunk-3JAEZ7WI.js +0 -59
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Agent Recovery and Guidance
|
|
2
|
+
|
|
3
|
+
Tracked by [pm-o5s22y](../.agents/pm/issues/pm-o5s22y.toon) and
|
|
4
|
+
[pm-80k965](../.agents/pm/issues/pm-80k965.toon).
|
|
5
|
+
|
|
6
|
+
## Policy refusals preserve context
|
|
7
|
+
|
|
8
|
+
A workflow `require_fields` refusal names the missing metadata and the policy
|
|
9
|
+
that requires it. SDK `PmCliError.context` carries `policy_violations`, the
|
|
10
|
+
full refusal count, policy descriptions, and missing-field recovery. CLI JSON
|
|
11
|
+
adds that same evidence to `refusal.policies` and `refusal.missing_fields`.
|
|
12
|
+
Its `surface` identifies `policy:<id>` rather than attributing the failure to
|
|
13
|
+
an unrelated, valid flag such as `--resolution`.
|
|
14
|
+
|
|
15
|
+
Diagnostics show at most three policy rows and disclose the total. The complete
|
|
16
|
+
policy remains available through `pm schema policies`. Recovery maps metadata
|
|
17
|
+
to declared update flags; package-defined fields retain their SDK/package
|
|
18
|
+
contract instead of receiving an invented CLI option. For example, a missing
|
|
19
|
+
`actual_result` produces an update using `--actual-result`, followed by a retry
|
|
20
|
+
of the refused operation. Refusals preserve item state and record the policy
|
|
21
|
+
refusal in workspace history. Creation and import refusals instead direct the
|
|
22
|
+
caller to supply evidence in the original request, because no item was created.
|
|
23
|
+
Generated update commands include a shell-quoted `--pm-path` to retain the
|
|
24
|
+
refusing tracker even when an SDK caller works outside that project.
|
|
25
|
+
|
|
26
|
+
See [Declarative Workflow Policies](WORKFLOW_POLICIES.md) for portable policy
|
|
27
|
+
declarations and approval semantics.
|
|
28
|
+
|
|
29
|
+
## Refresh managed agent instructions
|
|
30
|
+
|
|
31
|
+
Root and alias help examples use canonical commands. Help for a deprecated
|
|
32
|
+
alias explicitly identifies its replacement. Generated instructions use
|
|
33
|
+
`pm claim <id> --start` to claim and start work atomically.
|
|
34
|
+
|
|
35
|
+
`pm init --agent-guidance status` compares existing managed blocks with the
|
|
36
|
+
current template. `pm health --summary` reports `agent_guidance_outdated` as an
|
|
37
|
+
advisory and supplies this repair command:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pm init --agent-guidance add
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The repair refreshes stale managed blocks in both `AGENTS.md` and `CLAUDE.md`,
|
|
44
|
+
preserves all surrounding user instructions, and becomes a no-op after the
|
|
45
|
+
first successful refresh. It does not replace handwritten guidance without
|
|
46
|
+
managed markers. Status and health inspection do not rewrite these files.
|
|
47
|
+
An unreadable guidance path produces an `agent_guidance_unreadable` advisory;
|
|
48
|
+
health still reports the remaining checks and suggests inspecting file types
|
|
49
|
+
and read permissions.
|
|
@@ -6,6 +6,8 @@ Tracked research: [pm-n28t](../.agents/pm/tasks/pm-n28t.toon). Future implementa
|
|
|
6
6
|
Research date: **2026-07-11**. This page is a research and implementation plan. It does not record a completed
|
|
7
7
|
plugin remediation, ChatGPT app deployment, or public plugin submission.
|
|
8
8
|
|
|
9
|
+
Update for [pm-95d7](../.agents/pm/features/pm-95d7.toon): the Claude and Codex cached launchers now resolve a runtime pinned to the plugin version and reuse it offline after first installation. The remaining sections preserve the July research baseline and the separate ChatGPT app/public distribution plan; historical `@latest` findings below describe the pre-remediation state.
|
|
10
|
+
|
|
9
11
|
## Executive Conclusion
|
|
10
12
|
|
|
11
13
|
The current `plugins/pm-codex` package is an actual native Codex plugin, but it is not yet a complete,
|
|
@@ -24,7 +24,9 @@ pm-cli/ (repo root)
|
|
|
24
24
|
│ │ └── session-start.mjs # Injects pm context at session start
|
|
25
25
|
│ ├── agents/ # Subagent definitions (one .md per coordinator/triage/verification subagent)
|
|
26
26
|
│ ├── scripts/
|
|
27
|
-
│ │
|
|
27
|
+
│ │ ├── pm-mcp-server.mjs # MCP server launcher
|
|
28
|
+
│ │ └── plugin-runtime.mjs # Exact-version runtime resolver
|
|
29
|
+
│ ├── package.json # Pinned pm-cli dependency
|
|
28
30
|
│ └── README.md # User-facing installation guide
|
|
29
31
|
└── scripts/
|
|
30
32
|
└── smoke-claude-plugin.mjs # Full plugin smoke test (run in CI)
|
|
@@ -83,10 +85,10 @@ agent mutations do not need a hard-wired `PM_AUTHOR`.
|
|
|
83
85
|
`plugins/pm-claude/scripts/pm-mcp-server.mjs` resolves the server in order:
|
|
84
86
|
|
|
85
87
|
1. `PM_CLI_MCP_SERVER` env var (explicit override)
|
|
86
|
-
2. `dist/mcp/server.js`
|
|
87
|
-
3.
|
|
88
|
+
2. `dist/mcp/server.js` at the matching repository root, when the checkout package and plugin versions agree
|
|
89
|
+
3. The exact `@unbrained/pm-cli` version declared in the plugin's `package.json`, installed under the plugin data directory on first use
|
|
88
90
|
|
|
89
|
-
|
|
91
|
+
The cached runtime is reused offline. It never resolves npm's moving `latest` tag. A first install needs npm access; an unavailable pinned release causes an explicit startup failure.
|
|
90
92
|
|
|
91
93
|
## Session Start Hook
|
|
92
94
|
|
|
@@ -94,7 +96,7 @@ This means the plugin works both from a repo checkout and from an npm-cached plu
|
|
|
94
96
|
|
|
95
97
|
1. Checks for `.agents/pm/settings.json` in the current workspace.
|
|
96
98
|
2. Exits silently if pm is not initialized.
|
|
97
|
-
3. Runs `pm context --limit 5 --json` with a
|
|
99
|
+
3. Runs `pm context --limit 5 --json` from the same pinned runtime as the MCP server, with a 15-second command timeout.
|
|
98
100
|
4. Injects a compact status line into the session context.
|
|
99
101
|
|
|
100
102
|
Example injection:
|
|
@@ -121,6 +123,15 @@ discovery for `2026-07-28`, 32 tools present, full workflow (init → create →
|
|
|
121
123
|
claim → update → link files/docs/tests → get → context → search → validate →
|
|
122
124
|
health), and session-start hook.
|
|
123
125
|
|
|
126
|
+
The copied-cache smoke packs the current build, installs it under a temporary
|
|
127
|
+
plugin data directory, copies both plugin bundles away from the checkout, and
|
|
128
|
+
restarts their MCP launchers with npm unavailable:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
pnpm build
|
|
132
|
+
pnpm smoke:plugin-cache
|
|
133
|
+
```
|
|
134
|
+
|
|
124
135
|
### MCP server smoke test
|
|
125
136
|
|
|
126
137
|
```bash
|
|
@@ -182,9 +193,9 @@ After installing the plugin:
|
|
|
182
193
|
|
|
183
194
|
| pm-cli version | Plugin version | Claude Code version |
|
|
184
195
|
|---------------|----------------|---------------------|
|
|
185
|
-
|
|
|
196
|
+
| Exact same date-based version as the plugin | Exact same date-based version as pm-cli | Current supported Claude Code |
|
|
186
197
|
|
|
187
|
-
The authoritative plugin version is `plugins/pm-claude/.claude-plugin/plugin.json`;
|
|
198
|
+
The authoritative plugin version is `plugins/pm-claude/.claude-plugin/plugin.json`; `pnpm version:check` also verifies the pinned runtime dependency.
|
|
188
199
|
|
|
189
200
|
The MCP server uses JSON-RPC 2.0 over stdio with canonical protocol version
|
|
190
201
|
`2026-07-28`. A bounded legacy path remains for unversioned older hosts, with
|
package/docs/CODEX_PLUGIN.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
pm-cli ships a repo-local Codex plugin at [`plugins/pm-codex`](../plugins/pm-codex/README.md).
|
|
4
4
|
|
|
5
5
|
It is a real Codex plugin package: the repo marketplace installs it and Codex registers its skills and bundled
|
|
6
|
-
MCP server.
|
|
6
|
+
MCP server. Its cached runtime installs the exact version declared by the plugin manifest and works offline after that first install. It is not yet an Apps SDK-backed ChatGPT app. The official-source
|
|
7
7
|
audit, verified gaps, and phased remediation plan are documented in
|
|
8
8
|
[Native ChatGPT and Codex Plugin Implementation Plan](CHATGPT_CODEX_PLUGIN_IMPLEMENTATION.md).
|
|
9
9
|
|
|
@@ -25,19 +25,12 @@ Keep this page as the public docs router so the MCP tool/action list has one mai
|
|
|
25
25
|
|
|
26
26
|
## Current MCP Runtime Note
|
|
27
27
|
|
|
28
|
-
The plugin launcher uses the local repository build when `dist/mcp/server.js` is present.
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
npx -y --package=@unbrained/pm-cli@latest pm-mcp
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
The fallback starts the package MCP server, not the `pm` CLI command. Tool calls import pm command modules and return JSON-compatible structured results.
|
|
35
|
-
|
|
36
|
-
This is current behavior, not the target distribution contract. A normal cached install has no repository
|
|
37
|
-
`dist/` ancestor, so it depends on npm availability and can run a newer server than the installed plugin. Track
|
|
38
|
-
the self-contained, version-coherent runtime work under
|
|
28
|
+
The plugin launcher uses the local repository build when `dist/mcp/server.js` is present. A copied plugin installs the exact `@unbrained/pm-cli` version in its `package.json` to persistent plugin data, then starts its `pm-mcp` server directly with Node. The installed runtime can be reused offline. Track the remaining native-plugin and ChatGPT app work under
|
|
39
29
|
[pm-95d7](../.agents/pm/features/pm-95d7.toon).
|
|
40
30
|
|
|
31
|
+
Run `pnpm build && pnpm smoke:plugin-cache` to verify both copied plugin
|
|
32
|
+
bundles against a real packed install with npm unavailable at MCP startup.
|
|
33
|
+
|
|
41
34
|
## Safety
|
|
42
35
|
|
|
43
36
|
For real repository tracking, leave `path` unset so pm uses the repository `.agents/pm` root. For tests, use a sandbox `cwd` or `path` and isolate `PM_GLOBAL_PATH`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Defect Recurrence and Boundary Evidence
|
|
2
2
|
|
|
3
|
-
Tracked by [pm-1qkivy](../.agents/pm/features/pm-1qkivy.toon), [pm-rtn5h6](../.agents/pm/tasks/pm-rtn5h6.toon), [pm-0pzgit](../.agents/pm/tasks/pm-0pzgit.toon), [pm-7c27ep](../.agents/pm/issues/pm-7c27ep.toon),
|
|
3
|
+
Tracked by [pm-1qkivy](../.agents/pm/features/pm-1qkivy.toon), [pm-rtn5h6](../.agents/pm/tasks/pm-rtn5h6.toon), [pm-0pzgit](../.agents/pm/tasks/pm-0pzgit.toon), [pm-7c27ep](../.agents/pm/issues/pm-7c27ep.toon), [pm-h8tpeh](../.agents/pm/features/pm-h8tpeh.toon), and [pm-003j](../.agents/pm/tasks/pm-003j.toon).
|
|
4
4
|
|
|
5
5
|
## Agent Quick Context
|
|
6
6
|
|
|
@@ -192,6 +192,13 @@ adds a disconnected, unregistered recurrence pair and must also exit `1`. Focuse
|
|
|
192
192
|
|
|
193
193
|
`repository-defect-evidence-required` is part of the blocking `repository-static-quality` assurance composition. That makes local and CI behavior share the same provider result, assertion negative control, enforcement, and immutable verdict semantics.
|
|
194
194
|
|
|
195
|
+
The static quality pipeline also runs `node scripts/check-workflow-permissions.mjs`.
|
|
196
|
+
It parses every GitHub workflow and requires an explicit read-only default token;
|
|
197
|
+
write scopes belong on jobs that use them. Run its `--negative-control` mode to
|
|
198
|
+
confirm a workflow-scope `contents: write` grant exits with status 1. This
|
|
199
|
+
protects the least-privilege workflow policy that [pm-003j](../.agents/pm/tasks/pm-003j.toon)
|
|
200
|
+
tracks, even between Scorecard scans.
|
|
201
|
+
|
|
195
202
|
The mandatory `gate-registry` check also compares each recurrence family's `checks.hosted` values with concrete names derived from the repository workflows. It expands static matrix axes and applies exclusions before inclusions according to [GitHub's matrix rules](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrixinclude). Renamed or removed checks produce named findings. Runtime expressions, unnamed matrix jobs, and static expansions beyond 256 combinations cannot certify a required check name. The public SDK policy parser remains provider-neutral; this workflow binding belongs to the repository gate.
|
|
196
203
|
|
|
197
204
|
Assurance request schemas declare each family's required identity, triggers,
|
|
@@ -78,3 +78,30 @@ Readiness, `pm next`, context blocker summaries, `pm list-blocked`, downstream `
|
|
|
78
78
|
`pm deps` returns `legacy_alias_counts` for the workspace. `pm graph audit` returns the same field beside canonical `profile.edges_by_kind` counts, `profile.edge_share_by_kind` composition ratios, and the `semantic_edges`/`semantic_edge_share` context-preservation census. The semantic census counts `discovered_from`, `incident_from`, `recurs_from`, `supersedes`, and `verifies` over all deduplicated directed edges. Empty objects and zero shares are explicit, not omitted. These diagnostics are read-only; terminal history remains untouched until an explicitly governed migration is requested.
|
|
79
79
|
|
|
80
80
|
Assurance `dependency_kind` measurements canonicalize both the declaration and stored row before comparing. A declaration using `related` and one using the accepted `related_to` alias therefore measure the same edge population; alias debt remains separately observable through `legacy_alias_counts`.
|
|
81
|
+
|
|
82
|
+
## Composition policy when adding relationships
|
|
83
|
+
|
|
84
|
+
Tracked by [pm-r3o7x4](../.agents/pm/issues/pm-r3o7x4.toon).
|
|
85
|
+
|
|
86
|
+
Choose the kind that states the actual relationship. Use `related` for honest
|
|
87
|
+
association; never relabel it as evidence or ordering merely to pass a gate.
|
|
88
|
+
This workspace enforces `profile.semantic_edge_share` over canonical,
|
|
89
|
+
deduplicated directed edges in both graph-composition and tracker-context-quality.
|
|
90
|
+
The raw association count and declared-row share remain diagnostics. Neither
|
|
91
|
+
imposes a second blocking bound on otherwise healthy graph growth.
|
|
92
|
+
|
|
93
|
+
Adding a provenance or verification edge cannot lower that composition ratio.
|
|
94
|
+
Adding only association, hierarchy, implementation, or ordering edges can lower
|
|
95
|
+
it; a mixed addition that increases semantic share passes the composition floor
|
|
96
|
+
whenever its baseline passed. Ordering and hierarchy still have their own
|
|
97
|
+
integrity constraints. Inspect the active workspace policy before bulk changes:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
pm assurance show gate graph-composition
|
|
101
|
+
pm assurance show assertion graph-semantic-edge-share-floor
|
|
102
|
+
pm assurance run graph-composition --trigger ci --dry-run
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
The floor is a declared minimum, not a promise that every small dilution fails.
|
|
106
|
+
Real growth is allowed above it; an associative-only pass crossing the floor is
|
|
107
|
+
refused. Both terminal and active history contribute to the same denominator.
|
package/docs/MERGE_SAFETY.md
CHANGED
|
@@ -51,12 +51,13 @@ shell quoting when it expands the placeholder. Receipt ingestion also removes
|
|
|
51
51
|
one legacy matching quote pair so receipts written by older clone-local drivers
|
|
52
52
|
remain reconcilable.
|
|
53
53
|
`pm validate --check-storage-integrity` and `pm health` also compare every
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
effective driver definition with the installed SDK. A command installed by
|
|
55
|
+
another valid `@unbrained/pm-cli` package is
|
|
56
56
|
also accepted when its Node and `dist/cli.js` paths exist, its manifest owns the
|
|
57
|
-
`pm` bin,
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
`pm` bin, the driver arguments are semantically identical, and its version
|
|
58
|
+
matches any exact project runtime pins. A driver inside a sibling worktree of
|
|
59
|
+
the same repository is rejected, even when that package is otherwise valid.
|
|
60
|
+
Independent global installations remain supported. A missing, malformed, or semantically stale definition is
|
|
60
61
|
reported even when the committed attribute fence is correct.
|
|
61
62
|
Health and validation name `pm merge install` as the repair command for missing
|
|
62
63
|
or drifted drivers. This upgrade behavior is tracked by
|
|
@@ -64,6 +65,28 @@ or drifted drivers. This upgrade behavior is tracked by
|
|
|
64
65
|
|
|
65
66
|
The installer publishes the shared `.gitattributes` fence only after the clone-local driver commands are configured. If the repository Git config is read-only or another Git process holds its lock, the command returns the stable `merge_git_config_unwritable` error with recovery guidance and leaves an absent fence absent. Use `pm merge install --dry-run --json` to inspect the contract in intentionally read-only workspaces.
|
|
66
67
|
|
|
68
|
+
### Independent worktree runtimes
|
|
69
|
+
|
|
70
|
+
Tracked by [pm-c1dwbt](../.agents/pm/issues/pm-c1dwbt.toon).
|
|
71
|
+
|
|
72
|
+
Run `pm merge install` from each worktree with that worktree's intended pm
|
|
73
|
+
installation. When installing in a linked worktree, the SDK enables Git's
|
|
74
|
+
`extensions.worktreeConfig` and writes drivers with `git config --worktree`.
|
|
75
|
+
Existing main-worktree drivers are preserved in its `config.worktree`; later
|
|
76
|
+
installs cannot replace another worktree's runtime. Main-only `core.worktree`
|
|
77
|
+
and `core.bare=true` settings migrate with their original scope. Ordinary
|
|
78
|
+
clones retain local configuration until worktree isolation is needed.
|
|
79
|
+
Git subprocesses discard inherited repository-location variables so an SDK
|
|
80
|
+
caller's `GIT_DIR` cannot redirect installation or diagnosis to another clone.
|
|
81
|
+
Configuration migration uses multiple Git writes: a failed write is reported,
|
|
82
|
+
and rerunning `pm merge install` after resolving the config lock or permissions
|
|
83
|
+
completes the migration while preserving values already copied for the main tree.
|
|
84
|
+
|
|
85
|
+
Health reads Git's effective configuration, including worktree overrides.
|
|
86
|
+
Removing a sibling worktree does not remove a separately installed main driver.
|
|
87
|
+
Use `pm merge install` in the affected worktree to repair stale, missing, or
|
|
88
|
+
incompatible commands. A dry run changes neither configuration nor attributes.
|
|
89
|
+
|
|
67
90
|
### Fence coverage contract
|
|
68
91
|
|
|
69
92
|
The fenced block is generated by one shared coverage contract (`buildMergeAttributePatterns`) covering every mergeable artifact class: tracker-wide `**/*.toon` and `**/*.md` item patterns, explicit per-type diagnostic patterns, all tracker `**/*.jsonl` paths under the relationship-event driver with the more-specific `history/*.jsonl` rule overriding history streams, root `settings.json`, and every nested `**/*.json` document. The tracker-wide item rules protect extension-defined type folders even when a receiving branch has not installed the package that registered them; explicit type rows still make active-registry drift diagnosable. The broad JSON rules automatically cover schema, managed-extension, evaluation-corpus, and future package-owned authoritative JSON without another hand-maintained allowlist. The broad JSONL rule is required because `RelationshipEventStore` supports package-owned custom relative paths anywhere below the tracker root. Two mechanisms keep the committed fence from drifting out of that contract:
|
package/docs/README.md
CHANGED
|
@@ -68,6 +68,7 @@ pm guide release --json
|
|
|
68
68
|
- [History Algorithms and Detached Attestations](HISTORY_ATTESTATION.md) - named record digests, portable exact-byte proofs, and read-only verification.
|
|
69
69
|
- [History-derived Governance Repair](HISTORY_GOVERNANCE_REPAIR.md) - verified closure timestamps and typed issue-code lineage.
|
|
70
70
|
- [History Maintenance and Recovery](HISTORY_MAINTENANCE.md) - native history commands, permanent aliases, shared SDK transforms, and transactional recovery.
|
|
71
|
+
- [Agent Recovery and Guidance](AGENT_RECOVERY_AND_GUIDANCE.md) - policy refusal evidence, canonical help, and managed instruction freshness.
|
|
71
72
|
- [Declarative Workflow Policies](WORKFLOW_POLICIES.md) - portable lifecycle requirements, independent approvals, and completeness reports.
|
|
72
73
|
- [Mutation Integrity](MUTATION_INTEGRITY.md) - shared CLI/SDK/MCP author, secret, append-only disposition, and stale-work guardrails.
|
|
73
74
|
- [Agent Provenance ADR Amendment](AGENT_PROVENANCE_ADR.md) - extensible model, effort, role, and host provenance with privacy and compatibility boundaries.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Scheduled release reliability
|
|
2
|
+
|
|
3
|
+
Tracked by [pm-e70zh5](../.agents/pm/issues/pm-e70zh5.toon) and
|
|
4
|
+
[pm-44u3wt](../.agents/pm/issues/pm-44u3wt.toon).
|
|
5
|
+
|
|
6
|
+
The **Release Reliability** workflow evaluates the preceding 30 days after a
|
|
7
|
+
scheduled Auto Release completes, daily at nominal 04:35 UTC, and on manual
|
|
8
|
+
dispatch. It saves a JSON report and fails its own check when policy is breached.
|
|
9
|
+
The report is independent of candidate correctness: historical failures must
|
|
10
|
+
remain visible while a reviewed repair can still pass publication gates.
|
|
11
|
+
|
|
12
|
+
## Policy and clock
|
|
13
|
+
|
|
14
|
+
[The versioned policy](../config/release-reliability-policy.json) declares the
|
|
15
|
+
nominal release cron as 02:35 UTC, a 60-minute dispatch allowance, a maximum
|
|
16
|
+
10% failure rate, and at least seven completed observations. These are explicit
|
|
17
|
+
operational targets, not thresholds fitted to make the current history green.
|
|
18
|
+
Missing samples yield an insufficient-data failure, never a healthy zero rate.
|
|
19
|
+
|
|
20
|
+
Dispatch delay measures `created_at` against the nearest preceding nominal
|
|
21
|
+
daily occurrence. Queue delay separately measures `run_started_at - created_at`.
|
|
22
|
+
GitHub does not supply the intended scheduled timestamp: the inferred occurrence
|
|
23
|
+
cannot disambiguate delays greater than 24 hours. Missing the latest occurrence
|
|
24
|
+
whose 60-minute allowance has elapsed produces `missing_scheduled_run`. Before
|
|
25
|
+
03:35 UTC, absence of today's run is still within the allowance; afterward,
|
|
26
|
+
inspect the report to distinguish missing dispatch, a pending attempt, and a
|
|
27
|
+
completed failure. A late run is visible even when it subsequently succeeds.
|
|
28
|
+
|
|
29
|
+
The release version and one-per-day guard use the UTC execution date captured
|
|
30
|
+
by release preparation, not the inferred cron occurrence. A delayed run cannot
|
|
31
|
+
backdate a tag. Reporting never creates, retargets, retries, or publishes a tag.
|
|
32
|
+
The unchanged [release recovery rules](RELEASING.md#failure-handling) apply.
|
|
33
|
+
|
|
34
|
+
## Evidence and denominator
|
|
35
|
+
|
|
36
|
+
The collector paginates the schedule-only runs API over an explicit half-open
|
|
37
|
+
UTC window and checks returned counts and unique IDs. It retrieves attempt 1
|
|
38
|
+
when a run was rerun. A later successful attempt, manual dispatch, issue recovery,
|
|
39
|
+
or closed blocker cannot change the original scheduled failure. Pending runs
|
|
40
|
+
are listed separately; all completed non-success conclusions count as failures.
|
|
41
|
+
API errors, truncated pages, ambiguous artifacts, and mismatched run identities
|
|
42
|
+
fail collection rather than silently reducing the denominator.
|
|
43
|
+
|
|
44
|
+
Auto Release saves `release-observation-<attempt>` artifacts for 90 days. Each
|
|
45
|
+
contains only run/attempt identity, event, outcome and failure-stage name. Gate
|
|
46
|
+
stdout, stderr, credentials and environment values are not archived. A confirmed
|
|
47
|
+
publication, verified existing same-day release, unchanged source, tracker-only
|
|
48
|
+
changes, and an empty changelog are distinct outcomes. Failed gates retain their
|
|
49
|
+
structured stage; older failures fall back to failed job/step names from GitHub.
|
|
50
|
+
Receipt writing and upload are non-blocking so an evidence-service outage cannot
|
|
51
|
+
change publication success into a release blocker. Missing or expired success
|
|
52
|
+
receipts are `unknown_success`, with
|
|
53
|
+
`outcome_evidence_complete: false`; success alone does not prove publication.
|
|
54
|
+
|
|
55
|
+
Reports retain the input policy, window, per-run observations, outcome counts,
|
|
56
|
+
stage counts, denominator, failure rate and violations. Download a report using
|
|
57
|
+
`gh run download <report-run-id> --name <artifact-name> --dir <temporary-directory>`.
|
|
58
|
+
The pure evaluator in `scripts/release/release-reliability.mjs` permits offline
|
|
59
|
+
replay with a fixed clock and captured input; the collector is read-only and
|
|
60
|
+
downloads only data, never executable source. The reporting workflow checks out
|
|
61
|
+
the default branch rather than the triggering run's code and has read-only token
|
|
62
|
+
permissions.
|
|
63
|
+
|
|
64
|
+
The report is a rolling observation, not a permanent archive of all releases.
|
|
65
|
+
Retain exported receipts externally if a longer historical window is needed.
|
|
66
|
+
It does not implement the separate nightly per-leg reliability programme or
|
|
67
|
+
change the manual same-day version policy.
|
|
68
|
+
|
|
69
|
+
Provider contracts: [workflow run attempts](https://docs.github.com/en/rest/actions/workflow-runs#get-a-workflow-run-attempt)
|
|
70
|
+
and [completion-triggered workflows](https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows#workflow_run).
|
package/docs/RELEASING.md
CHANGED
|
@@ -447,6 +447,10 @@ gh run watch <run-id> --exit-status
|
|
|
447
447
|
|
|
448
448
|
## Post-Release Verification
|
|
449
449
|
|
|
450
|
+
Use the [rolling reliability report](RELEASE_RELIABILITY.md) as well as the
|
|
451
|
+
latest release result. Its first-attempt denominator, explicit outcome receipts,
|
|
452
|
+
and UTC dispatch policy preserve failures even after a recovery succeeds.
|
|
453
|
+
|
|
450
454
|
```bash
|
|
451
455
|
npm view @unbrained/pm-cli@<version> version dist.integrity dist.unpackedSize --json
|
|
452
456
|
npx --yes --package @unbrained/pm-cli@<version> -- pm --json --no-extensions contracts --summary
|
package/docs/TESTING.md
CHANGED
|
@@ -88,6 +88,23 @@ so PR-local CodeFactor maintainability annotations fail locally before commit or
|
|
|
88
88
|
push. Existing legacy high-complexity test fixtures are tracked separately and
|
|
89
89
|
must not be used as precedent for new changed production/script code.
|
|
90
90
|
|
|
91
|
+
The same required static gate validates an explicit seven-day Dependabot
|
|
92
|
+
cooldown for every updater and requires both npm and GitHub Actions entries.
|
|
93
|
+
Missing values, semver overrides outside 7–90 days, invalid YAML, removed
|
|
94
|
+
updaters, and include/exclude bypasses fail the gate. The maximum follows
|
|
95
|
+
[GitHub's cooldown limits](https://docs.github.com/en/code-security/tutorials/secure-your-dependencies/optimizing-pr-creation-version-updates).
|
|
96
|
+
Security updates retain GitHub's separate security-update behavior.
|
|
97
|
+
The negative controls are tracked by [pm-gkut](../.agents/pm/issues/pm-gkut.toon)
|
|
98
|
+
and [pm-dmo5](../.agents/pm/issues/pm-dmo5.toon).
|
|
99
|
+
|
|
100
|
+
Release synchronization and commit staging share one distribution manifest
|
|
101
|
+
inventory. The [pm-t4prek regression](../tests/unit/scripts/release/version-manifests.spec.ts)
|
|
102
|
+
bumps versions in a temporary Git repository and reads the resulting commit to
|
|
103
|
+
verify workspace versions and exact plugin runtime pins. The pipeline checks
|
|
104
|
+
version consistency immediately before staging, including required string
|
|
105
|
+
versions and runtime pins in both plugin package manifests; tests of a prepared working
|
|
106
|
+
tree alone cannot establish that the release commit contains those changes.
|
|
107
|
+
|
|
91
108
|
`lint:duplicates` runs three zero-clone profiles: the broad repository profile,
|
|
92
109
|
the production cross-format profile, and a supplemental long-table profile at
|
|
93
110
|
28 lines / 80 tokens. The last profile detects the historical GH-508 normalizer
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# Completion portability and bounded replication checks
|
|
2
2
|
|
|
3
|
-
Tracked by [pm-t6jl1f](../.agents/pm/issues/pm-t6jl1f.toon)
|
|
4
|
-
[pm-26y269](../.agents/pm/tasks/pm-26y269.toon)
|
|
3
|
+
Tracked by [pm-t6jl1f](../.agents/pm/issues/pm-t6jl1f.toon),
|
|
4
|
+
[pm-26y269](../.agents/pm/tasks/pm-26y269.toon), and
|
|
5
|
+
[pm-eswzn9](../.agents/pm/tasks/pm-eswzn9.toon).
|
|
5
6
|
|
|
6
7
|
## Bash completion data boundary
|
|
7
8
|
|
|
@@ -13,10 +14,15 @@ elements to `COMPREPLY`. Candidates containing shell metacharacters or Unicode
|
|
|
13
14
|
use portable single-quote syntax, including embedded quote escaping, so accepting
|
|
14
15
|
a candidate and pressing Enter also preserves its literal argument value.
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
The matcher decodes the current Readline word without evaluation. It recognizes
|
|
18
|
+
open single quotes, open double quotes, and backslash-escaped prefixes. Each
|
|
19
|
+
completion is encoded for its insertion context: apostrophes are split safely
|
|
20
|
+
inside single quotes; dollar signs, backticks, backslashes, and double quotes
|
|
21
|
+
are escaped inside double quotes; exclamation marks use a single-quoted segment
|
|
22
|
+
so history expansion cannot change the accepted bytes. Unquoted prefixes keep
|
|
23
|
+
the existing literal single-quote encoding for unsafe candidates. Mixed quoted
|
|
24
|
+
segments whose replacement span is ambiguous, and prefixes containing typed
|
|
25
|
+
backticks, still return no suggestions.
|
|
20
26
|
|
|
21
27
|
The matcher never evaluates choices as shell programs. Dollar signs, backticks,
|
|
22
28
|
quotes, backslashes, and wildcard characters remain literal. Unicode survives
|
|
@@ -37,9 +43,10 @@ and cache policy retain their existing contracts.
|
|
|
37
43
|
`compgen -W` cannot safely serve as the data transport here: it performs another
|
|
38
44
|
expansion pass, and Bash 3.2 does not round-trip the ANSI-C quoting emitted by
|
|
39
45
|
`printf %q` for Unicode. Unquoted command-substitution arrays can additionally
|
|
40
|
-
expand literal wildcard candidates into filenames. The regression
|
|
41
|
-
generated function and
|
|
42
|
-
|
|
46
|
+
expand literal wildcard candidates into filenames. The regression checks the
|
|
47
|
+
generated function and uses an interactive pseudo terminal to press Tab and
|
|
48
|
+
Enter in each supported insertion context. It checks the accepted argument
|
|
49
|
+
bytes and verifies that a command-substitution sentinel was not created.
|
|
43
50
|
|
|
44
51
|
Run the focused native regression after building:
|
|
45
52
|
|
|
@@ -51,8 +58,10 @@ To test another installed Bash version, set `PM_COMPLETION_TEST_BASH` to its
|
|
|
51
58
|
executable path. This is a test harness input, not a CLI configuration setting.
|
|
52
59
|
The existing macOS runtime-smoke job pins `/bin/bash` so PATH cannot silently
|
|
53
60
|
substitute a newer Homebrew Bash. It runs this regression before merge; Linux
|
|
54
|
-
coverage runs the same matrix.
|
|
55
|
-
|
|
61
|
+
coverage runs the same matrix. The macOS test drives Bash through a Python 3
|
|
62
|
+
pseudo terminal because BSD `script` requires terminal stdin; Linux uses
|
|
63
|
+
`script`. Set `PM_COMPLETION_TEST_PTY=python` to exercise the macOS driver on
|
|
64
|
+
Linux. Native Fish and Zsh acceptance remains in the required smoke gate.
|
|
56
65
|
|
|
57
66
|
## Replication diff collection
|
|
58
67
|
|
package/marketplace.json
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
|
|
9
|
-
"version": "2026.9.
|
|
9
|
+
"version": "2026.9.25"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "pm-claude",
|
|
14
14
|
"source": "./plugins/pm-claude",
|
|
15
15
|
"description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
|
|
16
|
-
"version": "2026.9.
|
|
16
|
+
"version": "2026.9.25",
|
|
17
17
|
"author": {
|
|
18
18
|
"name": "unbrained",
|
|
19
19
|
"url": "https://github.com/unbraind/pm-cli"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-cli",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.25",
|
|
4
4
|
"description": "Git-native project management CLI for humans and agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@11.10.0",
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
"lint:complexity:baseline": "eslint . --suppress-rule complexity --suppress-rule sonarjs/cognitive-complexity",
|
|
124
124
|
"lint:duplicates": "jscpd --config .jscpd.json && jscpd --config .jscpd.source.json && jscpd --config .jscpd.tables.json",
|
|
125
125
|
"lint:codefactor": "pnpm quality:static",
|
|
126
|
-
"quality:static": "pnpm quality:docstrings && pnpm quality:exports && pnpm lint:eslint && pnpm lint:duplicates && pnpm build && node scripts/contracts-snapshot.mjs --check && node scripts/generate-agent-capability-surfaces.mjs --check && node scripts/generate-error-code-catalog.mjs --check && node scripts/release/repository-assurance.mjs repository-static-quality --trigger ci --json && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs && node scripts/release/refusal-closure-gate.mjs && node scripts/release/agent-task-token-gate.mjs && pnpm quality:mcp-deprecations && node dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check && node dist/cli.js assurance run graph-composition --trigger ci --dry-run --json --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded && pnpm quality:mutation -- --prebuilt",
|
|
126
|
+
"quality:static": "pnpm quality:docstrings && pnpm quality:exports && pnpm lint:eslint && pnpm lint:duplicates && node scripts/check-workflow-permissions.mjs && node scripts/check-dependency-cooldown.mjs && node scripts/gen-plugin-mcp-wrappers.mjs --check && pnpm build && node scripts/contracts-snapshot.mjs --check && node scripts/generate-agent-capability-surfaces.mjs --check && node scripts/generate-error-code-catalog.mjs --check && node scripts/release/repository-assurance.mjs repository-static-quality --trigger ci --json && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs && node scripts/release/refusal-closure-gate.mjs && node scripts/release/agent-task-token-gate.mjs && pnpm quality:mcp-deprecations && node dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check && node dist/cli.js assurance run graph-composition --trigger ci --dry-run --json --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded && pnpm quality:mutation -- --prebuilt",
|
|
127
127
|
"quality:exports": "knip --no-config-hints && node scripts/run-tests.mjs test -- tests/unit/scripts/release/dead-exports.spec.ts",
|
|
128
128
|
"quality:command-grammar": "pnpm build && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs",
|
|
129
129
|
"quality:recovery-closure": "pnpm build && node scripts/release/refusal-closure-gate.mjs",
|
|
@@ -167,6 +167,7 @@
|
|
|
167
167
|
"smoke:external-packages": "node scripts/smoke-external-packages.mjs",
|
|
168
168
|
"smoke:codex-plugin": "node scripts/smoke-codex-plugin-mcp.mjs",
|
|
169
169
|
"smoke:claude-plugin": "node scripts/smoke-claude-plugin.mjs",
|
|
170
|
+
"smoke:plugin-cache": "node tests/acceptance/plugin-cache-smoke.mjs",
|
|
170
171
|
"version:check": "node scripts/release-version.mjs check && node scripts/sync-versions.mjs check",
|
|
171
172
|
"version:next": "node scripts/release-version.mjs next",
|
|
172
173
|
"version:sync": "node scripts/sync-versions.mjs apply",
|
|
@@ -211,7 +212,7 @@
|
|
|
211
212
|
"node": ">=22.18.0"
|
|
212
213
|
},
|
|
213
214
|
"dependencies": {
|
|
214
|
-
"@sentry/node": "10.75.
|
|
215
|
+
"@sentry/node": "10.75.1",
|
|
215
216
|
"@toon-format/toon": "^4.1.1",
|
|
216
217
|
"@types/node": ">=22",
|
|
217
218
|
"commander": "^15.0.0",
|
|
@@ -238,13 +239,13 @@
|
|
|
238
239
|
"fast-check": "^4.10.2",
|
|
239
240
|
"github-slugger": "2.0.0",
|
|
240
241
|
"greptile": "^3.5.3",
|
|
241
|
-
"jscpd": "^5.3.
|
|
242
|
+
"jscpd": "^5.3.1",
|
|
242
243
|
"knip": "^6.37.0",
|
|
243
244
|
"marked": "18.0.13",
|
|
244
245
|
"parse5": "8.0.1",
|
|
245
246
|
"tsx": "^4.23.15",
|
|
246
247
|
"typescript": "^6.0.3",
|
|
247
|
-
"typescript-eslint": "^8.70.
|
|
248
|
+
"typescript-eslint": "^8.70.1",
|
|
248
249
|
"vitest": "^4.1.11"
|
|
249
250
|
}
|
|
250
251
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-digital-twin",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.25",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.",
|