Two anchor-vs-reality drifts found during /read-mem audit:
1. start_go_stack.sh never started validatord :3221, even though
it shipped 2026-05-02 (f9e7241) and STATE_OF_PLAY claims it as
part of the persistent stack. Cold-boot quietly omitted it,
leaving /v1/iterate unreachable on the persistent gateway.
Fix: factored chatd's conditional-start block into a start_shared
helper, called for both chatd :3220 and validatord :3221. Same
shared-with-smokes posture as chatd (no S3 / JSONL-only state,
no temp-toml override needed).
2. STATE_OF_PLAY header claimed 3 parity probes / 32 assertions.
Reality is 6 probes / 38 assertions since subject_audit landed
in 262a77a (2026-05-03). Header refreshed; cross-references
the three runtime-divergence classes documented at
lakehouse/STATE_OF_PLAY.md lines 36-39.
Parity reports regenerated as verification artifact (all 6 still
green: 8+12+2+4+1+6). Same pattern as c0a55b1.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Frames the Rust system accurately — it's receiving parity work +
infrastructure (Lance gauntlet, sidecar drop, observability parity),
not just security fixes. Points readers at lakehouse/STATE_OF_PLAY.md
+ docs/ARCHITECTURE_COMPARISON.md for the cross-runtime view.
Also commits today's parity probe report regenerations (5/5 still
32/32 post-Lance work).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Today's sidecar drop (lakehouse ba928b1) changed Rust's embed
transport from gateway → sidecar → Ollama (2 hops) to gateway →
Ollama directly. Go's embedd has always been direct. A drift here
would mean: same query, different vector → different HNSW top-K →
different staffing recommendations. This probe is the regression
gate for that surface.
Fixtures cover staffing-domain shapes (forklift, welder, OSHA,
dental, CNC) plus stress shapes (unicode "Café résumé ⭐ 你好",
single char "x", 200-word long fixture).
Match metric: cosine similarity ≥ 0.99999. Byte-equal isn't
expected — Go round-trips through []float32 internally while Rust
stays at Vec<f64>, so JSON serialization introduces small float
drift. What matters operationally is vector direction (HNSW uses
cosine distance), and both runtimes preserve it when calling the
same Ollama with the same model.
Result: **8/8 fixtures match** including the long + unicode cases.
Sidecar drop didn't disturb the embed surface. The probe also
forces both endpoints to use `nomic-embed-text` so the v1-vs-v2-moe
default difference doesn't pollute the comparison.
5th cross-runtime parity probe joining the family:
- validator_parity (6/6)
- extract_json_parity (12/12)
- session_log_parity (4/4)
- materializer_parity (2/2)
- embed_parity (8/8) — this commit
Cumulative: 32/32 parity assertions across 5 probes covering
HTTP shape (validator, embed), CLI output (materializer), unit
behavior (extract_json), and persisted shape (session_log).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>