{
 "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": "two-ways",
 "nodes": [
  {
   "id": "storyboard:two-ways",
   "type": "storyboard",
   "label": "Two ways, or not at all",
   "subtitle": "Mallory floods a key, as in 2019, and then tries again here, where a vouch can only be written in the voucher's own record. 9 panels.",
   "status": "built",
   "url": "https://storyboards.sgit.ai/pki/two-ways/"
  },
  {
   "id": "shelf:Keys for people",
   "type": "shelf",
   "label": "Keys for people"
  },
  {
   "id": "author:pki.agent",
   "type": "author",
   "label": "pki.agent"
  },
  {
   "id": "panel:two-ways/1",
   "type": "panel",
   "label": "Two ways, or not at all",
   "n": 1,
   "kind": "cover",
   "text": "Two ways, or not at all: Why a link only counts when both people wrote it."
  },
  {
   "id": "character:mallory",
   "type": "character",
   "label": "Mallory"
  },
  {
   "id": "character:noor",
   "type": "character",
   "label": "Noor"
  },
  {
   "id": "character:leo",
   "type": "character",
   "label": "Leo"
  },
  {
   "id": "source:people/how.html",
   "type": "source",
   "label": "people/how.html"
  },
  {
   "id": "panel:two-ways/2",
   "type": "panel",
   "label": "2019",
   "n": 2,
   "kind": "evidence",
   "text": "2019. “a key server could add information to a certificate but could never delete either a certificate or information about a certificate.” (pki.sgit.ai, the 2019 failure)"
  },
  {
   "id": "source:failure/index.html",
   "type": "source",
   "label": "failure/index.html"
  },
  {
   "id": "source:pki.sgit.ai, the 2019 failure",
   "type": "source",
   "label": "pki.sgit.ai, the 2019 failure"
  },
  {
   "id": "panel:two-ways/3",
   "type": "panel",
   "label": "The flood",
   "n": 3,
   "kind": "scene",
   "text": "The flood. Mallory says: “Anyone can add. Nothing can be deleted.”"
  },
  {
   "id": "prop:record",
   "type": "prop",
   "label": "record"
  },
  {
   "id": "panel:two-ways/4",
   "type": "panel",
   "label": "The rule",
   "n": 4,
   "kind": "evidence",
   "text": "The rule. “The keyserver attack existed because anyone could append to anybody's certificate.” (pki.sgit.ai, the four rules)"
  },
  {
   "id": "character:anchor",
   "type": "character",
   "label": "The Anchor"
  },
  {
   "id": "source:rules/index.html",
   "type": "source",
   "label": "rules/index.html"
  },
  {
   "id": "source:pki.sgit.ai, the four rules",
   "type": "source",
   "label": "pki.sgit.ai, the four rules"
  },
  {
   "id": "panel:two-ways/5",
   "type": "panel",
   "label": "Where would Mallory write?",
   "n": 5,
   "kind": "scene",
   "text": "Where would Mallory write?. Mallory says: “Where do I write?”"
  },
  {
   "id": "prop:mark",
   "type": "prop",
   "label": "mark"
  },
  {
   "id": "source:test_people.mjs",
   "type": "source",
   "label": "test_people.mjs"
  },
  {
   "id": "panel:two-ways/6",
   "type": "panel",
   "label": "A claim",
   "n": 6,
   "kind": "scene",
   "text": "A claim. Leo says: “I don't know her yet.”"
  },
  {
   "id": "prop:arrow",
   "type": "prop",
   "label": "arrow"
  },
  {
   "id": "source:directory.js, graph",
   "type": "source",
   "label": "directory.js, graph"
  },
  {
   "id": "panel:two-ways/7",
   "type": "panel",
   "label": "A link",
   "n": 7,
   "kind": "scene",
   "text": "A link."
  },
  {
   "id": "panel:two-ways/8",
   "type": "panel",
   "label": "The register, computed",
   "n": 8,
   "kind": "graph",
   "text": "The register, computed."
  },
  {
   "id": "source:people/index.html",
   "type": "source",
   "label": "people/index.html"
  },
  {
   "id": "panel:two-ways/9",
   "type": "panel",
   "label": "A vouch for you lands in my record, never in yours.",
   "n": 9,
   "kind": "punchline",
   "text": "A vouch for you lands in my record, never in yours.."
  },
  {
   "id": "source:people/how.html#two-ways",
   "type": "source",
   "label": "people/how.html#two-ways"
  }
 ],
 "edges": [
  {
   "from": "storyboard:two-ways",
   "type": "on_shelf",
   "to": "shelf:Keys for people"
  },
  {
   "from": "storyboard:two-ways",
   "type": "made_by",
   "to": "author:pki.agent"
  },
  {
   "from": "storyboard:two-ways",
   "type": "has_panel",
   "to": "panel:two-ways/1",
   "n": 1
  },
  {
   "from": "panel:two-ways/1",
   "type": "features",
   "to": "character:mallory",
   "pose": "shrug",
   "mood": "thinking"
  },
  {
   "from": "panel:two-ways/1",
   "type": "features",
   "to": "character:noor",
   "pose": "stand",
   "mood": "happy"
  },
  {
   "from": "panel:two-ways/1",
   "type": "features",
   "to": "character:leo",
   "pose": "wave",
   "mood": "happy"
  },
  {
   "from": "panel:two-ways/1",
   "type": "quotes",
   "to": "source:people/how.html"
  },
  {
   "from": "storyboard:two-ways",
   "type": "has_panel",
   "to": "panel:two-ways/2",
   "n": 2
  },
  {
   "from": "panel:two-ways/1",
   "type": "next",
   "to": "panel:two-ways/2"
  },
  {
   "from": "panel:two-ways/2",
   "type": "features",
   "to": "character:mallory",
   "pose": "point",
   "mood": "thinking"
  },
  {
   "from": "panel:two-ways/2",
   "type": "quotes",
   "to": "source:failure/index.html"
  },
  {
   "from": "panel:two-ways/2",
   "type": "cites",
   "to": "source:pki.sgit.ai, the 2019 failure"
  },
  {
   "from": "storyboard:two-ways",
   "type": "has_panel",
   "to": "panel:two-ways/3",
   "n": 3
  },
  {
   "from": "panel:two-ways/2",
   "type": "next",
   "to": "panel:two-ways/3"
  },
  {
   "from": "panel:two-ways/3",
   "type": "features",
   "to": "character:mallory",
   "pose": "arms-up",
   "mood": "excited"
  },
  {
   "from": "character:mallory",
   "type": "says",
   "to": "panel:two-ways/3",
   "text": "Anyone can add. Nothing can be deleted."
  },
  {
   "from": "panel:two-ways/3",
   "type": "shows",
   "to": "prop:record"
  },
  {
   "from": "panel:two-ways/3",
   "type": "drawn_from",
   "to": "source:failure/index.html"
  },
  {
   "from": "storyboard:two-ways",
   "type": "has_panel",
   "to": "panel:two-ways/4",
   "n": 4
  },
  {
   "from": "panel:two-ways/3",
   "type": "next",
   "to": "panel:two-ways/4"
  },
  {
   "from": "panel:two-ways/4",
   "type": "features",
   "to": "character:anchor",
   "pose": "point",
   "mood": "thinking"
  },
  {
   "from": "panel:two-ways/4",
   "type": "quotes",
   "to": "source:rules/index.html"
  },
  {
   "from": "panel:two-ways/4",
   "type": "cites",
   "to": "source:pki.sgit.ai, the four rules"
  },
  {
   "from": "storyboard:two-ways",
   "type": "has_panel",
   "to": "panel:two-ways/5",
   "n": 5
  },
  {
   "from": "panel:two-ways/4",
   "type": "next",
   "to": "panel:two-ways/5"
  },
  {
   "from": "panel:two-ways/5",
   "type": "features",
   "to": "character:mallory",
   "pose": "shrug",
   "mood": "confused"
  },
  {
   "from": "character:mallory",
   "type": "says",
   "to": "panel:two-ways/5",
   "text": "Where do I write?"
  },
  {
   "from": "panel:two-ways/5",
   "type": "shows",
   "to": "prop:record"
  },
  {
   "from": "panel:two-ways/5",
   "type": "shows",
   "to": "prop:record"
  },
  {
   "from": "panel:two-ways/5",
   "type": "shows",
   "to": "prop:mark"
  },
  {
   "from": "panel:two-ways/5",
   "type": "drawn_from",
   "to": "source:test_people.mjs"
  },
  {
   "from": "storyboard:two-ways",
   "type": "has_panel",
   "to": "panel:two-ways/6",
   "n": 6
  },
  {
   "from": "panel:two-ways/5",
   "type": "next",
   "to": "panel:two-ways/6"
  },
  {
   "from": "panel:two-ways/6",
   "type": "features",
   "to": "character:leo",
   "pose": "think",
   "mood": "confused"
  },
  {
   "from": "character:leo",
   "type": "says",
   "to": "panel:two-ways/6",
   "text": "I don't know her yet."
  },
  {
   "from": "panel:two-ways/6",
   "type": "shows",
   "to": "prop:record"
  },
  {
   "from": "panel:two-ways/6",
   "type": "shows",
   "to": "prop:arrow"
  },
  {
   "from": "panel:two-ways/6",
   "type": "drawn_from",
   "to": "source:directory.js, graph"
  },
  {
   "from": "storyboard:two-ways",
   "type": "has_panel",
   "to": "panel:two-ways/7",
   "n": 7
  },
  {
   "from": "panel:two-ways/6",
   "type": "next",
   "to": "panel:two-ways/7"
  },
  {
   "from": "panel:two-ways/7",
   "type": "features",
   "to": "character:noor",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "panel:two-ways/7",
   "type": "features",
   "to": "character:leo",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "panel:two-ways/7",
   "type": "shows",
   "to": "prop:record"
  },
  {
   "from": "panel:two-ways/7",
   "type": "shows",
   "to": "prop:record"
  },
  {
   "from": "panel:two-ways/7",
   "type": "shows",
   "to": "prop:arrow"
  },
  {
   "from": "panel:two-ways/7",
   "type": "drawn_from",
   "to": "source:test_people.mjs"
  },
  {
   "from": "storyboard:two-ways",
   "type": "has_panel",
   "to": "panel:two-ways/8",
   "n": 8
  },
  {
   "from": "panel:two-ways/7",
   "type": "next",
   "to": "panel:two-ways/8"
  },
  {
   "from": "panel:two-ways/8",
   "type": "quotes",
   "to": "source:people/index.html"
  },
  {
   "from": "storyboard:two-ways",
   "type": "has_panel",
   "to": "panel:two-ways/9",
   "n": 9
  },
  {
   "from": "panel:two-ways/8",
   "type": "next",
   "to": "panel:two-ways/9"
  },
  {
   "from": "panel:two-ways/9",
   "type": "features",
   "to": "character:noor",
   "pose": "wave",
   "mood": "happy"
  },
  {
   "from": "panel:two-ways/9",
   "type": "features",
   "to": "character:leo",
   "pose": "arms-up",
   "mood": "happy"
  },
  {
   "from": "panel:two-ways/9",
   "type": "features",
   "to": "character:mallory",
   "pose": "shrug",
   "mood": "worried"
  },
  {
   "from": "panel:two-ways/9",
   "type": "quotes",
   "to": "source:people/how.html#two-ways"
  }
 ]
}
