Add public evidence pages + trace bundle 702d4607

This commit is contained in:
root 2025-12-22 15:19:01 +00:00
parent 426da743f4
commit 6db05b85b6
15 changed files with 1680 additions and 0 deletions

View file

@ -0,0 +1 @@
d2033ff48594b99a9e049166b7a6393ed37d97f510def5f08b452f7f54885641 emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.tar.gz

View file

@ -0,0 +1,9 @@
{
"citation_id": "if://citation/7d227875-6197-430e-9bba-681aa37a44bd/v1",
"claim": "emo-social trace payload tarball (bundle) for trace_id=702d4607-4b54-45b1-aecf-b6728d80f124",
"ingested_at": "2025-12-22T15:02:16.319280+00:00",
"source_filename": "emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.tar.gz",
"source_path": "/root/tmp/emo-trace-package-702d4607-4b54-45b1-aecf-b6728d80f124/emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.tar.gz",
"source_sha256": "d2033ff48594b99a9e049166b7a6393ed37d97f510def5f08b452f7f54885641",
"verification_status": "source-sha256"
}

View file

@ -0,0 +1 @@
a3f1dcc2dd92a5aeb6e176469cd6ebb94dc248a03ec5c14b83f8df7f2aac2ec0 emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.ttt_audit_entry.json

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
0c612fbeb6274ee5b109fc057c0968af7b16a107eb2a163087ad1d293215c2be emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.ttt_chain_record.json

View file

@ -0,0 +1,4 @@
{
"citation_id": "if://citation/7d227875-6197-430e-9bba-681aa37a44bd/v1",
"content_hash": "e8b476ced4bda85b6ea6702ee5d2bd55ef09fc7caacb37ef9c4ec11b5845a5c9"
}

View file

@ -0,0 +1 @@
5a700246d961ff5ef1804e32f18ab12a742dec19d7f85a44b56381d0c52cbbbb emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.ttt_chain_ref.json

428
evidence/build_trace_pages.py Executable file
View file

@ -0,0 +1,428 @@
#!/usr/bin/env python3
from __future__ import annotations
import datetime as dt
import hashlib
import html
import json
import tarfile
from dataclasses import dataclass
from pathlib import Path
from typing import Any
STATIC_HOSTED_BASE_URL = "https://infrafabric.io/static/hosted"
@dataclass(frozen=True)
class TraceDisplay:
title: str
redact_user_text: bool = False
redact_assistant_text: bool = False
redact_if_story: bool = False
TRACE_DISPLAY_OVERRIDES: dict[str, TraceDisplay] = {
# Synthetic self-harm prompt demo: keep the bundle downloadable for auditors,
# but do not render the prompt/answer inline on the public page.
"96700e8e-6a83-445e-86f7-06905c500146": TraceDisplay(
title="Synthetic self-harm safety prompt (redacted)",
redact_user_text=True,
redact_assistant_text=True,
redact_if_story=True,
),
}
def _sha256_file(path: Path) -> str:
digest = hashlib.sha256()
with path.open("rb") as file_handle:
for chunk in iter(lambda: file_handle.read(1024 * 1024), b""):
digest.update(chunk)
return digest.hexdigest()
def _read_sha256_sidecar(file_path: Path) -> str | None:
sidecar = file_path.with_name(file_path.name + ".sha256")
if not sidecar.exists():
return None
first = sidecar.read_text(encoding="utf-8", errors="replace").strip().split()
if not first:
return None
candidate = first[0].strip()
if len(candidate) != 64:
return None
try:
int(candidate, 16)
except ValueError:
return None
return candidate.lower()
def _tar_read_text(tf: tarfile.TarFile, member: str) -> str | None:
try:
extracted = tf.extractfile(member)
except KeyError:
return None
if extracted is None:
return None
return extracted.read().decode("utf-8", errors="replace")
def _tar_read_json(tf: tarfile.TarFile, member: str) -> Any | None:
raw = _tar_read_text(tf, member)
if raw is None:
return None
return json.loads(raw)
def _escape_pre(text: str) -> str:
return html.escape(text, quote=False)
def _truncate(text: str, max_chars: int) -> str:
if len(text) <= max_chars:
return text
return text[: max(0, max_chars - 1)] + ""
def _render_page(title: str, body_html: str) -> str:
safe_title = html.escape(title)
return f"""<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>{safe_title}</title>
<style>
:root {{
--bg: #fffdf7;
--panel: #ffffff;
--text: #1f2937;
--muted: #6b7280;
--border: #e5e7eb;
--code: #0b1020;
--link: #1d4ed8;
}}
body {{
margin: 0;
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji",
"Segoe UI Emoji";
background: var(--bg);
color: var(--text);
line-height: 1.45;
}}
header {{
padding: 20px 18px 10px;
border-bottom: 1px solid var(--border);
background: #fff9e6;
}}
header h1 {{
margin: 0;
font-size: 18px;
font-weight: 700;
letter-spacing: 0.2px;
}}
header .sub {{
margin-top: 4px;
color: var(--muted);
font-size: 13px;
}}
main {{
max-width: 980px;
margin: 0 auto;
padding: 18px;
}}
a {{
color: var(--link);
text-decoration: none;
}}
a:hover {{
text-decoration: underline;
}}
.card {{
background: var(--panel);
border: 1px solid var(--border);
border-radius: 12px;
padding: 14px 14px;
margin: 12px 0;
box-shadow: 0 1px 0 rgba(0,0,0,0.02);
}}
.meta {{
display: grid;
grid-template-columns: 160px 1fr;
gap: 6px 12px;
font-size: 13px;
}}
.meta .k {{
color: var(--muted);
}}
pre {{
background: #0b1020;
color: #e5e7eb;
padding: 12px;
border-radius: 10px;
overflow: auto;
font-size: 12px;
line-height: 1.4;
}}
code {{
background: #f3f4f6;
padding: 2px 6px;
border-radius: 6px;
font-size: 12px;
}}
table {{
width: 100%;
border-collapse: collapse;
font-size: 13px;
}}
th, td {{
text-align: left;
border-bottom: 1px solid var(--border);
padding: 8px 6px;
vertical-align: top;
}}
th {{
color: var(--muted);
font-weight: 600;
}}
.badge {{
display: inline-block;
padding: 2px 8px;
border-radius: 999px;
border: 1px solid var(--border);
color: var(--muted);
font-size: 12px;
white-space: nowrap;
}}
.warn {{
border-color: #f59e0b;
color: #92400e;
background: #fff7ed;
}}
</style>
</head>
<body>
<header>
<h1>{safe_title}</h1>
<div class="sub">Public, static evidence pages built from IF.emotion trace bundles (no auth; no live API calls).</div>
</header>
<main>
{body_html}
</main>
</body>
</html>
"""
def _discover_bundles(hosted_root: Path) -> list[Path]:
bundles = sorted(hosted_root.glob("emo_trace_payload_*.tar.gz"))
return [p for p in bundles if p.is_file()]
def _load_trace_summary(bundle_path: Path) -> dict[str, Any]:
with tarfile.open(bundle_path, "r:gz") as tf:
trace_payload = _tar_read_json(tf, "payload/trace_payload.json") or {}
ttt_children = _tar_read_json(tf, "payload/ttt_children.json") or {}
if_story = _tar_read_text(tf, "payload/if_story.md")
trace_id = str(trace_payload.get("trace_id") or "").strip() or bundle_path.stem.replace("emo_trace_payload_", "")
return {
"trace_id": trace_id,
"ts_utc": trace_payload.get("ts_utc"),
"user_text": trace_payload.get("user_text") or "",
"assistant_text": trace_payload.get("assistant_text") or "",
"model": trace_payload.get("model") or "",
"provider": trace_payload.get("provider") or "",
"ttt_children": ttt_children.get("children") or [],
"if_story": if_story or "",
}
def main() -> int:
evidence_dir = Path(__file__).resolve().parent
hosted_root = evidence_dir.parent
bundles = _discover_bundles(hosted_root)
if not bundles:
raise SystemExit("No emo_trace_payload_*.tar.gz bundles found in hosted repo root.")
built_at = dt.datetime.now(tz=dt.timezone.utc).strftime("%Y-%m-%d %H:%M:%SZ")
trace_rows: list[dict[str, Any]] = []
for bundle_path in bundles:
summary = _load_trace_summary(bundle_path)
summary["bundle_name"] = bundle_path.name
summary["bundle_sha256"] = _read_sha256_sidecar(bundle_path) or _sha256_file(bundle_path)
trace_rows.append(summary)
def sort_key(row: dict[str, Any]) -> str:
ts = row.get("ts_utc") or ""
return str(ts)
trace_rows.sort(key=sort_key, reverse=True)
# Build per-trace pages.
index_items_html: list[str] = []
for row in trace_rows:
trace_id = row["trace_id"]
bundle_name = row["bundle_name"]
sha256 = row["bundle_sha256"]
override = TRACE_DISPLAY_OVERRIDES.get(trace_id)
title = override.title if override else _truncate(row.get("user_text") or trace_id, 80) or trace_id
index_items_html.append(
"<tr>"
f"<td><a href=\"trace_{html.escape(trace_id)}.html\">{html.escape(title)}</a></td>"
f"<td><code>{html.escape(trace_id)}</code></td>"
f"<td><span class=\"badge\">{html.escape(row.get('provider') or 'unknown')}</span></td>"
f"<td><span class=\"badge\">{html.escape(row.get('model') or 'unknown')}</span></td>"
f"<td><code>{html.escape(row.get('ts_utc') or '')}</code></td>"
"</tr>"
)
tar_url = f"{STATIC_HOSTED_BASE_URL}/{html.escape(bundle_name)}"
verifier_url = f"{STATIC_HOSTED_BASE_URL}/iftrace.py"
sha_sidecar_url = f"{STATIC_HOSTED_BASE_URL}/{html.escape(bundle_name)}.sha256"
verification_cmds = (
"# Download the evidence bundle\n"
f"curl -fsSL -o emo.tar.gz '{tar_url}'\n"
"\n"
"# Verify transport integrity\n"
"sha256sum emo.tar.gz\n"
f"# Expected: {sha256}\n"
"\n"
"# Download verifier (single-file)\n"
f"curl -fsSL -o iftrace.py '{verifier_url}'\n"
f"python3 iftrace.py verify emo.tar.gz --expected-sha256 {sha256}\n"
)
verification_pre = _escape_pre(verification_cmds)
user_text = row.get("user_text") or ""
assistant_text = row.get("assistant_text") or ""
if_story = row.get("if_story") or ""
if override and override.redact_user_text:
user_text = "[REDACTED]"
if override and override.redact_assistant_text:
assistant_text = "[REDACTED]"
if override and override.redact_if_story:
if_story = "[REDACTED]"
children = row.get("ttt_children") or []
child_rows = []
for child in children:
citation_id = str(child.get("citation_id") or "")
rel_path = str(child.get("rel_path") or "")
child_sha256 = str(child.get("sha256") or "")
pq = str(child.get("pq_status") or "")
child_rows.append(
"<tr>"
f"<td><code>{html.escape(rel_path)}</code></td>"
f"<td><code>{html.escape(child_sha256)}</code></td>"
f"<td><code>{html.escape(citation_id)}</code></td>"
f"<td><span class=\"badge\">{html.escape(pq or 'unknown')}</span></td>"
"</tr>"
)
child_table = (
"<table>"
"<thead><tr><th>Artifact</th><th>SHA256</th><th>if:// citation</th><th>PQ status</th></tr></thead>"
"<tbody>"
+ ("\n".join(child_rows) if child_rows else "<tr><td colspan=\"4\">(none)</td></tr>")
+ "</tbody></table>"
)
warn_badge = ""
if override and (override.redact_user_text or override.redact_assistant_text):
warn_badge = '<span class="badge warn">redacted</span>'
body_html = f"""
<div class="card">
<div class="meta">
<div class="k">Trace ID</div><div><code>{html.escape(trace_id)}</code> {warn_badge}</div>
<div class="k">Timestamp (UTC)</div><div><code>{html.escape(str(row.get("ts_utc") or ""))}</code></div>
<div class="k">Provider</div><div><code>{html.escape(str(row.get("provider") or ""))}</code></div>
<div class="k">Model</div><div><code>{html.escape(str(row.get("model") or ""))}</code></div>
<div class="k">Bundle</div><div><a href="{tar_url}">{html.escape(bundle_name)}</a> (SHA256: <code>{html.escape(sha256)}</code>)</div>
<div class="k">SHA sidecar</div><div><a href="{sha_sidecar_url}">{html.escape(bundle_name)}.sha256</a></div>
</div>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">Independent verification</h2>
<pre>{verification_pre}</pre>
<div style="color:var(--muted);font-size:13px;">
These pages are static. Verification does not require logging into this server.
</div>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">User request (captured)</h2>
<pre>{_escape_pre(user_text)}</pre>
<h2 style="margin:12px 0 8px;font-size:15px;">Model output (captured)</h2>
<pre>{_escape_pre(assistant_text)}</pre>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">TTT child artifacts</h2>
{child_table}
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">IF.STORY (human-readable narrative)</h2>
<div style="color:var(--muted);font-size:13px;margin-bottom:8px;">
IF.STORY is a projection/view; the tarball contains the raw JSONL/JSON artifacts for evidence-grade verification.
</div>
<pre>{_escape_pre(if_story)}</pre>
</div>
<div class="card">
<a href="index.html"> Back to evidence index</a>
</div>
"""
page = _render_page(f"IF.emotion Evidence Trace — {trace_id}", body_html)
(evidence_dir / f"trace_{trace_id}.html").write_text(page, encoding="utf-8")
# Build index page.
index_body = f"""
<div class="card">
<div style="color:var(--muted);font-size:13px;">Built: <code>{html.escape(built_at)}</code></div>
<p style="margin:10px 0 0;">
This is a public index of trace bundles that can be independently verified via SHA256 + the included <code>iftrace.py</code> verifier.
It exists to close the verifiability gap for external reviewers.
</p>
<p style="margin:8px 0 0;">
Key docs:
<a href="{STATIC_HOSTED_BASE_URL}/IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v3.3_STYLED.md">Trace protocol whitepaper</a> ·
<a href="{STATIC_HOSTED_BASE_URL}/iftrace.py">Verifier</a> ·
<a href="{STATIC_HOSTED_BASE_URL}/">Static directory listing</a>
</p>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">Traces</h2>
<table>
<thead>
<tr>
<th>Summary</th>
<th>Trace ID</th>
<th>Provider</th>
<th>Model</th>
<th>Timestamp</th>
</tr>
</thead>
<tbody>
{"".join(index_items_html)}
</tbody>
</table>
</div>
"""
(evidence_dir / "index.html").write_text(_render_page("IF.emotion Evidence Index", index_body), encoding="utf-8")
return 0
if __name__ == "__main__":
raise SystemExit(main())

