feat(providers): add xKiro - #12648
Merged
Merged
Conversation
…, ollama-cloud, groq, nara and mistral
…gainst official pages
…r headline (~1.66B)
… its regression test
… fix catalog header
… with the catalog
… the last "14.4K RPD" Groq texts
…ier-quota-reaudit # Conflicts: # README.md # docs/diagrams/readme-hero.svg # src/i18n/messages/in.json
…ier-quota-reaudit
…ier-quota-reaudit # Conflicts: # README.md # docs/diagrams/free-tier-budget.svg # docs/diagrams/readme-hero.svg # open-sse/config/freeModelCatalog.data.ts
…der-xkiro # Conflicts: # AGENTS.md # README.md # docs/architecture/ARCHITECTURE.md # docs/architecture/CODEBASE_DOCUMENTATION.md # docs/diagrams/cli-terminal.svg # docs/diagrams/comparison-table.svg # docs/diagrams/free-tier-budget.svg # docs/diagrams/promise-pillars.svg # docs/diagrams/readme-hero.svg # docs/i18n/ar/llm.txt # docs/i18n/az/llm.txt # docs/i18n/bg/llm.txt # docs/i18n/bn/llm.txt # docs/i18n/cs/llm.txt # docs/i18n/da/llm.txt # docs/i18n/de/llm.txt # docs/i18n/es/llm.txt # docs/i18n/fa/llm.txt # docs/i18n/fi/llm.txt # docs/i18n/fr/llm.txt # docs/i18n/gu/llm.txt # docs/i18n/he/llm.txt # docs/i18n/hi/llm.txt # docs/i18n/hu/llm.txt # docs/i18n/id/llm.txt # docs/i18n/in/llm.txt # docs/i18n/it/llm.txt # docs/i18n/ja/llm.txt # docs/i18n/ko/llm.txt # docs/i18n/mr/llm.txt # docs/i18n/ms/llm.txt # docs/i18n/nl/llm.txt # docs/i18n/no/llm.txt # docs/i18n/phi/llm.txt # docs/i18n/pl/llm.txt # docs/i18n/pt-BR/llm.txt # docs/i18n/pt/llm.txt # docs/i18n/ro/llm.txt # docs/i18n/ru/llm.txt # docs/i18n/sk/llm.txt # docs/i18n/sv/llm.txt # docs/i18n/sw/llm.txt # docs/i18n/ta/llm.txt # docs/i18n/te/llm.txt # docs/i18n/th/llm.txt # docs/i18n/tr/llm.txt # docs/i18n/uk-UA/llm.txt # docs/i18n/ur/llm.txt # docs/i18n/vi/llm.txt # docs/i18n/zh-CN/llm.txt # docs/i18n/zh-TW/llm.txt # docs/reference/PROVIDER_REFERENCE.md # llm.txt # package.json # public/images/tier-flow-dark.svg # public/images/tier-flow-light.svg
…c the guide counts
…ier-quota-reaudit # Conflicts: # README.md # docs/diagrams/README.md # docs/diagrams/free-tier-budget.svg # docs/diagrams/readme-hero.svg # docs/getting-started/FREE-TIERS-GUIDE.md # docs/reference/FREE_TIERS.md # open-sse/config/freeTierCatalog.ts # tests/unit/free-tier-catalog.test.ts
…der-xkiro # Conflicts: # README.md # docs/diagrams/README.md # docs/diagrams/free-tier-budget.svg # docs/diagrams/promise-pillars.svg # docs/diagrams/readme-hero.svg # docs/reference/FREE_TIERS.md
…bras reclassified upstream)
…cker; rebaseline gateways.ts (+3)
…o feat/provider-xkiro # Conflicts: # README.md # config/quality/file-size-baseline.json # docs/diagrams/README.md # docs/diagrams/free-tier-budget.svg # docs/diagrams/readme-hero.svg # docs/getting-started/FREE-TIERS-GUIDE.md # docs/reference/FREE_TIERS.md # open-sse/config/freeModelCatalog.data.ts
diegosouzapw
changed the base branch from
release/v3.8.51
to
fix/free-tier-quota-reaudit
September 4, 2026 02:08
diegosouzapw
changed the base branch from
fix/free-tier-quota-reaudit
to
release/v3.8.51
September 4, 2026 02:27
…der-xkiro # Conflicts: # README.md # config/quality/file-size-baseline.json # docs/diagrams/README.md # docs/diagrams/free-tier-budget.svg # docs/diagrams/readme-hero.svg # docs/getting-started/FREE-TIERS-GUIDE.md # docs/reference/FREE_TIERS.md # open-sse/config/freeModelCatalog.data.ts
diegosouzapw
force-pushed
the
feat/provider-xkiro
branch
from
September 4, 2026 06:38
02ff49a to
99333f3
Compare
Owner
Author
|
Held, not reviewed — Hard Rule #22b, plus a pending prerequisite.
Nothing touched. It comes back to the queue when the worktree is gone and the key validation is recorded. |
…der-xkiro # Conflicts: # README.md # config/quality/file-size-baseline.json # docs/diagrams/free-tier-budget.svg # docs/getting-started/FREE-TIERS-GUIDE.md # docs/screenshots/free-tier-budget-card.svg
…der-xkiro # Conflicts: # AGENTS.md # README.md # config/quality/file-size-baseline.json # docs/diagrams/cli-terminal.svg # docs/diagrams/comparison-table.svg # docs/diagrams/free-tier-budget.svg # docs/diagrams/promise-pillars.svg # docs/diagrams/readme-hero.svg # docs/getting-started/FREE-TIERS-GUIDE.md # docs/i18n/ar/llm.txt # docs/i18n/az/llm.txt # docs/i18n/bg/llm.txt # docs/i18n/bn/llm.txt # docs/i18n/cs/llm.txt # docs/i18n/da/llm.txt # docs/i18n/de/llm.txt # docs/i18n/es/llm.txt # docs/i18n/fa/llm.txt # docs/i18n/fi/llm.txt # docs/i18n/fr/llm.txt # docs/i18n/gu/llm.txt # docs/i18n/he/llm.txt # docs/i18n/hi/llm.txt # docs/i18n/hu/llm.txt # docs/i18n/id/llm.txt # docs/i18n/it/llm.txt # docs/i18n/ja/llm.txt # docs/i18n/ko/llm.txt # docs/i18n/mr/llm.txt # docs/i18n/ms/llm.txt # docs/i18n/nl/llm.txt # docs/i18n/no/llm.txt # docs/i18n/phi/llm.txt # docs/i18n/pl/llm.txt # docs/i18n/pt-BR/llm.txt # docs/i18n/pt/llm.txt # docs/i18n/ro/llm.txt # docs/i18n/ru/llm.txt # docs/i18n/sk/llm.txt # docs/i18n/sv/llm.txt # docs/i18n/sw/llm.txt # docs/i18n/ta/llm.txt # docs/i18n/te/llm.txt # docs/i18n/th/llm.txt # docs/i18n/tr/llm.txt # docs/i18n/uk-UA/llm.txt # docs/i18n/ur/llm.txt # docs/i18n/vi/llm.txt # docs/i18n/zh-CN/llm.txt # docs/i18n/zh-TW/llm.txt # docs/reference/FREE_TIERS.md # docs/reference/PROVIDER_REFERENCE.md # docs/screenshots/free-tier-budget-card.svg # llm.txt # package.json # public/images/tier-flow-dark.svg # public/images/tier-flow-light.svg
# Conflicts: # README.md # config/quality/file-size-baseline.json # docs/diagrams/comparison-table.svg # docs/diagrams/free-tier-budget.svg # docs/diagrams/readme-hero.svg # docs/i18n/am/llm.txt # docs/i18n/ar/llm.txt # docs/i18n/az/llm.txt # docs/i18n/bg/llm.txt # docs/i18n/bn/llm.txt # docs/i18n/cs/llm.txt # docs/i18n/da/llm.txt # docs/i18n/de/llm.txt # docs/i18n/el/llm.txt # docs/i18n/es/llm.txt # docs/i18n/et/llm.txt # docs/i18n/fa/llm.txt # docs/i18n/fi/llm.txt # docs/i18n/fr/llm.txt # docs/i18n/ga/llm.txt # docs/i18n/gu/llm.txt # docs/i18n/ha/llm.txt # docs/i18n/he/llm.txt # docs/i18n/hi/llm.txt # docs/i18n/hr/llm.txt # docs/i18n/hu/llm.txt # docs/i18n/hy/llm.txt # docs/i18n/id/llm.txt # docs/i18n/ig/llm.txt # docs/i18n/it/llm.txt # docs/i18n/ja/llm.txt # docs/i18n/ka/llm.txt # docs/i18n/km/llm.txt # docs/i18n/kn/llm.txt # docs/i18n/ko/llm.txt # docs/i18n/lt/llm.txt # docs/i18n/lv/llm.txt # docs/i18n/ml/llm.txt # docs/i18n/mr/llm.txt # docs/i18n/ms/llm.txt # docs/i18n/mt/llm.txt # docs/i18n/my/llm.txt # docs/i18n/ne/llm.txt # docs/i18n/nl/llm.txt # docs/i18n/no/llm.txt # docs/i18n/or/llm.txt # docs/i18n/pa/llm.txt # docs/i18n/phi/llm.txt # docs/i18n/pl/llm.txt # docs/i18n/pt-BR/llm.txt # docs/i18n/pt/llm.txt # docs/i18n/ro/llm.txt # docs/i18n/ru/llm.txt # docs/i18n/si/llm.txt # docs/i18n/sk/llm.txt # docs/i18n/sl/llm.txt # docs/i18n/sr/llm.txt # docs/i18n/sv/llm.txt # docs/i18n/sw/llm.txt # docs/i18n/ta/llm.txt # docs/i18n/te/llm.txt # docs/i18n/th/llm.txt # docs/i18n/tr/llm.txt # docs/i18n/uk-UA/llm.txt # docs/i18n/ur/llm.txt # docs/i18n/uz/llm.txt # docs/i18n/vi/llm.txt # docs/i18n/yo/llm.txt # docs/i18n/zh-CN/llm.txt # docs/i18n/zh-TW/llm.txt # docs/reference/PROVIDER_REFERENCE.md # docs/screenshots/free-tier-budget-card.svg
The branch merged the release tip twice: the first pass carried a stale origin/release/v3.8.51 that predated #13913, so every derived count was computed against a provider that had already been retired. Reconciled against the current tip: - Provider count is 359 (tip 358 after the chipotle/pepper removal, plus xKiro). README, AGENTS.md, llm.txt and its 65 locale mirrors, package.json and the six count-bearing SVGs now carry that number; check:docs-counts passes with no strict drift. - docs/reference/PROVIDER_REFERENCE.md regenerated from the live modules. - RESERVED_PREFIX_COUNT 412 -> 413: xKiro registers id "xkiro" with no separate alias, so it adds exactly one REGISTRY member.
diegosouzapw
marked this pull request as ready for review
September 17, 2026 16:34
This was referenced Sep 17, 2026
diegosouzapw
added a commit
that referenced
this pull request
Sep 18, 2026
…rge wave (#14082) Every PR against release/v3.8.51 is born red on all four Unit Tests fast-path shards. Reproduced on the pure tip (1603c86): ~35 tests. This commit repairs the two large clusters plus the stale assertions sharing their root cause (17 tests); the rest is tracked separately. RTK (12 tests, real regression): #13521 gated dedup on skipFilters || isDocumentLikeRead but isDocumentLikeRead is true for ANY text whose type detection is unknown — not only non-shell tool results — so plain repeated tool output (the classic RTK case) stopped being deduplicated, processRtkText returned no stats, and rtkEngine.apply().stats.engine came back undefined. The intent of #13388 was the non-shell-tool skip, which resolveToolMeta already expresses as skipFilters; dedup now honours only that. The #13521 regression guard (rtk-file-content-preservation, tool named 'read' → skipFilters) still passes 4/4; rtk-engine is back to 9/9. Golden + stale assertions (5 tests, product changes never propagated): - tests/snapshots/provider/translate-path.json: xKiro (#12648) was added to the registry without regenerating the snapshot — purely additive entry. - providers-constants-split: APIKEY_PROVIDER_COUNT 241 → 242 (xKiro). - tests/snapshots/g13/combo-chatcore-public-seams.json and the three Content-Type assertions in chatcore-translation-paths / chat-route-coverage: #13419 deliberately made streaming responses declare 'text/event-stream; charset=utf-8' (Arabic/Persian mojibake) and updated the integration test but not these unit assertions. Before/after on the 26 base-red files: 266 tests, 23 → 18 failing here (the RTK suites were counted per-file in CI; per-test this is 17 fixed). The file-size ✗ on chatcore-translation-paths.test.ts is the pre-existing drift #14016 rebaselines — this commit keeps that file's line count unchanged.
Merged
muhamadgalihsaputra
pushed a commit
to niyatna/NiyatnaRoute
that referenced
this pull request
Sep 27, 2026
* test(catalog): pin the 2026-09-02 free-tier re-audit facts for gemini, ollama-cloud, groq, nara and mistral * feat(providers): add xKiro (5M tokens/day free plan, 39 pinned free models) * fix(catalog): re-audit gemini, ollama-cloud, groq, nara and mistral against official pages * docs(providers): xKiro in the provider reference, counts and free-tier headline (~1.66B) * fix(catalog): restore the console-verified Mistral 1B pool and harden its regression test * docs(free-tiers): move headline to the re-audited ~1.50B and refresh pool counts * chore(free-tiers): retire stale Groq free-tier text and preset model; fix catalog header * docs(providers): align the remaining visible provider/executor counts with the catalog * docs(providers): align remaining free-tier count chips and metadata * docs(free-tiers): state the evidence-comment rule honestly and retire the last "14.4K RPD" Groq texts * docs(free-tiers): retire the stale Gemini onboarding quota text * docs(free-tier): refresh catalog-entry counts to 442 after base sync * docs(providers): re-sync provider and free-tier counts after merging release/v3.8.51 * docs(providers): re-sync residual counts after the base merge * docs(free-tiers): restore README spacing lost in the merge and re-sync the guide counts * docs(free-tiers): re-sync numbers after merging release/v3.8.51 (Cerebras reclassified upstream) * fix(docs): keep the NaraRouter plans endpoint out of the API-path checker; rebaseline gateways.ts (+3) * chore(quality): rebaseline gateways.ts file-size cap for the xKiro entry (+20) --------- Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com>
muhamadgalihsaputra
pushed a commit
to niyatna/NiyatnaRoute
that referenced
this pull request
Sep 27, 2026
…rge wave (diegosouzapw#14082) Every PR against release/v3.8.51 is born red on all four Unit Tests fast-path shards. Reproduced on the pure tip (3ce81a1): ~35 tests. This commit repairs the two large clusters plus the stale assertions sharing their root cause (17 tests); the rest is tracked separately. RTK (12 tests, real regression): diegosouzapw#13521 gated dedup on skipFilters || isDocumentLikeRead but isDocumentLikeRead is true for ANY text whose type detection is unknown — not only non-shell tool results — so plain repeated tool output (the classic RTK case) stopped being deduplicated, processRtkText returned no stats, and rtkEngine.apply().stats.engine came back undefined. The intent of diegosouzapw#13388 was the non-shell-tool skip, which resolveToolMeta already expresses as skipFilters; dedup now honours only that. The diegosouzapw#13521 regression guard (rtk-file-content-preservation, tool named 'read' → skipFilters) still passes 4/4; rtk-engine is back to 9/9. Golden + stale assertions (5 tests, product changes never propagated): - tests/snapshots/provider/translate-path.json: xKiro (diegosouzapw#12648) was added to the registry without regenerating the snapshot — purely additive entry. - providers-constants-split: APIKEY_PROVIDER_COUNT 241 → 242 (xKiro). - tests/snapshots/g13/combo-chatcore-public-seams.json and the three Content-Type assertions in chatcore-translation-paths / chat-route-coverage: diegosouzapw#13419 deliberately made streaming responses declare 'text/event-stream; charset=utf-8' (Arabic/Persian mojibake) and updated the integration test but not these unit assertions. Before/after on the 26 base-red files: 266 tests, 23 → 18 failing here (the RTK suites were counted per-file in CI; per-test this is 17 fixed). The file-size ✗ on chatcore-translation-paths.test.ts is the pre-existing drift diegosouzapw#14016 rebaselines — this commit keeps that file's line count unchanged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds xKiro (
xkiro, https://xkiro.com) as an OpenAI-compatible API-key gateway with a documented free plan: 5M tokens/day per account, no card, across the 40 upstream models taggedaccess_tier: "free"on the publicGET https://api.xkiro.com/v1/models. 39 of them are pinned here (Qwen, MiniMax, DeepSeek, Mistral, SenseNova — 24 with vision, all with tool calling, context 128K–1M);openai/gpt-5.3-codex-sparkis deliberately left out (see below). The free-tier catalog gains one new recurring pool,xkiro-free= 5M × 30 = 150M tokens/month, counted once for the whole account, and every visible number that depends on it (headline, entries, pools, hard-stop rows, provider count) is re-synced through the docs gates.Third PR of the "free-tier honest growth" series (PR1 re-audit of the existing quotas #12649, PR2 gated bucket #12669, PR3 this provider, PR4 radar-server feed). PR1 and PR2 have both landed on
release/v3.8.51; this branch is merged up to that tip, so the numbers below are measured against the post-#12669 baseline and every delta is xKiro's own contribution.What changed
Provider (routable + canonical)
open-sse/config/providers/registry/xkiro/index.ts(new) —xkiroProviderviabuildOpenAiCompatibleRegistryEntry,baseUrl https://api.xkiro.com/v1/chat/completions, 39 pinned models withcontextLength/toolCalling/supportsVisiontaken from the public models endpoint (2026-09-02). Wired inopen-sse/config/providers/index.ts(import +REGISTRY.xkiro).src/shared/constants/providers/apikey/gateways.ts— canonicalxkiroblock (serviceKinds: ["llm"],passthroughModels: true,hasFree: true,freeNote,authHint,apiHint). Bearer auth (x-api-keyalso accepted upstream).src/shared/constants/providers.ts—"xkiro"added toAGGREGATOR_PROVIDER_IDS(it fronts other vendors' models).Free-tier catalog
open-sse/config/freeModelCatalog.data.ts— 39 rows, all in poolxkiro-free,monthlyTokens: 150_000_000,freeType: "recurring-daily",tos: "caution",hardStopGuaranteed: true;FREE_CATALOG_CURATED_AT→2026-09-03. Evidence block (verbatim quotes, dated) sits above the rows:hardStopGuaranteed)GET https://api.xkiro.com/v1/models— the 40access_tier: "free"rows (public, no key needed)tos: "caution".openai/gpt-5.3-codex-sparkis excluded although it is tagged free upstream: xKiro does not declare where that route is served from (no provenance for an OpenAI-branded model on a third-party gateway), so pinning it would advertise a free model we cannot vouch for. The unit test locks the exclusion in.Tests
tests/unit/free-provider-xkiro.test.ts(new, TDD — red 4/4 before the implementation, green after): routable + canonical + aggregator; one 150M pool counted exactly once bycomputeFreeModelTotals()(with − without = 150,000,000); nocodex-sparkin registry or catalog; registry ⟷ catalog are the same 39 ids.Docs and counts (all gate-driven,
npm run check:docs-counts+check:docs-syncgreen)docs/reference/PROVIDER_REFERENCE.mdregenerated (npm run gen:provider-reference, exact generator output).README.md,llm.txt+ 65docs/i18n/*/llm.txtmirrors (66 locales after feat(i18n): 7 new locales — Hausa, Yoruba, Igbo, Amharic, Uzbek, Georgian, Armenian (66 locales) #13727; the duplicateinlocale was retired upstream),docs/reference/FREE_TIERS.md(headline, dated note, ToS row, per-provider row, hard-stop sentence, frontmatter date),docs/architecture/{ARCHITECTURE,CODEBASE_DOCUMENTATION,REPOSITORY_MAP}.md,docs/frameworks/OPEN_SSE_ARCHITECTURE.md,docs/diagrams/{readme-hero,promise-pillars,comparison-table,cli-terminal,free-tier-budget}.svg(+docs/diagrams/README.md),public/images/tier-flow-{dark,light}.svg— provider count, free-tier headline, entries/pools/hard-stop tallies, executor count, visible chips aligned with their own aria-labels (90+→150+,352→357,348 more→353 more).AGENTS.md:49andpackage.jsondescription: number only (see operator note).Numbers before / after
Measured on this branch with the same code the gate uses (
computeFreeModelTotals(), the canonical provider collections,REGISTRY); "before" = therelease/v3.8.51tip225da11(post-Agnes 3.0, post-Together-credit-removal), which is this PR's base.225da11)xkiro-free)xkiro-free), plus Groq's 5 per-model capshasFree: trueEvery delta is exactly xKiro's own contribution — nothing else moved across the merge. Exact live values: steady
1,623,225,000(= the tip's1,473,225,000+ xKiro's150,000,000), first month2,224,725,000(the tip's2,074,725,000+ 150M; #12526 took the Together $25 one-off credit out of the first-month figure, which is why it reads ~2.22B and no longer ~2.25B). #12669's eligibility-gated bucket (gatedRecurringTokens= 6,000,000, ModelScope) is carried through unchanged and stays out of the steady headline.All "after" values are the ones
npm run check:docs-countsreports as actual on this branch — none were hand-guessed.This PR bumps the provider count in
AGENTS.md:49("358 LLM providers" → 359) and inpackage.jsondescription— number only, demanded bycheck:docs-counts(STRICT), same precedent as #12440.AGENTS.mdis an agent-instruction surface, so explicit operator approval is needed at merge for that one-line change.Base sync done (2026-09-15): merge commit
6e628b8bringsorigin/release/v3.8.51@58f88a8(Agnes 3.0 Flash catalog9b4210a, Together credit removald6e62ae, 7 new i18n locales #13727, the base-red fixes #13635/#13678), followed by the clean mergefd53ba5up to the tip225da11(#13582, #13612, #13736). 57 files conflicted in the first merge, every one of them count drift (release 358 vs branch 357 vs base 356, and the same shape for the free-tier figures); each number was resolved as release value + xKiro's own delta and then confirmed by the gates:open-sse/config/freeModelCatalog.data.ts,open-sse/config/providers/index.ts,src/shared/constants/providers.ts,src/shared/constants/providers/apikey/gateways.ts— auto-merged: the release's Agnes 3.0 rows and the removed Together signup-credit row are kept and all 39 xKiro rows / thexkiroregistry + gateway entries stay. Verified as a set: 443 → 482 entries,xkiro-freestill one 150M pool.README.md,docs/reference/FREE_TIERS.md,docs/getting-started/FREE-TIERS-GUIDE.md— took the release's wording (Together $25 gone from the first-month note, the new STRICT mode sentence on the hard-stop paragraph), kept the xKiro prose (xKiro 150Min the budget-bar list, the "44 hard-stop entries, 39 of them xKiro" sentence), then set every count to what the gate reports live.AGENTS.md,package.json,llm.txt+ 41 conflicteddocs/i18n/*/llm.txtmirrors,docs/reference/PROVIDER_REFERENCE.md(total, API-key section count, generated date) — number only, 358 → 359. The 24 locale mirrors added by feat(i18n): 7 new locales — Hausa, Yoruba, Igbo, Amharic, Uzbek, Georgian, Armenian (66 locales) #13727 after this branch's last sync did not conflict and were given the same two-line bump socheck:docs-syncstays exact.docs/diagrams/{readme-hero,promise-pillars,comparison-table,cli-terminal,free-tier-budget}.svg,public/images/tier-flow-{dark,light}.svg— number text nodes / aria-labels only (the release's own "20 routing strategies" change incomparison-table.svgis preserved).docs/screenshots/free-tier-budget-card.svgregenerated withscripts/research/gen-budget-card-svg.mjs.config/quality/file-size-baseline.json— kept every justification key from both sides (_rebaseline_2026_09_03_12648_xkiro_providerplus the release's 09-11/09-14 entries) and set thegateways.tscap to the gate's measure of the merged file, 1520 (1519 lines + 1; the release had moved it 1462 → 1502 for Agnes 3.0, xKiro adds its +18).One extra fix the merge surfaced:
tests/unit/check-docs-counts-sync.test.tsasserted the live FREE_TIERS page against a hard-coded5hard-stop entries. That number went stale the moment the 39 xKiro rows landed (the doc says 44 and the gate agrees). The test now derives both expected counts from the catalog itself, so it cannot drift again.Live validation — PENDING (awaiting the owner's free xKiro key; will be completed before marking the PR ready)
Done without a key (2026-09-02), as evidence of the validation endpoint and of the upstream model list the catalog was built from:
Still to record here once the key is available (Hard Rule #18): the direct upstream smoke with the key, then the through-OmniRoute call
POST /v1/chat/completionswith{"model":"xkiro/qwen/qwen3.6-27b:free", …}— HTTP status, echoedmodel,usage, first line of the content. The key itself is never printed or committed.Validation
Re-run after merging
origin/release/v3.8.51up to225da11, in the PR worktree atfd53ba5, 2026-09-15:npm run check:docs-countsdocs/architecture/{ARCHITECTURE,CODEBASE_DOCUMENTATION}.mddo not mention the live executor count 111 — identical onorigin/release/v3.8.51, not touched here).npm run check:docs-syncnpm run check:fabricated-docsnpm run check:file-sizeopen-sse/utils/stream.ts3115 > 3098. The file is byte-identical to the release tip (git diff origin/release/v3.8.51 -- open-sse/utils/stream.tsis empty) and the baseline itself records it as pre-existing tip drift (base-red #12732, owned by/sweep-reds). This PR's own entry,gateways.tscap 1520, passes.npm run check:provider-consistencynpx prettier --checkon the resolved filesfree-tier-reaudit-2026-09+check-docs-counts-sync+free-model-catalog;free-tier-catalog+free-model-catalog-gated-bucket+gen-budget-card-svg+free-catalog-no-confidence-field;free-provider-xkiro)fd53ba5docs/screenshots/free-tier-budget-card.svgwas regenerated withnode --import tsx/esm scripts/research/gen-budget-card-svg.mjs --out docs/screenshots/free-tier-budget-card.svg(#12669's generator, which understandshardStopGuaranteedand gated rows); it reportssteady=1.62B firstMonth=2.22B gated=6M oneTime=601M(22 pools, 9 first-month chips) andtests/unit/gen-budget-card-svg.test.tspasses its byte-for-byte comparison.Full unit/vitest/coverage suites and the production build are left to CI on this PR (the devbox times out on them).
No open
🔴 Release branch not green: release/v3.8.51issue at the time of this sync (2026-09-15); the one inherited red above (stream.tsfile-size) is tracked by #12732 and is not touched by this PR.CI triage (first run on 6155247)
open-sse-typecheck—open-sse/executors/glm.ts TS2554 (baseline 0, live 1)glm.tswas last changed on the base by #12179; this PR does not touch it (same red on #12649)file-sizegateways.ts