<mxfile host="Electron" agent="tepp-omega-visual" version="29.3.0">
  <diagram name="Six event kinds — and where they live" id="06-event-kinds">
    <mxGraphModel dx="1600" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1860" pageHeight="930" background="#ffffff" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="06-2" value='&lt;font style="font-size:30px"&gt;&lt;b&gt;Six event kinds — and where they live&lt;/b&gt;&lt;/font&gt;' style="text;html=1;align=left;verticalAlign=middle;fontColor=#1f2933;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="40" y="24" width="1780" height="44" as="geometry" /></mxCell>
        <mxCell id="06-3" value='&lt;font style="font-size:17px" color="#52606d"&gt;Policy is ordinary Nostr events. The kind number is the type and the version: a breaking change is a new kind, never a version field.&lt;/font&gt;' style="text;html=1;align=left;verticalAlign=middle;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="40" y="68" width="1780" height="30" as="geometry" /></mxCell>
        <mxCell id="06-4" value="&lt;b&gt;Who governs&lt;/b&gt;" style="rounded=1;arcSize=14;absoluteArcSize=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#6c8ebf;strokeWidth=1.5;dashed=1;dashPattern=8 6;verticalAlign=top;align=left;fontSize=15;fontFamily=Helvetica;fontColor=#6c8ebf;spacingLeft=14;spacingTop=6;" vertex="1" parent="1"><mxGeometry x="30" y="112" width="1800" height="216" as="geometry" /></mxCell>
        <mxCell id="06-5" value='&lt;font style="font-size:17px"&gt;&lt;b&gt;17710 · The association&lt;/b&gt;&lt;/font&gt;' style="swimlane;html=1;startSize=34;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=1.5;swimlaneFillColor=#ffffff;rounded=1;arcSize=8;absoluteArcSize=1;fontFamily=Helvetica;fontColor=#1f2933;align=center;verticalAlign=middle;collapsible=0;" vertex="1" parent="1"><mxGeometry x="50" y="148" width="560" height="150" as="geometry" /></mxCell>
        <mxCell id="06-6" value="&lt;b&gt;author&lt;/b&gt;  the subject&lt;br&gt;&lt;b&gt;content&lt;/b&gt;  public guardians as &lt;font face=&quot;Courier New&quot;&gt;p&lt;/font&gt; tags; private guardians NIP-44-encrypted to the subject's own key&lt;br&gt;&lt;b&gt;tags&lt;/b&gt;  &lt;font face=&quot;Courier New&quot;&gt;p&lt;/font&gt;  ·  &lt;font face=&quot;Courier New&quot;&gt;alt&lt;/font&gt;&lt;br&gt;&lt;b&gt;rule&lt;/b&gt;  the newest valid one applies; none valid → unbound: nothing is signed" style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fontSize=14.5;fontFamily=Helvetica;fontColor=#1f2933;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="06-5"><mxGeometry x="10" y="40" width="540" height="104" as="geometry" /></mxCell>
        <mxCell id="06-7" value="&lt;b&gt;replaceable&lt;/b&gt;" style="rounded=1;arcSize=50;whiteSpace=wrap;html=1;fillColor=#6c8ebf;strokeColor=none;fontColor=#ffffff;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="06-5"><mxGeometry x="452" y="7" width="100" height="20" as="geometry" /></mxCell>
        <mxCell id="06-8" value='&lt;font style="font-size:17px"&gt;&lt;b&gt;7710 · Open offer&lt;/b&gt;&lt;/font&gt;' style="swimlane;html=1;startSize=34;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=1.5;swimlaneFillColor=#ffffff;rounded=1;arcSize=8;absoluteArcSize=1;fontFamily=Helvetica;fontColor=#1f2933;align=center;verticalAlign=middle;collapsible=0;" vertex="1" parent="1"><mxGeometry x="650" y="148" width="560" height="150" as="geometry" /></mxCell>
        <mxCell id="06-9" value='&lt;b&gt;author&lt;/b&gt;  a current guardian&lt;br&gt;&lt;b&gt;content&lt;/b&gt;  the offer template: &lt;font face="Courier New"&gt;replaces&lt;/font&gt;, &lt;font face="Courier New"&gt;public&lt;/font&gt; — its &lt;font face="Courier New"&gt;sealed&lt;/font&gt; stays empty&lt;br&gt;&lt;b&gt;tags&lt;/b&gt;  &lt;font face="Courier New"&gt;expiration&lt;/font&gt;  ·  &lt;font face="Courier New"&gt;alt&lt;/font&gt; — no &lt;font face="Courier New"&gt;p&lt;/font&gt; tag: offers are found by author&lt;br&gt;&lt;b&gt;rule&lt;/b&gt;  proposes the successor association; the subject ratifies or ignores it' style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fontSize=14.5;fontFamily=Helvetica;fontColor=#1f2933;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="06-8"><mxGeometry x="10" y="40" width="540" height="104" as="geometry" /></mxCell>
        <mxCell id="06-10" value="&lt;b&gt;regular&lt;/b&gt;" style="rounded=1;arcSize=50;whiteSpace=wrap;html=1;fillColor=#d79b00;strokeColor=none;fontColor=#ffffff;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="06-8"><mxGeometry x="484" y="7" width="68" height="20" as="geometry" /></mxCell>
        <mxCell id="06-11" value='&lt;font style="font-size:17px"&gt;&lt;b&gt;7711 · Sealed offer&lt;/b&gt;&lt;/font&gt;' style="swimlane;html=1;startSize=34;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=1.5;swimlaneFillColor=#ffffff;rounded=1;arcSize=8;absoluteArcSize=1;fontFamily=Helvetica;fontColor=#1f2933;align=center;verticalAlign=middle;collapsible=0;" vertex="1" parent="1"><mxGeometry x="1250" y="148" width="560" height="150" as="geometry" /></mxCell>
        <mxCell id="06-12" value='&lt;b&gt;author&lt;/b&gt;  a current guardian&lt;br&gt;&lt;b&gt;content&lt;/b&gt;  the same template, NIP-44-encrypted to the subject&lt;br&gt;&lt;b&gt;tags&lt;/b&gt;  &lt;font face="Courier New"&gt;expiration&lt;/font&gt;  ·  &lt;font face="Courier New"&gt;alt&lt;/font&gt;&lt;br&gt;&lt;b&gt;rule&lt;/b&gt;  required whenever the current or the proposed association has a private guardian' style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fontSize=14.5;fontFamily=Helvetica;fontColor=#1f2933;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="06-11"><mxGeometry x="10" y="40" width="540" height="104" as="geometry" /></mxCell>
        <mxCell id="06-13" value="&lt;b&gt;regular&lt;/b&gt;" style="rounded=1;arcSize=50;whiteSpace=wrap;html=1;fillColor=#d79b00;strokeColor=none;fontColor=#ffffff;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="06-11"><mxGeometry x="484" y="7" width="68" height="20" as="geometry" /></mxCell>
        <mxCell id="06-14" value="&lt;b&gt;What is allowed&lt;/b&gt;" style="rounded=1;arcSize=14;absoluteArcSize=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#d79b00;strokeWidth=1.5;dashed=1;dashPattern=8 6;verticalAlign=top;align=left;fontSize=15;fontFamily=Helvetica;fontColor=#d79b00;spacingLeft=14;spacingTop=6;" vertex="1" parent="1"><mxGeometry x="30" y="340" width="1190" height="216" as="geometry" /></mxCell>
        <mxCell id="06-15" value="&lt;b&gt;Reusable rules&lt;/b&gt;" style="rounded=1;arcSize=14;absoluteArcSize=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#d6b656;strokeWidth=1.5;dashed=1;dashPattern=8 6;verticalAlign=top;align=left;fontSize=15;fontFamily=Helvetica;fontColor=#d6b656;spacingLeft=14;spacingTop=6;" vertex="1" parent="1"><mxGeometry x="1236" y="340" width="594" height="216" as="geometry" /></mxCell>
        <mxCell id="06-16" value='&lt;font style="font-size:17px"&gt;&lt;b&gt;37710 · Open policy carrier&lt;/b&gt;&lt;/font&gt;' style="swimlane;html=1;startSize=34;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=1.5;swimlaneFillColor=#ffffff;rounded=1;arcSize=8;absoluteArcSize=1;fontFamily=Helvetica;fontColor=#1f2933;align=center;verticalAlign=middle;collapsible=0;" vertex="1" parent="1"><mxGeometry x="50" y="376" width="560" height="150" as="geometry" /></mxCell>
        <mxCell id="06-17" value='&lt;b&gt;author&lt;/b&gt;  a guardian (binding) — or anyone (general)&lt;br&gt;&lt;b&gt;content&lt;/b&gt;  the policy document: &lt;font face="Courier New"&gt;global&lt;/font&gt;, &lt;font face="Courier New"&gt;deny&lt;/font&gt;, &lt;font face="Courier New"&gt;permissions&lt;/font&gt;&lt;br&gt;&lt;b&gt;tags&lt;/b&gt;  &lt;font face="Courier New"&gt;d&lt;/font&gt;  ·  &lt;font face="Courier New"&gt;alt&lt;/font&gt;&lt;br&gt;&lt;b&gt;rule&lt;/b&gt;  binding at &lt;font face="Courier New"&gt;37710:G:S&lt;/font&gt;; a general carrier binds nobody directly' style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fontSize=14.5;fontFamily=Helvetica;fontColor=#1f2933;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="06-16"><mxGeometry x="10" y="40" width="540" height="104" as="geometry" /></mxCell>
        <mxCell id="06-18" value="&lt;b&gt;addressable&lt;/b&gt;" style="rounded=1;arcSize=50;whiteSpace=wrap;html=1;fillColor=#d79b00;strokeColor=none;fontColor=#ffffff;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="06-16"><mxGeometry x="452" y="7" width="100" height="20" as="geometry" /></mxCell>
        <mxCell id="06-19" value='&lt;font style="font-size:17px"&gt;&lt;b&gt;37711 · Sealed policy carrier&lt;/b&gt;&lt;/font&gt;' style="swimlane;html=1;startSize=34;fillColor=#e3e7ee;strokeColor=#56657a;strokeWidth=1.5;swimlaneFillColor=#ffffff;rounded=1;arcSize=8;absoluteArcSize=1;fontFamily=Helvetica;fontColor=#1f2933;align=center;verticalAlign=middle;collapsible=0;" vertex="1" parent="1"><mxGeometry x="650" y="376" width="560" height="150" as="geometry" /></mxCell>
        <mxCell id="06-20" value='&lt;b&gt;author&lt;/b&gt;  a current guardian&lt;br&gt;&lt;b&gt;content&lt;/b&gt;  the same policy document, NIP-44-encrypted to the subject&lt;br&gt;&lt;b&gt;tags&lt;/b&gt;  &lt;font face="Courier New"&gt;d&lt;/font&gt;  ·  &lt;font face="Courier New"&gt;alt&lt;/font&gt; — no &lt;font face="Courier New"&gt;p&lt;/font&gt; tag&lt;br&gt;&lt;b&gt;rule&lt;/b&gt;  binding at &lt;font face="Courier New"&gt;37711:G:blind(G,S)&lt;/font&gt;; grants exactly as an open one' style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fontSize=14.5;fontFamily=Helvetica;fontColor=#1f2933;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="06-19"><mxGeometry x="10" y="40" width="540" height="104" as="geometry" /></mxCell>
        <mxCell id="06-21" value="&lt;b&gt;addressable&lt;/b&gt;" style="rounded=1;arcSize=50;whiteSpace=wrap;html=1;fillColor=#56657a;strokeColor=none;fontColor=#ffffff;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="06-19"><mxGeometry x="452" y="7" width="100" height="20" as="geometry" /></mxCell>
        <mxCell id="06-22" value='&lt;font style="font-size:17px"&gt;&lt;b&gt;7712 · Restriction profile&lt;/b&gt;&lt;/font&gt;' style="swimlane;html=1;startSize=34;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=1.5;swimlaneFillColor=#ffffff;rounded=1;arcSize=8;absoluteArcSize=1;fontFamily=Helvetica;fontColor=#1f2933;align=center;verticalAlign=middle;collapsible=0;" vertex="1" parent="1"><mxGeometry x="1250" y="376" width="560" height="150" as="geometry" /></mxCell>
        <mxCell id="06-23" value='&lt;b&gt;author&lt;/b&gt;  anyone — authorship gives no standing&lt;br&gt;&lt;b&gt;content&lt;/b&gt;  &lt;font face="Courier New"&gt;{"restrictions": [ … ]}&lt;/font&gt; — public plaintext&lt;br&gt;&lt;b&gt;tags&lt;/b&gt;  &lt;font face="Courier New"&gt;alt&lt;/font&gt; only: immutable, referenced by its event id&lt;br&gt;&lt;b&gt;rule&lt;/b&gt;  binds nobody until a carrier references it; can never admit anyone' style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fontSize=14.5;fontFamily=Helvetica;fontColor=#1f2933;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="06-22"><mxGeometry x="10" y="40" width="540" height="104" as="geometry" /></mxCell>
        <mxCell id="06-24" value="&lt;b&gt;regular&lt;/b&gt;" style="rounded=1;arcSize=50;whiteSpace=wrap;html=1;fillColor=#d6b656;strokeColor=none;fontColor=#ffffff;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="06-22"><mxGeometry x="484" y="7" width="68" height="20" as="geometry" /></mxCell>
        <mxCell id="06-25" value="&lt;font style=&quot;font-size:21px&quot;&gt;&lt;b&gt;Where a subject's policy lives&lt;/b&gt;&lt;/font&gt;" style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fontSize=15;fontFamily=Helvetica;fontColor=#1f2933;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="40" y="584" width="1000" height="34" as="geometry" /></mxCell>
        <mxCell id="06-26" value="&lt;b&gt;Guardian G&lt;/b&gt;&lt;br&gt;and&lt;br&gt;&lt;b&gt;subject S&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#4d4d4d;strokeWidth=1.5;fontSize=15;align=center;verticalAlign=middle;fontFamily=Helvetica;fontColor=#1f2933;spacing=8;arcSize=8;absoluteArcSize=1;" vertex="1" parent="1"><mxGeometry x="50" y="694" width="190" height="100" as="geometry" /></mxCell>
        <mxCell id="06-27" value="&lt;b&gt;open binding coordinate&lt;/b&gt;&lt;br&gt;&lt;font face=&quot;Courier New&quot;&gt;37710 : G : S&lt;/font&gt;   — the d tag is S's pubkey&lt;br&gt;&lt;font style=&quot;font-size:12px&quot; color=&quot;#52606d&quot;&gt;a public statement of the relationship; authoring clients warn&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=1.5;fontSize=14;align=left;verticalAlign=middle;fontFamily=Helvetica;fontColor=#1f2933;spacing=12;arcSize=8;absoluteArcSize=1;" vertex="1" parent="1"><mxGeometry x="300" y="628" width="520" height="88" as="geometry" /></mxCell>
        <mxCell id="06-28" value='&lt;b&gt;sealed binding coordinate&lt;/b&gt;&lt;br&gt;&lt;font face="Courier New"&gt;37711 : G : blind(G,S)&lt;/font&gt;&lt;br&gt;&lt;font face="Courier New"&gt;blind = hex(SHA-256("tepp-sealed-policy-addr" ‖ convkey(G,S)))[0..32]&lt;/font&gt;&lt;br&gt;&lt;font style="font-size:12px" color="#52606d"&gt;only G and S can compute it; to anyone else it is noise&lt;/font&gt;' style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e3e7ee;strokeColor=#56657a;strokeWidth=1.5;fontSize=14;align=left;verticalAlign=middle;fontFamily=Helvetica;fontColor=#1f2933;spacing=12;arcSize=8;absoluteArcSize=1;" vertex="1" parent="1"><mxGeometry x="300" y="748" width="520" height="108" as="geometry" /></mxCell>
        <mxCell id="06-29" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#d79b00;strokeWidth=2;fontSize=13;fontFamily=Helvetica;fontColor=#1f2933;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;endSize=7;startArrow=none;exitX=1;exitY=0.3;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="06-26" target="06-27"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="06-30" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#56657a;strokeWidth=2;fontSize=13;fontFamily=Helvetica;fontColor=#1f2933;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;endSize=7;startArrow=none;exitX=1;exitY=0.7;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="06-26" target="06-28"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="06-31" value="&lt;b&gt;A carrier binds S&lt;/b&gt;&lt;br&gt;if and only if its author is a current guardian of S and it sits at one of those two addresses. So the subject knows exactly where to look: at most two coordinates per guardian, computable in advance.&lt;br&gt;&lt;br&gt;A withheld carrier is not silence. On first load, if every counting relay answers, none returns a carrier and nothing is stored, the coordinate is known-missing — a conclusive outcome. A carrier already held is never removed by silence." style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#4d4d4d;strokeWidth=1.5;fontSize=14;align=left;verticalAlign=top;fontFamily=Helvetica;fontColor=#1f2933;spacing=14;arcSize=8;absoluteArcSize=1;" vertex="1" parent="1"><mxGeometry x="860" y="628" width="460" height="228" as="geometry" /></mxCell>
        <mxCell id="06-32" value="&lt;b&gt;Strict by design&lt;/b&gt;&lt;br&gt;Every TEPP event's tags are an allow-list, and TEPP's own JSON payloads are parsed strictly: an unknown key, a duplicate key or a null invalidates the payload — loudly.&lt;br&gt;&lt;br&gt;A keyless client, which cannot compute blind(G,S), learns the sealed address once by trial decryption through its signer.&lt;br&gt;&lt;br&gt;A carrier is retired by republishing &lt;font face=&quot;Courier New&quot;&gt;{}&lt;/font&gt; at its coordinate." style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#4d4d4d;strokeWidth=1.5;fontSize=14;align=left;verticalAlign=top;fontFamily=Helvetica;fontColor=#1f2933;spacing=14;arcSize=8;absoluteArcSize=1;" vertex="1" parent="1"><mxGeometry x="1340" y="628" width="480" height="228" as="geometry" /></mxCell>
        <mxCell id="06-33" value="" style="endArrow=none;html=1;strokeColor=#d9dee4;strokeWidth=1;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="40" y="882" as="sourcePoint" /><mxPoint x="1820" y="882" as="targetPoint" /></mxGeometry></mxCell>
        <mxCell id="06-34" value='&lt;font color="#52606d"&gt;TEPP Zeta · diagram 06 · statements: EVT-001–EVT-029, ASSOC-001, ASSOC-018, CERE-003, POL-001, POL-066–POL-070, PROF-001–PROF-006, ADDR-001–ADDR-022, CONS-158&lt;/font&gt;' style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=middle;fontSize=12;fontFamily=Helvetica;fontColor=#1f2933;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="40" y="890" width="1780" height="26" as="geometry" /></mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
