grid: splice the row object into the JSON frame view #208
No reviewers
Labels
No labels
priority/P0
priority/P1
priority/P2
release/v0.1.0
status/blocked
status/planned
type/bug
type/design
type/test-gap
type/tracker
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
natsukium/felis!208
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/row-json-splice-193"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes #193.
RowPayloadis#[serde(transparent)]over its bytes, so aGridMsg::RowDeltawhose payloads carryencode_row_jsonoutput was serialized as an array of the byte values of the row's JSON text — roughly3.5x the size for a 48-column row, and unreadable without a second decode, in every consumer
felis-grid::transcodeexists to serve.body_to_jsonnow splices the decoded row object into the frame view, and the inverse direction acceptsonly that spliced object: a byte-array row is refused rather than admitted as a second valid row shape.
The splice lives in
felis-gridrather than infelis-protocol, whose serde impl stays transparent — aserializer-dependent impl there would resurrect the human-readable branch that was dropped for reaching
no live path.
Doc cascade:
CHANGELOG.md(Fixed) records the user-visible shape change for out-of-repo readers of theJSON frame view; no reference or explanation page states the row's JSON encoding, so nothing else moved.
Verified: just check green (fmt, clippy, nextest, deny, proto-compat); reviewed by pi sol + pi luna;
docs proofread by Gemini gemini-3.8-flash-high
Deferred
RowDeltaGridmessage (e.g.RehydrateBegin) through the new splice branches —both branches are gated on the
RowDeltashape, and the existing dispatch test plus the felis-clibridge suite exercise the untouched path; an added case would be redundant coverage.
the finding itself verifies the test already pins the correct (structural, any-array) rejection path; a
more faithful fixture would strengthen the story but changes no pass/fail outcome.
a_byte_array_row_payload_is_rejectedexercises the pure shape check rather than a decode-basedrejection — the same test and the same cosmetic gap as the note above; merged into that class.