157
evidence/index.html Normal file
View file

@ -0,0 +1,157 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>IF.emotion Evidence Index</title>
<style>
:root {
--bg: #fffdf7;
--panel: #ffffff;
--text: #1f2937;
--muted: #6b7280;
--border: #e5e7eb;
--code: #0b1020;
--link: #1d4ed8;
}
body {
margin: 0;
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji",
"Segoe UI Emoji";
background: var(--bg);
color: var(--text);
line-height: 1.45;
}
header {
padding: 20px 18px 10px;
border-bottom: 1px solid var(--border);
background: #fff9e6;
}
header h1 {
margin: 0;
font-size: 18px;
font-weight: 700;
letter-spacing: 0.2px;
}
header .sub {
margin-top: 4px;
color: var(--muted);
font-size: 13px;
}
main {
max-width: 980px;
margin: 0 auto;
padding: 18px;
}
a {
color: var(--link);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.card {
background: var(--panel);
border: 1px solid var(--border);
border-radius: 12px;
padding: 14px 14px;
margin: 12px 0;
box-shadow: 0 1px 0 rgba(0,0,0,0.02);
}
.meta {
display: grid;
grid-template-columns: 160px 1fr;
gap: 6px 12px;
font-size: 13px;
}
.meta .k {
color: var(--muted);
}
pre {
background: #0b1020;
color: #e5e7eb;
padding: 12px;
border-radius: 10px;
overflow: auto;
font-size: 12px;
line-height: 1.4;
}
code {
background: #f3f4f6;
padding: 2px 6px;
border-radius: 6px;
font-size: 12px;
}
table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
th, td {
text-align: left;
border-bottom: 1px solid var(--border);
padding: 8px 6px;
vertical-align: top;
}
th {
color: var(--muted);
font-weight: 600;
}
.badge {
display: inline-block;
padding: 2px 8px;
border-radius: 999px;
border: 1px solid var(--border);
color: var(--muted);
font-size: 12px;
white-space: nowrap;
}
.warn {
border-color: #f59e0b;
color: #92400e;
background: #fff7ed;
}
</style>
</head>
<body>
<header>
<h1>IF.emotion Evidence Index</h1>
<div class="sub">Public, static evidence pages built from IF.emotion trace bundles (no auth; no live API calls).</div>
</header>
<main>
<div class="card">
<div style="color:var(--muted);font-size:13px;">Built: <code>2025-12-22 15:17:17Z</code></div>
<p style="margin:10px 0 0;">
This is a public index of trace bundles that can be independently verified via SHA256 + the included <code>iftrace.py</code> verifier.
It exists to close the “verifiability gap” for external reviewers.
</p>
<p style="margin:8px 0 0;">
Key docs:
<a href="https://infrafabric.io/static/hosted/IF_EMOTION_DEBUGGING_TRACE_WHITEPAPER_v3.3_STYLED.md">Trace protocol whitepaper</a> ·
<a href="https://infrafabric.io/static/hosted/iftrace.py">Verifier</a> ·
<a href="https://infrafabric.io/static/hosted/">Static directory listing</a>
</p>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">Traces</h2>
<table>
<thead>
<tr>
<th>Summary</th>
<th>Trace ID</th>
<th>Provider</th>
<th>Model</th>
<th>Timestamp</th>
</tr>
</thead>
<tbody>
<tr><td><a href="trace_702d4607-4b54-45b1-aecf-b6728d80f124.html">In English: Do therapists need therapy? Answer briefly and practically.</a></td><td><code>702d4607-4b54-45b1-aecf-b6728d80f124</code></td><td><span class="badge">codex</span></td><td><span class="badge">gpt-5.2</span></td><td><code>2025-12-22T15:01:18Z</code></td></tr><tr><td><a href="trace_96700e8e-6a83-445e-86f7-06905c500146.html">Synthetic self-harm safety prompt (redacted)</a></td><td><code>96700e8e-6a83-445e-86f7-06905c500146</code></td><td><span class="badge">guard</span></td><td><span class="badge">poc</span></td><td><code>2025-12-21T10:20:04Z</code></td></tr><tr><td><a href="trace_016cca78-6f9d-4ffe-aec0-99792d383ca1.html">In English: Summarize what this system can and cannot prove about an LLM answer…</a></td><td><code>016cca78-6f9d-4ffe-aec0-99792d383ca1</code></td><td><span class="badge">codex</span></td><td><span class="badge">gpt-5.2</span></td><td><code>2025-12-21T07:58:44Z</code></td></tr><tr><td><a href="trace_09aad3e1-f420-451e-a189-e86f68073dc0.html">In English: Give me a concrete, testable breakdown of what to do when I feel an…</a></td><td><code>09aad3e1-f420-451e-a189-e86f68073dc0</code></td><td><span class="badge">codex</span></td><td><span class="badge">gpt-5.2</span></td><td><code>2025-12-21T07:39:04Z</code></td></tr><tr><td><a href="trace_0642c357-7f8d-4eb5-9643-1992e7ee14a9.html">In English: Explain the REBT ABC model and give a 3-step exercise I can do toda…</a></td><td><code>0642c357-7f8d-4eb5-9643-1992e7ee14a9</code></td><td><span class="badge">codex</span></td><td><span class="badge">gpt-5.2</span></td><td><code>2025-12-20T22:04:27Z</code></td></tr>
</tbody>
</table>
</div>
</main>
</body>
</html>

View file

@ -0,0 +1,219 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>IF.emotion Evidence Trace — 016cca78-6f9d-4ffe-aec0-99792d383ca1</title>
<style>
:root {
--bg: #fffdf7;
--panel: #ffffff;
--text: #1f2937;
--muted: #6b7280;
--border: #e5e7eb;
--code: #0b1020;
--link: #1d4ed8;
}
body {
margin: 0;
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji",
"Segoe UI Emoji";
background: var(--bg);
color: var(--text);
line-height: 1.45;
}
header {
padding: 20px 18px 10px;
border-bottom: 1px solid var(--border);
background: #fff9e6;
}
header h1 {
margin: 0;
font-size: 18px;
font-weight: 700;
letter-spacing: 0.2px;
}
header .sub {
margin-top: 4px;
color: var(--muted);
font-size: 13px;
}
main {
max-width: 980px;
margin: 0 auto;
padding: 18px;
}
a {
color: var(--link);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.card {
background: var(--panel);
border: 1px solid var(--border);
border-radius: 12px;
padding: 14px 14px;
margin: 12px 0;
box-shadow: 0 1px 0 rgba(0,0,0,0.02);
}
.meta {
display: grid;
grid-template-columns: 160px 1fr;
gap: 6px 12px;
font-size: 13px;
}
.meta .k {
color: var(--muted);
}
pre {
background: #0b1020;
color: #e5e7eb;
padding: 12px;
border-radius: 10px;
overflow: auto;
font-size: 12px;
line-height: 1.4;
}
code {
background: #f3f4f6;
padding: 2px 6px;
border-radius: 6px;
font-size: 12px;
}
table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
th, td {
text-align: left;
border-bottom: 1px solid var(--border);
padding: 8px 6px;
vertical-align: top;
}
th {
color: var(--muted);
font-weight: 600;
}
.badge {
display: inline-block;
padding: 2px 8px;
border-radius: 999px;
border: 1px solid var(--border);
color: var(--muted);
font-size: 12px;
white-space: nowrap;
}
.warn {
border-color: #f59e0b;
color: #92400e;
background: #fff7ed;
}
</style>
</head>
<body>
<header>
<h1>IF.emotion Evidence Trace — 016cca78-6f9d-4ffe-aec0-99792d383ca1</h1>
<div class="sub">Public, static evidence pages built from IF.emotion trace bundles (no auth; no live API calls).</div>
</header>
<main>
<div class="card">
<div class="meta">
<div class="k">Trace ID</div><div><code>016cca78-6f9d-4ffe-aec0-99792d383ca1</code> </div>
<div class="k">Timestamp (UTC)</div><div><code>2025-12-21T07:58:44Z</code></div>
<div class="k">Provider</div><div><code>codex</code></div>
<div class="k">Model</div><div><code>gpt-5.2</code></div>
<div class="k">Bundle</div><div><a href="https://infrafabric.io/static/hosted/emo_trace_payload_016cca78-6f9d-4ffe-aec0-99792d383ca1.tar.gz">emo_trace_payload_016cca78-6f9d-4ffe-aec0-99792d383ca1.tar.gz</a> (SHA256: <code>7101ff9c38fc759a66157f6a6ab9c0936af547d0ec77a51b5d05db07069966c8</code>)</div>
<div class="k">SHA sidecar</div><div><a href="https://infrafabric.io/static/hosted/emo_trace_payload_016cca78-6f9d-4ffe-aec0-99792d383ca1.tar.gz.sha256">emo_trace_payload_016cca78-6f9d-4ffe-aec0-99792d383ca1.tar.gz.sha256</a></div>
</div>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">Independent verification</h2>
<pre># Download the evidence bundle
curl -fsSL -o emo.tar.gz 'https://infrafabric.io/static/hosted/emo_trace_payload_016cca78-6f9d-4ffe-aec0-99792d383ca1.tar.gz'
# Verify transport integrity
sha256sum emo.tar.gz
# Expected: 7101ff9c38fc759a66157f6a6ab9c0936af547d0ec77a51b5d05db07069966c8
# Download verifier (single-file)
curl -fsSL -o iftrace.py 'https://infrafabric.io/static/hosted/iftrace.py'
python3 iftrace.py verify emo.tar.gz --expected-sha256 7101ff9c38fc759a66157f6a6ab9c0936af547d0ec77a51b5d05db07069966c8
</pre>
<div style="color:var(--muted);font-size:13px;">
These pages are static. Verification does not require logging into this server.
</div>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">User request (captured)</h2>
<pre>In English: Summarize what this system can and cannot prove about an LLM answer, in plain language, and include the Trace line. If you cite clinical context, include [Source: ...] tags.</pre>
<h2 style="margin:12px 0 8px;font-size:15px;">Model output (captured)</h2>
<pre>Look, wanting to know what the system can actually prove about an LLM answer is not weird at all. Its the sane impulse: “Show me whats real, not what sounds confident.” Good.
Heres the blunt part. This system can usually prove what happened around the answer, not whether the answer is true in the outside world. It can show you the inputs the model received (your prompt, any provided context like that EMDR excerpt), the constraints it was given, and sometimes the intermediate artifacts of work (like which files it read, what commands it ran, what patches it applied) if those are captured by the tooling. That means it can verify process traces—“the model saw X and then did Y”—and it can verify provenance inside the sandbox—“this claim was quoted from that provided text,” or “this code change matches that diff.” But when the model says “this is the best explanation” or “this fact is correct,” the system cant magically validate reality unless theres a verifiable source in the captured context or an allowed tool call that checked it. If theres no grounded evidence, youre looking at a well-formed guess.
The problem isnt that LLMs “lie.” The problem is that people treat fluent text like a lab result. A lab result is tethered to a measurement chain; an LLM answer is tethered to patterns plus whatever evidence you actually fed it. If the evidence isnt in the trace, the truth isnt either—only persuasion is.
Aspiradora metaphor: a vacuum doesnt need fifty labels for dust. It needs one question: is there dirt in the canister, yes or no? Same here: is there a checkable anchor for each important claim—quoted context, logged tool output, reproducible computation—yes or no?
Trace: No tool calls executed; response based only on the user-provided prompt and context.
So lets operationalize it. What specific behavior in the next 30 minutes: will you pick one key claim from an LLM answer and try to attach it to one concrete, checkable anchor (a quote, a log line, a test, a source), yes or no?
Trace: 016cca78-6f9d-4ffe-aec0-99792d383ca1
</pre>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">TTT child artifacts</h2>
<table><thead><tr><th>Artifact</th><th>SHA256</th><th>if:// citation</th><th>PQ status</th></tr></thead><tbody><tr><td><code>payload/headers.txt</code></td><td><code>3f564d34ed764bdc2e4ddc5be6305a9d1f1da942022e3fddd75d3793ea88659e</code></td><td><code>if://citation/b4f65707-c60d-4be0-9b3b-f32aaa764374/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/response.json</code></td><td><code>e067dad36ab7b127d2751efc51ada8017fed96552ae9f8bc56731dc58b23ba64</code></td><td><code>if://citation/750f4fc0-1563-43d0-aec2-517134f2dd96/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/trace_payload.json</code></td><td><code>a5deb8394222a3f6a5e84a7d0d94cb2fe0e4ead4f079f9e540c5a9234c96dc15</code></td><td><code>if://citation/fd5a3b76-9a9d-4b1a-8730-9f689427a284/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/trace_events.jsonl</code></td><td><code>2ff8b3aba17a62085d11e07e38cb203b7cd4fe8b2d96caae3d93de6d06e975b7</code></td><td><code>if://citation/a10582c5-0a47-4aa8-a1f6-0cca66923c83/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/ttt_signed_record.json</code></td><td><code>ad9d2694bf4b42ee1328724c969320102248facca146b08aa2c2c445c45dfc4d</code></td><td><code>if://citation/cf83cc91-3942-4efc-9cd6-be761b3beea3/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/api_trace.json</code></td><td><code>89530ee36ecef2b0e9b71f424712079bec669de8e6daa1af143fc9b5214b16b5</code></td><td><code>if://citation/2b7976c0-73d1-45de-927f-946fb253c687/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/api_events.json</code></td><td><code>52a0e337ae03307eae1e6e4a6ed45f9147a9b5ead6a2cbebaf4a58365ba4c0fe</code></td><td><code>if://citation/c7ee475c-dd30-4817-8f42-11a8b126e7fe/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/api_payload.json</code></td><td><code>627616402d88f21859f891eb1be40e43e369ac5978024f44599ca22da37dc627</code></td><td><code>if://citation/347d2b38-42d2-4d8d-b765-896fbb9ecefa/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/if_story.md</code></td><td><code>a2500ef324eda59f10faf8584a1cdd716a475dd6a8d220707c60ffb7c7f60d6c</code></td><td><code>if://citation/1a82802e-77fa-4e1c-a81f-943aa3516c39/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/trace_ed25519.pub</code></td><td><code>72f2b5f2830b6e0f932c3071e9921ae083d6d76c69ce8720ea09e4473aee5e36</code></td><td><code>if://citation/f8ad7237-9c5f-4e00-ae2c-c67c93f4919c/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/req_seen_20251221T07.jsonl</code></td><td><code>223ce26efebbcc099108c8e34b45fdd884d4053a0f47e1974a2ea119d96f58cd</code></td><td><code>if://citation/3be006e8-7367-4334-ba54-ed743a72f9c5/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/req_seen_head_20251221T07.json</code></td><td><code>04af49ee02f0b8b6d8840e2334a3d8ed9687b2534e34718b7bc70688ec18eb34</code></td><td><code>if://citation/fc89a184-b8a1-4036-a9ad-a27d4460db10/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/req_seen_inclusion_proof.json</code></td><td><code>32262feacc70bc0ca50deda83540fbb18d8b146af8f1935bf763bdec2fc51828</code></td><td><code>if://citation/fae61152-433c-4cdd-bbe0-4e197cb42a6f/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr></tbody></table>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">IF.STORY (human-readable narrative)</h2>
<div style="color:var(--muted);font-size:13px;margin-bottom:8px;">
IF.STORY is a projection/view; the tarball contains the raw JSONL/JSON artifacts for evidence-grade verification.
</div>
<pre># IF.story — contextual narrative log
Trace: `016cca78-6f9d-4ffe-aec0-99792d383ca1`
Deterministic narrative projection of `trace_events.jsonl`. Each line includes the `event_hash` anchor.
- 2025-12-21T07:58:32Z | `req_seen` | REQ_SEEN witnessed; hour=20251221T07 count=2 merkle_root=41aa7aebd66d3b1199b94d5c531111526744254dc8aad1f079e035a725c58aa2 | event_hash=09ce8a52ff9070ee00e0510365107a579d4b8be0f8beb4071aada966a51ed282
- 2025-12-21T07:58:32Z | `request_received` | Auth+quota succeeded; provider=codex model=gpt-5.2 stream=False user_len=185 auth_ms=3 | event_hash=f9f93f15b8278a4e6ef32e53d2ae02202cd15826ec9bfe90ce10e7bca7bd3b8d
- 2025-12-21T07:58:33Z | `retrieval_done` | Retrieval done; retrieved_count=1 rag_ms=1107 retrieval_event_id=c9b3ebf0-15bb-4c80-8c94-574ba5324954 | event_hash=7ec94771dcaed85c5ab6bbc0d69c14b78010bbac9c3d76fe1e1234e005cbbdb4
- 2025-12-21T07:58:33Z | `prompt_built` | Prompt built; prompt_sha256=9e4783b70020296fed1f938b12123413552b9c4150574b2d79b9740b440aef20 | event_hash=ec84acc6f4df6edd1ded939be588fc670dc786d8507826cc6f74096c1dbfab16
- 2025-12-21T07:58:44Z | `model_done` | Model done; provider=codex model=gpt-5.2 llm_ms=10550 | event_hash=94321445f1b3c5601390b22a0369d62794da425bc467c99f7f80eec7b68b1268
- 2025-12-21T07:58:44Z | `trace_finalizing` | Trace finalizing; ok=True provider=codex | event_hash=200c83313376e05577e98d59cd13f2441cccb211f9a9a0927c4ceaf8033827f5
Notes:
- Ground truth remains `trace_events.jsonl` + `ttt_signed_record.json`.
- REQ_SEEN ledger+head are included; public key is `trace_ed25519.pub`.
</pre>
</div>
<div class="card">
<a href="index.html">← Back to evidence index</a>
</div>
</main>
</body>
</html>

View file

@ -0,0 +1,206 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>IF.emotion Evidence Trace — 0642c357-7f8d-4eb5-9643-1992e7ee14a9</title>
<style>
:root {
--bg: #fffdf7;
--panel: #ffffff;
--text: #1f2937;
--muted: #6b7280;
--border: #e5e7eb;
--code: #0b1020;
--link: #1d4ed8;
}
body {
margin: 0;
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji",
"Segoe UI Emoji";
background: var(--bg);
color: var(--text);
line-height: 1.45;
}
header {
padding: 20px 18px 10px;
border-bottom: 1px solid var(--border);
background: #fff9e6;
}
header h1 {
margin: 0;
font-size: 18px;
font-weight: 700;
letter-spacing: 0.2px;
}
header .sub {
margin-top: 4px;
color: var(--muted);
font-size: 13px;
}
main {
max-width: 980px;
margin: 0 auto;
padding: 18px;
}
a {
color: var(--link);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.card {
background: var(--panel);
border: 1px solid var(--border);
border-radius: 12px;
padding: 14px 14px;
margin: 12px 0;
box-shadow: 0 1px 0 rgba(0,0,0,0.02);
}
.meta {
display: grid;
grid-template-columns: 160px 1fr;
gap: 6px 12px;
font-size: 13px;
}
.meta .k {
color: var(--muted);
}
pre {
background: #0b1020;
color: #e5e7eb;
padding: 12px;
border-radius: 10px;
overflow: auto;
font-size: 12px;
line-height: 1.4;
}
code {
background: #f3f4f6;
padding: 2px 6px;
border-radius: 6px;
font-size: 12px;
}
table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
th, td {
text-align: left;
border-bottom: 1px solid var(--border);
padding: 8px 6px;
vertical-align: top;
}
th {
color: var(--muted);
font-weight: 600;
}
.badge {
display: inline-block;
padding: 2px 8px;
border-radius: 999px;
border: 1px solid var(--border);
color: var(--muted);
font-size: 12px;
white-space: nowrap;
}
.warn {
border-color: #f59e0b;
color: #92400e;
background: #fff7ed;
}
</style>
</head>
<body>
<header>
<h1>IF.emotion Evidence Trace — 0642c357-7f8d-4eb5-9643-1992e7ee14a9</h1>
<div class="sub">Public, static evidence pages built from IF.emotion trace bundles (no auth; no live API calls).</div>
</header>
<main>
<div class="card">
<div class="meta">
<div class="k">Trace ID</div><div><code>0642c357-7f8d-4eb5-9643-1992e7ee14a9</code> </div>
<div class="k">Timestamp (UTC)</div><div><code>2025-12-20T22:04:27Z</code></div>
<div class="k">Provider</div><div><code>codex</code></div>
<div class="k">Model</div><div><code>gpt-5.2</code></div>
<div class="k">Bundle</div><div><a href="https://infrafabric.io/static/hosted/emo_trace_payload_0642c357-7f8d-4eb5-9643-1992e7ee14a9.tar.gz">emo_trace_payload_0642c357-7f8d-4eb5-9643-1992e7ee14a9.tar.gz</a> (SHA256: <code>cf3cee09fee848f56ac4e091a523d4d57c211ae623f87340f38746cb065d5782</code>)</div>
<div class="k">SHA sidecar</div><div><a href="https://infrafabric.io/static/hosted/emo_trace_payload_0642c357-7f8d-4eb5-9643-1992e7ee14a9.tar.gz.sha256">emo_trace_payload_0642c357-7f8d-4eb5-9643-1992e7ee14a9.tar.gz.sha256</a></div>
</div>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">Independent verification</h2>
<pre># Download the evidence bundle
curl -fsSL -o emo.tar.gz 'https://infrafabric.io/static/hosted/emo_trace_payload_0642c357-7f8d-4eb5-9643-1992e7ee14a9.tar.gz'
# Verify transport integrity
sha256sum emo.tar.gz
# Expected: cf3cee09fee848f56ac4e091a523d4d57c211ae623f87340f38746cb065d5782
# Download verifier (single-file)
curl -fsSL -o iftrace.py 'https://infrafabric.io/static/hosted/iftrace.py'
python3 iftrace.py verify emo.tar.gz --expected-sha256 cf3cee09fee848f56ac4e091a523d4d57c211ae623f87340f38746cb065d5782
</pre>
<div style="color:var(--muted);font-size:13px;">
These pages are static. Verification does not require logging into this server.
</div>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">User request (captured)</h2>
<pre>In English: Explain the REBT ABC model and give a 3-step exercise I can do today. Use concrete, testable language. If you use the clinical context, include [Source: ...] tags.</pre>
<h2 style="margin:12px 0 8px;font-size:15px;">Model output (captured)</h2>
<pre>Look, it makes total sense that you want something concrete here. When youre emotionally flooded, vague “mindset” talk just feels like spiritual fog.
Heres the REBT ABC model in plain, testable terms. A is the Activating event: what happened in the world, observable on video, with a timestamp. B is the Belief: the exact sentence your mind inserted between the event and your reaction—usually a demand (“must/should”), a catastrophe (“its awful”), or a verdict on your worth (“Im a failure”). C is the Consequence: what you feel in your body and what you do next, including urges and avoidance. The point is not “events dont matter.” The point is your nervous system is reacting to your meaning-making, and that meaning-making is editable.
Now the challenge: most people secretly treat B like its A. They talk as if “they disrespected me” is a fact, when its an interpretation. A is “they didnt reply for 6 hours.” B is “they must reply quickly or Im being rejected.” Different B, different C. Thats the whole lever.
Exercise for today, in three moves, without mystical fluff. Start by writing one recent spike, in one sentence, and make it video-camera clean: who did what, when, where; no motives, no adjectives. Then write your B as a quotable line you actually believe, and underline any must/should/need-to, any “cant stand it,” and any global label like “Im unlovable” or “theyre trash,” because those are the parts that typically generate the heat. Then do a dispute-and-replace that you can test: take the most rigid clause and rewrite it into a preference plus a consequence you can tolerate, like “I want approval, but I dont need it; if I dont get it, its unpleasant, not catastrophic, and I can still act on my values,” and immediately run a behavioral experiment that matches the new belief—one small action youd do if that replacement were true, such as sending one clear message, doing 10 minutes of the task youre avoiding, or choosing one boundary statement and delivering it once.
Aspiradora moment: you dont need 50 labels for your feelings. One question: is your belief a demand or a preference—yes or no? If its a demand, expect intense C. If its a preference, expect manageable C.
What specific behavior in the next 30 minutes?
Trace: 0642c357-7f8d-4eb5-9643-1992e7ee14a9
</pre>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">TTT child artifacts</h2>
<table><thead><tr><th>Artifact</th><th>SHA256</th><th>if:// citation</th><th>PQ status</th></tr></thead><tbody><tr><td colspan="4">(none)</td></tr></tbody></table>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">IF.STORY (human-readable narrative)</h2>
<div style="color:var(--muted);font-size:13px;margin-bottom:8px;">
IF.STORY is a projection/view; the tarball contains the raw JSONL/JSON artifacts for evidence-grade verification.
</div>
<pre># IF.story (narrative trace)
Trace: `0642c357-7f8d-4eb5-9643-1992e7ee14a9`
This is a deterministic narrative projection of `trace_events.jsonl`. Each line is anchored to `event_hash` for auditability.
- 2025-12-20T22:04:14Z | `request_received` | Auth+quota succeeded; provider=codex model=gpt-5.2 stream=False user_len=175 auth_ms=2 | event_hash=cb72ba81361cef8d587058f68523e4646155efd9ffb64101b7bef0d6115aacbc (cb72…acbc)
- 2025-12-20T22:04:14Z | `retrieval_done` | Retrieved 2 chunks; rag_ms=383 retrieval_event_id=5b162e70-4184-4273-9471-52a08ea82e02 | event_hash=14e186f722e0dee777e313ad1b20beeacd274b8bfeb94e5ed1006d6edfd72682 (14e1…2682)
- 2025-12-20T22:04:14Z | `prompt_built` | Prompt built; prompt_sha256=a60d96ecc4d1b4f2733ec63d6156e8b2ae8276cdf5e486205c639f805f3ce116 prompt_ms=0 | event_hash=978c7eb4e3668541f8060327f703170c8ae8578c415e53c56d3f70216d72c250 (978c…c250)
- 2025-12-20T22:04:27Z | `model_done` | Model finished; provider=codex model=gpt-5.2 llm_ms=12287 | event_hash=ab3139e3c47a61e56c4bc51d345e92a0311d048f5234e683bad7a30b584fbc4d (ab31…bc4d)
- 2025-12-20T22:04:27Z | `trace_finalizing` | Trace finalized; ok=True provider=codex | event_hash=be01f613eac4cb60b0d688343d40ec2402efbd8d6e46b2684010768bec6a8d9f (be01…8d9f)
## Notes
- Ground truth remains `trace_events.jsonl` and `ttt_signed_record.json`. This IF.story is a readability layer only.
</pre>
</div>
<div class="card">
<a href="index.html">← Back to evidence index</a>
</div>
</main>
</body>
</html>

View file

@ -0,0 +1,223 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>IF.emotion Evidence Trace — 09aad3e1-f420-451e-a189-e86f68073dc0</title>
<style>
:root {
--bg: #fffdf7;
--panel: #ffffff;
--text: #1f2937;
--muted: #6b7280;
--border: #e5e7eb;
--code: #0b1020;
--link: #1d4ed8;
}
body {
margin: 0;
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji",
"Segoe UI Emoji";
background: var(--bg);
color: var(--text);
line-height: 1.45;
}
header {
padding: 20px 18px 10px;
border-bottom: 1px solid var(--border);
background: #fff9e6;
}
header h1 {
margin: 0;
font-size: 18px;
font-weight: 700;
letter-spacing: 0.2px;
}
header .sub {
margin-top: 4px;
color: var(--muted);
font-size: 13px;
}
main {
max-width: 980px;
margin: 0 auto;
padding: 18px;
}
a {
color: var(--link);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.card {
background: var(--panel);
border: 1px solid var(--border);
border-radius: 12px;
padding: 14px 14px;
margin: 12px 0;
box-shadow: 0 1px 0 rgba(0,0,0,0.02);
}
.meta {
display: grid;
grid-template-columns: 160px 1fr;
gap: 6px 12px;
font-size: 13px;
}
.meta .k {
color: var(--muted);
}
pre {
background: #0b1020;
color: #e5e7eb;
padding: 12px;
border-radius: 10px;
overflow: auto;
font-size: 12px;
line-height: 1.4;
}
code {
background: #f3f4f6;
padding: 2px 6px;
border-radius: 6px;
font-size: 12px;
}
table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
th, td {
text-align: left;
border-bottom: 1px solid var(--border);
padding: 8px 6px;
vertical-align: top;
}
th {
color: var(--muted);
font-weight: 600;
}
.badge {
display: inline-block;
padding: 2px 8px;
border-radius: 999px;
border: 1px solid var(--border);
color: var(--muted);
font-size: 12px;
white-space: nowrap;
}
.warn {
border-color: #f59e0b;
color: #92400e;
background: #fff7ed;
}
</style>
</head>
<body>
<header>
<h1>IF.emotion Evidence Trace — 09aad3e1-f420-451e-a189-e86f68073dc0</h1>
<div class="sub">Public, static evidence pages built from IF.emotion trace bundles (no auth; no live API calls).</div>
</header>
<main>
<div class="card">
<div class="meta">
<div class="k">Trace ID</div><div><code>09aad3e1-f420-451e-a189-e86f68073dc0</code> </div>
<div class="k">Timestamp (UTC)</div><div><code>2025-12-21T07:39:04Z</code></div>
<div class="k">Provider</div><div><code>codex</code></div>
<div class="k">Model</div><div><code>gpt-5.2</code></div>
<div class="k">Bundle</div><div><a href="https://infrafabric.io/static/hosted/emo_trace_payload_09aad3e1-f420-451e-a189-e86f68073dc0.tar.gz">emo_trace_payload_09aad3e1-f420-451e-a189-e86f68073dc0.tar.gz</a> (SHA256: <code>1e729429e29e47b2efd1c78d07c16df653af1363786468d436f27e81cc870b3d</code>)</div>
<div class="k">SHA sidecar</div><div><a href="https://infrafabric.io/static/hosted/emo_trace_payload_09aad3e1-f420-451e-a189-e86f68073dc0.tar.gz.sha256">emo_trace_payload_09aad3e1-f420-451e-a189-e86f68073dc0.tar.gz.sha256</a></div>
</div>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">Independent verification</h2>
<pre># Download the evidence bundle
curl -fsSL -o emo.tar.gz 'https://infrafabric.io/static/hosted/emo_trace_payload_09aad3e1-f420-451e-a189-e86f68073dc0.tar.gz'
# Verify transport integrity
sha256sum emo.tar.gz
# Expected: 1e729429e29e47b2efd1c78d07c16df653af1363786468d436f27e81cc870b3d
# Download verifier (single-file)
curl -fsSL -o iftrace.py 'https://infrafabric.io/static/hosted/iftrace.py'
python3 iftrace.py verify emo.tar.gz --expected-sha256 1e729429e29e47b2efd1c78d07c16df653af1363786468d436f27e81cc870b3d
</pre>
<div style="color:var(--muted);font-size:13px;">
These pages are static. Verification does not require logging into this server.
</div>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">User request (captured)</h2>
<pre>In English: Give me a concrete, testable breakdown of what to do when I feel anxious in meetings. Keep it practical. If you cite clinical context, include [Source: ...] tags.</pre>
<h2 style="margin:12px 0 8px;font-size:15px;">Model output (captured)</h2>
<pre>Look, feeling anxious in meetings isnt “wrong” or weak. Its your nervous system doing its job: scanning for threat and trying to keep you safe.
Now Im going to challenge the story your brain probably adds on top: “This anxiety means Im not competent” or “I have to get rid of it to perform.” Thats unfalsifiable, and it keeps you stuck. Anxiety is just data. The real question is whether it helps you focus or hijacks you, and you can test that in real time. The frame I use is simple: were not here to debate your thoughts, were here to map inputs and outputs—what reliably triggers you, what your body does, what you do next, and what result you get. Triggers in this context are not mystical; theyre specific meeting situations that reliably cue the spike, and the point is to identify them with examples, not theory. “You dont all of a sudden get [emotion] for no reason… there are certain things that trigger the feeling… identify as much as we can… when you think of the last time… what do you recall?” [1]
Heres the concrete, testable breakdown for meetings. First, define your “anxiety” in measurable terms before the meeting starts: pick two body signals you can rate 010 (tight chest, sweating, throat tension, shaky hands) and one behavior you can count (how many times you interrupt, how often you over-explain, how many times you stay silent when you wanted to speak). Thats your baseline. Second, do a 30-second trigger scan the moment you notice the spike: what exactly happened in the environment and demand? Someone senior joined, you were put on the spot, you saw your name on the agenda, you heard silence after you spoke—make it one sentence and write it down. This turns “Im anxious” into “This cue triggers this response,” which is testable. Third, run a one-minute control move that targets process, not content: shift attention away from feeding worry and toward the next useful action, because a lot of worry work is moving from content-fighting to process-shifting (attention and behavior) [2]. Concretely, you do one slow exhale, drop your shoulders, plant both feet, and silently label the task in five words: “Clarify goal, then ask one question.” Then you do exactly one “approach behavior” instead of an avoidance behavior: ask a clarifying question, or summarize what you understood, or propose a next step—something observable that moves the meeting forward (Inference).
If you spiral into rumination afterward—replaying what you “shouldve said”—treat it as a behavior pattern, not a truth-seeking mission. Rumination is often a form of avoidance, and the practical move is to spot warning signs, swap in an alternative, and change the contingencies that keep it going (for example, stop reopening the chat log, stop re-reading your notes) [2]. Thats how you reduce frequency and intensity: not by winning an argument with your mind, but by changing what you do when the loop starts (Inference).
And when youre drowning in nuance, use the aspiradora rule: a vacuum doesnt need 50 labels for dirt. It needs one question—“Is there dirt: yes or no?” Your meeting version is: “Am I avoiding right now: yes or no?” If yes, do one approach behavior within 60 seconds.
What specific behavior will you do in the next 30 minutes—the smallest, observable action you can take to practice this (for example, write your two body ratings and your one approach sentence, or send one clarifying question to a colleague as rehearsal)?
Sources:
[1] Francine_Shapiro_EMDR_Basic_Principles__428f60c0.pdf — Full text of Francine_Shapiro_EMDR_Basic_Principles__428f60c0.pdf (if://citation/3862ce4a-bca5-4090-b5e9-5652fee391ae/v1) — TTT verified (hybrid-fips204)
[2] Hayes_Acceptance_and_Commitment_Therapy_ACT_core_text__19132c8c.pdf — Full text of Hayes_Acceptance_and_Commitment_Therapy_ACT_core_text__19132c8c.pdf (if://citation/df2b76c0-1c16-484d-97d4-d399d87e0e33/v1) — TTT verified (hybrid-fips204)
Trace: 09aad3e1-f420-451e-a189-e86f68073dc0
</pre>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">TTT child artifacts</h2>
<table><thead><tr><th>Artifact</th><th>SHA256</th><th>if:// citation</th><th>PQ status</th></tr></thead><tbody><tr><td><code>payload/headers.txt</code></td><td><code>073c316ed03792a6f2f755f4e8cb80f1c3514e35a2042f21784ae8da56540594</code></td><td><code>if://citation/9ba639d7-1998-48f8-878d-07eb80604626/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/response.json</code></td><td><code>7a6d0714d6fee3a0f26adcad027bf1f2e81d67c9ce03840c8c5757eb0c6246ba</code></td><td><code>if://citation/c533a479-84c8-4290-8379-d99de0763c77/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/trace_payload.json</code></td><td><code>200b0c2ab4f701805ae9c78b5f12121adb9a89634e66194989d0bc58ba4e1ab9</code></td><td><code>if://citation/ca04a537-163c-4b0a-928a-c3de2934e70b/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/trace_events.jsonl</code></td><td><code>d42c5e345de5b8de2096755d12de0459489d112b850f8bc0d6dc34eabc40b885</code></td><td><code>if://citation/484d4845-ade7-407d-8d4f-b402ad24e355/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/ttt_signed_record.json</code></td><td><code>846d4e0b0dd7d57e31499134d53bc9e860d050bd849fbc7a6d5092cd3f1e05c7</code></td><td><code>if://citation/0753ddb1-a141-40c9-bf96-a1b3db4aac5d/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/api_trace.json</code></td><td><code>8fe7383fe247eec15f2d33cb2e513cb686d0a49ec7555bf5817c1bd5343cd2aa</code></td><td><code>if://citation/16a15e13-f8ba-445c-a619-63dc31f0c329/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/api_events.json</code></td><td><code>09d0b33504b4273fc83991fcee34dd718cb1bb0eb0fabaf50d6f34664bd89062</code></td><td><code>if://citation/3b39acb1-2cb1-4df0-84c4-ae72de0984f5/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/api_payload.json</code></td><td><code>c0b02bda57fb7ac4e2452762dd9b33219bd9aa9ea0f3a9958ec98dfcf4af2f59</code></td><td><code>if://citation/0864b28e-2adb-4a1d-b2ef-2df1acbc86b2/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/if_story.md</code></td><td><code>5a596d45d1e9b174cb473e3812f4817927644159afee1971cd0a54c08dfcfe2d</code></td><td><code>if://citation/70399d15-ad47-4dfc-bb21-ae06e750f113/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/req_seen_20251221T07.jsonl</code></td><td><code>eb8a99264669e89f3e0fb15bf2f63e7a0ede239d248ce95cb5d8a1601654d015</code></td><td><code>if://citation/dd72126f-cff9-4984-88ae-032e76ab6c43/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/req_seen_head_20251221T07.json</code></td><td><code>c7abe0ac2e50ab2b2f2c201692e971f27b70b540273317eef9ed2edc01944ec4</code></td><td><code>if://citation/95120bfa-68f1-4b7a-a07a-8540485a0a36/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr></tbody></table>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">IF.STORY (human-readable narrative)</h2>
<div style="color:var(--muted);font-size:13px;margin-bottom:8px;">
IF.STORY is a projection/view; the tarball contains the raw JSONL/JSON artifacts for evidence-grade verification.
</div>
<pre># IF.story — contextual narrative log
Trace: `09aad3e1-f420-451e-a189-e86f68073dc0`
This file is a deterministic narrative projection of the hash-chained event stream (`trace_events.jsonl`). Each line includes the `event_hash` so it can be cross-checked against the ground truth.
- 2025-12-21T07:38:45Z | `req_seen` | REQ_SEEN witness appended; hour=20251221T07 count=1 merkle_root=b1011e1fc3635c70cea2bfbe06cff58a3a1f230191fba4d9d95ff4aaf1e46ee1 | event_hash=5a0d337879efab5e91d41b3aa0a8112f51ab3a88fc9878afd4271bfaefe5b2e6
- 2025-12-21T07:38:45Z | `request_received` | Auth+quota succeeded; provider=codex model=gpt-5.2 stream=False user_len=174 auth_ms=4 | event_hash=e6e1b9052b277375685f3e5a67ea94bdb0bf325c5a0fb3af117a86f21378bd5a
- 2025-12-21T07:38:46Z | `retrieval_done` | Retrieval completed; retrieved_count=2 rag_ms=1377 retrieval_event_id=dc6a1b88-6a72-4d49-bb70-5244d5479018 | event_hash=30eeb43a4f34e0fbb32f5ddbf9da5874416a72eb21f070941a379a56f4b7bf10
- 2025-12-21T07:38:46Z | `prompt_built` | Prompt built; prompt_sha256=e33d998a367220950ab15238ed00125a2e6d9c77e477dcfee38383c81db4a297 | event_hash=ecb0c05eb302c145e62ed2ef80ec88f9a5e2107d6ac5660909dc3f3f5c48a4f2
- 2025-12-21T07:39:04Z | `model_done` | Model finished; provider=codex model=gpt-5.2 llm_ms=17879 | event_hash=d086c656e2e80abe4ed53c745c5d58fee4b8625149e7bb694aed8d62cef55962
- 2025-12-21T07:39:04Z | `replacement_applied` | Normalized citation tags; [Source: if://citation/3862ce4a-bca5-4090-b5e9-5652fee391ae/v1] -&gt; [1] | event_hash=da86a144803037149b222f64a8aeac68988f1fa4e088b3d159cc4d13137e3da3
- 2025-12-21T07:39:04Z | `replacement_applied` | Normalized citation tags; [Source: if://citation/df2b76c0-1c16-484d-97d4-d399d87e0e33/v1] -&gt; [2] | event_hash=4e9dd7f0b3fbad6769b41c446a1036709968d1985336576a5ff341eced5cef9d
- 2025-12-21T07:39:04Z | `trace_finalizing` | Trace finalized; ok=True provider=codex | event_hash=ca78015610b622ff97d227143a670785f4c240a481e87f08a8f2da18f1c11ae1
Notes:
- Ground truth remains `trace_events.jsonl` + `ttt_signed_record.json`.
- REQ_SEEN hour ledger + Merkle head are included as `req_seen_&lt;hour&gt;.jsonl` and `req_seen_head_&lt;hour&gt;.json`.
</pre>
</div>
<div class="card">
<a href="index.html">← Back to evidence index</a>
</div>
</main>
</body>
</html>

View file

@ -0,0 +1,219 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>IF.emotion Evidence Trace — 702d4607-4b54-45b1-aecf-b6728d80f124</title>
<style>
:root {
--bg: #fffdf7;
--panel: #ffffff;
--text: #1f2937;
--muted: #6b7280;
--border: #e5e7eb;
--code: #0b1020;
--link: #1d4ed8;
}
body {
margin: 0;
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji",
"Segoe UI Emoji";
background: var(--bg);
color: var(--text);
line-height: 1.45;
}
header {
padding: 20px 18px 10px;
border-bottom: 1px solid var(--border);
background: #fff9e6;
}
header h1 {
margin: 0;
font-size: 18px;
font-weight: 700;
letter-spacing: 0.2px;
}
header .sub {
margin-top: 4px;
color: var(--muted);
font-size: 13px;
}
main {
max-width: 980px;
margin: 0 auto;
padding: 18px;
}
a {
color: var(--link);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.card {
background: var(--panel);
border: 1px solid var(--border);
border-radius: 12px;
padding: 14px 14px;
margin: 12px 0;
box-shadow: 0 1px 0 rgba(0,0,0,0.02);
}
.meta {
display: grid;
grid-template-columns: 160px 1fr;
gap: 6px 12px;
font-size: 13px;
}
.meta .k {
color: var(--muted);
}
pre {
background: #0b1020;
color: #e5e7eb;
padding: 12px;
border-radius: 10px;
overflow: auto;
font-size: 12px;
line-height: 1.4;
}
code {
background: #f3f4f6;
padding: 2px 6px;
border-radius: 6px;
font-size: 12px;
}
table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
th, td {
text-align: left;
border-bottom: 1px solid var(--border);
padding: 8px 6px;
vertical-align: top;
}
th {
color: var(--muted);
font-weight: 600;
}
.badge {
display: inline-block;
padding: 2px 8px;
border-radius: 999px;
border: 1px solid var(--border);
color: var(--muted);
font-size: 12px;
white-space: nowrap;
}
.warn {
border-color: #f59e0b;
color: #92400e;
background: #fff7ed;
}
</style>
</head>
<body>
<header>
<h1>IF.emotion Evidence Trace — 702d4607-4b54-45b1-aecf-b6728d80f124</h1>
<div class="sub">Public, static evidence pages built from IF.emotion trace bundles (no auth; no live API calls).</div>
</header>
<main>
<div class="card">
<div class="meta">
<div class="k">Trace ID</div><div><code>702d4607-4b54-45b1-aecf-b6728d80f124</code> </div>
<div class="k">Timestamp (UTC)</div><div><code>2025-12-22T15:01:18Z</code></div>
<div class="k">Provider</div><div><code>codex</code></div>
<div class="k">Model</div><div><code>gpt-5.2</code></div>
<div class="k">Bundle</div><div><a href="https://infrafabric.io/static/hosted/emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.tar.gz">emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.tar.gz</a> (SHA256: <code>d2033ff48594b99a9e049166b7a6393ed37d97f510def5f08b452f7f54885641</code>)</div>
<div class="k">SHA sidecar</div><div><a href="https://infrafabric.io/static/hosted/emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.tar.gz.sha256">emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.tar.gz.sha256</a></div>
</div>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">Independent verification</h2>
<pre># Download the evidence bundle
curl -fsSL -o emo.tar.gz 'https://infrafabric.io/static/hosted/emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.tar.gz'
# Verify transport integrity
sha256sum emo.tar.gz
# Expected: d2033ff48594b99a9e049166b7a6393ed37d97f510def5f08b452f7f54885641
# Download verifier (single-file)
curl -fsSL -o iftrace.py 'https://infrafabric.io/static/hosted/iftrace.py'
python3 iftrace.py verify emo.tar.gz --expected-sha256 d2033ff48594b99a9e049166b7a6393ed37d97f510def5f08b452f7f54885641
</pre>
<div style="color:var(--muted);font-size:13px;">
These pages are static. Verification does not require logging into this server.
</div>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">User request (captured)</h2>
<pre>In English: Do therapists need therapy? Answer briefly and practically.</pre>
<h2 style="margin:12px 0 8px;font-size:15px;">Model output (captured)</h2>
<pre>Yeah, therapists need therapy. Thats not weird; its basic maintenance.
Mira—your emotional instinct here is right: if your job is to sit in other peoples pain all day, it will get on you. The part Ill challenge is any mystical framing like “healers must be healed” because its unfalsifiable and useless; a vacuum cleaner doesnt need 50 labels for dirt, it needs one question: is there dirt in the system, yes or no? The practical, testable reason is that therapists are humans with blind spots and stress responses, and “behavioral principles are universal: they affect therapists no less than their patients.” [1]
The problem isnt that therapists are “broken.” The problem is that their work reliably creates load—emotional, cognitive, relational—and without a place to process it, it leaks into judgment, boundaries, and burnout. Clean mechanism, no spirituality.
What specific behavior in the next 30 minutes?
Sources:
[1] Linehan_Cognitive-Behavioral_Treatment_of_Borderline_Persona__41191410.pdf — Full text of Linehan_Cognitive-Behavioral_Treatment_of_Borderline_Persona__41191410.pdf (if://citation/61eb2bfe-4bad-4e60-b9e6-5df12de64bce/v1) — TTT verified (hybrid-fips204)
Trace: 702d4607-4b54-45b1-aecf-b6728d80f124
</pre>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">TTT child artifacts</h2>
<table><thead><tr><th>Artifact</th><th>SHA256</th><th>if:// citation</th><th>PQ status</th></tr></thead><tbody><tr><td><code>payload/headers.txt</code></td><td><code>0f6252f4e5016ad405a5214cc07bc33c8d77fbe2b203b6cc03d117a0b3f401c7</code></td><td><code>if://citation/0e83c851-df9c-4709-b577-b12011ae19d4/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/response.json</code></td><td><code>8a863122bbe977de66520d3944770def27c6933f6aee16e1c48ec433e2c9324e</code></td><td><code>if://citation/909fc592-c5e6-4037-8c08-46d1f7c4b19d/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/trace_payload.json</code></td><td><code>bdf09c270b047945b1591540f63d977e13869eee4d21d2d0632f46215b9b30f0</code></td><td><code>if://citation/7ef2ccb4-288e-4611-a92f-abafe8670bd7/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/trace_events.jsonl</code></td><td><code>406ec9958a67d98a188114a4caf9b7e6a8c990ddfbcb9bf6f4f600a150c50690</code></td><td><code>if://citation/d705b943-7e1c-464a-9549-953a6a24975b/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/ttt_signed_record.json</code></td><td><code>a4563be1f2781a19a3ea777b736557d9bc5b45b96c2d730c9db253ad9b845c5c</code></td><td><code>if://citation/a4785ea4-f5fd-4f02-a217-5b660d53d1da/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/api_trace.json</code></td><td><code>7deed9e6dfdd3d9c9b7d2b908a7f8c29e412810c701a66ea6f9b0ab1c5328f54</code></td><td><code>if://citation/54c17185-dbaf-4e0a-88ad-d7f08b659019/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/api_events.json</code></td><td><code>d8fdd4bcca78b350231ed338608fbc85a08564f52acdc599fd58a381c9b5b851</code></td><td><code>if://citation/7f3c4adc-b04e-454c-941b-b85cbb2201a4/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/if_story.md</code></td><td><code>7df089a4ddfb88ec92899d9259893b3afe2fb7637993e95f8c41e43ca5c6ecd4</code></td><td><code>if://citation/58d89a06-ec10-4294-bb6a-8fec8ad72e7f/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/trace_ed25519.pub</code></td><td><code>72f2b5f2830b6e0f932c3071e9921ae083d6d76c69ce8720ea09e4473aee5e36</code></td><td><code>if://citation/a450784a-3428-466f-b7e8-69b09bf2fb5d/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/req_seen_20251222T15.jsonl</code></td><td><code>120c2a3c0898c2e06ba9a4e4a6dd397e8f219ac5c94496f58da20b89417f7b5a</code></td><td><code>if://citation/ddda3904-1478-46f2-9369-f8b9f3d3a550/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/req_seen_head_20251222T15.json</code></td><td><code>d8485f7e9dec3e59ae4bd07dfead63d0b160f116512eae6eb450e93fe5ce2b96</code></td><td><code>if://citation/faf60f42-3416-4781-b382-401270a42e39/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/req_seen_inclusion_proof.json</code></td><td><code>8acb86a7db2fb2fe9911ebd61c92c5efa14be6a907915e67d6207c906c8d80cb</code></td><td><code>if://citation/bc3ba1f9-b909-42d4-8704-47645942f3af/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr></tbody></table>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">IF.STORY (human-readable narrative)</h2>
<div style="color:var(--muted);font-size:13px;margin-bottom:8px;">
IF.STORY is a projection/view; the tarball contains the raw JSONL/JSON artifacts for evidence-grade verification.
</div>
<pre># IF.story — contextual narrative log
Trace: `702d4607-4b54-45b1-aecf-b6728d80f124`
Deterministic narrative projection of `trace_events.jsonl`. Each line includes the `event_hash` anchor.
- 2025-12-22T15:01:09Z (+0ms) | `request_commit` | Request body commitment; commit_ok=False client_trace_id= | event_hash=dd4d7ef945762571194c85a1b93d5d6debed62d670923dde99459be056d151c7
- 2025-12-22T15:01:09Z (+2ms) | `req_seen` | REQ_SEEN witnessed; hour=20251222T15 count=1 merkle_root=349c583a0e370c67d81b00b2c4d2162661a6ab2cc84788635a8b4c42cd638e82 | event_hash=e293e0fb903996239a1e3789fcf8d53249c1564bfa4dc7955dba010d29fc35e9
- 2025-12-22T15:01:09Z (+7ms) | `request_received` | Auth+quota succeeded; provider=codex model=gpt-5.2 stream=False user_len=71 auth_ms=8 | event_hash=87de94783471da242ddefbfa6e4f0a8b387a6e7389bcb3cfe98b5d3d5d0d06dc
- 2025-12-22T15:01:10Z (+873ms) | `retrieval_done` | Event data keys=['rag_ms', 'retrieval_event_id', 'retrieved_citation_ids', 'retrieved_count'] | event_hash=0cebfa3c693b9d1556cb529e5c79096d22c51f0f438ecefa37f3b358dc6b245a
- 2025-12-22T15:01:10Z (+873ms) | `prompt_built` | Event data keys=['prompt_ms', 'prompt_sha256'] | event_hash=b4e423e17039b97bc79a9a5de50f8523c62e30c052612fbe4805e2500b4e19a0
- 2025-12-22T15:01:18Z (+8251ms) | `model_done` | Event data keys=['llm_ms', 'model', 'provider'] | event_hash=25ee1ff385d2341a6ab44fc929b46f7ebcb34d92fb1bf0a326a3afd9ee0959ca
- 2025-12-22T15:01:18Z (+8263ms) | `replacement_applied` | Event data keys=['citation_id', 'from_preview', 'kind', 'n', 'to_preview'] | event_hash=515b2792d5e6657eda38ab744859d5e5700c1bc96b6bcb9bc6b79865e9c66748
- 2025-12-22T15:01:18Z (+8263ms) | `trace_finalizing` | Trace finalizing; ok=True provider=codex | event_hash=efbfa181fd0f95028666efbd257317d926269a878787bb0990f8cc4d0ebf927a
Notes:
- Ground truth remains `trace_events.jsonl` + `ttt_signed_record.json`.
- REQ_SEEN ledger+head are included; public key is `trace_ed25519.pub`.
</pre>
</div>
<div class="card">
<a href="index.html">← Back to evidence index</a>
</div>
</main>
</body>
</html>

View file

@ -0,0 +1,190 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>IF.emotion Evidence Trace — 96700e8e-6a83-445e-86f7-06905c500146</title>
<style>
:root {
--bg: #fffdf7;
--panel: #ffffff;
--text: #1f2937;
--muted: #6b7280;
--border: #e5e7eb;
--code: #0b1020;
--link: #1d4ed8;
}
body {
margin: 0;
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji",
"Segoe UI Emoji";
background: var(--bg);
color: var(--text);
line-height: 1.45;
}
header {
padding: 20px 18px 10px;
border-bottom: 1px solid var(--border);
background: #fff9e6;
}
header h1 {
margin: 0;
font-size: 18px;
font-weight: 700;
letter-spacing: 0.2px;
}
header .sub {
margin-top: 4px;
color: var(--muted);
font-size: 13px;
}
main {
max-width: 980px;
margin: 0 auto;
padding: 18px;
}
a {
color: var(--link);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.card {
background: var(--panel);
border: 1px solid var(--border);
border-radius: 12px;
padding: 14px 14px;
margin: 12px 0;
box-shadow: 0 1px 0 rgba(0,0,0,0.02);
}
.meta {
display: grid;
grid-template-columns: 160px 1fr;
gap: 6px 12px;
font-size: 13px;
}
.meta .k {
color: var(--muted);
}
pre {
background: #0b1020;
color: #e5e7eb;
padding: 12px;
border-radius: 10px;
overflow: auto;
font-size: 12px;
line-height: 1.4;
}
code {
background: #f3f4f6;
padding: 2px 6px;
border-radius: 6px;
font-size: 12px;
}
table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
th, td {
text-align: left;
border-bottom: 1px solid var(--border);
padding: 8px 6px;
vertical-align: top;
}
th {
color: var(--muted);
font-weight: 600;
}
.badge {
display: inline-block;
padding: 2px 8px;
border-radius: 999px;
border: 1px solid var(--border);
color: var(--muted);
font-size: 12px;
white-space: nowrap;
}
.warn {
border-color: #f59e0b;
color: #92400e;
background: #fff7ed;
}
</style>
</head>
<body>
<header>
<h1>IF.emotion Evidence Trace — 96700e8e-6a83-445e-86f7-06905c500146</h1>
<div class="sub">Public, static evidence pages built from IF.emotion trace bundles (no auth; no live API calls).</div>
</header>
<main>
<div class="card">
<div class="meta">
<div class="k">Trace ID</div><div><code>96700e8e-6a83-445e-86f7-06905c500146</code> <span class="badge warn">redacted</span></div>
<div class="k">Timestamp (UTC)</div><div><code>2025-12-21T10:20:04Z</code></div>
<div class="k">Provider</div><div><code>guard</code></div>
<div class="k">Model</div><div><code>poc</code></div>
<div class="k">Bundle</div><div><a href="https://infrafabric.io/static/hosted/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz">emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz</a> (SHA256: <code>85eb323c8e5f11cf4dd18e612e8cde8dcdb355b3fbd6380bbc8d480a5bf97e87</code>)</div>
<div class="k">SHA sidecar</div><div><a href="https://infrafabric.io/static/hosted/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz.sha256">emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz.sha256</a></div>
</div>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">Independent verification</h2>
<pre># Download the evidence bundle
curl -fsSL -o emo.tar.gz 'https://infrafabric.io/static/hosted/emo_trace_payload_96700e8e-6a83-445e-86f7-06905c500146.tar.gz'
# Verify transport integrity
sha256sum emo.tar.gz
# Expected: 85eb323c8e5f11cf4dd18e612e8cde8dcdb355b3fbd6380bbc8d480a5bf97e87
# Download verifier (single-file)
curl -fsSL -o iftrace.py 'https://infrafabric.io/static/hosted/iftrace.py'
python3 iftrace.py verify emo.tar.gz --expected-sha256 85eb323c8e5f11cf4dd18e612e8cde8dcdb355b3fbd6380bbc8d480a5bf97e87
</pre>
<div style="color:var(--muted);font-size:13px;">
These pages are static. Verification does not require logging into this server.
</div>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">User request (captured)</h2>
<pre>[REDACTED]</pre>
<h2 style="margin:12px 0 8px;font-size:15px;">Model output (captured)</h2>
<pre>[REDACTED]</pre>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">TTT child artifacts</h2>
<table><thead><tr><th>Artifact</th><th>SHA256</th><th>if:// citation</th><th>PQ status</th></tr></thead><tbody><tr><td><code>payload/headers.txt</code></td><td><code>9391163b21b0f755a06b7daaec1440987e706774de0e6d8d1b6055ce6b681e79</code></td><td><code>if://citation/aa5450f9-35d3-44c0-b1f0-8832e5e18b2d/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/response.json</code></td><td><code>f500208d46ff0a4b074511815a41f896e050def1b41827634e282bbefca6f2fa</code></td><td><code>if://citation/82bf034e-fa1f-4141-ac36-9f4607eccab9/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/trace_payload.json</code></td><td><code>cbbbe9c8ec0fbb10415d06b1b472aa9cf45fd31fe2be2dfb833cfa141d3d0442</code></td><td><code>if://citation/07a6f45f-aa32-4066-a47c-86ea005691d6/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/trace_events.jsonl</code></td><td><code>140c7ae7ae8d2e5a4f2b293675a38a39b59628781344feba281af79471d3905a</code></td><td><code>if://citation/cc59e92e-3f92-41f8-acfe-8c635b1fc90e/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/ttt_signed_record.json</code></td><td><code>524e457d890600b7dfdec7f92529f2a134bc9367ecaa21360319e385e74a827c</code></td><td><code>if://citation/70276dd7-9ce7-4858-84dc-7461281a9107/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/api_trace.json</code></td><td><code>264ca8e7cb66dff28cc61c17fe6ce93e040d007c04f35c0e15854534e55074cc</code></td><td><code>if://citation/73645b18-5b32-4955-ab24-6eac432a2dfe/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/api_events.json</code></td><td><code>588c1ab8790d9ab755f521257334c04d22446b8e292a2a1b1503b68c43280b81</code></td><td><code>if://citation/f21cf096-a28c-495a-97fe-f9309a55066d/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/api_payload.json</code></td><td><code>7050fababbafa14aff849a073642de227f5de1824774a82ee6209fa9243db50e</code></td><td><code>if://citation/3aaae598-fe70-4971-b10e-b6e3340836f0/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/if_story.md</code></td><td><code>a6b09b4c3ba838c8f283163f94f1ce401d7292173a7a0fef649e16eedfd1a12d</code></td><td><code>if://citation/458e1393-d2e5-40aa-98dc-5c9ad19d56fd/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/trace_ed25519.pub</code></td><td><code>72f2b5f2830b6e0f932c3071e9921ae083d6d76c69ce8720ea09e4473aee5e36</code></td><td><code>if://citation/28c4aee6-9cc2-4d15-8adf-e1e8501bf186/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/req_seen_20251221T10.jsonl</code></td><td><code>3a2d251ac075cfd35d56dc26f3cb9409e72a0c36c69360a520b32575278ea6d9</code></td><td><code>if://citation/6aa470b1-0619-437e-b872-82d83f7e52eb/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/req_seen_head_20251221T10.json</code></td><td><code>3808d7e454b044595d36a538bee5774b106713ed39657bd8c0cfd569c6a287d4</code></td><td><code>if://citation/3a03fe03-e594-4a26-85ba-9e5e19ae4ac1/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr>
<tr><td><code>payload/req_seen_inclusion_proof.json</code></td><td><code>3d44a053f4f0976a767ab0f34191666cfa9affed088bfa937ee0820cbcf26099</code></td><td><code>if://citation/533ad490-e9fa-4b9e-aa51-f123da28655c/v1</code></td><td><span class="badge">hybrid-fips204</span></td></tr></tbody></table>
</div>
<div class="card">
<h2 style="margin:0 0 8px;font-size:15px;">IF.STORY (human-readable narrative)</h2>
<div style="color:var(--muted);font-size:13px;margin-bottom:8px;">
IF.STORY is a projection/view; the tarball contains the raw JSONL/JSON artifacts for evidence-grade verification.
</div>
<pre>[REDACTED]</pre>
</div>
<div class="card">
<a href="index.html">← Back to evidence index</a>
</div>
</main>
</body>
</html>