mcp-pacemaker 1.3.1 → 2.0.2
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/CHANGELOG.md +85 -27
- package/CONTRIBUTING.md +123 -47
- package/README.md +117 -62
- package/SECURITY.md +34 -24
- package/bin/mcp-bridge.mjs +91 -42
- package/bin/pooling-batch-scheduler.mjs +129 -0
- package/bin/pooling-batches.mjs +270 -0
- package/bin/pooling-config.mjs +413 -389
- package/bin/pooling-editor.mjs +128 -0
- package/bin/pooling-errors.mjs +23 -0
- package/bin/pooling-execution.mjs +19 -6
- package/bin/pooling-files.mjs +541 -0
- package/bin/pooling-trace.mjs +218 -0
- package/bin/pooling-writer.mjs +87 -14
- package/bin/prewarm.mjs +87 -6
- package/bin/windows/PoolingSecurityHelper.build.json +7 -4
- package/bin/windows/PoolingSecurityHelper.exe +0 -0
- package/bin/windows/src/PoolingNativeFiles.cs +678 -0
- package/bin/windows/src/PoolingSecurityHelper.cs +18 -5
- package/package.json +2 -2
- package/tools/windows-security-helper/README.md +146 -3
- package/tools/windows-security-helper/build.ps1 +2 -2
- package/ui/dist/assets/index-CaLPg0c-.css +1 -0
- package/ui/dist/assets/index-CgPruWYi.js +9 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/third-party-manifest.json +37 -19
- package/ui/dist/assets/index-CIy7uxfd.css +0 -1
- package/ui/dist/assets/index-CtaaQsB9.js +0 -8
package/CHANGELOG.md
CHANGED
|
@@ -7,47 +7,103 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
Target release: **2.0.2**. This candidate has not yet been published.
|
|
11
|
+
|
|
10
12
|
### Fixed
|
|
11
13
|
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
-
|
|
17
|
-
stage evidence; the requested API attempt alone does not establish it.
|
|
18
|
-
- Check each patch's actual runtime layout during npm publication. Legacy 1.3.1
|
|
19
|
-
does not require 2.0-only editor/file modules, while shared execution and the
|
|
20
|
-
current line's error module remain required.
|
|
21
|
-
- Accept GitHub's exact unexpanded consumer-matrix job name during source-secret
|
|
22
|
-
collection validation, while still requiring skipped status and no executed steps.
|
|
23
|
-
- Compare collected report and native-receipt completion against the precision
|
|
24
|
-
of GitHub's step timestamp without admitting execution in the next second.
|
|
25
|
-
- Preserve exact positive source-CI attempts and accept bounded canonical npm repair tags.
|
|
26
|
-
- Let the 1.3.1 publishing finalizer use approved immutable published 2.0.1 bytes
|
|
27
|
-
for T32 comparison without a hosted seed, fabricated preparation evidence or
|
|
28
|
-
stage authority. Candidate consumer, compatibility and publication gates remain required.
|
|
29
|
-
- Resolve native directory watcher paths before watching logs and test control files,
|
|
14
|
+
- Replace the old GitHub-install quick start in the npm package documentation with
|
|
15
|
+
npm-first installation, exact-version commands, prerequisites and setup boundaries.
|
|
16
|
+
- Preserve npm package-type permissions in isolated consumer checks instead of silently
|
|
17
|
+
reverting directory, file, Git, or remote dependency restrictions to npm defaults.
|
|
18
|
+
- Resolve native directory watcher paths in publication and compatibility test helpers,
|
|
30
19
|
avoiding Windows short-path watcher crashes without changing the selected files.
|
|
20
|
+
- Restore the legacy publisher's skipped-matrix job and whole-second timestamp handling
|
|
21
|
+
in reusable secret-collection admission, preserving source and execution checks.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- Make the manual npm publisher reusable for explicitly selected stable 1.x/2.x
|
|
26
|
+
versions, with immutable published comparison peers and no active bootstrap actions.
|
|
27
|
+
- Keep the existing GitHub source-CI, collection/review, preparation, OIDC staging,
|
|
28
|
+
verification and separately approved owner-publication route for the selected release.
|
|
31
29
|
|
|
32
30
|
### Security
|
|
33
31
|
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
- Record a temporary **2.0.2-only producer risk acceptance** for `smol-toml 1.8.0`
|
|
33
|
+
in the CLI runtime and `braces 3.0.3`, `postcss-selector-parser 6.1.4` and
|
|
34
|
+
`source-map-js 1.2.1` in UI build tooling. The October 6 review keeps the
|
|
35
|
+
original **2026-10-12T00:00:00Z** expiry and binds both unchanged producer
|
|
36
|
+
locks and the exact native reports. Raw audit/OSV findings remain visible.
|
|
37
|
+
Dependency upgrades stay deferred from this documentation release.
|
|
38
|
+
This is not a patch or a clean advisory result; fresh-consumer findings are
|
|
39
|
+
not exempted. Remediation and exception removal are required
|
|
40
|
+
before expiry or the next release. See the
|
|
41
|
+
[exact advisories, exposure, mitigations and follow-up](docs/npm-publishing.md#temporary-202-producer-risk-acceptance).
|
|
42
|
+
|
|
43
|
+
## [2.0.1]
|
|
37
44
|
|
|
38
45
|
### Changed
|
|
39
46
|
|
|
40
|
-
-
|
|
41
|
-
Channel rollback and adoption
|
|
42
|
-
-
|
|
43
|
-
|
|
47
|
+
- Prepare 2.0.1 for a separate npm publication, with exact-version guidance from the current
|
|
48
|
+
major's maintained channel. Channel rollback and backend adoption are not automatic upgrades.
|
|
49
|
+
- Document durable service replacement, explicit legacy maintenance, platform prerequisites,
|
|
50
|
+
and the difference between npm provenance and Windows executable signing.
|
|
44
51
|
|
|
45
52
|
### Added
|
|
46
53
|
|
|
47
54
|
- Source-bound, manual npm preparation/staging tooling, bundled third-party notices, and
|
|
48
55
|
fresh-consumer package checks.
|
|
49
|
-
-
|
|
50
|
-
|
|
56
|
+
- Explicit patch compatibility pairs alongside the unchanged 1.3.0/2.0.0 historical pair;
|
|
57
|
+
maintenance-branch CI and Node 24 coverage.
|
|
58
|
+
|
|
59
|
+
## [2.0.0] - 2026-09-12
|
|
60
|
+
|
|
61
|
+
### Breaking
|
|
62
|
+
|
|
63
|
+
- Version 2.0 changes the pooling save contract from immediate application to queued batches.
|
|
64
|
+
API clients must send `x-mcp-pooling-batch: 1` and distinguish HTTP 202 acceptance from
|
|
65
|
+
activation. Older clients are rejected without staging a change.
|
|
66
|
+
- The `prewarm` CLI returns after staging, not after activation. Scripts must observe the batch
|
|
67
|
+
result before relying on the new settings. Undo restores the whole batch, not one server.
|
|
68
|
+
- Update the CLI and reload open dashboard pages when upgrading the bridge from 1.3.0.
|
|
69
|
+
Before downgrading, use 2.0 to resolve any pending or interrupted configuration transaction.
|
|
70
|
+
|
|
71
|
+
### Changed
|
|
72
|
+
|
|
73
|
+
- Pooling changes stage a complete configuration copy and reload five seconds after the last
|
|
74
|
+
accepted change. The UI and CLI distinguish Pending, Applying and completed activation;
|
|
75
|
+
Reload now flushes a batch, and Cancel/Undo explicitly applies to the whole batch.
|
|
76
|
+
- Batch-capable clients identify the asynchronous save protocol. Older clients are rejected
|
|
77
|
+
before staging instead of reporting an accepted change as already enabled.
|
|
78
|
+
- Windows configuration saves use directory-inherited auditing without requiring audit-read
|
|
79
|
+
privilege. A non-blocking notice explains that custom per-file audit rules may not carry
|
|
80
|
+
forward; ordinary access and supported integrity protections remain required.
|
|
81
|
+
- Windows saves retain an existing owner that matches the caller user or token default owner,
|
|
82
|
+
preserving supported legacy writes after downgrade. Other owners still use checked transfer,
|
|
83
|
+
and source write access remains required.
|
|
84
|
+
|
|
85
|
+
### Added
|
|
86
|
+
|
|
87
|
+
- Permanent real-version compatibility gates for **1.3.0 and 2.0.0 only**, using pinned
|
|
88
|
+
published 1.3.0 code and an actual packed 2.0.0 candidate. CI covers CLI/API pairs on
|
|
89
|
+
Windows/Linux/macOS with Node 20/22 and built dashboard pairs in the Linux Chromium job:
|
|
90
|
+
immediate legacy saves/Undo, fresh-nonce protocol refusal, actual old-tab restart/refresh,
|
|
91
|
+
queued save/Cancel/Undo, settled upgrade/downgrade configuration bytes, and same-authority
|
|
92
|
+
legacy write/Undo capability after downgrade (or the unchanged known Windows audit refusal).
|
|
93
|
+
|
|
94
|
+
### Fixed
|
|
95
|
+
|
|
96
|
+
- Preserve recovery checkpoints after uncertain post-placement failures without replaying
|
|
97
|
+
writes or accepting corrupt journals.
|
|
98
|
+
- Avoid dispatching process-tree termination for children already known to have exited,
|
|
99
|
+
including failed session resumes.
|
|
100
|
+
|
|
101
|
+
### Security
|
|
102
|
+
|
|
103
|
+
- Raise the `smol-toml` minimum and locked version from 1.7.0 to 1.8.0 to address
|
|
104
|
+
[CVE-2026-85730](https://github.com/squirrelchat/smol-toml/security/advisories/GHSA-7w5x-hrqm-74c2).
|
|
105
|
+
Malformed TOML ending with a comment in an unclosed array or inline table now produces a
|
|
106
|
+
parse error instead of hanging the CLI while reading Codex configuration.
|
|
51
107
|
|
|
52
108
|
## [1.3.0] - 2026-09-08
|
|
53
109
|
|
|
@@ -419,6 +475,8 @@ one is a trap for anyone building something similar.
|
|
|
419
475
|
- Do not report a teardown the bridge initiated as a crash. `taskkill /F` exits non-zero, so
|
|
420
476
|
every recycle, idle reap and session close was recorded as a failure, burying real ones.
|
|
421
477
|
|
|
478
|
+
[2.0.0]: https://github.com/girishkvs/mcp-pacemaker/releases/tag/v2.0.0
|
|
479
|
+
[1.3.0]: https://github.com/girishkvs/mcp-pacemaker/releases/tag/v1.3.0
|
|
422
480
|
[1.2.0]: https://github.com/girishkvs/mcp-pacemaker/releases/tag/v1.2.0
|
|
423
481
|
[1.1.0]: https://github.com/girishkvs/mcp-pacemaker/releases/tag/v1.1.0
|
|
424
482
|
[1.0.0]: https://github.com/girishkvs/mcp-pacemaker/releases/tag/v1.0.0
|
package/CONTRIBUTING.md
CHANGED
|
@@ -47,9 +47,12 @@ owned scratch roots and native watcher inputs at their boundaries; keep rejectin
|
|
|
47
47
|
links, replaced directories, and files outside the approved inventory. A Windows-only pass
|
|
48
48
|
does not establish Linux or macOS correctness; the hosted platform matrix remains required.
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
Windows configuration-write coverage must exercise the normal interactive startup token,
|
|
51
|
+
not only a test process inheriting an elevated runner. Validate both the actual token context
|
|
52
|
+
and successful staging/activation. Security-oracle fixtures may use already-authorized test
|
|
53
|
+
authority to establish and inspect their own files; production saves must not depend on it.
|
|
54
|
+
Directory-inherited auditing is the default. Test ordinary access restrictions, integrity,
|
|
55
|
+
custom-audit behavior, contender files and crash recovery separately.
|
|
53
56
|
|
|
54
57
|
Windows automatic edits use the packaged .NET Framework 4.6.2 helper. Changes to its source
|
|
55
58
|
must rebuild the executable and metadata with
|
|
@@ -60,6 +63,11 @@ platform; Windows also exercises the real executable. Those checks do not replac
|
|
|
60
63
|
byte-for-byte rebuild, and a rolling CI image may not contain the recorded compiler.
|
|
61
64
|
No compiler or PowerShell host runs in the production config-write path.
|
|
62
65
|
|
|
66
|
+
Batch tests must cover the full five-second trailing debounce, merging complete snapshots,
|
|
67
|
+
Reload now, requests during a flip, stale active revisions, whole-batch Cancel/Undo and late
|
|
68
|
+
commit outcomes. Use controlled clocks for scheduling boundaries and real file/HTTP cases for
|
|
69
|
+
integration. A skipped second move is not proof of recovery after actual process termination.
|
|
70
|
+
|
|
63
71
|
**A regression test must be shown to fail without its fix.** Revert the fix, watch the test
|
|
64
72
|
fail, restore it, watch it pass. Several bugs in this repo were originally "covered" by tests
|
|
65
73
|
that passed against the broken code — a test that cannot fail is worse than no test, because
|
|
@@ -69,70 +77,138 @@ sleeping a fixed interval.
|
|
|
69
77
|
|
|
70
78
|
## Real-version compatibility gates
|
|
71
79
|
|
|
72
|
-
These
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
| Preparation | Selected legacy / current pair |
|
|
77
|
-
|---|---|
|
|
78
|
-
| Default in this 1.3.1 checkout | Packed 1.3.1 / immutable 2.0.0 |
|
|
79
|
-
| Default in the 2.0.1 checkout | Immutable 1.3.0 / packed 2.0.1 |
|
|
80
|
-
| `npm run compat:prepare:baseline` | Immutable 1.3.0 / immutable 2.0.0 |
|
|
81
|
-
| `npm run compat:prepare -- --peer-root <opposite-patch-checkout>` | Packed 1.3.1 / packed 2.0.1 |
|
|
80
|
+
These are separate, mandatory CI gates, not substitutes for `npm test`. The root CI job runs
|
|
81
|
+
CLI/API pairs on Windows, Linux and macOS with Node 20, 22 and 24. The Linux/Node 22 UI
|
|
82
|
+
job runs one Chromium browser matrix after building the dashboard.
|
|
82
83
|
|
|
83
84
|
```bash
|
|
85
|
+
npm ci
|
|
84
86
|
npm run compat:prepare
|
|
85
87
|
npm run test:compat
|
|
86
88
|
npm run compat:clean
|
|
87
89
|
|
|
90
|
+
# Browser gate: build before packing the candidate.
|
|
91
|
+
npm --prefix ui ci
|
|
88
92
|
npm --prefix ui run build
|
|
89
|
-
|
|
90
|
-
|
|
93
|
+
cd ui
|
|
94
|
+
npx --no-install playwright install --with-deps chromium
|
|
95
|
+
cd ..
|
|
91
96
|
npm run compat:prepare
|
|
92
97
|
npm run test:compat:browser
|
|
93
98
|
npm run compat:clean
|
|
94
99
|
```
|
|
95
100
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
For an already installed local Chrome, set `MCP_COMPAT_BROWSER_CHANNEL=chrome` in your shell
|
|
102
|
+
instead of installing bundled Chromium. CI uses bundled Chromium, not that override.
|
|
103
|
+
Both standalone test commands **fail** when preparation is missing or candidate bytes have
|
|
104
|
+
changed. Clean and prepare again after changing package files, built assets, or Node major.
|
|
105
|
+
|
|
106
|
+
Historical compatibility baselines remain explicitly **1.3.0 and 2.0.0**.
|
|
107
|
+
Candidate versions must be canonical stable **1.x legacy / 2.x current** versions.
|
|
108
|
+
The owner selects the actual release and any exact opposite-major patch pair;
|
|
109
|
+
support in the harness alone is not evidence that every patch was tested.
|
|
110
|
+
The same harness runs in both maintained branches:
|
|
111
|
+
|
|
112
|
+
| Preparation | Selected legacy / current pair |
|
|
113
|
+
|---|---|
|
|
114
|
+
| Default in the selected 2.0.2 checkout | Immutable 1.3.0 / packed 2.0.2 |
|
|
115
|
+
| Default in the 1.3.1 checkout | Packed 1.3.1 / immutable 2.0.0 |
|
|
116
|
+
| `npm run compat:prepare:baseline` | Immutable 1.3.0 / immutable 2.0.0 |
|
|
117
|
+
| `npm run compat:prepare -- --peer-root <opposite-patch-checkout>` | Packed 1.3.1 / packed 2.0.2 |
|
|
118
|
+
|
|
119
|
+
These selections are not qualification evidence. The selected 1.3.1/2.0.2 pair
|
|
120
|
+
requires fresh exact-byte gates; earlier 1.3.1/2.0.1 results remain historical.
|
|
121
|
+
|
|
122
|
+
Run both API and browser gates for the explicit patch pair before publishing either complete
|
|
123
|
+
dual-major release set. The two default CI pairs alone do not establish that combined result.
|
|
124
|
+
Run `compat:clean` before selecting another pair.
|
|
100
125
|
|
|
101
126
|
Publication artifact gates add `--candidate-tarball <absolute.tgz> --candidate-sha256 <digest>`.
|
|
102
|
-
This supplies the checkout's own candidate role without repacking it
|
|
103
|
-
1.3.1
|
|
104
|
-
substitute
|
|
127
|
+
This supplies the checkout's own candidate role without repacking it, including the legacy
|
|
128
|
+
role when invoked from 1.3.1. The archive must match every package input and the supplied digest;
|
|
129
|
+
historical mode cannot substitute it. The manifest also records the exact npm CLI version.
|
|
105
130
|
|
|
106
|
-
|
|
131
|
+
Release sources are pinned to `2d525f4ced01b978a5aeb83aef69145e96cced05` (1.3.0) and
|
|
107
132
|
`db4812a1cbfb8546c814a656397b9a48ccf0f32c` (2.0.0). Missing commits are fetched read-only by
|
|
108
|
-
exact SHA into an owned temporary repository
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
133
|
+
exact SHA into an owned temporary repository, never through a moving tag or into checkout refs.
|
|
134
|
+
Git archive uses canonical Git line endings and the committed attributes. Local candidates
|
|
135
|
+
are packed with lifecycle scripts disabled and compared against their actual source files.
|
|
136
|
+
|
|
137
|
+
Each selected package uses its own unchanged producer lock via `npm ci --omit=dev --ignore-scripts`.
|
|
138
|
+
This is producer-locked compatibility, not fresh consumer resolution. The manifest records the
|
|
139
|
+
selection mode, exact versions and release references, per-role archive/file hashes, source
|
|
140
|
+
inputs and Node major. Editing either candidate invalidates prepared fixtures. No patch is
|
|
141
|
+
relabeled as the original historical bytes. Git, tar, Node and npm must be available.
|
|
142
|
+
|
|
143
|
+
For local restores through an approved registry, preparation honors the caller's resolved
|
|
144
|
+
`npm_config_registry` and `npm_config_replace_registry_host` settings (and npm cache).
|
|
145
|
+
For example, in a POSIX shell:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
npm_config_registry=https://approved-registry.example.test/npm/ \
|
|
149
|
+
npm_config_replace_registry_host=npmjs npm run compat:prepare
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Use your approved registry URL, not the example. These settings are forwarded to isolated
|
|
153
|
+
`npm ci` calls without changing npmrc files or recording registry settings in the manifest.
|
|
154
|
+
CI sets no override and uses the public registry. Both committed lockfiles and the fixture
|
|
155
|
+
lockfiles must retain public URLs; preparation verifies that restore leaves fixture locks
|
|
156
|
+
byte-identical. Registry policy or quarantine rejections fail preparation without a fallback.
|
|
157
|
+
|
|
158
|
+
Fixtures, private baseline code, configuration and fake HOME/state live in owned OS temporary
|
|
159
|
+
directories, never the user's active configuration. Only a manifest pointer is kept under
|
|
160
|
+
ignored `node_modules/.cache`. This manifest is also the prepared fixture's ownership marker:
|
|
161
|
+
it is created before restore, keeps its identity when preparation finishes, and is removed
|
|
162
|
+
only after its temporary tree is gone. A failed manifest unlink remains retryable. Other
|
|
163
|
+
temporary test directories use adjacent ownership markers. Ports are allocated dynamically.
|
|
164
|
+
Cleanup checks directory and marker identities and removes only owned files without following
|
|
165
|
+
links. Bridge/browser failures retain their original error and diagnostic logs in test output;
|
|
166
|
+
cleanup errors do not replace
|
|
167
|
+
the original failure. Run cleanup before another root `npm ci`, which removes the pointer.
|
|
168
|
+
|
|
169
|
+
| Pair/case | Required result |
|
|
170
|
+
|---|---|
|
|
171
|
+
| Selected 2.x CLI/API and built UI to selected 1.x backend | Legacy HTTP 200 enable and Undo; original config bytes restored |
|
|
172
|
+
| Selected 1.x CLI/API and built UI to selected 2.x backend, fresh nonce | Protocol HTTP 409, no queued write or config change |
|
|
173
|
+
| Already-open selected 1.x tab through an actual bridge restart | Old nonce gets HTTP 401; refresh loads the selected 2.x assets and can stage/cancel |
|
|
174
|
+
| Selected 2.x CLI and UI to selected 2.x backend | Queued save, Cancel, actual application and whole-batch Undo |
|
|
175
|
+
| Settled selected 1.x / 2.x / 1.x configuration | Edits/Undo and both restarts preserve the expected active bytes |
|
|
176
|
+
| Actual selected 1.x writes before and after that roundtrip, unchanged authority | Supported write/Undo must remain supported; known Windows audit-unavailable refusal must remain HTTP 403 with no change |
|
|
177
|
+
|
|
178
|
+
**Test-only UI asset serving:** the two mixed UI/backend cases serve exact old/new built
|
|
179
|
+
`ui/dist` files through Playwright, substituting only the current nonce in the HTML. All
|
|
180
|
+
API, admin mutation, SSE and MCP requests go to the real backend, without response mocks.
|
|
181
|
+
Nested JS assets are included. The old-tab upgrade case does not substitute assets: it stops
|
|
182
|
+
the actual selected 1.x process and starts the selected 2.x process on the same port before refresh.
|
|
183
|
+
|
|
184
|
+
Only the executed exact version pairs establish compatibility. Writable downgrade is checked on a fresh
|
|
185
|
+
synthetic config with default ownership and inherited security. The test does not change
|
|
186
|
+
tokens, elevate, or set ACLs. It checks unchanged caller authority and, on Windows, the actual
|
|
187
|
+
selected 1.x helper's full/partial audit visibility. Caller-context hashes are not direct measurements
|
|
188
|
+
of individual bridge tokens. Only the legacy HTTP 403 audit-unavailable
|
|
189
|
+
condition is accepted as unsupported; unexpected errors and any new HTTP 500 fail the gate.
|
|
190
|
+
The Windows 2.x writer retains a source owner matching the caller user or token default
|
|
191
|
+
owner; other owners still use checked transfer, and source write access remains required.
|
|
192
|
+
These gates do not test a downgrade with an unresolved transaction, installer/service
|
|
193
|
+
replacement, arbitrary Windows ACLs or authority changes, or all host integrations; their
|
|
194
|
+
separate tests and operational checks still apply.
|
|
125
195
|
|
|
126
196
|
## npm consumer validation
|
|
127
197
|
|
|
128
|
-
`npm run consumer:check -- --tarball <absolute-file> --sha256 <digest> --version
|
|
129
|
-
|
|
130
|
-
lock
|
|
131
|
-
the packaged bridge
|
|
198
|
+
`npm run consumer:check -- --tarball <absolute-file> --sha256 <digest> --version <version> --name mcp-pacemaker`
|
|
199
|
+
installs the exact packed candidate into an owned disposable consumer project without a copied
|
|
200
|
+
producer lock, records the resolved graph, checks a separate global-prefix command shim, and
|
|
201
|
+
starts the real packaged bridge against synthetic servers and private state. It checks the
|
|
202
|
+
packaged UI assets and CLI status, then removes only its owned fixtures.
|
|
203
|
+
|
|
204
|
+
Run it with normal npm install-script policy and again with `--ignore-scripts`. It never uses
|
|
205
|
+
the user's global prefix, host configuration, live bridge, or npm credentials. It honors the
|
|
206
|
+
resolved caller registry/cache and offline setting without a mirror fallback. Registry
|
|
207
|
+
signatures and provenance are separate post-publication checks, not inferred from this smoke test.
|
|
132
208
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
209
|
+
The consumer preserves npm's effective `allow-directory`, `allow-file`, `allow-git`, and
|
|
210
|
+
`allow-remote` values, including environment overrides. It does not replace restrictions
|
|
211
|
+
with defaults or grant permissions when an install is rejected.
|
|
136
212
|
|
|
137
213
|
## Changing how a host is wired
|
|
138
214
|
|