CONTRACT-01 landed its crate, so the local stand-in module goes away and the domain scalars, method payloads, their validation, the canonical digests and the trace format all come from the contract. `src/types.rs` is a facade over that crate plus the few things a coordinator needs that are not part of the type contract: a session-side DomainError, the synthetic composition's schema and event-id derivations, and the coordinator-local ControllerIntent, PortBinding and AgentOutcome that never cross the bus. Consequences worth naming: - Payloads are read and written through DomainType::from_json / to_json instead of serde derives, so a misspelled required field fails where the contract says it should. serde, sha2 and ryu-js leave this crate's dependencies with them. - The step-v1 section 8 trace is the contract's TransitionTrace, with behaviour and operational metadata already separated; the dispatch-order comparison now runs over the contract's own behaviour encoding. - Two things the migration found. IN_PROGRESS is raised strictly before any mutation, so its certainty is "none", not "unknown"; the local module had it wrong. WorldObservation::validate_against checks the views a result carries but does not require every declared view to be present, so requiring them is made explicit in the coordinator's phase C check, where step-v1 puts it. - The lost-Advance-result injection now waits for the worker to report the operation before abandoning the call, so the case it injects really is a loss after dispatch rather than a cancellation before it. Gates: cargo test -p fly-session (61 tests, both transports), cargo clippy --all-targets clean, and the runnable example produces the same behaviour trace over both transports.
25 lines
764 B
TOML
25 lines
764 B
TOML
[package]
|
|
name = "fly-session"
|
|
version.workspace = true
|
|
edition = "2024"
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
publish = false
|
|
description = "The lockstep session coordinator, its phase machine and a synthetic composition over flybus."
|
|
|
|
[lib]
|
|
name = "fly_session"
|
|
path = "src/lib.rs"
|
|
|
|
[dependencies]
|
|
# The domain contract (scalars, payloads, canonical digests, the trace format) and the bus.
|
|
# Everything else this crate needs is std or Tokio.
|
|
fly-session-types = { path = "../fly-session-types" }
|
|
flybus = { path = "../flybus" }
|
|
|
|
serde_json = { workspace = true }
|
|
tokio = { version = "1", features = ["rt", "sync", "time", "macros"] }
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3"
|
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "time"] }
|