SESSION-02: one agent process per fly and one environment process under the coordinator over the Unix-socket transport, compared against the in-process composition and a dedicated-thread variant. The mode is the only thing that changes; the composition, the coordinator, the workers and the router are the same code in all three. The launcher is the configured supervisor. It owns a total thread budget with one allocation per participant, refused as BUSY before anything starts when the total cannot cover it; the configured client, service, worker and port identities, proved in Worker.Hello before the coordinator pins a registration; Worker.Status health on the supervisor's own monotonic clock at the ipc-v1 section 6 budgets; and reaping, where Worker.Shutdown is the request and the operating system is the guarantee. The worker executable is a subcommand of this crate's one binary, which is what implementation.md section 2 allows in place of a separate worker crate. The coordinator's fault behaviour: every failure names the participant it is attributed to, every domain call has a caller-side deadline so a dead participant is a diagnosed outcome rather than a hang, and failing fences the epoch -- the boundary stops, the handles drop, and no further transition or publication is allowed. Agent.Initialize now carries the launcher's allocation, and an agent refuses one asking for more. tests/processes.rs proves every acceptance bullet once per execution mode, and the two section 4 rows SESSION-01 could not reach in one process: a router restart during a world advance, and an old worker's reply after a restart. measure compares the three modes at one, two and four agents; its table is in the crate README, and it is not a capacity claim.
34 lines
1.3 KiB
TOML
34 lines
1.3 KiB
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"
|
|
|
|
# One binary, one role per subcommand. `implementation.md` section 2 allows worker
|
|
# executables to be subcommands of one binary rather than separate crates, and the launcher
|
|
# starts this one with `agent` or `environment` for a participant in its own process.
|
|
[[bin]]
|
|
name = "fly-session"
|
|
path = "src/bin/fly-session.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 }
|
|
# `rt-multi-thread` is not only for the tests: a worker process and a dedicated-thread
|
|
# worker each build their own runtime sized to the launcher's thread allocation.
|
|
tokio = { version = "1", features = ["rt", "rt-multi-thread", "sync", "time", "macros", "io-util"] }
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3"
|
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "time"] }
|