@lcv-ideas-software/cross-review 4.0.5 → 4.0.7
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 +47 -0
- package/README.md +3 -1
- package/dist/scripts/smoke.js +3 -0
- package/dist/scripts/smoke.js.map +1 -1
- package/dist/src/core/config.d.ts +2 -2
- package/dist/src/core/config.js +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,53 @@ standard `v00.00.00`; npm package versions remain SemVer.
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [v04.00.07] — 2026-05-16
|
|
11
|
+
|
|
12
|
+
**Patch — bounded npm registry fetch in the post-publish verifier.**
|
|
13
|
+
Polishes the v4.0.6 verifier so a slow or unreachable npm registry
|
|
14
|
+
surfaces as a deterministic abort instead of hanging the publish
|
|
15
|
+
workflow until the job-level `timeout-minutes: 60` ceiling.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- **Registry verifier timeout** — `scripts/verify-registry-dist.mjs`
|
|
20
|
+
now passes `signal: AbortSignal.timeout(30_000)` to the
|
|
21
|
+
`https://registry.npmjs.org/<package>/<version>` `fetch` call. A
|
|
22
|
+
`TimeoutError` is mapped to an explicit
|
|
23
|
+
`"npm registry lookup for <spec> timed out after 30000 ms"` error;
|
|
24
|
+
other network failures are wrapped with the underlying message. No
|
|
25
|
+
change to the validated fields (`dist.shasum`, `dist.integrity`,
|
|
26
|
+
`dist.tarball`) or to the script's CLI/env contract.
|
|
27
|
+
|
|
28
|
+
### Tests
|
|
29
|
+
|
|
30
|
+
- Extended `registry_dist_metadata_verification_test` with the
|
|
31
|
+
`v4.0.7 / F2` invariant: the verifier source must contain both
|
|
32
|
+
`AbortSignal.timeout(` and the `FETCH_TIMEOUT_MS` constant, so a
|
|
33
|
+
future refactor cannot silently drop the explicit fetch bound.
|
|
34
|
+
|
|
35
|
+
## [v04.00.06] — 2026-05-16
|
|
36
|
+
|
|
37
|
+
**Patch — Windows-safe npm registry artifact verifier.** This release closes
|
|
38
|
+
the v4.0.5 audit's LOW Windows finding without changing the public MCP tool
|
|
39
|
+
surface.
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
|
|
43
|
+
- **Registry verifier on Windows** —
|
|
44
|
+
`scripts/verify-registry-dist.mjs` no longer spawns `npm.cmd` through
|
|
45
|
+
`execFileSync`. Newer Node.js builds reject that batch-file spawn path with
|
|
46
|
+
`spawnSync npm.cmd EINVAL` on Windows after the CVE-2024-27980 hardening,
|
|
47
|
+
which broke local `npm --registry=https://registry.npmjs.org run
|
|
48
|
+
release:verify-registry` for Windows operators. The verifier now fetches
|
|
49
|
+
`https://registry.npmjs.org/<package>/<version>` directly and validates
|
|
50
|
+
`dist.shasum`, `dist.integrity`, and `dist.tarball` from the registry JSON.
|
|
51
|
+
|
|
52
|
+
### Tests
|
|
53
|
+
|
|
54
|
+
- Extended `registry_dist_metadata_verification_test` to pin the no-spawn
|
|
55
|
+
invariant and require direct npm registry metadata lookup.
|
|
56
|
+
|
|
10
57
|
## [v04.00.05] — 2026-05-15
|
|
11
58
|
|
|
12
59
|
**Patch — hard-gate close-out for the Codex v4.0.4 audit.** This release
|
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ npm install -g @lcv-ideas-software/cross-review
|
|
|
21
21
|
npm install -g @lcv-ideas-software/cross-review --registry=https://npm.pkg.github.com
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
**Status.** Stable. Current release: **v04.00.
|
|
24
|
+
**Status.** Stable. Current release: **v04.00.07** (npm package `4.0.7`). See
|
|
25
25
|
[CHANGELOG.md](./CHANGELOG.md) for the release history.
|
|
26
26
|
|
|
27
27
|
> **Project renamed 2026-05-15.** This project was previously published as
|
|
@@ -36,6 +36,8 @@ The version history at a glance:
|
|
|
36
36
|
|
|
37
37
|
| Release | Scope |
|
|
38
38
|
|---|---|
|
|
39
|
+
| **`v04.00.07`** | **Patch — bounded npm registry fetch in the post-publish verifier.** `scripts/verify-registry-dist.mjs` now passes `signal: AbortSignal.timeout(30_000)` to the `https://registry.npmjs.org/<package>/<version>` `fetch` call so a slow or unreachable registry surfaces as a deterministic abort instead of hanging the publish workflow until its 60-minute ceiling. Timeouts map to an explicit `"npm registry lookup for <spec> timed out after 30000 ms"` error; the validated fields (`dist.shasum`, `dist.integrity`, `dist.tarball`) and the script CLI/env contract are unchanged. |
|
|
40
|
+
| **`v04.00.06`** | **Patch — Windows-safe registry verifier.** `scripts/verify-registry-dist.mjs` now queries `https://registry.npmjs.org` directly instead of spawning `npm.cmd`, closing the Windows Node hardening failure (`spawnSync npm.cmd EINVAL`) while preserving the post-publish validation of registry `dist.shasum`, `dist.integrity`, and `dist.tarball`. |
|
|
39
41
|
| **`v04.00.05`** | **Patch — hard-gate close-out for the Codex v4.0.4 audit.** Clears the 6 residual findings: StepSecurity `Source-Code-Overwritten` detections for generated `dist/*` publish artifacts are suppressed against the existing narrow post-rename rule; `docs/model-selection.md` now uses the post-v4 product name, removes misleading fallback wording, and links to the real historical v2 capability-smoke report; model-selection failure text now says it keeps the configured model pin instead of the old fallback phrase; Copilot/Gemini agent instructions preserve the `cross-review-v2` → `cross-review` rename history; local tag verification is expected to use fetched remote tags; the publish workflow now records npm registry `dist.shasum` / `dist.integrity` / `dist.tarball` metadata so audits do not confuse local `npm --registry=https://registry.npmjs.org pack --dry-run` output with the published artifact identity; and `grok-4-latest` model-match accepts provider-reported dot-release aliases such as `grok-4.3` without weakening true cross-family downgrade rejection. |
|
|
40
42
|
| **`v04.00.04`** | **Patch — restore prettier coverage of `src/` and `scripts/` (close audit on v4.0.3 hard-gate gap).** v4.0.3 added biome but also moved `src/**/*.ts`, `src/**/*.js`, `scripts/**/*.ts`, `scripts/**/*.js` into `.prettierignore` to dodge a biome↔prettier disagreement on dynamic-import call-style. Net effect: prettier ran against zero JS/TS under `src/`/`scripts/`, silently turning one of the four hard-gate checks into a no-op there. v4.0.4 restores full coverage and resolves the disagreement at the source — the 7 `scripts/smoke.ts` dynamic-import sites that triggered the wrap conflict were rewritten from destructure-from-call form to a 2-statement form (`const mod = await import("..."); const { A, B, C } = mod;`). Functionally identical; static type inference preserved. Both formatters now check the full JS/TS surface and pass simultaneously. |
|
|
41
43
|
| **`v04.00.00`** | **Major — project renamed to `cross-review`** (drops the `-v2` suffix after the companion `cross-review-v1` project was discontinued and archived 2026-05-15). Breaking: npm package `@lcv-ideas-software/cross-review-v2` → `@lcv-ideas-software/cross-review` (old name stays on npm at `3.7.5` for historical installs); binaries `cross-review-v2` / `cross-review-v2-dashboard` → `cross-review` / `cross-review-dashboard`; env-var prefix `CROSS_REVIEW_V2_*` → `CROSS_REVIEW_*` across all config knobs that previously carried the `V2` infix (e.g. `CROSS_REVIEW_DATA_DIR`, `CROSS_REVIEW_DISABLE_CACHE_ANTHROPIC`); API-key env vars unchanged; per-host identity env vars (`CROSS_REVIEW_CALLER_TOKEN`, `CROSS_REVIEW_REQUIRE_TOKEN`) unchanged. GitHub repo URL: `LCV-Ideas-Software/cross-review-v2` → `LCV-Ideas-Software/cross-review` (auto-redirected). GitHub Pages: `cross-review-v2.lcv.dev` → `cross-review.lcv.dev`. MCP server key in host configs: operators who declared `cross-review-v2` rename to `cross-review`; after reload, MCP tool prefix becomes `mcp__cross-review__*`. Data dir migration is manual: operators copy `${HOME}/.cross-review/data_v2/*` into the new default `${HOME}/.cross-review/data/` (or set `CROSS_REVIEW_DATA_DIR` to the legacy path) — the v4.0.0 runtime reads only `CROSS_REVIEW_DATA_DIR` and does not fall back to the `_v2` suffix automatically. Preserved when copied: persisted session data, `config.json`, `host-tokens.json`, `cache_manifest.json`, archived/corrupt session dirs. Wire shape of all MCP tools, event types, convergence semantics is unchanged; all capabilities, peers, models, security defenses carry over from v3.7.5 verbatim. 504 source/script/doc text substitutions across 26 files. |
|
package/dist/scripts/smoke.js
CHANGED
|
@@ -6207,6 +6207,9 @@ assert.equal(Object.hasOwn(metrics.decision_quality, "undefined"), false);
|
|
|
6207
6207
|
const script = String(pkg.scripts?.["release:verify-registry"] ?? "");
|
|
6208
6208
|
assert.ok(script.includes("verify-registry-dist.mjs"), "v4.0.5 / AUDIT-6: package.json must expose release:verify-registry.");
|
|
6209
6209
|
const verifyScript = fs.readFileSync(path.join(process.cwd(), "scripts", "verify-registry-dist.mjs"), "utf8");
|
|
6210
|
+
assert.ok(!verifyScript.includes("node:child_process"), "v4.0.6 / F1: verify-registry-dist.mjs must not spawn npm/npm.cmd; Windows Node hardening rejects npm.cmd spawn.");
|
|
6211
|
+
assert.ok(verifyScript.includes("https://registry.npmjs.org") && verifyScript.includes("fetch("), "v4.0.6 / F1: verify-registry-dist.mjs must query npm registry metadata directly.");
|
|
6212
|
+
assert.ok(verifyScript.includes("AbortSignal.timeout(") && verifyScript.includes("FETCH_TIMEOUT_MS"), "v4.0.7 / F2: verify-registry-dist.mjs must bound the npm registry fetch with an explicit AbortSignal.timeout so a slow registry surfaces as a deterministic abort instead of hanging the workflow.");
|
|
6210
6213
|
for (const required of ["dist", "shasum", "integrity", "tarball"]) {
|
|
6211
6214
|
assert.ok(verifyScript.includes(required), `v4.0.5 / AUDIT-6: verify-registry-dist.mjs must validate npm registry dist.${required}.`);
|
|
6212
6215
|
}
|