Context
First post-2.7.9 export to RATCHET (per #4) shows trace_llm_calls.base_url scrubbed on ~56% of rows and intact on ~44%, with a perfectly-correlated null pattern on prompt_hash. Suggests two distinct ingestion paths with different scrubbing/enrichment posture.
Export: release_v2/data/lens_export_v2_fixed_2026-05-03T04-00-04Z/
Rows examined: 3,615
Finding
base_url value |
rows |
prompt_hash populated |
top handlers |
[URL] (scrubbed) |
2,049 (56.7%) |
100% |
BaseDSDMA, ActionSelectionPDMAEvaluator, entropy_conscience, coherence_conscience, CSDMAEvaluator |
https://api.deepinfra.com/v1/openai (intact) |
1,566 (43.3%) |
0% |
BaseDSDMA, ActionSelectionPDMAEvaluator, entropy_conscience, coherence_conscience, CSDMAEvaluator |
Same handlers in both subsets — not a per-handler scrubbing rule. Two real anomalies:
- Provider URL leaks on 1,566 rows. The deployment's LLM provider identity (DeepInfra in this corpus) is exposed in the public-release export. Privacy posture probably doesn't intend this.
- prompt_hash is null exactly when base_url is intact. The scrubber that strips
base_url → [URL] also computes prompt_hash. The path that leaves base_url intact does not compute prompt_hash. Two different ingestion / enrichment paths.
Additionally: in the scrubbed-URL subset, prompt_hash value is sometimes literally "[IDENTIFIER]" (a placeholder, not a hash). Sample:
fa9a996f5730178e51ea54e6ee17b74957a82d64b35b23c21e0171b90f1e493b ← real sha256
7679d565a9af6980acf72b177b849d9d669200da1eea44945913ad79e2ad43ba ← real sha256
fad44638f46d46459a7c7035fb5936326013429c7383ccda1ae0ab683b348525 ← real sha256
94afdeb839bd61c1c74aeab136f650c7ca923ddadf614c35c50ec94e8a30f383 ← real sha256
[IDENTIFIER] ← placeholder
prompt_hash is a content fingerprint, not PII — replacing it with [IDENTIFIER] defeats its purpose (downstream comparison / dedup) without any privacy gain.
Why this matters for RATCHET
H3 (shared LLM infrastructure detection) is one of the seven Sybil hypotheses the federation evaluator uses. The detector clusters agents by (model, base_url, parent-topology) — agents that fall in the same dense cluster at high frequency are evidence of shared LLM infrastructure under different pseudonyms. With base_url scrubbed inconsistently:
- The 56.7% scrubbed subset is useless for clustering on base_url (all rows hash to
[URL]).
- The 43.3% intact subset works for clustering — but only includes ~44% of the corpus.
- The split is per-row, not per-agent or per-handler, so we can't even reliably partition the corpus.
prompt_hash similarly: in the scrubbed subset where prompt text is stripped, prompt_hash is the only signal of prompt content fingerprint. Null on 43.3% halves the cross-call comparability.
What this repo needs to do
-
Identify the two ingestion paths. Likely candidates:
- Old vs new persist path (pre-cutover legacy ingestion vs post-cutover engine.receive_and_persist)
- Two different scrubber versions running in parallel during a v1↔v2 shadow window (per
R3_5_DIVERGENCE_AUDIT.md)
- Different middlewares applying scrubbing on different routes
-
Decide consistent posture:
base_url: scrub everywhere (matches public-release privacy intent), or keep everywhere (matches research-utility intent for H3 detector)? Pick one.
prompt_hash: always populate (it's a fingerprint, not PII). Never replace with [IDENTIFIER].
-
Re-export the QA corpus once paths are unified.
Non-blocking for RATCHET
H3 detector calibration on the current corpus will be at degraded power (~44% of rows usable for base_url clustering). Workaround documented in RATCHET's evaluation pipeline; filing this so the next export window has unified scrubbing.
References
Context
First post-2.7.9 export to RATCHET (per #4) shows
trace_llm_calls.base_urlscrubbed on ~56% of rows and intact on ~44%, with a perfectly-correlated null pattern onprompt_hash. Suggests two distinct ingestion paths with different scrubbing/enrichment posture.Export:
release_v2/data/lens_export_v2_fixed_2026-05-03T04-00-04Z/Rows examined: 3,615
Finding
base_urlvalueprompt_hashpopulated[URL](scrubbed)https://api.deepinfra.com/v1/openai(intact)Same handlers in both subsets — not a per-handler scrubbing rule. Two real anomalies:
base_url → [URL]also computesprompt_hash. The path that leavesbase_urlintact does not computeprompt_hash. Two different ingestion / enrichment paths.Additionally: in the scrubbed-URL subset,
prompt_hashvalue is sometimes literally"[IDENTIFIER]"(a placeholder, not a hash). Sample:prompt_hashis a content fingerprint, not PII — replacing it with[IDENTIFIER]defeats its purpose (downstream comparison / dedup) without any privacy gain.Why this matters for RATCHET
H3 (shared LLM infrastructure detection) is one of the seven Sybil hypotheses the federation evaluator uses. The detector clusters agents by
(model, base_url, parent-topology)— agents that fall in the same dense cluster at high frequency are evidence of shared LLM infrastructure under different pseudonyms. Withbase_urlscrubbed inconsistently:[URL]).prompt_hashsimilarly: in the scrubbed subset where prompt text is stripped, prompt_hash is the only signal of prompt content fingerprint. Null on 43.3% halves the cross-call comparability.What this repo needs to do
Identify the two ingestion paths. Likely candidates:
R3_5_DIVERGENCE_AUDIT.md)Decide consistent posture:
base_url: scrub everywhere (matches public-release privacy intent), or keep everywhere (matches research-utility intent for H3 detector)? Pick one.prompt_hash: always populate (it's a fingerprint, not PII). Never replace with[IDENTIFIER].Re-export the QA corpus once paths are unified.
Non-blocking for RATCHET
H3 detector calibration on the current corpus will be at degraded power (~44% of rows usable for base_url clustering). Workaround documented in RATCHET's evaluation pipeline; filing this so the next export window has unified scrubbing.
References
RATCHET/LENS/R3_5_DIVERGENCE_AUDIT.mdCIRISLens/docs/THREAT_MODEL.md§1 ("Privacy boundary by trace tier")