@warmdrift/kgauto-compiler 2.0.0-alpha.60 → 2.0.0-alpha.62

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.
Files changed (36) hide show
  1. package/README.md +81 -46
  2. package/dist/brain-proxy.js +5 -1
  3. package/dist/brain-proxy.mjs +1 -1
  4. package/dist/{chunk-5TI6PNSK.mjs → chunk-3KQAID63.mjs} +5 -0
  5. package/dist/{chunk-IUWFML6Z.mjs → chunk-65ZMX5OT.mjs} +5 -1
  6. package/dist/{chunk-RQ3BUUB6.mjs → chunk-ABFXMO73.mjs} +1 -1
  7. package/dist/{chunk-IIMPJZNH.mjs → chunk-YZRPNSSQ.mjs} +10 -0
  8. package/dist/dialect.d.mts +14 -2
  9. package/dist/dialect.d.ts +14 -2
  10. package/dist/dialect.js +5 -0
  11. package/dist/dialect.mjs +1 -1
  12. package/dist/glassbox/index.d.mts +3 -3
  13. package/dist/glassbox/index.d.ts +3 -3
  14. package/dist/glassbox-routes/format.d.mts +2 -2
  15. package/dist/glassbox-routes/format.d.ts +2 -2
  16. package/dist/glassbox-routes/index.d.mts +4 -4
  17. package/dist/glassbox-routes/index.d.ts +4 -4
  18. package/dist/glassbox-routes/index.js +10 -0
  19. package/dist/glassbox-routes/index.mjs +1 -1
  20. package/dist/glassbox-routes/react/index.d.mts +2 -2
  21. package/dist/glassbox-routes/react/index.d.ts +2 -2
  22. package/dist/index.d.mts +255 -7
  23. package/dist/index.d.ts +255 -7
  24. package/dist/index.js +841 -7
  25. package/dist/index.mjs +808 -9
  26. package/dist/{ir-BC4uDL98.d.mts → ir-B2dRyJXO.d.mts} +84 -11
  27. package/dist/{ir-B2h0GAEL.d.ts → ir-ClU56aBc.d.ts} +84 -11
  28. package/dist/key-health.js +1 -1
  29. package/dist/key-health.mjs +1 -1
  30. package/dist/profiles.d.mts +1 -1
  31. package/dist/profiles.d.ts +1 -1
  32. package/dist/{types-CKuu7Clz.d.ts → types-ByN3r0_7.d.ts} +1 -1
  33. package/dist/{types-CsB2YASc.d.ts → types-C-Wp7HpI.d.ts} +1 -1
  34. package/dist/{types-B-pzBJKf.d.mts → types-CSDweZsl.d.mts} +1 -1
  35. package/dist/{types-CRy90cjp.d.mts → types-axAX1Bg0.d.mts} +1 -1
  36. package/package.json +3 -3
package/README.md CHANGED
@@ -1,28 +1,49 @@
1
- # @warmdrift/kgauto-compiler — v2.0.0-alpha.6
1
+ # @warmdrift/kgauto-compiler — v2 (alpha)
2
2
 
3
- > Prompt compiler + central learning brain for multi-model AI apps.
3
+ > Prompt compiler with executable provider knowledge for multi-model AI apps.
4
4
  > **Swap models without rewriting prompts.**
5
5
 
