Skip to content

Commit 9369c54

Browse files
committed
feat: prove private OpenInference evidence across retention
1 parent fe649d4 commit 9369c54

8 files changed

Lines changed: 848 additions & 8 deletions

File tree

packages/integration/demo-record-surfaces.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,18 @@
301301
"path": "examples/openinference",
302302
"record_class": "offline-local",
303303
"endpoint_posture": "local-only",
304-
"commands": ["openinference-cognitive-loop", "openinference-dual-export-smoke"]
304+
"commands": [
305+
"openinference-cognitive-loop",
306+
"openinference-dual-export-smoke",
307+
"openinference-phoenix-private-evidence"
308+
]
309+
},
310+
{
311+
"id": "openinference-private-evidence-live",
312+
"path": "examples/openinference",
313+
"record_class": "public-proof",
314+
"endpoint_posture": "public-write",
315+
"commands": ["openinference-phoenix-private-evidence-live"]
305316
},
306317
{
307318
"id": "mem0",

packages/integration/examples/openinference/README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,29 @@ PHOENIX_PROJECT_NAME=default \
6262

6363
Backend verification checks that Phoenix returns the same trace id, span ids, and span names that atrib signed into local sidecars. The run marker is emitted as extra trace metadata and reported when the backend exposes it.
6464

65+
## Private evidence across Phoenix retention
66+
67+
The Phoenix lifecycle proof exercises a stricter privacy boundary than the dual-export smoke. The local span stream still contains synthetic private tool input and output. `AtribSpanProcessor` signs salted commitments to that material and writes the disclosure to a mode-0600 private mirror. A separate allowlist exporter removes user content, span events, links, and status messages before sending the trace to Phoenix.
68+
69+
Start Phoenix, then run the proof:
70+
71+
```bash
72+
docker run --rm -p 6006:6006 arizephoenix/phoenix:19.3.0
73+
pnpm --filter @atrib/integration openinference-phoenix-private-evidence
74+
```
75+
76+
The script confirms that Phoenix received the expected trace and span ids without the private bodies. It deletes the trace through Phoenix's REST API, confirms the trace is gone, then verifies the atrib signatures and replays the private input and output commitments from the local mirror.
77+
78+
The signed `context_id` carries the OpenTelemetry trace id. Exact span ids remain in the private mirror and are not part of the public atrib record. This local run does not prove public-log inclusion or independent chronology. It proves the redaction, deletion, signature, and private-disclosure lifecycle that a logged deployment can build on.
79+
80+
To submit the synthetic hash-only records to the public atrib log and archive, set the explicit live-proof flag:
81+
82+
```bash
83+
pnpm --filter @atrib/integration openinference-phoenix-private-evidence-live
84+
```
85+
86+
The live path verifies that each Merkle leaf matches the signed record, verifies inclusion against the returned checkpoint, checks the checkpoint signature and log key id, and retrieves the archived record. It does not submit the private mirror or its span bodies.
87+
6588
For Langfuse export, set `ATRIB_OPENINFERENCE_OTLP_ENDPOINT` to the full OTLP trace endpoint and pass auth through `ATRIB_OPENINFERENCE_OTLP_HEADERS` or `OTEL_EXPORTER_OTLP_HEADERS`. To prove Langfuse receipt, enable backend verification and provide Langfuse read credentials:
6689

6790
```bash

0 commit comments

Comments
 (0)