@warmdrift/kgauto-compiler 2.0.0-alpha.49 → 2.0.0-alpha.51

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 CHANGED
@@ -120,6 +120,28 @@ const result = streamText({
120
120
 
121
121
  kgauto runs each candidate on the **same IR** and persists a `probe_outcomes` row (`replay_source='inline-full-ir'`, `prompt_fidelity=1.0`, both latency legs). Phase 1 is `judge:'off'` — rows accumulate for an offline verdict rollup; inline Opus judging is Phase 2. Fire-and-forget: never throws into your `onFinish`.
122
122
 
123
+ #### Sync-mode latency protection (`call()` + `BrainConfig.sync`)
124
+
125
+ A `probeShadow()` consumer fires from `after()`, so the probe is always off the user-facing path — slow candidates are fine there (it's the right place to evaluate a slow reasoner). But a **`call()`-inline** consumer that sets `BrainConfig.sync: true` (PB-class Edge routes, so the brain write reliably lands before teardown — L-086) *awaits* the probe, putting the candidate's latency on the user's critical path. A `latency_tier='slow'` candidate (deepseek-v4-pro ~78–84s) then blows the route's time budget and the user sees an empty response. Two knobs on `shadowProbe` protect the sync path — **both are no-ops off the critical path** (non-sync `call()` and every `probeShadow()` consumer):
126
+
127
+ ```ts
128
+ await call(ir, {
129
+ shadowProbe: {
130
+ candidates: ['deepseek-v4-pro'],
131
+ sampleRate: 1,
132
+ maxLatencyMs: 15000, // default 15000. Sync-mode budget: if the probe
133
+ // overruns, abort the candidate, return the served
134
+ // response NOW, record outcome='aborted_latency_budget'.
135
+ skipSlowTierInSync: true, // default true. Don't even START a latency_tier='slow'
136
+ // candidate inline; record outcome='skipped_slow_tier_sync'.
137
+ },
138
+ });
139
+ ```
140
+
141
+ Aborted/skipped probes write a **diagnostic** `probe_outcomes` row (`outcome != 'completed'`, no candidate response, no verdict) so the offline rollup can tell "tried but too slow" from "never armed." A verdict rollup must filter `outcome='completed'`.
142
+
143
+ **The deeper rule: inline shadow-probe = FAST candidates only.** To evaluate a *slow* reasoner, use the offline/async probe path (the Phase-2 batch direction, off the response entirely) or `probeShadow()` from `after()` — never the inline sync probe.
144
+
123
145
  ## Structured advisories API (alpha.29+)
124
146
 
125
147
  kgauto's compile-time advisories (`caching-off-on-claude`, `tool-bloat`,
@@ -32,6 +32,115 @@ var GOOGLE_LOWERING_BASE = {
32
32
  };
33
33
  var PROFILES_RAW = [
34
34
  // ── Anthropic ──
35
+ {
36
+ // VERIFIED 2026-06-21 against the claude-api reference. Claude Fable 5 is
37
+ // Anthropic's most capable model — a NEW tier ABOVE the opus/sonnet/haiku
38
+ // line (the id has no MAJOR-MINOR version, just `-5`) at 2× Opus pricing
39
+ // ($10/$50 vs $5/$25). Hand-authored, not cloned: the onboarder regex can't
40
+ // match this shape (new family + single-segment version), AND a clone would
41
+ // carry the wrong (opus) pricing. status:'preview' — no brain evidence yet;
42
+ // it earns per-archetype placement through the machinery like any model, and
43
+ // at 2× Opus the quality-floor + cost gates do real work before it leads.
44
+ // API quirk (claude-api ref): an explicit `thinking:{type:"disabled"}` 400s
45
+ // on Fable 5 (omit instead) — MOOT here: ANTHROPIC_LOWERING_BASE carries no
46
+ // `thinking` field, so kgauto never sends the param. (L-049/L-081.)
47
+ id: "claude-fable-5",
48
+ verifiedAgainstDocs: "2026-06-21",
49
+ provider: "anthropic",
50
+ status: "preview",
51
+ maxContextTokens: 1e6,
52
+ maxOutputTokens: 128e3,
53
+ maxTools: 64,
54
+ parallelToolCalls: true,
55
+ structuredOutput: "grammar",
56
+ systemPromptMode: "inline",
57
+ streaming: true,
58
+ cliffs: [],
59
+ costInputPer1m: 10,
60
+ costOutputPer1m: 50,
61
+ lowering: ANTHROPIC_LOWERING_BASE,
62
+ recovery: [
63
+ {
64
+ signal: "rate_limit",
65
+ action: "escalate",
66
+ reason: "429 from Anthropic \u2014 escalate to fallback chain"
67
+ },
68
+ {
69
+ signal: "model_not_found",
70
+ action: "escalate",
71
+ reason: "Model deprecated/renamed \u2014 escalate (L-061)"
72
+ }
73
+ ],
74
+ strengths: ["reasoning", "agentic_coding", "long_context", "reliable_tool_use", "structured_output"],
75
+ weaknesses: ["cost", "latency"],
76
+ notes: "Most capable Anthropic model (2026-06); a new tier ABOVE Opus at 2\xD7 pricing ($10/$50). 1M ctx, 128k out. Verified 2026-06-21 against the claude-api reference. status:preview \u2014 no brain evidence yet; earns placement via the machinery (cost + quality-floor gates govern). latencyTier derives `slow` (weaknesses includes latency \u2014 minutes-long turns on hard tasks). The thinking-disabled-400 API quirk is moot for kgauto (Anthropic lowering emits no thinking param).",
77
+ // archetypePerf cloned from claude-opus-4-8 as a conservative estimate
78
+ // (Fable >= Opus in capability, but unmeasured — no fabricated superiority).
79
+ // Re-rank once brain rows exist.
80
+ archetypePerf: {
81
+ critique: 10,
82
+ plan: 10,
83
+ generate: 9,
84
+ ask: 9,
85
+ extract: 9,
86
+ transform: 9,
87
+ hunt: 8,
88
+ summarize: 8,
89
+ classify: 8
90
+ }
91
+ },
92
+ {
93
+ // Auto-onboarded 2026-06-04 from `claude-opus-4-7`; VERIFIED 2026-06-21
94
+ // against the claude-api reference. Opus 4.8 shares 4.7's surface exactly —
95
+ // 1M ctx, 128k out, $5/$25, no new breaking changes — so the clone's
96
+ // capability data was accurate (confirmed field-by-field). archetypePerf is
97
+ // still cloned from 4.7 (a sound estimate: 4.8 >= 4.7) — re-rank once brain
98
+ // rows exist. Promoted to status:'current' 2026-06-21 (Sacha: "include Claude
99
+ // Opus 4.8") — now live-selectable. Ties with the still-current claude-opus-4-7
100
+ // (identical $5/$25 + cloned perf) resolve to 4-8 by array order. (L-049/L-081.)
101
+ id: "claude-opus-4-8",
102
+ verifiedAgainstDocs: "2026-06-21",
103
+ provider: "anthropic",
104
+ status: "current",
105
+ maxContextTokens: 1e6,
106
+ maxOutputTokens: 128e3,
107
+ maxTools: 64,
108
+ parallelToolCalls: true,
109
+ structuredOutput: "grammar",
110
+ systemPromptMode: "inline",
111
+ streaming: true,
112
+ cliffs: [],
113
+ costInputPer1m: 5,
114
+ costOutputPer1m: 25,
115
+ lowering: ANTHROPIC_LOWERING_BASE,
116
+ recovery: [
117
+ {
118
+ signal: "rate_limit",
119
+ action: "escalate",
120
+ reason: "429 from Anthropic \u2014 escalate to fallback chain"
121
+ },
122
+ {
123
+ signal: "model_not_found",
124
+ action: "escalate",
125
+ reason: "Model deprecated/renamed \u2014 escalate (L-061)"
126
+ }
127
+ ],
128
+ strengths: ["reasoning", "agentic_coding", "long_context", "reliable_tool_use", "structured_output"],
129
+ weaknesses: ["cost", "latency"],
130
+ notes: "Frontier Opus (2026-06), the current recommended Opus-tier default. Verified 2026-06-21 against the claude-api reference: 1M ctx, 128k out, $5/$25 \u2014 identical surface to 4.7, no new breaking changes. Promoted to status:current 2026-06-21 (live-selectable); coexists with claude-opus-4-7 (still current).",
131
+ // Cloned archetypePerf from claude-opus-4-7 — re-evaluate once brain rows exist.
132
+ archetypePerf: {
133
+ critique: 10,
134
+ plan: 10,
135
+ generate: 9,
136
+ ask: 9,
137
+ extract: 9,
138
+ transform: 9,
139
+ hunt: 8,
140
+ summarize: 8,
141
+ classify: 8
142
+ }
143
+ },
35
144
  {
36
145
  id: "claude-opus-4-7",
37
146
  verifiedAgainstDocs: "2026-05-08",
@@ -599,7 +708,7 @@ var PROFILES_RAW = [
599
708
  },
600
709
  {
601
710
  id: "deepseek-v4-pro",
602
- verifiedAgainstDocs: "2026-05-08",
711
+ verifiedAgainstDocs: "2026-06-22",
603
712
  provider: "deepseek",
604
713
  status: "current",
605
714
  maxContextTokens: 1e6,
@@ -617,10 +726,14 @@ var PROFILES_RAW = [
617
726
  reason: "Sequential tool calls only \u2014 L-040"
618
727
  }
619
728
  ],
620
- // Profile carries REGULAR pricing, not the 75%-off promo (ends 2026-05-31).
621
- // Under-estimating cost is worse than over-estimating for budget caps.
622
- costInputPer1m: 1.74,
623
- costOutputPer1m: 3.48,
729
+ // Verified against the live DeepSeek pricing page 2026-06-22: the 75%-off
730
+ // launch "promo" ($0.435/$0.87) did NOT revert on 2026-05-31 it became the
731
+ // standing price (docs show $0.435 in / $0.87 out cache-miss, $0.003625
732
+ // cache-hit in; no promo caveat). The old $1.74/$3.48 "regular post-promo"
733
+ // was a projected revert that never happened (L-073/L-081) — it 4×-overstated
734
+ // cost and suppressed V4-Pro in cost-aware ranking.
735
+ costInputPer1m: 0.435,
736
+ costOutputPer1m: 0.87,
624
737
  lowering: {
625
738
  system: { mode: "inline" },
626
739
  cache: { strategy: "unsupported" },
@@ -636,7 +749,7 @@ var PROFILES_RAW = [
636
749
  // of the served set. Tag derivation would say 'medium'; the measurement says
637
750
  // otherwise.
638
751
  latencyTier: "slow",
639
- notes: "Pro tier. 1M context, 384k max output. Regular pricing $1.74/$3.48; 75% promo through 2026-05-31 ($0.435/$0.87). Default mode = thinking.",
752
+ notes: "Pro tier. 1M context, 384k max output. $0.435/$0.87 per 1M (cache-hit in $0.003625) \u2014 verified live 2026-06-22; the launch promo became the standing price (no revert). Default mode = thinking.",
640
753
  // Master plan §3.3: tier 3 cross-provider for plan chain. Reasoning
641
754
  // bumped one notch over V4-Flash; same parallel-tool ceiling.
642
755
  archetypePerf: {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  tryGetProfile
3
- } from "./chunk-PKOFXEB3.mjs";
3
+ } from "./chunk-CXH7KC4D.mjs";
4
4
 
5
5
  // src/brain-query.ts
6
6
  var FRESH_SNAPSHOT = {
@@ -1,6 +1,6 @@
1
- import { G as GlassboxEvent } from '../types-DMJqRzDF.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-DMJqRzDF.mjs';
3
- import '../ir-BBKgsUX7.mjs';
1
+ import { G as GlassboxEvent } from '../types-vGo-h0tZ.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-vGo-h0tZ.mjs';
3
+ import '../ir-dDcG8Pvu.mjs';
4
4
  import '../dialect.mjs';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
- import { G as GlassboxEvent } from '../types-Bzw8tH-7.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-Bzw8tH-7.js';
3
- import '../ir-D3n-pBYI.js';
1
+ import { G as GlassboxEvent } from '../types-UXPxWabQ.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-UXPxWabQ.js';
3
+ import '../ir-rUUojj0s.js';
4
4
  import '../dialect.js';
5
5
 
6
6
  /**
@@ -1,5 +1,5 @@
1
- import { T as TraceHealth } from '../types-xBWYk9Mm.mjs';
2
- import '../ir-BBKgsUX7.mjs';
1
+ import { T as TraceHealth } from '../types-BTeRoSvM.mjs';
2
+ import '../ir-dDcG8Pvu.mjs';
3
3
  import '../dialect.mjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as TraceHealth } from '../types-B6z-8phQ.js';
2
- import '../ir-D3n-pBYI.js';
1
+ import { T as TraceHealth } from '../types-B_pdPjxm.js';
2
+ import '../ir-rUUojj0s.js';
3
3
  import '../dialect.js';
4
4
 
5
5
  /**
@@ -1,7 +1,7 @@
1
- import { G as GlassboxEvent } from '../types-DMJqRzDF.mjs';
2
- import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-xBWYk9Mm.mjs';
3
- export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-xBWYk9Mm.mjs';
4
- import '../ir-BBKgsUX7.mjs';
1
+ import { G as GlassboxEvent } from '../types-vGo-h0tZ.mjs';
2
+ import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-BTeRoSvM.mjs';
3
+ export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-BTeRoSvM.mjs';
4
+ import '../ir-dDcG8Pvu.mjs';
5
5
  import '../dialect.mjs';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
- import { G as GlassboxEvent } from '../types-Bzw8tH-7.js';
2
- import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-B6z-8phQ.js';
3
- export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-B6z-8phQ.js';
4
- import '../ir-D3n-pBYI.js';
1
+ import { G as GlassboxEvent } from '../types-UXPxWabQ.js';
2
+ import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-B_pdPjxm.js';
3
+ export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-B_pdPjxm.js';
4
+ import '../ir-rUUojj0s.js';
5
5
  import '../dialect.js';
6
6
 
7
7
  /**
@@ -86,6 +86,115 @@ var GOOGLE_LOWERING_BASE = {
86
86
  };
87
87
  var PROFILES_RAW = [
88
88
  // ── Anthropic ──
89
+ {
90
+ // VERIFIED 2026-06-21 against the claude-api reference. Claude Fable 5 is
91
+ // Anthropic's most capable model — a NEW tier ABOVE the opus/sonnet/haiku
92
+ // line (the id has no MAJOR-MINOR version, just `-5`) at 2× Opus pricing
93
+ // ($10/$50 vs $5/$25). Hand-authored, not cloned: the onboarder regex can't
94
+ // match this shape (new family + single-segment version), AND a clone would
95
+ // carry the wrong (opus) pricing. status:'preview' — no brain evidence yet;
96
+ // it earns per-archetype placement through the machinery like any model, and
97
+ // at 2× Opus the quality-floor + cost gates do real work before it leads.
98
+ // API quirk (claude-api ref): an explicit `thinking:{type:"disabled"}` 400s
99
+ // on Fable 5 (omit instead) — MOOT here: ANTHROPIC_LOWERING_BASE carries no
100
+ // `thinking` field, so kgauto never sends the param. (L-049/L-081.)
101
+ id: "claude-fable-5",
102
+ verifiedAgainstDocs: "2026-06-21",
103
+ provider: "anthropic",
104
+ status: "preview",
105
+ maxContextTokens: 1e6,
106
+ maxOutputTokens: 128e3,
107
+ maxTools: 64,
108
+ parallelToolCalls: true,
109
+ structuredOutput: "grammar",
110
+ systemPromptMode: "inline",
111
+ streaming: true,
112
+ cliffs: [],
113
+ costInputPer1m: 10,
114
+ costOutputPer1m: 50,
115
+ lowering: ANTHROPIC_LOWERING_BASE,
116
+ recovery: [
117
+ {
118
+ signal: "rate_limit",
119
+ action: "escalate",
120
+ reason: "429 from Anthropic \u2014 escalate to fallback chain"
121
+ },
122
+ {
123
+ signal: "model_not_found",
124
+ action: "escalate",
125
+ reason: "Model deprecated/renamed \u2014 escalate (L-061)"
126
+ }
127
+ ],
128
+ strengths: ["reasoning", "agentic_coding", "long_context", "reliable_tool_use", "structured_output"],
129
+ weaknesses: ["cost", "latency"],
130
+ notes: "Most capable Anthropic model (2026-06); a new tier ABOVE Opus at 2\xD7 pricing ($10/$50). 1M ctx, 128k out. Verified 2026-06-21 against the claude-api reference. status:preview \u2014 no brain evidence yet; earns placement via the machinery (cost + quality-floor gates govern). latencyTier derives `slow` (weaknesses includes latency \u2014 minutes-long turns on hard tasks). The thinking-disabled-400 API quirk is moot for kgauto (Anthropic lowering emits no thinking param).",
131
+ // archetypePerf cloned from claude-opus-4-8 as a conservative estimate
132
+ // (Fable >= Opus in capability, but unmeasured — no fabricated superiority).
133
+ // Re-rank once brain rows exist.
134
+ archetypePerf: {
135
+ critique: 10,
136
+ plan: 10,
137
+ generate: 9,
138
+ ask: 9,
139
+ extract: 9,
140
+ transform: 9,
141
+ hunt: 8,
142
+ summarize: 8,
143
+ classify: 8
144
+ }
145
+ },
146
+ {
147
+ // Auto-onboarded 2026-06-04 from `claude-opus-4-7`; VERIFIED 2026-06-21
148
+ // against the claude-api reference. Opus 4.8 shares 4.7's surface exactly —
149
+ // 1M ctx, 128k out, $5/$25, no new breaking changes — so the clone's
150
+ // capability data was accurate (confirmed field-by-field). archetypePerf is
151
+ // still cloned from 4.7 (a sound estimate: 4.8 >= 4.7) — re-rank once brain
152
+ // rows exist. Promoted to status:'current' 2026-06-21 (Sacha: "include Claude
153
+ // Opus 4.8") — now live-selectable. Ties with the still-current claude-opus-4-7
154
+ // (identical $5/$25 + cloned perf) resolve to 4-8 by array order. (L-049/L-081.)
155
+ id: "claude-opus-4-8",
156
+ verifiedAgainstDocs: "2026-06-21",
157
+ provider: "anthropic",
158
+ status: "current",
159
+ maxContextTokens: 1e6,
160
+ maxOutputTokens: 128e3,
161
+ maxTools: 64,
162
+ parallelToolCalls: true,
163
+ structuredOutput: "grammar",
164
+ systemPromptMode: "inline",
165
+ streaming: true,
166
+ cliffs: [],
167
+ costInputPer1m: 5,
168
+ costOutputPer1m: 25,
169
+ lowering: ANTHROPIC_LOWERING_BASE,
170
+ recovery: [
171
+ {
172
+ signal: "rate_limit",
173
+ action: "escalate",
174
+ reason: "429 from Anthropic \u2014 escalate to fallback chain"
175
+ },
176
+ {
177
+ signal: "model_not_found",
178
+ action: "escalate",
179
+ reason: "Model deprecated/renamed \u2014 escalate (L-061)"
180
+ }
181
+ ],
182
+ strengths: ["reasoning", "agentic_coding", "long_context", "reliable_tool_use", "structured_output"],
183
+ weaknesses: ["cost", "latency"],
184
+ notes: "Frontier Opus (2026-06), the current recommended Opus-tier default. Verified 2026-06-21 against the claude-api reference: 1M ctx, 128k out, $5/$25 \u2014 identical surface to 4.7, no new breaking changes. Promoted to status:current 2026-06-21 (live-selectable); coexists with claude-opus-4-7 (still current).",
185
+ // Cloned archetypePerf from claude-opus-4-7 — re-evaluate once brain rows exist.
186
+ archetypePerf: {
187
+ critique: 10,
188
+ plan: 10,
189
+ generate: 9,
190
+ ask: 9,
191
+ extract: 9,
192
+ transform: 9,
193
+ hunt: 8,
194
+ summarize: 8,
195
+ classify: 8
196
+ }
197
+ },
89
198
  {
90
199
  id: "claude-opus-4-7",
91
200
  verifiedAgainstDocs: "2026-05-08",
@@ -653,7 +762,7 @@ var PROFILES_RAW = [
653
762
  },
654
763
  {
655
764
  id: "deepseek-v4-pro",
656
- verifiedAgainstDocs: "2026-05-08",
765
+ verifiedAgainstDocs: "2026-06-22",
657
766
  provider: "deepseek",
658
767
  status: "current",
659
768
  maxContextTokens: 1e6,
@@ -671,10 +780,14 @@ var PROFILES_RAW = [
671
780
  reason: "Sequential tool calls only \u2014 L-040"
672
781
  }
673
782
  ],
674
- // Profile carries REGULAR pricing, not the 75%-off promo (ends 2026-05-31).
675
- // Under-estimating cost is worse than over-estimating for budget caps.
676
- costInputPer1m: 1.74,
677
- costOutputPer1m: 3.48,
783
+ // Verified against the live DeepSeek pricing page 2026-06-22: the 75%-off
784
+ // launch "promo" ($0.435/$0.87) did NOT revert on 2026-05-31 it became the
785
+ // standing price (docs show $0.435 in / $0.87 out cache-miss, $0.003625
786
+ // cache-hit in; no promo caveat). The old $1.74/$3.48 "regular post-promo"
787
+ // was a projected revert that never happened (L-073/L-081) — it 4×-overstated
788
+ // cost and suppressed V4-Pro in cost-aware ranking.
789
+ costInputPer1m: 0.435,
790
+ costOutputPer1m: 0.87,
678
791
  lowering: {
679
792
  system: { mode: "inline" },
680
793
  cache: { strategy: "unsupported" },
@@ -690,7 +803,7 @@ var PROFILES_RAW = [
690
803
  // of the served set. Tag derivation would say 'medium'; the measurement says
691
804
  // otherwise.
692
805
  latencyTier: "slow",
693
- notes: "Pro tier. 1M context, 384k max output. Regular pricing $1.74/$3.48; 75% promo through 2026-05-31 ($0.435/$0.87). Default mode = thinking.",
806
+ notes: "Pro tier. 1M context, 384k max output. $0.435/$0.87 per 1M (cache-hit in $0.003625) \u2014 verified live 2026-06-22; the launch promo became the standing price (no revert). Default mode = thinking.",
694
807
  // Master plan §3.3: tier 3 cross-provider for plan chain. Reasoning
695
808
  // bumped one notch over V4-Flash; same parallel-tool ceiling.
696
809
  archetypePerf: {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  ARCHETYPE_FLOOR_DEFAULT,
3
3
  getDefaultFallbackChain
4
- } from "../chunk-SAWTKMD4.mjs";
4
+ } from "../chunk-HHWBB46W.mjs";
5
5
  import {
6
6
  tryGetProfile
7
- } from "../chunk-PKOFXEB3.mjs";
7
+ } from "../chunk-CXH7KC4D.mjs";
8
8
  import {
9
9
  subscribe,
10
10
  subscribeApp
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { a as TraceDetail } from '../../types-xBWYk9Mm.mjs';
3
- import '../../ir-BBKgsUX7.mjs';
2
+ import { a as TraceDetail } from '../../types-BTeRoSvM.mjs';
3
+ import '../../ir-dDcG8Pvu.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-B6z-8phQ.js';
3
- import '../../ir-D3n-pBYI.js';
2
+ import { a as TraceDetail } from '../../types-B_pdPjxm.js';
3
+ import '../../ir-rUUojj0s.js';
4
4
  import '../../dialect.js';
5
5
 
6
6
  /**
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { C as CompilePolicy, N as NormalizedResponse, A as ApiKeys, P as ProviderOverrides, a as CompiledRequest, b as PromptIR, c as CallOptions, d as CallResult, S as SystemModelMessage, e as CompileResult, f as SectionRewrite, R as RecordInput, g as RecordOutcomeInput, O as OutcomeResult, h as OracleScore, B as BestPracticeAdvisory, i as Adapter, j as PerAxisMetrics, k as Provider, l as ChainEntry, G as Grounding } from './ir-BBKgsUX7.mjs';
2
- export { m as CallAttempt, n as CallError, o as ChainModelEntry, p as ChainWithGrounding, q as Constraints, F as FallbackReason, H as HistoryCachePolicy, I as IntentDeclaration, M as Message, r as MutationApplied, s as NormalizedTokens, t as OutcomeKind, u as PerAxisMetricsByModel, v as PromptSection, w as SectionKind, x as ShadowProbeConfig, T as ToolCall, y as ToolDefinition } from './ir-BBKgsUX7.mjs';
1
+ import { C as CompilePolicy, N as NormalizedResponse, A as ApiKeys, P as ProviderOverrides, a as CompiledRequest, b as PromptIR, c as CallOptions, d as CallResult, S as SystemModelMessage, e as CompileResult, f as SectionRewrite, R as RecordInput, g as RecordOutcomeInput, O as OutcomeResult, h as OracleScore, B as BestPracticeAdvisory, i as Adapter, j as PerAxisMetrics, k as Provider, l as ChainEntry, G as Grounding } from './ir-dDcG8Pvu.mjs';
2
+ export { m as CallAttempt, n as CallError, o as ChainModelEntry, p as ChainWithGrounding, q as Constraints, F as FallbackReason, H as HistoryCachePolicy, I as IntentDeclaration, M as Message, r as MutationApplied, s as NormalizedTokens, t as OutcomeKind, u as PerAxisMetricsByModel, v as PromptSection, w as SectionKind, x as ShadowProbeConfig, T as ToolCall, y as ToolDefinition } from './ir-dDcG8Pvu.mjs';
3
3
  import { ModelProfile, ArchetypeConvention } from './profiles.mjs';
4
4
  export { ALIASES, CacheStrategy, CliffRule, LATENCY_TIER_MS, LatencyTier, LoweringSpec, RecoveryRule, StructuredOutputCapability, SystemPromptMode, allProfiles, getProfile, latencyTierOf, profilesByProvider, tryGetProfile } from './profiles.mjs';
5
5
  import { IntentArchetypeName } from './dialect.mjs';
@@ -436,6 +436,14 @@ interface ShadowProbeRecordInput {
436
436
  latencyCurrentMs?: number;
437
437
  /** Wall-clock latency of the candidate replay call, ms (alpha.46). */
438
438
  latencyCandidateMs?: number;
439
+ /**
440
+ * alpha — probe-row class (migration 029). Defaults to `'completed'` (the
441
+ * pre-029 row shape: candidate ran, columns populated). `'aborted_latency_budget'`
442
+ * and `'skipped_slow_tier_sync'` are DIAGNOSTIC rows from sync-mode latency
443
+ * protection — no candidate response, no verdict, no false quality signal. A
444
+ * verdict rollup MUST filter to `outcome='completed'`.
445
+ */
446
+ outcome?: 'completed' | 'aborted_latency_budget' | 'skipped_slow_tier_sync';
439
447
  }
440
448
  /**
441
449
  * Pure builder for the `probe_outcomes` row written by the inline shadow-probe.
@@ -467,6 +475,7 @@ declare function buildShadowProbeRow(input: ShadowProbeRecordInput): {
467
475
  latency_candidate_ms: number | null;
468
476
  prompt_fidelity: number;
469
477
  replay_source: 'inline-full-ir';
478
+ outcome: 'completed' | 'aborted_latency_budget' | 'skipped_slow_tier_sync';
470
479
  };
471
480
  /**
472
481
  * Persist one inline shadow-probe row to `probe_outcomes`. Fire-and-forget by
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { C as CompilePolicy, N as NormalizedResponse, A as ApiKeys, P as ProviderOverrides, a as CompiledRequest, b as PromptIR, c as CallOptions, d as CallResult, S as SystemModelMessage, e as CompileResult, f as SectionRewrite, R as RecordInput, g as RecordOutcomeInput, O as OutcomeResult, h as OracleScore, B as BestPracticeAdvisory, i as Adapter, j as PerAxisMetrics, k as Provider, l as ChainEntry, G as Grounding } from './ir-D3n-pBYI.js';
2
- export { m as CallAttempt, n as CallError, o as ChainModelEntry, p as ChainWithGrounding, q as Constraints, F as FallbackReason, H as HistoryCachePolicy, I as IntentDeclaration, M as Message, r as MutationApplied, s as NormalizedTokens, t as OutcomeKind, u as PerAxisMetricsByModel, v as PromptSection, w as SectionKind, x as ShadowProbeConfig, T as ToolCall, y as ToolDefinition } from './ir-D3n-pBYI.js';
1
+ import { C as CompilePolicy, N as NormalizedResponse, A as ApiKeys, P as ProviderOverrides, a as CompiledRequest, b as PromptIR, c as CallOptions, d as CallResult, S as SystemModelMessage, e as CompileResult, f as SectionRewrite, R as RecordInput, g as RecordOutcomeInput, O as OutcomeResult, h as OracleScore, B as BestPracticeAdvisory, i as Adapter, j as PerAxisMetrics, k as Provider, l as ChainEntry, G as Grounding } from './ir-rUUojj0s.js';
2
+ export { m as CallAttempt, n as CallError, o as ChainModelEntry, p as ChainWithGrounding, q as Constraints, F as FallbackReason, H as HistoryCachePolicy, I as IntentDeclaration, M as Message, r as MutationApplied, s as NormalizedTokens, t as OutcomeKind, u as PerAxisMetricsByModel, v as PromptSection, w as SectionKind, x as ShadowProbeConfig, T as ToolCall, y as ToolDefinition } from './ir-rUUojj0s.js';
3
3
  import { ModelProfile, ArchetypeConvention } from './profiles.js';
4
4
  export { ALIASES, CacheStrategy, CliffRule, LATENCY_TIER_MS, LatencyTier, LoweringSpec, RecoveryRule, StructuredOutputCapability, SystemPromptMode, allProfiles, getProfile, latencyTierOf, profilesByProvider, tryGetProfile } from './profiles.js';
5
5
  import { IntentArchetypeName } from './dialect.js';
@@ -436,6 +436,14 @@ interface ShadowProbeRecordInput {
436
436
  latencyCurrentMs?: number;
437
437
  /** Wall-clock latency of the candidate replay call, ms (alpha.46). */
438
438
  latencyCandidateMs?: number;
439
+ /**
440
+ * alpha — probe-row class (migration 029). Defaults to `'completed'` (the
441
+ * pre-029 row shape: candidate ran, columns populated). `'aborted_latency_budget'`
442
+ * and `'skipped_slow_tier_sync'` are DIAGNOSTIC rows from sync-mode latency
443
+ * protection — no candidate response, no verdict, no false quality signal. A
444
+ * verdict rollup MUST filter to `outcome='completed'`.
445
+ */
446
+ outcome?: 'completed' | 'aborted_latency_budget' | 'skipped_slow_tier_sync';
439
447
  }
440
448
  /**
441
449
  * Pure builder for the `probe_outcomes` row written by the inline shadow-probe.
@@ -467,6 +475,7 @@ declare function buildShadowProbeRow(input: ShadowProbeRecordInput): {
467
475
  latency_candidate_ms: number | null;
468
476
  prompt_fidelity: number;
469
477
  replay_source: 'inline-full-ir';
478
+ outcome: 'completed' | 'aborted_latency_budget' | 'skipped_slow_tier_sync';
470
479
  };
471
480
  /**
472
481
  * Persist one inline shadow-probe row to `probe_outcomes`. Fire-and-forget by