root 1263720497 validatord: always populate session_id (fallback when Langfuse off)
Surfaced during the 2026-05-02 deploy + reality wave: the persistent
Go stack runs without LANGFUSE_URL/PUBLIC_KEY/SECRET_KEY env, so
shared.langfuseMiddleware operates as a passthrough — never minting
a trace id, never stashing it on the request context. Result:
session_id was empty on every JSONL row, breaking correlation across
the longitudinal log + replay_runs.jsonl + future Langfuse traces.

The fix: validatord falls back to a locally-generated time-ordered
hex id when both the X-Lakehouse-Trace-Id header AND the middleware
context are empty. Same shape Langfuse accepts, so a future deploy
that turns Langfuse on doesn't break correlation — already-emitted
session_ids stay valid as Langfuse trace ids.

Verified post-deploy by driving 9 /v1/iterate sessions through the
persistent stack at :4110:
  - 6 accepted on iter 0 (qwen2.5:latest first-shot 75%)
  - 2 max_iter_exhausted (no_json on prose-y prompts)
  - 1 infra_error (chatd cold-start probe timed out at 5s)

Latest row's session_id: "18abbabdc2306a83-c2306aa9" (was: "")

Probe re-runs (validator_parity, session_log_parity) included as
post-deploy artifacts; both 6/6 + 4/4 with the freshly-restarted
persistent gateway+validatord binaries.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 06:03:43 -05:00

728 B

Validator parity probe — Rust :3100 vs Go :4110

Date: 2026-05-02T10:52:59Z Rust gateway: http://127.0.0.1:3100 · Go gateway: http://127.0.0.1:4110

Identical POST /v1/validate request → both runtimes. Match = identical HTTP status + identical body (modulo elapsed_ms).

Case Rust status Go status Status match Body match
playbook_happy 200 200
playbook_missing_fingerprint 422 422
playbook_wrong_prefix 422 422
playbook_empty_endorsed 422 422
playbook_overfull 422 422
fill_phantom 422 422

Tally: 6 match · 0 diff (out of 6 cases)