Follow felis to 6da5620d #3

Merged
natsukium merged 2 commits from follow-felis-6da5620d into main 2026-09-22 13:46:33 +09:00
Owner

Moves the four pinned felis crates from 105b0899 to 6da5620d (across the 1.0 wire-contract reset, #316–#343) and adapts the relay.

What forced code changes

  • felis #341: felis_grid::transcode::body_to_json is gone; structural JSON is the named felis-json v1 format (felis_grid::json_v1). The gateway now emits that envelope verbatim ({"felis_json":1,"kind":…,"msg":…}, sid beside it on the broker) instead of its own Grid/Image/Control wrapper, and browser input is the v1 Input payload ({"type":"key_bytes","bytes":[…]} etc.) parsed through InputJson.
  • felis #343: SessionInfo.sequence is a required NonZeroU64. The hand-built list row is replaced by SessionInfoJson plus host (session → id, geometry under dims, attachments/sequence new). The local hex helpers go in favour of json_v1::session_id_hex and validate_session_id_prefix.
  • felis #322: attach targets resolve daemon-side; --session and the broker's attach forward the digits as a prefix.
  • Docs: README.md, docs/broker.md (pinned rev, frame/input/list/notify examples, minor: 0), Cargo.toml dependency comments.

felis-web-component must follow

The browser contract changes shape; see the commit body and docs/broker.md. In short: frame envelope and lowercase kind tokens, msg payloads are the v1 DTOs (ThemeColor action object, Welcome.identity), input shape, list row renames, NotificationJson. A follow-up issue will be filed on felis-web-component.

Verification

  • cargo fmt --all --check, cargo clippy --all-targets -- -D warnings, cargo test (25): pass locally.
  • cargo deny check: see the CI run (the local advisory fetch was blocked by a host DNS outage during the change).
  • No live smoke run against a daemon built from 6da5620d; worth doing before relying on this relay.
Moves the four pinned felis crates from `105b0899` to `6da5620d` (across the 1.0 wire-contract reset, #316–#343) and adapts the relay. ## What forced code changes - **felis #341**: `felis_grid::transcode::body_to_json` is gone; structural JSON is the named `felis-json` v1 format (`felis_grid::json_v1`). The gateway now emits that envelope verbatim (`{"felis_json":1,"kind":…,"msg":…}`, `sid` beside it on the broker) instead of its own `Grid`/`Image`/`Control` wrapper, and browser input is the v1 `Input` payload (`{"type":"key_bytes","bytes":[…]}` etc.) parsed through `InputJson`. - **felis #343**: `SessionInfo.sequence` is a required `NonZeroU64`. The hand-built `list` row is replaced by `SessionInfoJson` plus `host` (`session` → `id`, geometry under `dims`, `attachments`/`sequence` new). The local hex helpers go in favour of `json_v1::session_id_hex` and `validate_session_id_prefix`. - **felis #322**: attach targets resolve daemon-side; `--session` and the broker's `attach` forward the digits as a prefix. - Docs: `README.md`, `docs/broker.md` (pinned rev, frame/input/list/notify examples, `minor: 0`), `Cargo.toml` dependency comments. ## felis-web-component must follow The browser contract changes shape; see the commit body and `docs/broker.md`. In short: frame envelope and lowercase `kind` tokens, `msg` payloads are the v1 DTOs (`ThemeColor` action object, `Welcome.identity`), input shape, `list` row renames, `NotificationJson`. A follow-up issue will be filed on felis-web-component. ## Verification - `cargo fmt --all --check`, `cargo clippy --all-targets -- -D warnings`, `cargo test` (25): pass locally. - `cargo deny check`: see the CI run (the local advisory fetch was blocked by a host DNS outage during the change). - No live smoke run against a daemon built from `6da5620d`; worth doing before relying on this relay.
Follow felis to 6da5620d
Some checks failed
ci / fmt / clippy / test / deny (pull_request) Has been cancelled
0302f08b4a
Moves the four pinned felis crates from `105b0899` to
`6da5620d3b6bcc901afe289039db0c49add2ba31` — across the 1.0 wire-contract
reset — and adapts the relay to what that wire and its JSON are now.

Three felis changes forced code here:

- `felis-grid`'s `transcode::body_to_json` is gone. The structural JSON a
  consumer re-exposes a session with is now a named format, `felis-json`
  v1 (`felis_grid::json_v1`), with its own envelope, its own DTOs and a
  published schema. The gateway emits that envelope verbatim rather than
  re-wrapping it under names of its own, so a browser decodes a live
  stream and a `.fcast` recording with one reader and felis owns the
  shape on both. Browser input moves to the same format's `Input`
  payload for the same reason: the DTO converts explicitly, so a rename
  in felis's domain type fails to compile here instead of quietly
  changing what a browser has to send.
- `SessionInfo.sequence` is a required `NonZeroU64`. The roster row the
  broker builds by hand exists because a `u128` id could not go through
  serde; `SessionInfoJson` does that itself now, so the row is felis's
  and the hand-rolled spelling — which had already fallen behind on
  `attachments` and `sequence` — is gone.
- An attach resolves an id prefix daemon-side. `--session` and the
  broker's `attach` forward the digits they were given instead of
  widening them into a full id that matches nothing, which is what
  `destroy` and `tag` already did.

The browser contract therefore changes shape, and felis-web-component has
to follow before the two halves talk again: the frame envelope, the
`kind` tokens, the `msg` payloads, the input shape, the `list` row and
the notify event all move. The pin coupling recorded in `Cargo.toml`
is the reason that is a separate change and not a silent one.
natsukium force-pushed follow-felis-6da5620d from 0302f08b4a
Some checks failed
ci / fmt / clippy / test / deny (pull_request) Has been cancelled
to 8d87d57511
Some checks failed
ci / fmt / clippy / test / deny (pull_request) Has been cancelled
2026-09-22 12:48:42 +09:00
Compare
Update rustls past RUSTSEC-2026-0285
Some checks failed
ci / fmt / clippy / test / deny (pull_request) Has been cancelled
abf4de905d
`cargo deny check advisories` fails on the pinned rustls 0.23.43 (TLS 1.3
handshake messages accepted across encryption level boundaries), which
blocks every CI run on this repo regardless of what a change touches.
0.23.45 carries the fix; rustls-webpki follows as its companion bump.

Assisted-by: Claude Code
natsukium force-pushed follow-felis-6da5620d from abf4de905d
Some checks failed
ci / fmt / clippy / test / deny (pull_request) Has been cancelled
to 891b16f5b5
Some checks failed
ci / fmt / clippy / test / deny (pull_request) Has been cancelled
2026-09-22 13:06:10 +09:00
Compare
natsukium force-pushed follow-felis-6da5620d from 891b16f5b5
Some checks failed
ci / fmt / clippy / test / deny (pull_request) Has been cancelled
to c315a14fec
All checks were successful
ci / fmt / clippy / test / deny (pull_request) Successful in 2m48s
2026-09-22 13:07:01 +09:00
Compare
natsukium deleted branch follow-felis-6da5620d 2026-09-22 13:46:34 +09:00
natsukium referenced this pull request from a commit 2026-09-22 13:46:34 +09:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
natsukium/felis-web-gateway!3
No description provided.