diff --git a/sidecar/src/main.rs b/sidecar/src/main.rs index 347869f..bfaaaa4 100644 --- a/sidecar/src/main.rs +++ b/sidecar/src/main.rs @@ -52,7 +52,27 @@ use tracing_subscriber::EnvFilter; /// kinds are new, `GET /guilds` grows a `roster` key, and nothing existing changed shape. This is the /// first bump that also needed a **store migration** (`guilds.members`), because it is the first to /// add a column to a table that already exists rather than a whole new table; see `store::migrate`. -pub const PROTOCOL_VERSION: u32 = 4; +/// +/// v5 (Protocol 5): three enrichments that are additive in the same way again, bumped together +/// rather than one at a time because a protocol bump is not cheap here — it costs a sidecar +/// release, a republished bundle and an operator update on every shard, so a field left out costs +/// a whole second round of that rather than a follow-up commit. They are: +/// +/// * `house.decay` gains `ownerName` and a decay SCHEDULE — `nextStage`, `decayPeriodSec`, +/// `dynamicDecay`, and `estimatedCollapse` only where it is exactly knowable (at IDOC under +/// dynamic decay; at any stage under static decay, which has no randomness to wait out). +/// * `vendor.listing` gains `ownerAcct` — without which the frame names an owner nobody can +/// resolve to a person — and a `fees` object carrying the charge, the funds, the pay interval +/// and the resolved `dismissalAt`. +/// * `account.login.result` is a NEW kind: the verdict of a login, which the pre-existing +/// `account.login.attempt` structurally cannot carry (its EventSink fires before the auth +/// decision is made). +/// +/// **No store migration this time**, unlike v4. Every frame is persisted whole and the board tables +/// index only the columns they already had, so the new fields ride inside the stored JSON and the +/// new kind lands in `events` like any other. That is the dumb-forwarder property doing its job: +/// the sidecar defines no schema for a frame's contents and so needs no change when they grow. +pub const PROTOCOL_VERSION: u32 = 5; // Not `#[tokio::main]`: on Windows the SCM dispatcher takes over this thread and starts the runtime // itself, on its own thread, once the service actually begins. The runtime is built by whichever