Skip to content

Inconsistent base_url scrubbing + correlated prompt_hash null pattern across LLM_CALL rows #6

Description

@emooreatx

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:

  1. 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.
  2. 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

  1. 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
  2. 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].
  3. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions