skalpel 4.0.32 → 4.0.34
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/card.mjs +7 -4
- package/install.mjs +2 -3
- package/package.json +1 -1
package/card.mjs
CHANGED
|
@@ -66,7 +66,10 @@ export function isGenuineCatch(row) {
|
|
|
66
66
|
const failed = row.outcome === "GENUINE_FAIL" || row.pass_fail === "FAIL";
|
|
67
67
|
// A real catch must carry the two things the card indicts the agent with: what it claimed, and the
|
|
68
68
|
// proof that contradicts it. A row missing either can't be rendered honestly, so it isn't a catch.
|
|
69
|
-
|
|
69
|
+
// Ship-status catches (category:"ship", outcome SHIP_FAIL) record the check under probe_command, not
|
|
70
|
+
// proof_command — accept either so a genuine "you said deployed, it's 404" catch is not invisible.
|
|
71
|
+
const command = row.proof_command || row.probe_command;
|
|
72
|
+
return failed && !!command && !!row.claim_text;
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
// readCatches() → all genuine-catch rows in the shadow log, oldest→newest as written. Fail-open: any
|
|
@@ -147,7 +150,7 @@ function stamp(ts) {
|
|
|
147
150
|
// ---------- (3a) plain-text card (no ANSI — the shareable artifact) ----------
|
|
148
151
|
export function renderPlainCard(row) {
|
|
149
152
|
const claim = clean(row.claim_text, 200) || "it's done";
|
|
150
|
-
const proof = clean(row.proof_command, 200) || "its own proof";
|
|
153
|
+
const proof = clean(row.proof_command || row.probe_command, 200) || "its own proof";
|
|
151
154
|
const evidence = clean(row.evidence, 200);
|
|
152
155
|
const L = [];
|
|
153
156
|
L.push("🔬 skalpel — verified catch");
|
|
@@ -172,7 +175,7 @@ export function renderPlainCard(row) {
|
|
|
172
175
|
// ---------- (3b) markdown card (Slack / PR / X) ----------
|
|
173
176
|
export function renderMarkdownCard(row) {
|
|
174
177
|
const claim = clean(row.claim_text, 200) || "it's done";
|
|
175
|
-
const proof = clean(row.proof_command, 200) || "its own proof";
|
|
178
|
+
const proof = clean(row.proof_command || row.probe_command, 200) || "its own proof";
|
|
176
179
|
const evidence = clean(row.evidence, 200);
|
|
177
180
|
const FENCE = "```";
|
|
178
181
|
const L = [];
|
|
@@ -198,7 +201,7 @@ export function renderMarkdownCard(row) {
|
|
|
198
201
|
// ---------- (3c) styled terminal card ----------
|
|
199
202
|
function renderTerminalCard(row) {
|
|
200
203
|
const claim = clean(row.claim_text, 200) || "it's done";
|
|
201
|
-
const proof = clean(row.proof_command, 200) || "its own proof";
|
|
204
|
+
const proof = clean(row.proof_command || row.probe_command, 200) || "its own proof";
|
|
202
205
|
const evidence = clean(row.evidence, 180);
|
|
203
206
|
const L = [];
|
|
204
207
|
L.push("");
|
package/install.mjs
CHANGED
|
@@ -54,14 +54,13 @@ function stageHookRuntime() {
|
|
|
54
54
|
// a hook entrypoint staged without a module it imports — the exact 0.3.12–0.3.16 bug shape.
|
|
55
55
|
copyFileSync(join(PKG_DIR, "insights.mjs"), join(HOOKS_DIR, "insights.mjs")); // hooks import ./insights.mjs
|
|
56
56
|
copyFileSync(join(PKG_DIR, "reveal.mjs"), join(HOOKS_DIR, "reveal.mjs")); // both hooks import ./reveal.mjs
|
|
57
|
-
copyFileSync(join(PKG_DIR, "transcript.mjs"), join(HOOKS_DIR, "transcript.mjs")); // skalpel-hook
|
|
57
|
+
copyFileSync(join(PKG_DIR, "transcript.mjs"), join(HOOKS_DIR, "transcript.mjs")); // skalpel-hook + skalpel-statusline + verify-shadow + anchor-shadow import ./transcript.mjs (tailLines)
|
|
58
58
|
copyFileSync(join(PKG_DIR, "skalpel-hook.mjs"), HOOK_FILE);
|
|
59
|
-
copyFileSync(join(PKG_DIR, "transcript.mjs"), join(HOOKS_DIR, "transcript.mjs")); // skalpel-hook imports ./transcript.mjs (tailLines)
|
|
60
59
|
copyFileSync(join(PKG_DIR, "skalpel-hook-session.mjs"), SESSION_FILE);
|
|
61
60
|
copyFileSync(join(PKG_DIR, "incremental-ingest.mjs"), join(HOOKS_DIR, "incremental-ingest.mjs"));
|
|
62
61
|
copyFileSync(join(PKG_DIR, "skalpel-hook-session-end.mjs"), SESSION_END_FILE);
|
|
63
62
|
copyFileSync(join(PKG_DIR, "skalpel-statusline.mjs"), STATUSLINE_FILE);
|
|
64
|
-
copyFileSync(join(PKG_DIR, "
|
|
63
|
+
copyFileSync(join(PKG_DIR, "anchor-shadow.mjs"), join(HOOKS_DIR, "anchor-shadow.mjs")); // verify-shadow.mjs (staged worker) imports ./anchor-shadow.mjs — probe primitives; staged BEFORE verify-shadow.mjs
|
|
65
64
|
copyFileSync(join(PKG_DIR, "verify-shadow.mjs"), join(HOOKS_DIR, "verify-shadow.mjs")); // claim-verification SHADOW worker (spawned by skalpel-hook.mjs)
|
|
66
65
|
copyFileSync(join(PKG_DIR, "auth.mjs"), join(HOOKS_DIR, "auth.mjs")); // hooks import ./auth.mjs
|
|
67
66
|
copyFileSync(join(PKG_DIR, "metrics.mjs"), join(HOOKS_DIR, "metrics.mjs")); // hooks import ./metrics.mjs
|