OverviewFilesCommitsIssuesDocsReleasesPeers

P2P-Hiverelay / docs / html / BLIND-CELLS.html

171 lines · html ref:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Blind Cells — Verifiable Threshold Custody of Encrypted Secrets</title>
<style>
  :root { color-scheme: light; }
  * { box-sizing: border-box; }
  body { margin: 0; padding: 0; background: #eef1f6; color: #1a2333;
    font: 16px/1.6 ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; }
  .page { max-width: 920px; margin: 32px auto; background: #fff; padding: 56px 64px;
    border-radius: 14px; box-shadow: 0 2px 18px rgba(20,30,60,.10); }
  h1 { font-size: 1.9rem; line-height: 1.25; margin: 0 0 .4em; padding-bottom: .35em; border-bottom: 3px solid #4a6fa5; }
  h2 { font-size: 1.35rem; margin-top: 2em; border-bottom: 1px solid #dde3ee; padding-bottom: .2em; }
  h3 { font-size: 1.1rem; margin-top: 1.6em; color: #2c3e63; }
  blockquote { margin: 1em 0; padding: .8em 1.1em; background: #f2f6fd; border-left: 4px solid #4a6fa5; border-radius: 0 8px 8px 0; color: #2c3e63; }
  code { background: #f0f2f7; padding: .12em .38em; border-radius: 5px; font: .86em ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
  pre { background: #141a28; color: #e6ebf5; padding: 16px 18px; border-radius: 10px; overflow-x: auto; }
  pre code { background: none; padding: 0; color: inherit; }
  table { border-collapse: collapse; width: 100%; margin: 1em 0; font-size: .92rem; }
  th, td { border: 1px solid #d8deea; padding: 8px 10px; text-align: left; vertical-align: top; }
  th { background: #eef2fa; }
  tr:nth-child(even) td { background: #fafbfe; }
  a { color: #2f5fb3; }
  .mermaid-figure { margin: 1.4em 0; padding: 20px; background: #fbfcfe; border: 1px solid #e2e8f2; border-radius: 12px; text-align: center; overflow-x: auto; }
  .mermaid-figure svg { max-width: 100%; height: auto; }
  .doc-badge { display: inline-block; font-size: .75rem; letter-spacing: .04em; text-transform: uppercase;
    background: #4a6fa5; color: #fff; border-radius: 999px; padding: 3px 12px; margin-bottom: 14px; }
  hr { border: none; border-top: 1px solid #dde3ee; margin: 2em 0; }
  </style>
</head>
<body>
<div class="page">
<div class="doc-badge">BLIND-CELLS</div>
<h1>Blind Cells — Verifiable Threshold Custody of Encrypted Secrets</h1>
<p><strong>Status:</strong> shipped (v0.22–0.24.x line) · <strong>Code:</strong> <code>packages/client/blind-shards.js</code>, <code>packages/services/builtin/shard-store/</code>, <code>packages/core/core/pvss.js</code>, <code>packages/core/core/custody-signing.js</code></p>
<blockquote>
<p><strong>Naming note:</strong> there is no <code>cell</code> symbol in the code. In this document, <strong>one cell = one blind shard blob</strong> — a self-contained, content-addressed (<code>shard:&lt;blake2b-256&gt;</code>), independently placeable, publicly verifiable unit of an encrypted whole. The subsystem that produces and custodies cells is the <em>blind-shard dispersal</em> machinery, the third generation of HiveRelay&#39;s blind custody line.</p>
</blockquote>
<h2>1. What it is</h2>
<p>A publisher encrypts content at its own edge, splits the decryption key into <strong>n opaque shares</strong> with publicly-verifiable threshold secret sharing (PVSS), and places <strong>exactly one cell on each of n independent relays</strong>, bound by a signed custody intent so each relay can only store the share assigned to it.</p>
<ul>
<li>No single relay — and no <em>k−1</em> colluding relays — can reconstruct the key.</li>
<li>Any reader gathering <em>k</em> of <em>n</em> cells reconstructs the key entirely client-side.</li>
<li>Relays store opaque blobs, <strong>publicly verify</strong> share well-formedness <em>without decrypting anything</em>, sign custody receipts, and later sign proofs of possession and of post-expiry non-serving (provable <strong>BURNED</strong>).</li>
</ul>
<p>This solves: custody handoff without trusting any operator, threshold-destroyed keys for timed/handoff drops, and social-recovery-grade secret custody.</p>
<p><strong>Three generations coexist</strong> and share one custody state machine:</p>
<table>
<thead>
<tr>
<th>Generation</th>
<th>Since</th>
<th>What relays custody</th>
</tr>
</thead>
<tbody><tr>
<td>Atomic Blind Custody</td>
<td>v0.8.0</td>
<td>encrypted <strong>content</strong> (drives)</td>
</tr>
<tr>
<td>PVSS Blind Key Custody</td>
<td>v0.9.x</td>
<td>PVSS <strong>share bundles</strong> (one hypercore per secret)</td>
</tr>
<tr>
<td>Blind-shard dispersal (cells)</td>
<td>v0.22+</td>
<td>per-share <strong>content-addressed blobs</strong></td>
</tr>
</tbody></table>
<h2>2. Architecture</h2>
<div class="mermaid-figure"><svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 1850.45px; background-color: transparent;" viewBox="0 0 1850.453125 530" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#5a7196;stroke:#5a7196;}#my-svg .marker.cross{stroke:#5a7196;}#my-svg svg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#333;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#333;color:#333;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#5a7196!important;stroke-width:0;stroke:#5a7196;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#5a7196;stroke-width:1px;}#my-svg .flowchart-link{stroke:#5a7196;fill:none;}#my-svg .edgeLabel{background-color:#ffffff;text-align:center;}#my-svg .edgeLabel p{background-color:#ffffff;}#my-svg .edgeLabel rect{opacity:0.5;background-color:#ffffff;fill:#ffffff;}#my-svg .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#my-svg .cluster rect{fill:#f6f8fc;stroke:#aaaa33;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:#ffffff;text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:#ffffff;padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:#ffffff;fill:#ffffff;}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].swimlane.cluster rect{filter:none;}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"><g class="cluster" id="my-svg-Rn" data-look="classic"><rect style="" x="1647.59375" y="8" width="194.859375" height="148"/><g class="cluster-label" transform="translate(1718.890625, 8)"><foreignObject width="52.265625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>Relay n</p></span></div>
<p></foreignObject></g></g><g class="cluster" id="my-svg-R2" data-look="classic"><rect style="" x="1647.59375" y="176" width="194.859375" height="178"/><g class="cluster-label" transform="translate(1718.734375, 176)"><foreignObject width="52.578125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>Relay 2</p></span></div></foreignObject></g></g><g class="cluster" id="my-svg-R1" data-look="classic"><rect style="" x="1647.59375" y="374" width="194.859375" height="148"/><g class="cluster-label" transform="translate(1719.8515625, 374)"><foreignObject width="50.34375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>Relay 1</p></span></div></foreignObject></g></g><g class="cluster" id="my-svg-Dealer" data-look="classic"><rect style="" x="8" y="15" width="1129.0625" height="453"/><g class="cluster-label" transform="translate(487.9453125, 15)"><foreignObject width="169.171875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>Publisher edge (dealer)</p></span></div></foreignObject></g></g></g><g class="edgePaths"><path d="M234.914,89L242.988,89C251.063,89,267.211,89,292.878,112.136C318.545,135.272,353.73,181.544,371.323,204.68L388.915,227.816" id="my-svg-L_Enc_Split_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Enc_Split_0" data-points="W3sieCI6MjM0LjkxNDA2MjUsInkiOjg5fSx7IngiOjI4My4zNTkzNzUsInkiOjg5fSx7IngiOjM5MS4zMzY0OTg2MTg3ODQ1LCJ5IjoyMzF9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M533.625,270L537.792,270C541.958,270,550.292,270,557.958,270C565.625,270,572.625,270,576.125,270L579.625,270" id="my-svg-L_Split_Blob_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Split_Blob_0" data-points="W3sieCI6NTMzLjYyNSwieSI6MjcwfSx7IngiOjU1OC42MjUsInkiOjI3MH0seyJ4Ijo1ODMuNjI1LCJ5IjoyNzB9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M258.359,394L262.526,394C266.693,394,275.026,394,294.422,380.28C313.817,366.559,344.275,339.118,359.504,325.398L374.733,311.677" id="my-svg-L_Plan_Split_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Plan_Split_0" data-points="W3sieCI6MjU4LjM1OTM3NSwieSI6Mzk0fSx7IngiOjI4My4zNTkzNzUsInkiOjM5NH0seyJ4IjozNzcuNzA0NDQ4MDg0Njc3NDQsInkiOjMwOX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M830.234,300.763L834.401,301.802C838.568,302.842,846.901,304.921,854.568,305.96C862.234,307,869.234,307,872.734,307L876.234,307" id="my-svg-L_Blob_Intent_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Blob_Intent_0" data-points="W3sieCI6ODMwLjIzNDM3NSwieSI6MzAwLjc2Mjg0MDQzNjE3OTd9LHsieCI6ODU1LjIzNDM3NSwieSI6MzA3fSx7IngiOjg4MC4yMzQzNzUsInkiOjMwN31d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1112.063,307L1116.229,307C1120.396,307,1128.729,307,1153.729,307C1178.729,307,1220.396,307,1261.396,307C1302.396,307,1342.729,307,1362.896,307L1383.063,307" id="my-svg-L_Intent_Reg_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Intent_Reg_0" data-points="W3sieCI6MTExMi4wNjI1LCJ5IjozMDd9LHsieCI6MTEzNy4wNjI1LCJ5IjozMDd9LHsieCI6MTI2Mi4wNjI1LCJ5IjozMDd9LHsieCI6MTM4Ny4wNjI1LCJ5IjozMDd9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M742.854,309L761.584,329.333C780.314,349.667,817.774,390.333,859.99,410.667C902.206,431,949.177,431,996.148,431C1043.12,431,1090.091,431,1134.41,431C1178.729,431,1220.396,431,1279.607,431C1338.818,431,1415.573,431,1475.661,431C1535.75,431,1579.172,431,1605.049,431C1630.927,431,1639.26,431,1646.937,431.612C1654.614,432.225,1661.633,433.45,1665.143,434.062L1668.653,434.675" id="my-svg-L_Blob_SS1_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Blob_SS1_0" data-points="W3sieCI6NzQyLjg1NDQyNTQ2NTgzODUsInkiOjMwOX0seyJ4Ijo4NTUuMjM0Mzc1LCJ5Ijo0MzF9LHsieCI6OTk2LjE0ODQzNzUsInkiOjQzMX0seyJ4IjoxMTM3LjA2MjUsInkiOjQzMX0seyJ4IjoxMjYyLjA2MjUsInkiOjQzMX0seyJ4IjoxNDkyLjMyODEyNSwieSI6NDMxfSx7IngiOjE2MjIuNTkzNzUsInkiOjQzMX0seyJ4IjoxNjQ3LjU5Mzc1LCJ5Ijo0MzF9LHsieCI6MTY3Mi41OTM3NSwieSI6NDM1LjM2MjEyMDExODY3NTN9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M830.234,239.237L834.401,238.198C838.568,237.158,846.901,235.079,874.553,234.04C902.206,233,949.177,233,996.148,233C1043.12,233,1090.091,233,1134.41,233C1178.729,233,1220.396,233,1279.607,233C1338.818,233,1415.573,233,1475.661,233C1535.75,233,1579.172,233,1605.049,233C1630.927,233,1639.26,233,1646.971,234.346C1654.681,235.691,1661.767,238.383,1665.311,239.728L1668.854,241.074" id="my-svg-L_Blob_SS2_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Blob_SS2_0" data-points="W3sieCI6ODMwLjIzNDM3NSwieSI6MjM5LjIzNzE1OTU2MzgyMDI2fSx7IngiOjg1NS4yMzQzNzUsInkiOjIzM30seyJ4Ijo5OTYuMTQ4NDM3NSwieSI6MjMzfSx7IngiOjExMzcuMDYyNSwieSI6MjMzfSx7IngiOjEyNjIuMDYyNSwieSI6MjMzfSx7IngiOjE0OTIuMzI4MTI1LCJ5IjoyMzN9LHsieCI6MTYyMi41OTM3NSwieSI6MjMzfSx7IngiOjE2NDcuNTkzNzUsInkiOjIzM30seyJ4IjoxNjcyLjU5Mzc1LCJ5IjoyNDIuNDk0MDI2MTQwNjQ2M31d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M736.141,231L755.99,204.5C775.839,178,815.537,125,858.871,98.5C902.206,72,949.177,72,996.148,72C1043.12,72,1090.091,72,1134.41,72C1178.729,72,1220.396,72,1279.607,72C1338.818,72,1415.573,72,1475.661,72C1535.75,72,1579.172,72,1605.049,72C1630.927,72,1639.26,72,1646.931,72.36C1654.601,72.719,1661.608,73.438,1665.111,73.798L1668.615,74.158" id="my-svg-L_Blob_SSn_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Blob_SSn_0" data-points="W3sieCI6NzM2LjE0MTIxNjg1NjA2MDYsInkiOjIzMX0seyJ4Ijo4NTUuMjM0Mzc1LCJ5Ijo3Mn0seyJ4Ijo5OTYuMTQ4NDM3NSwieSI6NzJ9LHsieCI6MTEzNy4wNjI1LCJ5Ijo3Mn0seyJ4IjoxMjYyLjA2MjUsInkiOjcyfSx7IngiOjE0OTIuMzI4MTI1LCJ5Ijo3Mn0seyJ4IjoxNjIyLjU5Mzc1LCJ5Ijo3Mn0seyJ4IjoxNjQ3LjU5Mzc1LCJ5Ijo3Mn0seyJ4IjoxNjcyLjU5Mzc1LCJ5Ijo3NC41NjU5NTMwMTA5ODU0OH1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1522.568,346L1539.239,367.5C1555.91,389,1589.252,432,1610.09,453.5C1630.927,475,1639.26,475,1643.427,475L1647.594,475" id="my-svg-L_Reg_R1_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Reg_R1_0" data-points="W3sieCI6MTUyMi41NjgzNTkzNzUsInkiOjM0Nn0seyJ4IjoxNjIyLjU5Mzc1LCJ5Ijo0NzV9LHsieCI6MTY0Ny41OTM3NSwieSI6NDc1fSx7IngiOjE2NzIuNTkzNzUsInkiOjQ2OC4wNzE5MjY4NzAzMzkyfV0=" data-look="classic"/><path d="M1597.594,307L1601.76,307C1605.927,307,1614.26,307,1622.594,307C1630.927,307,1639.26,307,1643.427,307L1647.594,307" id="my-svg-L_Reg_R2_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Reg_R2_0" data-points="W3sieCI6MTU5Ny41OTM3NSwieSI6MzA3fSx7IngiOjE2MjIuNTkzNzUsInkiOjMwN30seyJ4IjoxNjQ3LjU5Mzc1LCJ5IjozMDd9LHsieCI6MTY3Mi41OTM3NSwieSI6Mjk3LjUwNTk3Mzg1OTM1MzczfV0=" data-look="classic"/><path d="M1517.987,268L1535.421,241.5C1552.856,215,1587.725,162,1609.326,135.5C1630.927,109,1639.26,109,1643.427,109L1647.594,109" id="my-svg-L_Reg_Rn_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Reg_Rn_0" data-points="W3sieCI6MTUxNy45ODY1MDU2ODE4MTgyLCJ5IjoyNjh9LHsieCI6MTYyMi41OTM3NSwieSI6MTA5fSx7IngiOjE2NDcuNTkzNzUsInkiOjEwOX0seyJ4IjoxNjcyLjU5Mzc1LCJ5IjoxMDIuMDcxOTI2ODcwMzM5MTh9XQ==" data-look="classic"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_Enc_Split_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_Split_Blob_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_Plan_Split_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_Blob_Intent_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1262.0625, 307)"><g class="label" data-id="L_Intent_Reg_0" transform="translate(-100, -24)"><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="edgeLabel"><p>POST /api/custody/intent (all relays first)</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1262.0625, 431)"><g class="label" data-id="L_Blob_SS1_0" transform="translate(-82.2734375, -12)"><foreignObject width="164.546875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>PUT cell 1 + signed pin</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1262.0625, 233)"><g class="label" data-id="L_Blob_SS2_0" transform="translate(-83.390625, -12)"><foreignObject width="166.78125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>PUT cell 2 + signed pin</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1262.0625, 72)"><g class="label" data-id="L_Blob_SSn_0" transform="translate(-83.2265625, -12)"><foreignObject width="166.453125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>PUT cell n + signed pin</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_Reg_R1_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_Reg_R2_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_Reg_Rn_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="my-svg-flowchart-Enc-0" data-look="classic" transform="translate(145.6796875, 89)"><rect class="basic label-container" style="" x="-89.234375" y="-39" width="178.46875" height="78"/><g class="label" style="" transform="translate(-59.234375, -24)"><rect/><foreignObject width="118.46875" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Encrypt content<br />random dataKey</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Plan-1" data-look="classic" transform="translate(145.6796875, 394)"><rect class="basic label-container" style="" x="-112.6796875" y="-39" width="225.359375" height="78"/><g class="label" style="" transform="translate(-82.6796875, -24)"><rect/><foreignObject width="165.359375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>planDispersal()<br />n ephemeral guardians</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Split-2" data-look="classic" transform="translate(420.9921875, 270)"><rect class="basic label-container" style="" x="-112.6328125" y="-39" width="225.265625" height="78"/><g class="label" style="" transform="translate(-82.6328125, -24)"><rect/><foreignObject width="165.265625" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>PVSS split k-of-n<br />Feldman commitments</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Blob-3" data-look="classic" transform="translate(706.9296875, 270)"><rect class="basic label-container" style="" x="-123.3046875" y="-39" width="246.609375" height="78"/><g class="label" style="" transform="translate(-93.3046875, -24)"><rect/><foreignObject width="186.609375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>encodeShareShard()<br />cell bytes + shard:&lt;hash&gt;</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Intent-4" data-look="classic" transform="translate(996.1484375, 307)"><rect class="basic label-container" style="" x="-115.9140625" y="-39" width="231.828125" height="78"/><g class="label" style="" transform="translate(-85.9140625, -24)"><rect/><foreignObject width="171.828125" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>sign custody intent v2<br />assignments + manifest</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SS1-5" data-look="classic" transform="translate(1745.0234375, 448)"><rect class="basic label-container" style="" x="-72.4296875" y="-39" width="144.859375" height="78"/><g class="label" style="" transform="translate(-42.4296875, -24)"><rect/><foreignObject width="84.859375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>shard-store<br />cell 1</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SS2-6" data-look="classic" transform="translate(1745.0234375, 270)"><rect class="basic label-container" style="" x="-72.4296875" y="-39" width="144.859375" height="78"/><g class="label" style="" transform="translate(-42.4296875, -24)"><rect/><foreignObject width="84.859375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>shard-store<br />cell 2</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SSn-7" data-look="classic" transform="translate(1745.0234375, 82)"><rect class="basic label-container" style="" x="-72.4296875" y="-39" width="144.859375" height="78"/><g class="label" style="" transform="translate(-42.4296875, -24)"><rect/><foreignObject width="84.859375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>shard-store<br />cell n</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Reg-8" data-look="classic" transform="translate(1492.328125, 307)"><rect class="basic label-container" style="" x="-105.265625" y="-39" width="210.53125" height="78"/><g class="label" style="" transform="translate(-75.265625, -24)"><rect/><foreignObject width="150.53125" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Custody registry<br />(hypercore + gossip)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs></svg></div></p>
<p>The hard rule of the design: <strong>the signed intent is published to every relay BEFORE any cell is uploaded.</strong> A cell that arrives without a matching roster entry is rejected as an orphan (<code>UNAUTHORIZED_PIN</code>).</p>
<h2>3. The crypto, briefly</h2>
<p>Scheme <code>pvss-secp256k1-v1</code> (Schoenmakers PVSS over secp256k1; confidentiality is computational — DDH — not information-theoretic Shamir):</p>
<ul>
<li>Dealer picks a degree <code>k−1</code> polynomial <code>p(x)</code> with <code>p(0) = s</code>. Feldman commitments <code>C_j = a_j·C_GEN</code> are published under a <strong>second, nothing-up-my-sleeve generator</strong> <code>C_GEN</code> (with one generator, <code>C_0 = G^s</code> would leak the secret point — two generators are load-bearing).</li>
<li>Share <em>i</em> is the public point <code>X_i = C_GEN^{p(i)}</code>, ElGamal-encrypted to ephemeral guardian <code>y_i</code> as <code>Y_i</code>, with a Fiat–Shamir <strong>DLEQ proof</strong> that the same exponent underlies both — anyone can verify, nobody learns <code>p(i)</code>.</li>
<li>A <strong>cell</strong> carries the <em>decrypted share point</em> <code>S_i = p(i)·G</code>, the shareholder point, <code>Y_i</code>, and the decryption DLEQ. Anyone can verify a cell is well-formed; only ≥ <em>k</em> cells reconstruct.</li>
<li>Key derivation: <code>key = blake2b-256(&#39;hiverelay-pvss-key-v1:&#39; || S)</code>. Content address: <code>shard:</code> + blake2b-256(cell bytes).</li>
<li>All authorization is Ed25519 with domain separation: custody entries <code>hiverelay-&lt;type&gt;-v1:</code>, shard pins <code>hiverelay.shard-pin.v1\0</code>, possession proofs <code>hiverelay.shard-possession.v1</code> (modes R/A/T).</li>
</ul>
<table>
<thead>
<tr>
<th>Relay sees</th>
<th>Relay never sees</th>
</tr>
</thead>
<tbody><tr>
<td>opaque cells + hashes, commitments, <code>Y_i</code>, DLEQ proofs</td>
<td>the secret, derived key, share scalars <code>p(i)</code></td>
</tr>
<tr>
<td>signed intents/receipts, pubkeys, timing/size metadata</td>
<td>plaintext, <code>dataKey</code> (18 field names hard-blocked by the validator)</td>
</tr>
</tbody></table>
<h2>4. Flows</h2>
<h3>4.1 Disperse (dealer path)</h3>
<div class="mermaid-figure"><svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 1164.5px; background-color: transparent;" viewBox="-195 -10 1164.5 713" role="graphics-document document" aria-roledescription="sequence"><g><rect x="663" y="627" fill="#eaeaea" stroke="#666" width="152" height="65" name="Ri" rx="3" ry="3" class="actor actor-bottom"/><text x="739" y="659.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="739" dy="0">Relay i (shard-store)</tspan></text></g><g><rect x="381" y="627" fill="#eaeaea" stroke="#666" width="150" height="65" name="Reg" rx="3" ry="3" class="actor actor-bottom"/><text x="456" y="659.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="456" dy="0">Custody registry</tspan></text></g><g><rect x="0" y="627" fill="#eaeaea" stroke="#666" width="150" height="65" name="D" rx="3" ry="3" class="actor actor-bottom"/><text x="75" y="659.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="75" dy="0">Dealer (app edge)</tspan></text></g><g><line id="actor2" x1="739" y1="65" x2="739" y2="627" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="Ri" data-et="life-line" data-id="Ri"/><g id="root-2" data-et="participant" data-type="participant" data-id="Ri"><rect x="663" y="0" fill="#eaeaea" stroke="#666" width="152" height="65" name="Ri" rx="3" ry="3" class="actor actor-top"/><text x="739" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="739" dy="0">Relay i (shard-store)</tspan></text></g></g><g><line id="actor1" x1="456" y1="65" x2="456" y2="627" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="Reg" data-et="life-line" data-id="Reg"/><g id="root-1" data-et="participant" data-type="participant" data-id="Reg"><rect x="381" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="Reg" rx="3" ry="3" class="actor actor-top"/><text x="456" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="456" dy="0">Custody registry</tspan></text></g></g><g><line id="actor0" x1="75" y1="65" x2="75" y2="627" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="D" data-et="life-line" data-id="D"/><g id="root-0" data-et="participant" data-type="participant" data-id="D"><rect x="0" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="D" rx="3" ry="3" class="actor actor-top"/><text x="75" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="75" dy="0">Dealer (app edge)</tspan></text></g></g><style>#my-svg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#5a7196;stroke:#5a7196;}#my-svg .marker.cross{stroke:#5a7196;}#my-svg svg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .actor{stroke:#9370DB;fill:#ECECFF;stroke-width:1;}#my-svg rect.actor.outer-path[data-look="neo"]{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg rect.note[data-look="neo"]{stroke:#aaaa33;fill:#fff5ad;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg text.actor&gt;tspan{fill:black;stroke:none;}#my-svg .actor-line{stroke:#9370DB;}#my-svg .innerArc{stroke-width:1.5;stroke-dasharray:none;}#my-svg .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#my-svg .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#my-svg [id$="-arrowhead"] path{fill:#333;stroke:#333;}#my-svg .sequenceNumber{fill:white;}#my-svg [id$="-sequencenumber"]{fill:#333;}#my-svg [id$="-crosshead"] path{fill:#333;stroke:#333;}#my-svg .messageText{fill:#333;stroke:none;}#my-svg .labelBox{stroke:#9370DB;fill:#ECECFF;filter:none;}#my-svg .labelText,#my-svg .labelText&gt;tspan{fill:black;stroke:none;}#my-svg .loopText,#my-svg .loopText&gt;tspan{fill:black;stroke:none;}#my-svg .sectionTitle,#my-svg .sectionTitle&gt;tspan{fill:black;stroke:none;}#my-svg .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#9370DB;fill:#9370DB;}#my-svg .note{stroke:#aaaa33;fill:#fff5ad;}#my-svg .noteText,#my-svg .noteText&gt;tspan{fill:black;stroke:none;font-weight:normal;}#my-svg .activation0{fill:#f4f4f4;stroke:#666;}#my-svg .activation1{fill:#f4f4f4;stroke:#666;}#my-svg .activation2{fill:#f4f4f4;stroke:#666;}#my-svg .actorPopupMenu{position:absolute;}#my-svg .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#my-svg .actor-man circle,#my-svg line{fill:#ECECFF;stroke-width:2px;}#my-svg g rect.rect{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));stroke:#9370DB;}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].swimlane.cluster rect{filter:none;}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g/><defs><symbol id="my-svg-computer" width="24" height="24"><path transform="scale(.5)" d="M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"/></symbol></defs><defs><symbol id="my-svg-database" fill-rule="evenodd" clip-rule="evenodd"><path transform="scale(.5)" d="M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z"/></symbol></defs><defs><symbol id="my-svg-clock" width="24" height="24"><path transform="scale(.5)" d="M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z"/></symbol></defs><defs><marker id="my-svg-arrowhead" refX="7.9" refY="5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M -1 0 L 10 5 L 0 10 z"/></marker></defs><defs><marker id="my-svg-crosshead" markerWidth="15" markerHeight="8" orient="auto" refX="4" refY="4.5"><path fill="none" stroke="#000000" stroke-width="1pt" d="M 1,2 L 6,7 M 6,2 L 1,7" style="stroke-dasharray: 0, 0;"/></marker></defs><defs><marker id="my-svg-filled-head" refX="15.5" refY="7" markerWidth="20" markerHeight="28" orient="auto"><path d="M 18,7 L9,13 L14,7 L9,1 Z"/></marker></defs><defs><marker id="my-svg-sequencenumber" refX="15" refY="15" markerWidth="60" markerHeight="40" orient="auto"><circle cx="15" cy="15" r="6"/></marker></defs><defs><marker id="my-svg-solidTopArrowHead" refX="7.9" refY="7.25" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 10 8 L 0 8 z"/></marker></defs><defs><marker id="my-svg-solidBottomArrowHead" refX="7.9" refY="0.75" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 10 0 L 0 8 z"/></marker></defs><defs><marker id="my-svg-stickTopArrowHead" refX="7.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 7 7" stroke="black" stroke-width="1.5" fill="none"/></marker></defs><defs><marker id="my-svg-stickBottomArrowHead" refX="7.5" refY="0" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 7 L 7 0" stroke="black" stroke-width="1.5" fill="none"/></marker></defs><g data-et="control-structure" data-id="i10"><line x1="64" y1="429" x2="750" y2="429" class="loopLine"/><line x1="750" y1="429" x2="750" y2="607" class="loopLine"/><line x1="64" y1="607" x2="750" y2="607" class="loopLine"/><line x1="64" y1="429" x2="64" y2="607" class="loopLine"/><line x1="64" y1="523" x2="750" y2="523" class="loopLine" style="stroke-dasharray: 3, 3;"/><polygon points="64,429 114,429 114,442 105.6,449 64,449" class="labelBox"/><text x="89" y="442" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="labelText" style="font-size: 16px; font-weight: 400;">alt</text><text x="432" y="447" text-anchor="middle" class="loopText" style="font-size: 16px; font-weight: 400;"><tspan x="432">[pin matches roster]</tspan></text><text x="407" y="541" text-anchor="middle" class="sectionTitle" style="font-size: 16px; font-weight: 400;">[orphan / mismatch]</text></g><text x="76" y="80" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">planDispersal(n, k): guardians, PVSS split, cells, shard hash</text><path d="M 76,109 C 136,99 136,139 76,129" class="messageLine0" data-et="message" data-id="i0" data-from="D" data-to="D" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="76" y="154" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">sign intent v2 {shareAssignments, shareManifest, commitmentRoot}</text><path d="M 76,183 C 136,173 136,213 76,203" class="messageLine0" data-et="message" data-id="i1" data-from="D" data-to="D" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="264" y="228" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">POST /api/custody/intent (to EVERY relay first)</text><line x1="76" y1="257" x2="452" y2="257" class="messageLine0" data-et="message" data-id="i2" data-from="D" data-to="Reg" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="596" y="272" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">gossip hiverelay-custody channel</text><line x1="457" y1="301" x2="735" y2="301" class="messageLine1" data-et="message" data-id="i3" data-from="Reg" data-to="Ri" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="406" y="316" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">POST /api/v1/shard (cell bytes + X-Shard-Pin)</text><line x1="76" y1="345" x2="735" y2="345" class="messageLine0" data-et="message" data-id="i4" data-from="D" data-to="Ri" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="740" y="360" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">verify pin sig, match (shareIndex, hash) vs signed roster</text><path d="M 740,389 C 800,379 800,419 740,409" class="messageLine0" data-et="message" data-id="i5" data-from="Ri" data-to="Ri" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="409" y="479" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">201 stored (dedup ref-count)</text><line x1="738" y1="508" x2="79" y2="508" class="messageLine1" data-et="message" data-id="i7" data-from="Ri" data-to="D" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="409" y="568" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">403 UNAUTHORIZED_PIN</text><line x1="738" y1="597" x2="79" y2="597" class="messageLine1" data-et="message" data-id="i9" data-from="Ri" data-to="D" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/></svg></div>
<p>Steps, with the code behind them:</p>
<ol>
<li><code>planDispersal({count, threshold, secret?})</code> (<code>packages/client/blind-shards.js:162</code>) — keygen guardians, PVSS <code>split()</code>, decrypt each share to its cell payload with DLEQ, <code>encodeShareShard()</code> + <code>shardAddressOf()</code>.</li>
<li><code>createCustodyIntent(fields, publisherKeyPair)</code> (<code>packages/core/core/custody-signing.js:218</code>) — v2 intent: <code>shareScheme</code>, <code>shareThreshold</code>, <code>commitmentRoot</code>, <code>shareAssignments: [{relayPubkey, shareIndex}]</code>, <code>shareManifest: [{shareIndex, shard, shareCommitment}]</code>.</li>
<li>Publish the intent to <strong>every</strong> relay — <code>POST /api/custody/intent</code> → <code>seedingRegistry.publishCustodyIntent()</code> → validated, appended to the local hypercore log, gossiped on the <code>hiverelay-custody</code> Protomux channel.</li>
<li>PUT each cell to <strong>its assigned relay only</strong> — <code>createHttpShardPut()</code> (<code>packages/client/shard-transport.js:47</code>) signs a custody pin and posts bytes with <code>X-Shard-Pin</code>.</li>
<li>Relay authorization — <code>ShardStoreService.put()</code> → <code>authorizeShardPin()</code>: pin signature, custody assignment lookup (<code>RelayNode._resolveShardCustodyAssignment()</code>), <strong>both</strong> <code>shareIndex</code> and <code>hash</code> must match the signed roster. Storage: <code>ShardEngine.put()</code> — hash-check, dedup ref-count, bytes to hyperblobs, index row to Hyperbee, pin journaled.</li>
</ol>
<p>The convenience orchestrator <code>disperse()</code> (<code>packages/client/blind-custody.js:56</code>) runs steps 1–4 with injected signers — <strong>keys never leave the app</strong>. Note: it deliberately stops before receipts/commit; completing the state machine is the app&#39;s job (or the seedApp-driven path in §4.2).</p>
<h3>4.2 Custody commit (receipt quorum)</h3>
<div class="mermaid-figure"><svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 1036px; background-color: transparent;" viewBox="-50 -10 1036 725" role="graphics-document document" aria-roledescription="sequence"><g><rect x="786" y="639" fill="#eaeaea" stroke="#666" width="150" height="65" name="Reg" rx="3" ry="3" class="actor actor-bottom"/><text x="861" y="671.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="861" dy="0">Registry</tspan></text></g><g><rect x="361" y="639" fill="#eaeaea" stroke="#666" width="150" height="65" name="R" rx="3" ry="3" class="actor actor-bottom"/><text x="436" y="671.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="436" dy="0">Relay i</tspan></text></g><g><rect x="0" y="639" fill="#eaeaea" stroke="#666" width="150" height="65" name="P" rx="3" ry="3" class="actor actor-bottom"/><text x="75" y="671.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="75" dy="0">Publisher</tspan></text></g><g><line id="actor2" x1="861" y1="65" x2="861" y2="639" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="Reg" data-et="life-line" data-id="Reg"/><g id="root-2" data-et="participant" data-type="participant" data-id="Reg"><rect x="786" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="Reg" rx="3" ry="3" class="actor actor-top"/><text x="861" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="861" dy="0">Registry</tspan></text></g></g><g><line id="actor1" x1="436" y1="65" x2="436" y2="639" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="R" data-et="life-line" data-id="R"/><g id="root-1" data-et="participant" data-type="participant" data-id="R"><rect x="361" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="R" rx="3" ry="3" class="actor actor-top"/><text x="436" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="436" dy="0">Relay i</tspan></text></g></g><g><line id="actor0" x1="75" y1="65" x2="75" y2="639" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="P" data-et="life-line" data-id="P"/><g id="root-0" data-et="participant" data-type="participant" data-id="P"><rect x="0" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="P" rx="3" ry="3" class="actor actor-top"/><text x="75" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="75" dy="0">Publisher</tspan></text></g></g><style>#my-svg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#5a7196;stroke:#5a7196;}#my-svg .marker.cross{stroke:#5a7196;}#my-svg svg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .actor{stroke:#9370DB;fill:#ECECFF;stroke-width:1;}#my-svg rect.actor.outer-path[data-look="neo"]{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg rect.note[data-look="neo"]{stroke:#aaaa33;fill:#fff5ad;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg text.actor&gt;tspan{fill:black;stroke:none;}#my-svg .actor-line{stroke:#9370DB;}#my-svg .innerArc{stroke-width:1.5;stroke-dasharray:none;}#my-svg .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#my-svg .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#my-svg [id$="-arrowhead"] path{fill:#333;stroke:#333;}#my-svg .sequenceNumber{fill:white;}#my-svg [id$="-sequencenumber"]{fill:#333;}#my-svg [id$="-crosshead"] path{fill:#333;stroke:#333;}#my-svg .messageText{fill:#333;stroke:none;}#my-svg .labelBox{stroke:#9370DB;fill:#ECECFF;filter:none;}#my-svg .labelText,#my-svg .labelText&gt;tspan{fill:black;stroke:none;}#my-svg .loopText,#my-svg .loopText&gt;tspan{fill:black;stroke:none;}#my-svg .sectionTitle,#my-svg .sectionTitle&gt;tspan{fill:black;stroke:none;}#my-svg .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#9370DB;fill:#9370DB;}#my-svg .note{stroke:#aaaa33;fill:#fff5ad;}#my-svg .noteText,#my-svg .noteText&gt;tspan{fill:black;stroke:none;font-weight:normal;}#my-svg .activation0{fill:#f4f4f4;stroke:#666;}#my-svg .activation1{fill:#f4f4f4;stroke:#666;}#my-svg .activation2{fill:#f4f4f4;stroke:#666;}#my-svg .actorPopupMenu{position:absolute;}#my-svg .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#my-svg .actor-man circle,#my-svg line{fill:#ECECFF;stroke-width:2px;}#my-svg g rect.rect{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));stroke:#9370DB;}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].swimlane.cluster rect{filter:none;}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g/><defs><symbol id="my-svg-computer" width="24" height="24"><path transform="scale(.5)" d="M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"/></symbol></defs><defs><symbol id="my-svg-database" fill-rule="evenodd" clip-rule="evenodd"><path transform="scale(.5)" d="M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z"/></symbol></defs><defs><symbol id="my-svg-clock" width="24" height="24"><path transform="scale(.5)" d="M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z"/></symbol></defs><defs><marker id="my-svg-arrowhead" refX="7.9" refY="5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M -1 0 L 10 5 L 0 10 z"/></marker></defs><defs><marker id="my-svg-crosshead" markerWidth="15" markerHeight="8" orient="auto" refX="4" refY="4.5"><path fill="none" stroke="#000000" stroke-width="1pt" d="M 1,2 L 6,7 M 6,2 L 1,7" style="stroke-dasharray: 0, 0;"/></marker></defs><defs><marker id="my-svg-filled-head" refX="15.5" refY="7" markerWidth="20" markerHeight="28" orient="auto"><path d="M 18,7 L9,13 L14,7 L9,1 Z"/></marker></defs><defs><marker id="my-svg-sequencenumber" refX="15" refY="15" markerWidth="60" markerHeight="40" orient="auto"><circle cx="15" cy="15" r="6"/></marker></defs><defs><marker id="my-svg-solidTopArrowHead" refX="7.9" refY="7.25" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 10 8 L 0 8 z"/></marker></defs><defs><marker id="my-svg-solidBottomArrowHead" refX="7.9" refY="0.75" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 10 0 L 0 8 z"/></marker></defs><defs><marker id="my-svg-stickTopArrowHead" refX="7.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 7 7" stroke="black" stroke-width="1.5" fill="none"/></marker></defs><defs><marker id="my-svg-stickBottomArrowHead" refX="7.5" refY="0" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 7 L 7 0" stroke="black" stroke-width="1.5" fill="none"/></marker></defs><g data-et="control-structure" data-id="i7"><line x1="64" y1="254" x2="872" y2="254" class="loopLine"/><line x1="872" y1="254" x2="872" y2="432" class="loopLine"/><line x1="64" y1="432" x2="872" y2="432" class="loopLine"/><line x1="64" y1="254" x2="64" y2="432" class="loopLine"/><line x1="64" y1="348" x2="872" y2="348" class="loopLine" style="stroke-dasharray: 3, 3;"/><polygon points="64,254 114,254 114,267 105.6,274 64,274" class="labelBox"/><text x="89" y="267" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="labelText" style="font-size: 16px; font-weight: 400;">alt</text><text x="493" y="272" text-anchor="middle" class="loopText" style="font-size: 16px; font-weight: 400;"><tspan x="493">[verification fails]</tspan></text><text x="468" y="366" text-anchor="middle" class="sectionTitle" style="font-size: 16px; font-weight: 400;">[verified]</text></g><g data-et="control-structure" data-id="i12"><line x1="64" y1="530" x2="872" y2="530" class="loopLine"/><line x1="872" y1="530" x2="872" y2="619" class="loopLine"/><line x1="64" y1="619" x2="872" y2="619" class="loopLine"/><line x1="64" y1="530" x2="64" y2="619" class="loopLine"/><polygon points="64,530 114,530 114,543 105.6,550 64,550" class="labelBox"/><text x="89" y="543" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="labelText" style="font-size: 16px; font-weight: 400;">opt</text><text x="493" y="548" text-anchor="middle" class="loopText" style="font-size: 16px; font-weight: 400;"><tspan x="493">[source-retired]</tspan></text></g><text x="254" y="80" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">POST /seed {blind:true, custodyIntentId}</text><line x1="76" y1="109" x2="432" y2="109" class="messageLine0" data-et="message" data-id="i0" data-from="P" data-to="R" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="647" y="124" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">re-fetch signed intent</text><line x1="437" y1="153" x2="857" y2="153" class="messageLine0" data-et="message" data-id="i1" data-from="R" data-to="Reg" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="437" y="168" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">replicate share bundle, verifyShareBundleForRelay()</text><text x="437" y="186" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">(assignment, commitmentRoot, DLEQ — no secrets)</text><path d="M 437,214 C 497,204 497,244 437,234" class="messageLine0" data-et="message" data-id="i2" data-from="R" data-to="R" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="257" y="304" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">custody:share-verify-failed (anchors nothing)</text><line x1="435" y1="333" x2="79" y2="333" class="messageLine1" data-et="message" data-id="i4" data-from="R" data-to="P" stroke-width="2" stroke="none" marker-end="url(#my-svg-crosshead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="647" y="393" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">recordCustodyReceipt {shareIndex, shareVerified:true}</text><line x1="437" y1="422" x2="857" y2="422" class="messageLine0" data-et="message" data-id="i6" data-from="R" data-to="Reg" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="467" y="447" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">poll status until n share-verified receipts</text><line x1="76" y1="476" x2="857" y2="476" class="messageLine0" data-et="message" data-id="i8" data-from="P" data-to="Reg" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="467" y="491" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">sign + publish commit (≥requiredReplicas, receiptRoot, quorum)</text><line x1="76" y1="520" x2="857" y2="520" class="messageLine0" data-et="message" data-id="i9" data-from="P" data-to="Reg" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/><text x="467" y="580" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">source-retired (relinquish authority, enables early burn)</text><line x1="76" y1="609" x2="857" y2="609" class="messageLine0" data-et="message" data-id="i11" data-from="P" data-to="Reg" stroke-width="2" stroke="none" marker-end="url(#my-svg-arrowhead)" style="fill: none;"/></svg></div>
<p>Receipts are anchored <strong>only</strong> from inside the seeding pipeline (<code>app-lifecycle._recordCustodyReceipt()</code>), fail-closed on any verification error. The commit re-checks quorum size, recomputed <code>receiptRoot</code>, matching <code>relayQuorum</code>, and <strong>distinct share indices</strong>.</p>
<h3>4.3 Retrieve and reconstruct (reader path)</h3>
<div class="mermaid-figure"><svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 620.703px; background-color: transparent;" viewBox="0 0 620.703125 1868.828125" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#5a7196;stroke:#5a7196;}#my-svg .marker.cross{stroke:#5a7196;}#my-svg svg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#333;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#333;color:#333;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#5a7196!important;stroke-width:0;stroke:#5a7196;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#5a7196;stroke-width:1px;}#my-svg .flowchart-link{stroke:#5a7196;fill:none;}#my-svg .edgeLabel{background-color:#ffffff;text-align:center;}#my-svg .edgeLabel p{background-color:#ffffff;}#my-svg .edgeLabel rect{opacity:0.5;background-color:#ffffff;fill:#ffffff;}#my-svg .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#my-svg .cluster rect{fill:#f6f8fc;stroke:#aaaa33;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:#ffffff;text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:#ffffff;padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:#ffffff;fill:#ffffff;}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].swimlane.cluster rect{filter:none;}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"/><g class="edgePaths"><path d="M295.516,110L295.516,114.167C295.516,118.333,295.516,126.667,295.516,134.333C295.516,142,295.516,149,295.516,152.5L295.516,156" id="my-svg-L_M_F_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_M_F_0" data-points="W3sieCI6Mjk1LjUxNTYyNSwieSI6MTEwfSx7IngiOjI5NS41MTU2MjUsInkiOjEzNX0seyJ4IjoyOTUuNTE1NjI1LCJ5IjoxNjB9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M242.5,238L236.836,242.167C231.172,246.333,219.844,254.667,214.18,262.333C208.516,270,208.516,277,208.516,280.5L208.516,284" id="my-svg-L_F_G1_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_F_G1_0" data-points="W3sieCI6MjQyLjUsInkiOjIzOH0seyJ4IjoyMDguNTE1NjI1LCJ5IjoyNjN9LHsieCI6MjA4LjUxNTYyNSwieSI6Mjg4fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M148.922,506.406L136.84,522.505C124.758,538.604,100.594,570.802,88.512,610.449C76.43,650.096,76.43,697.193,76.43,744.289C76.43,791.385,76.43,838.482,76.43,891.363C76.43,944.245,76.43,1002.911,76.43,1061.578C76.43,1120.245,76.43,1178.911,78.956,1213.805C81.483,1248.698,86.537,1259.817,89.063,1265.377L91.59,1270.937" id="my-svg-L_G1_X_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_G1_X_0" data-points="W3sieCI6MTQ4LjkyMjA0MDYyMDY0MTU1LCJ5Ijo1MDYuNDA2NDE1NjIwNjQxNTV9LHsieCI6NzYuNDI5Njg3NSwieSI6NjAzfSx7IngiOjc2LjQyOTY4NzUsInkiOjc0NC4yODkwNjI1fSx7IngiOjc2LjQyOTY4NzUsInkiOjg4NS41NzgxMjV9LHsieCI6NzYuNDI5Njg3NSwieSI6MTA2MS41NzgxMjV9LHsieCI6NzYuNDI5Njg3NSwieSI6MTIzNy41NzgxMjV9LHsieCI6OTMuMjQ0OTk1MTE3MTg3NSwieSI6MTI3NC41NzgxMjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M247.925,526.591L252.964,539.326C258.003,552.061,268.082,577.53,273.121,595.765C278.16,614,278.16,625,278.16,630.5L278.16,636" id="my-svg-L_G1_G2_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_G1_G2_0" data-points="W3sieCI6MjQ3LjkyNDU2MTk0ODM5Nzg3LCJ5Ijo1MjYuNTkxMDYzMDUxNjAyMX0seyJ4IjoyNzguMTYwMTU2MjUsInkiOjYwM30seyJ4IjoyNzguMTYwMTU2MjUsInkiOjY0MH1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M230.8,801.218L219.102,815.278C207.405,829.338,184.011,857.458,172.314,900.851C160.617,944.245,160.617,1002.911,160.617,1061.578C160.617,1120.245,160.617,1178.911,155.743,1213.906C150.869,1248.901,141.12,1260.224,136.246,1265.885L131.371,1271.547" id="my-svg-L_G2_X_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_G2_X_0" data-points="W3sieCI6MjMwLjc5OTUzNDE2OTMyNjYsInkiOjgwMS4yMTc1MDI5MTkzMjY2fSx7IngiOjE2MC42MTcxODc1LCJ5Ijo4ODUuNTc4MTI1fSx7IngiOjE2MC42MTcxODc1LCJ5IjoxMDYxLjU3ODEyNX0seyJ4IjoxNjAuNjE3MTg3NSwieSI6MTIzNy41NzgxMjV9LHsieCI6MTI4Ljc2MTU5NjY3OTY4NzUsInkiOjEyNzQuNTc4MTI1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M319.164,807.575L327.587,820.575C336.01,833.576,352.857,859.577,361.28,878.078C369.703,896.578,369.703,907.578,369.703,913.078L369.703,918.578" id="my-svg-L_G2_G3_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_G2_G3_0" data-points="W3sieCI6MzE5LjE2MzY2NTY4MTg4NDk0LCJ5Ijo4MDcuNTc0NjE1NTY4MTE1MX0seyJ4IjozNjkuNzAzMTI1LCJ5Ijo4ODUuNTc4MTI1fSx7IngiOjM2OS43MDMxMjUsInkiOjkyMi41NzgxMjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M318.388,1149.263L309.774,1163.982C301.16,1178.701,283.931,1208.14,260.406,1228.78C236.88,1249.419,207.057,1261.261,192.146,1267.181L177.234,1273.102" id="my-svg-L_G3_X_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_G3_X_0" data-points="W3sieCI6MzE4LjM4NzcxMjgxMzYyMDA2LCJ5IjoxMTQ5LjI2MjcxMjgxMzYyfSx7IngiOjI2Ni43MDMxMjUsInkiOjEyMzcuNTc4MTI1fSx7IngiOjE3My41MTY2MDE1NjI1LCJ5IjoxMjc0LjU3ODEyNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M387.423,1182.858L388.756,1191.978C390.088,1201.098,392.753,1219.338,394.085,1233.958C395.418,1248.578,395.418,1259.578,395.418,1265.078L395.418,1270.578" id="my-svg-L_G3_C_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_G3_C_0" data-points="W3sieCI6Mzg3LjQyMzAwNzI1OTUzMjU0LCJ5IjoxMTgyLjg1ODI0Mjc0MDQ2NzR9LHsieCI6Mzk1LjQxNzk2ODc1LCJ5IjoxMjM3LjU3ODEyNX0seyJ4IjozOTUuNDE3OTY4NzUsInkiOjEyNzQuNTc4MTI1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M395.418,1328.578L395.418,1332.745C395.418,1336.911,395.418,1345.245,403.123,1359.486C410.828,1373.727,426.239,1393.876,433.944,1403.951L441.649,1414.025" id="my-svg-L_C_K_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_C_K_0" data-points="W3sieCI6Mzk1LjQxNzk2ODc1LCJ5IjoxMzI4LjU3ODEyNX0seyJ4IjozOTUuNDE3OTY4NzUsInkiOjEzNTMuNTc4MTI1fSx7IngiOjQ0NC4wNzkwMDc0NDk5MTM3LCJ5IjoxNDE3LjIwMjI0MjU1MDA4NjN9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M513.747,1409.622L518.74,1400.282C523.733,1390.941,533.718,1372.26,538.711,1354.252C543.703,1336.245,543.703,1318.911,543.703,1299.578C543.703,1280.245,543.703,1258.911,543.703,1218.911C543.703,1178.911,543.703,1120.245,543.703,1061.578C543.703,1002.911,543.703,944.245,543.703,891.363C543.703,838.482,543.703,791.385,543.703,744.289C543.703,697.193,543.703,650.096,543.703,597.215C543.703,544.333,543.703,485.667,543.703,429C543.703,372.333,543.703,317.667,523.422,285.103C503.14,252.54,462.577,242.08,442.295,236.85L422.014,231.62" id="my-svg-L_K_F_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_K_F_0" data-points="W3sieCI6NTEzLjc0NzM3OTEwNDIxMTMsInkiOjE0MDkuNjIyMzc5MTA0MjExMn0seyJ4Ijo1NDMuNzAzMTI1LCJ5IjoxMzUzLjU3ODEyNX0seyJ4Ijo1NDMuNzAzMTI1LCJ5IjoxMzAxLjU3ODEyNX0seyJ4Ijo1NDMuNzAzMTI1LCJ5IjoxMjM3LjU3ODEyNX0seyJ4Ijo1NDMuNzAzMTI1LCJ5IjoxMDYxLjU3ODEyNX0seyJ4Ijo1NDMuNzAzMTI1LCJ5Ijo4ODUuNTc4MTI1fSx7IngiOjU0My43MDMxMjUsInkiOjc0NC4yODkwNjI1fSx7IngiOjU0My43MDMxMjUsInkiOjYwM30seyJ4Ijo1NDMuNzAzMTI1LCJ5Ijo0Mjd9LHsieCI6NTQzLjcwMzEyNSwieSI6MjYzfSx7IngiOjQxOC4xNDA2MjUsInkiOjIzMC42MjEyNTQwOTIxNjgyMX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M482.703,1556.828L482.703,1562.995C482.703,1569.161,482.703,1581.495,482.703,1593.161C482.703,1604.828,482.703,1615.828,482.703,1621.328L482.703,1626.828" id="my-svg-L_K_R_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_K_R_0" data-points="W3sieCI6NDgyLjcwMzEyNSwieSI6MTU1Ni44MjgxMjV9LHsieCI6NDgyLjcwMzEyNSwieSI6MTU5My44MjgxMjV9LHsieCI6NDgyLjcwMzEyNSwieSI6MTYzMC44MjgxMjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M482.703,1756.828L482.703,1760.995C482.703,1765.161,482.703,1773.495,482.703,1781.161C482.703,1788.828,482.703,1795.828,482.703,1799.328L482.703,1802.828" id="my-svg-L_R_Dec_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_R_Dec_0" data-points="W3sieCI6NDgyLjcwMzEyNSwieSI6MTc1Ni44MjgxMjV9LHsieCI6NDgyLjcwMzEyNSwieSI6MTc4MS44MjgxMjV9LHsieCI6NDgyLjcwMzEyNSwieSI6MTgwNi44MjgxMjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_M_F_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div>
<p></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_F_G1_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(76.4296875, 885.578125)"><g class="label" data-id="L_G1_X_0" transform="translate(-9.0859375, -12)"><foreignObject width="18.171875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>no</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(278.16015625, 603)"><g class="label" data-id="L_G1_G2_0" transform="translate(-12.4765625, -12)"><foreignObject width="24.953125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>yes</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(160.6171875, 1061.578125)"><g class="label" data-id="L_G2_X_0" transform="translate(-9.0859375, -12)"><foreignObject width="18.171875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>no</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(369.703125, 885.578125)"><g class="label" data-id="L_G2_G3_0" transform="translate(-12.4765625, -12)"><foreignObject width="24.953125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>yes</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(266.703125, 1237.578125)"><g class="label" data-id="L_G3_X_0" transform="translate(-9.0859375, -12)"><foreignObject width="18.171875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>no</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(395.41796875, 1237.578125)"><g class="label" data-id="L_G3_C_0" transform="translate(-12.4765625, -12)"><foreignObject width="24.953125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>yes</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_C_K_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(543.703125, 885.578125)"><g class="label" data-id="L_K_F_0" transform="translate(-9.0859375, -12)"><foreignObject width="18.171875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>no</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(482.703125, 1593.828125)"><g class="label" data-id="L_K_R_0" transform="translate(-12.4765625, -12)"><foreignObject width="24.953125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>yes</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_R_Dec_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="my-svg-flowchart-M-0" data-look="classic" transform="translate(295.515625, 59)"><rect class="basic label-container" style="" x="-130" y="-51" width="260" height="102"/><g class="label" style="" transform="translate(-100, -36)"><rect/><foreignObject width="200" height="72"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>Authenticated shareManifest<br />(publisher-signed intent)</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-F-1" data-look="classic" transform="translate(295.515625, 199)"><rect class="basic label-container" style="" x="-122.625" y="-39" width="245.25" height="78"/><g class="label" style="" transform="translate(-92.625, -24)"><rect/><foreignObject width="185.25" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>GET /api/v1/shard/&lt;hash&gt;<br />from relays in order</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-G1-3" data-look="classic" transform="translate(208.515625, 427)"><polygon points="139,0 278,-139 139,-278 0,-139" class="label-container" transform="translate(-138.5, 139)"/><g class="label" style="" transform="translate(-100, -24)"><rect/><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>re-hash == content address?</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-X-5" data-look="classic" transform="translate(105.515625, 1301.578125)"><rect class="basic label-container" style="" x="-97.515625" y="-27" width="195.03125" height="54"/><g class="label" style="" transform="translate(-67.515625, -12)"><rect/><foreignObject width="135.03125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>drop relay, try next</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-G2-7" data-look="classic" transform="translate(278.16015625, 744.2890625)"><polygon points="104.2890625,0 208.578125,-104.2890625 104.2890625,-208.578125 0,-104.2890625" class="label-container" transform="translate(-103.7890625, 104.2890625)"/><g class="label" style="" transform="translate(-77.2890625, -12)"><rect/><foreignObject width="154.578125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>decode + version ok?</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-G3-11" data-look="classic" transform="translate(369.703125, 1061.578125)"><polygon points="139,0 278,-139 139,-278 0,-139" class="label-container" transform="translate(-138.5, 139)"/><g class="label" style="" transform="translate(-100, -24)"><rect/><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>share point == manifest commitment?</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-C-15" data-look="classic" transform="translate(395.41796875, 1301.578125)"><rect class="basic label-container" style="" x="-87.5703125" y="-27" width="175.140625" height="54"/><g class="label" style="" transform="translate(-57.5703125, -12)"><rect/><foreignObject width="115.140625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>collect valid cell</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-K-17" data-look="classic" transform="translate(482.703125, 1467.703125)"><polygon points="89.125,0 178.25,-89.125 89.125,-178.25 0,-89.125" class="label-container" transform="translate(-88.625, 89.125)"/><g class="label" style="" transform="translate(-62.125, -12)"><rect/><foreignObject width="124.25" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>k cells collected?</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-R-21" data-look="classic" transform="translate(482.703125, 1693.828125)"><rect class="basic label-container" style="" x="-130" y="-63" width="260" height="126"/><g class="label" style="" transform="translate(-100, -48)"><rect/><foreignObject width="200" height="96"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>reconstruct(): re-verify each DLEQ,<br />Lagrange in the exponent → S → key</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Dec-23" data-look="classic" transform="translate(482.703125, 1833.828125)"><rect class="basic label-container" style="" x="-112.984375" y="-27" width="225.96875" height="54"/><g class="label" style="" transform="translate(-82.984375, -12)"><rect/><foreignObject width="165.96875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>decrypt content locally</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs></svg></div></p>
<p>The relay is trusted for <strong>nothing</strong>: content-address re-hash, shape validation, manifest commitment binding, and per-share DLEQ re-verification are all client-side gates. Below threshold → <code>INSUFFICIENT_SHARDS</code>. The one thing that must be authentic is the manifest itself — it travels inside the publisher-signed intent.</p>
<h3>4.4 Retention, expiry, burn</h3>
<div class="mermaid-figure"><svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="statediagram" style="max-width: 555.406px; background-color: transparent;" viewBox="0 0 555.40625 704" role="graphics-document document" aria-roledescription="stateDiagram"><style>#my-svg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#5a7196;stroke:#5a7196;}#my-svg .marker.cross{stroke:#5a7196;}#my-svg svg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg defs [id$="-barbEnd"]{fill:#333333;stroke:#333333;}#my-svg g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#my-svg g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#my-svg g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#my-svg g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#my-svg g.stateGroup line{stroke:#5a7196;stroke-width:1;}#my-svg .transition{stroke:#333333;stroke-width:1;fill:none;}#my-svg .stateGroup .composit{fill:white;border-bottom:1px;}#my-svg .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#my-svg .state-note{stroke:#aaaa33;fill:#fff5ad;}#my-svg .state-note text{fill:black;stroke:none;font-size:10px;}#my-svg .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#my-svg .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#my-svg .edgeLabel{background-color:#ffffff;text-align:center;}#my-svg .edgeLabel p{background-color:#ffffff;}#my-svg .edgeLabel rect{opacity:0.5;background-color:#ffffff;fill:#ffffff;}#my-svg .edgeLabel .label text{fill:#333;}#my-svg .label div .edgeLabel{color:#333;}#my-svg .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#my-svg .node circle.state-start{fill:#5a7196;stroke:#5a7196;}#my-svg .node .fork-join{fill:#5a7196;stroke:#5a7196;}#my-svg .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#my-svg .end-state-inner{fill:white;stroke-width:1.5;}#my-svg .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg [id$="-barbEnd"]{fill:#5a7196;}#my-svg .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .cluster-label,#my-svg .nodeLabel{color:#131300;}#my-svg .statediagram-cluster rect.outer{rx:5px;ry:5px;}#my-svg .statediagram-state .divider{stroke:#9370DB;}#my-svg .statediagram-state .title-state{rx:5px;ry:5px;}#my-svg .statediagram-cluster.statediagram-cluster .inner{fill:white;}#my-svg .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#my-svg .statediagram-cluster .inner{rx:0;ry:0;}#my-svg .statediagram-state rect.basic{rx:5px;ry:5px;}#my-svg .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#my-svg .note-edge{stroke-dasharray:5;}#my-svg .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#my-svg .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#my-svg .statediagram-note text{fill:black;}#my-svg .statediagram-note .nodeLabel{color:black;}#my-svg .statediagram .edgeLabel{color:red;}#my-svg [id$="-dependencyStart"],#my-svg [id$="-dependencyEnd"]{fill:#5a7196;stroke:#5a7196;stroke-width:1;}#my-svg .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg [data-look="neo"].statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1;}#my-svg [data-look="neo"].statediagram-cluster rect.outer{rx:5px;ry:5px;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].swimlane.cluster rect{filter:none;}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><defs><marker id="my-svg_stateDiagram-barbEnd" refX="19" refY="7" markerWidth="20" markerHeight="14" markerUnits="userSpaceOnUse" orient="auto"><path d="M 19,7 L9,13 L14,7 L9,1 Z"/></marker></defs><g class="root"><g class="clusters"/><g class="edgePaths"><path d="M278.141,22L278.141,30.167C278.141,38.333,278.141,54.667,278.141,71C278.141,87.333,278.141,103.667,278.141,111.833L278.141,120" id="my-svg-edge0" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge0" data-points="W3sieCI6Mjc4LjE0MDYyNSwieSI6MjJ9LHsieCI6Mjc4LjE0MDYyNSwieSI6NzF9LHsieCI6Mjc4LjE0MDYyNSwieSI6MTIwfV0=" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M278.141,160L278.141,166.167C278.141,172.333,278.141,184.667,278.141,197C278.141,209.333,278.141,221.667,278.141,227.833L278.141,234" id="my-svg-edge1" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge1" data-points="W3sieCI6Mjc4LjE0MDYyNSwieSI6MTYwfSx7IngiOjI3OC4xNDA2MjUsInkiOjE5N30seyJ4IjoyNzguMTQwNjI1LCJ5IjoyMzR9XQ==" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M255.492,263.185L230.91,273.154C206.328,283.123,157.164,303.062,132.582,321.864C108,340.667,108,358.333,108,367.167L108,376" id="my-svg-edge2" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge2" data-points="W3sieCI6MjU1LjQ5MjE4NzUsInkiOjI2My4xODUwMDMyMTQyNTI5fSx7IngiOjEwOCwieSI6MzIzfSx7IngiOjEwOCwieSI6Mzc2fV0=" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M108,416L108,424.833C108,433.667,108,451.333,108,468.333C108,485.333,108,501.667,108,509.833L108,518" id="my-svg-edge3" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge3" data-points="W3sieCI6MTA4LCJ5Ijo0MTZ9LHsieCI6MTA4LCJ5Ijo0Njl9LHsieCI6MTA4LCJ5Ijo1MTh9XQ==" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M108,558L108,566.167C108,574.333,108,590.667,118.069,607C128.137,623.333,148.275,639.667,158.344,647.833L168.412,656" id="my-svg-edge4" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge4" data-points="W3sieCI6MTA4LCJ5Ijo1NTh9LHsieCI6MTA4LCJ5Ijo2MDd9LHsieCI6MTY4LjQxMjI1MDkwNTc5NzEsInkiOjY1Nn1d" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M278.141,274L278.141,282.167C278.141,290.333,278.141,306.667,278.141,327C278.141,347.333,278.141,371.667,278.141,396C278.141,420.333,278.141,444.667,278.141,465C278.141,485.333,278.141,501.667,278.141,509.833L278.141,518" id="my-svg-edge5" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge5" data-points="W3sieCI6Mjc4LjE0MDYyNSwieSI6Mjc0fSx7IngiOjI3OC4xNDA2MjUsInkiOjMyM30seyJ4IjoyNzguMTQwNjI1LCJ5IjozOTZ9LHsieCI6Mjc4LjE0MDYyNSwieSI6NDY5fSx7IngiOjI3OC4xNDA2MjUsInkiOjUxOH1d" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M278.141,558L278.141,566.167C278.141,574.333,278.141,590.667,268.072,607C258.003,623.333,237.866,639.667,227.797,647.833L217.728,656" id="my-svg-edge6" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge6" data-points="W3sieCI6Mjc4LjE0MDYyNSwieSI6NTU4fSx7IngiOjI3OC4xNDA2MjUsInkiOjYwN30seyJ4IjoyMTcuNzI4Mzc0MDk0MjAyOSwieSI6NjU2fV0=" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M300.789,263.232L325.225,273.194C349.661,283.155,398.534,303.077,422.97,321.872C447.406,340.667,447.406,358.333,447.406,367.167L447.406,376" id="my-svg-edge7" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge7" data-points="W3sieCI6MzAwLjc4OTA2MjUsInkiOjI2My4yMzI0ODQwNzY0MzMxNH0seyJ4Ijo0NDcuNDA2MjUsInkiOjMyM30seyJ4Ijo0NDcuNDA2MjUsInkiOjM3Nn1d" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M447.406,416L447.406,424.833C447.406,433.667,447.406,451.333,447.406,468.333C447.406,485.333,447.406,501.667,447.406,509.833L447.406,518" id="my-svg-edge8" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge8" data-points="W3sieCI6NDQ3LjQwNjI1LCJ5Ijo0MTZ9LHsieCI6NDQ3LjQwNjI1LCJ5Ijo0Njl9LHsieCI6NDQ3LjQwNjI1LCJ5Ijo1MTh9XQ==" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(278.140625, 71)"><g class="label" data-id="edge0" transform="translate(-100, -24)"><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="edgeLabel"><p>authorized PUT (engine refs++)</p></span></div>
<p></foreignObject></g></g><g class="edgeLabel" transform="translate(278.140625, 197)"><g class="label" data-id="edge1" transform="translate(-69.3203125, -12)"><foreignObject width="138.640625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>retainUntil in future</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(108, 323)"><g class="label" data-id="edge2" transform="translate(-61.140625, -12)"><foreignObject width="122.28125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>now &gt; retainUntil</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(108, 469)"><g class="label" data-id="edge3" transform="translate(-99.484375, -12)"><foreignObject width="198.96875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>sweep() purges pin, decRef</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(108, 607)"><g class="label" data-id="edge4" transform="translate(-100, -24)"><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="edgeLabel"><p>refs==0 → blob GC + signed tombstone</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(278.140625, 396)"><g class="label" data-id="edge5" transform="translate(-100, -24)"><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="edgeLabel"><p>disk ≥ 97% (soonest-expiry first)</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge6" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(447.40625, 323)"><g class="label" data-id="edge7" transform="translate(-100, -24)"><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="edgeLabel"><p>custody expiry pass / source-retired claim</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(447.40625, 469)"><g class="label" data-id="edge8" transform="translate(-100, -24)"><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="edgeLabel"><p>peer relays sign custody-expiry-witness</p></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="my-svg-state-root_start-0" data-look="classic" transform="translate(278.140625, 15)"><circle class="state-start" r="7" width="14" height="14"/></g><g class="node  statediagram-state" id="my-svg-state-Pinned-1" data-look="classic" transform="translate(278.140625, 140)"><rect class="basic label-container" style="" rx="5" ry="5" x="-32.9453125" y="-20" width="65.890625" height="40"/><g class="label" style="" transform="translate(-24.9453125, -12)"><rect/><foreignObject width="49.890625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>Pinned</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-Live-7" data-look="classic" transform="translate(278.140625, 254)"><rect class="basic label-container" style="" rx="5" ry="5" x="-22.6484375" y="-20" width="45.296875" height="40"/><g class="label" style="" transform="translate(-14.6484375, -12)"><rect/><foreignObject width="29.296875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>Live</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-Expired-3" data-look="classic" transform="translate(108, 396)"><rect class="basic label-container" style="" rx="5" ry="5" x="-35.140625" y="-20" width="70.28125" height="40"/><g class="label" style="" transform="translate(-27.140625, -12)"><rect/><foreignObject width="54.28125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>Expired</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-Swept-4" data-look="classic" transform="translate(108, 538)"><rect class="basic label-container" style="" rx="5" ry="5" x="-30.71875" y="-20" width="61.4375" height="40"/><g class="label" style="" transform="translate(-22.71875, -12)"><rect/><foreignObject width="45.4375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>Swept</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-Tombstoned-6" data-look="classic" transform="translate(193.0703125, 676)"><rect class="basic label-container" style="" rx="5" ry="5" x="-53.203125" y="-20" width="106.40625" height="40"/><g class="label" style="" transform="translate(-45.203125, -12)"><rect/><foreignObject width="90.40625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>Tombstoned</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-ForceShed-6" data-look="classic" transform="translate(278.140625, 538)"><rect class="basic label-container" style="" rx="5" ry="5" x="-47.1640625" y="-20" width="94.328125" height="40"/><g class="label" style="" transform="translate(-39.1640625, -12)"><rect/><foreignObject width="78.328125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>ForceShed</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-Burned-8" data-look="classic" transform="translate(447.40625, 396)"><rect class="basic label-container" style="" rx="5" ry="5" x="-34.265625" y="-20" width="68.53125" height="40"/><g class="label" style="" transform="translate(-26.265625, -12)"><rect/><foreignObject width="52.53125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>Burned</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-Witnessed-8" data-look="classic" transform="translate(447.40625, 538)"><rect class="basic label-container" style="" rx="5" ry="5" x="-46.2421875" y="-20" width="92.484375" height="40"/><g class="label" style="" transform="translate(-38.2421875, -12)"><rect/><foreignObject width="76.484375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>Witnessed</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs></svg></div></p>
<ul>
<li>A cell lives while ≥1 live pin; <code>sweep()</code> purges expired pins and GCs unreferenced blobs with signed tombstones.</li>
<li>Disk pressure: expired-only at ≥85%, force-shed live pins at ≥97% (256/sweep cap).</li>
<li>Custody expiry monitor (60 s tick) unseeds expired custody entries and auto-signs <code>custody-non-serving-proof</code> (throws <code>STILL_SERVING</code> if anything remains); a valid <code>source-retired</code> triggers an <strong>immediate</strong> burn. Peer relays then witness each non-serving proof with <code>custody-expiry-witness</code> tombstones (self-witness refused).</li>
</ul>
<h2>5. Custody state machine</h2>
<div class="mermaid-figure"><svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="statediagram" style="max-width: 354px; background-color: transparent;" viewBox="0 0 354 900" role="graphics-document document" aria-roledescription="stateDiagram"><style>#my-svg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#5a7196;stroke:#5a7196;}#my-svg .marker.cross{stroke:#5a7196;}#my-svg svg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg defs [id$="-barbEnd"]{fill:#333333;stroke:#333333;}#my-svg g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#my-svg g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#my-svg g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#my-svg g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#my-svg g.stateGroup line{stroke:#5a7196;stroke-width:1;}#my-svg .transition{stroke:#333333;stroke-width:1;fill:none;}#my-svg .stateGroup .composit{fill:white;border-bottom:1px;}#my-svg .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#my-svg .state-note{stroke:#aaaa33;fill:#fff5ad;}#my-svg .state-note text{fill:black;stroke:none;font-size:10px;}#my-svg .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#my-svg .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#my-svg .edgeLabel{background-color:#ffffff;text-align:center;}#my-svg .edgeLabel p{background-color:#ffffff;}#my-svg .edgeLabel rect{opacity:0.5;background-color:#ffffff;fill:#ffffff;}#my-svg .edgeLabel .label text{fill:#333;}#my-svg .label div .edgeLabel{color:#333;}#my-svg .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#my-svg .node circle.state-start{fill:#5a7196;stroke:#5a7196;}#my-svg .node .fork-join{fill:#5a7196;stroke:#5a7196;}#my-svg .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#my-svg .end-state-inner{fill:white;stroke-width:1.5;}#my-svg .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg [id$="-barbEnd"]{fill:#5a7196;}#my-svg .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .cluster-label,#my-svg .nodeLabel{color:#131300;}#my-svg .statediagram-cluster rect.outer{rx:5px;ry:5px;}#my-svg .statediagram-state .divider{stroke:#9370DB;}#my-svg .statediagram-state .title-state{rx:5px;ry:5px;}#my-svg .statediagram-cluster.statediagram-cluster .inner{fill:white;}#my-svg .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#my-svg .statediagram-cluster .inner{rx:0;ry:0;}#my-svg .statediagram-state rect.basic{rx:5px;ry:5px;}#my-svg .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#my-svg .note-edge{stroke-dasharray:5;}#my-svg .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#my-svg .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#my-svg .statediagram-note text{fill:black;}#my-svg .statediagram-note .nodeLabel{color:black;}#my-svg .statediagram .edgeLabel{color:red;}#my-svg [id$="-dependencyStart"],#my-svg [id$="-dependencyEnd"]{fill:#5a7196;stroke:#5a7196;stroke-width:1;}#my-svg .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg [data-look="neo"].statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1;}#my-svg [data-look="neo"].statediagram-cluster rect.outer{rx:5px;ry:5px;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].swimlane.cluster rect{filter:none;}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><defs><marker id="my-svg_stateDiagram-barbEnd" refX="19" refY="7" markerWidth="20" markerHeight="14" markerUnits="userSpaceOnUse" orient="auto"><path d="M 19,7 L9,13 L14,7 L9,1 Z"/></marker></defs><g class="root"><g class="clusters"/><g class="edgePaths"><path d="M197.5,22L197.5,26.167C197.5,30.333,197.5,38.667,197.5,47C197.5,55.333,197.5,63.667,197.5,67.833L197.5,72" id="my-svg-edge0" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge0" data-points="W3sieCI6MTk3LjUsInkiOjIyfSx7IngiOjE5Ny41LCJ5Ijo0N30seyJ4IjoxOTcuNSwieSI6NzJ9XQ==" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M197.5,112L197.5,118.167C197.5,124.333,197.5,136.667,197.5,149C197.5,161.333,197.5,173.667,197.5,179.833L197.5,186" id="my-svg-edge1" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge1" data-points="W3sieCI6MTk3LjUsInkiOjExMn0seyJ4IjoxOTcuNSwieSI6MTQ5fSx7IngiOjE5Ny41LCJ5IjoxODZ9XQ==" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M197.5,226L197.5,232.167C197.5,238.333,197.5,250.667,197.5,263C197.5,275.333,197.5,287.667,197.5,293.833L197.5,300" id="my-svg-edge2" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge2" data-points="W3sieCI6MTk3LjUsInkiOjIyNn0seyJ4IjoxOTcuNSwieSI6MjYzfSx7IngiOjE5Ny41LCJ5IjozMDB9XQ==" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M171.558,340L160.965,348.167C150.372,356.333,129.186,372.667,118.593,389C108,405.333,108,421.667,108,429.833L108,438" id="my-svg-edge3" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge3" data-points="W3sieCI6MTcxLjU1Nzk3MTAxNDQ5Mjc1LCJ5IjozNDB9LHsieCI6MTA4LCJ5IjozODl9LHsieCI6MTA4LCJ5Ijo0Mzh9XQ==" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M223.442,340L234.035,348.167C244.628,356.333,265.814,372.667,276.407,389C287,405.333,287,421.667,287,429.833L287,438" id="my-svg-edge4" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge4" data-points="W3sieCI6MjIzLjQ0MjAyODk4NTUwNzI1LCJ5IjozNDB9LHsieCI6Mjg3LCJ5IjozODl9LHsieCI6Mjg3LCJ5Ijo0Mzh9XQ==" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M108,478L108,486.167C108,494.333,108,510.667,108,527C108,543.333,108,559.667,108,567.833L108,576" id="my-svg-edge5" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge5" data-points="W3sieCI6MTA4LCJ5Ijo0Nzh9LHsieCI6MTA4LCJ5Ijo1Mjd9LHsieCI6MTA4LCJ5Ijo1NzZ9XQ==" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M108,616L108,622.167C108,628.333,108,640.667,108,653C108,665.333,108,677.667,108,683.833L108,690" id="my-svg-edge6" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge6" data-points="W3sieCI6MTA4LCJ5Ijo2MTZ9LHsieCI6MTA4LCJ5Ijo2NTN9LHsieCI6MTA4LCJ5Ijo2OTB9XQ==" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/><path d="M108,730L108,740.167C108,750.333,108,770.667,108,791C108,811.333,108,831.667,108,841.833L108,852" id="my-svg-edge7" class="edge-thickness-normal edge-pattern-solid transition" style="fill:none;;;fill:none" data-edge="true" data-et="edge" data-id="edge7" data-points="W3sieCI6MTA4LCJ5Ijo3MzB9LHsieCI6MTA4LCJ5Ijo3OTF9LHsieCI6MTA4LCJ5Ijo4NTJ9XQ==" data-look="classic" marker-end="url(#my-svg_stateDiagram-barbEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="edge0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div>
<p></foreignObject></g></g><g class="edgeLabel" transform="translate(197.5, 149)"><g class="label" data-id="edge1" transform="translate(-39.5234375, -12)"><foreignObject width="79.046875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>valid intent</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(197.5, 263)"><g class="label" data-id="edge2" transform="translate(-77.1953125, -12)"><foreignObject width="154.390625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>first matching receipt</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(108, 389)"><g class="label" data-id="edge3" transform="translate(-100, -24)"><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="edgeLabel"><p>≥ requiredReplicas (distinct share indices)</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(287, 389)"><g class="label" data-id="edge4" transform="translate(-59, -12)"><foreignObject width="118" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>validation failure</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(108, 527)"><g class="label" data-id="edge5" transform="translate(-100, -24)"><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="edgeLabel"><p>commit (receiptRoot + quorum match)</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(108, 653)"><g class="label" data-id="edge6" transform="translate(-79.1328125, -12)"><foreignObject width="158.265625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>publisher relinquishes</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(108, 791)"><g class="label" data-id="edge7" transform="translate(-100, -36)"><foreignObject width="200" height="72"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="edgeLabel"><p>non-serving proofs + witnesses at/after retainUntil</p></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="my-svg-state-root_start-0" data-look="classic" transform="translate(197.5, 15)"><circle class="state-start" r="7" width="14" height="14"/></g><g class="node  statediagram-state" id="my-svg-state-NONE-1" data-look="classic" transform="translate(197.5, 92)"><rect class="basic label-container" style="" rx="5" ry="5" x="-30.1875" y="-20" width="60.375" height="40"/><g class="label" style="" transform="translate(-22.1875, -12)"><rect/><foreignObject width="44.375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>NONE</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-INTENT_PUBLISHED-2" data-look="classic" transform="translate(197.5, 206)"><rect class="basic label-container" style="" rx="5" ry="5" x="-83.15625" y="-20" width="166.3125" height="40"/><g class="label" style="" transform="translate(-75.15625, -12)"><rect/><foreignObject width="150.3125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>INTENT_PUBLISHED</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-RECEIPTS_COLLECTING-4" data-look="classic" transform="translate(197.5, 320)"><rect class="basic label-container" style="" rx="5" ry="5" x="-97.625" y="-20" width="195.25" height="40"/><g class="label" style="" transform="translate(-89.625, -12)"><rect/><foreignObject width="179.25" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>RECEIPTS_COLLECTING</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-QUORUM_REACHED-5" data-look="classic" transform="translate(108, 458)"><rect class="basic label-container" style="" rx="5" ry="5" x="-84.1953125" y="-20" width="168.390625" height="40"/><g class="label" style="" transform="translate(-76.1953125, -12)"><rect/><foreignObject width="152.390625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>QUORUM_REACHED</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-ABORTED-4" data-look="classic" transform="translate(287, 458)"><rect class="basic label-container" style="" rx="5" ry="5" x="-44.6015625" y="-20" width="89.203125" height="40"/><g class="label" style="" transform="translate(-36.6015625, -12)"><rect/><foreignObject width="73.203125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>ABORTED</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-COMMITTED-6" data-look="classic" transform="translate(108, 596)"><rect class="basic label-container" style="" rx="5" ry="5" x="-55.3359375" y="-20" width="110.671875" height="40"/><g class="label" style="" transform="translate(-47.3359375, -12)"><rect/><foreignObject width="94.671875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>COMMITTED</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-SOURCE_RETIRED-7" data-look="classic" transform="translate(108, 710)"><rect class="basic label-container" style="" rx="5" ry="5" x="-76.375" y="-20" width="152.75" height="40"/><g class="label" style="" transform="translate(-68.375, -12)"><rect/><foreignObject width="136.75" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>SOURCE_RETIRED</p></span></div></foreignObject></g></g><g class="node  statediagram-state" id="my-svg-state-AUDITED-7" data-look="classic" transform="translate(108, 872)"><rect class="basic label-container" style="" rx="5" ry="5" x="-41.6796875" y="-20" width="83.359375" height="40"/><g class="label" style="" transform="translate(-33.6796875, -12)"><rect/><foreignObject width="67.359375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel markdown-node-label"><p>AUDITED</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs></svg></div></p>
<p>Transition guards (<code>validateCustodyTransition()</code>): receipts must match the intent (<code>blindContentId</code>, <code>ciphertextRoot</code>, version), arrive before <code>deadline</code>, carry <code>retainUntil ≥ intent.retainUntil</code>, and — for PVSS — echo the scheme, match assignments <strong>and</strong> manifest, and have <code>shareVerified: true</code>. Commits stay pending (not rejected) when quorum data hasn&#39;t arrived yet. Entry freshness: ±10 min skew, 180-day max age.</p>
<h2>6. Data structures (wire formats)</h2>
<ul>
<li><strong>Cell</strong>: canonical JSON <code>{v:1, scheme, index, share, shareholder, encryptedShare, proof:{e,s}}</code> — 66-hex points / 64-hex scalars, fixed key order.</li>
<li><strong>Intent v2 share fields</strong>: <code>shareScheme, shareThreshold, commitmentRoot, shareAssignments[], shareManifest[]</code> (+ optional <code>shareBundleKey</code> for the bundle generation).</li>
<li><strong>Receipt v2 share fields</strong>: <code>shareScheme, commitmentRoot, shareIndex, shareCommitment, shareVerified</code>.</li>
<li><strong>Pin</strong> (7 signed fields): <code>{reason, hash, pinner, custodyIntentId, shareIndex, retainUntil, nonce}</code> — identical pins collapse to one <code>pinRef</code> (retry-safe).</li>
<li><strong>Proofs</strong>: Mode R (bytes+nonce), Mode A (claim+nonce), Mode T (tombstone), each with an explicit <code>limitation</code> field.</li>
</ul>
<h2>7. Config and limits</h2>
<ul>
<li>Relay custody block: <code>custody.{defaultMode:&#39;blind&#39;, requireEncryptedPayload, metadataVisibility:&#39;redacted&#39;, proofTarget:&#39;ciphertext&#39;, defaultRetainMs:30d}</code>, expiry tick 60 s.</li>
<li>Shard-store is opt-in: <code>plugins: [&#39;shard-store&#39;]</code>; relay narrows <code>putAuth</code> to <code>[&#39;custody&#39;]</code> by default.</li>
<li>Limits: 4 MiB/cell, ≤255 shares, proof token bucket 600/h, 1200 req/min/IP on the shard HTTP surface, custody gossip frames ≤256 KB.</li>
<li>Simulation-recommended production profile: <strong>16 cells, 10-of-16 reconstruct, 13-of-16 receipt quorum, 7 diverse witnesses</strong>.</li>
</ul>
<h2>8. Honest gaps (do not overclaim)</h2>
<ol>
<li>&quot;Cells&quot; is team slang for shard blobs — this doc defines the mapping; the code has no <code>cell</code> symbol.</li>
<li><code>disperse()</code> publishes intents and PUTs cells; it does <strong>not</strong> drive receipts/commit (app or seedApp path does).</li>
<li>Cell <strong>repair/re-replication is spec-only</strong> (M4 roadmap): client-side recovery helpers ship, but no relay-side DHT announce or AutoHeal integration for cells exists.</li>
<li>Two share transports coexist: whole-bundle hypercore (<code>shareBundleKey</code>) and per-share cells (<code>shareManifest</code>); both validate as v2 intents.</li>
<li>No provable physical deletion; no confidentiality against a malicious dealer; witness collusion is possible — all documented non-claims.</li>
</ol>
<h2>9. Where it plugs in</h2>
<ul>
<li><strong>Registry/gossip</strong>: custody entries live in hypercore multi-writer logs and the <code>hiverelay-custody</code> Protomux channel.</li>
<li><strong>Seeding pipeline</strong>: receipts anchor only inside <code>seedApp</code>/re-pin.</li>
<li><strong>Accounting</strong>: cell bytes register as external source <code>&#39;shard-store&#39;</code> for eviction/adoption guards.</li>
<li><strong>Reads</strong>: cells are fetched per-hash over HTTP; content reads of decrypted payloads never touch relays.</li>
</ul>
<p>Related docs: <code>ATOMIC-BLIND-CUSTODY.md</code>, <code>PVSS-BLIND-CUSTODY.md</code>, <code>BLIND-SHARD-STORE-SPEC.md</code>, <code>BLIND-SHARD-DEALER-CONTRACT.md</code>, <code>CRYPTO-GUARANTEES.md</code>.</p>

<hr>
<p style="color:#7a869e;font-size:.8rem">HiveRelay release documentation — rendered 2026-07-18. Source: <code>docs/BLIND-CELLS</code> in the hiverelay repository.</p>
</div>
</body>
</html>