Three v0.9.5 benchmark tasks could not launch Codewhale at all:
mteb-leaderboard, mteb-retrieve, and pytorch-model-recovery run older ARM64
images, and the aarch64-unknown-linux-gnu artifact built on ubuntu-24.04-arm
requires GLIBC_2.39.
Release and nightly now build aarch64-unknown-linux-musl on the native ARM
runner, alongside the x64 musl build that has shipped since v0.8.65. Both
gain a static check (no ELF INTERP) plus a launch smoke on the matching
native runner, so a dynamically linked or non-starting binary fails the
build rather than the user's install. docs/INSTALL.md drops the arm64 glibc
floor section and describes the v0.9.6 matrix.
Also reconciles the copy the earlier commits invalidated: setup ratification
text and all 15 locales stop attributing execution doctrine to "mode
prompts", docs/MODES.md states Auto-Review's actual deterministic
allow/deny behavior, and the source-structure, dead-code, and
runtime-contract budgets are re-measured — the last locking down 25
decreased ceilings and the new mode-agnostic prompt-stage digests.
Advertise codewhale and the release/npm codew convenience name without exposing the retired codewhale-tui install surface. Keep Cargo truthful: codewhale-cli installs only codewhale unless the user defines an alias.
Verified with focused public-surface tests, facts/docs/locale checks, ESLint, and diff checking.
INSTALL.md's npm table named `CODEWHALE_VERSION` as the canonical way to pin a
release and demoted `DEEPSEEK_TUI_VERSION` to "legacy alias". It is the other
way round: the wrapper reads `DEEPSEEK_TUI_VERSION || DEEPSEEK_VERSION` and
nothing else (npm/codewhale/scripts/install.js:88-90, with both spellings
covered by test/install.test.js:261-268). `CODEWHALE_VERSION` appears nowhere
in npm/, scripts/, or crates/. The table marked the only working variable as
legacy and the non-existent one as canonical, so anyone pinning a version got
silently ignored. Added a line explaining why the installer keeps the
`DEEPSEEK_*` spelling, since that is the obvious next question.
ARCHITECTURE.md listed four source files that do not exist —
`tools/subagent.rs` (it is a directory), `project_doc.rs`, `session.rs`
(session code is at `core/session.rs`, already listed separately), and a
top-level `ui.rs` distinct from `tui/ui.rs` (there is only one). Dropped the
three that were pure duplicates or ghosts; corrected `subagent.rs` to the
directory and replaced "Persistent sub-agent sessions" with what the surface
actually is, since `subagent/coord.rs:5` calls the persistent-session
lifecycle "retired lifecycle theater".
Also removed "capacity flow guardrails" from the `crates/core` description —
the capacity system was removed and no `capacity` symbol survives in that
crate — and corrected the LSP default server map, which listed 7 servers and
omitted `intelephense` (PHP) while naming the Python binary `pyright` instead
of `pyright-langserver`.
SKILLS.md said `Locale::shipped()` is 8 locales. It is 15
(localization.rs:70-88) — the parity contract understated its own coverage by
seven languages, which undersells the thing the section exists to claim.
Advance the install guide to the current v0.9.4 source candidate while keeping latest package and release instructions tied to published artifacts.
Keep candidate comparison links based on v0.9.3 and HEAD until a real v0.9.4 tag exists.
Signed-off-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
Advance install and contributor surfaces to the v0.9.3 candidate, preserve required candidate credit, and make the web contract prove removed tool constructors stay absent. Keep the Unreleased comparison anchored to the latest published tag until v0.9.3 exists.
Update candidate install copy and contributor credits, keep changelog comparisons truthful before the tag exists, and permit an honestly versioned screenshot to lag the source candidate.
The flag had been fully inert since the TUI took permanent ownership of the
alternate screen. `codewhale-cli` parsed it only to discard it via
`let _ = cli.no_alt_screen;` and never forwarded it to the child process,
while the TUI's decision function was
`fn should_use_alt_screen(_cli: &Cli, _config: &Config) -> bool { true }` --
both parameters ignored, unconditional `true`. No value of the flag, on
either surface, could be observed by anything downstream.
Carrying a hidden argument that cannot affect behavior is worse than not
having it: it lets scripts and docs keep asserting an intent the program
silently drops. Removing it end-to-end makes the contract honest -- the TUI
owns the alternate screen, full stop -- and `docs/INSTALL.md` now says that
without the "deprecated compatibility no-op" hedge.
The accepted-but-ignored test is replaced with a negative test asserting the
flag fails as `clap::error::ErrorKind::UnknownArgument`, so it cannot be
quietly reabsorbed later as another no-op.
`docs/CHANGELOG_ARCHIVE.md` keeps its historical mention deliberately; it
records past release behavior rather than current guidance.
BREAKING: scripts still passing --no-alt-screen now fail with an unknown
argument error instead of being silently accepted. The correct fix is to
drop the flag; it has not influenced rendering in this version line.
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>
Label v0.9.1 as an unpublished source candidate while keeping v0.9.0 as the verified latest release. Correct channel and Android/Termux preview guidance, narrow model claims, synchronize localized README controls, and credit @fleitz for PR #4673/#4674 without rewriting contributor history.
Signed-off-by: Hunter B <hmbown@gmail.com>
Keep same-version release preparation on the canonical validation path, install and package the native codew shim, and make web and checksum verification reflect what operators actually run. Add focused release-helper, npm, and checksum contracts while leaving deploy and publication boundaries unchanged.
Signed-off-by: Hunter B <hmbown@gmail.com>
Build and smoke the complete Windows ARM64 binary family on GitHub native runners, wire npm, updater, bundle, website, and release inventory support, and preserve the originating contributor credit.
Move Linux ARM64 releases off the slower cross-link path, remove redundant matrix target installs, and update actionlint for the hosted ARM runner label.
Refs #4267.
Co-authored-by: w1w218 <6767665+w1w218@users.noreply.github.com>
Signed-off-by: Hunter B <hmbown@gmail.com>
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>
Integrate the underwater TUI, message-first Operate, Fleet and Workflow reliability, expanded model/provider catalog, exact custom-route restoration, docs-first site, localization, packaging, and release metadata for the v0.9.0 candidate.
Harden endpoint-bound credential provenance, approval and goal UX, Fleet attempt fencing and crash recovery, large-workspace mention discovery, Kimi budgeting, and release asset/version gates. Include the stopship Fleet and Workflow fixtures used by release dogfood.
Verified with workspace fmt/check/clippy/tests on Rust 1.88, release-script and npm suites, 18-crate publish dry run, production web build, Docker build check, secret scan, dependency audit, and protected-state hash validation.
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.
Distinguish Android app isolation from Codewhale command sandboxing, document the exact doctor and dual-write secret behavior, and align the install matrix with the unverified real-device preview status.
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.
Two defects blocked the advertised Android/Termux arm64 target:
- rquickjs ships no pre-generated aarch64-linux-android binding, so the
release build could not compile. Android builds now enable bindgen
against the NDK sysroot (workflow-js target dep + release.yml NDK
setup with libclang).
- Real Termux TUI startup panicked because rustls-platform-verifier
expects an Android JVM/context that a standalone Termux CLI process
does not have. Android CLI/TUI HTTP clients (tls.rs, updater, skills
install, prompt suggestion, app-server/hooks callers) now use a
preconfigured rustls root store built from Mozilla WebPKI roots.
Also:
- Extend the OHOS dead-code allowance on ClipboardContent to Android;
the release workflow builds with -Dwarnings and the Android target
never constructs those variants, so the release build would otherwise
fail even though a plain cargo build is green.
- docs/TERMUX.md: stop calling the JSON secret store "encrypted at
rest" - actual behavior is permission-protected (0600) plaintext, and
auth set also writes the key to config.toml.
- docs/INSTALL.md: stop recommending --no-alt-screen as if it disables
the alternate screen; it is a deprecated compatibility no-op.
Verified on this branch (rustc 1.97.0):
- cargo check -p codewhale-cli -p codewhale-tui -p codewhale-app-server
-p codewhale-hooks -p codewhale-release --locked (host)
- RUSTFLAGS=-Dwarnings cargo check --target aarch64-linux-android
-p codewhale-cli -p codewhale-tui --locked (NDK 27.2.12479018)
- cargo fmt --all --check
On-device evidence (ARM64 Android 15 emulator, F-Droid Termux 0.118.3):
binaries report 0.8.68, doctor reports Android/aarch64 with
sandbox.available=false, config/secret files are 0600, loopback
model/tool roundtrip, foreground/background shell lifecycle, and
timeout recovery all green. Remaining on-device residuals (nonzero-size
PTY evidence, real HTTPS updater-metadata check, rebuild at the landed
SHA) are tracked in #4242.
Agent-assisted: Claude Code (Fable 5) under Hunter's direction.
- Bump npm/codewhale wrapper to 0.8.66
- Add root package name to package.json / package-lock.json
- Update docs/INSTALL.md v0.8.66 current-lane wording
- Update docs/V0866_RELEASE_LEDGER.md with current SHA/status
- Add v0.8.66 contributor band to docs/CONTRIBUTORS.md
- Clippy cleanup: struct-update syntax in config/tui tests,
type alias for fleet_setup builder tuple, working_set fs::rename
Add an explicit WSL2 troubleshooting note for missing pkg-config/libdbus build dependencies and make the Chinese README call out WSL2 alongside Linux source builds.
Closes#1816
Credit: thanks @zlh124 for identifying the required Ubuntu/Fedora packages in #1816.
Verification:
- cargo fmt --all --check
- git diff --check
Signed-off-by: Hunter B <hmbown@gmail.com>
The Linux musl/glibc build artifact prose on lines 45 and 59 still
referenced v0.8.63 as the current release lane. Bump both to v0.8.65
so the install doc matches the shipped release.
Stage the codew binary in release builds, include it in platform archives and Windows installer inputs, and teach local release asset prep/checks about the shim. The Unix archive installer now installs via atomic replace so an existing executable is not overwritten in place.
Update the npm install section in docs/INSTALL.md to match the workspace and wrapper version already reflected in the README examples.
Verification:
- rg -n '0\.8\.64' README*.md docs/CONFIGURATION.md docs/INSTALL.md
- git diff --check
- ./scripts/release/check-versions.sh
Remove public benchmark docs/scripts and the shipped SWE-bench CLI surface from the CodeWhale repo; benchmark work belongs outside this release repo.
Trim public docs that routed users into private maintainer runbooks, remove stale deleted-doc links, tone down release-facing copy, update CodeWhale crate descriptions, and expose the residue ledger as /debt while keeping quiet legacy dispatch compatibility.
Verification:\n- cargo fmt --all -- --check\n- git diff --check\n- ./scripts/release/check-versions.sh\n- cargo check -p codewhale-tui --bin codewhale-tui --locked\n- cargo test -p codewhale-tui --bin codewhale-tui --locked command_registry\n- cargo test -p codewhale-tui --bin codewhale-tui --locked every_command_alias_dispatches_to_a_handler\n- cargo test -p codewhale-cli --locked
The Linux x64 release asset has been a static (musl) build since v0.8.62
(commit 814a92242), so it has no glibc dependency and runs on Ubuntu 22.04,
Debian stable, RHEL/CentOS, and Alpine/musl. The glibc preflight already
returns early when a binary has no GLIBC_* symbols, so static binaries install
cleanly on older distros.
But the install error message and INSTALL.md were never updated and still
claimed 'official binaries are GNU libc builds' and listed 'add a musl/static
Linux asset' as a future follow-up — both now false for x64. Issue #3238
(Ubuntu 22.04 glibc mismatch) was reported against an older dynamic artifact
and is resolved for x64 by the v0.8.62 static build.
- preflight-glibc.js: glibcCompatibilityMessage now states x64 is static
(musl) and scopes the GLIBC_2.39 floor to the arm64/riscv64 glibc assets.
- install.test.js: update the pinned assertion to the accurate text.
- docs/INSTALL.md: rewrite the Linux asset/glibc-floor section and platform
table row to reflect the static x64 (musl) asset and the arm64/riscv64
glibc floor.
Verified: npm test (24 passed, incl. the updated glibc message test).
Refs #3238.
Update the 0.8.62 changelog entries, README/install snippets, npm wrapper metadata, and website fallback version after the final release-lane verification pass.
Also records the plan confirmation checklist visibility change from PR #3299 so the generated GitHub Release body includes it.
Verified: ./scripts/release/check-versions.sh; git diff --check; cargo fmt --all -- --check; python3 scripts/check-coauthor-trailers.py --author-map .github/AUTHOR_MAP --range v0.8.61..HEAD --check-authors; cargo test -p codewhale-tui --bin codewhale-tui --locked plan_prompt; cargo build --release -p codewhale-cli -p codewhale-tui --locked
#3208 was confusion, not a bug: codewhale-<platform> (bare) is what the npm wrapper
and in-app updater download; codewhale-<platform>.tar.gz bundles the same binaries +
install.sh for manual installs. Clarify both the generated GitHub release body and
INSTALL.md §6 so the Releases page is self-explanatory. Docs only; no pipeline logic.
Closes: #3208
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Harvest the HarmonyOS/OpenHarmony port from PR #2634 and make it publish-safe by target-gating unsupported host dependencies out of the OHOS TUI graph. Self-update is disabled on OHOS, PTY shell mode reports unsupported, and Starlark execpolicy parsing returns an explicit unsupported-platform error until upstream starlark/rustyline/nix support catches up.
Add OHOS SDK setup docs and launcher scripts, install the rustls ring provider for rustls-no-provider entrypoints, and keep the packaged codewhale-tui OHOS graph free of starlark, rustyline, nix@0.28, portable-pty, and arboard.
Validation: cargo fmt --all -- --check; git diff --check; git diff --cached --check; cargo check -p codewhale-cli --locked; cargo check -p codewhale-app-server --locked; cargo check -p codewhale-tui --locked; cargo test -p codewhale-cli --locked update::tests::; cargo test -p codewhale-release --locked; cargo test -p codewhale-tui --locked background_tty_command_has_controlling_terminal; cargo test -p codewhale-tui --locked clipboard; cargo package -p codewhale-tui --allow-dirty --no-verify --locked; packaged OHOS cargo tree checks. OHOS target check still requires a loaded OpenHarmony SDK/sysroot and currently stops in ring with missing assert.h when CC/CFLAGS/linker are unset.
Harvested from PR #2634 by @shenjackyuanjie.
Co-authored-by: shenjackyuanjie <54507071+shenjackyuanjie@users.noreply.github.com>
Closes#1983
- Add scripts/installer/codewhale.nsi: NSIS installer that installs both
codewhale.exe and codewhale-tui.exe to %LOCALAPPDATA%\Programs\CodeWhale\bin,
adds to current-user PATH, and includes an uninstaller that cleans PATH
- Add docs/CLASSROOM_INSTALL.md: step-by-step checklist for IT admins
deploying CodeWhale in labs/classrooms, covering silent install, manual
fallback, API key provisioning, imaging notes, and troubleshooting
- Update docs/INSTALL.md: add Windows NSIS Installer section referencing
the new installer and classroom checklist
Adds riscv64 to build pipelines so CodeWhale ships prebuilt binaries
and npm wrappers for 64-bit RISC-V Linux (glibc) systems.
Changes:
**CI / build**
- release.yml: +2 build matrix entries (codewhale + codewhale-tui for
riscv64gc-unknown-linux-gnu), cross-compilation toolchain step using
a dedicated DEB822-format apt source for ports.ubuntu.com, bundle
step, and release-notes table row.
- nightly.yml: +2 matrix entries, matching cross-compilation setup.
- resolve job: handle workflow_dispatch when the target tag does not
yet exist (fall back to HEAD SHA).
**Packaging**
- npm/codewhale/scripts/artifacts.js: add riscv64 to ASSET_MATRIX
under linux so npm install -g codewhale resolves on RISC-V.
**Docs**
- docs/INSTALL.md: add riscv64 row to supported platforms table;
replace with clearer 'other architectures' wording.
Build strategy: cross-compile from ubuntu-latest (x86_64) using
gcc-riscv64-linux-gnu. The dbus runtime dependency (from the keyring
crate's secret-service backend) is satisfied via ports.ubuntu.com.
PKG_CONFIG_ALLOW_CROSS and a cross-target libdir are set so the
keyring crate finds dbus-1 during cross-compilation.
Docker support for linux/riscv64 is intentionally not added here:
GitHub Actions does not yet provide the infrastructure to build or
emulate riscv64 containers. The Dockerfile changes will follow when
the hosted CI surface supports it.
Add `codewhale update --check` so users can compare the installed version with
the latest release without downloading or replacing binaries.
Surface the same release check in `codewhale doctor`, and share release lookup,
mirror handling, timeout, and version comparison logic between update and doctor.