Fingerprint ReadPlan/OffsetMap: Hash + Eq + fingerprint() (ADR-012 §1/§4, plan phase 6)
- #[derive(Hash, Eq)] on ReadPlan, FieldPlan, CompositePlan, ReadKind, DiscriminatorPlan (schema: Arc<Value> hashes via serde_json Value Hash + Eq under preserve_order), and on OffsetMap (+ Clone; LeafMeta/OffsetEntry/ByteRange payload already Hash from phase 5 / this phase). - fingerprint() -> u64 on both via std DefaultHasher (deferred decision 3 resolved: no new dep, not hot, cross-version stability a non-goal per ADR-012). - Contract tests both sides: equal schemas -> equal PartialEq + fingerprint; field-kind / field-order / endianness changes each break equality and fingerprint; different root names over the same document fingerprint differently (ReadPlan). - ValidationPlan already carries its own Hash/Eq/fingerprint + contract test (phase 7 landed early). Verification: 474 tests pass (9 new fingerprint contract tests); clippy -D warnings clean; cargo doc zero warnings; wasm32 release build green.
This commit is contained in:
1 parent
255c8c493e
commit
537a2170fb
3 files changed
+193
-8
No files matched your search
@@ -641,7 +641,24 @@ wasm32-unknown-unknown --release`.
|
||||
|
||||
---
|
||||
|
||||
## Phase 6 — Fingerprinting `ReadPlan`/`OffsetMap` (ADR-012 §1, §4)
|
||||
## Phase 6 — Fingerprinting `ReadPlan`/`OffsetMap` (ADR-012 §1, §4) — **DONE (2026-09-02)**
|
||||
|
||||
> **Status: implemented.** `#[derive(Hash, Eq)]` added to `ReadPlan`,
|
||||
> `FieldPlan`, `CompositePlan`, `ReadKind`, `DiscriminatorPlan`
|
||||
> (`ReadPlan`'s `schema: Arc<Value>` hashes fine — `serde_json::Value:
|
||||
> Hash + Eq` under the pinned `preserve_order` serde_json) and to
|
||||
> `OffsetMap` (`Clone` added alongside; its `LeafMeta`/`OffsetEntry`/
|
||||
> `ByteRange` payload gained `Hash` in phase 5 / this phase). The
|
||||
> POC's `VariantPlan`/`VariantKind` don't exist in the production
|
||||
> shape (phase 1 dropped them). `fingerprint() -> u64` on both via
|
||||
> `DefaultHasher` (deferred decision 3 resolved: std `DefaultHasher`,
|
||||
> no new dep; the fingerprint isn't hot; cross-version stability is a
|
||||
> non-goal per ADR-012). Fingerprint contract tests on both: same
|
||||
> schema twice → equal `PartialEq` + equal fingerprint; field-kind
|
||||
> change, field-order change, and endianness change each → different
|
||||
> fingerprints; (ReadPlan) different root names over the same document
|
||||
> → different fingerprints. `ValidationPlan` already carries its own
|
||||
> `Hash + Eq` + `fingerprint` + contract test (phase 7).
|
||||
|
||||
**Goal:** Add `Hash + Eq` derives + `fingerprint() -> u64` to `ReadPlan`
|
||||
and `OffsetMap`. Enables cross-run caching, `alkcall` schema handshake,
|
||||
|
||||
Reference in new issue
Block a user