vigiles 27.0.0 → 27.1.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.
@@ -160,6 +160,19 @@ export interface RunScriptsEnv {
160
160
  readonly all: boolean;
161
161
  /** `--yes` / `--no-interactive` — agent/CI mode: never prompt. */
162
162
  readonly yes: boolean;
163
+ /**
164
+ * `--check` — VERIFY committed eval locks rather than measure. `decideLock`
165
+ * in check mode returns only `replay` (the recorded report, no model call) or
166
+ * `stale` (a failure), NEVER `run` — so this path cannot spend quota, and the
167
+ * quota consent below must not stand in its way.
168
+ *
169
+ * Measured 2026-09-09: the CI `eval-check` step had never once executed. With
170
+ * no lock committed anywhere, `eval --check` short-circuited on
171
+ * `anyLocksCommitted` and returned "skip"; the first repo to commit a lock got
172
+ * past that early return, reached this gate, and was refused exit 2. A gate
173
+ * that is green because it never runs is the failure this repo keeps naming.
174
+ */
175
+ readonly lockCheck: boolean;
163
176
  }
164
177
  /**
165
178
  * Consent gate for a bare (no-target) `vigiles eval`. `eval` runs the REAL model
@@ -346,6 +346,9 @@ function decideRunScripts(o) {
346
346
  return { kind: "run" };
347
347
  if (o.all || o.yes)
348
348
  return { kind: "run" };
349
+ // Verifying a lock is not spending quota — see `lockCheck`.
350
+ if (o.lockCheck)
351
+ return { kind: "run" };
349
352
  // A bounded no-target run (0 = no-op, 1 = a single obviously-intended eval) is
350
353
  // not the footgun; the footgun is fanning out over the whole tree.
351
354
  if (o.matchedCount <= 1)
package/dist/cli-main.js CHANGED
@@ -4907,6 +4907,7 @@ async function handleRunScripts(kind, args, restArgs, excludes) {
4907
4907
  isTTY: (process.stdin.isTTY ?? false) && (process.stdout.isTTY ?? false),
4908
4908
  all: args.includes("--all"),
4909
4909
  yes: args.includes("--yes") || args.includes("--no-interactive"),
4910
+ lockCheck: args.includes("--check"),
4910
4911
  });
4911
4912
  if (runDecision.kind === "refuse") {
4912
4913
  console.error(`✗ vigiles eval: ${String(runDecision.count)} eval file(s) matched the whole tree, and each ` +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vigiles",
3
- "version": "27.0.0",
3
+ "version": "27.1.0",
4
4
  "description": "Audit, test and measure the harness your AI agent runs on — grade your CLAUDE.md / AGENTS.md, skills, subagents and hooks, run them against a scripted model, and measure whether they actually fire.",
5
5
  "keywords": [
6
6
  "claude-code",