agentfootprint 6.25.0 → 6.26.1
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/README.md +194 -48
- package/dist/esm/lib/context-bisect/ablation.js +183 -0
- package/dist/esm/lib/context-bisect/ablation.js.map +1 -0
- package/dist/esm/lib/context-bisect/bisect.js +129 -0
- package/dist/esm/lib/context-bisect/bisect.js.map +1 -0
- package/dist/esm/lib/context-bisect/index.js +22 -0
- package/dist/esm/lib/context-bisect/index.js.map +1 -0
- package/dist/esm/lib/context-bisect/llmEdgeWeigher.js +0 -0
- package/dist/esm/lib/context-bisect/llmEdgeWeigher.js.map +1 -0
- package/dist/esm/lib/context-bisect/localize.js +555 -0
- package/dist/esm/lib/context-bisect/localize.js.map +1 -0
- package/dist/esm/lib/context-bisect/types.js +56 -0
- package/dist/esm/lib/context-bisect/types.js.map +1 -0
- package/dist/esm/lib/tool-lint/cli.js +6 -1
- package/dist/esm/lib/tool-lint/cli.js.map +1 -1
- package/dist/esm/observe.js +7 -0
- package/dist/esm/observe.js.map +1 -1
- package/dist/lib/context-bisect/ablation.js +192 -0
- package/dist/lib/context-bisect/ablation.js.map +1 -0
- package/dist/lib/context-bisect/bisect.js +133 -0
- package/dist/lib/context-bisect/bisect.js.map +1 -0
- package/dist/lib/context-bisect/index.js +40 -0
- package/dist/lib/context-bisect/index.js.map +1 -0
- package/dist/lib/context-bisect/llmEdgeWeigher.js +0 -0
- package/dist/lib/context-bisect/llmEdgeWeigher.js.map +1 -0
- package/dist/lib/context-bisect/localize.js +563 -0
- package/dist/lib/context-bisect/localize.js.map +1 -0
- package/dist/lib/context-bisect/types.js +59 -0
- package/dist/lib/context-bisect/types.js.map +1 -0
- package/dist/lib/tool-lint/cli.js +30 -2
- package/dist/lib/tool-lint/cli.js.map +1 -1
- package/dist/observe.js +42 -20
- package/dist/observe.js.map +1 -1
- package/dist/types/lib/context-bisect/ablation.d.ts +97 -0
- package/dist/types/lib/context-bisect/ablation.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/bisect.d.ts +76 -0
- package/dist/types/lib/context-bisect/bisect.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/index.d.ts +22 -0
- package/dist/types/lib/context-bisect/index.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/llmEdgeWeigher.d.ts +125 -0
- package/dist/types/lib/context-bisect/llmEdgeWeigher.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/localize.d.ts +119 -0
- package/dist/types/lib/context-bisect/localize.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/types.d.ts +356 -0
- package/dist/types/lib/context-bisect/types.d.ts.map +1 -0
- package/dist/types/lib/tool-lint/cli.d.ts.map +1 -1
- package/dist/types/observe.d.ts +1 -0
- package/dist/types/observe.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llmEdgeWeigher.js","sourceRoot":"","sources":["../../../../src/lib/context-bisect/llmEdgeWeigher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAIH,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EACL,cAAc,GAIf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAmErD,wEAAwE;AAExE,yEAAyE;AACzE,SAAS,eAAe,CAAC,SAAkC;IACzD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACnF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,GAAG,CAAC,IAAY,EAAE,QAAgB;IACzC,OAAO,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAkC,EAClC,SAA8B,EAC9B,cAAsB,EACtB,QAAgB;IAEhB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,cAAc,KAAK,cAAc;YAAE,SAAS;QACvD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,aAAa,CAAC,aAAa,CAAC,SAA2B,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,4EAA4E;AAC5E,SAAS,WAAW,CAClB,SAAkC,EAClC,SAA8B,EAC9B,cAAsB,EACtB,GAAW,EACX,QAAgB;IAEhB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,KAAK,GAAG,aAAa,CAAC,SAA2B,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACnE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,wEAAwE;AAExE;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,uBAAuB,CAAC,YAAY,CAAC;IAClF,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAErD,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,2EAA2E;IAC3E,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkE,CAAC;IAC5F,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,QAAgB,EAAE,GAAW,EAAU,EAAE,CACzE,GAAG,OAAO,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;IAElC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAsB,EAAE,CACnD,OAAO,CAAC,WAAW;QACjB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACzB,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;IAErE,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,GAAW,EAAsB,EAAE,CACjE,OAAO,CAAC,YAAY;QAClB,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC;QAC/B,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;IAEvE,KAAK,UAAU,KAAK,CAAC,IAAgB;QACnC,qEAAqE;QACrE,sEAAsE;QACtE,gDAAgD;QAChD,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;gBAAE,SAAS;YACnD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC9C,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAS;YAEnC,MAAM,QAAQ,GAAoB,EAAE,CAAC;YACrC,MAAM,YAAY,GAA2D,EAAE,CAAC;YAChF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;oBAAE,SAAS;gBAC7D,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9E,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAS,CAAC,8BAA8B;gBAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9D,IAAI,IAAI,KAAK,SAAS;oBAAE,SAAS;gBACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC/C,YAAY,CAAC,IAAI,CAAC;oBAChB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;oBACpC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;oBAChC,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd,CAAC,CAAC;YACL,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEpC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;gBAClC,QAAQ;gBACR,eAAe,EAAE,MAAM;gBACvB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvE,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACrD,8DAA8D;gBAC9D,mEAAmE;gBACnE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACtD,IAAI,IAAI,KAAK,MAAM,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC3D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC;YAAE,OAAO,SAAS,CAAC;QAC5D,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC;IAEF,SAAS,aAAa,CAAC,SAAiB;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;SACvE,CAAC,CAAC,CAAC;QACJ,uEAAuE;QACvE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,OAAO;QACL,KAAK;QACL,KAAK;QACL,aAAa;QACb,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* localizeContextBug — the contextual-bug LOCALIZER, "git bisect for
|
|
3
|
+
* context" (RFC-003 Part B, block D8).
|
|
4
|
+
*
|
|
5
|
+
* The five-stage pipeline (each stage is a shipped piece — this file only
|
|
6
|
+
* ASSEMBLES):
|
|
7
|
+
*
|
|
8
|
+
* 1. TRIGGER — an explicit `atStep`, a custom trigger strategy, or
|
|
9
|
+
* the QualityRecorder's lowest-scoring step.
|
|
10
|
+
* 2. SLICE — footprintjs `causalChain` over the commit log, WITH
|
|
11
|
+
* control-dependence edges (D3) and honesty markers
|
|
12
|
+
* (A2/A4) when the artifacts carry them.
|
|
13
|
+
* 3. WEIGH — D7's `llmEdgeWeigher` stamps influence weights on
|
|
14
|
+
* every LLM-call parent edge (two-pass: prime, re-slice).
|
|
15
|
+
* 4. RANK — suspects = slice nodes classified into ablatable
|
|
16
|
+
* context sources (tool / injection / memory / arg),
|
|
17
|
+
* scored by max-product path weight × per-item semantic
|
|
18
|
+
* refinement. CORRELATIONAL tier — and marked so.
|
|
19
|
+
* 5. ABLATE — optional: the consumer's `AblationRunner` re-runs the
|
|
20
|
+
* scenario without each top suspect, N seeded times.
|
|
21
|
+
* Verdicts (the ONLY causal claims, §B2) + variance.
|
|
22
|
+
*
|
|
23
|
+
* Without a runner the report stops at stage 4 with
|
|
24
|
+
* `mode: 'correlational'` — explicitly a ranking of proxies, no causal
|
|
25
|
+
* claim anywhere.
|
|
26
|
+
*
|
|
27
|
+
* Every `source` / `step` id in the report is a plain runtimeStageId —
|
|
28
|
+
* drill any of them with the trace-toolpack tools (`trace_node`,
|
|
29
|
+
* `trace_slice`, `get_value`) over the same artifacts bag.
|
|
30
|
+
*/
|
|
31
|
+
import { causalChain, commitValueAt } from 'footprintjs/trace';
|
|
32
|
+
import { scoreInfluence } from '../influence-core/index.js';
|
|
33
|
+
import { ablationForSuspect, runAblationProbe, verdictFor } from './ablation.js';
|
|
34
|
+
import { llmEdgeWeigher, stepOutputText } from './llmEdgeWeigher.js';
|
|
35
|
+
import { CONTEXT_BISECT_DEFAULTS } from './types.js';
|
|
36
|
+
// ─── LLM-call id extraction ──────────────────────────────────────────
|
|
37
|
+
/**
|
|
38
|
+
* Extract LLM-call step ids from captured typed events: the
|
|
39
|
+
* `meta.runtimeStageId` of every `agentfootprint.stream.llm_start`
|
|
40
|
+
* envelope, deduplicated in event order. Collect events with
|
|
41
|
+
* `agent.on('*', (e) => events.push(e))`.
|
|
42
|
+
*/
|
|
43
|
+
export function llmCallIdsFromEvents(events) {
|
|
44
|
+
const ids = [];
|
|
45
|
+
const seen = new Set();
|
|
46
|
+
for (const event of events) {
|
|
47
|
+
if (event.type !== 'agentfootprint.stream.llm_start')
|
|
48
|
+
continue;
|
|
49
|
+
const id = event.meta.runtimeStageId;
|
|
50
|
+
if (seen.has(id))
|
|
51
|
+
continue;
|
|
52
|
+
seen.add(id);
|
|
53
|
+
ids.push(id);
|
|
54
|
+
}
|
|
55
|
+
return ids;
|
|
56
|
+
}
|
|
57
|
+
/** Injection flavors that are engineered context (ablatable by id). */
|
|
58
|
+
const ENGINEERED_SOURCES = new Set([
|
|
59
|
+
'rag',
|
|
60
|
+
'skill',
|
|
61
|
+
'memory',
|
|
62
|
+
'instructions',
|
|
63
|
+
'steering',
|
|
64
|
+
'fact',
|
|
65
|
+
'custom',
|
|
66
|
+
]);
|
|
67
|
+
const INJECTION_SLOT_KEYS = ['systemPromptInjections', 'messagesInjections', 'toolsInjections'];
|
|
68
|
+
/**
|
|
69
|
+
* The default classifier — reads the node's COMMITTED values (already
|
|
70
|
+
* redaction-scrubbed) and recognizes the agent chart's shapes:
|
|
71
|
+
*
|
|
72
|
+
* - `systemPromptInjections` / `messagesInjections` / `toolsInjections`
|
|
73
|
+
* records with an engineered source → one suspect per `Injection.id`
|
|
74
|
+
* (kind `'memory'` for source `'memory'`, else `'injection'`).
|
|
75
|
+
* - `lastToolResult` → a `'tool'` suspect for the tool that ran.
|
|
76
|
+
* - footprintjs A2 honesty marker `args` → an `'arg'` suspect (the
|
|
77
|
+
* consumer's runner must override the input — nothing to filter).
|
|
78
|
+
* - anything else → the honest `'stage'` fallback (no ablation spec).
|
|
79
|
+
*/
|
|
80
|
+
export function defaultSuspectClassifier(ctx) {
|
|
81
|
+
const seeds = [];
|
|
82
|
+
const seenInjection = new Set();
|
|
83
|
+
for (const slotKey of INJECTION_SLOT_KEYS) {
|
|
84
|
+
if (!ctx.keysWritten.includes(slotKey))
|
|
85
|
+
continue;
|
|
86
|
+
const records = ctx.valueOf(slotKey);
|
|
87
|
+
if (!Array.isArray(records))
|
|
88
|
+
continue;
|
|
89
|
+
for (const record of records) {
|
|
90
|
+
const source = typeof record?.source === 'string' ? record.source : undefined;
|
|
91
|
+
const sourceId = typeof record?.sourceId === 'string' ? record.sourceId : undefined;
|
|
92
|
+
if (source === undefined || sourceId === undefined)
|
|
93
|
+
continue;
|
|
94
|
+
if (!ENGINEERED_SOURCES.has(source))
|
|
95
|
+
continue; // baseline flow (user/base/registry/…)
|
|
96
|
+
const kind = source === 'memory' ? 'memory' : 'injection';
|
|
97
|
+
const dedupeKey = `${kind}:${sourceId}`;
|
|
98
|
+
if (seenInjection.has(dedupeKey))
|
|
99
|
+
continue;
|
|
100
|
+
seenInjection.add(dedupeKey);
|
|
101
|
+
const text = typeof record.rawContent === 'string'
|
|
102
|
+
? record.rawContent
|
|
103
|
+
: typeof record.contentSummary === 'string'
|
|
104
|
+
? record.contentSummary
|
|
105
|
+
: undefined;
|
|
106
|
+
seeds.push({
|
|
107
|
+
kind,
|
|
108
|
+
detail: {
|
|
109
|
+
injectionId: sourceId,
|
|
110
|
+
flavor: source,
|
|
111
|
+
...(text !== undefined ? { text } : {}),
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (ctx.keysWritten.includes('lastToolResult')) {
|
|
117
|
+
const value = ctx.valueOf('lastToolResult');
|
|
118
|
+
if (value && typeof value.toolName === 'string') {
|
|
119
|
+
seeds.push({
|
|
120
|
+
kind: 'tool',
|
|
121
|
+
detail: {
|
|
122
|
+
toolName: value.toolName,
|
|
123
|
+
...(typeof value.result === 'string' ? { text: value.result } : {}),
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (ctx.node.incompleteSources?.includes('args')) {
|
|
129
|
+
seeds.push({ kind: 'arg' });
|
|
130
|
+
}
|
|
131
|
+
return seeds.length > 0 ? seeds : [{ kind: 'stage' }];
|
|
132
|
+
}
|
|
133
|
+
function buildArtifactIndex(artifacts) {
|
|
134
|
+
const commitLog = (artifacts.snapshot.commitLog ?? []);
|
|
135
|
+
const lastIdxOf = new Map();
|
|
136
|
+
for (let i = 0; i < commitLog.length; i++)
|
|
137
|
+
lastIdxOf.set(commitLog[i].runtimeStageId, i);
|
|
138
|
+
const readsOf = new Map();
|
|
139
|
+
let hasReadTracking = false;
|
|
140
|
+
const visit = (node) => {
|
|
141
|
+
if (!node)
|
|
142
|
+
return;
|
|
143
|
+
const id = node.runtimeStageId;
|
|
144
|
+
if (id && !readsOf.has(id)) {
|
|
145
|
+
const keys = node.stageReads ? Object.keys(node.stageReads) : [];
|
|
146
|
+
readsOf.set(id, keys);
|
|
147
|
+
if (keys.length > 0)
|
|
148
|
+
hasReadTracking = true;
|
|
149
|
+
}
|
|
150
|
+
for (const child of node.children ?? [])
|
|
151
|
+
visit(child);
|
|
152
|
+
visit(node.next);
|
|
153
|
+
};
|
|
154
|
+
visit(artifacts.snapshot.executionTree);
|
|
155
|
+
return { commitLog, lastIdxOf, readsOf, hasReadTracking };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Best (max-product) path weight from the root to every slice node.
|
|
159
|
+
* The slice DAG is topologically ordered by commit index (a writer always
|
|
160
|
+
* commits before its reader; a decider before its branch), so one pass in
|
|
161
|
+
* DESCENDING commit order finalizes children before their parents.
|
|
162
|
+
*/
|
|
163
|
+
function computePathScores(root, nodes, lastIdxOf) {
|
|
164
|
+
const info = new Map();
|
|
165
|
+
info.set(root.runtimeStageId, { score: 1 });
|
|
166
|
+
const ordered = [...nodes].sort((a, b) => (lastIdxOf.get(b.runtimeStageId) ?? -1) - (lastIdxOf.get(a.runtimeStageId) ?? -1));
|
|
167
|
+
for (const node of ordered) {
|
|
168
|
+
const current = info.get(node.runtimeStageId);
|
|
169
|
+
if (!current)
|
|
170
|
+
continue; // unreachable from root (defensive)
|
|
171
|
+
for (const edge of node.parentEdges) {
|
|
172
|
+
const candidate = current.score * edge.weight;
|
|
173
|
+
const existing = info.get(edge.parent.runtimeStageId);
|
|
174
|
+
if (!existing || candidate > existing.score) {
|
|
175
|
+
info.set(edge.parent.runtimeStageId, {
|
|
176
|
+
score: candidate,
|
|
177
|
+
via: { child: node, kind: edge.kind, key: edge.key, weight: edge.weight },
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return info;
|
|
183
|
+
}
|
|
184
|
+
function buildEdgePath(node, info) {
|
|
185
|
+
const steps = [];
|
|
186
|
+
let cur = node;
|
|
187
|
+
for (;;) {
|
|
188
|
+
const via = info.get(cur.runtimeStageId)?.via;
|
|
189
|
+
if (!via)
|
|
190
|
+
break;
|
|
191
|
+
steps.push({
|
|
192
|
+
from: via.child.runtimeStageId,
|
|
193
|
+
fromName: via.child.stageName,
|
|
194
|
+
to: cur.runtimeStageId,
|
|
195
|
+
toName: cur.stageName,
|
|
196
|
+
kind: via.kind,
|
|
197
|
+
...(via.key !== undefined ? { key: via.key } : {}),
|
|
198
|
+
weight: via.weight,
|
|
199
|
+
});
|
|
200
|
+
cur = via.child;
|
|
201
|
+
}
|
|
202
|
+
return steps.reverse(); // trigger → … → suspect
|
|
203
|
+
}
|
|
204
|
+
// ─── The localizer ───────────────────────────────────────────────────
|
|
205
|
+
/**
|
|
206
|
+
* Localize a contextual bug: trigger → causal slice → influence-weighted
|
|
207
|
+
* ranking → (optional) counterfactual ablation. See module docs for the
|
|
208
|
+
* pipeline and the §B2 claim tiers.
|
|
209
|
+
*
|
|
210
|
+
* @throws when no trigger can be resolved (no `atStep`, no custom
|
|
211
|
+
* strategy hit, no `artifacts.quality`), or when the trigger step
|
|
212
|
+
* is not in the commit log.
|
|
213
|
+
*/
|
|
214
|
+
export async function localizeContextBug(options) {
|
|
215
|
+
const { artifacts, embedder } = options;
|
|
216
|
+
const maxDepth = options.maxDepth ?? CONTEXT_BISECT_DEFAULTS.maxDepth;
|
|
217
|
+
const maxNodes = options.maxNodes ?? CONTEXT_BISECT_DEFAULTS.maxNodes;
|
|
218
|
+
const maxSuspects = options.maxSuspects ?? CONTEXT_BISECT_DEFAULTS.maxSuspects;
|
|
219
|
+
const index = buildArtifactIndex(artifacts);
|
|
220
|
+
// ── 1. Trigger ────────────────────────────────────────────────────
|
|
221
|
+
let step;
|
|
222
|
+
let triggerSource;
|
|
223
|
+
let triggerScore;
|
|
224
|
+
if (options.atStep !== undefined) {
|
|
225
|
+
step = options.atStep;
|
|
226
|
+
triggerSource = 'explicit';
|
|
227
|
+
}
|
|
228
|
+
else if (options.trigger !== undefined) {
|
|
229
|
+
step = options.trigger(artifacts);
|
|
230
|
+
triggerSource = 'custom';
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
const lowest = artifacts.quality?.getLowest();
|
|
234
|
+
step = lowest?.runtimeStageId;
|
|
235
|
+
triggerScore = lowest?.entry.score;
|
|
236
|
+
triggerSource = 'quality';
|
|
237
|
+
}
|
|
238
|
+
if (step === undefined) {
|
|
239
|
+
throw new Error('localizeContextBug: no trigger step — pass atStep, supply a trigger strategy, ' +
|
|
240
|
+
'or provide artifacts.quality (a QualityRecorder from the run).');
|
|
241
|
+
}
|
|
242
|
+
if (!index.lastIdxOf.has(step)) {
|
|
243
|
+
throw new Error(`localizeContextBug: trigger step '${step}' is not in the commit log — ` +
|
|
244
|
+
'pass a runtimeStageId of a step that committed (see snapshot.commitLog).');
|
|
245
|
+
}
|
|
246
|
+
// ── 2 + 3. Slice, then weigh (two-pass over the same evidence) ─────
|
|
247
|
+
const keysReadOf = (id) => index.readsOf.get(id) ?? [];
|
|
248
|
+
const sliceOptions = {
|
|
249
|
+
maxDepth,
|
|
250
|
+
maxNodes,
|
|
251
|
+
...(artifacts.controlDeps ? { controlDeps: artifacts.controlDeps } : {}),
|
|
252
|
+
};
|
|
253
|
+
const unweighted = causalChain(index.commitLog, step, keysReadOf, sliceOptions);
|
|
254
|
+
if (!unweighted) {
|
|
255
|
+
throw new Error(`localizeContextBug: causalChain found no node for '${step}'.`);
|
|
256
|
+
}
|
|
257
|
+
const llmCallIds = artifacts.llmCallIds ?? (artifacts.events ? llmCallIdsFromEvents(artifacts.events) : []);
|
|
258
|
+
const weigher = llmEdgeWeigher({
|
|
259
|
+
embedder,
|
|
260
|
+
llmCallIds,
|
|
261
|
+
commitLog: index.commitLog,
|
|
262
|
+
});
|
|
263
|
+
await weigher.prime(unweighted);
|
|
264
|
+
const root = causalChain(index.commitLog, step, keysReadOf, { ...sliceOptions, weigh: weigher.weigh }) ??
|
|
265
|
+
unweighted;
|
|
266
|
+
// ── 4. Rank ─────────────────────────────────────────────────────────
|
|
267
|
+
const nodes = collectNodes(root);
|
|
268
|
+
const pathInfo = computePathScores(root, nodes, index.lastIdxOf);
|
|
269
|
+
const classify = options.classify;
|
|
270
|
+
const drafts = [];
|
|
271
|
+
for (const node of nodes) {
|
|
272
|
+
if (node.runtimeStageId === root.runtimeStageId)
|
|
273
|
+
continue; // the trigger itself
|
|
274
|
+
const info = pathInfo.get(node.runtimeStageId);
|
|
275
|
+
if (!info)
|
|
276
|
+
continue;
|
|
277
|
+
const ctx = {
|
|
278
|
+
node,
|
|
279
|
+
keysWritten: node.keysWritten,
|
|
280
|
+
valueOf: (key) => {
|
|
281
|
+
const idx = index.lastIdxOf.get(node.runtimeStageId);
|
|
282
|
+
return idx === undefined ? undefined : commitValueAt(index.commitLog, idx, key);
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
const seeds = classify?.(ctx) ?? defaultSuspectClassifier(ctx);
|
|
286
|
+
const edgePath = buildEdgePath(node, pathInfo);
|
|
287
|
+
for (const seed of seeds) {
|
|
288
|
+
drafts.push({ node, seed, structuralScore: info.score, edgePath });
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Semantic refinement: ONE influence-core pass over every suspect that
|
|
292
|
+
// has its own content text, against the trigger step's output. Ancestor
|
|
293
|
+
// texts = LLM-call outputs on the suspect's path (the FDL casting).
|
|
294
|
+
const triggerOutput = stepOutputText(index.commitLog, index.lastIdxOf, root.runtimeStageId, CONTEXT_BISECT_DEFAULTS.maxTextChars);
|
|
295
|
+
if (triggerOutput !== undefined) {
|
|
296
|
+
const llmIdSet = new Set(llmCallIds);
|
|
297
|
+
const evidence = [];
|
|
298
|
+
const evidenceDraft = [];
|
|
299
|
+
drafts.forEach((draft, i) => {
|
|
300
|
+
const text = draft.seed.detail?.text;
|
|
301
|
+
if (text === undefined || text.length === 0)
|
|
302
|
+
return;
|
|
303
|
+
const ancestorTexts = [];
|
|
304
|
+
for (const hop of draft.edgePath) {
|
|
305
|
+
// Intermediate LLM steps between trigger and suspect (exclusive).
|
|
306
|
+
if (hop.from !== root.runtimeStageId && llmIdSet.has(hop.from)) {
|
|
307
|
+
const ancestorText = stepOutputText(index.commitLog, index.lastIdxOf, hop.from, CONTEXT_BISECT_DEFAULTS.maxTextChars);
|
|
308
|
+
if (ancestorText !== undefined)
|
|
309
|
+
ancestorTexts.push(ancestorText);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
evidence.push({ id: String(i), text, ancestorTexts });
|
|
313
|
+
evidenceDraft.push(draft);
|
|
314
|
+
});
|
|
315
|
+
if (evidence.length > 0) {
|
|
316
|
+
const scores = await scoreInfluence({ evidence, finalAnswerText: triggerOutput, embedder });
|
|
317
|
+
const byId = new Map(scores.map((s) => [s.id, s.score]));
|
|
318
|
+
evidence.forEach((item, i) => {
|
|
319
|
+
const composite = byId.get(item.id);
|
|
320
|
+
if (composite !== undefined) {
|
|
321
|
+
evidenceDraft[i].semanticScore = Math.max(0, Math.min(1, composite));
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
const ranked = drafts
|
|
327
|
+
.map((draft) => {
|
|
328
|
+
const score = draft.semanticScore !== undefined
|
|
329
|
+
? draft.structuralScore * draft.semanticScore
|
|
330
|
+
: draft.structuralScore;
|
|
331
|
+
const suspect = {
|
|
332
|
+
source: draft.node.runtimeStageId,
|
|
333
|
+
stageName: draft.node.stageName,
|
|
334
|
+
kind: draft.seed.kind,
|
|
335
|
+
...(draft.seed.detail !== undefined ? { detail: draft.seed.detail } : {}),
|
|
336
|
+
score,
|
|
337
|
+
structuralScore: draft.structuralScore,
|
|
338
|
+
...(draft.semanticScore !== undefined ? { semanticScore: draft.semanticScore } : {}),
|
|
339
|
+
hasContentEvidence: draft.semanticScore !== undefined,
|
|
340
|
+
edgePath: draft.edgePath,
|
|
341
|
+
};
|
|
342
|
+
const ablation = ablationForSuspect(suspect);
|
|
343
|
+
return ablation !== undefined ? { ...suspect, ablation } : suspect;
|
|
344
|
+
})
|
|
345
|
+
.sort((a, b) => b.score - a.score) // stable: ties keep slice order
|
|
346
|
+
.slice(0, maxSuspects);
|
|
347
|
+
// ── Slice stats + honesty flags ─────────────────────────────────────
|
|
348
|
+
const sliceStats = buildSliceStats(root, nodes, maxDepth, maxNodes);
|
|
349
|
+
const honestyFlags = buildHonestyFlags(artifacts, index, sliceStats, llmCallIds.length);
|
|
350
|
+
// ── 5. Ablate (the causal tier) ─────────────────────────────────────
|
|
351
|
+
if (options.rerun === undefined) {
|
|
352
|
+
return {
|
|
353
|
+
step,
|
|
354
|
+
stepName: root.stageName,
|
|
355
|
+
triggerSource,
|
|
356
|
+
...(triggerScore !== undefined ? { triggerScore } : {}),
|
|
357
|
+
mode: 'correlational',
|
|
358
|
+
suspects: ranked,
|
|
359
|
+
sliceStats,
|
|
360
|
+
honestyFlags,
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
const probeConfig = { rerun: options.rerun, embedder };
|
|
364
|
+
const maxAblations = options.rerun.maxSuspects ?? 5;
|
|
365
|
+
// Baseline first: an unstable scenario invalidates every verdict.
|
|
366
|
+
const baseline = await runAblationProbe(probeConfig, []);
|
|
367
|
+
const baselineStable = baseline.flips === 0;
|
|
368
|
+
const flags = baselineStable
|
|
369
|
+
? honestyFlags
|
|
370
|
+
: [
|
|
371
|
+
...honestyFlags,
|
|
372
|
+
{
|
|
373
|
+
flag: 'baseline-unstable',
|
|
374
|
+
note: `the un-ablated baseline changed outcome in ${baseline.flips}/${baseline.samples} ` +
|
|
375
|
+
'seeded reruns — all ablation verdicts are inconclusive.',
|
|
376
|
+
},
|
|
377
|
+
];
|
|
378
|
+
const withVerdicts = [];
|
|
379
|
+
let ablated = 0;
|
|
380
|
+
for (const suspect of ranked) {
|
|
381
|
+
if (suspect.ablation === undefined ||
|
|
382
|
+
suspect.ablation.kind === 'arg' ||
|
|
383
|
+
ablated >= maxAblations) {
|
|
384
|
+
withVerdicts.push(suspect);
|
|
385
|
+
continue;
|
|
386
|
+
}
|
|
387
|
+
ablated++;
|
|
388
|
+
const stats = await runAblationProbe(probeConfig, [suspect.ablation]);
|
|
389
|
+
const verdict = verdictFor(suspectLabel(suspect), stats, baselineStable);
|
|
390
|
+
withVerdicts.push({ ...suspect, runs: stats, verdict });
|
|
391
|
+
}
|
|
392
|
+
return {
|
|
393
|
+
step,
|
|
394
|
+
stepName: root.stageName,
|
|
395
|
+
triggerSource,
|
|
396
|
+
...(triggerScore !== undefined ? { triggerScore } : {}),
|
|
397
|
+
mode: 'causal',
|
|
398
|
+
suspects: withVerdicts,
|
|
399
|
+
sliceStats,
|
|
400
|
+
honestyFlags: flags,
|
|
401
|
+
baseline,
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
// ─── Internals ───────────────────────────────────────────────────────
|
|
405
|
+
function collectNodes(root) {
|
|
406
|
+
const out = [];
|
|
407
|
+
const seen = new Set();
|
|
408
|
+
const queue = [root];
|
|
409
|
+
while (queue.length > 0) {
|
|
410
|
+
const node = queue.shift();
|
|
411
|
+
if (seen.has(node.runtimeStageId))
|
|
412
|
+
continue;
|
|
413
|
+
seen.add(node.runtimeStageId);
|
|
414
|
+
out.push(node);
|
|
415
|
+
for (const parent of node.parents)
|
|
416
|
+
queue.push(parent);
|
|
417
|
+
}
|
|
418
|
+
return out;
|
|
419
|
+
}
|
|
420
|
+
function buildSliceStats(root, nodes, maxDepth, maxNodes) {
|
|
421
|
+
let dataEdges = 0;
|
|
422
|
+
let controlEdges = 0;
|
|
423
|
+
let weightedEdges = 0;
|
|
424
|
+
let incompleteNodes = 0;
|
|
425
|
+
for (const node of nodes) {
|
|
426
|
+
if (node.incompleteSources && node.incompleteSources.length > 0)
|
|
427
|
+
incompleteNodes++;
|
|
428
|
+
for (const edge of node.parentEdges) {
|
|
429
|
+
if (edge.kind === 'data')
|
|
430
|
+
dataEdges++;
|
|
431
|
+
else
|
|
432
|
+
controlEdges++;
|
|
433
|
+
if (edge.weight !== 1)
|
|
434
|
+
weightedEdges++;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return {
|
|
438
|
+
nodes: nodes.length,
|
|
439
|
+
dataEdges,
|
|
440
|
+
controlEdges,
|
|
441
|
+
weightedEdges,
|
|
442
|
+
incompleteNodes,
|
|
443
|
+
maxDepth,
|
|
444
|
+
maxNodes,
|
|
445
|
+
...(root.truncated !== undefined ? { truncated: root.truncated } : {}),
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
function buildHonestyFlags(artifacts, index, sliceStats, llmCallIdCount) {
|
|
449
|
+
const flags = [];
|
|
450
|
+
if (sliceStats.truncated !== undefined) {
|
|
451
|
+
const causes = [
|
|
452
|
+
sliceStats.truncated.byDepth && `maxDepth (${sliceStats.maxDepth})`,
|
|
453
|
+
sliceStats.truncated.byNodes && `maxNodes (${sliceStats.maxNodes})`,
|
|
454
|
+
]
|
|
455
|
+
.filter(Boolean)
|
|
456
|
+
.join(' + ');
|
|
457
|
+
flags.push({
|
|
458
|
+
flag: 'slice-truncated',
|
|
459
|
+
note: `the slice was cut by ${causes} — older causes exist beyond this horizon; the ranking cannot see them.`,
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
if (sliceStats.incompleteNodes > 0) {
|
|
463
|
+
flags.push({
|
|
464
|
+
flag: 'untracked-sources',
|
|
465
|
+
note: `${sliceStats.incompleteNodes} slice node(s) also consumed untracked inputs ` +
|
|
466
|
+
'(args/env/silent reads) — those inputs produce no edges; the slice through them is incomplete.',
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
if (!artifacts.controlDeps) {
|
|
470
|
+
flags.push({
|
|
471
|
+
flag: 'no-control-deps',
|
|
472
|
+
note: 'no control-dependence lookup in the artifacts (attach controlDepRecorder() to the run) — ' +
|
|
473
|
+
'decisions that routed execution are missing from the slice.',
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
if (!index.hasReadTracking) {
|
|
477
|
+
flags.push({
|
|
478
|
+
flag: 'no-read-tracking',
|
|
479
|
+
note: 'the snapshot carries no per-step read tracking — read→write edges cannot be followed; ' +
|
|
480
|
+
'the slice may contain only the trigger step.',
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
if (llmCallIdCount === 0) {
|
|
484
|
+
flags.push({
|
|
485
|
+
flag: 'no-llm-call-ids',
|
|
486
|
+
note: 'no LLM-call step ids (pass llmCallIds or captured events) — no edge received an ' +
|
|
487
|
+
'influence weight; the ranking is structure-only.',
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
return flags;
|
|
491
|
+
}
|
|
492
|
+
export function suspectLabel(suspect) {
|
|
493
|
+
const id = suspect.detail?.toolName ?? suspect.detail?.injectionId ?? suspect.source;
|
|
494
|
+
return `${suspect.kind} '${id}'`;
|
|
495
|
+
}
|
|
496
|
+
// ─── Formatting ──────────────────────────────────────────────────────
|
|
497
|
+
/**
|
|
498
|
+
* Human-readable report. The claim tiers are spelled out in the output
|
|
499
|
+
* itself (§B2): scores are proxies; verdict lines are the only causal
|
|
500
|
+
* claims; every ⚠ honesty flag prints.
|
|
501
|
+
*/
|
|
502
|
+
export function formatContextBugReport(report) {
|
|
503
|
+
const lines = [];
|
|
504
|
+
lines.push(`CONTEXT BUG LOCALIZATION — trigger ${report.step} "${report.stepName}" ` +
|
|
505
|
+
`(${report.triggerSource}${report.triggerScore !== undefined ? `, score ${report.triggerScore.toFixed(2)}` : ''})`);
|
|
506
|
+
lines.push(report.mode === 'causal'
|
|
507
|
+
? 'mode: CAUSAL — ranked proxies + counterfactual ablation verdicts (verdicts are the only causal claims)'
|
|
508
|
+
: 'mode: CORRELATIONAL — ranking only; every score is an embedding-geometry proxy, no causal claim is made');
|
|
509
|
+
const s = report.sliceStats;
|
|
510
|
+
lines.push(`slice: ${s.nodes} nodes · ${s.dataEdges} data edges · ${s.controlEdges} control edges · ` +
|
|
511
|
+
`${s.weightedEdges} influence-weighted`);
|
|
512
|
+
lines.push('', `SUSPECTS (${report.suspects.length}, ranked by correlational proxy score):`);
|
|
513
|
+
report.suspects.forEach((suspect, i) => {
|
|
514
|
+
const scoreParts = suspect.semanticScore !== undefined
|
|
515
|
+
? `${suspect.score.toFixed(3)} (path ${suspect.structuralScore.toFixed(3)} × content ${suspect.semanticScore.toFixed(3)})`
|
|
516
|
+
: `${suspect.score.toFixed(3)} (path only — no content signal; an upper bound)`;
|
|
517
|
+
lines.push(`${String(i + 1).padStart(2)}. [${suspectLabel(suspect)}] at ${suspect.source} ` +
|
|
518
|
+
`"${suspect.stageName}" — score ${scoreParts}`);
|
|
519
|
+
if (suspect.edgePath.length > 0) {
|
|
520
|
+
const hops = suspect.edgePath
|
|
521
|
+
.map((hop) => {
|
|
522
|
+
const link = hop.kind === 'control'
|
|
523
|
+
? `[control${hop.key ? `: ${hop.key}` : ''}]`
|
|
524
|
+
: hop.key ?? 'data';
|
|
525
|
+
const weight = hop.weight !== 1 ? ` ${hop.weight.toFixed(3)}` : '';
|
|
526
|
+
return `←(${link}${weight})— ${hop.to}`;
|
|
527
|
+
})
|
|
528
|
+
.join(' ');
|
|
529
|
+
lines.push(` path: ${suspect.edgePath[0].from} ${hops}`);
|
|
530
|
+
}
|
|
531
|
+
if (suspect.verdict !== undefined && suspect.runs !== undefined) {
|
|
532
|
+
lines.push(` verdict: ${suspect.verdict.claim}`);
|
|
533
|
+
lines.push(` runs: ${suspect.runs.flips}/${suspect.runs.samples} flipped · similarity to original ` +
|
|
534
|
+
`${suspect.runs.similarity.mean.toFixed(3)} ± ${suspect.runs.similarity.stdev.toFixed(3)} ` +
|
|
535
|
+
`[${suspect.runs.similarity.min.toFixed(3)}, ${suspect.runs.similarity.max.toFixed(3)}]`);
|
|
536
|
+
}
|
|
537
|
+
else if (report.mode === 'correlational') {
|
|
538
|
+
lines.push(' verdict: (none — correlational ranking only; supply an AblationRunner to test causally)');
|
|
539
|
+
}
|
|
540
|
+
});
|
|
541
|
+
if (report.baseline !== undefined) {
|
|
542
|
+
lines.push('', `baseline (no ablation): ${report.baseline.flips}/${report.baseline.samples} flipped · ` +
|
|
543
|
+
`similarity ${report.baseline.similarity.mean.toFixed(3)} ± ${report.baseline.similarity.stdev.toFixed(3)}`);
|
|
544
|
+
}
|
|
545
|
+
if (report.honestyFlags.length > 0) {
|
|
546
|
+
lines.push('', 'HONESTY:');
|
|
547
|
+
for (const flag of report.honestyFlags)
|
|
548
|
+
lines.push(`⚠ [${flag.flag}] ${flag.note}`);
|
|
549
|
+
}
|
|
550
|
+
lines.push('', 'claims: scores/weights are deterministic embedding-geometry PROXIES (semantic alignment, ' +
|
|
551
|
+
'not model internals); slice completeness is bounded by tracking (see HONESTY); only ' +
|
|
552
|
+
'ablation verdicts make causal claims.');
|
|
553
|
+
return lines.join('\n');
|
|
554
|
+
}
|
|
555
|
+
//# sourceMappingURL=localize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localize.js","sourceRoot":"","sources":["../../../../src/lib/context-bisect/localize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* context-bisect types — RFC-003 Part B: the contextual-bug localizer
|
|
3
|
+
* ("git bisect for context").
|
|
4
|
+
*
|
|
5
|
+
* Pattern: assembly contract. Part B is pure ASSEMBLY over shipped pieces:
|
|
6
|
+
* footprintjs 9.8.0's complete causal DAG (control edges, honesty
|
|
7
|
+
* markers, `EdgeWeigher` hook) × influence-core scoring (D6) ×
|
|
8
|
+
* consumer-run counterfactual ablation. No new engine features,
|
|
9
|
+
* no new typed events.
|
|
10
|
+
* Role: `src/lib/context-bisect/` leaf. Exported via
|
|
11
|
+
* `agentfootprint/observe`.
|
|
12
|
+
*
|
|
13
|
+
* ## The two-tier honest-claims discipline (RFC-003 §B2)
|
|
14
|
+
*
|
|
15
|
+
* Every number in these types belongs to exactly ONE of two tiers, and the
|
|
16
|
+
* docs say which:
|
|
17
|
+
*
|
|
18
|
+
* - **CORRELATIONAL** — edge weights, suspect scores, rankings. These are
|
|
19
|
+
* deterministic embedding-geometry PROXIES (influence-core composite:
|
|
20
|
+
* semantic alignment between what a source wrote and what the LLM step
|
|
21
|
+
* produced). They mean "high semantic alignment", never "the model
|
|
22
|
+
* answered BECAUSE of this". A report without reruns stops here and is
|
|
23
|
+
* marked `mode: 'correlational'`.
|
|
24
|
+
*
|
|
25
|
+
* - **CAUSAL** — ablation verdicts ONLY. A suspect earns `verdict:
|
|
26
|
+
* 'confirmed'` exclusively by counterfactual evidence: the consumer's
|
|
27
|
+
* `AblationRunner` re-ran the scenario WITHOUT the suspect N seeded
|
|
28
|
+
* times and the outcome flipped (with baseline stability checked and
|
|
29
|
+
* variance reported — never a single-run verdict).
|
|
30
|
+
*
|
|
31
|
+
* Slice completeness is bounded by tracking — and SAYS so: untracked reads
|
|
32
|
+
* (`$getArgs()` / env / silent reads), missing control-dependence lookups,
|
|
33
|
+
* missing read tracking, and depth/node truncation all surface as
|
|
34
|
+
* `honestyFlags` on the report, mirrored from footprintjs's own A2/A4
|
|
35
|
+
* markers.
|
|
36
|
+
*/
|
|
37
|
+
// ─── Defaults ────────────────────────────────────────────────────────
|
|
38
|
+
export const CONTEXT_BISECT_DEFAULTS = {
|
|
39
|
+
/** Slice depth budget (forwarded to `causalChain`). */
|
|
40
|
+
maxDepth: 12,
|
|
41
|
+
/** Slice node budget (forwarded to `causalChain`). */
|
|
42
|
+
maxNodes: 80,
|
|
43
|
+
/** Ranked suspects kept on the report. */
|
|
44
|
+
maxSuspects: 12,
|
|
45
|
+
/** Chars of written content embedded per step text (D7). */
|
|
46
|
+
maxTextChars: 2000,
|
|
47
|
+
/** Seeded reruns per ablation probe (D9 — never single-run verdicts). */
|
|
48
|
+
samples: 3,
|
|
49
|
+
/** Default similarity floor for the default outcome comparator. */
|
|
50
|
+
flipThreshold: 0.8,
|
|
51
|
+
/** Ablation probes budget for `bisectCulprits`. */
|
|
52
|
+
maxProbes: 24,
|
|
53
|
+
/** Independent-culprit search rounds for `bisectCulprits`. */
|
|
54
|
+
maxCulprits: 4,
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/context-bisect/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAyTH,wEAAwE;AAExE,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,uDAAuD;IACvD,QAAQ,EAAE,EAAE;IACZ,sDAAsD;IACtD,QAAQ,EAAE,EAAE;IACZ,0CAA0C;IAC1C,WAAW,EAAE,EAAE;IACf,4DAA4D;IAC5D,YAAY,EAAE,IAAI;IAClB,yEAAyE;IACzE,OAAO,EAAE,CAAC;IACV,mEAAmE;IACnE,aAAa,EAAE,GAAG;IAClB,mDAAmD;IACnD,SAAS,EAAE,EAAE;IACb,8DAA8D;IAC9D,WAAW,EAAE,CAAC;CACN,CAAC"}
|