Document Work and To-do as the two product concepts, synchronize every shipped locale, publish the six-tool and typed-image contracts, and keep static web generation offline while live GitHub chrome refreshes after deployment.
Bump the workspace, every published crate, the npm CLI package and its
codewhaleBinaryVersion, the runtime SDK, and the VS Code extension to 0.9.6 —
the four version sources the release workflow cross-checks before it will
tag.
The changelog entry describes v0.9.6 as what it is: a subtractive release.
The guards that interrupted live work, the per-mode prompt doctrine, and the
deterministic second compaction system are gone; a truncated provider
response can no longer be recorded as a finished answer. Most of these were
found by running v0.9.5 against Terminal-Bench 2.1 beside Pi 0.8.41 on the
same model, effort, endpoint, and task digests, then reading the trials
Codewhale lost — so the entry names those trials rather than describing the
fixes in the abstract.
Mistral AI ships in this release; Xavier Pestel (@xavierpestel-ai) is
credited in the contributors section for #5295.
Scope Mistral's polymorphic reasoning and replay behavior to exact first-party HTTPS routes, preserve stored thinking across real prompt construction, and keep DeepSeek's sanitizer from injecting a second dialect into tool-call history.
Align the current model registry, provider-scoped model override, generated facts, docs, and focused route-isolation tests. Split the large stream decoder test module so the source-structure gate remains below budget.
Signed-off-by: CodeWhale Bot <bot@codewhale.net>
Advance the separately modeled public-release record only after the immutable GitHub release and 34-asset gate are live. Regenerate the checked-in web facts so install pages and deployed receipts resolve v0.9.5 instead of the prior release.
Record GitHub v0.9.4 as the latest published release while keeping the workspace and website source candidate at v0.9.5. Regenerate the build-time facts fallback so the manual Cloudflare deploy receipt compares against the same published tag already served from KV.
Verified with the focused facts and deploy contracts, the complete 256-test web suite, ESLint, TypeScript, facts/docs drift checks, and a 288-page production build.
Bump every tagged package and internal dependency pin to 0.9.5, refresh Cargo and npm lock records, regenerate the packaged changelog and web facts, and record the user-visible candidate contract. The changelog deliberately remains marked Unreleased candidate until the rebuilt binary is dogfooded and publication is explicitly approved.
CI's stable toolchain moved past local 1.97: private_interfaces now denies
the 13 tui::ui seam types (DispatchRecovery, UserDispatchPrepare,
TerminalInputPump, ProviderKeyVerifier, etc.) that the ui split's
pub(crate) fns legitimately expose, failing Lint, Test (macos/windows),
Mobile runtime smoke, and npm wrapper smoke. Make the types pub(crate) —
they were already crate-visible in practice via those signatures — and fix
the one clippy 'matching on Some with ok() is redundant' in effort.rs.
Also regenerate web/lib/facts.generated.ts: the harvested MCP-discovery
work raised the public tool surface 67 -> 69.
Contributor tier is a distinct Meta wire model, not an alias to the
standard tier — stop collapsing it in effective_muse_wire_id so the
API actually receives muse-spark-1.2-contributor. Pricing/display
already treated it as distinct; wire now matches.
Bump web facts toolCount 66 -> 67 (harness tool).
Both #5135 fast gates were red on the new tip for generated-file drift, not
code:
- web/lib/facts.generated.ts still claimed 67 model-facing tools; the train
removed one, and the fresh derive counts 66. Regenerated with
`npm run prebuild` (only generatedAt and toolCount change).
- crates/tui/CHANGELOG.md is the packaged slice of the root CHANGELOG and
had not been re-synced after the root gained the work-bar standing-register
entry. Regenerated with scripts/sync-changelog.sh.
Verified: scripts/release/check-versions.sh passes locally (workspace=0.9.4,
npm=0.9.4, lockfile in sync) and web check:facts drift is clean. Authored
with agent assistance (Claude).
`html[lang="zh"] h1/h2/h3` relaxed `overflow-wrap: anywhere` so Chinese
headings stop stranding punctuation on a line of its own. ja needs exactly the
same rule and never had it — capping the ocean headings made it visible, with
`コマンド 1 つで始める。` breaking between `1` and `つ`. ko wants it too: it has
real word boundaries and should break on them rather than anywhere.
Extended rather than duplicated, per the rule that CJK overrides are extended
and never routed around.
Verified by eye at /ja and /ko, 1440px and 390px; no horizontal page scroll in
en/zh/ja/ko at 390px. npm test (235), lint, check:locales, check:docs.
These were carried as uncommitted release-preparation edits. They are not
leftovers — without them the crate's test target does not compile, so the
branch cannot show a green gate.
- prompts.rs asserted on SUGGEST_APPROVAL, which a98b184f5 deleted with the
rest of the prompt compatibility layer. The #5146 propose-vs-execute
contract survived the deletion but moved, so the test now pins it on
CORE_EXECUTION_PROFILE_PROMPT and prompts/text.rs carries the contract text
where the model actually reads it. Without this the test target fails to
compile with E0425 at prompts.rs:2892.
- Effort receipts follow 8c5370a56: the first-party DeepSeek wire documents
reasoning_effort [low, high, max] and has no medium, so low maps to low and
the header renders the tier alone instead of `low→high`. Updated in
subagent/tests.rs, ui/tests.rs, underwater.rs and the qa_pty visual contract.
- Facts regenerated: toolCount 67, @shenjackyuanjie credited in the
public-surface contributor record.
One assertion tightened rather than carried as written: underwater.rs's
normal_header test had been relaxed to `contains("low")`, which also passes on
the old `low→high` rendering and so pinned nothing. It now additionally
asserts the arrow is absent, which is the actual regression to guard.
Receipts: the six bin-suite failures these address were reproduced at the
unmodified base and are exactly this set. Full gate runs with the workspace
suite.
* fix(web): map Model Studio provider variants in facts drift guards
The train's Model Studio lane added four ApiProvider variants without
registering them in the web facts maps, failing check-facts (Lint & Type
Check on #5135). All four share the single MODELSTUDIO_API_KEY env var.
* chore(web): regenerate facts.generated.ts (providers 40, tools 68)
Date the v0.9.4 changelog, preserve contributor credit and unpublished-release truth, and synchronize every crate, npm, lockfile, smoke-test, and generated public-fact version surface. This prepares a source candidate only; it does not tag, publish, or create a release.
Signed-off-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
Update the repository-backed public release fact from v0.9.2 to the live v0.9.3 GitHub release. Regenerate the website fact module so local and public-surface checks agree before preparing v0.9.4.
Verified with npm run check:facts and npm run check:docs.
Signed-off-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
(cherry picked from commit 59ba8dab1b)
Signed-off-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
Update the repository-backed public release fact from v0.9.2 to the live v0.9.3 GitHub release. Regenerate the website fact module so local and public-surface checks agree before preparing v0.9.4.
Verified with npm run check:facts and npm run check:docs.
Signed-off-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
Bump the Rust workspace, internal dependency pins, npm wrapper, lockfiles, public candidate facts, remote smoke default, generated site facts, and packaged changelog together.\n\nAdd dated release notes for DeepSeek V4 Flash Responses support, the canonical action cutover, safety and durability hardening, and contributor credit. Public published-release facts remain pinned to v0.9.2 until v0.9.3 assets actually exist.
The workspace grew codewhale-paths (19 packages) in 38268346f, so the
committed facts.generated.ts drifted from the derivable workspace truth
and the remote check-facts gate failed on PR #4993.
Regenerated with node scripts/derive-facts.mjs; node
scripts/check-facts.mjs now reports OK locally.
The v0.9.2 GitHub Release was published (2026-07-30T10:07:33Z) with
platform assets, but the website's "Latest release" badge still sourced
v0.9.1 from web/data/latest-published-release.json and the embedded
latestPublishedRelease in web/lib/facts.generated.ts.
Bump the JSON to v0.9.2 and regenerate facts.generated.ts via
derive-facts.mjs. Verified: check-versions.sh reports "Version state OK";
check:facts reports committed facts match workspace; the diff is limited
to the latestPublishedRelease block plus a fresh generatedAt stamp.
Cuts the [0.9.2] - 2026-07-27 changelog band from [Unreleased] and
runs scripts/release/prepare-release.sh 0.9.2: workspace and crate
versions, internal dependency pins, npm package + binary version,
lockfile, remote-smoke default tag, README install examples, public
fact matrix source-candidate version, crate changelog sync, and
regenerated web facts. check-versions.sh confirms the set agrees.
This is local release preparation only: no tag, no publication, no
push to protected main.
Keep the public provider facts and source-candidate count aligned with the new ApiProvider variant so the hosted web gate remains truthful.
Verified: npm run check:facts; npm run check:docs; npm test (137/137); npm run lint; npm run build.
Keep native reviewed capture and FTS recall on the same Markdown source of truth. Add bounded offline memory_search and memory_get tools with scope checks, staleness refresh, and explicit untrusted provenance. This is a partial #4867 slice; lifecycle controls and migration follow-up remain open.
* feat(tools): add agent-callable verify critic
Add an opt-out, bounded, toolless adversarial critic that agents can invoke before claiming non-trivial work complete.
Closes#4196.
Harvested from PR #4199 by @Hmbown
Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
* fix(tools): make verify evidence and risk accounting complete
Include uncommitted worktree changes when verifying from a base, keep staged diffs valid, and fail safe on medium findings.
Closes#4196.
Harvested from PR #4199 by @Hmbown
Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
* chore(web): refresh generated tool facts
* docs(web): refresh public surface tool count
Bumping the workspace to 0.9.2 was premature. 104 issues are still open on
the milestone and none of this branch's fixes have merged, so the version
claimed a release that is nowhere near cut. The repository's own gates said
so: the contributor ledger wanted a 0.9.2 credit band that cannot honestly
exist yet, and `screenshot.sourceVersion` wanted the TUI capture retaken at
0.9.2. Those are release acts, not bookkeeping.
Everything version-shaped goes back to 0.9.1 — workspace, crate pins, npm
wrapper and its binary pointer, lockfiles, generated web facts, mirrored
TUI changelog, docs, remote-smoke default, and the public surface matrix.
The changelog entry is kept, moved under [Unreleased], which is what it
actually describes: landed since v0.9.1, not yet released. The [Unreleased]
compare link returns to v0.9.0...HEAD, the form the surface contract
accepts while the workspace version is the published one.
Deliberately kept from the promotion work: the contract test now derives
the version from FACTS instead of hard-coding it, so the next real bump
does not break it; the postcss advisory fix; and the `tracing` dependency
the lane fix needs.
check-versions.sh passes, the release-tag and prepare-release guards pass,
and all 136 web tests pass.
Promote the workspace, internal crate pins, npm wrapper, package lock,
generated web facts, mirrored TUI changelog, current docs, and the
remote-smoke default from 0.9.1 to 0.9.2.
The 0.9.2 entry is an unreleased source candidate covering the audit bug
cluster landed on this lane: execpolicy deny-rule flag bypass and
platform-conditional path case folding, MCP call-once and deterministic
qualified-name resolution, session-index torn-line survival and
append/compaction locking, the shared write-tool allowlist, and the four
fixes from this takeover — the config no-op that tore down the runtime
bridge, broken project configs that were indistinguishable from absent
ones, lane branches outliving their expired worktrees, and stdio turns
that could not be interrupted.
check-versions.sh passes. No tag, release, or publish step is implied by
this commit; the changelog heading stays "Unreleased candidate" until a
release actually dates it. The issues themselves are closed by the
commits that fixed them, not by this one.
* fix(web): advance the published-release fact to v0.9.1
web/data/latest-published-release.json is manually advanced only after
publication, by design -- install commands must never advertise a tag before
its binaries exist. v0.9.1 published on 2026-07-24 across all three channels
(GitHub Release with 34 assets, 18 crates on crates.io, npm latest), so the
gate is satisfied and the fact was simply stale.
One file drives every version string on the site. The install page was telling
people "latest published: 0.9.0", pinning the CNB mirror commands to
--tag v0.9.0, and carrying the now-false line that v0.9.1 is a source
candidate not yet published.
Regenerated facts.generated.ts alongside it, since check:facts compares the
committed copy against the workspace before prebuild can self-heal it (#3771).
check:facts OK, check:docs PASS (version=0.9.1, install snippets, 16 topics).
* fix(web): let the published release equal the source candidate
Advancing the published-release fact to v0.9.1 surfaced a wrong invariant in
the public-surface contract:
expect(matrix.latestPublishedRelease.version)
.not.toBe(matrix.sourceCandidate.version);
That asserts the source candidate is always strictly ahead of the published
release, which is false in the window between shipping vX.Y.Z and opening the
next lane. Right now both are 0.9.1 and that is correct, not a drift bug.
The real invariant is directional: the site must never advertise a version
that is not published yet. Assert published <= source candidate instead, via a
numeric comparison rather than string inequality.
Also advances latestPublishedRelease in docs/public-surface-facts.json, which
carries the same fact and is compared against FACTS by the same test.
web: 136 tests pass, check:facts OK, check:docs PASS, eslint clean, tsc clean.
Record the LSP tool in the generated website and checked-in public surface contract.
Verified with npm prebuild, facts/docs checks, tests, lint, and the production web build.
Map the contributed TelecomJS provider into both facts derivations, regenerate the committed source-candidate facts at 35 providers while preserving toolCount 66, and document its conservative fallback and isolated live catalog.
No deployment, publication, tag, or release is performed.
Signed-off-by: Hunter B <hmbown@gmail.com>
Derive website sandbox facts from explicit runtime capability markers instead of source filenames. Document actual platform wrappers, narrow model and audit claims, and make two-package/three-command installs exact.
Verify release assets under their manifest filenames before renaming them, with an executable contract test for every Unix snippet. Refresh localized README receipts and keep source-candidate toolCount at 66.
Signed-off-by: Hunter B <hmbown@gmail.com>
Reject malformed, legacy, and older KV snapshots before they can replace a newer deployed build. Derive runtime facts from one exact main revision, expose a public source receipt, and keep the latest published release distinct from the source candidate.
Signed-off-by: Hunter B <hmbown@gmail.com>
Regenerate the checked-in repository facts from the integrated runtime so the public surface reports the canonical 66-tool catalog.
Signed-off-by: Hunter B <hmbown@gmail.com>
Refresh the packaged changelog slice, add the v0.9.1 comparison anchors, and regenerate public repository facts from the frozen release source.\n\nVerified with check-versions.sh, check-ohos-deps.sh, and cargo fmt --check.
Promote the workspace, npm wrapper, internal crate pins, generated web
facts, mirrored changelogs, current docs, and the remote-smoke default
from 0.9.0 to 0.9.1.
The 0.9.1 changelog entry covers the local web client, OpenCode Go, the
xAI device-login restore, calendar-anchored hourly automations,
content-watch canonical draft identities, and the remaining runtime and
Windows fixes, with contributor credits for @h3c-hexin, @zhangweiii,
@sternelee, and @seanthefuturegorilla.
check-versions.sh passes; check-published.sh 0.9.1 reports nothing
published, as expected before release.
Signed-off-by: Hunter B <hmbown@gmail.com>
Keep the build-time and runtime provider maps aligned with the first-class OpenCode Go provider merged for v0.9.1. Regenerate the committed website facts so the drift gate and provider inventory remain truthful.
Signed-off-by: Hunter B <hmbown@gmail.com>
Promote the expanded underwater release from the 0.8.68 candidate number to 0.9.0 across Cargo, npm, generated facts, changelogs, current docs, and the authoritative release ledger.\n\nDocument the final runtime, Operate, Fleet, motion, Inkling, community, and deferred-work cutlines without rewriting historical fixtures. Version and release-helper checks pass.
feat: add MiniMax Messages provider support
Resolved web/lib/facts.generated.ts by regenerating from the merged
workspace (npm run prebuild); the provider list and tool counts merged
cleanly.
Register MiniMax-M3 and MiniMax-M2.7 for the OpenAI-compatible and Messages routes. Add regional endpoint guidance, request tests, catalog limits, and tier-aware pricing.
Update workspace, npm, changelogs, docs, and generated site facts for the 0.8.68 release. Refresh the public mode and Workflow language to match the shipped Plan/Act/Operate surface.
check-facts.mjs flagged the committed snapshot as stale against this
branch: the workspace gained the lane crate on main, and the provider
map now includes Meta Model API and xAI. Regenerated with
web/scripts/derive-facts.mjs; toolCount moves 79 -> 80.
Agent-assisted: Claude Code (Fable 5) under Hunter's direction.
Rename the LongCat provider label in the shared provider descriptor, TUI
header, and website facts so the picker and docs show Meituan ownership.
Signed-off-by: Hunter B <hmbown@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Adding the LongCat ApiProvider variant tripped the web `check:facts` gate
("unmapped ApiProvider variant(s): LongCat"). Add LongCat to
PROVIDER_LABEL_MAP (web/scripts/facts-lib.mjs) and labelMap
(web/lib/facts-drift.ts), mirroring the Sakana entry, and regenerate
web/lib/facts.generated.ts. `node scripts/check-facts.mjs` now passes
(providers=30, version=0.8.67).
Signed-off-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
(cherry picked from commit a54a8dec2e74e2293f95d8904efba3464fade119)