tickmarkr 1.90.5 → 1.90.6
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/dist/gates/baseline.js +11 -1
- package/dist/run/consult.js +17 -2
- package/package.json +1 -1
package/dist/gates/baseline.js
CHANGED
|
@@ -51,9 +51,19 @@ const TRAILING_FAIL_RE = /^\s*(?:test\s+)?\S+(?:\s+\([^)]*\))?\s+(?:\.{3}|-{3,})
|
|
|
51
51
|
// runner sharing the glyph protocol is read without being enumerated; a status strip drawing ✖
|
|
52
52
|
// mid-line inside chrome matches nothing, the same position rule as the other shapes.
|
|
53
53
|
const GLYPH_FAIL_RE = /^\s*(?:(?:[\w@./-]+:\s*)*)✖\s+\S/;
|
|
54
|
+
// Q137s (verbatim capture, dossier run-2 consult dossier, turbo 2.9.14 + pnpm 10): monorepo
|
|
55
|
+
// drivers prefix child output and summarize failures in their own grammar. Four shapes, all
|
|
56
|
+
// positional — `<pkg>:<task>:` prefixes reuse GLYPH_FAIL_RE's prefix idiom; `Failed:`/`ERROR`
|
|
57
|
+
// require the driver's own `pkg#task` identifier or its literal terminus, so prose or drawn
|
|
58
|
+
// chrome containing the words matches nothing (OBS-278 discipline):
|
|
59
|
+
// `intake-frontend:lint: ELIFECYCLE Command failed with exit code 1.`
|
|
60
|
+
// `Failed: intake-frontend#lint`
|
|
61
|
+
// ` ERROR intake-frontend#lint: command (…) … exited (1)`
|
|
62
|
+
// ` ERROR run failed: command exited (1)`
|
|
63
|
+
const TURBO_FAIL_RE = /^\s*(?:[\w@./-]+:\s*)*ELIFECYCLE\s+Command failed\b|^\s*Failed:\s+\S+#\S+|^\s*ERROR\s+(?:\S+#\S+:|run failed\b)/;
|
|
54
64
|
// Lines that NAME a failing test — the ones worth headlining to the operator. One list, so recognition
|
|
55
65
|
// and reporting cannot drift apart (a shape that blocks but never gets named cost 3 attempts once).
|
|
56
|
-
const namesFailure = (l) => FAIL_ANCHOR_RE.test(l) || RUNNER_FAIL_RE.test(l) || TRAILING_FAIL_RE.test(l) || GLYPH_FAIL_RE.test(l);
|
|
66
|
+
const namesFailure = (l) => FAIL_ANCHOR_RE.test(l) || RUNNER_FAIL_RE.test(l) || TRAILING_FAIL_RE.test(l) || GLYPH_FAIL_RE.test(l) || TURBO_FAIL_RE.test(l);
|
|
57
67
|
const isFailureShaped = (l) => namesFailure(l) || SUMMARY_FAIL_RE.test(l) || ERROR_ANCHOR_RE.test(l)
|
|
58
68
|
|| TSC_ERROR_RE.test(l) || LINTER_ERROR_RE.test(l);
|
|
59
69
|
const VOCAB_RE = /\b(?:error|fail(?:ed|ure|ing)?)\b/i;
|
package/dist/run/consult.js
CHANGED
|
@@ -2,7 +2,7 @@ import { mkdirSync, writeFileSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { getAdapter } from "../adapters/registry.js";
|
|
4
4
|
import { bannerShell, paneDispatchCommand } from "../brand.js";
|
|
5
|
-
import { extractVerdictJson, gateExitTrailer, gatePaneName, generateVerdictNonce, verdictNonceLine } from "../gates/llm.js";
|
|
5
|
+
import { dewrapPaneVerdict, extractVerdictJson, gateExitTrailer, gatePaneName, generateVerdictNonce, verdictNonceLine } from "../gates/llm.js";
|
|
6
6
|
import { classifyVerdictCause } from "../gates/verdict-cause.js";
|
|
7
7
|
import { disallowedBy } from "../route/preference.js";
|
|
8
8
|
import { sh } from "./git.js";
|
|
@@ -173,7 +173,22 @@ opts = {}) {
|
|
|
173
173
|
await driver.close(slot);
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
|
-
|
|
176
|
+
// D-OBS-12 (dossier runs 1-2, 3/3 valid verdicts destroyed): the pane path is a terminal
|
|
177
|
+
// scrape — a single-line ~2000-char verdict soft-wraps in rendering and brace balance dies.
|
|
178
|
+
// Judge/review got dewrapPaneVerdict for exactly this (llm.ts, OBS-209 lineage); the consult
|
|
179
|
+
// seat never did. Headless output is machine-read stdout and needs no reconstruction.
|
|
180
|
+
const effective = cfg.visibility.llm === "headless" ? out : dewrapPaneVerdict(out, nonce);
|
|
181
|
+
const parsed = parseConsultVerdict(effective, nonce);
|
|
182
|
+
if (!parsed.verdict) {
|
|
183
|
+
// Q144s / OBS-196 parity: an unparseable verdict persists its raw bytes (pre-dewrap,
|
|
184
|
+
// rendering verbatim) beside the prompt — three human parks carried zero diagnostic
|
|
185
|
+
// payload because this artifact did not exist.
|
|
186
|
+
try {
|
|
187
|
+
writeFileSync(join(dir, `${d.taskId}-${n}${seatIdx > 0 ? `-s${seatIdx}` : ""}-response.txt`), out);
|
|
188
|
+
}
|
|
189
|
+
catch { /* evidence persistence must never fail the seat walk */ }
|
|
190
|
+
}
|
|
191
|
+
return parsed;
|
|
177
192
|
};
|
|
178
193
|
// v1.54 T1: ranked seat failover. Walk consult.prefer (adapter:model entries) to the first entry
|
|
179
194
|
// whose adapter is in the live channel set; a failed seat or unparseable verdict falls to the next;
|