Files
improvise/crates/improvise-protocol/Cargo.toml
T
Edward Langley 498582deb1 Bound every_model_command() with the derive (improvise-26dm, Codex P1)
The right-hand side of the LayoutGeometry completeness diff was a second
hand-written list. Both this branch's own review and ChatGPT Codex found it, and
the previous commit corrected the PROSE; Codex asked for the FIX. This is it.

the_enumeration_names_every_variant_the_derive_declares diffs
every_model_command() against variants::declared::<ModelCommand>() -- serde's
derive-generated variant list, improvise-5ubs's mechanism. The chain is now
derive -> every_model_command() -> model_effects -> case list, every link
checked, which is what the ticket asked for.

Injection is Codex's own, run end to end: a ModelCommand::ProbeGeometry whose
effect declares LayoutGeometry, with the model_effects and variant_name arms the
compiler forces, omitted from BOTH lists. Before: the whole workspace green.
After: staged, each stage naming the probe --
  every_model_command() never constructs ["ProbeGeometry"]
then, with the enumeration repaired and only the case list short,
  the_layout_geometry_cases_are_every_wire_effect_of_that_kind
  right: [... "ProbeGeometry" ...]
The staging is the point: the two tests answer different questions.

SCOPE OVERRUN, declared. `variants` was `#[cfg(test)] pub(crate)`, not merely
`pub(crate)`, and `declared()` needs serde_json, which improvise-protocol
carries only as a dev-dependency -- so the authorised one-token change could not
work. What it took instead, all plumbing, no behaviour change:
  improvise-protocol/Cargo.toml  serde_json optional + a `test-support` feature
  improvise-protocol/src/lib.rs  #[cfg(any(test, feature = "test-support"))] pub
  improvise-command/Cargo.toml   dev-dep enables that feature
The feature is OFF in every shipped build: `cargo tree --edges normal
--target wasm32-unknown-unknown` shows no serde_json, and all eight wasm-gated
crates still check clean. Drop this commit if the crossing is unwanted.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FC2jVn8Au7E9JPkw6bwXXH
2026-09-21 10:37:46 -07:00

26 lines
950 B
TOML

[package]
name = "improvise-protocol"
version = "0.1.0-rc2"
edition = "2024"
description = "Wire vocabulary and portable session state shared by the improvise server and clients"
license = "Apache-2.0"
repository = "https://github.com/fiddlerwoaroof/improvise"
[dependencies]
improvise-core = { path = "../improvise-core" }
serde = { version = "1", features = ["derive"] }
# For the one width rule both front ends measure a header label with
# (`AxisFrame::header_widths`). A terminal column is a display cell, not a
# `char`, and the TUI has always measured it this way.
unicode-width = "^0.2"
# Only for `variants`, which is off unless a test build asks for it.
serde_json = { version = "1", optional = true }
[features]
# `variants` reaches OUT of this crate: improvise-command bounds its own
# ModelCommand enumeration with it. Off in every shipped build (improvise-26dm).
test-support = ["dep:serde_json"]
[dev-dependencies]
serde_json = "1"