SoT 注記: SCHEMA_MAJOR/MINOR の真の Single Source of Truth は
engine-client/src/lib.rsの履歴コメント。本ファイルは年表(要旨)として保持する。詳細な breaking 変更の根拠は ADR 0002 (IPC schema versioning) を参照。
IPC Schema Changelog¶
v3.8 (2026-05-01) — Phase F: typed-only IPC + VenueCaps required (breaking)¶
- major bump 2→3: backward-incompatible cleanups committed in Phase F.
Old
SCHEMA_MAJOR=2clients will be rejected at handshake. tickers: Vec<TickerEntry>:EngineEvent::TickerInfo.tickersfield changed fromVec<serde_json::Value>toVec<TickerEntry>. The Phase A fallback path (value-based parse onkind-less payloads) is removed. Python must always sendkindon every ticker entry.venue_capsrequired:StockTicker.venue_capsandCryptoTicker.venue_capsare now required (previously optional since Phase B). Python must always includevenue_capswith at leastclient_aggr_depthandsupports_spread_display.Exchange::is_depth_client_aggr()deleted: method removed fromexchange/src/adapter.rs. All callers must useVenueCapsStore::get(&ticker).map(|c| c.client_aggr_depth).LocalDepthCache::update_with_qty_norm()deleted: deprecated API removed fromexchange/src/depth.rs. Useupdate()instead.events.json:StockTicker.requiredandCryptoTicker.requirednow include"venue_caps". Phase-note descriptions removed.- SCHEMA_MINOR stays at 8 (no new fields added in Phase F).
Schema versioning follows the policy in spec.md §4.5.1.
- major bump: breaking changes (field removal, rename, enum variant removal)
- minor bump: backwards-compatible additions (new fields, new variants, new commands)
v1.2 (2026-04-25) — Tachibana venue scaffolding (minor)¶
- minor bump 1.1→1.2: added Tachibana 立花証券 venue support at the IPC level. Backwards compatible: every new shape is additive.
- New commands:
SetVenueCredentials { request_id, payload: VenueCredentialsPayload }— tagged enum (today onlytachibana) carrying user_id / password / optional second_password /is_demo/ optional virtual-URL session. Sent at startup (keyring restore) and after managed-mode restart.RequestVenueLogin { request_id, venue }— Rust UI asks the engine to drive the venue-specific login flow (Tachibana spawns a tkinter helper subprocess).
- New events:
VenueReady { venue, request_id? }— idempotent; emitted after every successfulSetVenueCredentials. Resubscribe is ProcessManager-owned; consumers must not re-subscribe on receipt (architecture.md §3, F8).VenueError { venue, request_id?, code, message }—codeenum includessession_expired/unread_notices/phone_auth_required/login_failed/ticker_not_found/transport_error.messageis Python-authored user-facing text (F-Banner1) — the Rust UI renders it verbatim.VenueCredentialsRefreshed { venue, session }— startup re-login produced fresh virtual URLs; Rust uses this to update keyring.VenueLoginStarted { venue, request_id? }— tkinter helper spawned.VenueLoginCancelled { venue, request_id? }— user closed the dialog.
request_idshape: pinned via the new$defs/RequestId(pattern: lowercase hyphenated UUIDv4,maxLength: 36) per LOW-1 / F-L7. Applied toSetVenueCredentials/RequestVenueLoginand toVenue*events' nullablerequest_idfields.Disconnected.reasonconvention:"market_closed"is reserved for Tachibana JST session boundaries; not a new field.- Capabilities path:
Ready.capabilities.venue_capabilities[<venue>]is left untyped on the Rust side (F-M8) — Python is the schema source of truth. Rust-side reads go throughengine_client::capabilities:: venue_capabilitywhich returnsResult<Option<T>, _>so missing / malformed entries cannot silently default tofalse.
v1.1 (2026-04-25) — TradesFetched documented (minor)¶
- minor bump 1.0→1.1: added
TradesFetchedevent definition withis_last: booltoevents.jsonand pydanticschemas.py. The wire format was already chunked in Phase 4 (server.py / engine-client), but the JSON Schema and pydantic model lagged behind; this commit reconciles them. Backwards compatible (field was already sent and Rust side defaults missingis_lasttotrue).
v1.0 (2026-04-24) — Phase 2 baseline (breaking)¶
- major bump 0→1: Rust
engine-clientcrate shipped withSCHEMA_MAJOR = 1. Pythonschemas.pyupdated to match (SCHEMA_MAJOR = 1, SCHEMA_MINOR = 0). The v0.1 schema was development-only and never reached a stable release, so bumping major is cleaner than accumulating minor deltas on an unreleased version. - No message shape changes; bump reflects the first real handshake-enforced version.
v0.1 (2026-04-24) — initial¶
- First schema definition for Phase 0.
- All command (
op) and event (event) message types defined. - Timestamps: UNIX ms as
integer. - Prices/quantities:
stringto avoid floating-point precision loss.