<mxfile host="Electron" agent="tepp-omega-visual" version="29.3.0">
  <diagram name="Restrictions: four regimes, two places" id="08-restriction-regimes">
    <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="1110" background="#ffffff" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="08-2" value='&lt;font style="font-size:30px"&gt;&lt;b&gt;Restrictions: four regimes, two places&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="08-3" value="&lt;font style=&quot;font-size:17px&quot; color=&quot;#52606d&quot;&gt;A restriction set resolves against the evaluation's tuple — kind, weekday, minute, direction, opacity — to allow or deny. Where the set lives decides what a deny does.&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="08-4" value="&lt;b&gt;How a set resolves: the first regime whose condition holds&lt;/b&gt;" style="rounded=1;arcSize=14;absoluteArcSize=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#4d4d4d;strokeWidth=1.5;dashed=1;dashPattern=8 6;verticalAlign=top;align=left;fontSize=16;fontFamily=Helvetica;fontColor=#4d4d4d;spacingLeft=14;spacingTop=6;" vertex="1" parent="1"><mxGeometry x="40" y="120" width="880" height="700" as="geometry" /></mxCell>
        <mxCell id="08-5" value='&lt;b&gt;A restriction set meets a tuple&lt;/b&gt;&lt;br&gt;&lt;font face="Courier New"&gt;(kind, weekday, minute, direction, opacity)&lt;/font&gt;' style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#4d4d4d;strokeWidth=1.5;fontSize=14;align=center;verticalAlign=middle;fontFamily=Helvetica;fontColor=#1f2933;spacing=8;arcSize=8;absoluteArcSize=1;" vertex="1" parent="1"><mxGeometry x="70" y="166" width="400" height="74" as="geometry" /></mxCell>
        <mxCell id="08-6" value="&lt;b&gt;Does a deny entry&lt;/b&gt;&lt;br&gt;&lt;b&gt;match?&lt;/b&gt;" style="rhombus;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#4d4d4d;strokeWidth=1.5;fontSize=14;fontFamily=Helvetica;fontColor=#1f2933;" vertex="1" parent="1"><mxGeometry x="120" y="280" width="300" height="110" as="geometry" /></mxCell>
        <mxCell id="08-7" value="&lt;b&gt;Does an allow entry&lt;/b&gt;&lt;br&gt;&lt;b&gt;match?&lt;/b&gt;" style="rhombus;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#4d4d4d;strokeWidth=1.5;fontSize=14;fontFamily=Helvetica;fontColor=#1f2933;" vertex="1" parent="1"><mxGeometry x="120" y="430" width="300" height="110" as="geometry" /></mxCell>
        <mxCell id="08-8" value="&lt;b&gt;Is there any&lt;/b&gt;&lt;br&gt;&lt;b&gt;allow entry at all?&lt;/b&gt;" style="rhombus;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#4d4d4d;strokeWidth=1.5;fontSize=14;fontFamily=Helvetica;fontColor=#1f2933;" vertex="1" parent="1"><mxGeometry x="120" y="580" width="300" height="110" as="geometry" /></mxCell>
        <mxCell id="08-9" value='&lt;b&gt;DENY — REGIME 1&lt;/b&gt;&lt;br&gt;&lt;font style="font-size:12px"&gt;a matching deny decides first, whoever wrote it&lt;/font&gt;' style="rounded=1;arcSize=30;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=2;fontSize=14;fontFamily=Helvetica;fontColor=#1f2933;" vertex="1" parent="1"><mxGeometry x="500" y="300" width="390" height="70" as="geometry" /></mxCell>
        <mxCell id="08-10" value='&lt;b&gt;ALLOW — REGIME 2&lt;/b&gt;&lt;br&gt;&lt;font style="font-size:12px"&gt;any matching allow entry, from any contributor&lt;/font&gt;' style="rounded=1;arcSize=30;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;fontSize=14;fontFamily=Helvetica;fontColor=#1f2933;" vertex="1" parent="1"><mxGeometry x="500" y="450" width="390" height="70" as="geometry" /></mxCell>
        <mxCell id="08-11" value='&lt;b&gt;ALLOW — REGIME 3&lt;/b&gt;&lt;br&gt;&lt;font style="font-size:12px"&gt;an empty or deny-only set constrains only what it names&lt;/font&gt;' style="rounded=1;arcSize=30;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;fontSize=14;fontFamily=Helvetica;fontColor=#1f2933;" vertex="1" parent="1"><mxGeometry x="500" y="600" width="390" height="70" as="geometry" /></mxCell>
        <mxCell id="08-12" value='&lt;b&gt;DENY — REGIME 4&lt;/b&gt;&lt;br&gt;&lt;font style="font-size:12px"&gt;a whitelist closes over everything it does not name — kinds not yet invented included&lt;/font&gt;' style="rounded=1;arcSize=30;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=2;fontSize=14;fontFamily=Helvetica;fontColor=#1f2933;" vertex="1" parent="1"><mxGeometry x="70" y="730" width="400" height="76" as="geometry" /></mxCell>
        <mxCell id="08-13" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#4d4d4d;strokeWidth=2;fontSize=13;fontFamily=Helvetica;fontColor=#1f2933;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;endSize=7;startArrow=none;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="08-5" target="08-6"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="08-14" value="yes" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#b85450;strokeWidth=2;fontSize=13;fontFamily=Helvetica;fontColor=#1f2933;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;endSize=7;startArrow=none;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="08-6" target="08-9"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="08-15" value="no" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#4d4d4d;strokeWidth=2;fontSize=13;fontFamily=Helvetica;fontColor=#1f2933;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;endSize=7;startArrow=none;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="08-6" target="08-7"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="08-16" value="yes" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#82b366;strokeWidth=2;fontSize=13;fontFamily=Helvetica;fontColor=#1f2933;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;endSize=7;startArrow=none;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="08-7" target="08-10"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="08-17" value="no" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#4d4d4d;strokeWidth=2;fontSize=13;fontFamily=Helvetica;fontColor=#1f2933;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;endSize=7;startArrow=none;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="08-7" target="08-8"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="08-18" value="no" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#82b366;strokeWidth=2;fontSize=13;fontFamily=Helvetica;fontColor=#1f2933;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;endSize=7;startArrow=none;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="08-8" target="08-11"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="08-19" value="yes" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#b85450;strokeWidth=2;fontSize=13;fontFamily=Helvetica;fontColor=#1f2933;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;endSize=7;startArrow=none;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="08-8" target="08-12"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="08-20" value='&lt;b&gt;An entry matches&lt;/b&gt;&lt;br&gt;when all five of its fields match the tuple; &lt;font face="Courier New"&gt;*&lt;/font&gt; matches anything. Polarity only decides which regime it feeds; the demand never matters for matching.' style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fontSize=14;fontFamily=Helvetica;fontColor=#1f2933;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="500" y="700" width="400" height="110" as="geometry" /></mxCell>
        <mxCell id="08-21" value='&lt;font style="font-size:16px"&gt;&lt;b&gt;In the global set: a deny blocks the event&lt;/b&gt;&lt;/font&gt;' style="swimlane;html=1;startSize=34;fillColor=#b0e3e6;strokeColor=#0e8088;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="950" y="120" width="870" height="320" as="geometry" /></mxCell>
        <mxCell id="08-22" value="&lt;b&gt;What is in it: &lt;/b&gt;every guardian's global entries, and the entries of every restriction profile a global entry references — one set, unioned.&lt;br&gt;&lt;br&gt;• A deny from the global set blocks the event, in both directions, whatever any permission grants — the guardians' own line included.&lt;br&gt;• Allow entries union across guardians: the widest whitelist anyone references applies.&lt;br&gt;• A deny entry from any guardian holds against all of them — a “never” is a deny, not an omission.&lt;br&gt;&lt;br&gt;&lt;font style=&quot;font-size:12px&quot; color=&quot;#52606d&quot;&gt;e.g. a bedtime for everything:  {deny, *, *, 21:00-07:00, *, *}&lt;/font&gt;" style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fontSize=16;fontFamily=Helvetica;fontColor=#1f2933;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="08-21"><mxGeometry x="10" y="40" width="850" height="274" as="geometry" /></mxCell>
        <mxCell id="08-23" value='&lt;font style="font-size:16px"&gt;&lt;b&gt;On a permission: a deny voids that entry&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="950" y="460" width="870" height="360" as="geometry" /></mxCell>
        <mxCell id="08-24" value="&lt;b&gt;Its sets: &lt;/b&gt;the permission's own restrictions and its grant-scoping profile's — and, for a harvested entry, the harvested permission's two as well. Each set must allow.&lt;br&gt;&lt;br&gt;• A deny makes the entry void for this evaluation: no hit, no coverage, no routing, no demand.&lt;br&gt;• A void entry never denies by itself: another permission that covers the same person still does.&lt;br&gt;• So one guardian's narrow grant never poisons another's broader one.&lt;br&gt;&lt;br&gt;&lt;font style=&quot;font-size:12px&quot; color=&quot;#52606d&quot;&gt;e.g. school friends on school days:  {allow, 1,7, 1,2,3,4,5, 07:00-20:00, *, *}&lt;/font&gt;&lt;br&gt;&lt;font style=&quot;font-size:12px&quot; color=&quot;#52606d&quot;&gt;The one exception: a direct interact/relay permission switches the destination whitelist on just by existing.&lt;/font&gt;" style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fontSize=16;fontFamily=Helvetica;fontColor=#1f2933;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="08-23"><mxGeometry x="10" y="40" width="850" height="314" as="geometry" /></mxCell>
        <mxCell id="08-25" value='&lt;font style="font-size:19px"&gt;&lt;b&gt;Time is local wall-clock&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="850" width="900" height="30" as="geometry" /></mxCell>
        <mxCell id="08-26" value="" style="rounded=0;html=1;fillColor=#f5f7fa;strokeColor=#9aa5b1;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="60" y="910" width="840" height="34" as="geometry" /></mxCell>
        <mxCell id="08-27" value="" style="rounded=0;html=1;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="795.0" y="910" width="105.0" height="34" as="geometry" /></mxCell>
        <mxCell id="08-28" value="" style="rounded=0;html=1;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="60.0" y="910" width="245.0" height="34" as="geometry" /></mxCell>
        <mxCell id="08-29" value="00:00" style="text;html=1;whiteSpace=wrap;align=center;verticalAlign=top;fontSize=12;fontFamily=Helvetica;fontColor=#52606d;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="38.0" y="948" width="44" height="20" as="geometry" /></mxCell>
        <mxCell id="08-30" value="03:00" style="text;html=1;whiteSpace=wrap;align=center;verticalAlign=top;fontSize=12;fontFamily=Helvetica;fontColor=#52606d;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="143.0" y="948" width="44" height="20" as="geometry" /></mxCell>
        <mxCell id="08-31" value="06:00" style="text;html=1;whiteSpace=wrap;align=center;verticalAlign=top;fontSize=12;fontFamily=Helvetica;fontColor=#52606d;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="248.0" y="948" width="44" height="20" as="geometry" /></mxCell>
        <mxCell id="08-32" value="09:00" style="text;html=1;whiteSpace=wrap;align=center;verticalAlign=top;fontSize=12;fontFamily=Helvetica;fontColor=#52606d;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="353.0" y="948" width="44" height="20" as="geometry" /></mxCell>
        <mxCell id="08-33" value="12:00" style="text;html=1;whiteSpace=wrap;align=center;verticalAlign=top;fontSize=12;fontFamily=Helvetica;fontColor=#52606d;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="458.0" y="948" width="44" height="20" as="geometry" /></mxCell>
        <mxCell id="08-34" value="15:00" style="text;html=1;whiteSpace=wrap;align=center;verticalAlign=top;fontSize=12;fontFamily=Helvetica;fontColor=#52606d;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="563.0" y="948" width="44" height="20" as="geometry" /></mxCell>
        <mxCell id="08-35" value="18:00" style="text;html=1;whiteSpace=wrap;align=center;verticalAlign=top;fontSize=12;fontFamily=Helvetica;fontColor=#52606d;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="668.0" y="948" width="44" height="20" as="geometry" /></mxCell>
        <mxCell id="08-36" value="21:00" style="text;html=1;whiteSpace=wrap;align=center;verticalAlign=top;fontSize=12;fontFamily=Helvetica;fontColor=#52606d;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="773.0" y="948" width="44" height="20" as="geometry" /></mxCell>
        <mxCell id="08-37" value="24:00" style="text;html=1;whiteSpace=wrap;align=center;verticalAlign=top;fontSize=12;fontFamily=Helvetica;fontColor=#52606d;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="878.0" y="948" width="44" height="20" as="geometry" /></mxCell>
        <mxCell id="08-38" value="&lt;font face=&quot;Courier New&quot;&gt;&quot;time&quot;: &quot;21:00-07:00&quot;&lt;/font&gt; — a window is half-open, [start, end), and wraps past midnight when its end is earlier than its start.&lt;br&gt;Weekday and minute are the instant's, in the subject's configured timezone — which never appears on the wire." style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fontSize=14;fontFamily=Helvetica;fontColor=#1f2933;spacing=0;strokeColor=none;fillColor=none;" vertex="1" parent="1"><mxGeometry x="60" y="976" width="840" height="80" as="geometry" /></mxCell>
        <mxCell id="08-39" value="&lt;font style=&quot;font-size:17px&quot;&gt;&lt;b&gt;An encrypted message is resolved at every layer&lt;/b&gt;&lt;/font&gt;&lt;br&gt;A NIP-17 message is a gift wrap (&lt;font face=&quot;Courier New&quot;&gt;1059&lt;/font&gt;) around a seal (&lt;font face=&quot;Courier New&quot;&gt;13&lt;/font&gt;) around a rumor (&lt;font face=&quot;Courier New&quot;&gt;14&lt;/font&gt;). A set is resolved at each layer's kind, and a deny at any one of them denies.&lt;br&gt;A whitelist naming only &lt;font face=&quot;Courier New&quot;&gt;14&lt;/font&gt; therefore closes over the wrap by regime 4 — name &lt;font face=&quot;Courier New&quot;&gt;13, 14&lt;/font&gt; and &lt;font face=&quot;Courier New&quot;&gt;1059&lt;/font&gt; together.&lt;br&gt;&lt;font style=&quot;font-size:12px&quot; color=&quot;#52606d&quot;&gt;The opacity axis names the property itself, so it never ages as new kinds are minted.&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e3e7ee;strokeColor=#56657a;strokeWidth=1.5;fontSize=15;align=left;verticalAlign=top;fontFamily=Helvetica;fontColor=#1f2933;spacing=16;arcSize=8;absoluteArcSize=1;" vertex="1" parent="1"><mxGeometry x="950" y="850" width="870" height="180" as="geometry" /></mxCell>
        <mxCell id="08-40" value="" style="endArrow=none;html=1;strokeColor=#d9dee4;strokeWidth=1;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="40" y="1062" as="sourcePoint" /><mxPoint x="1820" y="1062" as="targetPoint" /></mxGeometry></mxCell>
        <mxCell id="08-41" value='&lt;font color="#52606d"&gt;TEPP Zeta · diagram 08 · statements: RESTR-001–RESTR-043, POL-008–POL-018, POL-060, POL-061, CONS-003–CONS-007, CONS-044, PROF-015–PROF-022, TOOL-017&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="1070" width="1780" height="26" as="geometry" /></mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