6
- Greenfield rewrite of `@warmdrift/kgauto` v1. v1 was a behavioral patcher
7
- with telemetry; v2 is a real prompt compiler with a self-improving learning
8
- layer designed for cross-app pollination.
9
-
10
- The "compiler" name is deliberate every optimization is a pass on a
11
- structured Intermediate Representation (IR), not string surgery on a
12
- rendered prompt. This unlocks slicing, dedupe, intent-aware tool relevance,
13
- target-correct lowering with cache markers, and (in v2.1) outcome-driven
14
- mutations.
6
+ What this package delivers today, and nothing it doesn't:
7
+
8
+ - **A prompt compiler** — every optimization is a pass on a structured
9
+ Intermediate Representation (IR), not string surgery on a rendered prompt:
10
+ slicing, dedupe, intent-aware tool relevance, history compression,
11
+ target-correct lowering with cache markers.
12
+ - **Executable provider knowledge** model cliffs, lowering rules, and
13
+ recovery handlers as code that fires at compile time, curated against
14
+ provider docs with grounding labels. Seven-plus frontier model transitions
15
+ absorbed centrally with zero consumer prompt rewrites.
16
+ - **Normalized multi-provider transport** — `call()` walks a fallback chain
17
+ across Anthropic / Google / OpenAI / DeepSeek with a provider-error
18
+ taxonomy (429 / 404 / 401-auth-walk / parse-fail / MAX_TOKENS), recompiling
19
+ per fallback target. (Scope: the `call()` path. Streaming consumers drive
20
+ their own wire and get compile-time guards, not transport resilience.)
21
+ - **A flight recorder** — opt-in telemetry (`record()` / `probeShadow()` /
22
+ key-health) that has repeatedly caught real production defects: empty-response
23
+ cliffs, dead API keys, cache-miss regressions, silent model deprecations.
24
+ - **A curated model registry** — capability + pricing data with verification
25
+ stamps, a release watcher, and price-truth test gates.
26
+
27
+ **What it does not do (yet):** routing does not change itself from measured
28
+ outcomes. There is no automatic learning loop in the shipped package — model
29
+ promotion is evidence-*informed* but operator-*driven*. What DOES ship as of
30
+ alpha.62 is the eval spine (Stage 1 of that architecture): golden-set capture,
31
+ a pairwise judge, and a non-inferiority eval whose verdict lands as evidence
32
+ on the advisory surface — the eval runs, a human clicks promote. Automatic
33
+ promotion (Stages 2–3) returns to this README when it is code, not before.
34
+
35
+ Greenfield rewrite of `@warmdrift/kgauto` v1 (a behavioral patcher with
36
+ telemetry).
15
37
 
16
38
  ## Status
17
39
 
18
- - **Package:** alpha — coexists with v1 (`@warmdrift/kgauto@1.2.0`) under
19
- the temporary name `@warmdrift/kgauto-compiler`. Renames to v2 final once
20
- v1 is fully retired from production.
21
- - **Tests:** 201/201 passing
22
- - **Build:** clean (47KB ESM, 68KB CJS)
23
- - **Brain:** schema ready (see `brain/migrations/001_initial_schema.sql`);
24
- awaiting dedicated Supabase provisioning.
25
- - **Mutation engine:** v2.1 (after enough outcome data accumulates).
40
+ - **Package:** alpha — coexists with v1 (`@warmdrift/kgauto`) under the
41
+ temporary name `@warmdrift/kgauto-compiler`. Renames to v2 final once v1
42
+ is fully retired from production.
43
+ - **Tests:** 1400+ passing (see CI for the current count)
44
+ - **Brain:** live multi-tenant Supabase substrate (telemetry + curated
45
+ config tables), consumed by four production apps.
46
+ - **Learning engine:** not shipped. See "What's next."
26
47
 
27
48
  ## Quickstart
28
49
 
@@ -203,10 +224,10 @@ APP (any consumer)
203
224
  └── kg.record(handle, outcome) ── async POST to brain
204
225
 
205
226
  BRAIN (centralized Supabase)
