<?xml version='1.0' encoding='UTF-8'?>
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36" version="29.6.0">
  <diagram name="agent-rdf-memory Stack Alignment" id="agent-rdf-memory-alignment">
    <mxGraphModel dx="2732" dy="621" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1650" pageHeight="2500" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="title" parent="1" style="text;html=1;fontSize=26;fontStyle=1;fontColor=#2B1B4C;align=center;verticalAlign=middle;" value="How agent-rdf-memory Aligns With the Agent Engineering Stack" vertex="1">
          <mxGeometry height="40" width="1500" x="40" y="10" as="geometry" />
        </mxCell>
        <mxCell id="subtitle" parent="1" style="text;html=1;fontSize=12;fontStyle=2;fontColor=#5B4B8A;align=center;verticalAlign=middle;whiteSpace=wrap;" value="A layer-by-layer mapping of an &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/tree/main/agent-rdf-memory&quot;&gt;RDF-based Agent Harness&lt;/a&gt; onto the 11-layer stack from &lt;a href=&quot;https://www.linkedin.com/in/brijpandeyji/&quot;&gt;Brij Kishore Pandey'&lt;/a&gt;s model" vertex="1">
          <mxGeometry height="30" width="1500" x="40" y="50" as="geometry" />
        </mxCell>
        <mxCell id="legend" parent="1" style="text;html=1;fontSize=11;fontColor=#333333;align=center;verticalAlign=middle;" value="Coverage: ● Fully implemented   ◐ Partially covered / relies on host model   ○ Out of scope (belongs to the LLM / runtime, not this repo)" vertex="1">
          <mxGeometry height="24" width="1500" x="40" y="78" as="geometry" />
        </mxCell>
        <mxCell id="hdr0" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#2B1B4C;fontColor=#FFFFFF;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="Layer" vertex="1">
          <mxGeometry height="40" width="150" x="40" y="112" as="geometry" />
        </mxCell>
        <mxCell id="hdr1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#2B1B4C;fontColor=#FFFFFF;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="Coverage" vertex="1">
          <mxGeometry height="40" width="70" x="190" y="112" as="geometry" />
        </mxCell>
        <mxCell id="hdr2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#2B1B4C;fontColor=#FFFFFF;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="agent-rdf-memory Component" vertex="1">
          <mxGeometry height="40" width="330" x="260" y="112" as="geometry" />
        </mxCell>
        <mxCell id="hdr3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1F5B3A;fontColor=#FFFFFF;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="Key Files" vertex="1">
          <mxGeometry height="40" width="330" x="590" y="112" as="geometry" />
        </mxCell>
        <mxCell id="hdr4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1F4E79;fontColor=#FFFFFF;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="How the Alignment Works" vertex="1">
          <mxGeometry height="40" width="330" x="920" y="112" as="geometry" />
        </mxCell>
        <mxCell id="r1c0" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE7F6;fontColor=#2B1B4C;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="1. MODEL&#10;(Reasoning Engine)" vertex="1">
          <mxGeometry height="140" width="150" x="40" y="152" as="geometry" />
        </mxCell>
        <mxCell id="r1cov" parent="1" style="text;html=1;fontSize=20;fontColor=#7A1F1F;align=center;verticalAlign=middle;" value="○" vertex="1">
          <mxGeometry height="140" width="70" x="190" y="152" as="geometry" />
        </mxCell>
        <mxCell id="r1c2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="Not implemented here — the reasoning engine (Claude, GPT, DeepSeek, GLM, etc.) is external. The repo instead identifies and routes to it." vertex="1">
          <mxGeometry height="140" width="330" x="260" y="152" as="geometry" />
        </mxCell>
        <mxCell id="r1c3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/core.ttl&quot; target=&quot;_blank&quot;&gt;core.ttl&lt;/a&gt; (:agent template)&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/preferences.ttl&quot; target=&quot;_blank&quot;&gt;preferences.ttl&lt;/a&gt; step-modelIdentityPreflight&#10;preferences.ttl step-modelOverEnvironment" vertex="1">
          <mxGeometry height="140" width="330" x="590" y="152" as="geometry" />
        </mxCell>
        <mxCell id="r1c4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EAF2FA;fontColor=#123A5C;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="core.ttl's :agent block is filled at runtime with {LLM_MODEL} / {AGENT_ENV_NAME}; model identity (not agent environment) is the authoritative signal for routing, per step-modelOverEnvironment." vertex="1">
          <mxGeometry height="140" width="330" x="920" y="152" as="geometry" />
        </mxCell>
        <mxCell id="r2c0" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE7F6;fontColor=#2B1B4C;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="2. CONTEXT&#10;(What the Agent Sees)" vertex="1">
          <mxGeometry height="140" width="150" x="40" y="292" as="geometry" />
        </mxCell>
        <mxCell id="r2cov" parent="1" style="text;html=1;fontSize=20;fontColor=#1F5B3A;align=center;verticalAlign=middle;" value="●" vertex="1">
          <mxGeometry height="140" width="70" x="190" y="292" as="geometry" />
        </mxCell>
        <mxCell id="r2c2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="Ontology-routed context selection: prompt-intent classes select which topics/howtos/sessions get loaded into the live context window." vertex="1">
          <mxGeometry height="140" width="330" x="260" y="292" as="geometry" />
        </mxCell>
        <mxCell id="r2c3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/ontology.ttl&quot; target=&quot;_blank&quot;&gt;ontology.ttl&lt;/a&gt; (:PromptIntent, :RetrievalPolicy, :routesToTopic, :requiresHowTo, :optionalHowTo, :preferredContextSource, :requiresRecentSession)&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/SESSION-START-HOOK.md&quot; target=&quot;_blank&quot;&gt;SESSION-START-HOOK.md&lt;/a&gt;" vertex="1">
          <mxGeometry height="140" width="330" x="590" y="292" as="geometry" />
        </mxCell>
        <mxCell id="r2c4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EAF2FA;fontColor=#123A5C;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="Retrieval protocol step 7 classifies prompt intent, then prefers ontology-routed SPARQL selection over the endpoint to pull only relevant context — a budget/relevance mechanism, not a full context dump." vertex="1">
          <mxGeometry height="140" width="330" x="920" y="292" as="geometry" />
        </mxCell>
        <mxCell id="r3c0" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE7F6;fontColor=#2B1B4C;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="3. MEMORY&#10;(What it Remembers)" vertex="1">
          <mxGeometry height="150" width="150" x="40" y="432" as="geometry" />
        </mxCell>
        <mxCell id="r3cov" parent="1" style="text;html=1;fontSize=20;fontColor=#1F5B3A;align=center;verticalAlign=middle;" value="●" vertex="1">
          <mxGeometry height="150" width="70" x="190" y="432" as="geometry" />
        </mxCell>
        <mxCell id="r3c2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="This IS the memory layer — the repo's core purpose. Separates episodic (sessions), semantic (entities), and long-term behavioral (preferences) memory types." vertex="1">
          <mxGeometry height="150" width="330" x="260" y="432" as="geometry" />
        </mxCell>
        <mxCell id="r3c3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/tree/main/agent-rdf-memory/sessions&quot; target=&quot;_blank&quot;&gt;sessions/&lt;/a&gt; (YYYY-MM-DD-{llm}-{env}.ttl, episodic)&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/tree/main/agent-rdf-memory/entities&quot; target=&quot;_blank&quot;&gt;entities/&lt;/a&gt; (people, orgs, tools, concepts — semantic)&#10;preferences.ttl / preferences.private.ttl (behavioral, long-term)&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/index.ttl&quot; target=&quot;_blank&quot;&gt;index.ttl&lt;/a&gt; (session pointer index)&#10;howto-memory-management sub-HowTo (16 steps)" vertex="1">
          <mxGeometry height="150" width="330" x="590" y="432" as="geometry" />
        </mxCell>
        <mxCell id="r3c4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EAF2FA;fontColor=#123A5C;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="Exactly matches the stack's &quot;separate memory types + TTLs/pruning&quot; guidance: session-governance, memory-protocol-gate, token-optimized-session-handoff, sparql-memory-loading, no-unauthorized-deletion, and no-memory-md-write howtos enforce this discipline." vertex="1">
          <mxGeometry height="150" width="330" x="920" y="432" as="geometry" />
        </mxCell>
        <mxCell id="r4c0" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE7F6;fontColor=#2B1B4C;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="4. TOOLS&#10;(Act on World)" vertex="1">
          <mxGeometry height="130" width="150" x="40" y="582" as="geometry" />
        </mxCell>
        <mxCell id="r4cov" parent="1" style="text;html=1;fontSize=20;fontColor=#B8860B;align=center;verticalAlign=middle;" value="◐" vertex="1">
          <mxGeometry height="130" width="70" x="190" y="582" as="geometry" />
        </mxCell>
        <mxCell id="r4c2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="Provides validation/utility scripts and a SPARQL endpoint as data-access tooling; broader tool/API surface (curl, MCP) belongs to the host harness, not this repo." vertex="1">
          <mxGeometry height="130" width="330" x="260" y="582" as="geometry" />
        </mxCell>
        <mxCell id="r4c3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/scripts/validate-memory-protocol.py&quot; target=&quot;_blank&quot;&gt;scripts/validate-memory-protocol.py&lt;/a&gt;&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/load_memory.py&quot; target=&quot;_blank&quot;&gt;load_memory.py&lt;/a&gt;&#10;preferences.ttl step-curlFirstMcpLastResort&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/curl-first-mcp-last-resort.ttl&quot; target=&quot;_blank&quot;&gt;howto/curl-first-mcp-last-resort.ttl&lt;/a&gt;" vertex="1">
          <mxGeometry height="130" width="330" x="590" y="582" as="geometry" />
        </mxCell>
        <mxCell id="r4c4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EAF2FA;fontColor=#123A5C;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="load_memory.py performs the SPARQL bootstrap load; the curl-first rule keeps tool selection lightweight, deferring to MCP only when local CLI access genuinely can't reach the resource." vertex="1">
          <mxGeometry height="130" width="330" x="920" y="582" as="geometry" />
        </mxCell>
        <mxCell id="r5c0" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE7F6;fontColor=#2B1B4C;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="5. SKILLS&#10;(Composed Abilities)" vertex="1">
          <mxGeometry height="140" width="150" x="40" y="712" as="geometry" />
        </mxCell>
        <mxCell id="r5cov" parent="1" style="text;html=1;fontSize=20;fontColor=#1F5B3A;align=center;verticalAlign=middle;" value="●" vertex="1">
          <mxGeometry height="140" width="70" x="190" y="712" as="geometry" />
        </mxCell>
        <mxCell id="r5c2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="The &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/tree/main/agent-rdf-memory/howto&quot; target=&quot;_blank&quot;&gt;howto/&lt;/a&gt; library IS a skill library: 40+ reusable, independently-specified behavioral modules, each documented with I/O contracts and gates." vertex="1">
          <mxGeometry height="140" width="330" x="260" y="712" as="geometry" />
        </mxCell>
        <mxCell id="r5c3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="howto/*.ttl (40+ companion spec files)&#10;howto-skill-workflows sub-HowTo (&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/skill-invocation.ttl&quot; target=&quot;_blank&quot;&gt;skill-invocation&lt;/a&gt;, &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/opal-session-vocabulary.ttl&quot; target=&quot;_blank&quot;&gt;opal-session-vocabulary&lt;/a&gt;, &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/uriburner-oauth-authcode-flow.ttl&quot; target=&quot;_blank&quot;&gt;uriburner-oauth-authcode-flow&lt;/a&gt;)&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/howto-authoring-structure.ttl&quot; target=&quot;_blank&quot;&gt;howto/howto-authoring-structure.ttl&lt;/a&gt;" vertex="1">
          <mxGeometry height="140" width="330" x="590" y="712" as="geometry" />
        </mxCell>
        <mxCell id="r5c4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EAF2FA;fontColor=#123A5C;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="howto-authoring-structure mandates one schema:HowToStep per requirement with anchored seeAlso cross-refs — directly matching the stack's &quot;document I/O, expected behavior, and limits&quot; best practice." vertex="1">
          <mxGeometry height="140" width="330" x="920" y="712" as="geometry" />
        </mxCell>
        <mxCell id="r6c0" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE7F6;fontColor=#2B1B4C;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="6. ORCHESTRATION&#10;(Coordinate Execution)" vertex="1">
          <mxGeometry height="150" width="150" x="40" y="852" as="geometry" />
        </mxCell>
        <mxCell id="r6cov" parent="1" style="text;html=1;fontSize=20;fontColor=#1F5B3A;align=center;verticalAlign=middle;" value="●" vertex="1">
          <mxGeometry height="150" width="70" x="190" y="852" as="geometry" />
        </mxCell>
        <mxCell id="r6c2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="The mandatory 9-step retrieval protocol IS the orchestration plan: list → read core → read prefs → read private overlay → read ontology → read index → classify intent → SPARQL-route → file fallback." vertex="1">
          <mxGeometry height="150" width="330" x="260" y="852" as="geometry" />
        </mxCell>
        <mxCell id="r6c3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/README.md&quot; target=&quot;_blank&quot;&gt;README.md&lt;/a&gt; § Retrieval protocol (mandatory)&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/session-governance.ttl&quot; target=&quot;_blank&quot;&gt;howto/session-governance.ttl&lt;/a&gt;&#10;SESSION-START-HOOK.md&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/AGENTS.md&quot; target=&quot;_blank&quot;&gt;AGENTS.md&lt;/a&gt;" vertex="1">
          <mxGeometry height="150" width="330" x="590" y="852" as="geometry" />
        </mxCell>
        <mxCell id="r6c4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EAF2FA;fontColor=#123A5C;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="Explicit ordered steps + a defined fallback path (file reads when SPARQL is unavailable) make the plan observable and gracefully degrading — matching &quot;prefer explicit state over hidden state.&quot;" vertex="1">
          <mxGeometry height="150" width="330" x="920" y="852" as="geometry" />
        </mxCell>
        <mxCell id="r7c0" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE7F6;fontColor=#2B1B4C;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="7. IDENTITY&#10;(Who it is)" vertex="1">
          <mxGeometry height="140" width="150" x="40" y="1002" as="geometry" />
        </mxCell>
        <mxCell id="r7cov" parent="1" style="text;html=1;fontSize=20;fontColor=#1F5B3A;align=center;verticalAlign=middle;" value="●" vertex="1">
          <mxGeometry height="140" width="70" x="190" y="1002" as="geometry" />
        </mxCell>
        <mxCell id="r7c2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="core.ttl carries both agent identity (SoftwareApplication template) and user identity (schema:Person, owl:sameAs across platforms), plus a dedicated WebID/verification sub-HowTo." vertex="1">
          <mxGeometry height="140" width="330" x="260" y="1002" as="geometry" />
        </mxCell>
        <mxCell id="r7c3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="core.ttl (:agent, :user, :connection)&#10;howto-identity-webid sub-HowTo (14 steps): &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/agent-identity.ttl&quot; target=&quot;_blank&quot;&gt;agent-identity&lt;/a&gt;, &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/verified-identity.ttl&quot; target=&quot;_blank&quot;&gt;verified-identity&lt;/a&gt;, &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/youid-delegation.ttl&quot; target=&quot;_blank&quot;&gt;youid-delegation&lt;/a&gt;, webid-verification-services/table, &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/delegation-insert-gate.ttl&quot; target=&quot;_blank&quot;&gt;delegation-insert-gate&lt;/a&gt;, &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/youid-validation-gates.ttl&quot; target=&quot;_blank&quot;&gt;youid-validation-gates&lt;/a&gt;" vertex="1">
          <mxGeometry height="140" width="330" x="590" y="1002" as="geometry" />
        </mxCell>
        <mxCell id="r7c4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EAF2FA;fontColor=#123A5C;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value=":connection models the operates-for relationship between agent and principal user; the WebID sub-HowTo runs openssl cert-modulus verification for both parties on any whoami-class request." vertex="1">
          <mxGeometry height="140" width="330" x="920" y="1002" as="geometry" />
        </mxCell>
        <mxCell id="r8c0" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE7F6;fontColor=#2B1B4C;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="8. POLICY &amp; GUARDRAILS&#10;(Do the Right Thing)" vertex="1">
          <mxGeometry height="150" width="150" x="40" y="1142" as="geometry" />
        </mxCell>
        <mxCell id="r8cov" parent="1" style="text;html=1;fontSize=20;fontColor=#1F5B3A;align=center;verticalAlign=middle;" value="●" vertex="1">
          <mxGeometry height="150" width="70" x="190" y="1142" as="geometry" />
        </mxCell>
        <mxCell id="r8c2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="preferences.ttl IS the policy layer — a queryable behavioral contract of 140+ HowToSteps, many implemented as hard blocking gates that fail closed." vertex="1">
          <mxGeometry height="150" width="330" x="260" y="1142" as="geometry" />
        </mxCell>
        <mxCell id="r8c3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="preferences.ttl (140+ HowToSteps, hub-and-spoke)&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/memory-protocol-gate.ttl&quot; target=&quot;_blank&quot;&gt;memory-protocol-gate.ttl&lt;/a&gt;, &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/no-unauthorized-deletion.ttl&quot; target=&quot;_blank&quot;&gt;no-unauthorized-deletion.ttl&lt;/a&gt;, &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/no-memory-md-write.ttl&quot; target=&quot;_blank&quot;&gt;no-memory-md-write.ttl&lt;/a&gt;&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/canonical-iri-compliance-gate.ttl&quot; target=&quot;_blank&quot;&gt;canonical-iri-compliance-gate.ttl&lt;/a&gt;, &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/entity-type-gate.ttl&quot; target=&quot;_blank&quot;&gt;entity-type-gate.ttl&lt;/a&gt;&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/rdf-infographic-compliance-gate.ttl&quot; target=&quot;_blank&quot;&gt;rdf-infographic-compliance-gate.ttl&lt;/a&gt;, &lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/sparql-html-escape-gate.ttl&quot; target=&quot;_blank&quot;&gt;sparql-html-escape-gate.ttl&lt;/a&gt;&#10;preferences.private.ttl (local-only overlay)" vertex="1">
          <mxGeometry height="150" width="330" x="590" y="1142" as="geometry" />
        </mxCell>
        <mxCell id="r8c4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EAF2FA;fontColor=#123A5C;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="Public/private split enforces data-boundary policy (credentials, personal paths never in the public graph); gate-named howtos block task completion until a compliance check passes — matching &quot;fail closed, not open.&quot;" vertex="1">
          <mxGeometry height="150" width="330" x="920" y="1142" as="geometry" />
        </mxCell>
        <mxCell id="r9c0" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE7F6;fontColor=#2B1B4C;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="9. OBSERVABILITY&#10;(See Everything)" vertex="1">
          <mxGeometry height="130" width="150" x="40" y="1292" as="geometry" />
        </mxCell>
        <mxCell id="r9cov" parent="1" style="text;html=1;fontSize=20;fontColor=#B8860B;align=center;verticalAlign=middle;" value="◐" vertex="1">
          <mxGeometry height="130" width="70" x="190" y="1292" as="geometry" />
        </mxCell>
        <mxCell id="r9c2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="Session files are the trace log — a durable per-session record — but there is no dashboard/metrics layer; observability is file- and SPARQL-query-based, not instrumented telemetry." vertex="1">
          <mxGeometry height="130" width="330" x="260" y="1292" as="geometry" />
        </mxCell>
        <mxCell id="r9c3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="sessions/YYYY-MM-DD-{llm}-{env}.ttl&#10;index.ttl (schema:ListItem per session)&#10;projects/ (project-specific knowledge trail)" vertex="1">
          <mxGeometry height="130" width="330" x="590" y="1292" as="geometry" />
        </mxCell>
        <mxCell id="r9c4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EAF2FA;fontColor=#123A5C;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="Every session is dated, model-tagged, and environment-tagged, giving a queryable provenance trail (&quot;what did session X do, and why&quot;) even without live dashboards." vertex="1">
          <mxGeometry height="130" width="330" x="920" y="1292" as="geometry" />
        </mxCell>
        <mxCell id="r10c0" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE7F6;fontColor=#2B1B4C;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="10. EVALUATION&#10;(Measure Quality)" vertex="1">
          <mxGeometry height="140" width="150" x="40" y="1422" as="geometry" />
        </mxCell>
        <mxCell id="r10cov" parent="1" style="text;html=1;fontSize=20;fontColor=#1F5B3A;align=center;verticalAlign=middle;" value="●" vertex="1">
          <mxGeometry height="140" width="70" x="190" y="1422" as="geometry" />
        </mxCell>
        <mxCell id="r10c2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="A dedicated post-session audit script plus a hard Turtle-validity gate on every edited file act as the repo's continuous evaluation mechanism." vertex="1">
          <mxGeometry height="140" width="330" x="260" y="1422" as="geometry" />
        </mxCell>
        <mxCell id="r10c3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="scripts/validate-memory-protocol.py (post-session audit gate)&#10;howto/howto-authoring-structure.ttl (parse-validate every edited .ttl)&#10;preferences.ttl step-preferencesSparse (sparse-text enforcement)" vertex="1">
          <mxGeometry height="140" width="330" x="590" y="1422" as="geometry" />
        </mxCell>
        <mxCell id="r10c4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EAF2FA;fontColor=#123A5C;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="Live-tested: the 2026-07-21 edit to preferences.ttl was blocked by step-preferencesSparse until schema:text was trimmed to one sentence — a real example of an automated regression gate stopping a bad commit." vertex="1">
          <mxGeometry height="140" width="330" x="920" y="1422" as="geometry" />
        </mxCell>
        <mxCell id="r11c0" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE7F6;fontColor=#2B1B4C;fontStyle=1;fontSize=12;align=center;verticalAlign=middle;" value="11. RUNTIME&#10;(Run it Reliably)" vertex="1">
          <mxGeometry height="130" width="150" x="40" y="1562" as="geometry" />
        </mxCell>
        <mxCell id="r11cov" parent="1" style="text;html=1;fontSize=20;fontColor=#B8860B;align=center;verticalAlign=middle;" value="◐" vertex="1">
          <mxGeometry height="130" width="70" x="190" y="1562" as="geometry" />
        </mxCell>
        <mxCell id="r11c2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="Defines its own SPARQL endpoint contract and graceful degradation path, but deployment/scaling/caching of that endpoint (Virtuoso) is outside this repo's scope." vertex="1">
          <mxGeometry height="130" width="330" x="260" y="1562" as="geometry" />
        </mxCell>
        <mxCell id="r11c3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F7F5FB;fontColor=#333333;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="README.md § Ontology-routed SPARQL context selection ({CNAME} endpoint pattern)&#10;load_memory.py (SPARQL bootstrap)&#10;&lt;a href=&quot;https://github.com/OpenLinkSoftware/ai-agent-skills/blob/main/agent-rdf-memory/howto/artifact-routing.ttl&quot; target=&quot;_blank&quot;&gt;artifact-routing.ttl&lt;/a&gt; ({LLM_ROOT} model-specific output roots)" vertex="1">
          <mxGeometry height="130" width="330" x="590" y="1562" as="geometry" />
        </mxCell>
        <mxCell id="r11c4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EAF2FA;fontColor=#123A5C;fontSize=11;align=left;verticalAlign=middle;spacingLeft=6;" value="Step 9 of the retrieval protocol is an explicit degrade path: fall back to direct file reads when SPARQL is unavailable — the memory system stays usable even if the Virtuoso runtime is down." vertex="1">
          <mxGeometry height="130" width="330" x="920" y="1562" as="geometry" />
        </mxCell>
        <mxCell id="summaryBox" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2B1B4C;fontSize=12;align=left;verticalAlign=top;spacing=10;fontStyle=0" value="Coverage Summary&#10;&#10;● Fully implemented (7): Context, Memory, Skills, Orchestration, Identity, Policy &amp; Guardrails, Evaluation&#10;&#10;◐ Partially covered (3): Tools, Observability, Runtime — the repo defines the contract/fallback but the execution substrate (harness, dashboards, Virtuoso) lives outside it&#10;&#10;○ Out of scope (1): Model — agent-rdf-memory identifies and routes to the model, but is not itself a reasoning engine" vertex="1">
          <mxGeometry height="1540" width="300" x="1290" y="152" as="geometry" />
        </mxCell>
        <mxCell id="flowTitle" parent="1" style="text;html=1;fontSize=16;fontStyle=1;fontColor=#2B1B4C;align=left;verticalAlign=middle;" value="Session-Start Retrieval Protocol (Orchestration in Practice)" vertex="1">
          <mxGeometry height="30" width="700" x="40" y="1730" as="geometry" />
        </mxCell>
        <mxCell id="f1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EDE7F6;strokeColor=#2B1B4C;fontSize=10;align=center;verticalAlign=middle;" value="1. List agent-rdf-memory/&#10;&amp; subfolders" vertex="1">
          <mxGeometry height="55" width="150" x="40" y="1770" as="geometry" />
        </mxCell>
        <mxCell id="f2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EDE7F6;strokeColor=#2B1B4C;fontSize=10;align=center;verticalAlign=middle;" value="2. Read core.ttl" vertex="1">
          <mxGeometry height="55" width="150" x="230" y="1770" as="geometry" />
        </mxCell>
        <mxCell id="f3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EDE7F6;strokeColor=#2B1B4C;fontSize=10;align=center;verticalAlign=middle;" value="3. Read preferences.ttl&#10;(public)" vertex="1">
          <mxGeometry height="55" width="150" x="420" y="1770" as="geometry" />
        </mxCell>
        <mxCell id="f4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EDE7F6;strokeColor=#2B1B4C;fontSize=10;align=center;verticalAlign=middle;" value="4. Read preferences.private.ttl&#10;(if present, overlays public)" vertex="1">
          <mxGeometry height="55" width="150" x="610" y="1770" as="geometry" />
        </mxCell>
        <mxCell id="f5" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EDE7F6;strokeColor=#2B1B4C;fontSize=10;align=center;verticalAlign=middle;" value="5. Read ontology.ttl&#10;(intents, routing)" vertex="1">
          <mxGeometry height="55" width="150" x="800" y="1770" as="geometry" />
        </mxCell>
        <mxCell id="f6" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EDE7F6;strokeColor=#2B1B4C;fontSize=10;align=center;verticalAlign=middle;" value="6. Read index.ttl&#10;(session pointers)" vertex="1">
          <mxGeometry height="55" width="150" x="990" y="1770" as="geometry" />
        </mxCell>
        <mxCell id="ef1" edge="1" parent="1" source="f1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;" target="f2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ef2" edge="1" parent="1" source="f2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;" target="f3">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ef3" edge="1" parent="1" source="f3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;" target="f4">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ef4" edge="1" parent="1" source="f4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;" target="f5">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ef5" edge="1" parent="1" source="f5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;" target="f6">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="f7" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D6EAF8;strokeColor=#1F5B8A;fontSize=10;align=center;verticalAlign=middle;fontStyle=1" value="7. Classify prompt intent&#10;(:PromptIntent)" vertex="1">
          <mxGeometry height="55" width="150" x="230" y="1860" as="geometry" />
        </mxCell>
        <mxCell id="f8" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D6EAF8;strokeColor=#1F5B8A;fontSize=10;align=center;verticalAlign=middle;fontStyle=1" value="8. SPARQL-route to howtos/&#10;sessions via ontology predicates" vertex="1">
          <mxGeometry height="55" width="150" x="420" y="1860" as="geometry" />
        </mxCell>
        <mxCell id="f9" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FDEBD0;strokeColor=#B8860B;fontSize=10;align=center;verticalAlign=middle;fontStyle=1" value="9. Fallback: direct file&#10;reads if SPARQL unavailable" vertex="1">
          <mxGeometry height="55" width="150" x="620" y="1900" as="geometry" />
        </mxCell>
        <mxCell id="f10" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF6EE;strokeColor=#1F5B3A;fontSize=10;align=center;verticalAlign=middle;fontStyle=1" value="Task execution&#10;(with loaded context)" vertex="1">
          <mxGeometry height="55" width="150" x="800" y="1860" as="geometry" />
        </mxCell>
        <mxCell id="ef6" edge="1" parent="1" source="f6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;exitDx=0;exitDy=0;">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1065" y="1840" />
              <mxPoint x="310" y="1840" />
            </Array>
            <mxPoint x="990" y="1825" as="sourcePoint" />
            <mxPoint x="310" y="1860" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="ef7" edge="1" parent="1" source="f7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;" target="f8">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ef8" edge="1" parent="1" source="f8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;" target="f9">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ef9" edge="1" parent="1" source="f8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;" target="f10">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ef10" edge="1" parent="1" source="f9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;" target="f10">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="treeTitle" parent="1" style="text;html=1;fontSize=16;fontStyle=1;fontColor=#2B1B4C;align=left;verticalAlign=middle;" value="agent-rdf-memory/ Folder Structure" vertex="1">
          <mxGeometry height="30" width="700" x="200" y="2010" as="geometry" />
        </mxCell>
        <mxCell id="tree" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FAFAFA;strokeColor=#888888;fontFamily=Courier New;fontSize=12;align=left;verticalAlign=top;spacing=10;" value="agent-rdf-memory/&#10;├── README.md, AGENTS.md, SESSION-START-HOOK.md   (protocol entry points)&#10;├── core.ttl                       (identity: agent + user)&#10;├── preferences.ttl                (policy hub: 140+ HowToSteps, 9 sub-HowTos)&#10;├── preferences.private.ttl        (policy overlay, gitignored)&#10;├── ontology.ttl                   (context routing vocabulary)&#10;├── index.ttl                      (memory index / observability)&#10;├── howto/                         (skills library — 40+ spec files)&#10;├── sessions/                      (episodic memory)&#10;├── entities/                      (semantic memory)&#10;├── projects/                      (project knowledge / observability)&#10;└── scripts/                       (tools + evaluation gates)" vertex="1">
          <mxGeometry height="260" width="620" x="200" y="2070" as="geometry" />
        </mxCell>
        <mxCell id="quote" parent="1" style="text;html=1;fontSize=12;fontStyle=2;fontColor=#5B4B8A;align=center;verticalAlign=middle;" value="&quot;The repo doesn't run the model — it makes the model reliable.&quot; A working implementation of the stack's 90% engineering layer, wrapped around whichever LLM is in the driver's seat." vertex="1">
          <mxGeometry height="40" width="1500" x="-70" y="2440" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>