| <!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%); |
| } |
| |
| |
| 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; |
| } |
| |
| |
| .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); } |
| |
| |
| .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; |
| } |
| |
| |
| .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 { |
| 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; |
| } |
| |
| |
| .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 { |
| 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; |
| } |
| |
| |
| .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-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-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; } |
| |
| |
| 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-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; } |
| |
| |
| .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; |
| } |
| |
| |
| .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; } |
| |
| |
| .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); } |
| |
| |
| .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 { |
| 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; |
| } |
| |
| |
| .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; |
| } |
| |
| |
| hr { |
| border: none; |
| border-top: 1px solid var(--border-subtle); |
| margin: 28px 0; |
| } |
| |
| |
| .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 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> |
|
|
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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> |
|
|
| |
| |
| |
| <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 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; |
| |
| 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(() => { |
| |
| 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> |