-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun.ts
More file actions
82 lines (73 loc) · 2.49 KB
/
Copy pathrun.ts
File metadata and controls
82 lines (73 loc) · 2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// Run two passes through runDialecticResolver. No LLM calls — all stubbed.
//
// npx tsx examples/code-review/run.ts
import {
defaultAuthorityRank,
defaultMinSourceKindForSeverity,
defaultThresholdsByCategory,
runDialecticResolver,
type ResolverConfig,
} from "../../src";
import {
buildPass1Artifact,
buildPass2Artifact,
researchWorkerEvidencePass2,
} from "./mocks";
const config: ResolverConfig = {
thresholdsByCategory: defaultThresholdsByCategory,
authorityRank: defaultAuthorityRank,
maxRounds: 3,
minSourceKindForSeverity: defaultMinSourceKindForSeverity,
};
function header(label: string): void {
console.log("\n" + "=".repeat(72));
console.log(label);
console.log("=".repeat(72));
}
function showResult(label: string, result: ReturnType<typeof runDialecticResolver>): void {
header(label);
console.log("readyToAdvance: ", result.artifact.validation.readyToAdvance);
console.log("gatesFailed: ", result.artifact.validation.gatesFailed);
console.log("blockingOpen: ", result.artifact.validation.blockingObjectionsOpen);
console.log("needsAnotherRound: ", result.needsAnotherRound);
console.log("resolutions:");
for (const r of result.artifact.resolutions) {
console.log(` - ${r.objectionId.padEnd(12)} ${r.action.padEnd(22)} ${r.note}`);
}
console.log("receipts:");
for (const rec of result.receipts) {
console.log(` - ${rec.receiptKind.padEnd(20)} ${JSON.stringify(rec.payload)}`);
}
}
// ---------- Pass 1 ----------
const pass1Artifact = buildPass1Artifact();
const pass1 = runDialecticResolver({
artifact: pass1Artifact,
evidenceChain: pass1Artifact.evidenceChain,
config,
});
showResult(
"PASS 1 — Proposer says OK, only llm-inference backs the safety claim",
pass1,
);
// ---------- Pass 2 ----------
const pass2Artifact = buildPass2Artifact(pass1.artifact);
const pass2 = runDialecticResolver({
artifact: pass2Artifact,
evidenceChain: pass2Artifact.evidenceChain,
config,
});
showResult(
`PASS 2 — Research workers appended ${researchWorkerEvidencePass2.length} live-api evidence items`,
pass2,
);
if (pass2.artifact.validation.readyToAdvance) {
console.log("\n✅ Artifact ready to advance.");
process.exit(0);
} else if (pass2.needsAnotherRound) {
console.log("\n⏳ Needs another round.");
process.exit(0);
} else {
console.log("\n🛑 Blocking objections remain — escalate to human review.");
process.exit(1);
}