@warmdrift/kgauto-compiler 2.0.0-alpha.83 → 2.0.0-alpha.86

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.
@@ -611,9 +611,21 @@ var PROFILES_RAW = [
611
611
  },
612
612
  {
613
613
  id: "gemini-2.5-pro",
614
- verifiedAgainstDocs: "2026-05-08",
614
+ verifiedAgainstDocs: "2026-08-08",
615
615
  provider: "google",
616
- status: "current",
616
+ // alpha.86 — AVAILABILITY demotion, not a provider-lifecycle mirror.
617
+ // Google's docs still list 2.5-pro as Stable, but the serving layer
618
+ // disagrees per account cohort: tt-intel measured 4/4 refusals
619
+ // ("no longer available to new users", 2026-08-02, their bench), and
620
+ // kgauto's own key 429s on a FreeTier per-day quota (probed
621
+ // 2026-08-08). A chain anchor that hard-fails for whole account
622
+ // cohorts is not an anchor; `legacy` removes it from cost-ordered
623
+ // chains and new selection while keeping the profile resolvable for
624
+ // consumers who pass it explicitly. Re-promotion is one status flip
625
+ // if Google restores availability. The registry cannot yet express
626
+ // account-cohort availability as data — see interfaces/kgauto.md
627
+ // ## Requested 2026-08-02.
628
+ status: "legacy",
617
629
  maxContextTokens: 1048576,
618
630
  maxOutputTokens: 65535,
619
631
  maxTools: 128,
@@ -643,7 +655,7 @@ var PROFILES_RAW = [
643
655
  }
644
656
  ],
645
657
  strengths: ["reasoning", "1m_context", "structured_output", "tool_use"],
646
- weaknesses: ["pricing_above_200k"],
658
+ weaknesses: ["pricing_above_200k", "availability_restricted_by_account_cohort"],
647
659
  // Master plan §3.3 anchor: tier-2 cross-provider in almost every chain.
648
660
  // Sits on the frontier at perf-9 — close to Sonnet but cheaper input.
