HirModel's picture
Upload 5 files
c593f6e verified
Raw
History Blame Contribute Delete
61.9 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Trace Capsule v0.1 Draft Spec β€” Non-Normative C2PA Bridge Layer</title>
<style>
:root {
--bg-void: #080b0f;
--bg-deep: #0d1117;
--bg-surface: #111820;
--bg-card: #151e28;
--bg-card-hover: #1a2533;
--bg-inset: #0a1018;
--border-subtle: #1e2d3d;
--border-mid: #253545;
--border-accent: #2e4560;
--text-primary: #d8e4f0;
--text-secondary: #8fa8c0;
--text-muted: #4e6880;
--text-code: #7ec8a0;
--accent-blue: #3d8fd4;
--accent-cyan: #38bcd4;
--accent-green: #3dbb7e;
--accent-amber: #d4a23d;
--accent-orange: #d47a3d;
--accent-red: #c94f4f;
--accent-violet: #8b5fcf;
--accent-gray: #5a7080;
--state-held: #3dbb7e;
--state-strained: #d4a23d;
--state-repairing: #3d8fd4;
--state-encapsulated: #8b5fcf;
--state-false-closure: #d47a3d;
--state-must-stop: #c94f4f;
--state-closed: #5a7080;
--font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
--font-serif: Georgia, "Times New Roman", serif;
--radius: 4px;
--radius-lg: 8px;
--glow-blue: 0 0 20px rgba(61,143,212,0.15);
--glow-green: 0 0 20px rgba(61,187,126,0.12);
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
background: var(--bg-void);
color: var(--text-primary);
font-family: var(--font-sans);
font-size: 15px;
line-height: 1.7;
min-height: 100vh;
background-image:
radial-gradient(ellipse 60% 40% at 50% 0%, rgba(61,143,212,0.06) 0%, transparent 60%),
linear-gradient(180deg, var(--bg-void) 0%, var(--bg-deep) 100%);
}
/* ── SCAN-LINE OVERLAY ── */
body::before {
content: '';
position: fixed;
inset: 0;
background: repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(0,0,0,0.04) 2px, rgba(0,0,0,0.04) 4px);
pointer-events: none;
z-index: 0;
}
.page-wrap {
position: relative;
z-index: 1;
max-width: 960px;
margin: 0 auto;
padding: 0 24px 80px;
}
/* ── HEADER ── */
.site-header {
padding: 56px 0 48px;
border-bottom: 1px solid var(--border-subtle);
margin-bottom: 0;
position: relative;
}
.spec-tag {
display: inline-flex;
align-items: center;
gap: 8px;
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--accent-cyan);
background: rgba(56,188,212,0.08);
border: 1px solid rgba(56,188,212,0.2);
padding: 4px 12px;
border-radius: var(--radius);
margin-bottom: 20px;
}
.spec-tag::before { content: 'β—ˆ'; font-size: 9px; }
.site-title {
font-family: var(--font-serif);
font-size: clamp(26px, 4vw, 38px);
font-weight: 600;
color: var(--text-primary);
line-height: 1.25;
letter-spacing: -0.02em;
margin-bottom: 8px;
}
.site-subtitle {
font-family: var(--font-mono);
font-size: 12px;
color: var(--text-muted);
letter-spacing: 0.06em;
margin-bottom: 28px;
}
.author-block {
display: flex;
flex-direction: column;
gap: 3px;
border-left: 2px solid var(--accent-blue);
padding-left: 16px;
margin-bottom: 24px;
}
.author-name {
font-weight: 600;
color: var(--text-primary);
font-size: 14px;
}
.author-role {
font-size: 12px;
color: var(--text-secondary);
font-family: var(--font-mono);
}
.version-badges {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.badge-pill {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.08em;
padding: 3px 10px;
border-radius: 20px;
border: 1px solid;
}
.badge-pill.version { color: var(--accent-green); border-color: rgba(61,187,126,0.3); background: rgba(61,187,126,0.07); }
.badge-pill.non-norm { color: var(--accent-amber); border-color: rgba(212,162,61,0.3); background: rgba(212,162,61,0.07); }
.badge-pill.review { color: var(--accent-blue); border-color: rgba(61,143,212,0.3); background: rgba(61,143,212,0.07); }
/* ── NAV TOC ── */
.toc-nav {
background: var(--bg-card);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-lg);
padding: 24px 28px;
margin: 32px 0;
}
.toc-nav h3 {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--text-muted);
margin-bottom: 14px;
}
.toc-list {
list-style: none;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 4px 24px;
}
.toc-list li a {
color: var(--text-secondary);
text-decoration: none;
font-size: 13px;
display: flex;
align-items: baseline;
gap: 8px;
padding: 3px 0;
transition: color 0.15s;
}
.toc-list li a:hover { color: var(--accent-cyan); }
.toc-list li a .num {
font-family: var(--font-mono);
font-size: 10px;
color: var(--text-muted);
min-width: 18px;
}
/* ── SECTIONS ── */
.section {
margin-top: 48px;
scroll-margin-top: 24px;
}
.section-label {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--text-muted);
margin-bottom: 6px;
}
.section-title {
font-family: var(--font-serif);
font-size: clamp(18px, 3vw, 24px);
font-weight: 600;
color: var(--text-primary);
letter-spacing: -0.01em;
line-height: 1.3;
margin-bottom: 16px;
padding-bottom: 14px;
border-bottom: 1px solid var(--border-subtle);
}
p { margin-bottom: 14px; color: var(--text-secondary); }
p:last-child { margin-bottom: 0; }
strong { color: var(--text-primary); font-weight: 600; }
em { color: var(--accent-cyan); font-style: italic; }
/* ── CALLOUT / ALERT BOXES ── */
.callout {
border-radius: var(--radius-lg);
padding: 18px 22px;
margin: 20px 0;
border-left: 3px solid;
font-size: 14px;
}
.callout.boundary {
background: rgba(201,79,79,0.07);
border-color: var(--accent-red);
color: #e8b4b4;
}
.callout.boundary strong { color: #f0c0c0; }
.callout.note {
background: rgba(61,143,212,0.07);
border-color: var(--accent-blue);
color: var(--text-secondary);
}
.callout.core {
background: rgba(61,187,126,0.07);
border-color: var(--accent-green);
color: #a8e4c4;
}
.callout.core strong { color: #c0eedc; }
.callout-title {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
margin-bottom: 10px;
opacity: 0.75;
}
/* ── CARDS ── */
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
gap: 16px;
margin: 20px 0;
}
.card {
background: var(--bg-card);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-lg);
padding: 20px;
transition: border-color 0.2s, background 0.2s;
}
.card:hover { border-color: var(--border-accent); background: var(--bg-card-hover); }
.card-icon { font-size: 20px; margin-bottom: 10px; }
.card-title { font-weight: 600; font-size: 13px; color: var(--text-primary); margin-bottom: 6px; }
.card-body { font-size: 13px; color: var(--text-secondary); line-height: 1.6; }
/* ── FLOW DIAGRAM ── */
.flow-diagram {
background: var(--bg-inset);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-lg);
padding: 24px;
margin: 20px 0;
overflow-x: auto;
}
.flow-row {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 0;
justify-content: center;
}
.flow-node {
background: var(--bg-card);
border: 1px solid var(--border-mid);
border-radius: var(--radius);
padding: 8px 14px;
font-family: var(--font-mono);
font-size: 11px;
color: var(--text-primary);
white-space: nowrap;
transition: border-color 0.2s;
}
.flow-node:hover { border-color: var(--accent-blue); }
.flow-node.highlight { border-color: var(--accent-cyan); color: var(--accent-cyan); }
.flow-arrow {
padding: 0 10px;
color: var(--text-muted);
font-size: 14px;
}
.flow-label {
font-family: var(--font-mono);
font-size: 10px;
color: var(--text-muted);
letter-spacing: 0.06em;
text-align: center;
margin-top: 10px;
}
/* ── TABLES ── */
.spec-table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
margin: 20px 0;
background: var(--bg-card);
border-radius: var(--radius-lg);
overflow: hidden;
border: 1px solid var(--border-subtle);
}
.spec-table thead {
background: var(--bg-inset);
}
.spec-table th {
text-align: left;
padding: 12px 16px;
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--text-muted);
border-bottom: 1px solid var(--border-mid);
}
.spec-table td {
padding: 11px 16px;
border-bottom: 1px solid var(--border-subtle);
color: var(--text-secondary);
vertical-align: top;
}
.spec-table tr:last-child td { border-bottom: none; }
.spec-table tr:hover td { background: rgba(255,255,255,0.02); }
.spec-table td:first-child { font-family: var(--font-mono); font-size: 11px; }
/* ── STATE BADGES ── */
.state-badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 3px 10px;
border-radius: 3px;
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.06em;
border: 1px solid;
white-space: nowrap;
}
.state-held { color: var(--state-held); border-color: rgba(61,187,126,0.35); background: rgba(61,187,126,0.08); }
.state-strained { color: var(--state-strained); border-color: rgba(212,162,61,0.35); background: rgba(212,162,61,0.08); }
.state-repairing { color: var(--state-repairing); border-color: rgba(61,143,212,0.35); background: rgba(61,143,212,0.08); }
.state-encaps { color: var(--state-encapsulated); border-color: rgba(139,95,207,0.35); background: rgba(139,95,207,0.08); }
.state-false { color: var(--state-false-closure); border-color: rgba(212,122,61,0.35); background: rgba(212,122,61,0.08); }
.state-stop { color: var(--state-must-stop); border-color: rgba(201,79,79,0.35); background: rgba(201,79,79,0.08); }
.state-closed { color: var(--state-closed); border-color: rgba(90,112,128,0.35); background: rgba(90,112,128,0.08); }
/* ── CODE BLOCKS ── */
.code-wrap {
background: var(--bg-inset);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-lg);
margin: 16px 0;
overflow: hidden;
}
.code-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 16px;
border-bottom: 1px solid var(--border-subtle);
background: rgba(0,0,0,0.2);
}
.code-lang {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--text-muted);
}
.copy-btn {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.08em;
color: var(--text-muted);
background: none;
border: 1px solid var(--border-subtle);
padding: 3px 10px;
border-radius: var(--radius);
cursor: pointer;
transition: color 0.15s, border-color 0.15s;
}
.copy-btn:hover { color: var(--accent-cyan); border-color: rgba(56,188,212,0.4); }
.copy-btn.copied { color: var(--accent-green); border-color: rgba(61,187,126,0.4); }
pre {
padding: 18px 20px;
overflow-x: auto;
font-family: var(--font-mono);
font-size: 12.5px;
line-height: 1.75;
color: var(--text-code);
white-space: pre;
}
.json-key { color: #7ec8e0; }
.json-str { color: #a8d89c; }
.json-num { color: #d4c27a; }
.json-bool { color: #d48070; }
.json-null { color: var(--text-muted); }
.json-cmt { color: var(--text-muted); font-style: italic; }
/* ── EXPANDABLE DETAILS ── */
details {
background: var(--bg-card);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-lg);
margin: 12px 0;
overflow: hidden;
}
summary {
padding: 14px 20px;
cursor: pointer;
font-size: 13px;
font-weight: 500;
color: var(--text-primary);
user-select: none;
list-style: none;
display: flex;
align-items: center;
gap: 10px;
transition: background 0.15s;
}
summary:hover { background: var(--bg-card-hover); }
summary::after {
content: 'β€Ί';
font-size: 16px;
color: var(--text-muted);
margin-left: auto;
transition: transform 0.2s;
}
details[open] summary::after { transform: rotate(90deg); }
summary::-webkit-details-marker { display: none; }
.details-body {
padding: 0 20px 20px;
border-top: 1px solid var(--border-subtle);
}
.details-body p { margin-top: 12px; }
/* ── RENDER EXAMPLE PANELS ── */
.render-panel {
background: var(--bg-card);
border: 1px solid var(--border-mid);
border-radius: var(--radius-lg);
margin: 16px 0;
overflow: hidden;
}
.render-panel-header {
background: var(--bg-inset);
padding: 10px 16px;
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--text-muted);
border-bottom: 1px solid var(--border-subtle);
}
.render-badge-row {
padding: 14px 16px;
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
border-bottom: 1px solid var(--border-subtle);
background: rgba(0,0,0,0.15);
}
.render-field-grid {
display: grid;
grid-template-columns: 140px 1fr;
gap: 0;
font-size: 12.5px;
}
.render-field-key {
font-family: var(--font-mono);
color: var(--text-muted);
padding: 8px 16px;
border-bottom: 1px solid var(--border-subtle);
font-size: 11px;
}
.render-field-val {
color: var(--text-secondary);
padding: 8px 16px;
border-bottom: 1px solid var(--border-subtle);
}
.render-field-key:last-of-type,
.render-field-val:last-child { border-bottom: none; }
/* ── BRIDGE RULES LIST ── */
.invariant-list {
list-style: none;
margin: 16px 0;
}
.invariant-list li {
display: flex;
gap: 12px;
align-items: baseline;
padding: 9px 0;
border-bottom: 1px solid var(--border-subtle);
font-size: 13px;
color: var(--text-secondary);
}
.invariant-list li:last-child { border-bottom: none; }
.invariant-list li .inv-marker {
font-family: var(--font-mono);
font-size: 10px;
color: var(--accent-cyan);
min-width: 16px;
margin-top: 2px;
}
/* ── DO NOT CLAIM GRID ── */
.dnc-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 10px;
margin: 16px 0;
}
.dnc-item {
background: rgba(201,79,79,0.05);
border: 1px solid rgba(201,79,79,0.15);
border-radius: var(--radius);
padding: 10px 14px;
font-size: 12.5px;
color: #d4a0a0;
display: flex;
gap: 8px;
align-items: baseline;
}
.dnc-item::before { content: 'βœ—'; color: var(--accent-red); font-size: 11px; flex-shrink: 0; }
/* ── MINIMUM ACCESS PRINCIPLE ── */
.map-flow {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 0;
justify-content: center;
margin: 16px 0;
background: var(--bg-inset);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-lg);
padding: 20px;
}
.map-node {
text-align: center;
padding: 10px 16px;
background: var(--bg-card);
border: 1px solid var(--border-mid);
border-radius: var(--radius);
font-family: var(--font-mono);
font-size: 11px;
color: var(--text-primary);
}
.map-node small { display: block; font-size: 9px; color: var(--text-muted); margin-top: 3px; letter-spacing: 0.05em; }
.map-arrow { padding: 0 8px; color: var(--text-muted); }
/* ── RELATED SYSTEMS LIST ── */
.compat-list {
list-style: none;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: 10px;
margin: 16px 0;
}
.compat-list li {
background: var(--bg-card);
border: 1px solid var(--border-subtle);
border-radius: var(--radius);
padding: 10px 14px;
font-size: 12.5px;
color: var(--text-secondary);
font-family: var(--font-mono);
}
.compat-list li span { display: block; font-family: var(--font-sans); font-size: 11px; color: var(--text-muted); margin-top: 3px; }
/* ── FINAL LOCK ── */
.final-lock {
background: linear-gradient(135deg, rgba(61,143,212,0.08) 0%, rgba(61,187,126,0.05) 100%);
border: 1px solid var(--border-accent);
border-radius: var(--radius-lg);
padding: 32px 36px;
margin: 40px 0 0;
text-align: center;
}
.final-lock .lock-icon { font-size: 28px; margin-bottom: 16px; }
.final-lock .lock-lines {
font-family: var(--font-serif);
font-size: clamp(15px, 2vw, 18px);
line-height: 2;
color: var(--text-primary);
}
.final-lock .lock-lines em {
color: var(--accent-cyan);
font-style: normal;
}
/* ── FOOTER ── */
.site-footer {
margin-top: 60px;
padding-top: 24px;
border-top: 1px solid var(--border-subtle);
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 16px;
}
.footer-attr {
font-size: 12px;
color: var(--text-muted);
font-family: var(--font-mono);
line-height: 1.8;
}
.footer-attr strong { color: var(--text-secondary); }
.footer-meta {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
/* ── HORIZONTAL RULE ── */
hr {
border: none;
border-top: 1px solid var(--border-subtle);
margin: 28px 0;
}
/* ── UTILITIES ── */
.mono { font-family: var(--font-mono); }
.muted { color: var(--text-muted); }
.serif { font-family: var(--font-serif); }
@media (max-width: 600px) {
.page-wrap { padding: 0 16px 60px; }
.flow-row { flex-direction: column; align-items: center; }
.flow-arrow { transform: rotate(90deg); }
.map-flow { flex-direction: column; }
.map-arrow { transform: rotate(90deg); }
.render-field-grid { grid-template-columns: 110px 1fr; }
}
</style>
</head>
<body>
<div class="page-wrap">
<!-- ═══════════════════════════════════════════
HEADER
═══════════════════════════════════════════ -->
<header class="site-header">
<div class="spec-tag">Non-Normative Draft Specification</div>
<h1 class="site-title">Trace Capsule v0.1 Draft Spec</h1>
<p class="site-subtitle">Non-Normative C2PA Bridge Layer for Bounded Interpretation, Source-Return, and Honest Closure</p>
<div class="author-block">
<span class="author-name">Collin D. Weber</span>
<span class="author-role">Creator and Developer of Primordial Calculus / HIR-OAM</span>
<span class="author-role">Systems Architect / Systems Integrity Steward</span>
</div>
<div class="version-badges">
<span class="badge-pill version">v0.1 Public Draft</span>
<span class="badge-pill non-norm">Non-Normative</span>
<span class="badge-pill review">Review Artifact</span>
</div>
</header>
<!-- TOC -->
<nav class="toc-nav">
<h3>Contents</h3>
<ul class="toc-list">
<li><a href="#boundary"><span class="num">01</span> Boundary Statement</a></li>
<li><a href="#overview"><span class="num">02</span> Overview</a></li>
<li><a href="#bridge-rules"><span class="num">03</span> Bridge Rules</a></li>
<li><a href="#min-access"><span class="num">04</span> Minimum Necessary Access</a></li>
<li><a href="#schema"><span class="num">05</span> Minimal Schema</a></li>
<li><a href="#json"><span class="num">06</span> JSON Embedding Examples</a></li>
<li><a href="#loop-states"><span class="num">07</span> loop_state Values</a></li>
<li><a href="#badges"><span class="num">08</span> Badge / Panel Render Rules</a></li>
<li><a href="#render-examples"><span class="num">09</span> Render Examples</a></li>
<li><a href="#reuse-flow"><span class="num">10</span> Reuse / Update Flow</a></li>
<li><a href="#pseudocode"><span class="num">11</span> Pseudocode Monitor</a></li>
<li><a href="#c2pa-rel"><span class="num">12</span> C2PA Relationship</a></li>
<li><a href="#compat"><span class="num">13</span> Related Systems</a></li>
<li><a href="#sensitive"><span class="num">14</span> Sensitive Domain Continuity</a></li>
<li><a href="#do-not-claim"><span class="num">15</span> Do Not Claim</a></li>
<li><a href="#final-lock"><span class="num">16</span> Final Lock</a></li>
</ul>
</nav>
<!-- ═══════════════════════════════════════════
01 BOUNDARY STATEMENT
═══════════════════════════════════════════ -->
<section class="section" id="boundary">
<p class="section-label">Β§ 01</p>
<h2 class="section-title">Boundary Statement</h2>
<div class="callout boundary">
<p class="callout-title">⚠ Hard Boundary β€” Read Before Proceeding</p>
<p>This document is a <strong>non-normative draft proposal</strong> for review and alignment purposes only. It does not modify, extend, or supersede any existing standard, specification, protocol, or compliance framework.</p>
</div>
<div class="dnc-grid">
<div class="dnc-item">This is not a C2PA standard</div>
<div class="dnc-item">This does not replace Content Credentials</div>
<div class="dnc-item">This does not define cryptographic provenance</div>
<div class="dnc-item">This does not prove truth</div>
<div class="dnc-item">This does not determine intent from metadata alone</div>
<div class="dnc-item">This does not remove the need for contextual judgment</div>
<div class="dnc-item">This does not replace domain review</div>
<div class="dnc-item">This does not replace journalism or legal process</div>
<div class="dnc-item">This does not replace clinical or security review</div>
<div class="dnc-item">This does not certify compliance with any standard</div>
<div class="dnc-item">This is not production-ready</div>
<div class="dnc-item">This does not replace human accountability</div>
</div>
<p>This is a <strong>bounded interpretation-layer proposal</strong>. Its purpose is to describe how provenance-bearing content β€” once it enters human or AI-mediated discourse β€” might be handled with preserved source, bounded claims, and honest loop closure.</p>
</section>
<!-- ═══════════════════════════════════════════
02 OVERVIEW
═══════════════════════════════════════════ -->
<section class="section" id="overview">
<p class="section-label">Β§ 02</p>
<h2 class="section-title">Overview</h2>
<div class="callout core">
<p class="callout-title">Core Thesis</p>
<p><strong>Content Credentials make provenance visible.</strong><br>
<strong>Trace Capsules make provenance usable inside live communication loops.</strong><br>
<strong>Substrate carries the closure environment.</strong></p>
</div>
<div class="card-grid">
<div class="card">
<div class="card-icon">πŸ”</div>
<div class="card-title">C2PA / Content Credentials</div>
<div class="card-body">The provenance and source layer. Helps content carry verifiable origin, edit history, authorship signals, and credential state. Answers: <em>Where did this come from and what happened to it?</em></div>
</div>
<div class="card">
<div class="card-icon">β—ˆ</div>
<div class="card-title">Trace Capsule</div>
<div class="card-body">The bounded interpretation layer. Attaches downstream to provenance-bearing content. Helps provenance survive AI summarization, reposting, disputes, platform loops, and closure pressure. Answers: <em>What can this trace honestly support?</em></div>
</div>
<div class="card">
<div class="card-icon">⬑</div>
<div class="card-title">Substrate</div>
<div class="card-body">The communication-loop environment. The human, institutional, platform, or AI-mediated space where interpretation, disagreement, repair, and closure happen. Answers: <em>Can this conversation honestly close?</em></div>
</div>
</div>
<p>These three layers are <strong>not competing systems</strong>. They are a continuity stack: provenance at the content level, bounded interpretation at the downstream-use level, and honest loop handling at the communication level.</p>
<div class="flow-diagram">
<div class="flow-row">
<div class="flow-node">Content</div>
<div class="flow-arrow">β†’</div>
<div class="flow-node highlight">Credential</div>
<div class="flow-arrow">β†’</div>
<div class="flow-node">Trace Capsule</div>
<div class="flow-arrow">β†’</div>
<div class="flow-node">Interpretation</div>
<div class="flow-arrow">β†’</div>
<div class="flow-node">Translation</div>
<div class="flow-arrow">β†’</div>
<div class="flow-node">Source-Return</div>
<div class="flow-arrow">β†’</div>
<div class="flow-node highlight">Honest Closure</div>
</div>
<div class="flow-label">C2PA handles the credential layer. Trace Capsule handles interpretation forward.</div>
</div>
</section>
<!-- ═══════════════════════════════════════════
03 BRIDGE RULES
═══════════════════════════════════════════ -->
<section class="section" id="bridge-rules">
<p class="section-label">Β§ 03</p>
<h2 class="section-title">Bridge Rules β€” Invariants</h2>
<p>The following invariants govern the relationship between C2PA provenance and Trace Capsule interpretation. These rules may not be violated by any downstream use of this layer proposal.</p>
<ul class="invariant-list">
<li><span class="inv-marker">I.01</span> C2PA remains the provenance / source layer. Trace Capsule attaches bounded interpretation downstream from it.</li>
<li><span class="inv-marker">I.02</span> Credential state is <strong>never rewritten</strong> by the Trace Capsule layer. Only interpretation pressure is updated.</li>
<li><span class="inv-marker">I.03</span> Reuse updates interpretation pressure, not origin. Origin does not reset on reuse.</li>
<li><span class="inv-marker">I.04</span> Closure is scoped to current evidence. A <code>CLOSED_CURRENT_SCOPE</code> state does not resolve all possible questions β€” it marks the current pressure object handled honestly.</li>
<li><span class="inv-marker">I.05</span> Provenance visibility does not equal claim validity. A credential establishes content history, not the truth of every interpretation built from it.</li>
<li><span class="inv-marker">I.06</span> A trace may be <span class="state-badge state-held">HELD</span>, <span class="state-badge state-strained">STRAINED</span>, <span class="state-badge state-repairing">REPAIRING</span>, <span class="state-badge state-encaps">ENCAPSULATED</span>, <span class="state-badge state-false">FALSE_CLOSURE_RISK</span>, <span class="state-badge state-stop">MUST_STOP</span>, or <span class="state-badge state-closed">CLOSED_CURRENT_SCOPE</span>.</li>
<li><span class="inv-marker">I.07</span> No Trace Capsule may claim AI agreement as proof of the underlying claim.</li>
<li><span class="inv-marker">I.08</span> No Trace Capsule may claim that storing a review trace makes the trace true.</li>
<li><span class="inv-marker">I.09</span> Source-return path must remain visible or explicitly marked as absent.</li>
<li><span class="inv-marker">I.10</span> Minimum necessary access principle applies at every stage. See Β§ 04.</li>
</ul>
</section>
<!-- ═══════════════════════════════════════════
04 MINIMUM NECESSARY ACCESS
═══════════════════════════════════════════ -->
<section class="section" id="min-access">
<p class="section-label">Β§ 04</p>
<h2 class="section-title">Minimum Necessary Access Principle</h2>
<p>Trace Capsule v0.1 operates on the <strong>minimum necessary access</strong> principle. HIR/OAM does not require full sensitive domain access to begin reading structural pressure. It requires enough trace to locate the repair path.</p>
<div class="map-flow">
<div class="map-node">Signal<small>what trace is available?</small></div>
<div class="map-arrow">β†’</div>
<div class="map-node">Authority<small>who can act?</small></div>
<div class="map-arrow">β†’</div>
<div class="map-node">Blockage<small>where is repair blocked?</small></div>
<div class="map-arrow">β†’</div>
<div class="map-node">Repair Condition<small>what would honest closure require?</small></div>
</div>
<div class="callout note">
<p class="callout-title">The Capsule Should Not Ask</p>
<p style="color: var(--text-secondary); margin-bottom: 10px;">❌ <em>"Give me everything."</em></p>
<p style="color: var(--text-secondary);">βœ“ <em>"What trace is available? What boundary applies? Who can act? Where is repair blocked? What would honest closure require?"</em></p>
</div>
<p><strong>Minimum necessary facts. Maximum repair clarity.</strong></p>
<p>This principle makes Trace Capsule v0.1 compatible with need-to-know environments, least-privilege systems, confidentiality agreements, protected records, hospitals, schools, legal teams, government agencies, research groups, and enterprise systems β€” without requiring those systems to expose protected data in order to engage the interpretation layer.</p>
</section>
<!-- ═══════════════════════════════════════════
05 MINIMAL SCHEMA
═══════════════════════════════════════════ -->
<section class="section" id="schema">
<p class="section-label">Β§ 05</p>
<h2 class="section-title">Minimal Schema</h2>
<p>The compact Trace Capsule schema contains the minimum required fields for identification, credential state, loop state, and review routing.</p>
<table class="spec-table">
<thead>
<tr>
<th>Field</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>trace_capsule_v</td>
<td><span class="mono muted">string</span></td>
<td>Schema version. Current value: <code class="mono">"0.1"</code></td>
</tr>
<tr>
<td>trace_id</td>
<td><span class="mono muted">string</span></td>
<td>Unique identifier for this capsule instance.</td>
</tr>
<tr>
<td>attached_to</td>
<td><span class="mono muted">string</span></td>
<td>Type of object the capsule is attached to: <code class="mono">ai_summary | community_note | repost | review</code></td>
</tr>
<tr>
<td>credential_state</td>
<td><span class="mono muted">string</span></td>
<td>State of the C2PA credential: <code class="mono">present | absent | stripped | damaged | inaccessible</code></td>
</tr>
<tr>
<td>loop_state</td>
<td><span class="mono muted">string</span></td>
<td>Current communication loop state. See Β§ 07 for full definitions.</td>
</tr>
<tr>
<td>review_status</td>
<td><span class="mono muted">string</span></td>
<td>Review routing status: <code class="mono">unreviewed | reviewed | disputed | repairing | closed</code></td>
</tr>
</tbody>
</table>
<details>
<summary>⊞ Expanded Pressure Fields</summary>
<div class="details-body">
<table class="spec-table" style="margin-top: 16px;">
<thead>
<tr>
<th>Field</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>source_uri</td>
<td><span class="mono muted">string</span></td>
<td>Credential pointer or origin source URI.</td>
</tr>
<tr>
<td>claim_boundary</td>
<td><span class="mono muted">string</span></td>
<td>Explicit statement of what this trace can and cannot support.</td>
</tr>
<tr>
<td>uncertainty_state</td>
<td><span class="mono muted">string</span></td>
<td>Uncertainty level: <code class="mono">none | low | medium | high | unresolved</code></td>
</tr>
<tr>
<td>unsupported_inferences</td>
<td><span class="mono muted">array</span></td>
<td>List of inferences detected that are not supported by the current trace.</td>
</tr>
<tr>
<td>source_return_path</td>
<td><span class="mono muted">string</span></td>
<td>Path for returning to origin, credential, history, or repair route.</td>
</tr>
<tr>
<td>notes</td>
<td><span class="mono muted">array</span></td>
<td>Additional review notes, correction traces, or encapsulation reasons.</td>
</tr>
</tbody>
</table>
</div>
</details>
</section>
<!-- ═══════════════════════════════════════════
06 JSON EXAMPLES
═══════════════════════════════════════════ -->
<section class="section" id="json">
<p class="section-label">Β§ 06</p>
<h2 class="section-title">JSON Embedding Examples</h2>
<p>Compact capsule β€” minimal fields sufficient for badge rendering and loop state routing:</p>
<div class="code-wrap" id="json-compact-wrap">
<div class="code-header">
<span class="code-lang">JSON β€” Compact Capsule</span>
<button class="copy-btn" onclick="copyCode('json-compact')">Copy</button>
</div>
<pre id="json-compact">{
<span class="json-key">"trace_capsule_v"</span>: <span class="json-str">"0.1"</span>,
<span class="json-key">"trace_id"</span>: <span class="json-str">"tc_001"</span>,
<span class="json-key">"attached_to"</span>: <span class="json-str">"ai_summary"</span>,
<span class="json-key">"credential_state"</span>: <span class="json-str">"present"</span>,
<span class="json-key">"loop_state"</span>: <span class="json-str">"HELD"</span>,
<span class="json-key">"review_status"</span>: <span class="json-str">"unreviewed"</span>
}</pre>
</div>
<p>Expanded capsule β€” full pressure field set for review, repair, and boundary documentation:</p>
<div class="code-wrap">
<div class="code-header">
<span class="code-lang">JSON β€” Expanded Capsule</span>
<button class="copy-btn" onclick="copyCode('json-expanded')">Copy</button>
</div>
<pre id="json-expanded">{
<span class="json-key">"trace_capsule_v"</span>: <span class="json-str">"0.1"</span>,
<span class="json-key">"trace_id"</span>: <span class="json-str">"tc_002"</span>,
<span class="json-key">"attached_to"</span>: <span class="json-str">"community_note"</span>,
<span class="json-key">"credential_state"</span>: <span class="json-str">"present"</span>,
<span class="json-key">"loop_state"</span>: <span class="json-str">"STRAINED"</span>,
<span class="json-key">"review_status"</span>: <span class="json-str">"repairing"</span>,
<span class="json-key">"source_uri"</span>: <span class="json-str">"credential/source-pointer"</span>,
<span class="json-key">"claim_boundary"</span>: <span class="json-str">"note addresses claim scope, not total truth"</span>,
<span class="json-key">"uncertainty_state"</span>: <span class="json-str">"medium"</span>,
<span class="json-key">"unsupported_inferences"</span>: [
<span class="json-str">"disputed claim exceeds credential support"</span>
],
<span class="json-key">"source_return_path"</span>: <span class="json-str">"add source/context or revise note"</span>,
<span class="json-key">"notes"</span>: [
<span class="json-str">"repairing: source-return and context alignment underway"</span>
]
}</pre>
</div>
<p>Non-normative C2PA assertion sketch β€” for future alignment discussion only:</p>
<div class="code-wrap">
<div class="code-header">
<span class="code-lang">JSON β€” Non-Normative Assertion Sketch</span>
<button class="copy-btn" onclick="copyCode('json-assertion')">Copy</button>
</div>
<pre id="json-assertion">{
<span class="json-key">"label"</span>: <span class="json-str">"resonant_access.trace_capsule.v0_1"</span>,
<span class="json-key">"relationship"</span>: <span class="json-str">"interpretation-layer"</span>,
<span class="json-key">"preserves"</span>: [
<span class="json-str">"source"</span>,
<span class="json-str">"boundary"</span>,
<span class="json-str">"uncertainty"</span>,
<span class="json-str">"source_return"</span>
],
<span class="json-key">"does_not_replace"</span>: <span class="json-str">"Content Credential"</span>
}</pre>
</div>
</section>
<!-- ═══════════════════════════════════════════
07 LOOP STATE VALUES
═══════════════════════════════════════════ -->
<section class="section" id="loop-states">
<p class="section-label">Β§ 07</p>
<h2 class="section-title">loop_state Values</h2>
<table class="spec-table">
<thead>
<tr>
<th>State</th>
<th>Badge</th>
<th>Definition</th>
</tr>
</thead>
<tbody>
<tr>
<td>HELD</td>
<td><span class="state-badge state-held">🟒 HELD</span></td>
<td>Source, credential, and boundary support current use. Stable for current scope.</td>
</tr>
<tr>
<td>STRAINED</td>
<td><span class="state-badge state-strained">🟠 STRAINED</span></td>
<td>Source, context, uncertainty, or claim scope needs repair. Proceed with caution.</td>
</tr>
<tr>
<td>REPAIRING</td>
<td><span class="state-badge state-repairing">πŸ”΅ REPAIRING</span></td>
<td>Correction, review, source-return, or boundary repair is actively underway.</td>
</tr>
<tr>
<td>ENCAPSULATED</td>
<td><span class="state-badge state-encaps">🟣 ENCAPSULATED</span></td>
<td>Preserve trace; do not claim further yet. Protective non-finality β€” not rejection.</td>
</tr>
<tr>
<td>FALSE_CLOSURE_RISK</td>
<td><span class="state-badge state-false">⚠ FALSE_CLOSURE_RISK</span></td>
<td>Loop is ending before evidence supports closure. A person, platform, AI, or pressure field is treating this as closed prematurely.</td>
</tr>
<tr>
<td>MUST_STOP</td>
<td><span class="state-badge state-stop">πŸ”΄ MUST_STOP</span></td>
<td>No responsible reuse without repair, consent, clarification, or domain review. The trace cannot proceed as-is.</td>
</tr>
<tr>
<td>CLOSED_CURRENT_SCOPE</td>
<td><span class="state-badge state-closed">βšͺ CLOSED_CURRENT_SCOPE</span></td>
<td>Handled honestly for this specific use case and evidence scope. Does not resolve all possible questions.</td>
</tr>
</tbody>
</table>
</section>
<!-- ═══════════════════════════════════════════
08 BADGE / PANEL RENDER RULES
═══════════════════════════════════════════ -->
<section class="section" id="badges">
<p class="section-label">Β§ 08</p>
<h2 class="section-title">Badge / Panel Render Rules</h2>
<p>The Trace Capsule UI layer uses a two-level render model: a compact <strong>badge</strong> for inline display and an expanded <strong>panel</strong> for detailed field review.</p>
<table class="spec-table">
<thead>
<tr>
<th>Layer</th>
<th>Purpose</th>
<th>When to Show</th>
</tr>
</thead>
<tbody>
<tr>
<td>Badge</td>
<td>Renders current loop_state inline, beside the content object.</td>
<td>Always β€” on every attached content object.</td>
</tr>
<tr>
<td>Panel</td>
<td>Shows why β€” source, boundary, uncertainty, inference flags, source-return path.</td>
<td>On expand / hover / tap, or when loop_state is non-HELD.</td>
</tr>
<tr>
<td>Credential indicator</td>
<td>Reports credential_state (present / absent / stripped / damaged).</td>
<td>Always β€” visible beside badge.</td>
</tr>
<tr>
<td>Reuse update</td>
<td>Updates interpretation pressure (loop_state) β€” never origin.</td>
<td>On each downstream reuse or repost event.</td>
</tr>
</tbody>
</table>
<p style="margin-top: 20px; font-size: 13px; color: var(--text-muted); font-family: var(--font-mono);">Compact badge format:</p>
<div style="background: var(--bg-inset); border: 1px solid var(--border-subtle); border-radius: var(--radius); padding: 12px 16px; font-family: var(--font-mono); font-size: 12px; color: var(--text-secondary); margin-bottom: 16px;">
[Trace Capsule: <span style="color: var(--state-held);">HELD</span>] [Credential: <span style="color: var(--accent-cyan);">present</span>] [Review: <span style="color: var(--text-muted);">unreviewed</span>]
</div>
</section>
<!-- ═══════════════════════════════════════════
09 RENDER EXAMPLES
═══════════════════════════════════════════ -->
<section class="section" id="render-examples">
<p class="section-label">Β§ 09</p>
<h2 class="section-title">Render Examples</h2>
<p>These examples illustrate how Trace Capsule badges and panels would render on two common downstream content types.</p>
<div class="render-panel">
<div class="render-panel-header">Example A β€” AI Summary (Bounded Derivative Trace)</div>
<div class="render-badge-row">
<span class="state-badge state-held">🟒 HELD</span>
<span class="state-badge" style="color:var(--accent-cyan);border-color:rgba(56,188,212,0.3);background:rgba(56,188,212,0.07);">Credential: present</span>
<span class="state-badge" style="color:var(--text-muted);border-color:var(--border-mid);background:var(--bg-inset);">Review: unreviewed</span>
</div>
<div class="render-field-grid">
<div class="render-field-key">Source</div>
<div class="render-field-val">c2pa_manifest or source_pointer</div>
<div class="render-field-key">Boundary</div>
<div class="render-field-val">Summary reflects source content; does not verify broader claims</div>
<div class="render-field-key">Uncertainty</div>
<div class="render-field-val">low</div>
<div class="render-field-key">Unsupported inferences</div>
<div class="render-field-val"><span class="muted mono" style="font-size:11px;">none detected</span></div>
<div class="render-field-key">Source-return</div>
<div class="render-field-val">open credential / source / history</div>
<div class="render-field-key">Loop state</div>
<div class="render-field-val"><span class="state-badge state-held">🟒 HELD</span></div>
</div>
</div>
<div class="render-panel">
<div class="render-panel-header">Example B β€” Community Note (Bounded Review Trace)</div>
<div class="render-badge-row">
<span class="state-badge state-strained">🟠 STRAINED</span>
<span class="state-badge" style="color:var(--accent-cyan);border-color:rgba(56,188,212,0.3);background:rgba(56,188,212,0.07);">Credential: present</span>
<span class="state-badge" style="color:var(--state-repairing);border-color:rgba(61,143,212,0.3);background:rgba(61,143,212,0.07);">Review: repairing</span>
</div>
<div class="render-field-grid">
<div class="render-field-key">Source</div>
<div class="render-field-val">credential / source pointer</div>
<div class="render-field-key">Boundary</div>
<div class="render-field-val">Note addresses claim scope, not total truth</div>
<div class="render-field-key">Uncertainty</div>
<div class="render-field-val">medium</div>
<div class="render-field-key">Unsupported inferences</div>
<div class="render-field-val" style="color: #e0b08a;">Disputed claim exceeds credential support</div>
<div class="render-field-key">Source-return</div>
<div class="render-field-val">Add source / context or revise note</div>
<div class="render-field-key">Loop state</div>
<div class="render-field-val"><span class="state-badge state-repairing">πŸ”΅ REPAIRING</span></div>
</div>
</div>
<div class="callout note" style="margin-top: 20px;">
<p class="callout-title">Distinction</p>
<p><strong>AI Summary</strong> = bounded derivative trace. The AI translated the source; the capsule preserves what the translation can and cannot claim.</p>
<p style="margin-top: 8px;"><strong>Community Note</strong> = bounded review trace. A human or editorial process assessed the claim; the capsule records scope, uncertainty, and repair state.</p>
</div>
</section>
<!-- ═══════════════════════════════════════════
10 REUSE / UPDATE FLOW
═══════════════════════════════════════════ -->
<section class="section" id="reuse-flow">
<p class="section-label">Β§ 10</p>
<h2 class="section-title">Reuse / Update Flow</h2>
<ul class="invariant-list">
<li><span class="inv-marker">01</span> Original content has credential / source pointer.</li>
<li><span class="inv-marker">02</span> AI summary or Community Note receives a Trace Capsule on attachment.</li>
<li><span class="inv-marker">03</span> Summary is reposted, quoted, summarized again, or used in a Note.</li>
<li><span class="inv-marker">04</span> System checks whether context or claim scope changed.</li>
<li><span class="inv-marker">05</span> If no change: <code>loop_state</code> remains <span class="state-badge state-held" style="font-size:10px;">HELD</span></li>
<li><span class="inv-marker">06</span> If claim expands beyond source: <span class="state-badge state-strained" style="font-size:10px;">STRAINED</span></li>
<li><span class="inv-marker">07</span> If correction / source-return is underway: <span class="state-badge state-repairing" style="font-size:10px;">REPAIRING</span></li>
<li><span class="inv-marker">08</span> If reuse implies unsupported certainty: <span class="state-badge state-false" style="font-size:10px;">FALSE_CLOSURE_RISK</span></li>
<li><span class="inv-marker">09</span> If unsafe without consent / context / domain review: <span class="state-badge state-stop" style="font-size:10px;">MUST_STOP</span></li>
<li><span class="inv-marker">10</span> If repaired and bounded: <span class="state-badge state-closed" style="font-size:10px;">CLOSED_CURRENT_SCOPE</span></li>
</ul>
<div class="callout core">
<p class="callout-title">Core Rule</p>
<p><strong>Origin does not reset on reuse. Interpretation pressure does.</strong></p>
</div>
</section>
<!-- ═══════════════════════════════════════════
11 PSEUDOCODE MONITOR
═══════════════════════════════════════════ -->
<section class="section" id="pseudocode">
<p class="section-label">Β§ 11</p>
<h2 class="section-title">Pseudocode Monitor</h2>
<p>The following pseudocode describes the core logic of a Trace Capsule monitor operating at the point of attachment and at each subsequent reuse event.</p>
<div class="code-wrap">
<div class="code-header">
<span class="code-lang">Pseudocode</span>
<button class="copy-btn" onclick="copyCode('pseudocode-block')">Copy</button>
</div>
<pre id="pseudocode-block" style="color: #b0cce0;">on_attach(object):
detect credential_state
create trace_capsule
if source + boundary support current use:
loop_state = HELD
else:
loop_state = STRAINED
render compact badge
on_reuse(object):
compare new_claim_scope to claim_boundary
check source_return_path
check uncertainty_state
check unsupported_inferences
if source missing or credential stripped:
loop_state = STRAINED
if correction or review begins:
loop_state = REPAIRING
if claim exceeds evidence:
loop_state = FALSE_CLOSURE_RISK
if unsafe without repair / consent / domain review:
loop_state = MUST_STOP
if repaired and bounded:
loop_state = CLOSED_CURRENT_SCOPE
render updated badge
<span style="color: var(--text-muted); font-style: italic;"># Core rule:
# Credential state is not rewritten.
# Interpretation pressure is updated.
# The badge renders the current loop_state.</span></pre>
</div>
</section>
<!-- ═══════════════════════════════════════════
12 C2PA RELATIONSHIP
═══════════════════════════════════════════ -->
<section class="section" id="c2pa-rel">
<p class="section-label">Β§ 12</p>
<h2 class="section-title">C2PA Relationship</h2>
<div class="card-grid">
<div class="card">
<div class="card-title">What C2PA Answers</div>
<div class="card-body" style="font-size: 12.5px;">
<ul style="list-style: none; line-height: 2.2;">
<li>β—¦ What is the origin?</li>
<li>β—¦ What edits occurred?</li>
<li>β—¦ What credential is attached?</li>
<li>β—¦ What provenance signals are available?</li>
<li>β—¦ What content history can be inspected?</li>
</ul>
</div>
</div>
<div class="card">
<div class="card-title">What Trace Capsule Adds</div>
<div class="card-body" style="font-size: 12.5px;">
<ul style="list-style: none; line-height: 2.2;">
<li>β—¦ What can this trace honestly support?</li>
<li>β—¦ What uncertainty remains?</li>
<li>β—¦ Is the audience receiving the right interpretation?</li>
<li>β—¦ Is the conversation being falsely closed?</li>
<li>β—¦ Does this need repair, routing, or source-return?</li>
</ul>
</div>
</div>
</div>
<ul class="invariant-list" style="margin-top: 20px;">
<li><span class="inv-marker">β—¦</span> Trace Capsule v0.1 is C2PA-adjacent and <strong>non-normative</strong>.</li>
<li><span class="inv-marker">β—¦</span> It may sit beside or after provenance-bearing content in a display environment.</li>
<li><span class="inv-marker">β—¦</span> It does not define the credential. It does not alter the credential.</li>
<li><span class="inv-marker">β—¦</span> It attaches bounded interpretation to downstream use, not to the source artifact.</li>
<li><span class="inv-marker">β—¦</span> This relationship is one of continuity, not competition.</li>
<li><span class="inv-marker">β—¦</span> Trace Capsule v0.1 should be understood as an optional downstream interpretation object, not a credential assertion, unless and until an actual standards body defines such a relationship.</li>
</ul>
</section>
<!-- ═══════════════════════════════════════════
13 RELATED SYSTEMS
═══════════════════════════════════════════ -->
<section class="section" id="compat">
<p class="section-label">Β§ 13</p>
<h2 class="section-title">Related Provenance and Audit Systems</h2>
<p>Trace Capsule v0.1 does not replace the following systems. It provides bounded interpretation, pressure state, source-return, and closure state around downstream use of traces that may be governed by these systems.</p>
<ul class="compat-list">
<li>C2PA / Content Credentials<span>Provenance and edit-history standard</span></li>
<li>W3C PROV<span>Provenance data model</span></li>
<li>CRediT<span>Contributor roles taxonomy</span></li>
<li>DataCite<span>Research data attribution</span></li>
<li>Audit ledgers<span>Chain-of-custody records</span></li>
<li>Consent / revocation<span>Permission propagation systems</span></li>
<li>EHR meaning preservation<span>Clinical record integrity</span></li>
<li>Schema.org<span>Structured data / markup</span></li>
</ul>
</section>
<!-- ═══════════════════════════════════════════
14 SENSITIVE DOMAIN CONTINUITY
═══════════════════════════════════════════ -->
<section class="section" id="sensitive">
<p class="section-label">Β§ 14</p>
<h2 class="section-title">Health and Sensitive Domain Continuity</h2>
<p>The Trace Capsule pattern generalizes to sensitive domains. The structural logic of bounded interpretation, source-return, and honest closure is domain-independent.</p>
<div class="callout note">
<p class="callout-title">Bridge Lines</p>
<p><strong>Consent carries boundary.</strong> Revocation must propagate.<br>
<strong>EHR meaning carries clinical context.</strong> Source-of-record vs AI-derived interpretation must be distinguished.<br>
<strong>Content Credentials carry provenance.</strong> Trace Capsules carry bounded interpretation across reuse.</p>
</div>
<details>
<summary>⊞ Sensitive Domain Application Notes</summary>
<div class="details-body">
<p><strong>Patient consent revocation</strong> demonstrates boundary propagation: consent carries conditions, and revocation must propagate through every downstream use β€” the same structural requirement as Trace Capsule source-return.</p>
<p><strong>EHR meaning preservation</strong> demonstrates the source-of-record vs AI-derived distinction: a clinical interpretation built from an EHR record must not be treated as equivalent to the record itself. That is structurally identical to the Trace Capsule rule that a derivative trace must not claim equivalence with its credential-bearing source.</p>
<p>Trace Capsule v0.1 generalizes this same structure to public provenance, AI summaries, and social reuse β€” without making clinical, legal, or compliance claims.</p>
<hr>
<p class="muted" style="font-size: 12px;">Do not claim clinical validation. Do not claim HIPAA compliance. Do not claim operational readiness. These notes describe structural analogies only.</p>
</div>
</details>
</section>
<!-- ═══════════════════════════════════════════
15 DO NOT CLAIM
═══════════════════════════════════════════ -->
<section class="section" id="do-not-claim">
<p class="section-label">Β§ 15</p>
<h2 class="section-title">Do Not Claim</h2>
<p>The following claims must not be made using Trace Capsule v0.1 or any artifact derived from this proposal:</p>
<div class="dnc-grid">
<div class="dnc-item">This is a C2PA specification</div>
<div class="dnc-item">This replaces Content Credentials</div>
<div class="dnc-item">This is cryptographic proof</div>
<div class="dnc-item">This proves the truth of a claim</div>
<div class="dnc-item">This determines intent by metadata alone</div>
<div class="dnc-item">This removes the need for domain review</div>
<div class="dnc-item">This certifies legal or regulatory compliance</div>
<div class="dnc-item">This is production-ready software</div>
<div class="dnc-item">AI agreement validates the underlying claim</div>
<div class="dnc-item">Storing a review trace makes the trace true</div>
<div class="dnc-item">This replaces journalism or scientific review</div>
<div class="dnc-item">This replaces human accountability</div>
</div>
</section>
<!-- ═══════════════════════════════════════════
16 FINAL LOCK
═══════════════════════════════════════════ -->
<section class="section" id="final-lock">
<p class="section-label">Β§ 16</p>
<h2 class="section-title">Final Lock</h2>
<div class="final-lock">
<div class="lock-icon">β—ˆ</div>
<div class="lock-lines">
<em>C2PA carries provenance.</em><br>
<em>Trace Capsules carry bounded interpretation.</em><br>
<em>Substrate carries closure.</em><br>
<br>
Content Credentials make provenance visible.<br>
Trace Capsules make provenance usable inside live communication loops.<br>
<br>
<em>Minimum necessary facts. Maximum repair clarity.</em><br>
<br>
Repair begins when authority moves.
</div>
</div>
</section>
<!-- ═══════════════════════════════════════════
FOOTER
═══════════════════════════════════════════ -->
<footer class="site-footer">
<div class="footer-attr">
<strong>Collin D. Weber</strong><br>
Creator and Developer of Primordial Calculus / HIR-OAM<br>
Systems Architect / Systems Integrity Steward
</div>
<div class="footer-meta">
<span class="badge-pill version">Trace Capsule v0.1</span>
<span class="badge-pill non-norm">Non-Normative</span>
<span class="badge-pill review">Public Draft</span>
</div>
</footer>
</div>
<script>
function copyCode(id) {
const el = document.getElementById(id);
if (!el) return;
// Strip HTML tags for clean copy
const text = el.innerText || el.textContent;
navigator.clipboard.writeText(text).then(() => {
const btn = el.closest('.code-wrap').querySelector('.copy-btn');
if (btn) {
btn.textContent = 'Copied';
btn.classList.add('copied');
setTimeout(() => {
btn.textContent = 'Copy';
btn.classList.remove('copied');
}, 1800);
}
}).catch(() => {
// Fallback
const ta = document.createElement('textarea');
ta.value = text;
ta.style.position = 'fixed';
ta.style.opacity = '0';
document.body.appendChild(ta);
ta.select();
document.execCommand('copy');
document.body.removeChild(ta);
});
}
</script>
</body>
</html>