@warmdrift/kgauto-compiler 2.0.0-alpha.95 → 2.0.0-alpha.96

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/dist/index.js CHANGED
@@ -1163,18 +1163,22 @@ var PROFILES_RAW = [
1163
1163
  maxContextTokens: 1e6,
1164
1164
  maxOutputTokens: 384e3,
1165
1165
  maxTools: 16,
1166
- parallelToolCalls: false,
1166
+ // alpha.96 — CORRECTED from `false`, which was AI-generated at greenfield
1167
+ // (2026-04-25) and never re-checked. Measured 2026-08-28 direct to
1168
+ // api.deepseek.com, no kgauto in the path, 6 tools offered, 3 trials:
1169
+ // 3 parallel tool calls returned, 3/3. L-040's original evidence said
1170
+ // "7-8 calls per step" — which was never a claim that only one tool may be
1171
+ // offered. See the note in lower.ts:lowerDeepSeek.
1172
+ parallelToolCalls: true,
1167
1173
  structuredOutput: "native",
1168
1174
  systemPromptMode: "inline",
1169
1175
  streaming: true,
1170
- cliffs: [
1171
- {
1172
- metric: "tool_count",
1173
- threshold: 1,
1174
- action: "drop_to_top_relevant",
1175
- reason: "Sequential tool calls only \u2014 L-040"
1176
- }
1177
- ],
1176
+ // alpha.96 — the `tool_count@1 -> drop_to_top_relevant` cliff was DELETED.
1177
+ // It restated `parallelToolCalls: false` as a threshold and was falsified by
1178
+ // the same measurement. It is not kept-and-flagged (the usual lifecycle)
1179
+ // because it was never a real failure mode: it was a second enforcement of a
1180
+ // wrong belief, and keeping it active would keep amputating tools.
1181
+ cliffs: [],
1178
1182
  costInputPer1m: 0.44,
1179
1183
  costOutputPer1m: 1.32,
1180
1184
  lowering: {
@@ -1186,7 +1190,12 @@ var PROFILES_RAW = [
1186
1190
  { signal: "rate_limit", action: "escalate", reason: "429 \u2014 escalate" }
1187
1191
  ],
1188
1192
  strengths: ["cost", "1m_context", "json_output", "code", "reasoning"],
1189
- weaknesses: ["parallel_tools", "large_tool_sets"],
1193
+ // alpha.96 — 'parallel_tools' REMOVED: measurably false (2026-08-28, direct
1194
+ // to api.deepseek.com, 6 tools, 3 trials, 3 parallel calls, both models).
1195
+ // 'large_tool_sets' KEPT and explicitly unverified — the probe offered 6 of
1196
+ // a declared maxTools 16, so it says nothing about behaviour at 16. Not
1197
+ // falsified is not the same as confirmed.
1198
+ weaknesses: ["large_tool_sets"],
1190
1199
  // alpha.47 — explicit slow override. Tag derivation would say 'medium'
1191
1200
  // (no 'latency' weakness, no 'speed' strength), but the alpha.46 shadow
1192
1201
  // probe MEASURED deepseek-v4-flash at 20485ms served (2026-06-03) — ~2.3×
@@ -1198,7 +1207,11 @@ var PROFILES_RAW = [
1198
1207
  notes: "Cheap workhorse. 1M context, 384k max output. Cache-hit input $0.0028/M (1/50\xD7 of miss). Aliased as `deepseek-chat` (non-thinking) and `deepseek-reasoner` (thinking) \u2014 see ALIASES. PEAK/OFF-PEAK since 2026-08-16 (page fetched 2026-08-24): peak = weekdays 01:00-04:00 + 06:00-10:00 UTC, off-peak = all other hours at HALF peak. Encoded prices ARE the peak rate (conservative: never understate cost); off-peak traffic costs half what the estimate says. alpha.87 was built + verified 2026-08-14 (prices then live), held at the publish gate 10 days, and published 2026-08-24 \u2014 by which time the 08-16 transition had killed them ($0.14/$0.28 flash, $0.435/$0.87 pro); corrected here (alpha.88). Build-then-hold is the mechanism: re-verify prices at publish when publish is not same-session as build. A single price field cannot represent a two-rate schedule; catalog-sync extractions oscillate between the rates day-to-day (peak read 08-21, off-peak read 08-22) \u2014 time-of-day pricing remains unmodeled, roadmap.",
1199
1208
  // Master plan §6.2 anchor. Brain-validated tier 1 cross-provider for
1200
1209
  // classify (169 rows, 0% empty). Tier 0 for summarize-with-no-tools.
1201
- // Falls off on hunt (sequential tools L-040) and reasoning depth.
1210
+ // alpha.96 the hunt half of this sentence is RETRACTED: "sequential tools
1211
+ // — L-040" was falsified 2026-08-28 (direct measurement, 3 parallel tool
1212
+ // calls, both models). Do not use this comment to re-lower `hunt`; it is
1213
+ // the exact prose that justified the wrong score. The reasoning-depth
1214
+ // rationale is untouched and still carries `critique`.
1202
1215
  archetypePerf: {
1203
1216
  classify: 7,
1204
1217
  // brain-validated, 169 rows
@@ -1210,8 +1223,16 @@ var PROFILES_RAW = [
1210
1223
  plan: 5,
1211
1224
  extract: 5,
1212
1225
  critique: 4,
1213
- hunt: 4
1214
- // sequential tool calls only — L-040
1226
+ // alpha.96 — was 4. Its ONLY written justification was "sequential tool
1227
+ // calls only — L-040", which is falsified. A score derived from a false
1228
+ // premise cannot be kept, and re-guessing a penalty would just relaunder
1229
+ // the same belief. Set to the floor (6) = "no evidence of deficiency",
1230
+ // NOT an endorsement. This is a JUDGMENT, not a measurement, and it is
1231
+ // the honest direction of the two: the only hunt-shaped evidence we have
1232
+ // is positive (a research-agent fixture, 3 of 3 demanded tools correctly
1233
+ // selected from a 6-tool menu, 3/3 trials, both models). Replace with a
1234
+ // real number from the golden-eval hunt corpus — that is what it is for.
1235
+ hunt: 6
1215
1236
  },
1216
1237
  // alpha.43 — family-level conventions for the `deepseek-chat` family
1217
1238
  // (V4-Flash + future non-thinking-mode members). V4-Flash struggles
@@ -1236,18 +1257,22 @@ var PROFILES_RAW = [
1236
1257
  maxContextTokens: 1e6,
1237
1258
  maxOutputTokens: 384e3,
1238
1259
  maxTools: 16,
1239
- parallelToolCalls: false,
1260
+ // alpha.96 — CORRECTED from `false`, which was AI-generated at greenfield
1261
+ // (2026-04-25) and never re-checked. Measured 2026-08-28 direct to
1262
+ // api.deepseek.com, no kgauto in the path, 6 tools offered, 3 trials:
1263
+ // 3 parallel tool calls returned, 3/3. L-040's original evidence said
1264
+ // "7-8 calls per step" — which was never a claim that only one tool may be
1265
+ // offered. See the note in lower.ts:lowerDeepSeek.
1266
+ parallelToolCalls: true,
1240
1267
  structuredOutput: "native",
1241
1268
  systemPromptMode: "inline",
1242
1269
  streaming: true,
1243
- cliffs: [
1244
- {
1245
- metric: "tool_count",
1246
- threshold: 1,
1247
- action: "drop_to_top_relevant",
1248
- reason: "Sequential tool calls only \u2014 L-040"
1249
- }
1250
- ],
1270
+ // alpha.96 — the `tool_count@1 -> drop_to_top_relevant` cliff was DELETED.
1271
+ // It restated `parallelToolCalls: false` as a threshold and was falsified by
1272
+ // the same measurement. It is not kept-and-flagged (the usual lifecycle)
1273
+ // because it was never a real failure mode: it was a second enforcement of a
1274
+ // wrong belief, and keeping it active would keep amputating tools.
1275
+ cliffs: [],
1251
1276
  // Verified against the live DeepSeek pricing page 2026-06-22: the 75%-off
1252
1277
  // launch "promo" ($0.435/$0.87) did NOT revert on 2026-05-31 — it became the
1253
1278
  // standing price (docs show $0.435 in / $0.87 out cache-miss, $0.003625
@@ -1265,7 +1290,12 @@ var PROFILES_RAW = [
1265
1290
  { signal: "rate_limit", action: "escalate", reason: "429 \u2014 escalate" }
1266
1291
  ],
1267
1292
  strengths: ["quality", "reasoning", "1m_context", "json_output", "code", "extended_thinking"],
1268
- weaknesses: ["parallel_tools", "large_tool_sets"],
1293
+ // alpha.96 — 'parallel_tools' REMOVED: measurably false (2026-08-28, direct
1294
+ // to api.deepseek.com, 6 tools, 3 trials, 3 parallel calls, both models).
1295
+ // 'large_tool_sets' KEPT and explicitly unverified — the probe offered 6 of
1296
+ // a declared maxTools 16, so it says nothing about behaviour at 16. Not
1297
+ // falsified is not the same as confirmed.
1298
+ weaknesses: ["large_tool_sets"],
1269
1299
  // alpha.47 — explicit slow override. Measured 47722ms on the alpha.46
1270
1300
  // shadow probe (2026-06-03) — it's an extended-thinking reasoner, slowest
1271
1301
  // of the served set. Tag derivation would say 'medium'; the measurement says
@@ -1284,14 +1314,24 @@ var PROFILES_RAW = [
1284
1314
  summarize: 7,
1285
1315
  extract: 6,
1286
1316
  transform: 6,
1287
- hunt: 4
1288
- // sequential toolssame as V4-Flash
1317
+ // alpha.96 — was 4. Its ONLY written justification was "sequential tool
1318
+ // calls onlyL-040", which is falsified. A score derived from a false
1319
+ // premise cannot be kept, and re-guessing a penalty would just relaunder
1320
+ // the same belief. Set to the floor (6) = "no evidence of deficiency",
1321
+ // NOT an endorsement. This is a JUDGMENT, not a measurement, and it is
1322
+ // the honest direction of the two: the only hunt-shaped evidence we have
1323
+ // is positive (a research-agent fixture, 3 of 3 demanded tools correctly
1324
+ // selected from a 6-tool menu, 3/3 trials, both models). Replace with a
1325
+ // real number from the golden-eval hunt corpus — that is what it is for.
1326
+ hunt: 6
1289
1327
  },
1290
1328
  // alpha.43 — family-level conventions for the `deepseek-reasoner` family
1291
1329
  // (V4-Pro is the family rep; future thinking-mode members inherit).
1292
1330
  //
1293
- // The decisive-archetype suffix is the load-bearing piece: 2026-05-28
1294
- // first real V4-Pro probe on tt-intel/classify (exclusion-finding ID 20)
1331
+ // The decisive-archetype suffix is the load-bearing piece. ⚠️ alpha.96:
1332
+ // its evidence was purged as poison on 2026-05-29 (s51) retained as a
1333
+ // hypothesis, not a finding. Original claim, for the record: 2026-05-28
1334
+ // first real V4-Pro probe on tt-intel/classify
1295
1335
  // showed 8/10 judge rationales citing "candidate hedges and fails to
1296
1336
  // commit to a single classification" or "candidate refuses to pick
1297
1337
  // among the labels." Without the forcing-function suffix, every
@@ -1312,24 +1352,35 @@ var PROFILES_RAW = [
1312
1352
  {
1313
1353
  archetype: "classify",
1314
1354
  promptSuffix: "\n\nOutput exactly one classification label. Do not hedge, do not add preamble, do not explain your reasoning. If uncertain, pick the most likely label and commit to it.",
1315
- reason: "Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. Evidence: 2026-05-28 V4-Pro probe on tt-intel/classify (exclusion-finding ID 20, brain probe_outcomes); 8 of 10 judge rationales cited hedging or refusal-to-commit. Forcing-function suffix converts reasoner output to decisive labels."
1355
+ reason: 'Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. UNEVIDENCED HYPOTHESIS as of alpha.96 \u2014 this reason used to cite a 2026-05-28 V4-Pro probe on tt-intel/classify ("8 of 10 judge rationales cited hedging") and named `brain probe_outcomes` as its source. That source is EMPTY: probed 2026-08-28, zero probe_outcomes rows exist before 2026-06-01 and zero `classify` rows have ever existed. The probe was deleted on 2026-05-29 by the s51 poison purge \u2014 it replayed against truncated `prompt_preview`, which s51 established yields meaningless verdicts. The conclusion outlived the purge of its own evidence and kept shaping prompts for three months. The pointer was wrong too: exclusion-finding ID 20 is a zero-calls `recommend-probe` on classify, confidence low, later declined \u2014 the probe TRIGGER, never its result. KEPT because a promptSuffix is capability-PRESERVING (adds an instruction, removes nothing a raw call had) and is visible in mutations_applied. Re-evidence from the golden-eval corpus or drop it.'
1316
1356
  },
1317
1357
  {
1318
1358
  archetype: "extract",
1319
1359
  promptSuffix: "\n\nOutput exactly the requested structured fields. Do not hedge, do not add preamble, do not explain your reasoning. If a field is unknown, emit the field with a null/empty value and commit to that \u2014 do not refuse to extract.",
1320
- reason: "Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. Evidence: same family failure shape as classify (exclusion-finding ID 20, 2026-05-28). Forcing-function suffix asks for commitment instead of epistemic-humility hedging."
1360
+ reason: 'Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. UNEVIDENCED HYPOTHESIS as of alpha.96 \u2014 the supporting evidence NO LONGER EXISTS. The cited 2026-05-28 V4-Pro classify probe ("8/10 judge rationales") was deleted on 2026-05-29 by the s51 poison purge, because it replayed against truncated `prompt_preview` and s51 established such verdicts are meaningless. Probed: zero probe_outcomes rows exist before 2026-06-01 and zero `classify` rows have EVER existed. The pointer was also wrong \u2014 exclusion-finding ID 20 is a zero-calls `recommend-probe` on classify, confidence low, later declined; it was the trigger for the probe, never its result. KEPT anyway because a promptSuffix is capability-PRESERVING (it adds an instruction and removes nothing a raw call had), so the cost of being wrong is bounded and a consumer can see it in mutations_applied. Re-evidence it from the golden-eval corpus or drop it.'
1321
1361
  },
1322
1362
  {
1323
1363
  archetype: "ask",
1324
1364
  promptSuffix: "\n\nAnswer the question directly. Do not hedge, do not add preamble, do not explain your reasoning unless explicitly asked. If uncertain, give your best answer and commit to it.",
1325
- reason: "Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. Evidence: same family failure shape as classify (exclusion-finding ID 20, 2026-05-28). Forcing-function suffix asks for commitment instead of epistemic-humility hedging."
1326
- },
1327
- {
1328
- archetype: "hunt",
1329
- whenToolCountAtLeast: 3,
1330
- cliffWarning: "Reasoners (deepseek-reasoner family) produce sequential reasoning chains by design; hunt archetypes with 3+ parallel tools lose substantial throughput. Consider gemini-flash family (parallel-strong) instead \u2014 see L-040 / L-041.",
1331
- reason: "L-040 + L-041 architectural reading; 2026-05-28 V4-Pro probe evidence (exclusion-finding ID 20) confirms reasoner-family hunt fit is structurally weak."
1365
+ reason: 'Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. UNEVIDENCED HYPOTHESIS as of alpha.96 \u2014 the supporting evidence NO LONGER EXISTS. The cited 2026-05-28 V4-Pro classify probe ("8/10 judge rationales") was deleted on 2026-05-29 by the s51 poison purge, because it replayed against truncated `prompt_preview` and s51 established such verdicts are meaningless. Probed: zero probe_outcomes rows exist before 2026-06-01 and zero `classify` rows have EVER existed. The pointer was also wrong \u2014 exclusion-finding ID 20 is a zero-calls `recommend-probe` on classify, confidence low, later declined; it was the trigger for the probe, never its result. KEPT anyway because a promptSuffix is capability-PRESERVING (it adds an instruction and removes nothing a raw call had), so the cost of being wrong is bounded and a consumer can see it in mutations_applied. Re-evidence it from the golden-eval corpus or drop it.'
1332
1366
  }
1367
+ // alpha.96 — the `hunt` convention was DELETED, not corrected.
1368
+ // It warned that "hunt archetypes with 3+ parallel tools lose substantial
1369
+ // throughput" and steered callers to gemini-flash. Measured false
1370
+ // 2026-08-28: 6 tools offered, 3 of 3 demanded served in parallel, 3/3
1371
+ // trials, both V4 models, direct to the provider.
1372
+ //
1373
+ // Its cited evidence did not say what it claimed. exclusion-finding ID 20
1374
+ // is `intent_archetype: 'classify'` (not hunt), `verdict:
1375
+ // 'recommend-probe'` (i.e. NOBODY PROBED), `confidence: 'low'`, its
1376
+ // message reads "deepseek-v4-pro has zero calls", it was later
1377
+ // `declined`, and its own `parallel_tool_hint: false` was this profile's
1378
+ // own belief round-tripped back as input. A no-data finding on the wrong
1379
+ // archetype was paraphrased into "probe evidence confirms".
1380
+ //
1381
+ // Deleted rather than re-scoped because a cliffWarning is
1382
+ // capability-REDUCING (it steers traffic away from a model) and nothing
1383
+ // evidenced remains. Re-add only from a measured hunt eval.
1333
1384
  ]
1334
1385
  },
1335
1386
  // ── OpenAI ──
@@ -3775,7 +3826,7 @@ function lower(ir, profile, hints = {}) {
3775
3826
  case "openai":
3776
3827
  return lowerOpenAI(ir, profile, hints);
3777
3828
  case "deepseek":
3778
- return lowerDeepSeek(ir, profile);
3829
+ return lowerDeepSeek(ir, profile, hints);
3779
3830
  case "zai":
3780
3831
  return lowerZai(ir, profile, hints);
3781
3832
  case "moonshot":
@@ -4036,7 +4087,7 @@ function toOpenAITools(tools) {
4036
4087
  }
4037
4088
  }));
4038
4089
  }
4039
- function lowerDeepSeek(ir, profile) {
4090
+ function lowerDeepSeek(ir, profile, hints) {
4040
4091
  const ordered = sortSections(ir.sections);
4041
4092
  const systemText = ordered.map((s) => s.text).join("\n\n");
4042
4093
  const messages = systemText ? [{ role: "system", content: systemText }] : [];
@@ -4058,7 +4109,8 @@ function lowerDeepSeek(ir, profile) {
4058
4109
  provider: "deepseek",
4059
4110
  model: profile.id,
4060
4111
  messages,
4061
- tools: ir.tools && ir.tools.length > 0 ? ir.tools.slice(0, 1).map((t) => ({
4112
+ // Every tool the IR carries. Never fewer see the note above.
4113
+ tools: ir.tools && ir.tools.length > 0 ? ir.tools.map((t) => ({
4062
4114
  type: "function",
4063
4115
  function: {
4064
4116
  name: t.name,
@@ -6574,7 +6626,7 @@ function validateFinalFit(ir, profile, tokens) {
6574
6626
  }
6575
6627
 
6576
6628
  // src/version.ts
6577
- var LIBRARY_VERSION = "2.0.0-alpha.95";
6629
+ var LIBRARY_VERSION = "2.0.0-alpha.96";
6578
6630
 
6579
6631
  // src/pricing-brain.ts
6580
6632
  function isPricingRow(x) {
package/dist/index.mjs CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  LIBRARY_VERSION,
8
8
  createKeyHealthRoute,
9
9
  keyFingerprint
10
- } from "./chunk-JFM5A556.mjs";
10
+ } from "./chunk-26IS3Y6Z.mjs";
11
11
  import {
12
12
  ARCHETYPE_FAMILY_FITS,
13
13
  BLOCKED_MODEL_FAMILY_SIBLING_SERVED_CODE,
@@ -63,7 +63,7 @@ import {
63
63
  runAdvisor,
64
64
  setTokenizer,
65
65
  wilsonLowerBound
66
- } from "./chunk-IRXC7WEQ.mjs";
66
+ } from "./chunk-SRPRNTDT.mjs";
67
67
  import {
68
68
  ABSOLUTE_FLOOR,
69
69
  ARCHETYPE_FLOOR_DEFAULT,
@@ -100,7 +100,7 @@ import {
100
100
  policySetHas,
101
101
  readBrainReadEnv,
102
102
  resolveProviderKey
103
- } from "./chunk-BJD75WCL.mjs";
103
+ } from "./chunk-2D4H7HGZ.mjs";
104
104
  import {
105
105
  ALL_ARCHETYPES,
106
106
  DIALECT_VERSION,
@@ -127,7 +127,7 @@ import {
127
127
  registerProfiles,
128
128
  resolveModelAlias,
129
129
  tryGetProfile
130
- } from "./chunk-D3BVYXNA.mjs";
130
+ } from "./chunk-AMV3M2KH.mjs";
131
131
  import {
132
132
  emitAdvisoryFired,
133
133
  emitCompileDone,
@@ -28,7 +28,7 @@ __export(key_health_exports, {
28
28
  module.exports = __toCommonJS(key_health_exports);
29
29
 
30
30
  // src/version.ts
31
- var LIBRARY_VERSION = "2.0.0-alpha.95";
31
+ var LIBRARY_VERSION = "2.0.0-alpha.96";
32
32
 
33
33
  // src/key-health.ts
34
34
  var JSON_HEADERS = { "Content-Type": "application/json" };
@@ -3,7 +3,7 @@ import {
3
3
  KEY_FINGERPRINT_LENGTH,
4
4
  createKeyHealthRoute,
5
5
  keyFingerprint
6
- } from "./chunk-JFM5A556.mjs";
6
+ } from "./chunk-26IS3Y6Z.mjs";
7
7
  export {
8
8
  KEY_FINGERPRINT_DOMAIN,
9
9
  KEY_FINGERPRINT_LENGTH,
package/dist/probe.js CHANGED
@@ -905,18 +905,22 @@ var PROFILES_RAW = [
905
905
  maxContextTokens: 1e6,
906
906
  maxOutputTokens: 384e3,
907
907
  maxTools: 16,
908
- parallelToolCalls: false,
908
+ // alpha.96 — CORRECTED from `false`, which was AI-generated at greenfield
909
+ // (2026-04-25) and never re-checked. Measured 2026-08-28 direct to
910
+ // api.deepseek.com, no kgauto in the path, 6 tools offered, 3 trials:
911
+ // 3 parallel tool calls returned, 3/3. L-040's original evidence said
912
+ // "7-8 calls per step" — which was never a claim that only one tool may be
913
+ // offered. See the note in lower.ts:lowerDeepSeek.
914
+ parallelToolCalls: true,
909
915
  structuredOutput: "native",
910
916
  systemPromptMode: "inline",
911
917
  streaming: true,
912
- cliffs: [
913
- {
914
- metric: "tool_count",
915
- threshold: 1,
916
- action: "drop_to_top_relevant",
917
- reason: "Sequential tool calls only \u2014 L-040"
918
- }
919
- ],
918
+ // alpha.96 — the `tool_count@1 -> drop_to_top_relevant` cliff was DELETED.
919
+ // It restated `parallelToolCalls: false` as a threshold and was falsified by
920
+ // the same measurement. It is not kept-and-flagged (the usual lifecycle)
921
+ // because it was never a real failure mode: it was a second enforcement of a
922
+ // wrong belief, and keeping it active would keep amputating tools.
923
+ cliffs: [],
920
924
  costInputPer1m: 0.44,
921
925
  costOutputPer1m: 1.32,
922
926
  lowering: {
@@ -928,7 +932,12 @@ var PROFILES_RAW = [
928
932
  { signal: "rate_limit", action: "escalate", reason: "429 \u2014 escalate" }
929
933
  ],
930
934
  strengths: ["cost", "1m_context", "json_output", "code", "reasoning"],
931
- weaknesses: ["parallel_tools", "large_tool_sets"],
935
+ // alpha.96 — 'parallel_tools' REMOVED: measurably false (2026-08-28, direct
936
+ // to api.deepseek.com, 6 tools, 3 trials, 3 parallel calls, both models).
937
+ // 'large_tool_sets' KEPT and explicitly unverified — the probe offered 6 of
938
+ // a declared maxTools 16, so it says nothing about behaviour at 16. Not
939
+ // falsified is not the same as confirmed.
940
+ weaknesses: ["large_tool_sets"],
932
941
  // alpha.47 — explicit slow override. Tag derivation would say 'medium'
933
942
  // (no 'latency' weakness, no 'speed' strength), but the alpha.46 shadow
934
943
  // probe MEASURED deepseek-v4-flash at 20485ms served (2026-06-03) — ~2.3×
@@ -940,7 +949,11 @@ var PROFILES_RAW = [
940
949
  notes: "Cheap workhorse. 1M context, 384k max output. Cache-hit input $0.0028/M (1/50\xD7 of miss). Aliased as `deepseek-chat` (non-thinking) and `deepseek-reasoner` (thinking) \u2014 see ALIASES. PEAK/OFF-PEAK since 2026-08-16 (page fetched 2026-08-24): peak = weekdays 01:00-04:00 + 06:00-10:00 UTC, off-peak = all other hours at HALF peak. Encoded prices ARE the peak rate (conservative: never understate cost); off-peak traffic costs half what the estimate says. alpha.87 was built + verified 2026-08-14 (prices then live), held at the publish gate 10 days, and published 2026-08-24 \u2014 by which time the 08-16 transition had killed them ($0.14/$0.28 flash, $0.435/$0.87 pro); corrected here (alpha.88). Build-then-hold is the mechanism: re-verify prices at publish when publish is not same-session as build. A single price field cannot represent a two-rate schedule; catalog-sync extractions oscillate between the rates day-to-day (peak read 08-21, off-peak read 08-22) \u2014 time-of-day pricing remains unmodeled, roadmap.",
941
950
  // Master plan §6.2 anchor. Brain-validated tier 1 cross-provider for
942
951
  // classify (169 rows, 0% empty). Tier 0 for summarize-with-no-tools.
943
- // Falls off on hunt (sequential tools L-040) and reasoning depth.
952
+ // alpha.96 the hunt half of this sentence is RETRACTED: "sequential tools
953
+ // — L-040" was falsified 2026-08-28 (direct measurement, 3 parallel tool
954
+ // calls, both models). Do not use this comment to re-lower `hunt`; it is
955
+ // the exact prose that justified the wrong score. The reasoning-depth
956
+ // rationale is untouched and still carries `critique`.
944
957
  archetypePerf: {
945
958
  classify: 7,
946
959
  // brain-validated, 169 rows
@@ -952,8 +965,16 @@ var PROFILES_RAW = [
952
965
  plan: 5,
953
966
  extract: 5,
954
967
  critique: 4,
955
- hunt: 4
956
- // sequential tool calls only — L-040
968
+ // alpha.96 — was 4. Its ONLY written justification was "sequential tool
969
+ // calls only — L-040", which is falsified. A score derived from a false
970
+ // premise cannot be kept, and re-guessing a penalty would just relaunder
971
+ // the same belief. Set to the floor (6) = "no evidence of deficiency",
972
+ // NOT an endorsement. This is a JUDGMENT, not a measurement, and it is
973
+ // the honest direction of the two: the only hunt-shaped evidence we have
974
+ // is positive (a research-agent fixture, 3 of 3 demanded tools correctly
975
+ // selected from a 6-tool menu, 3/3 trials, both models). Replace with a
976
+ // real number from the golden-eval hunt corpus — that is what it is for.
977
+ hunt: 6
957
978
  },
958
979
  // alpha.43 — family-level conventions for the `deepseek-chat` family
959
980
  // (V4-Flash + future non-thinking-mode members). V4-Flash struggles
@@ -978,18 +999,22 @@ var PROFILES_RAW = [
978
999
  maxContextTokens: 1e6,
979
1000
  maxOutputTokens: 384e3,
980
1001
  maxTools: 16,
981
- parallelToolCalls: false,
1002
+ // alpha.96 — CORRECTED from `false`, which was AI-generated at greenfield
1003
+ // (2026-04-25) and never re-checked. Measured 2026-08-28 direct to
1004
+ // api.deepseek.com, no kgauto in the path, 6 tools offered, 3 trials:
1005
+ // 3 parallel tool calls returned, 3/3. L-040's original evidence said
1006
+ // "7-8 calls per step" — which was never a claim that only one tool may be
1007
+ // offered. See the note in lower.ts:lowerDeepSeek.
1008
+ parallelToolCalls: true,
982
1009
  structuredOutput: "native",
983
1010
  systemPromptMode: "inline",
984
1011
  streaming: true,
985
- cliffs: [
986
- {
987
- metric: "tool_count",
988
- threshold: 1,
989
- action: "drop_to_top_relevant",
990
- reason: "Sequential tool calls only \u2014 L-040"
991
- }
992
- ],
1012
+ // alpha.96 — the `tool_count@1 -> drop_to_top_relevant` cliff was DELETED.
1013
+ // It restated `parallelToolCalls: false` as a threshold and was falsified by
1014
+ // the same measurement. It is not kept-and-flagged (the usual lifecycle)
1015
+ // because it was never a real failure mode: it was a second enforcement of a
1016
+ // wrong belief, and keeping it active would keep amputating tools.
1017
+ cliffs: [],
993
1018
  // Verified against the live DeepSeek pricing page 2026-06-22: the 75%-off
994
1019
  // launch "promo" ($0.435/$0.87) did NOT revert on 2026-05-31 — it became the
995
1020
  // standing price (docs show $0.435 in / $0.87 out cache-miss, $0.003625
@@ -1007,7 +1032,12 @@ var PROFILES_RAW = [
1007
1032
  { signal: "rate_limit", action: "escalate", reason: "429 \u2014 escalate" }
1008
1033
  ],
1009
1034
  strengths: ["quality", "reasoning", "1m_context", "json_output", "code", "extended_thinking"],
1010
- weaknesses: ["parallel_tools", "large_tool_sets"],
1035
+ // alpha.96 — 'parallel_tools' REMOVED: measurably false (2026-08-28, direct
1036
+ // to api.deepseek.com, 6 tools, 3 trials, 3 parallel calls, both models).
1037
+ // 'large_tool_sets' KEPT and explicitly unverified — the probe offered 6 of
1038
+ // a declared maxTools 16, so it says nothing about behaviour at 16. Not
1039
+ // falsified is not the same as confirmed.
1040
+ weaknesses: ["large_tool_sets"],
1011
1041
  // alpha.47 — explicit slow override. Measured 47722ms on the alpha.46
1012
1042
  // shadow probe (2026-06-03) — it's an extended-thinking reasoner, slowest
1013
1043
  // of the served set. Tag derivation would say 'medium'; the measurement says
@@ -1026,14 +1056,24 @@ var PROFILES_RAW = [
1026
1056
  summarize: 7,
1027
1057
  extract: 6,
1028
1058
  transform: 6,
1029
- hunt: 4
1030
- // sequential toolssame as V4-Flash
1059
+ // alpha.96 — was 4. Its ONLY written justification was "sequential tool
1060
+ // calls onlyL-040", which is falsified. A score derived from a false
1061
+ // premise cannot be kept, and re-guessing a penalty would just relaunder
1062
+ // the same belief. Set to the floor (6) = "no evidence of deficiency",
1063
+ // NOT an endorsement. This is a JUDGMENT, not a measurement, and it is
1064
+ // the honest direction of the two: the only hunt-shaped evidence we have
1065
+ // is positive (a research-agent fixture, 3 of 3 demanded tools correctly
1066
+ // selected from a 6-tool menu, 3/3 trials, both models). Replace with a
1067
+ // real number from the golden-eval hunt corpus — that is what it is for.
1068
+ hunt: 6
1031
1069
  },
1032
1070
  // alpha.43 — family-level conventions for the `deepseek-reasoner` family
1033
1071
  // (V4-Pro is the family rep; future thinking-mode members inherit).
1034
1072
  //
1035
- // The decisive-archetype suffix is the load-bearing piece: 2026-05-28
1036
- // first real V4-Pro probe on tt-intel/classify (exclusion-finding ID 20)
1073
+ // The decisive-archetype suffix is the load-bearing piece. ⚠️ alpha.96:
1074
+ // its evidence was purged as poison on 2026-05-29 (s51) retained as a
1075
+ // hypothesis, not a finding. Original claim, for the record: 2026-05-28
1076
+ // first real V4-Pro probe on tt-intel/classify
1037
1077
  // showed 8/10 judge rationales citing "candidate hedges and fails to
1038
1078
  // commit to a single classification" or "candidate refuses to pick
1039
1079
  // among the labels." Without the forcing-function suffix, every
@@ -1054,24 +1094,35 @@ var PROFILES_RAW = [
1054
1094
  {
1055
1095
  archetype: "classify",
1056
1096
  promptSuffix: "\n\nOutput exactly one classification label. Do not hedge, do not add preamble, do not explain your reasoning. If uncertain, pick the most likely label and commit to it.",
1057
- reason: "Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. Evidence: 2026-05-28 V4-Pro probe on tt-intel/classify (exclusion-finding ID 20, brain probe_outcomes); 8 of 10 judge rationales cited hedging or refusal-to-commit. Forcing-function suffix converts reasoner output to decisive labels."
1097
+ reason: 'Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. UNEVIDENCED HYPOTHESIS as of alpha.96 \u2014 this reason used to cite a 2026-05-28 V4-Pro probe on tt-intel/classify ("8 of 10 judge rationales cited hedging") and named `brain probe_outcomes` as its source. That source is EMPTY: probed 2026-08-28, zero probe_outcomes rows exist before 2026-06-01 and zero `classify` rows have ever existed. The probe was deleted on 2026-05-29 by the s51 poison purge \u2014 it replayed against truncated `prompt_preview`, which s51 established yields meaningless verdicts. The conclusion outlived the purge of its own evidence and kept shaping prompts for three months. The pointer was wrong too: exclusion-finding ID 20 is a zero-calls `recommend-probe` on classify, confidence low, later declined \u2014 the probe TRIGGER, never its result. KEPT because a promptSuffix is capability-PRESERVING (adds an instruction, removes nothing a raw call had) and is visible in mutations_applied. Re-evidence from the golden-eval corpus or drop it.'
1058
1098
  },
1059
1099
  {
1060
1100
  archetype: "extract",
1061
1101
  promptSuffix: "\n\nOutput exactly the requested structured fields. Do not hedge, do not add preamble, do not explain your reasoning. If a field is unknown, emit the field with a null/empty value and commit to that \u2014 do not refuse to extract.",
1062
- reason: "Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. Evidence: same family failure shape as classify (exclusion-finding ID 20, 2026-05-28). Forcing-function suffix asks for commitment instead of epistemic-humility hedging."
1102
+ reason: 'Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. UNEVIDENCED HYPOTHESIS as of alpha.96 \u2014 the supporting evidence NO LONGER EXISTS. The cited 2026-05-28 V4-Pro classify probe ("8/10 judge rationales") was deleted on 2026-05-29 by the s51 poison purge, because it replayed against truncated `prompt_preview` and s51 established such verdicts are meaningless. Probed: zero probe_outcomes rows exist before 2026-06-01 and zero `classify` rows have EVER existed. The pointer was also wrong \u2014 exclusion-finding ID 20 is a zero-calls `recommend-probe` on classify, confidence low, later declined; it was the trigger for the probe, never its result. KEPT anyway because a promptSuffix is capability-PRESERVING (it adds an instruction and removes nothing a raw call had), so the cost of being wrong is bounded and a consumer can see it in mutations_applied. Re-evidence it from the golden-eval corpus or drop it.'
1063
1103
  },
1064
1104
  {
1065
1105
  archetype: "ask",
1066
1106
  promptSuffix: "\n\nAnswer the question directly. Do not hedge, do not add preamble, do not explain your reasoning unless explicitly asked. If uncertain, give your best answer and commit to it.",
1067
- reason: "Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. Evidence: same family failure shape as classify (exclusion-finding ID 20, 2026-05-28). Forcing-function suffix asks for commitment instead of epistemic-humility hedging."
1068
- },
1069
- {
1070
- archetype: "hunt",
1071
- whenToolCountAtLeast: 3,
1072
- cliffWarning: "Reasoners (deepseek-reasoner family) produce sequential reasoning chains by design; hunt archetypes with 3+ parallel tools lose substantial throughput. Consider gemini-flash family (parallel-strong) instead \u2014 see L-040 / L-041.",
1073
- reason: "L-040 + L-041 architectural reading; 2026-05-28 V4-Pro probe evidence (exclusion-finding ID 20) confirms reasoner-family hunt fit is structurally weak."
1107
+ reason: 'Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. UNEVIDENCED HYPOTHESIS as of alpha.96 \u2014 the supporting evidence NO LONGER EXISTS. The cited 2026-05-28 V4-Pro classify probe ("8/10 judge rationales") was deleted on 2026-05-29 by the s51 poison purge, because it replayed against truncated `prompt_preview` and s51 established such verdicts are meaningless. Probed: zero probe_outcomes rows exist before 2026-06-01 and zero `classify` rows have EVER existed. The pointer was also wrong \u2014 exclusion-finding ID 20 is a zero-calls `recommend-probe` on classify, confidence low, later declined; it was the trigger for the probe, never its result. KEPT anyway because a promptSuffix is capability-PRESERVING (it adds an instruction and removes nothing a raw call had), so the cost of being wrong is bounded and a consumer can see it in mutations_applied. Re-evidence it from the golden-eval corpus or drop it.'
1074
1108
  }
1109
+ // alpha.96 — the `hunt` convention was DELETED, not corrected.
1110
+ // It warned that "hunt archetypes with 3+ parallel tools lose substantial
1111
+ // throughput" and steered callers to gemini-flash. Measured false
1112
+ // 2026-08-28: 6 tools offered, 3 of 3 demanded served in parallel, 3/3
1113
+ // trials, both V4 models, direct to the provider.
1114
+ //
1115
+ // Its cited evidence did not say what it claimed. exclusion-finding ID 20
1116
+ // is `intent_archetype: 'classify'` (not hunt), `verdict:
1117
+ // 'recommend-probe'` (i.e. NOBODY PROBED), `confidence: 'low'`, its
1118
+ // message reads "deepseek-v4-pro has zero calls", it was later
1119
+ // `declined`, and its own `parallel_tool_hint: false` was this profile's
1120
+ // own belief round-tripped back as input. A no-data finding on the wrong
1121
+ // archetype was paraphrased into "probe evidence confirms".
1122
+ //
1123
+ // Deleted rather than re-scoped because a cliffWarning is
1124
+ // capability-REDUCING (it steers traffic away from a model) and nothing
1125
+ // evidenced remains. Re-add only from a measured hunt eval.
1075
1126
  ]
1076
1127
  },
1077
1128
  // ── OpenAI ──
@@ -3402,7 +3453,7 @@ function lower(ir, profile, hints = {}) {
3402
3453
  case "openai":
3403
3454
  return lowerOpenAI(ir, profile, hints);
3404
3455
  case "deepseek":
3405
- return lowerDeepSeek(ir, profile);
3456
+ return lowerDeepSeek(ir, profile, hints);
3406
3457
  case "zai":
3407
3458
  return lowerZai(ir, profile, hints);
3408
3459
  case "moonshot":
@@ -3663,7 +3714,7 @@ function toOpenAITools(tools) {
3663
3714
  }
3664
3715
  }));
3665
3716
  }
3666
- function lowerDeepSeek(ir, profile) {
3717
+ function lowerDeepSeek(ir, profile, hints) {
3667
3718
  const ordered = sortSections(ir.sections);
3668
3719
  const systemText = ordered.map((s) => s.text).join("\n\n");
3669
3720
  const messages = systemText ? [{ role: "system", content: systemText }] : [];
@@ -3685,7 +3736,8 @@ function lowerDeepSeek(ir, profile) {
3685
3736
  provider: "deepseek",
3686
3737
  model: profile.id,
3687
3738
  messages,
3688
- tools: ir.tools && ir.tools.length > 0 ? ir.tools.slice(0, 1).map((t) => ({
3739
+ // Every tool the IR carries. Never fewer see the note above.
3740
+ tools: ir.tools && ir.tools.length > 0 ? ir.tools.map((t) => ({
3689
3741
  type: "function",
3690
3742
  function: {
3691
3743
  name: t.name,
package/dist/probe.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  compile
3
- } from "./chunk-IRXC7WEQ.mjs";
4
- import "./chunk-BJD75WCL.mjs";
3
+ } from "./chunk-SRPRNTDT.mjs";
4
+ import "./chunk-2D4H7HGZ.mjs";
5
5
  import "./chunk-FEMPY6EC.mjs";
6
6
  import {
7
7
  deriveCliffEvidenceClass,
8
8
  getProfile
9
- } from "./chunk-D3BVYXNA.mjs";
9
+ } from "./chunk-AMV3M2KH.mjs";
10
10
 
11
11
  // src/probe.ts
12
12
  function compileSuppressing(ir, opts) {
@@ -125,7 +125,10 @@ declare function deriveCliffEvidenceClass(rule: CliffRule): CliffEvidence['class
125
125
  * diverges from the family default.
126
126
  *
127
127
  * Trigger that justified the substrate (2026-05-28): V4-Pro probe on
128
- * tt-intel/classify (exclusion-finding ID 20) showed 8/10 judge rationales
128
+ * tt-intel/classify showed 8/10 judge rationales
129
+ * ⚠️ alpha.96: THAT PROBE WAS PURGED 2026-05-29 (s51, prompt_preview
130
+ * truncation). Zero probe rows survive before 2026-06-01. The substrate is
131
+ * kept; the evidence claim below is retracted — treat as hypothesis.
129
132
  * citing "candidate hedges and fails to commit to a single classification."
130
133
  * Without a forcing-function suffix, every reasoner probe on a decisive
131
134
  * archetype verdicts stay-excluded for reasoner-behavior reasons, not
@@ -125,7 +125,10 @@ declare function deriveCliffEvidenceClass(rule: CliffRule): CliffEvidence['class
125
125
  * diverges from the family default.
126
126
  *
127
127
  * Trigger that justified the substrate (2026-05-28): V4-Pro probe on
128
- * tt-intel/classify (exclusion-finding ID 20) showed 8/10 judge rationales
128
+ * tt-intel/classify showed 8/10 judge rationales
129
+ * ⚠️ alpha.96: THAT PROBE WAS PURGED 2026-05-29 (s51, prompt_preview
130
+ * truncation). Zero probe rows survive before 2026-06-01. The substrate is
131
+ * kept; the evidence claim below is retracted — treat as hypothesis.
129
132
  * citing "candidate hedges and fails to commit to a single classification."
130
133
  * Without a forcing-function suffix, every reasoner probe on a decisive
131
134
  * archetype verdicts stay-excluded for reasoner-behavior reasons, not