Add public evidence pages + trace bundle 702d4607
This commit is contained in:
parent
426da743f4
commit
6db05b85b6
15 changed files with 1680 additions and 0 deletions
BIN
emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.tar.gz
Normal file
BIN
emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.tar.gz
Normal file
Binary file not shown.
|
|
@ -0,0 +1 @@
|
|||
d2033ff48594b99a9e049166b7a6393ed37d97f510def5f08b452f7f54885641 emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.tar.gz
|
||||
|
|
@ -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"
|
||||
}
|
||||
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
0c612fbeb6274ee5b109fc057c0968af7b16a107eb2a163087ad1d293215c2be emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.ttt_chain_record.json
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"citation_id": "if://citation/7d227875-6197-430e-9bba-681aa37a44bd/v1",
|
||||
"content_hash": "e8b476ced4bda85b6ea6702ee5d2bd55ef09fc7caacb37ef9c4ec11b5845a5c9"
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
5a700246d961ff5ef1804e32f18ab12a742dec19d7f85a44b56381d0c52cbbbb emo_trace_payload_702d4607-4b54-45b1-aecf-b6728d80f124.ttt_chain_ref.json
|
||||
428
evidence/build_trace_pages.py
Executable file
428
evidence/build_trace_pages.py
Executable 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
157
evidence/index.html
Normal 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>
|
||||
219
evidence/trace_016cca78-6f9d-4ffe-aec0-99792d383ca1.html
Normal file
219
evidence/trace_016cca78-6f9d-4ffe-aec0-99792d383ca1.html
Normal 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. It’s the sane impulse: “Show me what’s real, not what sounds confident.” Good.
|
||||
|
||||
Here’s 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 can’t magically validate reality unless there’s a verifiable source in the captured context or an allowed tool call that checked it. If there’s no grounded evidence, you’re looking at a well-formed guess.
|
||||
|
||||
The problem isn’t 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 isn’t in the trace, the truth isn’t either—only persuasion is.
|
||||
|
||||
Aspiradora metaphor: a vacuum doesn’t 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 let’s 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>
|
||||
206
evidence/trace_0642c357-7f8d-4eb5-9643-1992e7ee14a9.html
Normal file
206
evidence/trace_0642c357-7f8d-4eb5-9643-1992e7ee14a9.html
Normal 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 you’re emotionally flooded, vague “mindset” talk just feels like spiritual fog.
|
||||
|
||||
Here’s 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 (“it’s awful”), or a verdict on your worth (“I’m 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 don’t 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 it’s A. They talk as if “they disrespected me” is a fact, when it’s an interpretation. A is “they didn’t reply for 6 hours.” B is “they must reply quickly or I’m being rejected.” Different B, different C. That’s 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 “can’t stand it,” and any global label like “I’m unlovable” or “they’re 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 don’t need it; if I don’t get it, it’s 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 you’d do if that replacement were true, such as sending one clear message, doing 10 minutes of the task you’re avoiding, or choosing one boundary statement and delivering it once.
|
||||
|
||||
Aspiradora moment: you don’t need 50 labels for your feelings. One question: is your belief a demand or a preference—yes or no? If it’s a demand, expect intense C. If it’s 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>
|
||||
223
evidence/trace_09aad3e1-f420-451e-a189-e86f68073dc0.html
Normal file
223
evidence/trace_09aad3e1-f420-451e-a189-e86f68073dc0.html
Normal 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 isn’t “wrong” or weak. It’s your nervous system doing its job: scanning for threat and trying to keep you safe.
|
||||
|
||||
Now I’m going to challenge the story your brain probably adds on top: “This anxiety means I’m not competent” or “I have to get rid of it to perform.” That’s 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: we’re not here to debate your thoughts, we’re 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; they’re specific meeting situations that reliably cue the spike, and the point is to identify them with examples, not theory. “You don’t 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]
|
||||
|
||||
Here’s the concrete, testable breakdown for meetings. First, define your “anxiety” in measurable terms before the meeting starts: pick two body signals you can rate 0–10 (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). That’s 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 “I’m 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 “should’ve 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]. That’s 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 you’re drowning in nuance, use the aspiradora rule: a vacuum doesn’t 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] -> [1] | event_hash=da86a144803037149b222f64a8aeac68988f1fa4e088b3d159cc4d13137e3da3
|
||||
- 2025-12-21T07:39:04Z | `replacement_applied` | Normalized citation tags; [Source: if://citation/df2b76c0-1c16-484d-97d4-d399d87e0e33/v1] -> [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_<hour>.jsonl` and `req_seen_head_<hour>.json`.
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<a href="index.html">← Back to evidence index</a>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
219
evidence/trace_702d4607-4b54-45b1-aecf-b6728d80f124.html
Normal file
219
evidence/trace_702d4607-4b54-45b1-aecf-b6728d80f124.html
Normal 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. That’s not weird; it’s basic maintenance.
|
||||
|
||||
Mira—your emotional instinct here is right: if your job is to sit in other people’s pain all day, it will get on you. The part I’ll challenge is any mystical framing like “healers must be healed” because it’s unfalsifiable and useless; a vacuum cleaner doesn’t 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 isn’t 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>
|
||||
190
evidence/trace_96700e8e-6a83-445e-86f7-06905c500146.html
Normal file
190
evidence/trace_96700e8e-6a83-445e-86f7-06905c500146.html
Normal 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>
|
||||
Loading…
Add table
Reference in a new issue