Repository navigation
docs: describe the DeepSeek pairing as a compatibility pairing, not DeepSeek's first-party harness - #695
Merged
Conversation
The shipped tree asserted that Claude Code is DeepSeek's official/supported coding-agent integration. It is not: ultrafuzz points the Claude Code harness at DeepSeek's Anthropic-compatible endpoint, which is a compatibility pairing. DeepSeek's first-party harness is DeepSeek Harness (dsh), as recorded in docs/explanation/provider-harness-research.md. Correcting the wording before a real dsh binding exists (#661) keeps the two from sharing a name or a claim. - ultrafuzz.toml: reword the [models.deepseek] profile comment and the [agents.DeepSeekAgent] comment. - packages/runtime/src/templates/smithers/agents/deepseek.tsx: reword the createDeepSeekAgent doc comment; the accurate half about credential, model, telemetry and pricing isolation is kept verbatim. - docs/config.md: add the compatibility-pairing/opt-in paragraph to the DeepSeek section, and fold in the residual editorial half of #664 - a new "Providers and harnesses are separate choices" subsection that states default-selection status explicitly instead of by omission, and a note on the OpenRouter-through-Codex section marking it opt-in and non-default. Comments and prose only. No code, schema, or runtime behaviour changes, no config keys added, and no rename of the DeepSeekAgent ref or export. Closes #660 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The #660 doc pass added a "Providers and harnesses are separate choices" section whose central claim was false for three of the four shipped refs. deepseek.tsx hardcodes DEEPSEEK_ANTHROPIC_BASE_URL and injects it, claude.tsx contains no base_url/baseUrl at all so ClaudeAgent cannot be repointed, and kimi.tsx is wired to Kimi Code. Only CodexAgent can be repointed, and only through a hand-authored Codex-native config.toml that ultrafuzz neither owns nor validates. The section's selection rule was false for its own OpenRouter row too: the root config has no openrouter profile, no distinct ref and no OPENROUTER_API_KEY, so that row can be reached by neither model_profiles nor --agent. Documenting a separate provider/harness boundary as shipped fact is the prose form of the parallel surface PR #682 was closed for, and it is #664 scope in any case. Removed. - docs/config.md: delete the section and its five-row table. - docs/config.md: correct the DeepSeek selection sentence. --agent does not select a profile - the same page already says so - so selection is model_profiles = ["deepseek"] in .ultrafuzz/topology.yml, and --agent DeepSeekAgent overrides only the default profile's agent, carrying neither deepseek-v4-pro nor reasoning = "max" (runtime.test.ts:5163). - docs/config.md: split the two senses collapsed into "opt-in, not the default selection" on the OpenRouter section - the pairing is not selected by default, and separately Codex CLI is the harness this release ships once OpenRouter is the provider. - CHANGELOG.md: "official Claude Code endpoint" -> "Anthropic-compatible Claude Code endpoint", matching the correction this PR makes everywhere else. - packages/runtime/src/init.ts: register the pre-reword DeepSeek adapter hash as stock, so a project initialized before this PR still upgrades instead of being treated as customized. Prose plus one stock-hash entry. No schema, no config keys, no renames. Refs #660 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Keeps the amended entry inside the wrap width the surrounding v0.0.5 bullet already uses. No wording change. Refs #660 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Aug 21, 2026
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.
Closes #660.
What this changes
The shipped tree asserted, in its most visible surfaces, that Claude Code is DeepSeek's official / supported coding-agent integration. It is not. What ultrafuzz ships is the Claude Code harness pointed at DeepSeek's Anthropic-compatible endpoint — a compatibility pairing. DeepSeek's first-party harness is DeepSeek Harness (
dsh), as recorded indocs/explanation/provider-harness-research.md(see Recommended Pairing Policy, rules 1 and 3). Fixing the wording now keeps this claim from colliding with the realdshbinding in #661.ultrafuzz.toml[models.deepseek]profile comment and the[agents.DeepSeekAgent]comment reworded; both instances of "official" dropped.packages/runtime/src/templates/smithers/agents/deepseek.tsxcreateDeepSeekAgentdoc comment reworded. Only the false first sentence changed; the accurate half about keeping credentials, model selection, telemetry semantics and pricing provenance off Anthropic defaults is kept verbatim.docs/config.mddocs/config.mdCHANGELOG.mdpackages/runtime/src/init.tsdeepseek.tsxdigest is registered as a stock hash, soultrafuzz initupgrades an untouched generated adapter instead of treating it as customized.Second pass: two false claims removed
The first pass added a
### Providers and harnesses are separate choicessection todocs/config.md, with a five-row provider/harness/ref table. Both of its load-bearing claims were false, so the section is deleted.deepseek.tsxhardcodesDEEPSEEK_ANTHROPIC_BASE_URL = "https://api.deepseek.com/anthropic"and injects it;claude.tsxcontains nobase_url/baseUrlat all, soClaudeAgentcannot be repointed;kimi.tsxis wired to Kimi Code. OnlyCodexAgentcan be repointed, and only through a hand-authored Codex-nativeconfig.tomlthat ultrafuzz neither owns nor validates. Documenting a separate provider/harness boundary as shipped fact is the prose form of the parallel surface PR feat(config): add provider harness binding validation #682 was closed for — and it is Document the provider/harness pairing policy and migration paths #664 scope, which is closed.--agent <Ref>" — is false for the OpenRouter row the same table introduces. The root config contains only[models.default|claude|kimi|deepseek]and[agents.CodexAgent|ClaudeAgent|KimiAgent|DeepSeekAgent]. There is no openrouter profile, no distinct ref, noOPENROUTER_API_KEY; that row is reached by editing[models.default]plus[agents.CodexAgent], not by selecting anything.Two more corrections in the same pass:
--agent DeepSeekAgent"selects this one". It does not. This page already states (Claude agent section) that--agentand--modeloverride fields of the default profile rather than selecting a profile by id, andruntime.test.ts:5163asserts that an--agentoverride carries neither the previous profile's model nor its reasoning. Selection ismodel_profiles = ["deepseek"]in.ultrafuzz/topology.yml;--agent DeepSeekAgentcarries neitherdeepseek-v4-pronorreasoning = "max".Acceptance criteria
docs/,*.md,packages/**/src, andultrafuzz.toml. Two remaining "first-party" hits —docs/config.md"pinned to the first-partydeepseekcatalog entry" anddocs/reference/artifacts-reports.md:481— are about the pricing catalog entry, not the harness, and are accurate as written.docs/config.md).docs/config.mdstates which pairing is the default and how the opt-in ones are actually selected, in the section that documents each one.One behaviour change, deliberate
AGENT_TEMPLATES[deepseek].stockSha256gains the pre-reword template digest (65bf43f3…). An earlier revision of this PR listed not doing this as a feature; that was wrong. Without the entry, every project already initialized keeps the false comment in its generated.smithers/agents/deepseek.tsuntil someone runsinit --force, which defeats the point of the change. The stock-hash set exists for exactly this:claude,codex, andkimieach already carry several historical digests, and a digest match means the file is provably untouched, so nothing a user wrote is at risk. A customized adapter still does not match and is still preserved.Explicitly not done
harness = "claude-code"+provider = "deepseek"schema. That surface was rejected in PR feat(config): add provider harness binding validation #682 and is struck from Correct the DeepSeek binding terminology: it is a compatibility pairing, not DeepSeek's first-party harness #660.DeepSeekAgentref/export, and no change to the doctor's agent-to-binary map.Tight-adapter ruling compliance
deepseek.tsxchanged by one block comment, 0 executable lines.[providers.*]or[harnesses.*]table, no new field on any existing table.ultrafuzz.tomlgains zero keys — the diff there is comment text only.workflowControlChildEnvironmentandworkflowControlCredentialValuecall sites are untouched.Verification
pnpm -w format:check— pass.pnpm -w lint— pass.pnpm -w docs:check(audit-profile-docs.mjs --check+docs-check.mjs) — pass, exit 0.packages/runtimenode:test suite (node scripts/run-tests.mjs) — 658 tests, 640 pass, 0 fail, 18 skipped, exit 0, run against the tree at47ee058f(which is the tree at HEAD apart from a CHANGELOG rewrap).