206
- ├── compile_outcomes (multi-tenant from day 1)
207
- ├── mutations (active rules empty in v2.0; engine in v2.1)
208
- ├── apps (consumer registry)
209
- └── digest_runs (weekly summary audit trail)
227
+ ├── compile_outcomes (multi-tenant telemetry)
228
+ ├── probe_outcomes / compile_outcome_quality (shadow-probe + quality rows)
229
+ ├── kgauto_models / kgauto_chains / kgauto_pricing (curated config, operator-maintained)
230
+ └── apps (consumer registry)
210
231
  ```
211
232
 
212
233
  ## Dialect-v1 (cross-app vocabulary)
@@ -216,12 +237,10 @@ Apps tag every call with an **intent archetype** (`ask`, `hunt`, `classify`,
216
237
  compiler computes a **shape signature** (context bucket × tool count × history
217
238
  depth × output mode × examples flag).
218
239
 
219
- The `(archetype, model, shape)` tuple is the **learning key**. Apps that
220
- declare the same tuple inherit each other's mutations even apps that have
221
- never seen each other's data.
222
-
223
- That's how *"what works for the dashboard, should be insights for the next
224
- dashboard"* becomes mechanical instead of aspirational.
240
+ The `(archetype, model, shape)` tuple is the **learning key** the shared
241
+ grouping vocabulary for telemetry aggregation across apps. It is the
242
+ substrate a future cross-app learning engine would key on; today it powers
243
+ per-tuple cost/latency observability, nothing more.
225
244
 
226
245
  ## Profiles — executable model knowledge
227
246
 
@@ -306,29 +325,45 @@ For staging without a dedicated brain, point consumers at the same Supabase
306
325
  they already use — the schema is identical and migration to a dedicated brain
307
326
  is a `pg_dump` away.
308
327
 
328
+ ## Golden-set eval (alpha.62 — Stage 1, shipped)
329
+
330
+ The eval-driven quality-floor-guarded swap architecture (specced 2026-07-17
331
+ after an adversarial promise review) began shipping in alpha.62:
332
+
333
+ - **Capture:** set `KGAUTO_GOLDEN_CAPTURE=0.1` on a consumer and successful
334
+ `call()`s sample their full IR + served output into a per-surface replay
335
+ corpus. Explicit opt-in — golden rows carry raw prompts (documented posture
336
+ change; consent provenance on every row; reads strictly app-scoped). Or
337
+ hand-curate with `scripts/seed-golden-set.mjs`.
338
+ - **Eval:** `scripts/run-golden-eval.mjs --app X --archetype Y --candidate M`
339
+ replays the corpus on incumbent AND candidate (fresh outputs both sides),
340
+ applies mechanical hard floors (empty / schema / candidate-error / latency),
341
+ and runs an order-swapped pairwise judge (`judge` archetype, per-archetype
342
+ rubrics). Non-inferiority rule: wins-or-ties ≥ 80% + zero floor violations
343
+ → `promote-ready`.
344
+ - **Evidence:** every run lands as brain rows (`kgauto_golden_eval_runs` +
345
+ per-case `probe_outcomes` `golden-replay` rows) and a `golden-eval-verdict`
346
+ advisory on the consumer's advisory surface.
347
+
309
348
  ## What's next
310
349
 
311
- - **v2.0.x:** real-app integrations (tt-intelligence, inspire-central,
312
- playbacksam, inspirato/incantato). Brain accumulates outcome data.
313
- - **v2.1:** mutation engine. Shadow-test statistical gate promote → auto-rollback.
314
- - **v2.2:** weekly digest reporting back to the operator.
315
- - **v2.x:** dialect-v2 expanded with archetypes that emerge from real usage.
350
+ Stages 2–3 of the trust ladder (auto-promote downswaps behind a 7-day
351
+ rollback guard, then upswaps) and trigger wiring (model-release-watch /
352
+ price-truth-watch / live-telemetry driftauto-eval), then the same harness
353
+ pointed at compile variants (Tier D). Each stage lands in this README **when
354
+ it ships**, with its gate evidence the promise follows the code.
316
355
 
317
356
  ## Why this exists
318
357
 
319
358
  The previous version (v1) treated prompts as opaque strings and could only
320
- *append* behavioral patches. It also tried to learn quality from structural
321
- signals (token counts) but quality is semantic, not structural.
322
-
323
- v2 treats prompts as structured IR, makes every model-specific quirk
324
- *executable* (cliffs, lowering, recovery), and makes oracle scoring a
325
- first-class contract so the brain learns from quality data, not its proxies.
326
-
327
- The whole point: every multi-model AI app needs a compiler. Building it
328
- inline ships one app's value. Building it portable with a shared brain
329
- ships every app's value to every other app.
330
-
331
- Communicating vessels — finally accurate to the name.
359
+ *append* behavioral patches. v2 treats prompts as structured IR and makes
360
+ every model-specific quirk *executable* (cliffs, lowering, recovery).
361
+
362
+ The felt pain this solves is real and recurring: every frontier model
363
+ release, deprecation, price change, or silent alias flip lands on every
364
+ multi-model app at once. Building the absorption layer inline ships one
365
+ app's fix. Building it portable — one compiler, one curated registry, one
366
+ watcher set, one telemetry substrate ships the fix to every app at once.
332
367
 
333
368
  ## License
334
369
 
@@ -27,7 +27,11 @@ var SEGMENT_TO_TABLE = {
27
27
  outcomes: "compile_outcomes",
28
28
  compile_outcome_advisories: "compile_outcome_advisories",
29
29
  compile_outcome_quality: "compile_outcome_quality",
30
- probe_outcomes: "probe_outcomes"
30
+ probe_outcomes: "probe_outcomes",
31
+ // alpha.62 (eval spine): golden-set capture. Only receives rows when the
32
+ // consumer has explicitly opted in via KGAUTO_GOLDEN_CAPTURE — the segment
33
+ // existing here does not by itself store anything.
34
+ golden_irs: "kgauto_golden_irs"
31
35
  };
32
36
  var KNOWN_SEGMENTS = Object.keys(SEGMENT_TO_TABLE);
33
37
  var JSON_HEADERS = { "Content-Type": "application/json" };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createBrainForwardRoutes
3
- } from "./chunk-IUWFML6Z.mjs";
3
+ } from "./chunk-65ZMX5OT.mjs";
4
4
  export {
5
5
  createBrainForwardRoutes
6
6
  };
@@ -45,6 +45,11 @@ var INTENT_ARCHETYPES = {
45
45
  name: "transform",
46
46
  description: "Change format or style while preserving content",
47
47
  examples: ["markdown \u2192 html", "formal \u2192 casual", "translate"]
48
+ },
49
+ judge: {
50
+ name: "judge",
51
+ description: "Pairwise comparison of two candidate outputs for the same input",
52
+ examples: ["golden-set eval A/B verdict", "model-swap non-inferiority check", "response bake-off"]
48
53
  }
49
54
  };
50
55
  var ALL_ARCHETYPES = Object.keys(INTENT_ARCHETYPES);
@@ -3,7 +3,11 @@ var SEGMENT_TO_TABLE = {
3
3
  outcomes: "compile_outcomes",
4
4
  compile_outcome_advisories: "compile_outcome_advisories",
5
5
  compile_outcome_quality: "compile_outcome_quality",
6
- probe_outcomes: "probe_outcomes"
6
+ probe_outcomes: "probe_outcomes",
7
+ // alpha.62 (eval spine): golden-set capture. Only receives rows when the
8
+ // consumer has explicitly opted in via KGAUTO_GOLDEN_CAPTURE — the segment
9
+ // existing here does not by itself store anything.
10
+ golden_irs: "kgauto_golden_irs"
7
11
  };
8
12
  var KNOWN_SEGMENTS = Object.keys(SEGMENT_TO_TABLE);
9
13
  var JSON_HEADERS = { "Content-Type": "application/json" };
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var LIBRARY_VERSION = "2.0.0-alpha.60";
2
+ var LIBRARY_VERSION = "2.0.0-alpha.62";
3
3
 
4
4
  // src/key-health.ts
5
5
  var JSON_HEADERS = { "Content-Type": "application/json" };
@@ -333,6 +333,16 @@ var STARTER_CHAINS_GROUNDED = {
333
333
  { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor in similar quality bracket" },
334
334
  { id: "gpt-5.5", grounding: "judgment", reason: "alpha.16: third-provider frontier-tier floor (archetypePerf=9)" }
335
335
  ],
336
+ // alpha.62 (eval spine) — pairwise output comparison. Same reasoning-floor
337
+ // posture as critique (a verdict from a weak judge is worse than no
338
+ // verdict); tier 0 anchored on the CURRENT opus (4-8, s64 roster). Strict
339
+ // JSON output, so every tier declares native structured output.
340
+ judge: [
341
+ { id: "claude-opus-4-8", grounding: "judgment", reason: "Highest reasoning bar for pairwise verdicts \u2014 current opus (s64 roster)" },
342
+ { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Same-provider walk-down on 429" },
343
+ { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor in similar quality bracket" },
344
+ { id: "gpt-5.5", grounding: "judgment", reason: "Third-provider frontier-tier floor" }
345
+ ],
336
346
  // Reasoning matters — Sonnet primary; walk UP to Opus on 429.
337
347
  plan: [
338
348
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Reasoning + cost balance \u2014 engineer pick" },
@@ -12,8 +12,15 @@
12
12
  * The brain learns by `(archetype, model, shape)` tuples. Apps that declare
13
13
  * the same tuple inherit each other's mutations.
14
14
  *
15
- * v1 is intentionally small (9 archetypes, 5 shape dimensions). New entries
16
- * arrive in v2/v3 from real usage signals — never speculatively.
15
+ * v1 is intentionally small (10 archetypes, 5 shape dimensions). New entries
16
+ * arrive from real usage signals — never speculatively.
17
+ *
18
+ * Versioning note (alpha.62): `judge` was added as an ADDITIVE 10th entry
19
+ * under dialect-v1 rather than bumping to v2. Bumping the version string
20
+ * would fragment every existing learning key (`v1::…` → `v2::…`) for a
21
+ * purely additive vocabulary change; existing keys are untouched and judge
22
+ * keys are new, so no collision is possible. A v2 bump is reserved for
23
+ * changes that alter the MEANING of existing entries or the shape hash.
17
24
  */
18
25
  declare const DIALECT_VERSION: "v1";
19
26
  declare const INTENT_ARCHETYPES: {
@@ -62,6 +69,11 @@ declare const INTENT_ARCHETYPES: {
62
69
  readonly description: "Change format or style while preserving content";
63
70
  readonly examples: ["markdown → html", "formal → casual", "translate"];
64
71
  };
72
+ readonly judge: {
73
+ readonly name: "judge";
74
+ readonly description: "Pairwise comparison of two candidate outputs for the same input";
75
+ readonly examples: ["golden-set eval A/B verdict", "model-swap non-inferiority check", "response bake-off"];
76
+ };
65
77
  };
66
78
  type IntentArchetypeName = keyof typeof INTENT_ARCHETYPES;
67
79
  declare const ALL_ARCHETYPES: IntentArchetypeName[];
package/dist/dialect.d.ts CHANGED
@@ -12,8 +12,15 @@
12
12
  * The brain learns by `(archetype, model, shape)` tuples. Apps that declare
13
13
  * the same tuple inherit each other's mutations.
14
14
  *
15
- * v1 is intentionally small (9 archetypes, 5 shape dimensions). New entries
16
- * arrive in v2/v3 from real usage signals — never speculatively.
15
+ * v1 is intentionally small (10 archetypes, 5 shape dimensions). New entries
16
+ * arrive from real usage signals — never speculatively.
17
+ *
18
+ * Versioning note (alpha.62): `judge` was added as an ADDITIVE 10th entry
19
+ * under dialect-v1 rather than bumping to v2. Bumping the version string
20
+ * would fragment every existing learning key (`v1::…` → `v2::…`) for a
21
+ * purely additive vocabulary change; existing keys are untouched and judge
22
+ * keys are new, so no collision is possible. A v2 bump is reserved for
23
+ * changes that alter the MEANING of existing entries or the shape hash.
17
24
  */
18
25
  declare const DIALECT_VERSION: "v1";
19
26
  declare const INTENT_ARCHETYPES: {
@@ -62,6 +69,11 @@ declare const INTENT_ARCHETYPES: {
62
69
  readonly description: "Change format or style while preserving content";
63
70
  readonly examples: ["markdown → html", "formal → casual", "translate"];
64
71
  };
72
+ readonly judge: {
73
+ readonly name: "judge";
74
+ readonly description: "Pairwise comparison of two candidate outputs for the same input";
75
+ readonly examples: ["golden-set eval A/B verdict", "model-swap non-inferiority check", "response bake-off"];
76
+ };
65
77
  };
66
78
  type IntentArchetypeName = keyof typeof INTENT_ARCHETYPES;
67
79
  declare const ALL_ARCHETYPES: IntentArchetypeName[];
package/dist/dialect.js CHANGED
@@ -77,6 +77,11 @@ var INTENT_ARCHETYPES = {
77
77
  name: "transform",
78
78
  description: "Change format or style while preserving content",
79
79
  examples: ["markdown \u2192 html", "formal \u2192 casual", "translate"]
80
+ },
81
+ judge: {
82
+ name: "judge",
83
+ description: "Pairwise comparison of two candidate outputs for the same input",
84
+ examples: ["golden-set eval A/B verdict", "model-swap non-inferiority check", "response bake-off"]
80
85
  }
81
86
  };
82
87
  var ALL_ARCHETYPES = Object.keys(INTENT_ARCHETYPES);
package/dist/dialect.mjs CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  hashShape,
9
9
  isArchetype,
10
10
  learningKey
11
- } from "./chunk-5TI6PNSK.mjs";
11
+ } from "./chunk-3KQAID63.mjs";
12
12
  export {
13
13
  ALL_ARCHETYPES,
14
14
  DIALECT_VERSION,
@@ -1,6 +1,6 @@
1
- import { G as GlassboxEvent } from '../types-CRy90cjp.mjs';
2
- export { A as AdvisoryFiredData, C as CompileDoneData, a as CompileStartData, E as ExecuteAttemptData, b as ExecuteSuccessData, F as FallbackWalkedData, c as GLASSBOX_STREAM_TTL_MS, d as GlassboxEventKind, e as GlassboxPubSub } from '../types-CRy90cjp.mjs';
3
- import '../ir-BC4uDL98.mjs';
1
+ import { G as GlassboxEvent } from '../types-axAX1Bg0.mjs';
2
+ export { A as AdvisoryFiredData, C as CompileDoneData, a as CompileStartData, E as ExecuteAttemptData, b as ExecuteSuccessData, F as FallbackWalkedData, c as GLASSBOX_STREAM_TTL_MS, d as GlassboxEventKind, e as GlassboxPubSub } from '../types-axAX1Bg0.mjs';
3
+ import '../ir-B2dRyJXO.mjs';
4
4
  import '../dialect.mjs';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
- import { G as GlassboxEvent } from '../types-CsB2YASc.js';
2
- export { A as AdvisoryFiredData, C as CompileDoneData, a as CompileStartData, E as ExecuteAttemptData, b as ExecuteSuccessData, F as FallbackWalkedData, c as GLASSBOX_STREAM_TTL_MS, d as GlassboxEventKind, e as GlassboxPubSub } from '../types-CsB2YASc.js';
3
- import '../ir-B2h0GAEL.js';
1
+ import { G as GlassboxEvent } from '../types-C-Wp7HpI.js';
2
+ export { A as AdvisoryFiredData, C as CompileDoneData, a as CompileStartData, E as ExecuteAttemptData, b as ExecuteSuccessData, F as FallbackWalkedData, c as GLASSBOX_STREAM_TTL_MS, d as GlassboxEventKind, e as GlassboxPubSub } from '../types-C-Wp7HpI.js';
3
+ import '../ir-ClU56aBc.js';
4
4
  import '../dialect.js';
5
5
 
6
6
  /**
@@ -1,5 +1,5 @@
1
- import { T as TraceHealth } from '../types-B-pzBJKf.mjs';
2
- import '../ir-BC4uDL98.mjs';
1
+ import { T as TraceHealth } from '../types-CSDweZsl.mjs';
2
+ import '../ir-B2dRyJXO.mjs';
3
3
  import '../dialect.mjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as TraceHealth } from '../types-CKuu7Clz.js';
2
- import '../ir-B2h0GAEL.js';
1
+ import { T as TraceHealth } from '../types-ByN3r0_7.js';
2
+ import '../ir-ClU56aBc.js';
3
3
  import '../dialect.js';
4
4
 
5
5
  /**
@@ -1,7 +1,7 @@
1
- import { G as GlassboxEvent } from '../types-CRy90cjp.mjs';
2
- import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-B-pzBJKf.mjs';
3
- export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-B-pzBJKf.mjs';
4
- import '../ir-BC4uDL98.mjs';
1
+ import { G as GlassboxEvent } from '../types-axAX1Bg0.mjs';
2
+ import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-CSDweZsl.mjs';
3
+ export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-CSDweZsl.mjs';
4
+ import '../ir-B2dRyJXO.mjs';
5
5
  import '../dialect.mjs';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
- import { G as GlassboxEvent } from '../types-CsB2YASc.js';
2
- import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-CKuu7Clz.js';
3
- export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-CKuu7Clz.js';
4
- import '../ir-B2h0GAEL.js';
1
+ import { G as GlassboxEvent } from '../types-C-Wp7HpI.js';
2
+ import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-ByN3r0_7.js';
3
+ export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-ByN3r0_7.js';
4
+ import '../ir-ClU56aBc.js';
5
5
  import '../dialect.js';
6
6
 
7
7
  /**
@@ -1650,6 +1650,16 @@ var STARTER_CHAINS_GROUNDED = {
1650
1650
  { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor in similar quality bracket" },
1651
1651
  { id: "gpt-5.5", grounding: "judgment", reason: "alpha.16: third-provider frontier-tier floor (archetypePerf=9)" }
1652
1652
  ],
1653
+ // alpha.62 (eval spine) — pairwise output comparison. Same reasoning-floor
1654
+ // posture as critique (a verdict from a weak judge is worse than no
1655
+ // verdict); tier 0 anchored on the CURRENT opus (4-8, s64 roster). Strict
1656
+ // JSON output, so every tier declares native structured output.
1657
+ judge: [
1658
+ { id: "claude-opus-4-8", grounding: "judgment", reason: "Highest reasoning bar for pairwise verdicts \u2014 current opus (s64 roster)" },
1659
+ { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Same-provider walk-down on 429" },
1660
+ { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor in similar quality bracket" },
1661
+ { id: "gpt-5.5", grounding: "judgment", reason: "Third-provider frontier-tier floor" }
1662
+ ],
1653
1663
  // Reasoning matters — Sonnet primary; walk UP to Opus on 429.
1654
1664
  plan: [
1655
1665
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Reasoning + cost balance \u2014 engineer pick" },
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ARCHETYPE_FLOOR_DEFAULT,
3
3
  getDefaultFallbackChain
4
- } from "../chunk-IIMPJZNH.mjs";
4
+ } from "../chunk-YZRPNSSQ.mjs";
5
5
  import {
6
6
  tryGetProfile
7
7
  } from "../chunk-QKXTMVCT.mjs";
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { a as TraceDetail } from '../../types-B-pzBJKf.mjs';
3
- import '../../ir-BC4uDL98.mjs';
2
+ import { a as TraceDetail } from '../../types-CSDweZsl.mjs';
3
+ import '../../ir-B2dRyJXO.mjs';
4
4
  import '../../dialect.mjs';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { a as TraceDetail } from '../../types-CKuu7Clz.js';
3
- import '../../ir-B2h0GAEL.js';
2
+ import { a as TraceDetail } from '../../types-ByN3r0_7.js';
3
+ import '../../ir-ClU56aBc.js';
4
4
  import '../../dialect.js';
5
5
 
6
6
  /**