82635fa259
Motivation ---------- The C7 realization note (cd3d1ca/049f22a) deferred this step: with Scalar split into { kind, cell }, the tag-free Cell could become the hot-path carrier, but eval and the edges still flowed the fatter self-describing Scalar. This lands the swap. Change ------ - Node::eval now returns Option<&[Cell]>; every node out-buffer is [Cell; N]. The inter-node forward copies the row into a Vec<Cell> and pushes each field via a new branch-free, infallible AnyColumn::push_cell — the edge from_field->slot kind match is verified once at bootstrap (C7), so the runtime push needs no per-value kind check. It only removes a Result the forward path already .expect()ed. - Scalar stays on the self-describing dynamic boundaries: the param plane (build / bind / compile_with_params / sweep points / RunManifest), AnyColumn::get (the type-erased read for sinks / serde), and source ingestion (Source::next, the heterogeneous C3 merge). The fallible AnyColumn::push is retained for ingestion + the kind-guard tests. Trade ----- The per-value runtime kind check on node OUTPUT is removed: a node that builds a wrong-kind cell pushes raw bits with no panic. This is the same authoring-bug class C8 already leaves to a debug_assert (output width); node-output-kind correctness is the node's declared FieldSpec contract, caught by each node's own eval test. Cross-node kind agreement still rests on the bootstrap kind-check (bootstrap_rejects_*_kind_mismatch, green). Tests ----- Behaviour-preserving (C1): 285 green, 0 red. The only test-expectation edits are carrier re-spellings (Scalar::f64(x) -> Cell::from_f64(x)) of identical values; test column writes and out-of-graph channel rows stay Scalar (the spec's three-role rule). Adds an AnyColumn::push_cell round-trip test plus a cross-kind end-to-end forward test (a mixed f64/i64 record whose bit patterns diverge across kinds — pins the i64 forward path the f64-only tests cannot catch). Ledger C7/C8 notes updated. Gates: cargo build / test / clippy --all-targets -D warnings / doc --workspace all clean. closes #74