649
661
  archetypePerf: {
@@ -1666,6 +1678,9 @@ function _setProfileBrainHook(hook) {
1666
1678
  function canonicalId(id) {
1667
1679
  return brainHook.resolveAlias?.(id) ?? ALIASES[id] ?? id;
1668
1680
  }
1681
+ function resolveModelAlias(id) {
1682
+ return canonicalId(id);
1683
+ }
1669
1684
  var PROFILE_INDEX = new Map(
1670
1685
  PROFILES_RAW.map((p) => [p.id, p])
1671
1686
  );
@@ -1699,6 +1714,7 @@ export {
1699
1714
  latencyTierOf,
1700
1715
  ALIASES,
1701
1716
  _setProfileBrainHook,
1717
+ resolveModelAlias,
1702
1718
  getProfile,
1703
1719
  tryGetProfile,
1704
1720
  allProfiles,
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  allProfiles,
3
+ resolveModelAlias,
3
4
  tryGetProfile
4
- } from "./chunk-VVRDFE6T.mjs";
5
+ } from "./chunk-2MQIVVEU.mjs";
5
6
 
6
7
  // src/brain-query.ts
7
8
  var FRESH_SNAPSHOT = {
@@ -407,6 +408,17 @@ function isSameModelRetryEnabledFromEnv(envSource = defaultEnv()) {
407
408
  return raw === "1" || raw === "true";
408
409
  }
409
410
 
411
+ // src/policy-match.ts
412
+ function canonicalPolicySet(ids) {
413
+ const set = /* @__PURE__ */ new Set();
414
+ for (const id of ids ?? []) set.add(resolveModelAlias(id));
415
+ return set;
416
+ }
417
+ function policySetHas(set, modelId) {
418
+ if (set.size === 0) return false;
419
+ return set.has(resolveModelAlias(modelId));
420
+ }
421
+
410
422
  // src/fallback.ts
411
423
  var COST_RANKING_REFERENCE_SHAPE = {
412
424
  inputTokens: 4e3,
@@ -439,8 +451,14 @@ var STARTER_CHAINS_GROUNDED = {
439
451
  critique: [
440
452
  { id: "claude-opus-4-7", grounding: "judgment", reason: "Highest reasoning bar, no degradation tier \u2014 engineer pick, awaiting measured backing" },
441
453
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Same-provider walk-down from Opus on 429" },
442
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor in similar quality bracket" },
443
- { id: "gpt-5.5", grounding: "judgment", reason: "alpha.16: third-provider frontier-tier floor (archetypePerf=9)" }
454
+ // alpha.86: gemini-2.5-pro dropped availability-restricted (tt-intel
455
+ // measured 4/4 cohort refusal 2026-08-02; kgauto key free-tier-quota
456
+ // 429 2026-08-08). No current Google model clears the critique floor
457
+ // (3.5-flash critique=5; 3.1-pro-preview scores 10 but is preview —
458
+ // default chains carry promoted models only). deepseek-v4-pro takes the
459
+ // third-provider tail instead.
460
+ { id: "gpt-5.5", grounding: "judgment", reason: "alpha.16: third-provider frontier-tier floor (archetypePerf=9)" },
461
+ { id: "deepseek-v4-pro", grounding: "judgment", reason: "alpha.86: third-provider tail replacing availability-restricted gemini-2.5-pro \u2014 critique=6 clears the floor exactly; last-resort when Anthropic AND OpenAI are down, not a quality peer of the tiers above" }
444
462
  ],
445
463
  // alpha.62 (eval spine) — pairwise output comparison. Same reasoning-floor
446
464
  // posture as critique (a verdict from a weak judge is worse than no
@@ -449,14 +467,16 @@ var STARTER_CHAINS_GROUNDED = {
449
467
  judge: [
450
468
  { id: "claude-opus-4-8", grounding: "judgment", reason: "Highest reasoning bar for pairwise verdicts \u2014 current opus (s64 roster)" },
451
469
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Same-provider walk-down on 429" },
452
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor in similar quality bracket" },
453
- { id: "gpt-5.5", grounding: "judgment", reason: "Third-provider frontier-tier floor" }
470
+ // alpha.86: gemini-2.5-pro dropped (availability-restricted; see critique
471
+ // note). gpt-5.5 remains the cross-provider frontier floor for verdicts.
472
+ { id: "gpt-5.5", grounding: "judgment", reason: "Third-provider frontier-tier floor" },
473
+ { id: "deepseek-v4-pro", grounding: "judgment", reason: "alpha.86: third-provider tail replacing availability-restricted gemini-2.5-pro \u2014 native structured output per the judge contract; last-resort tier" }
454
474
  ],
455
475
  // Reasoning matters — Sonnet primary; walk UP to Opus on 429.
456
476
  plan: [
457
477
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Reasoning + cost balance \u2014 engineer pick" },
458
478
  { id: "claude-opus-4-7", grounding: "judgment", reason: 'Same-provider walk-UP on 429 (rare exception to "always cheaper")' },
459
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor" },
479
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor \u2014 replaces availability-restricted gemini-2.5-pro (tt-intel 4/4 cohort refusal 2026-08-02; probed serving 200 on kgauto key 2026-08-08)" },
460
480
  { id: "deepseek-v4-pro", grounding: "judgment", reason: "Tier 3 cost floor \u2014 no brain evidence yet" },
461
481
  { id: "gpt-5.4", grounding: "judgment", reason: "alpha.33: third-provider tail (archetypePerf=7) \u2014 closes openai-in-default-fallback-chains" }
462
482
  ],
@@ -464,7 +484,7 @@ var STARTER_CHAINS_GROUNDED = {
464
484
  generate: [
465
485
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Quality + cost match \u2014 engineer pick" },
466
486
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Same-provider step-down" },
467
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor" },
487
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor \u2014 replaces availability-restricted gemini-2.5-pro (tt-intel 4/4 cohort refusal 2026-08-02; probed serving 200 on kgauto key 2026-08-08)" },
468
488
  { id: "gpt-5.4-mini", grounding: "judgment", reason: "alpha.16: third-provider tail (archetypePerf=7) \u2014 closes mono-Anthropic gap" }
469
489
  ],
470
490
  // ask::sonnet — STARTER_CHAINS calls this "Quality + cost match" but
@@ -473,7 +493,7 @@ var STARTER_CHAINS_GROUNDED = {
473
493
  ask: [
474
494
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Quality + cost match \u2014 engineer pick. NOTE: tt-intel s78 prod showed 27% empty rate; placement awaits measurement validation" },
475
495
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Same-provider step-down" },
476
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor" },
496
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor \u2014 replaces availability-restricted gemini-2.5-pro (tt-intel 4/4 cohort refusal 2026-08-02; probed serving 200 on kgauto key 2026-08-08)" },
477
497
  { id: "gpt-5.4-mini", grounding: "judgment", reason: "alpha.16: third-provider tail (archetypePerf=7)" }
478
498
  ],
479
499
  // Structured-output archetype — Flash skipped (alpha.8 MAX_TOKENS cliff,
@@ -481,14 +501,14 @@ var STARTER_CHAINS_GROUNDED = {
481
501
  extract: [
482
502
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Reliable structured-output anchor \u2014 engineer pick" },
483
503
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Same-provider step-down with native structured output" },
484
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor with structured-output support" },
504
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor with native structured output \u2014 replaces availability-restricted gemini-2.5-pro" },
485
505
  { id: "gpt-5.4", grounding: "capability-fact", reason: "alpha.16: third-provider floor \u2014 native structured-output capability (archetypePerf=8)" }
486
506
  ],
487
507
  // Forgiving archetype — Sonnet primary but Flash safely floors it.
488
508
  transform: [
489
509
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Quality anchor \u2014 engineer pick" },
490
510
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Same-provider step-down" },
491
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor" },
511
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor \u2014 replaces availability-restricted gemini-2.5-pro (tt-intel 4/4 cohort refusal 2026-08-02; probed serving 200 on kgauto key 2026-08-08)" },
492
512
  { id: "gemini-2.5-flash", grounding: "judgment", reason: "Cost floor \u2014 forgiving archetype tolerates Flash" },
493
513
  { id: "gpt-5.4-mini", grounding: "judgment", reason: "alpha.33: third-provider tail (archetypePerf=7) \u2014 closes openai-in-default-fallback-chains" }
494
514
  ],
@@ -496,7 +516,7 @@ var STARTER_CHAINS_GROUNDED = {
496
516
  // (capability-fact: Flash 15-75 parallel calls/step vs DeepSeek 7-8).
497
517
  hunt: [
498
518
  { id: "gemini-2.5-flash", grounding: "capability-fact", reason: "L-040 parallel-tool throughput champion (15-75 calls/step)" },
499
- { id: "gemini-2.5-pro", grounding: "capability-fact", reason: "Cross-provider tier 1 with strong parallel-tool support" },
519
+ { id: "gemini-3.5-flash", grounding: "capability-fact", reason: "alpha.86: parallel-tool agentic tier (hunt archetypePerf 9, L-040 family) \u2014 replaces availability-restricted gemini-2.5-pro" },
500
520
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Quality safety net for blocked-Flash case" },
501
521
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Reduced tool budget \u2014 cliff at 16 fires" },
502
522
  { id: "gpt-5.4-mini", grounding: "judgment", reason: "alpha.33: third-provider tail \u2014 OpenAI parallel-tool capable archetype" }
@@ -544,9 +564,9 @@ var STARTER_CHAINS_BY_MODE_GROUNDED = {
544
564
  reason: "Cross-provider safety net \u2014 Sonnet handles sequential agentic loops cleanly"
545
565
  },
546
566
  {
547
- id: "gemini-2.5-pro",
567
+ id: "gemini-3.5-flash",
548
568
  grounding: "judgment",
549
- reason: "Third-provider tail when no DeepSeek key reachable"
569
+ reason: "alpha.86: third-provider tail when no DeepSeek key reachable \u2014 replaces availability-restricted gemini-2.5-pro"
550
570
  }
551
571
  ]
552
572
  }
@@ -599,8 +619,8 @@ function getDefaultFallbackChain(opts) {
599
619
  chain = [...starter];
600
620
  }
601
621
  if (policy?.blockedModels && policy.blockedModels.length > 0) {
602
- const blocked = new Set(policy.blockedModels);
603
- chain = chain.filter((id) => !blocked.has(id));
622
+ const blocked = canonicalPolicySet(policy.blockedModels);
623
+ chain = chain.filter((id) => !policySetHas(blocked, id));
604
624
  }
605
625
  const seen = /* @__PURE__ */ new Set();
606
626
  const deduped = [];
@@ -703,8 +723,8 @@ function getDefaultFallbackChainWithGrounding(opts) {
703
723
  chain = [...starter];
704
724
  }
705
725
  if (policy?.blockedModels && policy.blockedModels.length > 0) {
706
- const blocked = new Set(policy.blockedModels);
707
- chain = chain.filter((e) => !blocked.has(e.id));
726
+ const blocked = canonicalPolicySet(policy.blockedModels);
727
+ chain = chain.filter((e) => !policySetHas(blocked, e.id));
708
728
  }
709
729
  const seen = /* @__PURE__ */ new Set();
710
730
  const deduped = [];
@@ -803,6 +823,8 @@ export {
803
823
  ARCHETYPE_FLOOR_DEFAULT,
804
824
  ABSOLUTE_FLOOR,
805
825
  getModelCompatibility,
826
+ canonicalPolicySet,
827
+ policySetHas,
806
828
  loadArchetypePerfFromBrain,
807
829
  loadArchetypePerfNFromBrain,
808
830
  MEASURED_GROUNDING_MIN_N,
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var LIBRARY_VERSION = "2.0.0-alpha.83";
2
+ var LIBRARY_VERSION = "2.0.0-alpha.86";
3
3
 
4
4
  // src/key-health.ts
5
5
  var JSON_HEADERS = { "Content-Type": "application/json" };
@@ -1,6 +1,6 @@
1
- import { G as GlassboxEvent } from '../types-CRXaR7nJ.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-CRXaR7nJ.mjs';
3
- import '../ir-D4S9R816.mjs';
1
+ import { G as GlassboxEvent } from '../types-BiV-qN_x.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-BiV-qN_x.mjs';
3
+ import '../ir-5TJLAYKR.mjs';
4
4
  import '../dialect.mjs';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
- import { G as GlassboxEvent } from '../types-CAs9-0S4.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-CAs9-0S4.js';
3
- import '../ir-Cx9hJj0B.js';
1
+ import { G as GlassboxEvent } from '../types-C2H37XLR.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-C2H37XLR.js';
3
+ import '../ir-C1zmvAh6.js';
4
4
  import '../dialect.js';
5
5
 
6
6
  /**
@@ -1,5 +1,5 @@
1
- import { T as TraceHealth } from '../types-DHi4FcUu.mjs';
2
- import '../ir-D4S9R816.mjs';
1
+ import { T as TraceHealth } from '../types-BcYPDXgJ.mjs';
2
+ import '../ir-5TJLAYKR.mjs';
3
3
  import '../dialect.mjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as TraceHealth } from '../types-Cvd6kRNv.js';
2
- import '../ir-Cx9hJj0B.js';
1
+ import { T as TraceHealth } from '../types-8Goj1cKf.js';
2
+ import '../ir-C1zmvAh6.js';
3
3
  import '../dialect.js';
4
4
 
5
5
  /**
@@ -1,7 +1,7 @@
1
- import { G as GlassboxEvent } from '../types-CRXaR7nJ.mjs';
2
- import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-DHi4FcUu.mjs';
3
- export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-DHi4FcUu.mjs';
4
- import '../ir-D4S9R816.mjs';
1
+ import { G as GlassboxEvent } from '../types-BiV-qN_x.mjs';
2
+ import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-BcYPDXgJ.mjs';
3
+ export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-BcYPDXgJ.mjs';
4
+ import '../ir-5TJLAYKR.mjs';
5
5
  import '../dialect.mjs';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
- import { G as GlassboxEvent } from '../types-CAs9-0S4.js';
2
- import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-Cvd6kRNv.js';
3
- export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-Cvd6kRNv.js';
4
- import '../ir-Cx9hJj0B.js';
1
+ import { G as GlassboxEvent } from '../types-C2H37XLR.js';
2
+ import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-8Goj1cKf.js';
3
+ export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-8Goj1cKf.js';
4
+ import '../ir-C1zmvAh6.js';
5
5
  import '../dialect.js';
6
6
 
7
7
  /**
@@ -665,9 +665,21 @@ var PROFILES_RAW = [
665
665
  },
666
666
  {
667
667
  id: "gemini-2.5-pro",
668
- verifiedAgainstDocs: "2026-05-08",
668
+ verifiedAgainstDocs: "2026-08-08",
669
669
  provider: "google",
670
- status: "current",
670
+ // alpha.86 — AVAILABILITY demotion, not a provider-lifecycle mirror.
671
+ // Google's docs still list 2.5-pro as Stable, but the serving layer
672
+ // disagrees per account cohort: tt-intel measured 4/4 refusals
673
+ // ("no longer available to new users", 2026-08-02, their bench), and
674
+ // kgauto's own key 429s on a FreeTier per-day quota (probed
675
+ // 2026-08-08). A chain anchor that hard-fails for whole account
676
+ // cohorts is not an anchor; `legacy` removes it from cost-ordered
677
+ // chains and new selection while keeping the profile resolvable for
678
+ // consumers who pass it explicitly. Re-promotion is one status flip
679
+ // if Google restores availability. The registry cannot yet express
680
+ // account-cohort availability as data — see interfaces/kgauto.md
681
+ // ## Requested 2026-08-02.
682
+ status: "legacy",
671
683
  maxContextTokens: 1048576,
672
684
  maxOutputTokens: 65535,
673
685
  maxTools: 128,
@@ -697,7 +709,7 @@ var PROFILES_RAW = [
697
709
  }
698
710
  ],
699
711
  strengths: ["reasoning", "1m_context", "structured_output", "tool_use"],
700
- weaknesses: ["pricing_above_200k"],
712
+ weaknesses: ["pricing_above_200k", "availability_restricted_by_account_cohort"],
701
713
  // Master plan §3.3 anchor: tier-2 cross-provider in almost every chain.
702
714
  // Sits on the frontier at perf-9 — close to Sonnet but cheaper input.
703
715
  archetypePerf: {
@@ -1717,6 +1729,9 @@ var brainHook = {};
1717
1729
  function canonicalId(id) {
1718
1730
  return brainHook.resolveAlias?.(id) ?? ALIASES[id] ?? id;
1719
1731
  }
1732
+ function resolveModelAlias(id) {
1733
+ return canonicalId(id);
1734
+ }
1720
1735
  var PROFILE_INDEX = new Map(
1721
1736
  PROFILES_RAW.map((p) => [p.id, p])
1722
1737
  );
@@ -1891,6 +1906,17 @@ var loadChainsFromBrain = createBrainQueryCache({
1891
1906
  bundledFallback: getAllStarterChains
1892
1907
  });
1893
1908
 
1909
+ // src/policy-match.ts
1910
+ function canonicalPolicySet(ids) {
1911
+ const set = /* @__PURE__ */ new Set();
1912
+ for (const id of ids ?? []) set.add(resolveModelAlias(id));
1913
+ return set;
1914
+ }
1915
+ function policySetHas(set, modelId) {
1916
+ if (set.size === 0) return false;
1917
+ return set.has(resolveModelAlias(modelId));
1918
+ }
1919
+
1894
1920
  // src/archetype-perf-brain.ts
1895
1921
  function isPerfRow(x) {
1896
1922
  if (!x || typeof x !== "object") return false;
@@ -1975,8 +2001,14 @@ var STARTER_CHAINS_GROUNDED = {
1975
2001
  critique: [
1976
2002
  { id: "claude-opus-4-7", grounding: "judgment", reason: "Highest reasoning bar, no degradation tier \u2014 engineer pick, awaiting measured backing" },
1977
2003
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Same-provider walk-down from Opus on 429" },
1978
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor in similar quality bracket" },
1979
- { id: "gpt-5.5", grounding: "judgment", reason: "alpha.16: third-provider frontier-tier floor (archetypePerf=9)" }
2004
+ // alpha.86: gemini-2.5-pro dropped availability-restricted (tt-intel
2005
+ // measured 4/4 cohort refusal 2026-08-02; kgauto key free-tier-quota
2006
+ // 429 2026-08-08). No current Google model clears the critique floor
2007
+ // (3.5-flash critique=5; 3.1-pro-preview scores 10 but is preview —
2008
+ // default chains carry promoted models only). deepseek-v4-pro takes the
2009
+ // third-provider tail instead.
2010
+ { id: "gpt-5.5", grounding: "judgment", reason: "alpha.16: third-provider frontier-tier floor (archetypePerf=9)" },
2011
+ { id: "deepseek-v4-pro", grounding: "judgment", reason: "alpha.86: third-provider tail replacing availability-restricted gemini-2.5-pro \u2014 critique=6 clears the floor exactly; last-resort when Anthropic AND OpenAI are down, not a quality peer of the tiers above" }
1980
2012
  ],
1981
2013
  // alpha.62 (eval spine) — pairwise output comparison. Same reasoning-floor
1982
2014
  // posture as critique (a verdict from a weak judge is worse than no
@@ -1985,14 +2017,16 @@ var STARTER_CHAINS_GROUNDED = {
1985
2017
  judge: [
1986
2018
  { id: "claude-opus-4-8", grounding: "judgment", reason: "Highest reasoning bar for pairwise verdicts \u2014 current opus (s64 roster)" },
1987
2019
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Same-provider walk-down on 429" },
1988
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor in similar quality bracket" },
1989
- { id: "gpt-5.5", grounding: "judgment", reason: "Third-provider frontier-tier floor" }
2020
+ // alpha.86: gemini-2.5-pro dropped (availability-restricted; see critique
2021
+ // note). gpt-5.5 remains the cross-provider frontier floor for verdicts.
2022
+ { id: "gpt-5.5", grounding: "judgment", reason: "Third-provider frontier-tier floor" },
2023
+ { id: "deepseek-v4-pro", grounding: "judgment", reason: "alpha.86: third-provider tail replacing availability-restricted gemini-2.5-pro \u2014 native structured output per the judge contract; last-resort tier" }
1990
2024
  ],
1991
2025
  // Reasoning matters — Sonnet primary; walk UP to Opus on 429.
1992
2026
  plan: [
1993
2027
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Reasoning + cost balance \u2014 engineer pick" },
1994
2028
  { id: "claude-opus-4-7", grounding: "judgment", reason: 'Same-provider walk-UP on 429 (rare exception to "always cheaper")' },
1995
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor" },
2029
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor \u2014 replaces availability-restricted gemini-2.5-pro (tt-intel 4/4 cohort refusal 2026-08-02; probed serving 200 on kgauto key 2026-08-08)" },
1996
2030
  { id: "deepseek-v4-pro", grounding: "judgment", reason: "Tier 3 cost floor \u2014 no brain evidence yet" },
1997
2031
  { id: "gpt-5.4", grounding: "judgment", reason: "alpha.33: third-provider tail (archetypePerf=7) \u2014 closes openai-in-default-fallback-chains" }
1998
2032
  ],
@@ -2000,7 +2034,7 @@ var STARTER_CHAINS_GROUNDED = {
2000
2034
  generate: [
2001
2035
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Quality + cost match \u2014 engineer pick" },
2002
2036
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Same-provider step-down" },
2003
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor" },
2037
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor \u2014 replaces availability-restricted gemini-2.5-pro (tt-intel 4/4 cohort refusal 2026-08-02; probed serving 200 on kgauto key 2026-08-08)" },
2004
2038
  { id: "gpt-5.4-mini", grounding: "judgment", reason: "alpha.16: third-provider tail (archetypePerf=7) \u2014 closes mono-Anthropic gap" }
2005
2039
  ],
2006
2040
  // ask::sonnet — STARTER_CHAINS calls this "Quality + cost match" but
@@ -2009,7 +2043,7 @@ var STARTER_CHAINS_GROUNDED = {
2009
2043
  ask: [
2010
2044
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Quality + cost match \u2014 engineer pick. NOTE: tt-intel s78 prod showed 27% empty rate; placement awaits measurement validation" },
2011
2045
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Same-provider step-down" },
2012
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor" },
2046
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor \u2014 replaces availability-restricted gemini-2.5-pro (tt-intel 4/4 cohort refusal 2026-08-02; probed serving 200 on kgauto key 2026-08-08)" },
2013
2047
  { id: "gpt-5.4-mini", grounding: "judgment", reason: "alpha.16: third-provider tail (archetypePerf=7)" }
2014
2048
  ],
2015
2049
  // Structured-output archetype — Flash skipped (alpha.8 MAX_TOKENS cliff,
@@ -2017,14 +2051,14 @@ var STARTER_CHAINS_GROUNDED = {
2017
2051
  extract: [
2018
2052
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Reliable structured-output anchor \u2014 engineer pick" },
2019
2053
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Same-provider step-down with native structured output" },
2020
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor with structured-output support" },
2054
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor with native structured output \u2014 replaces availability-restricted gemini-2.5-pro" },
2021
2055
  { id: "gpt-5.4", grounding: "capability-fact", reason: "alpha.16: third-provider floor \u2014 native structured-output capability (archetypePerf=8)" }
2022
2056
  ],
2023
2057
  // Forgiving archetype — Sonnet primary but Flash safely floors it.
2024
2058
  transform: [
2025
2059
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Quality anchor \u2014 engineer pick" },
2026
2060
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Same-provider step-down" },
2027
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor" },
2061
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor \u2014 replaces availability-restricted gemini-2.5-pro (tt-intel 4/4 cohort refusal 2026-08-02; probed serving 200 on kgauto key 2026-08-08)" },
2028
2062
  { id: "gemini-2.5-flash", grounding: "judgment", reason: "Cost floor \u2014 forgiving archetype tolerates Flash" },
2029
2063
  { id: "gpt-5.4-mini", grounding: "judgment", reason: "alpha.33: third-provider tail (archetypePerf=7) \u2014 closes openai-in-default-fallback-chains" }
2030
2064
  ],
@@ -2032,7 +2066,7 @@ var STARTER_CHAINS_GROUNDED = {
2032
2066
  // (capability-fact: Flash 15-75 parallel calls/step vs DeepSeek 7-8).
2033
2067
  hunt: [
2034
2068
  { id: "gemini-2.5-flash", grounding: "capability-fact", reason: "L-040 parallel-tool throughput champion (15-75 calls/step)" },
2035
- { id: "gemini-2.5-pro", grounding: "capability-fact", reason: "Cross-provider tier 1 with strong parallel-tool support" },
2069
+ { id: "gemini-3.5-flash", grounding: "capability-fact", reason: "alpha.86: parallel-tool agentic tier (hunt archetypePerf 9, L-040 family) \u2014 replaces availability-restricted gemini-2.5-pro" },
2036
2070
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Quality safety net for blocked-Flash case" },
2037
2071
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Reduced tool budget \u2014 cliff at 16 fires" },
2038
2072
  { id: "gpt-5.4-mini", grounding: "judgment", reason: "alpha.33: third-provider tail \u2014 OpenAI parallel-tool capable archetype" }
@@ -2080,9 +2114,9 @@ var STARTER_CHAINS_BY_MODE_GROUNDED = {
2080
2114
  reason: "Cross-provider safety net \u2014 Sonnet handles sequential agentic loops cleanly"
2081
2115
  },
2082
2116
  {
2083
- id: "gemini-2.5-pro",
2117
+ id: "gemini-3.5-flash",
2084
2118
  grounding: "judgment",
2085
- reason: "Third-provider tail when no DeepSeek key reachable"
2119
+ reason: "alpha.86: third-provider tail when no DeepSeek key reachable \u2014 replaces availability-restricted gemini-2.5-pro"
2086
2120
  }
2087
2121
  ]
2088
2122
  }
@@ -2135,8 +2169,8 @@ function getDefaultFallbackChain(opts) {
2135
2169
  chain = [...starter];
2136
2170
  }
2137
2171
  if (policy?.blockedModels && policy.blockedModels.length > 0) {
2138
- const blocked = new Set(policy.blockedModels);
2139
- chain = chain.filter((id) => !blocked.has(id));
2172
+ const blocked = canonicalPolicySet(policy.blockedModels);
2173
+ chain = chain.filter((id) => !policySetHas(blocked, id));
2140
2174
  }
2141
2175
  const seen = /* @__PURE__ */ new Set();
2142
2176
  const deduped = [];
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  ARCHETYPE_FLOOR_DEFAULT,
3
3
  getDefaultFallbackChain
4
- } from "../chunk-XPD4I3Q5.mjs";
4
+ } from "../chunk-QDWOMQYN.mjs";
5
5
  import {
6
6
  tryGetProfile
7
- } from "../chunk-VVRDFE6T.mjs";
7
+ } from "../chunk-2MQIVVEU.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-DHi4FcUu.mjs';
3
- import '../../ir-D4S9R816.mjs';
2
+ import { a as TraceDetail } from '../../types-BcYPDXgJ.mjs';
3
+ import '../../ir-5TJLAYKR.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-Cvd6kRNv.js';
3
- import '../../ir-Cx9hJj0B.js';
2
+ import { a as TraceDetail } from '../../types-8Goj1cKf.js';
3
+ import '../../ir-C1zmvAh6.js';
4
4
  import '../../dialect.js';
5
5
 
6
6
  /**