Skip to content

fix(auto): honor provider ToS for uncataloged models and clarify setup - #15979

Merged
diegosouzapw merged 1 commit into
release/v3.8.52from
fix/15059-first-run-docs-drain
Oct 9, 2026
Merged

diegosouzapw merged 1 commit into
release/v3.8.52from
fix/15059-first-run-docs-drain

Conversation

@diegosouzapw

Copy link
Copy Markdown
Collaborator

Problem and change

The first-run README promised a response without connecting a provider, while the auto pool depends on eligible targets and upstream availability. The default ToS filter also missed newly discovered models when they lacked a per-model budget entry, despite an existing provider-wide avoid verdict.

The filter now uses the curated provider verdict when a specific model verdict is absent, and records the same Antigravity verdict for both existing registered IDs (agy and antigravity). Explicit model verdicts retain precedence, and the operator opt-out remains unchanged. This closes the residual left after #15839 changed the default, without changing account authorization or the economic-safety filter.

README, the setup diagram and both free-tier guides now explain account setup, router authentication, provider eligibility, and why catalog-wide estimates are not an OmniRoute token grant. Cerebras is described as a one-time $5 promotion requiring a payment method, expiring after 30 days; Gemini limits are not converted into a fixed monthly grant. Sources were checked on 2026-10-08: Cerebras pricing and Gemini rate limits.

Refs #15059.

Evidence

Base: 61e07fb7e0d4e1e76111495d3718c9e4d06d2a62 (release/v3.8.52).

  • Before production changes: 2 FAIL / 3 PASS for the fresh auto pool and an uncataloged OpenCode model; opt-out, unknown-provider and Moonshot controls passed. The fresh pool contained eight uncataloged OpenCode models despite the default ToS setting.
  • Additional Antigravity reproduction: 1 FAIL / 1 PASS before adding its missing provider-level verdict. A registry-alias approach was tried and refuted by a further failing run; the final patch preserves the two registered IDs and their model-specific overrides.
  • Final native regression: 15 PASS / 0 FAIL across four files, including legacy budget totals and the pre-existing default-setting checks.
  • Adjacent Vitest regression: 31 PASS / 0 FAIL across three files using vitest.mcp.config.ts (economic filtering, connection safety and catalog autodiscovery). Total: 46 PASS across seven files.
  • Gates: core typecheck, changed-file ESLint, file-size, complexity (3014 ≤ 3218), cognitive complexity (1381 ≤ 1437) and docs-all passed. Cycles (14 ≤ 14) and test discovery passed. Changelog integrity and strict mutation-test registration also passed.
  • Measured catalog totals: 1,623,225,000 recurring tokens; 2,224,725,000 first-month estimate; 489 model entries / 35 recurring pools. The rounded 1.62B/2.22B headline remains an aggregate across separate eligible accounts.

The Moonshot regression seeds a temporary database with kimi-k2.7-code and kimi-k2.6, then checks the real model catalog response includes both and excludes phantom kimi-k3 / kimi-k3-256k. It already passed on the base: no production catalog patch was needed. Virtual combo display is disabled only in this fixture to isolate model-listing behavior from unrelated cold catalog-generation work.

All application probes use isolated temporary data/plugin directories and synthetic credentials. This does not claim live upstream OpenCode availability, resolution of #14313, or validation of the reporter's database. The requested dashboard opt-in control and connection-time ToS warning in item 3 are also outside this partial fix and remain tracked by #15059. Initial short probe timeouts and a wrong-runner attempt for three Vitest files are recorded separately; they are not treated as product regressions.

Release tracking: #15306 remains open. No merge or release publication is performed by this PR.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

CI Coverage Report

  • Coverage job: skipped
  • PR test policy: success

Coverage artifact was not available for this run.

@diegosouzapw
diegosouzapw merged commit f1f866d into release/v3.8.52 Oct 9, 2026
24 of 51 checks passed
diegosouzapw added a commit that referenced this pull request Oct 16, 2026
Connecting a provider marked `ToS: avoid` must not silently add it to Auto Combo. The safe default already landed in #15839, but users still lacked a dashboard opt-in, a warning before connecting, and consistent first-run instructions.

This completes the remaining UI/documentation work recorded in #15059 after #15979:

