From 272cd3723b29d78de673188e0551b9e7895d9fb1 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 21 Dec 2025 10:45:56 +0000 Subject: [PATCH] Add v3.2 trace bundle + paper --- ..._DEBUGGING_TRACE_WHITEPAPER_v3.2_STYLED.md | 196 +++++++ ...ING_TRACE_WHITEPAPER_v3.2_STYLED.md.sha256 | 1 + ...8e-6a83-445e-86f7-06905c500146_IF_STORY.md | 23 + ...-445e-86f7-06905c500146_IF_STORY.md.sha256 | 1 + README.md | 15 + ...CE_96700e8e-6a83-445e-86f7-06905c500146.md | 35 ++ ...0e8e-6a83-445e-86f7-06905c500146.md.sha256 | 1 + emo_trace_pack.py | 547 ++++++++++++++++++ emo_trace_pack.py.sha256 | 1 + ...6700e8e-6a83-445e-86f7-06905c500146.tar.gz | Bin 0 -> 82410 bytes ...-6a83-445e-86f7-06905c500146.tar.gz.sha256 | 1 + ...45e-86f7-06905c500146.ttt_audit_entry.json | 9 + ...7-06905c500146.ttt_audit_entry.json.sha256 | 1 + ...5e-86f7-06905c500146.ttt_chain_record.json | 21 + ...-06905c500146.ttt_chain_record.json.sha256 | 1 + ...-445e-86f7-06905c500146.ttt_chain_ref.json | 4 + ...6f7-06905c500146.ttt_chain_ref.json.sha256 | 1 + 17 files changed, 858 insertions(+) create mode 100644 IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v3.2_STYLED.md create mode 100644 IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v3.2_STYLED.md.sha256 create mode 100644 IF_EMOTION_TRACE_REFERENCE_96700e8e-6a83-445e-86f7-06905c500146_IF_STORY.md create mode 100644 IF_EMOTION_TRACE_REFERENCE_96700e8e-6a83-445e-86f7-06905c500146_IF_STORY.md.sha256 create mode 100644 VERIFY_EMO_TRACE_96700e8e-6a83-445e-86f7-06905c500146.md create mode 100644 VERIFY_EMO_TRACE_96700e8e-6a83-445e-86f7-06905c500146.md.sha256 create mode 100644 emo_trace_pack.py create mode 100644 emo_trace_pack.py.sha256 create mode 100644 emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz create mode 100644 emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz.sha256 create mode 100644 emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_audit_entry.json create mode 100644 emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_audit_entry.json.sha256 create mode 100644 emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_record.json create mode 100644 emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_record.json.sha256 create mode 100644 emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_ref.json create mode 100644 emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_ref.json.sha256 diff --git a/IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v3.2_STYLED.md b/IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v3.2_STYLED.md new file mode 100644 index 0000000..26db10d --- /dev/null +++ b/IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v3.2_STYLED.md @@ -0,0 +1,196 @@ +# IF.EMOTION TRACE PROTOCOL v3.2 — AUDITABLE DEBUGGING (WITHOUT WISHFUL THINKING) + +**Alternate title:** Debugging Emotion — the Immutable Flight Recorder + +**Subject:** End-to-end traceability, bounded completeness witnessing, and PQ-anchored evidence binding + +**Protocol:** IF.TTT (Traceable, Transparent, Trustworthy) + +**Version:** 3.2 (Methodology hardening: key separation + monotonic timing + correlation-only client trace) + +**Date (UTC):** 2025-12-21 + +**Status:** AUDIT REQUIRED + +**Citation:** `if://whitepaper/emotion/trace-protocol/v3.2` + +--- + +## What this is (and why it matters) + +If you run an LLM system in a high-liability environment, you eventually hit the moment where “the logs say” isn’t enough. You need evidence you can hand to someone who does not trust you. + +*This is not an observability feature. It’s chain-of-custody.* + +This protocol is a practical answer to one question: + +Can an external reviewer independently verify what happened from request → retrieval → output, and detect tampering after the fact? + +It intentionally separates what we can prove from what we cannot. + +--- + +## Guarantees (and boundaries) + +This system provides **integrity** guarantees (tamper-evidence) and **bounded completeness** guarantees (witnessing) within explicit boundaries. + +- **Integrity:** the trace timeline is hash-chained; the signed summary binds the final output to a trace head. +- **Completeness (bounded):** a REQ_SEEN ledger witnesses each request that crosses the backend witness boundary, with a signed per-hour Merkle head. +- **PQ anchoring (bounded):** Post-quantum signatures apply at registry anchoring time (IF.TTT), not necessarily on every hot-path artifact. + +One sentence boundary (non-negotiable): + +Integrity starts at the backend witness boundary; completeness is only meaningful at and after that boundary until edge witnessing is cryptographically enforced. + +--- + +## Layered evidence stack (where guarantees live) + +```mermaid +flowchart TB + U[User] -->|HTTPS| E[Edge] + E --> B[Backend Witness Boundary] + + B --> R[Retrieval] + B --> P[Prompt] + B --> M[Model] + B --> X[Postprocess] + + B --> T1["REQ_SEEN ledger
(hourly JSONL)"] + B --> T2["Trace events
(hash chain JSONL)"] + B --> T3["Signed summary
(output hash + head attestation)"] + + T1 --> H["Signed Merkle head
(per hour)"] + T2 --> S["Trace head
(event_hash)"] + + H --> BUNDLE["Evidence bundle
(tar.gz + manifest)"] + S --> BUNDLE + T3 --> BUNDLE + + BUNDLE --> REG["Registry anchor
(PQ-hybrid)"] + BUNDLE --> MIRROR["Static mirror
(public download)"] +``` + +Interpretation: + +Integrity starts at the witness boundary; completeness is only meaningful at and after that boundary until edge witnessing exists. + +--- + +## Evidence inventory (what ships) + +| Artifact | File | Claim it supports | Verification | +|---|---|---|---| +| Evidence bundle | `emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz` | Portable reproduction | `sha256sum` + verifier | +| Manifest + checksums | `payload/manifest.json`, `payload/sha256s.txt` | “One check implies contents” | verifier validates per-file SHA256 | +| Trace event chain | `payload/trace_events.jsonl` | Tamper-evident event ordering | verifier recomputes event hashes | +| Signed summary | `payload/ttt_signed_record.json` | Binds response hash → trace head | verifier recomputes HMAC signature | +| REQ_SEEN ledger | `payload/req_seen_.jsonl` | Bounded completeness | verifier recomputes leaf hashes + Merkle root | +| REQ_SEEN head | `payload/req_seen_head_.json` | Signed Merkle head | verifier checks Ed25519 signature | +| Inclusion proof | `payload/req_seen_inclusion_proof.json` | Proves this trace is in the hour ledger | verifier checks Merkle path | +| IF.story annex | `payload/if_story.md` and external annex | Human-readable timeline | anchors must reference real `event_hash` | +| Registry corroboration | `*.ttt_chain_record.json` | PQ-anchored record (when available) | compare content hashes | + +--- + +## Methodology hardening in v3.2 (the changes that close real audit gaps) + +### HMAC key separation for REQ_SEEN (no mixed keys) + +REQ_SEEN uses HMAC commitments only if `IF_REQ_SEEN_HMAC_KEY` is configured. It never reuses the signing secret used for the signed summary. + +If `IF_REQ_SEEN_HMAC_KEY` is missing, REQ_SEEN downgrades to SHA256 commitments and the system must not claim “privacy-preserving HMAC commitments”. + +### Correlation-only client trace IDs (collision discipline) + +If a client provides `X-IF-Client-Trace`, it is treated as a correlation-only identifier. + +The canonical trace ID is always server-generated and returned in `X-IF-Emotion-Trace`. + +### Monotonic timing fields (clock realism) + +Each trace event includes: + +- `ts_utc`: wall-clock timestamp (not trusted for crypto time) +- `mono_ns` / `mono_ms`: monotonic timing since trace start (stable ordering and performance attribution) + +This does not solve time attestation, but it removes “clock drift” as an excuse for missing latency evidence. + +### Inclusion proof is a first-class prior + +The inclusion proof file is registered as a child artifact in IF.TTT. It is not optional. + +--- + +## Reference proof run (v3.2) + +Trace ID: + +- `96700e8e-6a83-445e-86f7-06905c500146` + +Evidence bundle: + +- Static mirror (preferred): `https://infrafabric.io/static/hosted/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz` +- Forgejo raw (alternate): `https://git.infrafabric.io/danny/hosted/raw/branch/main/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz` + +Tarball SHA256: + +- `85eb323c8e5f11cf4dd18e612e8cde8dcdb355b3fbd6380bbc8d480a5bf97e87` + +IF.TTT tarball handle: + +- `if://citation/2ec551ec-0a08-487d-a41d-4d068aa8ee2f/v1` + +--- + +## Verification (external reviewer path) + +Download + hash: + +```bash +curl -fsSL -o emo.tar.gz 'https://infrafabric.io/static/hosted/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz' +sha256sum emo.tar.gz +# expected: 85eb323c8e5f11cf4dd18e612e8cde8dcdb355b3fbd6380bbc8d480a5bf97e87 +``` + +Run verifier: + +```bash +python3 -m venv venv +./venv/bin/pip install canonicaljson pynacl +curl -fsSL -o iftrace.py 'https://infrafabric.io/static/hosted/iftrace.py' +./venv/bin/python iftrace.py verify emo.tar.gz --expected-sha256 85eb323c8e5f11cf4dd18e612e8cde8dcdb355b3fbd6380bbc8d480a5bf97e87 +``` + +REQ_SEEN inclusion proof check: + +```bash +tar -xzf emo.tar.gz +./venv/bin/python iftrace.py verify-inclusion payload/req_seen_inclusion_proof.json +# expected: OK +``` + +--- + +## Narrative annex + +IF.story is not evidence; it is a deterministic projection keyed by `event_hash`. + +- Static mirror: `https://infrafabric.io/static/hosted/IF_EMOTION_TRACE_REFERENCE_96700e8e-6a83-445e-86f7-06905c500146_IF_STORY.md` +- Forgejo raw: `https://git.infrafabric.io/danny/hosted/raw/branch/main/IF_EMOTION_TRACE_REFERENCE_96700e8e-6a83-445e-86f7-06905c500146_IF_STORY.md` + +--- + +## Limitations (still true) + +- This proves what the system did and what bytes were served. It does not prove factual truth in the world. +- Completeness is bounded by the witness boundary; requests dropped before the backend boundary are out of scope until edge witnessing is cryptographically bound. +- Key management and time attestation remain the practical certification blockers (HSM/TPM, rotation ceremony, external timestamping). + +--- + +## What to do next (tomorrow’s work, not wishful thinking) + +- Move REQ_SEEN witnessing to the true front door (edge) and sign the head there. +- Publish a deploy attestation record (code hash + image digest) into IF.TTT for every release. +- Add a clear anchoring SLO (maximum time from trace finalization → registry anchor) and enforce it. diff --git a/IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v3.2_STYLED.md.sha256 b/IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v3.2_STYLED.md.sha256 new file mode 100644 index 0000000..963d34d --- /dev/null +++ b/IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v3.2_STYLED.md.sha256 @@ -0,0 +1 @@ +8e61cfd0353da980439d9e18aeb6d572d71eb58960ccf26dfdf279c453095835 /root/tmp/hosted_repo_update/IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v3.2_STYLED.md diff --git a/IF_EMOTION_TRACE_REFERENCE_96700e8e-6a83-445e-86f7-06905c500146_IF_STORY.md b/IF_EMOTION_TRACE_REFERENCE_96700e8e-6a83-445e-86f7-06905c500146_IF_STORY.md new file mode 100644 index 0000000..db8651b --- /dev/null +++ b/IF_EMOTION_TRACE_REFERENCE_96700e8e-6a83-445e-86f7-06905c500146_IF_STORY.md @@ -0,0 +1,23 @@ +# IF.story — contextual narrative log (reference) + +Trace: `96700e8e-6a83-445e-86f7-06905c500146` + +Evidence bundle tarball: +- `https://infrafabric.io/static/hosted/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz` +- `https://git.infrafabric.io/danny/hosted/raw/branch/main/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz` + +--- + +Trace: `96700e8e-6a83-445e-86f7-06905c500146` + +Deterministic narrative projection of `trace_events.jsonl`. Each line includes the `event_hash` anchor. + +- 2025-12-21T10:20:04Z (+0ms) | `request_commit` | Request body commitment; commit_ok=True client_trace_id=22222222-2222-4222-8222-222222222222 | event_hash=f924cb8cba0a6db4580009da023bd4eaeb376daaffa119619799f26f584358aa +- 2025-12-21T10:20:04Z (+1ms) | `req_seen` | REQ_SEEN witnessed; hour=20251221T10 count=4 merkle_root=fc96fce3d19583cbb4e11e4e0c4e717c4ce7d426697a5633286a9a446a146455 | event_hash=8f0c3568e59243519994ff76dad25def95e1014180fb8c5db7b3f86efb92f9f9 +- 2025-12-21T10:20:04Z (+2ms) | `request_received` | Auth+quota succeeded; provider=codex model=gpt-5.2 stream=False user_len=47 auth_ms=3 | event_hash=f50db27625228b5293e1a2c14018bfd95377a12d211233f46fc4c85739f8f27d +- 2025-12-21T10:20:04Z (+3ms) | `guard_short_circuit` | IF.GUARD short-circuit; reasons=['self_harm_signal'] | event_hash=2c9eb30ff9fb12e19faecc9cd403c86d033bb76d7923d534ef08c37eb1bc217f +- 2025-12-21T10:20:04Z (+3ms) | `trace_finalizing` | Trace finalizing; ok=True provider=guard | event_hash=0022e0ce2050bc544bc38ff518aa465f505aad4c231bba4d7aabff19fcf459d9 + +Notes: +- Ground truth remains `trace_events.jsonl` + `ttt_signed_record.json`. +- REQ_SEEN ledger+head are included; public key is `trace_ed25519.pub`. diff --git a/IF_EMOTION_TRACE_REFERENCE_96700e8e-6a83-445e-86f7-06905c500146_IF_STORY.md.sha256 b/IF_EMOTION_TRACE_REFERENCE_96700e8e-6a83-445e-86f7-06905c500146_IF_STORY.md.sha256 new file mode 100644 index 0000000..b537f13 --- /dev/null +++ b/IF_EMOTION_TRACE_REFERENCE_96700e8e-6a83-445e-86f7-06905c500146_IF_STORY.md.sha256 @@ -0,0 +1 @@ +4f86ad4c1ebf415b6ed1ee700748584af1380ec0d04f8e0350e1fe51f458720e /root/tmp/hosted_repo_update/IF_EMOTION_TRACE_REFERENCE_96700e8e-6a83-445e-86f7-06905c500146_IF_STORY.md diff --git a/README.md b/README.md index 01d25e7..746e8b0 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,21 @@ Static hosted artifacts used in InfraFabric reviews. - IF.TTT citation (PQ hybrid signed): `if://citation/c24fe95e-226c-4efc-ba22-5ddcc37ff7d2/v1` - Notes: includes `payload/trace_ed25519.pub` + `payload/req_seen_inclusion_proof.json` + nested priors (`payload/ttt_children*.json`). +## emo-social trace payload (v3.2, methodology hardening demo) + +- File: `emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz` +- SHA256: `85eb323c8e5f11cf4dd18e612e8cde8dcdb355b3fbd6380bbc8d480a5bf97e87` +- IF.TTT citation (PQ hybrid signed): `if://citation/2ec551ec-0a08-487d-a41d-4d068aa8ee2f/v1` +- Notes: includes monotonic timing fields (`mono_ns`/`mono_ms`), correlation-only `X-IF-Client-Trace`, and registers `payload/req_seen_inclusion_proof.json` as a first-class prior. + +## IF.emotion trace whitepaper (styled v3.2) + +- File: `IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v3.2_STYLED.md` + +## Trace bundler (operator tool) + +- File: `emo_trace_pack.py` (builds an evidence bundle tarball from a trace id by pulling artifacts from `pct 220` + `pct 240`) + ## IF.emotion trace whitepaper (styled v2.1) - File: `IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v2.1_STYLED.md` diff --git a/VERIFY_EMO_TRACE_96700e8e-6a83-445e-86f7-06905c500146.md b/VERIFY_EMO_TRACE_96700e8e-6a83-445e-86f7-06905c500146.md new file mode 100644 index 0000000..072b89e --- /dev/null +++ b/VERIFY_EMO_TRACE_96700e8e-6a83-445e-86f7-06905c500146.md @@ -0,0 +1,35 @@ +# Verify emo-social trace bundle (external) + +Artifacts: +- Tarball: `emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz` +- SHA256: `85eb323c8e5f11cf4dd18e612e8cde8dcdb355b3fbd6380bbc8d480a5bf97e87` +- IF.TTT handle (PQ hybrid signed in registry): `if://citation/2ec551ec-0a08-487d-a41d-4d068aa8ee2f/v1` + +Download: +```bash +curl -fsSL -o emo.tar.gz 'https://infrafabric.io/static/hosted/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz' +# Alternate (Forgejo raw): +curl -fsSL -o emo.tar.gz 'https://git.infrafabric.io/danny/hosted/raw/branch/main/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz' + +sha256sum emo.tar.gz +``` + +Run verifier: +```bash +python3 -m venv venv +./venv/bin/pip install canonicaljson pynacl +curl -fsSL -o iftrace.py 'https://infrafabric.io/static/hosted/iftrace.py' +./venv/bin/python iftrace.py verify emo.tar.gz --expected-sha256 85eb323c8e5f11cf4dd18e612e8cde8dcdb355b3fbd6380bbc8d480a5bf97e87 +``` + +Merkle inclusion proof demo (REQ_SEEN completeness): +```bash +mkdir -p payload && tar -xzf emo.tar.gz -C . +./venv/bin/python iftrace.py verify-inclusion payload/req_seen_inclusion_proof.json +``` + +IF.TTT corroboration note: +- The `if://citation/...` handle is an internal registry identifier. +- For external review without registry access, use the published chain record: + - `emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_record.json` + - `emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_ref.json` diff --git a/VERIFY_EMO_TRACE_96700e8e-6a83-445e-86f7-06905c500146.md.sha256 b/VERIFY_EMO_TRACE_96700e8e-6a83-445e-86f7-06905c500146.md.sha256 new file mode 100644 index 0000000..20dec8e --- /dev/null +++ b/VERIFY_EMO_TRACE_96700e8e-6a83-445e-86f7-06905c500146.md.sha256 @@ -0,0 +1 @@ +48a58a3729409dcc66da57cbd428b611ca50c29f03dc3b8b411a96acefdba76d /root/tmp/hosted_repo_update/VERIFY_EMO_TRACE_96700e8e-6a83-445e-86f7-06905c500146.md diff --git a/emo_trace_pack.py b/emo_trace_pack.py new file mode 100644 index 0000000..8bb15f8 --- /dev/null +++ b/emo_trace_pack.py @@ -0,0 +1,547 @@ +#!/usr/bin/env python3 +""" +Build an IF.emotion "evidence bundle" tarball for a trace ID. + +This is an operator tool that runs on the Proxmox host and pulls artifacts from: + - pct 220 (emo-social / if.emotion backend) + - pct 240 (IF.TTT registry) + +Outputs: + /root/tmp/emo-trace-package-/ + payload/... + emo_trace_payload_.tar.gz + payload_tar_sha256.txt + ttt_tarball_audit_entry.json + ttt_tarball_chain_record.json + ttt_tarball_chain_ref.json +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import os +import subprocess +import tarfile +import textwrap +import uuid +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + + +def utc_now_iso() -> str: + return datetime.now(timezone.utc).isoformat() + + +def sha256_bytes(data: bytes) -> str: + return hashlib.sha256(data or b"").hexdigest() + + +def sha256_file(path: Path) -> str: + h = hashlib.sha256() + with path.open("rb") as f: + for chunk in iter(lambda: f.read(1024 * 1024), b""): + h.update(chunk) + return h.hexdigest() + + +def canonical_json_bytes(obj: Any) -> bytes: + return json.dumps(obj, ensure_ascii=False, sort_keys=True, separators=(",", ":")).encode("utf-8") + + +def merkle_root_hex(leaves_hex: list[str]) -> str: + if not leaves_hex: + return sha256_bytes(b"") + level: list[bytes] = [bytes.fromhex(h) for h in leaves_hex if isinstance(h, str) and len(h) == 64] + if not level: + return sha256_bytes(b"") + while len(level) > 1: + if len(level) % 2 == 1: + level.append(level[-1]) + nxt: list[bytes] = [] + for i in range(0, len(level), 2): + nxt.append(hashlib.sha256(level[i] + level[i + 1]).digest()) + level = nxt + return level[0].hex() + + +def merkle_inclusion_proof(leaves_hex: list[str], index: int) -> dict: + if index < 0 or index >= len(leaves_hex): + raise ValueError("index out of range") + level: list[bytes] = [bytes.fromhex(h) for h in leaves_hex] + proof: list[dict] = [] + idx = index + while len(level) > 1: + if len(level) % 2 == 1: + level.append(level[-1]) + sibling_idx = idx ^ 1 + sibling = level[sibling_idx] + side = "left" if sibling_idx < idx else "right" + proof.append({"sibling": sibling.hex(), "side": side}) + nxt: list[bytes] = [] + for i in range(0, len(level), 2): + nxt.append(hashlib.sha256(level[i] + level[i + 1]).digest()) + level = nxt + idx //= 2 + root = level[0].hex() + return {"index": index, "root": root, "path": proof} + + +def run(cmd: list[str], *, stdin: bytes | None = None, timeout_s: int = 120) -> bytes: + p = subprocess.run( + cmd, + input=stdin, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + timeout=timeout_s, + check=False, + ) + if p.returncode != 0: + raise RuntimeError(f"cmd failed ({p.returncode}): {' '.join(cmd)}\n{p.stderr.decode('utf-8',errors='ignore')}") + return p.stdout + + +def pct_exec(pct: int, bash_cmd: str, *, stdin: bytes | None = None, timeout_s: int = 120) -> bytes: + return run(["pct", "exec", str(pct), "--", "bash", "-lc", bash_cmd], stdin=stdin, timeout_s=timeout_s) + + +def pct_cat(pct: int, path: str, *, timeout_s: int = 120) -> bytes: + return pct_exec(pct, f"cat {shlex_quote(path)}", timeout_s=timeout_s) + + +def shlex_quote(s: str) -> str: + # Minimal, safe shell quoting for paths. + return "'" + (s or "").replace("'", "'\"'\"'") + "'" + + +def write_json(path: Path, obj: Any) -> None: + path.write_text(json.dumps(obj, ensure_ascii=False, sort_keys=True, indent=2) + "\n", encoding="utf-8") + + +def write_text(path: Path, text: str) -> None: + path.write_text(text, encoding="utf-8") + + +def fetch_api_json(*, trace_id: str, endpoint: str, email: str) -> Any: + raw = pct_exec( + 220, + f"curl -fsSL -H {shlex_quote('X-Auth-Request-Email: ' + email)} http://127.0.0.1:5000{endpoint}", + timeout_s=60, + ) + return json.loads(raw.decode("utf-8", errors="ignore") or "{}") + + +def extract_ttt_signed_record(*, trace_id: str) -> dict: + script = textwrap.dedent( + f""" + python3 - <<'PY' + import json + tid = {trace_id!r} + path = "/opt/if-emotion/data/ttt_signed_log.jsonl" + out = None + try: + with open(path, "r", encoding="utf-8", errors="ignore") as f: + for line in f: + line = line.strip() + if not line: + continue + try: + rec = json.loads(line) + except Exception: + continue + ev = rec.get("event") or {{}} + if isinstance(ev, dict) and str(ev.get("trace_id") or "").strip() == tid: + out = rec + except Exception: + out = None + print(json.dumps(out or {{}}, ensure_ascii=False, sort_keys=True)) + PY + """ + ).strip() + raw = pct_exec(220, script, timeout_s=60) + return json.loads(raw.decode("utf-8", errors="ignore") or "{}") + + +def resolve_ttt_records_by_id(record_ids: list[str]) -> list[dict]: + payload = json.dumps({"ids": record_ids}, ensure_ascii=False).encode("utf-8") + py = """ +import json +import sys +import importlib.util +import contextlib + +req = json.loads(sys.stdin.read() or "{}") +ids = req.get("ids") or [] + +spec = importlib.util.spec_from_file_location("ttt_registry_mod", "/opt/ttt-registry/ttt_registry.py") +mod = importlib.util.module_from_spec(spec) + +with contextlib.redirect_stdout(sys.stderr): + spec.loader.exec_module(mod) # type: ignore + reg = mod.TTTRegistry() + +out = [] +for rid in ids: + rid = str(rid or "").strip() + if not rid: + continue + h = reg.redis.get(f"ttt:index:id:{rid}") + if not h: + continue + try: + out.append(reg.get(h)) + except Exception: + continue + +print(json.dumps(out, ensure_ascii=False, sort_keys=True)) +""".strip() + raw = pct_exec( + 240, + f"OQS_INSTALL_PATH=/opt/ttt-registry/_oqs /opt/ttt-registry/venv/bin/python -c {shlex_quote(py)}", + stdin=payload, + timeout_s=180, + ) + try: + data = json.loads(raw.decode("utf-8", errors="ignore") or "[]") + except Exception: + return [] + return data if isinstance(data, list) else [data] + + +def write_audit_entries(entries: list[dict]) -> None: + payload = json.dumps({"entries": entries}, ensure_ascii=False).encode("utf-8") + py = """ +import json +import sys +import re +import uuid +import redis +from pathlib import Path + +req = json.loads(sys.stdin.read() or "{}") +entries = req.get("entries") or [] + +cfg = Path("/etc/redis/ttt.conf").read_text(encoding="utf-8", errors="ignore") +m = re.search(r"^requirepass\\s+(\\S+)", cfg, flags=re.M) +password = m.group(1) if m else None + +r = redis.Redis(host="localhost", port=6380, password=password, decode_responses=True) +written = 0 +for e in entries: + cid = str(e.get("citation_id") or "").strip() + parts = cid.split("/") + uid = (parts[3] if len(parts) > 3 else "").strip() + try: + uuid.UUID(uid) + except Exception: + continue + r.set(f"audit:entry:{uid}", json.dumps(e, ensure_ascii=False, sort_keys=True)) + written += 1 + +print(json.dumps({"ok": True, "written": written}, ensure_ascii=False)) +""".strip() + _ = pct_exec(240, f"/opt/ttt-registry/venv/bin/python -c {shlex_quote(py)}", stdin=payload, timeout_s=60) + + +def ttt_import_audit() -> dict: + raw = pct_exec( + 240, + "OQS_INSTALL_PATH=/opt/ttt-registry/_oqs /opt/ttt-registry/venv/bin/python /opt/ttt-registry/ttt_registry.py import-audit", + timeout_s=300, + ) + txt = raw.decode("utf-8", errors="ignore") or "" + # The registry prints capability banners before JSON; best-effort parse the last JSON object. + for chunk in reversed([c.strip() for c in txt.splitlines() if c.strip()]): + if chunk.startswith("{") and chunk.endswith("}"): + try: + return json.loads(chunk) + except Exception: + break + return {"raw": txt.strip()} + + +def build_story(trace_id: str, events: list[dict]) -> str: + lines = [ + "# IF.story — contextual narrative log", + "", + f"Trace: `{trace_id}`", + "", + "Deterministic narrative projection of `trace_events.jsonl`. Each line includes the `event_hash` anchor.", + "", + ] + for ev in sorted(events, key=lambda e: int(e.get("idx") or 0)): + ts = str(ev.get("ts_utc") or "") + et = str(ev.get("type") or "") + mono_ms = int(ev.get("mono_ms") or 0) + data = ev.get("data") if isinstance(ev.get("data"), dict) else {} + h = str(ev.get("event_hash") or "") + summary = "" + if et == "request_commit": + summary = f"Request body commitment; commit_ok={bool(data.get('commit_ok'))} client_trace_id={data.get('client_trace_id') or ''}".strip() + elif et == "req_seen": + summary = f"REQ_SEEN witnessed; hour={data.get('hour_utc')} count={data.get('count')} merkle_root={data.get('merkle_root')}" + elif et == "request_received": + summary = f"Auth+quota succeeded; provider={data.get('provider')} model={data.get('requested_model')} stream={data.get('stream')} user_len={data.get('user_len')} auth_ms={data.get('auth_ms')}" + elif et == "guard_short_circuit": + summary = f"IF.GUARD short-circuit; reasons={data.get('reasons')}" + elif et == "trace_finalizing": + summary = f"Trace finalizing; ok={data.get('ok')} provider={data.get('provider')}" + else: + # generic + keys = list(data.keys())[:6] if isinstance(data, dict) else [] + summary = f"Event data keys={keys}" + lines.append(f"- {ts} (+{mono_ms}ms) | `{et}` | {summary} | event_hash={h}") + lines += [ + "", + "Notes:", + "- Ground truth remains `trace_events.jsonl` + `ttt_signed_record.json`.", + "- REQ_SEEN ledger+head are included; public key is `trace_ed25519.pub`.", + "", + ] + return "\n".join(lines) + + +def build_manifest(payload_dir: Path) -> tuple[dict, dict[str, str]]: + sha_map: dict[str, str] = {} + files = [] + for p in sorted(payload_dir.iterdir(), key=lambda x: x.name): + if not p.is_file(): + continue + data = p.read_bytes() + sha = sha256_bytes(data) + sha_map[p.name] = sha + files.append({"path": p.name, "bytes": len(data), "sha256": sha}) + manifest = {"files": files} + return manifest, sha_map + + +def write_sha256s(payload_dir: Path, sha_map: dict[str, str]) -> None: + lines = [] + for name in sorted(sha_map.keys()): + lines.append(f"{sha_map[name]} {name}") + (payload_dir / "sha256s.txt").write_text("\n".join(lines) + "\n", encoding="utf-8") + + +def tar_payload(workdir: Path, trace_id: str) -> Path: + tar_path = workdir / f"emo_trace_payload_{trace_id}.tar.gz" + with tarfile.open(tar_path, "w:gz") as tf: + tf.add(workdir / "payload", arcname="payload") + return tar_path + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("trace_id", help="Trace ID to package") + ap.add_argument("--email", default="ds@infrafabric.io", help="Trusted email for owner-gated endpoints") + ap.add_argument("--headers", default="", help="Path to captured HTTP response headers (optional)") + ap.add_argument("--response", default="", help="Path to captured HTTP response body (optional)") + ap.add_argument("--api-payload", default="", help="Path to captured request JSON (optional)") + ap.add_argument("--out-dir", default="", help="Output directory (default: /root/tmp/emo-trace-package-)") + args = ap.parse_args() + + trace_id = str(args.trace_id).strip() + if not trace_id: + raise SystemExit("trace_id required") + + out_dir = Path(args.out_dir or f"/root/tmp/emo-trace-package-{trace_id}").resolve() + payload_dir = out_dir / "payload" + payload_dir.mkdir(parents=True, exist_ok=True) + + # Captured request/response artifacts (optional). + if args.headers: + write_text(payload_dir / "headers.txt", Path(args.headers).read_text(encoding="utf-8", errors="ignore")) + if args.response: + # Ensure JSON is stable. + raw = Path(args.response).read_text(encoding="utf-8", errors="ignore") + try: + obj = json.loads(raw) + write_json(payload_dir / "response.json", obj) + except Exception: + write_text(payload_dir / "response.json", raw) + if args.api_payload: + raw = Path(args.api_payload).read_text(encoding="utf-8", errors="ignore") + try: + obj = json.loads(raw) + write_json(payload_dir / "api_payload.json", obj) + except Exception: + write_text(payload_dir / "api_payload.json", raw) + + # API snapshots (owner-gated). + api_trace = fetch_api_json(trace_id=trace_id, endpoint=f"/api/trace/{trace_id}", email=args.email) + write_json(payload_dir / "api_trace.json", api_trace) + api_events = fetch_api_json(trace_id=trace_id, endpoint=f"/api/trace/events/{trace_id}?limit=10000", email=args.email) + write_json(payload_dir / "api_events.json", api_events) + + # Signed record from append-only log (ground truth). + ttt_rec = extract_ttt_signed_record(trace_id=trace_id) + if not ttt_rec: + raise SystemExit("ttt_signed_record not found for trace_id") + write_json(payload_dir / "ttt_signed_record.json", ttt_rec) + + # Raw trace payload (ground truth). + payload_path = f"/opt/if-emotion/data/trace_payloads/{trace_id}.json" + trace_payload_raw = pct_exec(220, f"cat {shlex_quote(payload_path)}", timeout_s=60) + payload_dir.joinpath("trace_payload.json").write_bytes(trace_payload_raw) + + # Trace events (canonical JSONL form). + events = api_events.get("events") if isinstance(api_events, dict) else None + if not isinstance(events, list): + raise SystemExit("api_events missing events[]") + trace_events_lines = [] + for ev in sorted((e for e in events if isinstance(e, dict)), key=lambda e: int(e.get("idx") or 0)): + trace_events_lines.append(json.dumps({"event": ev}, ensure_ascii=False, sort_keys=True)) + write_text(payload_dir / "trace_events.jsonl", "\n".join(trace_events_lines) + "\n") + + # Story projection. + write_text(payload_dir / "if_story.md", build_story(trace_id, [e for e in events if isinstance(e, dict)])) + + # Trace public key (Ed25519). + pub = pct_exec(220, "cat /opt/if-emotion/data/trace_ed25519.pub", timeout_s=30) + payload_dir.joinpath("trace_ed25519.pub").write_bytes(pub) + + # REQ_SEEN hour ledger+head, derived from the trace events. + req_seen_ev = next((e for e in events if isinstance(e, dict) and e.get("type") == "req_seen"), None) + if not isinstance(req_seen_ev, dict): + raise SystemExit("trace has no req_seen event; cannot build completeness proof") + hour = str((req_seen_ev.get("data") or {}).get("hour_utc") or "").strip() + if not hour: + raise SystemExit("req_seen event missing hour_utc") + ledger_path = f"/opt/if-emotion/data/req_seen/{hour}.jsonl" + head_path = f"/opt/if-emotion/data/req_seen/heads/{hour}.json" + ledger_bytes = pct_exec(220, f"cat {shlex_quote(ledger_path)}", timeout_s=30) + head_bytes = pct_exec(220, f"cat {shlex_quote(head_path)}", timeout_s=30) + payload_dir.joinpath(f"req_seen_{hour}.jsonl").write_bytes(ledger_bytes) + payload_dir.joinpath(f"req_seen_head_{hour}.json").write_bytes(head_bytes) + + # Inclusion proof for this trace_id in the hour ledger. + leaves: list[str] = [] + idx_for_trace: int | None = None + leaf_for_trace: str = "" + for raw_line in ledger_bytes.splitlines(): + if not raw_line.strip(): + continue + try: + entry = json.loads(raw_line.decode("utf-8", errors="ignore")) + except Exception: + continue + lh = str(entry.get("leaf_hash") or "").strip() + if len(lh) != 64: + continue + leaves.append(lh) + if idx_for_trace is None and str(entry.get("trace_id") or "").strip() == trace_id: + idx_for_trace = len(leaves) - 1 + leaf_for_trace = lh + if idx_for_trace is None: + raise SystemExit("trace_id not found in REQ_SEEN hour ledger") + proof = merkle_inclusion_proof(leaves, idx_for_trace) + proof["leaf_hash"] = leaf_for_trace + proof["hour_utc"] = hour + # Sanity: root must match head's merkle_root. + head_obj = json.loads(head_bytes.decode("utf-8", errors="ignore") or "{}") + if str(head_obj.get("merkle_root") or "") and proof["root"] != str(head_obj.get("merkle_root") or ""): + raise SystemExit("Merkle root mismatch (ledger != head)") + write_json(payload_dir / "req_seen_inclusion_proof.json", proof) + + # Manifest + sha list. + manifest, sha_map = build_manifest(payload_dir) + write_json(payload_dir / "manifest.json", manifest) + write_sha256s(payload_dir, sha_map) + + # Register child artifacts in IF.TTT (audit:entry -> import-audit -> signed records). + child_paths = [ + "headers.txt", + "response.json", + "trace_payload.json", + "trace_events.jsonl", + "ttt_signed_record.json", + "api_trace.json", + "api_events.json", + "api_payload.json", + "if_story.md", + "trace_ed25519.pub", + f"req_seen_{hour}.jsonl", + f"req_seen_head_{hour}.json", + "req_seen_inclusion_proof.json", + ] + children_pre = [] + audit_entries = [] + created_utc = utc_now_iso() + for name in child_paths: + p = payload_dir / name + if not p.exists(): + continue + cid_uuid = str(uuid.uuid4()) + citation_id = f"if://citation/{cid_uuid}/v1" + sha = sha256_file(p) + rel_path = f"payload/{name}" + children_pre.append({"citation_id": citation_id, "rel_path": rel_path, "sha256": sha}) + audit_entries.append( + { + "citation_id": citation_id, + "claim": f"emo-social trace artifact {name} for trace_id={trace_id}", + "source_filename": rel_path, + "source_sha256": sha, + "verification_status": "source-sha256", + "ingested_at": created_utc, + } + ) + write_json(payload_dir / "ttt_children_pre.json", {"trace_id": trace_id, "created_utc": created_utc, "children": children_pre}) + write_audit_entries(audit_entries) + _ = ttt_import_audit() + + # Resolve signed IF.TTT records for the children. + child_ids = [c["citation_id"] for c in children_pre] + chain_records = resolve_ttt_records_by_id(child_ids) + write_json(payload_dir / "ttt_children_chain_records.json", chain_records) + # Minimal index for the bundle. + rec_by_id = {r.get("id"): r for r in chain_records if isinstance(r, dict) and r.get("id")} + children = [] + for c in children_pre: + rid = c["citation_id"] + rec = rec_by_id.get(rid) or {} + children.append( + { + "citation_id": rid, + "rel_path": c["rel_path"], + "sha256": c["sha256"], + "content_hash": rec.get("content_hash"), + "pq_status": rec.get("pq_status"), + } + ) + write_json(payload_dir / "ttt_children.json", {"trace_id": trace_id, "children": children}) + + # Build tarball and register it in IF.TTT. + tar_path = tar_payload(out_dir, trace_id) + tar_sha = sha256_file(tar_path) + write_text(out_dir / "payload_tar_sha256.txt", f"{tar_sha} {tar_path}\n") + + tar_uuid = str(uuid.uuid4()) + tar_citation_id = f"if://citation/{tar_uuid}/v1" + tar_audit_entry = { + "citation_id": tar_citation_id, + "claim": f"emo-social trace payload tarball (bundle) for trace_id={trace_id}", + "source_filename": tar_path.name, + "source_sha256": tar_sha, + "verification_status": "source-sha256", + "ingested_at": utc_now_iso(), + "source_path": str(tar_path), + } + write_json(out_dir / "ttt_tarball_audit_entry.json", tar_audit_entry) + write_audit_entries([tar_audit_entry]) + _ = ttt_import_audit() + + tar_chain = resolve_ttt_records_by_id([tar_citation_id]) + if not tar_chain: + raise SystemExit("Failed to resolve tarball chain record from IF.TTT") + tar_rec = tar_chain[0] + write_json(out_dir / "ttt_tarball_chain_record.json", tar_rec) + write_json(out_dir / "ttt_tarball_chain_ref.json", {"citation_id": tar_citation_id, "content_hash": tar_rec.get("content_hash")}) + + print(str(out_dir)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/emo_trace_pack.py.sha256 b/emo_trace_pack.py.sha256 new file mode 100644 index 0000000..e00fca4 --- /dev/null +++ b/emo_trace_pack.py.sha256 @@ -0,0 +1 @@ +635671faa2b056253e8e26469d04d87f4f597c7bca0815eff038fb2b1986b548 /root/tmp/hosted_repo_update/emo_trace_pack.py diff --git a/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..ebcf27c4e1d3d20e53a3bf83c590f4ac51e91e0a GIT binary patch literal 82410 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 OKYP{%o=*%4%nSgecviar literal 0 HcmV?d00001 diff --git a/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz.sha256 b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz.sha256 new file mode 100644 index 0000000..ba2d310 --- /dev/null +++ b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz.sha256 @@ -0,0 +1 @@ +85eb323c8e5f11cf4dd18e612e8cde8dcdb355b3fbd6380bbc8d480a5bf97e87 /root/tmp/hosted_repo_update/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz diff --git a/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_audit_entry.json b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_audit_entry.json new file mode 100644 index 0000000..2dccb8f --- /dev/null +++ b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_audit_entry.json @@ -0,0 +1,9 @@ +{ + "citation_id": "if://citation/2ec551ec-0a08-487d-a41d-4d068aa8ee2f/v1", + "claim": "emo-social trace payload tarball (bundle) for trace_id=96700e8e-6a83-445e-86f7-06905c500146", + "ingested_at": "2025-12-21T10:39:38.222913+00:00", + "source_filename": "emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz", + "source_path": "/root/tmp/emo-trace-package-96700e8e-6a83-445e-86f7-06905c500146/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz", + "source_sha256": "85eb323c8e5f11cf4dd18e612e8cde8dcdb355b3fbd6380bbc8d480a5bf97e87", + "verification_status": "source-sha256" +} diff --git a/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_audit_entry.json.sha256 b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_audit_entry.json.sha256 new file mode 100644 index 0000000..107227e --- /dev/null +++ b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_audit_entry.json.sha256 @@ -0,0 +1 @@ +7174cfba22651a19ad948a0df06d7dc3dc802acd2a6f2fc8364dbf311f178332 /root/tmp/hosted_repo_update/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_audit_entry.json diff --git a/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_record.json b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_record.json new file mode 100644 index 0000000..6053426 --- /dev/null +++ b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_record.json @@ -0,0 +1,21 @@ +{ + "claim": "emo-social trace payload tarball (bundle) for trace_id=96700e8e-6a83-445e-86f7-06905c500146", + "content_hash": "2a19ce17e4f936ed3ed5b140d77410bf99d41ba22489920e1e4cdec5b7b3a76a", + "evidence": { + "audit_key": "audit:entry:2ec551ec-0a08-487d-a41d-4d068aa8ee2f", + "ingested_at": "2025-12-21T10:39:38.222913+00:00", + "source_filename": "emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz", + "source_sha256": "85eb323c8e5f11cf4dd18e612e8cde8dcdb355b3fbd6380bbc8d480a5bf97e87", + "verification_status": "source-sha256" + }, + "id": "if://citation/2ec551ec-0a08-487d-a41d-4d068aa8ee2f/v1", + "pq_algo": "ML-DSA-87", + "pq_status": "hybrid-fips204", + "prev_hash": "6f17d24ae67615ca089685b5b3292c0182d22cf319c77a6efe732acf144d2d34", + "session_id": null, + "signature": "9aae6314dad9b1ab31a5d5f3593859d6ca7d919a11baa7f59bdc9b80903e74d0da1399707589daf868d5c2541464df1f392d71a3f1fc4f9f43398963768eeb08", + "signature_ed25519": "9aae6314dad9b1ab31a5d5f3593859d6ca7d919a11baa7f59bdc9b80903e74d0da1399707589daf868d5c2541464df1f392d71a3f1fc4f9f43398963768eeb08", + "signature_pq": "eacc72c68d07b8a723516ac243e2f46ea17965a1f6e09601eed1e278f2ee849c22e34c8d5e1674d3d5fbb512b0a8e66c46da4dc871be72577afa8fa75bb496c46f472ed41981744466e4da93fa05caa4fe28ae2fdf94eecec0e86510bc86728f6c426dcf8402dcccc453a81c65f00cb1ceea4c1d73fd4680508554e8b11858de621fb873f391196788895abce9575fcc5171c46d72efc12c51f24980745b8590e3c2b60eafb03ff93db2f313295e3b3badaf658169c1fc3d474cd974b0086011710e7c2bb35dec1ea0c07af16eef9e781186505aafd17a0d87b62f21e6c2c5afcb6e7e20b723c529e4d41ddf7f84db5583f73d2d2b8b2260d379d9c535b278812d5ba2f2d2d03ea32d7333226ec9b4c46f73a63d6553a2a927d44e75fc74dfa70284f5e489129b80f5fa946b07738f1b0b836cbfa371124aa2b7dde6db9a4504bd9fb8018f2140e00151ece1d262182b1128773e6e7ee95e57fe037cdce7ecbc51b1d2af3fa77e9262d4dcd307e653310a8163a15ff6e1de0e16274bf36e81b39a522404b3770efb9b962fea71cfa182daee1f0d68c8725d3755c05b759c30737113b79ba0c9a3271ea904222e31b93f4d0957a16dcffcd293816c7473923b159432a9f602297e2759e0d87e7ba41294625ba8e3cacb6071945cbbfede5d2e7fff583d0ae22266b20aeb1c960ad2ace554365df4a33d264b8f702085c80a474f45fe96b4ffe09e62f3c49a79ba51d7265a3544022f75344da42b93ac916b165c38a57865a6310573517f267a35ffe778d1f3ccbc1cefd711516c98c236f5045485c54982f353b8228c572892801b09989e5cc0d6ef6120a818b70243edbf3913518d204117709cac3da3513ef030ba11609ff33732911623a6ae0e38952955c51c3fafc976d70fbf7a993eb6e347a4a51b88edc90c6e0e54a4a78543738a68ff49c21067540ffb23bda13ed567a52bd7e364aa7b37ce520a432f085d53e9f41fce3c0605869b1de293ed0e3c3fb2521f9aa4a6f2f9292e9f21ac552038adf62deb31659aad0b849f151a5e70426c90d430068d9e5c72e04a5b93b203e31d77eacb8d2f2b70ea6e984a9f41f7c2f67ccf86df51d0ba89ae813ce84d6cfe6a6513c611bbb50e006690573a67f5b6e5f36142997413c5d929f8dbcde524649369587e9ca43756b8c8b855eac1d7602e091f4dacfa7cba4dc781c14c4ab7042721ce6e4a86e2b0485ce1ff31a785f118e16be6d99dbca36de888abe372c30e602a0fad2447c9a54b6acf322983a9ff090a02dae514ec03b50538eeefe904a64e0902ed0426b6dfdecb5893864a8035296bfe5bc8beae9c2278c34de8f7cdd9659fb0e677253a69e3ba023965c8e38a8d71be2d230af6f0acfae629bab3a73380abc062a25f896298b80014bdcd2ec62d65be13ff709ab154d8fb652d553703a6808f2d0023de08b29f6cf1bdb900862bb4e5c2d131cae3d9c6feb2f559fbe98892688597136d2d7a986bd14ee1a3ac2d782fe3ac677437595ce0c21e7a364be30ed5b102961cd9f6a5164cf6d9a2f81a39e33eff42ad8da442099d77fd542ac0849f1699759782dadbb9c4d5e8e4a2073414d40fcf51c12352e57d428ce0f0a32e6ee142f6f2851e057f018de117a50c5dc2a6d33e448da44f5ec663fa8cb553773bbd4dcd1ee74e285f9bfd475404613c51905fcc0f21f60c672c00d83b9dd6ec4beaa4ff5513e0411cfb804ad5ede564f0364ac79ace09a157b18e2ea1733071f3a9ac081d352697dd6fefe5e05a9cfbb4fbf7281393c41dcd714043396fc4377df30484dd1b796ae317eab646c98795ee82f2c4196f307479015b1317fb632198ebe39370eda8bfc92ca84c6f4a7a8b6af1bcaf6bf5ba4d7a9279047d43c9f1d82ac1e882e2297f8aa874f01a50a93313c01f9d73a2602c70263c952d6bd35ed1bef340adb36699d8eff1e1ad347956c0b1434fe944bc1bb904288fd1773ce05e060dc6ccb109d983f8258e19f45b56841ea1321a2640d3e051d78d8c7eb9566aca8409822b7e561d80cf0c511553c7a7e4102bf098dd1c649d9a5edb1fbeb7409a498c1bda0c153e2cca0ce7bd942b7cb71e6af28b5823defe9e83a0fbe168b9f365219d34bc652007943ed508314984062715ab8c2661a0d703699406d4fa6a91b6a7d3b2b38daab18e6127dfc371ade341b60f4a4544e10b051373f565779814a5d27c7ac86b47ecca7e5462a01192bcd846f9dab83b91fdc116f8a6289d7dfe3a2abfad35b3b83943b2e5d3740e7dff73556d0e3fc55f821f9064eb18b125b86a260f672226cdc155ac81debd2dc96c4bce7ec723ad8e786ad8990cd8b92afc3e83b759f9ba3d900d572ae7cdb6fe6b7b2d125c5904d698797d0c56b9cf65682af620542093c5699de5ae8b3f04a65412cf1230b3481cc34638a60348b2773b71d75adb474e5f5d7099baf30c10b7a726442c76efb923b7e0f0b5ba958a4345cc99a903d627bf731031698c9f087c391b397977f15d8c0dedbf634a6af9683450c05c7395fbf6f42aa8b7ba0dac02c3cb719361f8fd14f0bdf5f8d8c90c8e045a7a6e6c7868eb5766844f00a226465f397128c6015db4ba036c697f220489e0dcb3a55d5e67ba4fd7e846c30f51de61ca35b3908d2525f541e24f5337010d9dfca3ffbf10704def6e1c973365e423050f9e41306c6afc35fd86752e68e88361160f6e62b04a373ac77562eec136959f76a1ec8a7a92003167c098b4cb59d36c49676e8818062c535af60e05843b1295905b30af4edcc00ac7a64f39f68886f06ccc978b645a12074fa660c36c8694e552f7173adef1c5cfc4c78f064e4a96d407c9a5c4fa5bc1f5bfdf27c17f8399024a9e6d10812c11339742ed1464a1d0d45accdc10bb6faf88bf54be82167d54fdedff92dec4a53b63c9c298e72658534ec3406e01cc2e5cf7a3f251b5bd18dcea0a7c08ae0b166b586276e5a30e911e65e156f548bbe55f32942cee59e1154922563568b56a8e008927fe44385149992d4121585f202b6663ed661018479b2e1f750b9c5e874aeb277f1d78c9bc84f2f0b9acffa5f2388c9613a72f74022b4006eb3f8468891716efbd67906a915bf6156a4be2e3ec44ce2820c7632e4ebb975bf185654a32afb62a0a2323fd8f05e7f9cd8e77f9bb52b459a8e2649e6a6fce8bb042c8d53c72f3ee34571c4cd2efdfadc2dd98864f2a76253e6a2a8d47806f37ab849e16d493ef8626f18c10e7bd41f434b261bad733985066cab55721a5a60b277bbed43f819e37052d698affbe82373b92f14af08f331048b22d6d7394113d80bbb61cbb190a817efa746b666f1848a557529163b96c1777e9dc60a8213600c28e1da64062652e3b9708d19b24816b702da7d4d0790f8f149ae1d66a8a6adcb22096ad29ff1f75c57f75ddb0044b066ae41adfbace000052db4d5ffa1dc4c8d1aaa5d8d88979974692e0bbaf9c8566325a3e691ca0c89ac144a24c3e550030e2c78556603b68b4f1aacf790aa6dd2462042ec45e424ea7b34952c29d6a6d034a87277c0890e5f99df16deb04b212da554975e79ccce8a93686c7326e9bb526148ccca5609c5a9845dd90e8111c412af29744586848b73523e0fd568f8059900a0538896f07c9e530be97072c0865f8501e465bc14dd87a0327b585edea2451b781dde731649bb8cdfa0c419aecaea36b9c81ad46e9b0582bd1eda8da53507d858b4e737aa0978cc87b19e2480c48d64946264eebe52371d378cb4fec03fa7c32674bdae4c21f0a3865b94121af62cafa508b1ff4b3d3e9c59654c43c7a04c0573a2d13f9dcc1721d61c03880c7f2b411cceb7e96c4eb47f73ccc2037791a47f38f8e76b3adefa983e0d39ed7ae34ea88b18365859d529485479b564f730c41618d89b7a69cdfd2dc317e8c29c73e4f24f24d0c39420e7d2238d545012e2cc782f6a910125b169a6ac141593e7b2a137cd80633636aa99d9211be222230e05a776383640e89125fbeb9ac5ea02753f6f2807781b27a2cb1829ab2d8d1f76ffee469a22e93a51e8a37433216199e6824129de2316fd703e4b9ee1db9f3c00f12113f62870d06b79dee99ba827479ddb835dbe91815307f846cf9febf804a812bda8267d21354ec6e58f8f64ad3bd1a8315588bdd366084ef4eae7d73d8d81a1a2de9b502819bbe89138d6870faf76ccf1a8acd964ea952ffdd162396804ec83ea294a9972f7bb1f90e13e878bec4bad3b8ea88a89824e75f826d9bbed7a66d8c06f8861a1b867420a4b4fc0f0e2aeea1aa683c3f0950f63cb6e71e59daae81d45c3f83eee010651bcc73af53166de3e91eccf7fcb8147dca45deefa54610a6e48fef5640ea6da58986927927e56fa721bda2c54f0aaa0afb83515fa44933d7e4a0ea199eaf2aca48bd02f6393c3edc900a73983428d80da61b853e50f2365954302e8a980abbffbcf954649883a7f95298dc2904d7605b104321a56ddfd56e8ac3b2562d2f5ef8337c3587357a1840f82f953ef313acef1376a7586efa9a1b48c01c15e9e46db68feb4d14540b7be3be97e1c7707f849927fd6a77b7b0ae81995015399644bdb57c6a3d45b980a00e89565a386d17b75d3d5bbd6a013f94899df454da3930de7eec518e1d4c5bd6f482ef2bb4cda97bffaf56fe63685bb440791b4e730ece8749ebe417c85ae8fd4215a435de6ef1882e40d8591b1081a391bb659d16903450d32a4961dfab7236cb17494b7cba40852282e0d07c9e3b45f1755162cdd5589c4e1ae6f284157234a5f4388d0b41628d645338306f2791f7356cfa421793df6db096a394380b2ee8af35ea877e601833ec48e416f3cd6ce6b42dadd00b0ce9a38dcb13f992efa55a80e9a82a2607bea27e7ca7f13393a750034cbf8f1414376cfb61b5baaec98b8e44e329802016fe790705e6135461e92434f3ccfc1c0113607f6df59796080569c6af1dca996440c4b7a943f021dc7bd4f674f2cbff39b1dce1208c11227bb7f475782a1577a02e7c9d231605a37c69798dbde6199411bc478e6ad8ebedf8526a7c937e0ecdc0025bd0e72f5d0cb1c3638efa38512e08750f70c6e7d6e5f4d4ecdd9a15afc93016351d2a11ecdb918495a54b05c0f91b3dcc69f09b0d518b019a006f21190f30d4a4e241256ca68fac15a0d68066036c4f88749ed5fbcc02842e48f7bcbe0213583d66df3e2cfe68fa17e69579953a03371bf7963d83385a4a677f81f99084c1c58abb7c85410281bc38e8a1a7e8c55612c841b5f1156d59a9cace8a761fb83b4f81b011efc1141b19866def4634707b267e637b7a49d8dde11ee0f5462d5895542da0bccf91c3e08e959065198ce706f4eee111ef76b35d1ec9dd45f64c47a1ac0d3eb1f3d16709e2a3d18773a76cc62d0d1829fc8420f925c76fa27c1dc562e1e2431fc613ad2774335c880d6534a532476faf8436f93d66dd0f90722dd7aad31c72d4aaca0e4ce006c9d49de9f5813a441d675cf12ebdcb5054f9ac3b04428529ff8939c7a9fba500beda2776e2a2cffa30cf880b56f39a546e240e4354688bb1c56cbaf5d2daceabc61ac383adde772a323c9f8ddf43bba0329b9fc6f3a33055d5f642ae987e75c47020cbd4db07c6fdcc0cc7c5b9892b9c902d6428f7f6e7498d5a0f22157533d7b5b63bd80c73f94e1740b8fb6ea7d6ed52c2fc0609ed3a38760f8ec55b5b89d395e7694c3e4c22863000e09e411252a567423c8e3a10ad74cf15f8845424986a08878236ce564aced466e715e96e5da4f12555f693eea8b4334d8bf2dbaed679e61d53f681ba1a2b033d26499d0f2f520266a275140a190ca16f351e6aa8fb6b558fea0453d8d57301fea2cd8331896d044c196a006ed2bdd8bcd355c384c18e1a7e42ace72cdc807c5ad5493f3e87946a348a725dd3255b2bacf428d33aab4fb4db84db534e3ead062612ce67b8f2930358e4ff184c1b569651cd9bac791c4d3f96110653fa81b72927002ada53b20b206ba08eefa2ac27b72753ad3de595ae555f383f3462d835f27e3dcd601176f740b45d701a4830fd0caf5b0162ce05888650103d7e9936cf81eb29c1a3e2fa0c6b2a9707eb35d4ed463136eebce40d0d3fb388e168dd014c27f00bb4c3bc6588e1d9f1b9bc03e91d855616549e6b9a77877fec498abaeb083e3c06ab1f0de31b02b68119bf6a6712c183067ed397d1de9a128c8cd5688397a209114707eecc5bd53c0e52f69cee22e7b2f474556b15a7589f9513f91153a9758eef13f50271688aa3cf23f684c2977dac4410d64a3f221f49e1be6fc09cac70033cdc4a0001aaea9abadb8bdae8c6e0466eb943669366ac68a2b1712c05605cb21831c6a02875aa6474641d3ae085f6f2edc0379b34eabf39b780a01fec97c21da956e79040fcac0708116091c0dbec09183b5f8283ced4d7e456607374b8ceec1325283141435167b1b5e1f730b30617809aa3a8e1eb0c12192abd1c709de80000000000000000000000000000000000000008121925272f3438", + "signer": "4f7a0233329a15700e4b177f6ca147fd1679904cd4bb1886f146fd7532d14a8f", + "timestamp": "2025-12-21T10:39:38.222913+00:00" +} diff --git a/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_record.json.sha256 b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_record.json.sha256 new file mode 100644 index 0000000..981fff0 --- /dev/null +++ b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_record.json.sha256 @@ -0,0 +1 @@ +232722db9fe133aea3923565695324807cd7a74e81a6db2db360a18e9aa4181f /root/tmp/hosted_repo_update/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_record.json diff --git a/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_ref.json b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_ref.json new file mode 100644 index 0000000..8e00f3d --- /dev/null +++ b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_ref.json @@ -0,0 +1,4 @@ +{ + "citation_id": "if://citation/2ec551ec-0a08-487d-a41d-4d068aa8ee2f/v1", + "content_hash": "2a19ce17e4f936ed3ed5b140d77410bf99d41ba22489920e1e4cdec5b7b3a76a" +} diff --git a/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_ref.json.sha256 b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_ref.json.sha256 new file mode 100644 index 0000000..ef63300 --- /dev/null +++ b/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_ref.json.sha256 @@ -0,0 +1 @@ +86efb752980e12b64a2c36c82d84bf3116cb3a48ef621e288691fa29a6902c63 /root/tmp/hosted_repo_update/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.ttt_chain_ref.json