{
 "what": "A storyboard as a semantic graph: nodes are things, edges carry the meaning. Generated by formats.js v0.1.0 from the storyboard and its cast.",
 "format": "storyboards.sgit.ai/graph/v1",
 "storyboard": "in-person-by-qr",
 "nodes": [
  {
   "id": "storyboard:in-person-by-qr",
   "type": "storyboard",
   "label": "In person, by QR code",
   "subtitle": "Noor and Leo scan each other's phones; the camera is the channel; two scans make one link. Proposed, not built. 9 panels.",
   "status": "proposed",
   "url": "https://storyboards.sgit.ai/pki/in-person-by-qr/"
  },
  {
   "id": "shelf:Next: proposed",
   "type": "shelf",
   "label": "Next: proposed"
  },
  {
   "id": "author:pki.agent",
   "type": "author",
   "label": "pki.agent"
  },
  {
   "id": "panel:in-person-by-qr/1",
   "type": "panel",
   "label": "In person, by QR code",
   "n": 1,
   "kind": "cover",
   "text": "In person, by QR code: Proposed: the next thing to build."
  },
  {
   "id": "character:noor",
   "type": "character",
   "label": "Noor"
  },
  {
   "id": "character:leo",
   "type": "character",
   "label": "Leo"
  },
  {
   "id": "source:In person, by QR code",
   "type": "source",
   "label": "In person, by QR code"
  },
  {
   "id": "panel:in-person-by-qr/2",
   "type": "panel",
   "label": "Noor's phone shows her key",
   "n": 2,
   "kind": "scene",
   "text": "Noor's phone shows her key. Noor says: “Scan me.”"
  },
  {
   "id": "prop:phoneqr",
   "type": "prop",
   "label": "phoneqr"
  },
  {
   "id": "prop:phone",
   "type": "prop",
   "label": "phone"
  },
  {
   "id": "panel:in-person-by-qr/3",
   "type": "panel",
   "label": "Leo's camera reads it",
   "n": 3,
   "kind": "scene",
   "text": "Leo's camera reads it. Leo says: “Noor's key. From her hand.”"
  },
  {
   "id": "prop:board",
   "type": "prop",
   "label": "board"
  },
  {
   "id": "panel:in-person-by-qr/4",
   "type": "panel",
   "label": "His answer carries her nonce",
   "n": 4,
   "kind": "scene",
   "text": "His answer carries her nonce. Leo says: “Now scan mine.”"
  },
  {
   "id": "panel:in-person-by-qr/5",
   "type": "panel",
   "label": "Light, not a network",
   "n": 5,
   "kind": "scene",
   "text": "Light, not a network. Mallory says: “Nowhere to stand.”"
  },
  {
   "id": "character:mallory",
   "type": "character",
   "label": "Mallory"
  },
  {
   "id": "prop:arrow",
   "type": "prop",
   "label": "arrow"
  },
  {
   "id": "panel:in-person-by-qr/6",
   "type": "panel",
   "label": "Both sign",
   "n": 6,
   "kind": "scene",
   "text": "Both sign."
  },
  {
   "id": "prop:record",
   "type": "prop",
   "label": "record"
  },
  {
   "id": "panel:in-person-by-qr/7",
   "type": "panel",
   "label": "What it proves",
   "n": 7,
   "kind": "evidence",
   "text": "What it proves. “Physical proximity makes the interaction convenient, but does not by itself establish identity.” (In-Person Public-Key Exchange on iPhone, the research note)"
  },
  {
   "id": "character:anchor",
   "type": "character",
   "label": "The Anchor"
  },
  {
   "id": "source:briefs/research-2026-10-20__in-person-public-key-exchange.md",
   "type": "source",
   "label": "briefs/research-2026-10-20__in-person-public-key-exchange.md"
  },
  {
   "id": "source:In-Person Public-Key Exchange on iPhone, the research note",
   "type": "source",
   "label": "In-Person Public-Key Exchange on iPhone, the research note"
  },
  {
   "id": "panel:in-person-by-qr/8",
   "type": "panel",
   "label": "An agent shows its key",
   "n": 8,
   "kind": "scene",
   "text": "An agent shows its key."
  },
  {
   "id": "character:scout",
   "type": "agent",
   "label": "Scout"
  },
  {
   "id": "prop:terminal",
   "type": "prop",
   "label": "terminal"
  },
  {
   "id": "prop:qr",
   "type": "prop",
   "label": "qr"
  },
  {
   "id": "source:In person, by QR code, agents",
   "type": "source",
   "label": "In person, by QR code, agents"
  },
  {
   "id": "panel:in-person-by-qr/9",
   "type": "panel",
   "label": "Two scans. One link. No server.",
   "n": 9,
   "kind": "punchline",
   "text": "Two scans. One link. No server.."
  }
 ],
 "edges": [
  {
   "from": "storyboard:in-person-by-qr",
   "type": "on_shelf",
   "to": "shelf:Next: proposed"
  },
  {
   "from": "storyboard:in-person-by-qr",
   "type": "made_by",
   "to": "author:pki.agent"
  },
  {
   "from": "storyboard:in-person-by-qr",
   "type": "has_panel",
   "to": "panel:in-person-by-qr/1",
   "n": 1
  },
  {
   "from": "panel:in-person-by-qr/1",
   "type": "features",
   "to": "character:noor",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "panel:in-person-by-qr/1",
   "type": "features",
   "to": "character:leo",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "panel:in-person-by-qr/1",
   "type": "quotes",
   "to": "source:In person, by QR code"
  },
  {
   "from": "storyboard:in-person-by-qr",
   "type": "has_panel",
   "to": "panel:in-person-by-qr/2",
   "n": 2
  },
  {
   "from": "panel:in-person-by-qr/1",
   "type": "next",
   "to": "panel:in-person-by-qr/2"
  },
  {
   "from": "panel:in-person-by-qr/2",
   "type": "features",
   "to": "character:noor",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "character:noor",
   "type": "says",
   "to": "panel:in-person-by-qr/2",
   "text": "Scan me."
  },
  {
   "from": "panel:in-person-by-qr/2",
   "type": "features",
   "to": "character:leo",
   "pose": "stand",
   "mood": "thinking"
  },
  {
   "from": "panel:in-person-by-qr/2",
   "type": "shows",
   "to": "prop:phoneqr"
  },
  {
   "from": "panel:in-person-by-qr/2",
   "type": "shows",
   "to": "prop:phone"
  },
  {
   "from": "panel:in-person-by-qr/2",
   "type": "drawn_from",
   "to": "source:In person, by QR code"
  },
  {
   "from": "storyboard:in-person-by-qr",
   "type": "has_panel",
   "to": "panel:in-person-by-qr/3",
   "n": 3
  },
  {
   "from": "panel:in-person-by-qr/2",
   "type": "next",
   "to": "panel:in-person-by-qr/3"
  },
  {
   "from": "panel:in-person-by-qr/3",
   "type": "features",
   "to": "character:leo",
   "pose": "think",
   "mood": "happy"
  },
  {
   "from": "character:leo",
   "type": "says",
   "to": "panel:in-person-by-qr/3",
   "text": "Noor's key. From her hand."
  },
  {
   "from": "panel:in-person-by-qr/3",
   "type": "shows",
   "to": "prop:board"
  },
  {
   "from": "panel:in-person-by-qr/3",
   "type": "drawn_from",
   "to": "source:In person, by QR code"
  },
  {
   "from": "storyboard:in-person-by-qr",
   "type": "has_panel",
   "to": "panel:in-person-by-qr/4",
   "n": 4
  },
  {
   "from": "panel:in-person-by-qr/3",
   "type": "next",
   "to": "panel:in-person-by-qr/4"
  },
  {
   "from": "panel:in-person-by-qr/4",
   "type": "features",
   "to": "character:leo",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "character:leo",
   "type": "says",
   "to": "panel:in-person-by-qr/4",
   "text": "Now scan mine."
  },
  {
   "from": "panel:in-person-by-qr/4",
   "type": "features",
   "to": "character:noor",
   "pose": "stand",
   "mood": "thinking"
  },
  {
   "from": "panel:in-person-by-qr/4",
   "type": "shows",
   "to": "prop:phone"
  },
  {
   "from": "panel:in-person-by-qr/4",
   "type": "shows",
   "to": "prop:phoneqr"
  },
  {
   "from": "panel:in-person-by-qr/4",
   "type": "drawn_from",
   "to": "source:In person, by QR code"
  },
  {
   "from": "storyboard:in-person-by-qr",
   "type": "has_panel",
   "to": "panel:in-person-by-qr/5",
   "n": 5
  },
  {
   "from": "panel:in-person-by-qr/4",
   "type": "next",
   "to": "panel:in-person-by-qr/5"
  },
  {
   "from": "panel:in-person-by-qr/5",
   "type": "features",
   "to": "character:mallory",
   "pose": "shrug",
   "mood": "confused"
  },
  {
   "from": "character:mallory",
   "type": "says",
   "to": "panel:in-person-by-qr/5",
   "text": "Nowhere to stand."
  },
  {
   "from": "panel:in-person-by-qr/5",
   "type": "shows",
   "to": "prop:phoneqr"
  },
  {
   "from": "panel:in-person-by-qr/5",
   "type": "shows",
   "to": "prop:arrow"
  },
  {
   "from": "panel:in-person-by-qr/5",
   "type": "shows",
   "to": "prop:phoneqr"
  },
  {
   "from": "panel:in-person-by-qr/5",
   "type": "drawn_from",
   "to": "source:In person, by QR code"
  },
  {
   "from": "storyboard:in-person-by-qr",
   "type": "has_panel",
   "to": "panel:in-person-by-qr/6",
   "n": 6
  },
  {
   "from": "panel:in-person-by-qr/5",
   "type": "next",
   "to": "panel:in-person-by-qr/6"
  },
  {
   "from": "panel:in-person-by-qr/6",
   "type": "features",
   "to": "character:noor",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "panel:in-person-by-qr/6",
   "type": "features",
   "to": "character:leo",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "panel:in-person-by-qr/6",
   "type": "shows",
   "to": "prop:record"
  },
  {
   "from": "panel:in-person-by-qr/6",
   "type": "shows",
   "to": "prop:record"
  },
  {
   "from": "panel:in-person-by-qr/6",
   "type": "drawn_from",
   "to": "source:In person, by QR code"
  },
  {
   "from": "storyboard:in-person-by-qr",
   "type": "has_panel",
   "to": "panel:in-person-by-qr/7",
   "n": 7
  },
  {
   "from": "panel:in-person-by-qr/6",
   "type": "next",
   "to": "panel:in-person-by-qr/7"
  },
  {
   "from": "panel:in-person-by-qr/7",
   "type": "features",
   "to": "character:anchor",
   "pose": "point",
   "mood": "thinking"
  },
  {
   "from": "panel:in-person-by-qr/7",
   "type": "quotes",
   "to": "source:briefs/research-2026-10-20__in-person-public-key-exchange.md"
  },
  {
   "from": "panel:in-person-by-qr/7",
   "type": "cites",
   "to": "source:In-Person Public-Key Exchange on iPhone, the research note"
  },
  {
   "from": "storyboard:in-person-by-qr",
   "type": "has_panel",
   "to": "panel:in-person-by-qr/8",
   "n": 8
  },
  {
   "from": "panel:in-person-by-qr/7",
   "type": "next",
   "to": "panel:in-person-by-qr/8"
  },
  {
   "from": "panel:in-person-by-qr/8",
   "type": "features",
   "to": "character:anchor",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "panel:in-person-by-qr/8",
   "type": "features",
   "to": "character:scout",
   "pose": "stand",
   "mood": "happy"
  },
  {
   "from": "panel:in-person-by-qr/8",
   "type": "shows",
   "to": "prop:phone"
  },
  {
   "from": "panel:in-person-by-qr/8",
   "type": "shows",
   "to": "prop:terminal"
  },
  {
   "from": "panel:in-person-by-qr/8",
   "type": "shows",
   "to": "prop:qr"
  },
  {
   "from": "panel:in-person-by-qr/8",
   "type": "drawn_from",
   "to": "source:In person, by QR code, agents"
  },
  {
   "from": "storyboard:in-person-by-qr",
   "type": "has_panel",
   "to": "panel:in-person-by-qr/9",
   "n": 9
  },
  {
   "from": "panel:in-person-by-qr/8",
   "type": "next",
   "to": "panel:in-person-by-qr/9"
  },
  {
   "from": "panel:in-person-by-qr/9",
   "type": "features",
   "to": "character:noor",
   "pose": "arms-up",
   "mood": "happy"
  },
  {
   "from": "panel:in-person-by-qr/9",
   "type": "features",
   "to": "character:leo",
   "pose": "arms-up",
   "mood": "happy"
  },
  {
   "from": "panel:in-person-by-qr/9",
   "type": "quotes",
   "to": "source:In person, by QR code"
  }
 ]
}
