coderifts 4.12.0 → 5.0.0
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 +59 -0
- package/LICENSE +21 -0
- package/dist/cli.js +127800 -112087
- package/package.json +2 -2
- package/scripts/assert-guard-major.js +45 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "coderifts",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "Detect breaking API changes from the command line. Works locally or with the CodeRifts cloud API.",
|
|
5
5
|
"author": "CodeRifts <hello@coderifts.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"test": "node --test test/*.test.js"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@coderifts/agent-guard": "^
|
|
48
|
+
"@coderifts/agent-guard": "^11.0.0",
|
|
49
49
|
"chalk": "^4.1.2",
|
|
50
50
|
"cli-table3": "^0.6.4",
|
|
51
51
|
"commander": "^12.0.0",
|
|
@@ -15,13 +15,23 @@
|
|
|
15
15
|
* 4.12.0: floor raised to 10 (ENFORCING_STRICT requires the execution chain — a strict
|
|
16
16
|
* composition that built under 9.x refuses to construct under 10.x, so a CLI that documents or
|
|
17
17
|
* scaffolds strict must not run against a guard with the older meaning).
|
|
18
|
+
* 4.13.0: floor raised to 11 (computeBundleFingerprint returned a WRONG digest in 10.x — it
|
|
19
|
+
* omitted the artifact count and the whole context block, so on identical inputs it produced
|
|
20
|
+
* sha256:1a0e7470… where the server produced sha256:049650f2…; 11.0.0 delegates to the single
|
|
21
|
+
* canonical crbundle.v1 preimage and matches byte for byte. COST MEASURED AS ZERO, the same way
|
|
22
|
+
* the 10-raise was: the CLI imports only deployGate, asVerifiedDeployReceiptView,
|
|
23
|
+
* DEPLOY_RECEIPT_VIEW_SPEC and matchGlob, none of which 11.0.0 touched, and the suite staged
|
|
24
|
+
* against 11.0.0 returned an identical 532/530/2 with a byte-identical failure set. The floor
|
|
25
|
+
* rises anyway, because a semantics floor is about what the CLI may RUN against, not about what
|
|
26
|
+
* it happens to import today — a fingerprint that disagrees with the server is exactly the class
|
|
27
|
+
* of difference this gate exists to refuse.)
|
|
18
28
|
*/
|
|
19
29
|
|
|
20
30
|
const fs = require('fs');
|
|
21
31
|
const path = require('path');
|
|
22
32
|
|
|
23
33
|
/** Minimum acceptable major for @coderifts/agent-guard in THIS package (the CLI). */
|
|
24
|
-
const MIN_GUARD_MAJOR =
|
|
34
|
+
const MIN_GUARD_MAJOR = 11;
|
|
25
35
|
const DEP = '@coderifts/agent-guard';
|
|
26
36
|
|
|
27
37
|
/**
|
|
@@ -55,17 +65,42 @@ const CHECKOUTS = [
|
|
|
55
65
|
/**
|
|
56
66
|
* DELIBERATE, MEASURED, AND LOWER THAN THE CLI'S — recorded so it is a decision, not a default.
|
|
57
67
|
*
|
|
58
|
-
* 2026-08-26: bumping the root to ^10 breaks three merge-gate tests
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
68
|
+
* 2026-08-26: bumping the root to ^10 breaks three merge-gate tests
|
|
69
|
+
* (test/mergegate-webhook.test.js: 46/46 on 3.0.0, 43/46 on 10.x). The app's own comment at
|
|
70
|
+
* webhook-integration.js:336-339 records why 3.x has been SAFE rather than merely unnoticed:
|
|
71
|
+
* the app ANDs three conditions (protection_inescapable && change_set_rebound && app_bound) so
|
|
72
|
+
* a stale package can never fail-open. That AND is load-bearing — measured against 3.0.0,
|
|
73
|
+
* gateDecision claims inescapable_merge:true even when required_check_app_bound is false or
|
|
74
|
+
* absent; the published claim is correct only because the app re-derives it.
|
|
63
75
|
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
76
|
+
* RE-MEASURED 2026-08-26 against 11.0.0, and TWO THINGS IN THE OLD NOTE WERE WRONG:
|
|
77
|
+
*
|
|
78
|
+
* 1. It said 10.0.0 "returns residuals: []". It does not. Given the correct input shape it
|
|
79
|
+
* returns ['required_check_app_not_bound'] / ['required_check_app_binding_unknown'] — the
|
|
80
|
+
* app's own vocabulary. The earlier reading passed protection.enforcement_state; the field
|
|
81
|
+
* the gate reads is protection.enforcement, so the gate saw no protection at all.
|
|
82
|
+
* 2. The real difference is PRECEDENCE, not absence. The guard emits exactly ONE residual and
|
|
83
|
+
* short-circuits on the enforcement gap, so where two gaps hold at once it reports
|
|
84
|
+
* 'admin_bypass_open' and the app expects 'required_check_app_binding_unknown'. The app's
|
|
85
|
+
* collectBindingResiduals emits EVERY residual that holds — its docstring says so: "the
|
|
86
|
+
* pure gate's published shape is a single honesty slot ... the second was suppressed".
|
|
87
|
+
* That is why the app duplicates rather than consumes, and it is the whole reconciliation.
|
|
88
|
+
*
|
|
89
|
+
* 11.0.0 vs 10.0.0: NO CHANGE. Residual output is byte-identical across all three app-binding
|
|
90
|
+
* cases, and 11.0.0 touched only computeBundleFingerprint, which this path does not import. So
|
|
91
|
+
* 11 makes the bump neither easier nor harder — the blocker is unchanged and the deferral still
|
|
92
|
+
* holds for exactly the reason above, not for a residual shape that moved.
|
|
93
|
+
*
|
|
94
|
+
* WHAT THE BUMP ROUND MUST DECIDE: whether the guard should emit all holding residuals (then
|
|
95
|
+
* the app consumes gateOut.residuals and collectBindingResiduals is deleted), or whether the
|
|
96
|
+
* single-slot shape is deliberate (then the app keeps its collector and the duplication is
|
|
97
|
+
* documented as intended rather than left looking accidental). Do not bump before that choice.
|
|
98
|
+
*
|
|
99
|
+
* So the floor is pinned at 3 to stop it drifting LOWER unnoticed. Raise this number in that
|
|
100
|
+
* round and record the reason on the line below, in the style of the CLI history above.
|
|
67
101
|
*/
|
|
68
|
-
why: 'root pinned at 3 pending the gateDecision residual-
|
|
102
|
+
why: 'root pinned at 3 pending the gateDecision residual-PRECEDENCE reconciliation (see comment; '
|
|
103
|
+
+ 're-measured against 11.0.0 — unchanged from 10.0.0).',
|
|
69
104
|
},
|
|
70
105
|
];
|
|
71
106
|
|