Changelog
Every release, newest first. Synced from
CHANGELOG.md
in the kit repository by npm run sync-kit — edit there, not here. Tags follow
delegation-kit--v<version> and each one has a GitHub Release.
[0.23.1] — 2026-09-07
Fixed
delegation-grokreported “ready” on a machine where every dispatch failed. Grok Build 1.0.13 denies the container runtime sockets (/var/run/docker.sock, podman, containerd, and the Docker Desktop paths under~/.docker) in every sandbox profile and resolves each endpoint before applying Seatbelt; when one is a symlink — Docker Desktop’s optional default socket link — a custom profile such asdelegation-kitis refused outright (“Refusing to start with its protections missing”), while the capability probe and model inventory still succeed.checknow probes those endpoints after resolving the CLI and reports the lane unavailable with the offending path and the remedy;runfails closed at exit 69 before dispatch; and a refusal surfaced by the CLI itself is classified assandbox_profile_refused(exit 69) instead of a genericdispatch_failed.DELEGATION_GROK_RUNTIME_SOCKET_ENDPOINTSoverrides the endpoint list for tests. Found by the first live Grok probe since 2026-08-27, on a machine where the link had appeared on 2026-08-28.install.shsaid the compatible Grok Build CLI archive was not retained whenever the runtime was unavailable, even though the archive was in place; the message now depends only on the pinned archive, and runtime availability is doctor’s report.
[0.23.0] — 2026-09-07
Fixed
delegation-route tablerendered its Fallback column from a field the rows never carried (fallbackinstead ofprovider_fallback), so the declaredopus-reviewersecurity fallback toclaude-opus-4.8never appeared. The column now shows the target model and trigger;tests/routing-gates.shasserts it.- README and
doctor.shstill named Sol as the Codex reviewer/judge after the 0.22.0 migration to GPT-6 Astra; both now say Astra. fable-judgewas pinned to thefablealias while the central gate bindsclaude-fable-5-1; the agent,doctor.sh, and the suites now pin the exact id, matchingopus-builderandopus-reviewer.- Removed the unused
found_namehelper fromdoctor.sh;.gitignorenow covers.hermes/per-machine agent state.
Changed
- Shared runner library.
bin/lib/delegation-runner-common.shholds the helpers that were copied into every external runner (die,have,sha256_file,key_file_mode,normalized_destination, lane listing by status,acquire_oauth_lock_wait). All six runners source it after resolving their install root;install.shcopies it to$DATA_HOME/bin/liband never links it onto PATH.runner_sha256still hashes the runner file alone — the library is bound byrunner_source_commitand the clean-checkout refusal. - Shared chat-completions core.
bin/lib/delegation-chat-completions.shis the whole text-only OpenAI-compatible transport;delegation-deepseekanddelegation-qwenare now thin wrappers that set their identity and define provider hooks (request body, key validation, usage accounting, the Qwen next-snapshot probe). Both suites pass unchanged. - Router. The five near-identical jq blocks that compared the Kimi, Qwen,
DeepSeek, Gemini, and Grok executable gates against the central gates are
one
check_executable_gatefunction;resolvecomputes the eligible rows and choices once. JSON output is byte-identical to 0.22.0. docs/compatibility.mdverified snapshot refreshed on 2026-09-07 with the numbers observed for this release.
[0.22.0] — 2026-09-06
Changed
- Codex review/judgement lanes migrate from Sol to GPT-6 Astra (
gpt-6-astra, efforthigh) on the owner decision following OpenAI’s 2026-09-03 launch. New familyopenai-gpt6(distinct from gpt-5.6) keeps cross-family review meaningful.astra-reviewer@ high covers material-review and security;astra-judge@ high replacessol-judge@ max. Super-judgement is now Fable 5.1 + Astra. Verified live on Codex CLI 0.153.4.
Fixed
.gitignorenow coversconfig/qwen-token-plan.env(the Qwen Token Plan key file), which was previously unprotected.
[0.21.0] — 2026-09-01
Changed
- Judgement lane migrates from Fable 5 to Fable 5.1 (
claude-fable-5-1, still atmax, still manual-qualified explicit-only) on the owner decision following Anthropic’s 2026-09-01 launch.fable-judgeand the central gate bind to the exactaa-claude-fable-5-1-maxrow; Fable 5 evidence is retained as context. Verified live: authenticated Claude Code returned exact PONG and surfacedclaude-fable-5-1at requested max. This owner decision does not convert coding evidence into judgement qualification. Super-judgement (Fable 5.1 + Sol) semantics are unchanged.
[0.20.1] — 2026-09-01
Fixed
- The npm wrapper consumed
--skip-doctorbut also forwarded it toinstall.sh, which refuses unknown arguments and exited 2. The wrapper now consumes the flag; the test assertsinstall.shnever sees it.
[0.20.0] — 2026-09-01
Added
- User-directed activation (
activation_policyinconfig/routing-gates.json): every dispatch must be selected or explicitly delegated by the user for the current request. The selection vocabulary is now closed atexplicit-only/blocked;default,fallback, andpreferred-explicitare removed and all lane-localfallbackpointers are gone. PR #56. delegation-route resolve --selected-profile <profile>validates one exact user-selected profile (exit 78 if it is not selectable for the lane) and the resolve output now returnschoices/selected/selection_validatedwithrequires_user_direction: true. PR #56.delegation-patch-verifyandconfig/external-patch-policy.json: a read-only, fail-closed trust boundary for text-patch lane output — path confinement, denied-path classes, capability and limit checks, strip level fixed by header grammar, read-only attestation. PR #55.- The external-executor contract now covers the patch policy: every
text-patchlane declares the policy version and verifier, andcheckfails on a missing, stale, or drifted declaration. PR #55. - npm distribution:
npx delegation-kitruns the universal installer without a manual clone (thin wrapper; installed artifacts are unchanged).
Changed
- Resident policies replaced by a minimal user-direction guard on both hosts
(
claude/CLAUDE.delegation.md,codex/AGENTS.md): no standing permission to delegate, authorization is per dispatch and never carries to retries, reviews, or additional workers.install.shregisters it;doctor.shverifies it on both hosts. PR #56. - All eight skills are explicitly user-triggered;
orchestrateno longer mandates hidden agent calls — the user-approved finite dispatch list is the budget. PR #56. - The external-executor contract mirrors the closed vocabulary: every
dispatchable lane carries
requires_explicit_decision: true. The contract still describes and validates only; each runner remains the sole enforcement authority. PR #56. - README restructured for clarity: why/quick-start/how-it-works flow, the governance model in one place, and a command reference table.
[0.19.0] — 2026-08-29
Changed
- Promote
glm-5.3-flash/claude-zai/maxas the sole GLM route after the exact v4 pack passed 9/9 no-retry attempts at score 1.0. All 204 assistant events carried the exact Flash identity, every terminalmodelUsagereported the sole canonical first-party Flash participant, and every builder checker passed. Clerk/scout are qualified explicit-only; builder is provisional explicit-only. Historical GLM-5.3 and Flash v1-v3 evidence is not relabelled. - Keep Claude Code and Bun temporary paths inside the evaluation scratch and
preserve
USERin the sanitized environment. The first Flash attempt never reached the provider because the frozen native CLI tried to create/tmp/claude-501; that attempt remains a terminalVOID. - Record the terminal v3 identity probe and align future strict extraction with
the actual Claude Code/Z.AI stream: content-bearing assistant events expose
message.model, whilemodelUsagecarriescanonicalModelandprovider. V3 is not relabelled; the fresh v4 pack supplies the evidence used by the promotion recorded above.
Verified
- The exact v4 pack completed 9/9 no-retry attempts at score 1.0 for
glm-5.3-flash/claude-zai/max; all 204 assistant events had complete Flash attribution, every usage record named the sole canonical first-party Flash participant, and all three builder checkers passed 6/6 tests. - The release candidate passed all 12 regression suites in 52 seconds, 59
routing checks, ShellCheck, JSON/evidence validation, the eight-check version
gate,
git diff --check, and independent cross-family review with verdictSHIP. - A clean release-candidate install matched source across the GLM runner, both
gates, and the Claude/Codex executor skills. Static doctor reported
55 OK, 0 WARN, 0 FAIL;doctor.sh --ping --ping-glmreported58 OK, 0 WARN, 0 FAIL, with GLM-5.3-Flash and both bridge directions returningPONG/reachable.
[0.18.0] — 2026-08-27
Added
- Added
delegation-grok run --oauth sharedfor concurrent Grok Build workers. Operational runs share one runner-owned persistentGROK_HOMEgeneration, use the vendor auth lock for refresh coordination, and hold the kit lock only for generation adoption and atomic publication. Externalgrok loginwins a conflict; corrupt or superseded OAuth state fails closed. Evaluations remain serialized.
Fixed
- Serialized Grok runs now hold an OAuth lock for the complete dispatch and atomically publish validated refreshed credentials back to the ambient login, instead of deleting a refreshed token with the ephemeral HOME. Sandbox attestation uses a unique per-run profile and ignores peer/malformed events; the agent cannot edit the credential, policy, or attestation files. Superseded credential generations are bounded instead of accumulating at rest.
Verified
- The 0.18.0 release candidate passed all 12 regression suites in 52 seconds,
59 routing checks, ShellCheck, evidence validation, version consistency, and
git diff --check. A real two-worker Grok 4.6/high smoke returnedPONGtwice in about five seconds, left both workspaces empty, and finished with ambient/shared OAuth hashes aligned. The provider did not separately expose the effective content model, so the smoke is operational compatibility proof, not strict model-identity evidence. The installed release candidate matched source across the changed runner, gates, and skills; the live doctor command completed with57 OK, 0 WARN, 0 FAIL.
[0.17.0] — 2026-08-18
Changed
- Reworked the native routing policy so Sonnet and Luna are limited to very
small, non-builder clerk/scout/routine-review tasks. The former
sonnet-builderandterra-scoutprofiles are retired; the oldopus-reviewer/highprofile is replaced by a max-effort cross-family reviewer. - Added
opus-builderatclaude-opus-5/maxand made it the fallback to the defaultterra-builderatgpt-5.6-terra/max. Added separate read-onlyopus-reviewerandterra-reviewerprofiles, also atmax, so both high-level models can build or review without mixing permissions. - Added an explicit model-family registry and fail-closed cross-family review rule. Every routine/material/security review resolution now requires the producer profile or family, removes all same-family reviewers, and exposes the exclusions in the router output. Runtime availability must still be checked; no eligible reviewer means stop, not self-review.
- This is a breaking routing migration: callers resolving a review lane must
now pass
--producer-profileor--producer-family; omission exits64instead of selecting a potentially same-family reviewer. - Promoted security review from the former manual Opus-only route to
producer-aware provisional defaults/fallbacks across Sol, Terra, and Opus.
The Opus path continues to disclose Anthropic’s possible Opus 4.8 fallback
for classifier-flagged cyber requests; exact Opus 5 identity is not guaranteed
on that path. The former native
seniorroute now has no operational profile. - Re-pinned the read-only
sol-judgeprofile fromhightomaxandfable-judgefromxhighto its verified supportedmaxon explicit owner effort decisions. Both remain manually qualified and explicit-only; coding rows at the exact max tuples are contextual, not judgement evidence. - Recorded a scoped installed-profile smoke for
opus-builder: the exact Opus/max request changed only its assigned file, passedgit diff --check, and surfacedcanonicalModel: claude-opus-5. The lane remains provisional; one synthetic edit is compatibility evidence, not general qualification. - Updated installation, cleanup, doctor, routing tests, and policy documents to enforce the new role and family boundaries and remove stale installed profiles.
- Fixed the release doctor so its missing-producer probe preserves the caller’s
shell options, and added an end-to-end regression for Codex configurations
without a root-level
sandbox_mode.
[0.16.0] — 2026-08-17
Added
- Added
delegation-deepseek, its executable and central gates, installer, doctor checks, executor skill, and regression suite. The officialdeepseek-v4-proAPI is pinned tomax; only the text-onlybuilderlane is provisional/explicit-only after one exact live patch smoke, and every other lane remains blocked.
Changed
- Re-pinned the fail-closed Antigravity bridge from Gemini 3.6 Flash to
gemini-3.7-flash, including its gate, skill, policy, installer, doctor, and tests. No operational Gemini lane is inherited: the current local session cannot attest exact 3.7 inventory/OAuth, so all new routes remain blocked. - Refreshed the evidence registry with first-party Gemini 3.7 Flash and DeepSeek V4 Pro sources and contextual benchmark claims; neither source auto-qualifies a lane.
[0.15.0] — 2026-08-16
Changed
- Sol becomes Codex’s default material reviewer without widening its role.
sol-reviewerathighmoves from manual explicit selection to the provisionalmaterial-reviewdefault on an explicit owner decision. It remains read-only and provisional because no exact review precision/recall row exists.sol-judge, judgement, andsuper-judgementremain manual and explicit-only; routine review and executor lanes are unchanged. - GLM-5.3/max replaces every previous GLM route across the active executor. The exact high/max comparison ran three no-retry attempts per lane on the same frozen runner. Both efforts scored 1.0 in all nine attempts and passed every builder checker; the preregistered efficiency rule selected high (372s, $0.334234) over max (505s, $0.719138), after which the owner explicitly selected max as the sole operational effort. Clerk and scout are qualified explicit-only and builder remains provisional explicit-only. The 5.2 and 5.3/high gates and central profiles were removed; upgrades delete stale installed copies while frozen receipts remain historical. The selected tuple was requalified 9/9 on the final max-only runner bytes; the public result records digests for both the comparison and operational receipts.
- The evidence snapshot records Z.ai’s GLM-5.3 release, Coding Plan access, effort mapping, and launch benchmark claims as contextual-only evidence. No independent tracked leaderboard had a GLM-5.3 row on 2026-08-14.
Fixed
delegation-glmnow reads model and profile identity from the selected executable gate, permits onlyglm-5.3/max, and capability-probes Claude Code with a ten-second fail-closed timeout. A separately verified native binary can be selected explicitly for diagnostics without weakening model, lane, effort, sandbox, or manifest checks.
[0.14.0] — 2026-08-13
Changed
- Grok 4.6 replaces Grok 4.5 across the active integration. The runner,
central and executable gates, skills, installed Claude/Codex policy, doctor,
documentation, and regression fixtures now pin
grok-4.6through Grok Build at efforthigh.builderandfrontend-builderremain provisional andpreferred-explicit, so every dispatch still requires an explicit decision plus--allow-provisional; no reviewer, senior, or judgement lane was added. - The 2026-08-12 evidence snapshot adds separate Grok 4.6 observations from CursorBench 3.2, FrontierCode 1.1, APEX-SWE, APEX Agents, Code Arena WebDev, and xAI’s launch material. Every row is contextual: the independent results use non-production harnesses, WebDev is preliminary, and xAI’s figures are first-party claims. Grok 4.5 benchmark rows remain historical evidence and do not support the new route.
Fixed
- Grok metrics no longer mistake a
modelUsagebilling participant for the model that authored the content. They record the requested model, any separately surfaced effective content model, and all usage participants, summing their tokens and cost. A surfaced mismatch fails every lane closed; a strict evaluation with no content-model identity isVOIDrather than a false pass. - Upgrading removes the installed
grok-4.5-routing.jsonand installs the 4.6 gate atomically with the current router and evidence snapshot before checking a retained private CLI archive. A portable upgrade regression covers stale gate removal, new-gate installation, and archive retention without depending on the user’s authentication state.
Verified
- All ten regression suites, ShellCheck, JSON/evidence/gate validation, and the
version/tag consistency checks pass. After reinstalling the dirty release
candidate,
delegation-grok check --jsonresolved Grok Build CLI0.2.114withgrok-4.6-build, and./doctor.sh --ping-grokreturnedPONGwith42 OK, 0 WARN, 0 FAIL.
[0.13.2] — 2026-08-05
Fixed
- The Agent Arena row for Gemini 3.6 Flash had five of its six effects
recorded with the wrong sign. The board encodes each effect’s direction as a
coloured triangle rather than a character, so the automated capture that built
the 0.13.0 snapshot read every value as positive; the row was committed with
sign_inferredand onlynet_improvement_pctflipped, on an inference from the sort order. Read visually from the rendered board, the model is negative on every effect: net improvement-3.01%, confirmed success-1.63%, praise vs complaint-5.19%, bash recovery-2.69%, and steerability-6.70%— that last one being the scout lane’s own supporting metric, which makes this the difference between “unproven” and “measurably worse than the baseline agent in real sessions”. The flag is gone and the row now states that its signs were read, not inferred. The rows near the boundary were re-read too: GPT 5.6 Sol, Luna, and Terra at ranks 5, 17, and 18 are positive as recorded, so the error was isolated to the one row below the inflection. skills/qwen-executornow tells the brief to demanda/andb/diff header prefixes. The text-only builder lane returns a patch the lead applies, and left to itself the model emits--- <path>on both sides;git applydefaults to-p1and strips one leading component precisely because of that convention, so an unprefixed header resolves to a path that does not exist and a correct patch fails to apply — which reads like a wrong answer and is not one. Re-dispatched with the instruction, the model returned prefixed headers and the patch applied with a baregit apply. The skill also records-p0as the recovery for a patch already in hand.
[0.13.1] — 2026-08-05
Fixed
- The Gemini lane was unreachable from an SSH session, whatever the user did.
agypicks its credential store from the environment: seeingSSH_CLIENT,SSH_CONNECTION, orSSH_TTYit switches to a file-based token store and never consults the macOS Keychain.delegation-geminisupplies credentials the opposite way —prepare_isolated_homesymlinks the user’s~/Library/Keychainsinto the isolated home and carries nothing else — so over SSH the CLI looked in a store that was never written,agy_statusreportedagy model inventory unavailable, and every dispatch failed closed with exit 69. Signing in again could not help: the login landed in the Keychain that the CLI had already decided to ignore. The runner now clears the three markers for everyagycall that can touch credentials — the plugin inventory, the model inventory, and the dispatch itself. On a local session they are unset already, so this is a no-op there, and it grants nothing new: no additional tools, no filesystem access, only which credential store the CLI consults. Verified end to end from an SSH session:checkreportsreadyand a realscoutdispatch returned a correct answer at exit 0. - The unavailable-runtime reason now says to keep the login keychain unlocked, since that is the only store this runner can read; the previous text sent the reader to an interactive sign-in that would not have fixed the SSH case.
tests/gemini-runner-diagnostics.shnow runs its whole suite with SSH markers exported, and itsagystub exits 90 if any of them reaches the CLI. Neutering the fix makes the suite fail, so the regression is real rather than vacuous.
[0.13.0] — 2026-08-05
Changed
- Routing gate — the three Codex executor lanes are re-pinned above the effort
cliff.
luna-clerkmoveslow→max,terra-scoutlow→medium, andterra-buildermedium→max. Lanes, models, harnesses, sandboxes, and statuses are unchanged; only the pinned effort moved. The reason is that the cheap models do not degrade gracefully and the kit had its two highest-volume lanes pinned where they collapse: on the exact Artificial Analysis rowsgpt-5.6-lunaatlowscores 15% SWE-Atlas-QnA — the clerk required metric — against 33% atmax, and the Epoch effort ladder puts the same model at 1.5% DeepSWE atlowagainst 67.2% atmax.terra-buildergains both builder required metrics: DeepSWE 46% → 67% and Terminal-Bench v2 69% → 84%, at $2.76 rather than $0.90 per task. Each new effort was chosen because it already carries an exact benchmark row, so no lane trades measured evidence for expected capability. Owner decision on measured evidence, recorded in each lane’squalification_basis. - Routing gate — Kimi K3 and Grok 4.5 become
preferred-explicitonbuilder(they already were onfrontend-builder). Both remainprovisionaland still require an explicit decision plus--allow-provisional; only the ordering among external builders changed. They are the only two carrying both builder required metrics on an exact production tuple, so they now rank aboveglm-builderandqwen3.8-max, which carry none. This records preference, not qualification: Kimi’s local evaluation is still a quota-truncated run and Grok’s a single non-held-out task. - Codex reasoning-effort support is per model, not global, and reaches further
than this repository claimed. Probed against the provider on 2026-08-05:
gpt-5.6-terraenumeratesnone · minimal · low · medium · high · xhigh · maxand ran athigh,xhigh, andmax;gpt-5.6-solandgpt-5.6-lunaran atxhighandmax;gpt-5.5refusesmax. The effort table inmodel-routing.mdpreviously stopped every Codex row athigh.
Fixed
delegation-evidence checksilently passed a broken snapshot. It ranage="$(validate)", and a command substitution does not inheritset -e, so thejq -ecovering schema, id uniqueness, and source references could fail whilecheckstill printedvalidand exited 0 — only the freshness check, which uses an explicitreturn, was effective. The validation now fails with exit 65 and a message naming the file. Caught when a snapshot whose rows referenced three nonexistent sources was reported as valid.preferred-explicithad no positional meaning:delegation-route resolveemitted theexplicitarray in profile-insertion order, so a plainexplicit-onlyprofile could be listed ahead of a preferred one. Preferred entries now come first, insertion order preserved within each group.
Added
- 65 dated evidence rows and three sources in
config/model-evidence.json: Agent Arena (data 2026-08-03, 1,607,993 sessions — first Claude Opus 5 rows, entering at ranks 1 and 3), Code Arena WebDev (data 2026-08-01, 510,194 votes — firstqwen3.8-maxrow at rank 4, which is thefrontend-builderrequired metric for a model that has no such lane), and the Epoch AI ZIP of 2026-08-04, whose first import of the DeepSWE effort ladder is what made the cliff visible. Existing rows are untouched; the gates reference them by id. Every Epoch row iscontextual_onlybecausemini-swe-agentis not a production harness, and the Gemini Agent Arena row carriessign_inferredbecause the board’s sign is not machine-readable.
[0.12.0] — 2026-08-04
Added
delegation-kimi run --oauth shared(orDELEGATION_KIMI_OAUTH_MODE=shared): concurrent Kimi dispatches. Until now the kit lock spanned the whole run, so a second agent died instantly with exit 75 — but the vendor supports ~30 concurrent instances when they share oneKIMI_CODE_HOME, coordinating refresh-token rotation through the CLI’s own cross-process oauth lock. In shared mode, OAuth state lives in a runner-owned generation under$DELEGATION_DATA_HOME/kimi-shared-oauth; each run’s isolated home symlinks itscredentials/andoauth/dirs at that generation so the vendor lock coordinates the children, and the kit lock shrinks to two brief critical sections (seeding the generation, publishing it back to the ambient home). Generations — not hash markers — keep a dead token family from clobbering a credential after an externalkimi login; a busy kit lock at publish time defers to the next run instead of failing. The serialized default and its sandbox profile are byte-for-byte unchanged,--evaluationruns always serialize, and the live two-parallel smoke against the real CLI passed on 2026-08-04 with a real mid-run rotation through the symlinked generation.DELEGATION_KIMI_OAUTH_WAIT_SECONDS(default 5, 0 = fail immediately): bounded wait on the kit lock for shared-mode seed and publish.- delegation-glm now distinguishes two 429 shapes in
<output>.error.json: reasonrate_limited(retry with backoff) versusquota_exhausted, which carries the window-reset epoch in the newnext_flush_timefield (diagnosticschema_version2). Z.AI’s numeric body codes never reach the runner — a captured stream showsapi_retrycarries only the HTTP status — so quota detection keys on therate_limit_eventreset epoch instead.
Fixed
- The delegation-glm stderr fallback grepped for Z.AI code
1312, which does not exist in the published error table, and missed1302— the actual rate/concurrency code. - A stray 429 event in an otherwise-completed GLM stream no longer overwrites
an extract-phase reason (
empty_result,model_mismatch, …) withrate_limited: reclassification is now scoped to dispatch failures.
[0.11.1] — 2026-08-03
Fixed
- Made the CI release-tag check fetch the real tag object before validating it.
actions/checkoutmaps the commit SHA ontorefs/tags/<name>, leaving a lightweight ref even when the pushed tag is annotated, so the 0.11.0 tag run failed withtag is annotated: expected 'tag', got 'commit'while the tag itself was correct on both the server and locally. - Made
tests/version-consistency.sh --tagfail when the tag object is absent instead of silently skipping the annotation and subject checks. A silent skip left the convention unenforced in exactly the environment it was written for.
[0.11.0] — 2026-08-03
Added
-
install.shnow writesinstalled-version.jsoninto the data home, anddoctor.shcompares it against the checkout. Until now a stale install was undetectable: every other doctor check inspects the installed copy against itself and passes while it lags the repository. A version mismatch is a FAIL, a same-version commit mismatch is a warning, and installs from a dirty checkout or with--claude-only/--codex-onlyscope are recorded so the marker never overstates what was installed. -
Added
tests/install-version-marker.sh, which installs into isolated homes and asserts both the marker’s contents and that doctor detects version drift, commit drift, a missing marker, and a missing install. -
Added
run-tests.sh, which runs every suite in parallel on one machine and prints the full log of any that fails. CI uses it, cutting the macOS job’s test step from ~116s to well under half without allocating a second runner.--sequentialrestores one-at-a-time output for debugging. -
Added
.github/workflows/ci.yml. Until now nothing verified a release except the person cutting it. Every pull request and push tomainnow runs shellcheck at-S warning, the version-surface check, and the regression suites on macOS; a tag push additionally validates the tag against the manifest version. Suites run on macOS because the Kimi runner requires/usr/bin/sandbox-execand the Grok suite asserts BSDstat -fmodes. -
Added
tests/version-consistency.sh, which enforces the CLAUDE.md release rules: the five version surfaces must agree, the newest changelog section must be the shipped version, and--tagvalidates thedelegation-kit--v<semver>annotated-tag convention.
[0.10.0] — 2026-08-03
Changed
- Repinned the Qwen bridge from
qwen3.8-max-previewtoqwen3.8-maxafter the model left preview on 2026-08-02. The rename rests on a local Token Plan probe confirmingGET /modelslists the unsuffixed id and that a chat completion pinned to it returns.model == "qwen3.8-max"withreasoning_effort: xhighaccepted; the-previewid still resolves in parallel. Renamedconfig/qwen3.8-max-preview-routing.jsontoconfig/qwen3.8-max-routing.jsonand the central gate profile toqwen3.8-max. - Promoted the Qwen
builderlane to provisional / explicit-only atxhighon an explicit owner routing decision.delegation-qwen runnow accepts--allow-provisional, which is mutually exclusive with--evaluation; the previous blanket refusal of every provisional lane is gone. Every other lane stays a blocked candidate, andjudgementstays disabled. - Cleared the Qwen
policy-annotationmanifest allowlist in both gates. The frozen manifest was bound to theqwen3.8-max-previewprofile, model, and runner hash, so it can no longer validate; regenerate it against the new tuple before any evaluation run. The frozen v2/v3 evaluation artifacts are historical records and were deliberately left unrewritten.
Documentation
- Recorded the promotion as an owner decision rather than measured capability.
A 2026-08-03 re-check of the Artificial Analysis coding-agent board and
Terminal-Bench 2.1 still found no
qwen3.8-maxrow, so both builder required metrics (coding.deep_swe_pass_pct,coding.terminal_bench_v2_pass_pct) remain unmet andexact_evidence_idsstays empty. Alibaba has published no benchmark table for the model. - Added the contextual
qwen-3.8-max-ga-launchevidence row and itsqwen-3.8-max-ga-2026-08-03source. Its metrics live underlaunch.*so they cannot satisfy any lane’srequired_metrics. The snapshot date stays 2026-07-31 because this was a targeted re-check, not a full refresh. - Documented that the Qwen builder lane is text-only: the chat-completions transport exposes no tools and no terminal, so it returns a patch the lead applies and verifies rather than editing a worktree, and it is prompt-only.
[0.9.0] — 2026-08-01
Added
- Added
delegation-schema, a read-only deterministic compiler and verifier for Claude Code and Codex structured-output transport schemas.
Fixed
- Made GLM lane evaluation compile its manifest-bound schema for Claude before dispatch, while leaving the normative schema and frozen protocols unchanged.
- Made schema compilation preserve literal objects and property order, reject non-standard JSON, and fail closed on unsupported Codex keywords, unions, and documented Structured Outputs limits.
- Made
doctor.shuse Claude’s provider-free auth status and warn when a sanitized macOS environment dropsUSERand therefore Keychain resolution. - Made
doctor.shexercise both the Claude and Codex compiler paths before reporting the installed schema transport helper healthy.
Documentation
- Defined separate requested, effective, and observed-usage model evidence for
Claude safety fallback and internal classifier telemetry, including aggregate
token/cost accounting and exact-identity
VOIDbehavior. - Documented provider-specific schema preflights for raw Claude and Codex
bridges;
--helpchecks alone are not semantic compatibility checks.
[0.8.1] — 2026-07-31
Changed
- Raised the maximum manifest-bound Kimi evaluation timeout from 600 to 1200 seconds. Operational Kimi runs remain capped at 900 seconds.
[0.8.0] — 2026-07-31
Added
- Added hash-allowlisted, manifest-bound qualification for GLM clerk, scout,
and builder at the exact
glm-5.2/claude-zai/hightuple. - Added portable lane-specific structured-output schemas, per-attempt receipts, full worktree and Git-control attestation, and a public minimal aggregate for the frozen repeated comparison.
- Refreshed current GLM and cross-model context from Agent Arena, Code Arena WebDev, Terminal-Bench 2.1, SWE-bench-Live, OpenBench, Z.ai, and Epoch.
Changed
- Qualified GLM clerk and scout as explicit-only routes after three valid repeats matched the best incumbent on each bounded pack.
- Moved GLM builder from candidate/blocked to provisional/explicit-only after
all three GLM attempts and all three Terra incumbent attempts passed the
deterministic checker. Builder still requires
--allow-provisional. - Extended central gate validation so private GLM qualification allowlists may cover clerk, scout, and builder without creating an operational route by themselves.
Fixed
- Made the GLM runner actually pass the manifest-bound output schema to Claude Code and extract structured output without changing the historical policy-annotation path.
- Replaced a non-portable generic comparison schema with lane-specific schemas accepted by both Claude Code and Codex.
- Hardened GLM qualification with fixture-only data reads, a native-CLI process
allowlist, an empty environment, immutable
.git, ignored/untracked file and executable-mode hashing, and disabled Claude keychain prefetch. The final runner passed independent security review and macOS sandbox canaries.
Documentation
- Documented the exact local decisions, costs, latency limitation, invalidated
runner/preflight series, and two
VOIDClaude builder comparator attempts caused by an out-of-fixture write. No attempt in the final v6 series was retried.
[0.7.2] — 2026-07-31
Changed
- Removed downstream Dipylon evaluation packs from the repository, installer, doctor, routing allowlists, and pack-specific tests.
- Kept only kit-owned qualification manifests in the central routing allowlist and added a generic invariant that every allowlisted manifest is tracked.
- Preserved the generic Qwen 900-second evaluation ceiling and timeout classification introduced alongside the downstream packs.
Documentation
- Documented that project-specific evaluation packs belong in their owning repository or artifact registry and are deliberately ignored here.
- Kept the 0.7.1 Claude Code, Codex, and external-runner compatibility matrix as the reproducible compatibility snapshot for this patch release.
[0.7.1] — 2026-07-31
Added
- Added a reproducible compatibility matrix for all shipped Claude Code agents, Codex profiles, and gated external runners.
- Recorded semantic smoke expectations, cross-CLI round-trip verification, fail-closed Qwen behavior, and byte-for-byte installation checks.
Documentation
- Clarified that
codex exec --ephemeral -p <profile>must not be combined with--ignore-user-config, which also suppresses the selected profile. - Clarified that Claude read-only roles expose Bash for inspection and therefore do not have the same OS-enforced write isolation as Codex read-only sandboxes.
- Preserved all existing provisional, candidate, and blocked routing decisions; successful runtime verification is not a model promotion.
[0.7.0] — 2026-07-31
Added
- Upgraded the Kimi bridge to a capability-probed Kimi Code runtime with lane-specific agent files and a digest-attested ripgrep allowlist.
- Added bounded cancellation, timeout handling, sanitized heartbeat/error diagnostics, and explicit OAuth finalization.
Security
- Confined Kimi process execution to the selected CLI,
/usr/bin/true, and the exact pinned ripgrep runtime under the macOS sandbox. - Kept all Kimi lanes provisional and explicit-only without changing historical evaluation manifests.