- Add an explicit control in the Auto Combo catalog. It loads the persisted policy before enabling, writes only `excludeTosAvoid`, confirms successful saves, prevents concurrent writes, and refreshes or invalidates the catalog. Read failures disable the control with Retry; save failures retain the confirmed value.
- Show the curated ToS warning before provider connection actions in provider details and onboarding, with a link to the control. Connecting credentials does not change the policy. Existing authentication, OAuth, RiskNotice and the safe default remain intact.
- Correct Quick Start's provider/key assumptions and the README first-run anchor; update seven UI strings across 67 locales and the affected regions of 132 translated documents. Translation state updates only the two affected entries; historical README source hashes/timestamps remain unchanged because unrelated stale content still exists.

- Keep the policy state/read/write lifecycle in a local hook so the rendered control meets the new-code complexity limit. Use the canonical provider term in the four new Simplified Chinese strings.

Closes #15059

## Validation

- TDD on the exact `7434a008b8e03fe09d7946b7feec0be2ffa9560c` base: missing toggle, persistence/refresh, connection warnings and read-error Retry each failed before implementation and passed afterward using the same fixtures. New component matrix: 22/22; the modified control was rerun after the final lint adjustment, 11/11.
- Related regression selection: 47 files, 364 tests — 359 passed, 1 inherited failure, 4 skipped. The quota A2A/MCP wiring assertion also fails on the exact base with the unchanged fixture. This is not a claim that the whole repository suite is green.
- Core/dashboard typechecks, both complexity checks, focused ESLint, Prettier, file-size, test discovery, changelog integrity and `check:docs-all` passed. Dashboard is within its existing frozen baseline.
- Official translation drift comparison: no new cases. Source drift stays 24; mismatching target hashes decrease 132→66; historical-source warnings stay 132. Remaining target hash drift belongs to ENVIRONMENT.md. The 132 translated documents preserve bytes outside the recorded regions; translations were not reviewed by native speakers of every language.
- Independent SPEC and Standards review found no blocking issues in the frozen source manifest.

- Chromium against the actual local app and isolated SQLite: keyboard opt-in/out, real settings PATCH/GET, persistence after reload, catalog refresh, read/save failures and mobile layout passed. Provider detail and onboarding show the warning before connection actions; the link reaches the visible control. No connection-page writes or OAuth/provider calls were performed; external network was blocked. Zero browser page errors in the successful acceptance runs.
- Normal automatic pre-commit/commit-msg hooks passed; all 210 reviewed file hashes remained unchanged. PR source-test policy, anti-masking and PR evidence checks passed.

No live upstream account claim, merge, deployment or package publication is part of this change.

## Follow-up validation

- The new-function complexity check and four Simplified Chinese glossary violations were reproduced before the adjustment and pass afterward. No tests, timeouts, suppressions or quality baselines were weakened.
- The unchanged toggle/notice fixtures and AutoComboCatalog importer selection pass: **34/34 tests across three files**. This overlaps the original validation above; counts are not additive. State, GET/PATCH and retry semantics were checked against the prior implementation.
- The Burmese translation-ratio failure is inherited: the official script reports the same 292 untranslated keys (2.2%) on base `122b43b35dbacab03ea67d0f0b46e713280ccd86` and the original PR head. The seven added UI keys are translated. That catalog and its baseline are unchanged.
- Follow-up execution used Node24.21.0, synthetic HOME/DATA_DIR/plugin directories and a network guard. Twelve version-discovery fetch attempts were blocked; zero external traffic was permitted. The browser acceptance above belongs to the original head and was not repeated for this extraction.
- Independent SPEC/Standards review found no remaining blockers. The exact follow-up manifests, command receipts and failed pre-fix checks are retained in the campaign report.

Follow-up general gates: core/dashboard typechecks and both full complexity ratchets passed on the reviewed manifest. The remote release advanced to `9362ed1973124cc207e77f5cbcf3e617562a9d39` during validation; this local checkout still uses its recorded base and is not a claim of CI approval on that newer merge target.


⚠️ base-red inherited: #15306

Thanks @diegosouzapw.
@diegosouzapw
diegosouzapw deleted the fix/15059-first-run-docs-drain branch October 18, 2026 23:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant