audit: cycle #3 tidy (clean)

Cycle-close for the per-symbol geometry sidecar reader (#3).

Architect drift review (0f5e665..be2489a): code matches the spec verbatim;
the README "## Interface" contract was already updated in lockstep (symbol_meta
row + serde_json dependency line). Two drift items, both resolved here:
- [medium] Retire the ephemeral active-cycle artefacts: git-rm the spec and
  plan (recoverable from history via `git show <rev>:<path>`), per the
  docs/specs + docs/plans lifecycle convention.
- [low] Document meta::InstrumentGeometry to parity with the other public
  record types: add a "data_server::meta" subsection enumerating its six
  fields and SUPPORTED_SCHEMA_VERSION.

Regression gate (all green):
- cargo build   -> exit 0, finished clean
- cargo clippy  -> exit 0, 0 warnings
- cargo test    -> exit 0; 36 lib + 4 integration + 0 doc tests passed

No baseline to update (the project has no metric baseline; cargo is the gate).

refs #3
This commit is contained in:
2026-06-25 14:44:37 +02:00
parent be2489ac95
commit 694f96f2b2
3 changed files with 11 additions and 671 deletions
+11
View File
@@ -62,6 +62,17 @@ no other consumer holds it, evicted.
All timestamps are **Unix milliseconds** (converted from the Delphi
`TDateTime` epoch on load).
### Instrument geometry (`data_server::meta`)
- `InstrumentGeometry { digits: u32, pip_size: f64, tick_size: f64, lot_size: f64, base: String, quote: String }`
— neutral, broker-agnostic price geometry for one symbol, loaded by
`DataServer::symbol_meta` from the symbol's `<SYMBOL>.meta.json` sidecar.
`base` / `quote` are passed through verbatim (the consumer resolves provider
codes against its own reference table). A missing sidecar, an unsupported
schema version, or any `null` / non-finite field yields `None` — never a
partial struct.
- `SUPPORTED_SCHEMA_VERSION: u64` — the sidecar `schemaVersion` the reader accepts.
### Lower-level modules
- `data_server::loader``load_m1_file` / `load_tick_file` (ZIP → parsed