c962177c7 rewrote the 'codewhale review' table row in README.md but left
all 18 translations on the old wording, missing link and stale stamps,
so scripts/check-readme-translations.py fails on main. Translate the new
row in every pack (linking the anchor that commit added) and bump the
stamps.
Signed-off-by: Boyce <[email protected]>
4cf2d2cff reworded the Computer Use paragraph in README.md and refreshed
the content of all 18 translations, but left every 'source: README.md'
stamp on the previous hash, so scripts/check-readme-translations.py
fails on main with 'stale' for all 18 files. Bump the stamps; no prose
changes.
Signed-off-by: Boyce <[email protected]>
Lands the 0.10.3 program work that two Codex sessions left uncommitted on
canonical main (chats 01a176ff "Review latest MCP updates" / 01a176e0 "DSH
plugin compatibility"), on top of contributor PR #7086, which merged as itself (5c3d461d8a)
immediately before this commit. The pieces share compiler inputs
(the crate-split moves touch most of them), so they land as one verified
tree rather than as intermediate commits that would not build.
Contents:
- Crate split slices: `codewhale-net`, `codewhale-notify` and
`codewhale-sandbox` crates; runtime config, config persistence, oauth,
settings, catalog cache and Codex model roster moved from tui to runtime;
hooks, extension host config and instruction budget to config; callers
rewired, re-export facades removed (CW-6129).
- Follow-up repairs to #7086 instruction budgets (per-scope budgets,
canonical source labels, `instruction_assembly` session snapshot).
- MCP: official SDK 2.4 host backend by default with `server/discover`
and legacy fallback, metadata/output schema handling, OAuth issuer
binding, Engine/CU server modernization (CW-6713, CW-7543, CW-7544,
CW-7546).
- DSH plugin compatibility from the authorized exception lane `26ba80b06a`:
shared compatibility table, native command lifecycle, reviewed imports,
Native-only filesystem sandbox (CW-7054).
- Computer Use plugin-only cutover: vendored bundle removed, marketplace
install from the independent release (CW-6732).
- Image-heavy sessions: 256 KiB read budget, outbound image omission with
receipts, one smaller retry on HTTP 413 (CW-7550).
- Typed review operation (`core/engine/review.rs`, `runtime_api/review.rs`)
used by Platform structured reviews.
- Receipt-owned Unix uninstall (Refs #7091).
- Steering (CW-7552) and Linux Shift+Enter (CW-7551, Refs #7093) source
changes; runtime/manual proof still pending.
Fixes made during takeover verification:
- MCP: Rust now admits the legacy handshake whenever the SDK classifies the
discovery probe as legacy (any JSON-RPC error, or a result without the
modern supported version); before, servers answering the probe with a
result were refused after it.
- MCP: an admitted legacy handshake reports initialize's own failure (e.g.
401) instead of the probe's -32601.
- MCP: OAuth reactive refresh covers the side-effect-free probe.
- MCP: broker launch failures keep their diagnostic (missing command).
- Tool images must decode before delivery (truncated PNG was accepted).
- THIRD_PARTY_NOTICES lists MCP SDK 2.4.0 and DSH 0.2.1-rc.2 excerpts.
- Changelog entries for MCP, DSH, Computer Use and image validation.
- `#[cfg(test)]` on three test-only items; `cargo fmt --all`; tests updated
to post-cutover behavior (no built-in CU, `$schema` manifests, canonical
paths, lazy CU tools, SyncSession resets instruction assembly).
Verified on this exact tree (macOS, source sha 4353faf1 before changelog
edits; changelog/generated-doc edits only after):
- cargo check --workspace --all-targets --locked: exit 0, no warnings
- codewhale-config 806 passed; codewhale-runtime 850 passed;
codewhale-net 52 passed; codewhale-notify 31 passed; codewhale-cli 501
passed (nextest, 0 failed)
- codewhale-tui lib: 14515 passed, 0 failed, 21 skipped
- extension host npm test: 420 tests, 413 passed, 0 failed, 7 skipped
- web check-facts OK
Linux x86_64 (Boat VM, same source before the #7097 fold-in):
cargo check --workspace --all-targets --locked exit 0; codewhale-config
808, codewhale-runtime 849, codewhale-net 52, codewhale-notify 31,
codewhale-sandbox 100, codewhale-cli 501 passed, 0 failed. The tui lib
test binary was still compiling on the 16 GB VM at commit time.
#7097 (main) was three-way merged into approval_log.rs and clipboard.rs;
re-check after the fold-in: workspace check exit 0; tui approval_log,
clipboard, session_export, file_mention, pet_watch 213 passed.
Not run: hosted CI, clippy -D warnings, release packaging, live provider
or real MCP servers beyond local fixtures, Deepin run for #7093.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Reuse the supplied artwork already served by the marketing site and its exact redemption URL in English and 18 translated READMEs. Add localized alternative text and public referral disclosure to the existing website card. Reconcile quiet README undo wording against committed Engine behavior across translations, and fix the existing translation checker to resolve document-relative links. Correct manual-only marketing deployment instructions.
Verified: 32 existing website content/dictionary checks, focused ESLint, local English/Chinese SSR with one matching linked card and byte-matching image, 19 README render/link checks, and all 18 translation synchronization checks. The checker path bug also reproduced on committed HEAD before repair. Fresh HTTP confirms the existing live website already has the graphic and exact URL. No CI, deployment, offer redemption, native build or Engine release performed.
The repository root showed 19 README files before the changelog, licence and
the agent instructions, so the thing a visitor opens first was also the messiest
screen in the repo. The translations now live in `docs/i18n/` and the root keeps
one README.
The move is mechanical but every relative link changes depth, so the links were
rewritten from the committed content by resolving each target against the repo
root and restating it from `docs/i18n/`, for markdown links and for the
`src`/`srcset` image refs alike. Sibling translation links stay as they are.
Both gates follow the files rather than being loosened:
- `check-readme-translations.py` lists `docs/i18n/README.*.md`, and its URL
comparison strips the one `../` and exempts the language switcher by
basename, so the same links are still compared as before.
- `check-readme-locales.sh` looks for translations in `docs/i18n` and matches
switcher links by basename, so a link pointing outside that directory is
caught instead of read as a bare filename. It also no longer dies on an empty
match set.
- `docs/LOCALIZATION.md` and its zh_hans copy say where a new translation goes.
Verification: all 1,206 relative references in the 18 files resolve (0 broken);
`check-readme-translations.py` 18 in sync; `check-readme-locales.sh` PASS with
18 linked and 0 orphans; `check-facts.mjs` OK; `npm run check:docs` PASS.