skalpel 4.0.47 → 4.0.49
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/catches.mjs +5 -2
- package/efficacy-eval.mjs +1347 -0
- package/package.json +1 -1
- package/skalpel-setup.mjs +19 -5
package/package.json
CHANGED
package/skalpel-setup.mjs
CHANGED
|
@@ -66,6 +66,7 @@ const KNOWN_SUBS = new Set([
|
|
|
66
66
|
"catches",
|
|
67
67
|
"card",
|
|
68
68
|
"ledger",
|
|
69
|
+
"eval",
|
|
69
70
|
"analytics",
|
|
70
71
|
"verify",
|
|
71
72
|
"yes",
|
|
@@ -87,6 +88,7 @@ usage:
|
|
|
87
88
|
skalpel catches scan your own history for "done" claims over failing tests
|
|
88
89
|
skalpel card [--last|--id <id>] [--md] share one verified catch: the claim + its own failing proof
|
|
89
90
|
skalpel ledger your running tally: N "done"s checked, M verified FALSE
|
|
91
|
+
skalpel eval [--variant <v>] [--json] offline replay of your history: lie frequency, measured cost, catch accuracy
|
|
90
92
|
skalpel analytics interactive local analytics — caught lies, measured cost, steers, re-asks
|
|
91
93
|
skalpel verify on|off|status arm/disarm the live catch (re-runs your own proof on a "done" claim)
|
|
92
94
|
skalpel yes | skalpel no was the last catch right? (feeds precision; "no" stops that proof this session)
|
|
@@ -125,11 +127,12 @@ function validateArgv() {
|
|
|
125
127
|
process.exit(0);
|
|
126
128
|
}
|
|
127
129
|
if (BOOL_FLAGS.has(a)) continue; // valueless flag (e.g. `uninstall --purge`)
|
|
128
|
-
// `skalpel card`
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
|
|
130
|
+
// `skalpel card` (--last / --id <id> / --md / --plain) and `skalpel eval` (--variant / --limit /
|
|
131
|
+
// --json / --home / --out) own their own flags and forward them to card.mjs / efficacy-eval.mjs.
|
|
132
|
+
// They are NOT setup options, so setup must not reject them as unknown — pass any token after those
|
|
133
|
+
// subcommands straight through (each module validates its own flags). Global -v/-h above still win
|
|
134
|
+
// for a bare `skalpel -v`. Scoped so no other subcommand's contract shifts.
|
|
135
|
+
if (i > 0 && (argv[0] === "card" || argv[0] === "eval")) continue;
|
|
133
136
|
if (a.startsWith("-")) {
|
|
134
137
|
console.error(`skalpel: unknown option \`${a}\`\n\n${USAGE}`);
|
|
135
138
|
process.exit(2);
|
|
@@ -993,6 +996,17 @@ async function main() {
|
|
|
993
996
|
spawnSync("node", [join(__dir, "ledger.mjs"), ...argv.slice(1)], { stdio: "inherit" });
|
|
994
997
|
return;
|
|
995
998
|
}
|
|
999
|
+
// `skalpel eval` — THE EFFICACY EVAL: a LOCAL, READ-ONLY, ZERO-NETWORK offline REPLAY of the user's own
|
|
1000
|
+
// Claude Code + Codex history that measures whether the "agent lies about done" fire is real FOR THEM and
|
|
1001
|
+
// how much it costs — lie frequency (confirmed-lie vs true-done vs unverifiable), MEASURED red→green cost
|
|
1002
|
+
// (real timestamps only, never estimated), and catch accuracy (raw-flag → surfaced vs harness-suppressed,
|
|
1003
|
+
// precision + relative recall) with a pluggable catch-config `--variant` so a stricter gate replays in
|
|
1004
|
+
// seconds. Reuses the SAME detectors as the live catch (no divergent claim logic); never re-runs a proof,
|
|
1005
|
+
// never touches the network, never fabricates a number; writes nothing unless the user asks with `--out`.
|
|
1006
|
+
if (sub === "eval") {
|
|
1007
|
+
spawnSync("node", [join(__dir, "efficacy-eval.mjs"), ...argv.slice(1)], { stdio: "inherit" });
|
|
1008
|
+
return;
|
|
1009
|
+
}
|
|
996
1010
|
// `skalpel analytics` — INTERACTIVE LOCAL ANALYTICS: a keyboard-navigable, READ-ONLY terminal view
|
|
997
1011
|
// derived from the same honest local data as `skalpel ledger` (verify-shadow.log + steers.ndjson +
|
|
998
1012
|
// insights.ndjson). Zero network, zero writes, zero estimates. Degrades to a plain static snapshot
|