Skip to content

chore: v0.10.0 - #59

Merged
fylorn merged 1 commit into
mainfrom
chore/v0.10.0
Sep 20, 2026
Merged

fylorn merged 1 commit into
mainfrom
chore/v0.10.0

Conversation

@fylorn

@fylorn fylorn commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Core says everything it has to say in English now, and the sentences it sends to
a client carry a stable code beside them. The desktop app needs a tag to pin
before it can read any of it.

What changed for anyone reading the protocol

  • Every human-readable sentence is a Msg — a code, the arguments that fill
    it, and the English text — rather than a String.
    Event::RequestFailed.message, ProxyChanged.detail, L1Result.error and
    HistoryRow.error are all Msg now. ProxyChanged also gained failed, the
    stage the connection got stuck at.
  • A control-plane error responds with a JSON Msg rather than a plain-text
    body.
  • The synthesized default route is default and its catch-all rule is
    catch-all, not 默认 and 兜底.
  • The request store gained error_code and error_args (schema 13), so a
    failure keeps its code when the app reads history back.
  • tw-adopt writes English markers and English field names into the user's own
    files, and tw-scan's built-in rules have English ids and reasons.

Two things do not survive the upgrade. A client adopted by 0.9.x cannot be
restored by 0.10 — its markers and its sidecar record use the old names. And an
override file that disables a built-in scan rule by its old Chinese id reports
that the id is unknown.

CONTROL_API_VERSION goes to 2 for all of it. A client built against 1 would
render these as strings — a screenful of JSON — so it is better that it refuses
at the handshake and says to rebuild.

In this release

#53, #54, #55, #56, #57, #58, plus #52 which made main the branch the
contract describes.

Verified

cargo fmt --all -- --check, cargo clippy --workspace --all-targets -- -D warnings, cargo test --workspace (78 suites, 0 failures) and
./scripts/smoke.sh (51 passed, 0 failed).

🤖 Generated with Claude Code

Core says everything it has to say in English now, and the sentences it
sends to a client carry a stable code beside them. The desktop app needs
a tag to pin before it can read any of it.

What changed for anyone reading the protocol:

- Every human-readable sentence is a `Msg` — a code, the arguments that
  fill it, and the English text — rather than a `String`.
  `Event::RequestFailed.message`, `ProxyChanged.detail`, `L1Result.error`
  and `HistoryRow.error` are all `Msg` now. `ProxyChanged` also gained
  `failed`, the stage the connection got stuck at.
- A control-plane error responds with a JSON `Msg` rather than a
  plain-text body.
- The synthesized default route is `default` and its catch-all rule is
  `catch-all`, not 默认 and 兜底.
- The request store gained `error_code` and `error_args` (schema 13), so
  a failure keeps its code when the app reads history back.
- `tw-adopt` writes English markers and English field names into the
  user's own files, and `tw-scan`'s built-in rules have English ids and
  reasons. A client adopted by 0.9.x cannot be restored by 0.10, and an
  override file that disables a rule by its old Chinese id reports that
  the id is unknown.

`CONTROL_API_VERSION` goes to 2 for all of it. A client built against 1
would render these as strings — a screenful of JSON — so it is better
that it refuses at the handshake and says to rebuild.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@fylorn
fylorn merged commit 5f3ed24 into main Sep 20, 2026
1 check passed
@fylorn
fylorn deleted the chore/v0.10.0 branch September 20, 2026 07:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant