chore(fcast): follow felis to 6da5620d #2

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

Follows felis to 6da5620d (across the 1.0 wire-contract reset, #316–#343) and moves the .fcast envelope to v3.

What forced code changes

  • felis #341: felis_grid::transcode is gone; record, serve, the sample generators and the roundtrip test read and write frames through felis_grid::json_v1::Frame. A frame's kind is the felis-json family token ("grid") and msg is a type-tagged DTO; a row_delta spells its cells out instead of carrying RowPayload bytes.
  • Envelope v2 → v3: retyping the frame array is a breaking envelope change under docs/reference/format.md "Versioning". The header's proto_major / proto_minor / encoding are replaced by a single felis_json (the in-band format version owns the whole msg schema; the connection's protocol version is provenance and belongs in meta). This is the one judgement call to check: keeping proto_major/proto_minor as provenance would be a header-only revert, the v3 bump stands either way.
  • felis #339 / #325: ConnWelcome.build_id → Welcome.identity, always sent; the MINOR_BUILD_IDENTITY / MINOR_LIVE_ONLY_ATTACH gates retire with the 1.0 reset.
  • felis #343: SessionInfo.sequence is a required NonZeroU64; the advertised roster row states 1.
  • FrameWriter::new(w, minor).
  • Docs cascaded: docs/reference/format.md, docs/explanation/format.md (decision recorded inline), docs/reference/pseudo-daemon.md, docs/reference/cli.md, docs/README.md, README.md, skills/fcast/SKILL.md, docs/backlog.md (felis-web-component fixtures are pre-v3).

Verification

  • cargo fmt --all --check, cargo clippy --all-targets --all-features -- -D warnings, cargo test --all-features (21), cargo deny check licenses bans sources: pass locally.
  • cargo deny check advisories: see the CI run (local fetch was blocked by a host DNS outage during the change).
Follows felis to `6da5620d` (across the 1.0 wire-contract reset, #316–#343) and moves the `.fcast` envelope to v3. ## What forced code changes - **felis #341**: `felis_grid::transcode` is gone; `record`, `serve`, the sample generators and the roundtrip test read and write frames through `felis_grid::json_v1::Frame`. A frame's `kind` is the `felis-json` family token (`"grid"`) and `msg` is a `type`-tagged DTO; a `row_delta` spells its cells out instead of carrying `RowPayload` bytes. - **Envelope v2 → v3**: retyping the frame array is a breaking envelope change under `docs/reference/format.md` "Versioning". The header's `proto_major` / `proto_minor` / `encoding` are replaced by a single `felis_json` (the in-band format version owns the whole `msg` schema; the connection's protocol version is provenance and belongs in `meta`). This is the one judgement call to check: keeping `proto_major`/`proto_minor` as provenance would be a header-only revert, the v3 bump stands either way. - **felis #339 / #325**: `ConnWelcome.build_id` → `Welcome.identity`, always sent; the `MINOR_BUILD_IDENTITY` / `MINOR_LIVE_ONLY_ATTACH` gates retire with the 1.0 reset. - **felis #343**: `SessionInfo.sequence` is a required `NonZeroU64`; the advertised roster row states `1`. - `FrameWriter::new(w, minor)`. - Docs cascaded: `docs/reference/format.md`, `docs/explanation/format.md` (decision recorded inline), `docs/reference/pseudo-daemon.md`, `docs/reference/cli.md`, `docs/README.md`, `README.md`, `skills/fcast/SKILL.md`, `docs/backlog.md` (felis-web-component fixtures are pre-v3). ## Verification - `cargo fmt --all --check`, `cargo clippy --all-targets --all-features -- -D warnings`, `cargo test --all-features` (21), `cargo deny check licenses bans sources`: pass locally. - `cargo deny check` advisories: see the CI run (local fetch was blocked by a host DNS outage during the change).
chore(fcast): follow felis to 6da5620d
Some checks failed
ci / cargo fmt / clippy / test / deny (pull_request) Has been cancelled
7ef841b5e9
felis deleted `felis_grid::transcode` and replaced it with `json_v1`: the
structural JSON a whole-session consumer reads is now a named format,
`felis-json` v1, and felis's own IPC reference names the `.fcast` recorder
and its replay as one of the two consumers it exists for. `body_to_json`,
`rows_to_wire` and `encode_row_json` no longer exist, so `record`, `serve`,
the sample generators and the roundtrip test read and write frames through
`json_v1::Frame` instead. Keeping the old serde rendering was not an
option to weigh: it had no generator left upstream, so the alternative was
a private fork of a schema felis now publishes.

That reshapes the frame line. `kind` is the `felis-json` family token
(`"grid"`), `msg` is a DTO tagged by `type`, and a `row_delta` spells its
cells out where it used to carry `RowPayload` bytes a reader had to decode
twice. Retyping the frame array is a breaking envelope change, so the
envelope moves to v3.

`proto_major`, `proto_minor` and `encoding` lost their job in the same
move: `felis_json` names the whole `msg` schema, including how far it may
have grown, and a header field every producer must write and no consumer
may act on reads as information without being any — the ground the v1
`capabilities` fields were removed on. The header carries `felis_json`
alone; the connection's protocol version is provenance, and `meta` is
where an uninterpreted fact belongs.

The rest is the wire catching up with felis 1.0:

- `ConnWelcome.build_id` is gone; `Welcome.identity` is the daemon's build,
  and `serve` always sends it, because the first public contract folds
  every pre-release minor into the minor-0 base — which also retires the
  `MINOR_BUILD_IDENTITY` / `MINOR_LIVE_ONLY_ATTACH` gates it was sent
  behind.
- `SessionInfo.sequence` is a required `NonZeroU64` that `0` is refused
  for, so the one advertised roster row states `1`: it is the first session
  a daemon holding this recording would have created.
- `FrameWriter` takes its effective minor at construction.

Assisted-by: Claude Code
natsukium force-pushed follow-felis-6da5620d from 7ef841b5e9
Some checks failed
ci / cargo fmt / clippy / test / deny (pull_request) Has been cancelled
to 99209f02a5
Some checks failed
ci / cargo fmt / clippy / test / deny (pull_request) Has been cancelled
2026-09-22 12:43:03 +09:00
Compare
natsukium force-pushed follow-felis-6da5620d from 99209f02a5
Some checks failed
ci / cargo fmt / clippy / test / deny (pull_request) Has been cancelled
to 000ecccf86
All checks were successful
ci / cargo fmt / clippy / test / deny (pull_request) Successful in 39s
2026-09-22 12:54:35 +09:00
Compare
natsukium deleted branch follow-felis-6da5620d 2026-09-22 13:46:33 +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-fcast!2
No description provided.