@lcv-ideas-software/cross-review 4.3.0 → 4.3.1
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 +18 -0
- package/README.md +2 -1
- package/dist/scripts/smoke.js +8 -3
- package/dist/scripts/smoke.js.map +1 -1
- package/dist/src/core/config.d.ts +1 -1
- package/dist/src/core/config.js +1 -1
- package/dist/src/core/convergence.js +5 -3
- package/dist/src/core/convergence.js.map +1 -1
- package/dist/src/core/orchestrator.js +4 -1
- package/dist/src/core/orchestrator.js.map +1 -1
- package/dist/src/peers/errors.js +5 -2
- package/dist/src/peers/errors.js.map +1 -1
- package/docs/apresentacao-cross-review.md +3 -2
- package/docs/apresentacao.md +2 -1
- package/docs/architecture.md +5 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,24 @@ standard `v00.00.00`; npm package versions remain SemVer.
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [v04.03.01] — 2026-06-05
|
|
11
|
+
|
|
12
|
+
**Patch — provider skip classification hotfix.** This release follows up on a
|
|
13
|
+
real hard-gate incident where Claude/Anthropic was skipped after provider
|
|
14
|
+
overload. The immediate provider cause was Anthropic `overloaded_error`; the
|
|
15
|
+
runtime issue was that any `provider_error`, including non-retryable provider
|
|
16
|
+
400-style failures, could be treated as skippable.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- `provider_error` is now skippable only when classified as retryable, so
|
|
21
|
+
non-retryable provider payload/schema rejections block convergence instead of
|
|
22
|
+
being silently removed from the panel.
|
|
23
|
+
- Anthropic `overloaded_error` without preserved HTTP status text is now treated
|
|
24
|
+
as retryable, matching HTTP 529 overload behavior.
|
|
25
|
+
- `session.peer_skipped_unavailable` events now include retryability, recovery
|
|
26
|
+
hint, and a redacted provider error preview in event data.
|
|
27
|
+
|
|
10
28
|
## [v04.03.00] — 2026-06-05
|
|
11
29
|
|
|
12
30
|
**Minor — P1/P2/P3 audit follow-up.** This release closes the first concrete
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ npm install -g @lcv-ideas-software/cross-review
|
|
|
24
24
|
npm install -g @lcv-ideas-software/cross-review --registry=https://npm.pkg.github.com
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
**Status.** Stable. Current release: **v04.03.
|
|
27
|
+
**Status.** Stable. Current release: **v04.03.01** (npm package `4.3.1`). See [CHANGELOG.md](./CHANGELOG.md) for the full release history.
|
|
28
28
|
|
|
29
29
|
> **Project renamed 2026-05-15.** This project was previously published as
|
|
30
30
|
> [`@lcv-ideas-software/cross-review-v2`](https://www.npmjs.com/package/@lcv-ideas-software/cross-review-v2)
|
|
@@ -38,6 +38,7 @@ The version history at a glance:
|
|
|
38
38
|
|
|
39
39
|
| Release | Scope |
|
|
40
40
|
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
41
|
+
| **`v04.03.01`** | Patch — tighten skip-peer classification so non-retryable provider errors block, while Anthropic overload events remain retryable and better surfaced in skip diagnostics. |
|
|
41
42
|
| **`v04.03.00`** | Minor — P1/P2/P3 follow-up with unresolved-evidence close-out visibility, an offline fixture eval harness, and a read-only peer reliability report. |
|
|
42
43
|
| **`v04.02.05`** | Patch — harden session auditability with terminal events, cost split reporting, `not_resurfaced` visibility, and relator provenance checks for session IDs/GitHub URLs. |
|
|
43
44
|
| **`v04.02.04`** | Patch — harden truthfulness preflight auditability, add a read-only preflight retest tool, and reduce false parser warnings for attached/log evidence. |
|
package/dist/scripts/smoke.js
CHANGED
|
@@ -22,6 +22,7 @@ import { SWEEP_MIN_IDLE_MS } from "../src/core/session-store.js";
|
|
|
22
22
|
import { parsePeerStatus } from "../src/core/status.js";
|
|
23
23
|
import { PEERS } from "../src/core/types.js";
|
|
24
24
|
import { getCallerCandidatesFromClientInfo, lockCallerPeerSelection, pruneCompletedJobs, SessionIdSchema, setHostTokensRecord, verifyCallerIdentity, } from "../src/mcp/server.js";
|
|
25
|
+
import { classifyProviderError } from "../src/peers/errors.js";
|
|
25
26
|
import { selectFromCandidates } from "../src/peers/model-selection.js";
|
|
26
27
|
import { StubAdapter } from "../src/peers/stub.js";
|
|
27
28
|
import { redact } from "../src/security/redact.js";
|
|
@@ -488,13 +489,13 @@ assert.equal(checkConvergence(["codex", "claude"], "READY", [fakeReady("codex"),
|
|
|
488
489
|
// taxonomy + the skip-gated quorum floor + the zero-skip non-regression
|
|
489
490
|
// invariant.
|
|
490
491
|
{
|
|
491
|
-
const fakeFailure = (peer, failureClass) => ({
|
|
492
|
+
const fakeFailure = (peer, failureClass, retryable = true) => ({
|
|
492
493
|
peer,
|
|
493
494
|
provider: "stub",
|
|
494
495
|
model: "stub",
|
|
495
496
|
failure_class: failureClass,
|
|
496
497
|
message: `stub ${failureClass}`,
|
|
497
|
-
retryable
|
|
498
|
+
retryable,
|
|
498
499
|
attempts: 3,
|
|
499
500
|
latency_ms: 0,
|
|
500
501
|
});
|
|
@@ -509,8 +510,12 @@ assert.equal(checkConvergence(["codex", "claude"], "READY", [fakeReady("codex"),
|
|
|
509
510
|
"fallback_exhausted",
|
|
510
511
|
]) {
|
|
511
512
|
assert.equal(isSkippableFailure(fakeFailure("grok", fc)), true, `v3.7.3 / skip-peer: ${fc} must be skippable (infra unavailability)`);
|
|
512
|
-
assert.equal(SKIPPABLE_FAILURE_CLASSES.has(fc), true, `v3.7.3 / skip-peer: ${fc} must be in SKIPPABLE_FAILURE_CLASSES`);
|
|
513
513
|
}
|
|
514
|
+
assert.equal(SKIPPABLE_FAILURE_CLASSES.has("provider_error"), true, "v3.7.3 / skip-peer: provider_error remains a known skip candidate when retryable");
|
|
515
|
+
assert.equal(isSkippableFailure(fakeFailure("grok", "provider_error", false)), false, "v4.3.1 / skip-peer: non-retryable provider_error (e.g. provider 400 payload/schema rejection) must block instead of being skipped");
|
|
516
|
+
const anthropicOverloaded = classifyProviderError("claude", "anthropic", "claude-opus-4-8", new Error('{"type":"error","error":{"details":null,"type":"overloaded_error","message":"Overloaded"},"request_id":"req_fixture"}'), 1, Date.now());
|
|
517
|
+
assert.equal(anthropicOverloaded.failure_class, "provider_error");
|
|
518
|
+
assert.equal(anthropicOverloaded.retryable, true, "v4.3.1 / provider-errors: Anthropic overloaded_error without HTTP status text must still be retryable");
|
|
514
519
|
for (const fc of [
|
|
515
520
|
"schema",
|
|
516
521
|
"unparseable_after_recovery",
|