{
 "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": "the-first-key",
 "nodes": [
  {
   "id": "storyboard:the-first-key",
   "type": "storyboard",
   "label": "The first key",
   "subtitle": "Noor opens a vault with a passkey, makes a key pair in her browser, and finds it on her laptop too. 9 panels.",
   "status": "built",
   "url": "https://storyboards.sgit.ai/pki/the-first-key/"
  },
  {
   "id": "shelf:Keys for people",
   "type": "shelf",
   "label": "Keys for people"
  },
  {
   "id": "author:pki.agent",
   "type": "author",
   "label": "pki.agent"
  },
  {
   "id": "panel:the-first-key/1",
   "type": "panel",
   "label": "The first key",
   "n": 1,
   "kind": "cover",
   "text": "The first key: A passkey opens a vault, and the vault holds the keys."
  },
  {
   "id": "character:noor",
   "type": "character",
   "label": "Noor"
  },
  {
   "id": "character:anchor",
   "type": "character",
   "label": "The Anchor"
  },
  {
   "id": "source:Keys for people",
   "type": "source",
   "label": "Keys for people"
  },
  {
   "id": "panel:the-first-key/2",
   "type": "panel",
   "label": "No password",
   "n": 2,
   "kind": "scene",
   "text": "No password. Noor says: “Just the passkey? Nothing to remember?” The Anchor says: “Your passkey gives the page 32 bytes. Nothing else.”"
  },
  {
   "id": "prop:phone",
   "type": "prop",
   "label": "phone"
  },
  {
   "id": "source:vault/index.html: the vault bar",
   "type": "source",
   "label": "vault/index.html: the vault bar"
  },
  {
   "id": "panel:the-first-key/3",
   "type": "panel",
   "label": "Three vaults, one key each",
   "n": 3,
   "kind": "scene",
   "text": "Three vaults, one key each."
  },
  {
   "id": "prop:vault",
   "type": "prop",
   "label": "vault"
  },
  {
   "id": "prop:arrow",
   "type": "prop",
   "label": "arrow"
  },
  {
   "id": "source:account.js",
   "type": "source",
   "label": "account.js"
  },
  {
   "id": "panel:the-first-key/4",
   "type": "panel",
   "label": "Two pairs, the same as sgit makes",
   "n": 4,
   "kind": "scene",
   "text": "Two pairs, the same as sgit makes. Noor says: “The same keys as sgit pki?” The Anchor says: “Byte for byte. Tested both ways.”"
  },
  {
   "id": "prop:key",
   "type": "prop",
   "label": "key"
  },
  {
   "id": "source:test_people.mjs",
   "type": "source",
   "label": "test_people.mjs"
  },
  {
   "id": "panel:the-first-key/5",
   "type": "panel",
   "label": "The private halves stay in the master",
   "n": 5,
   "kind": "scene",
   "text": "The private halves stay in the master. Noor says: “And nobody else can open it?”"
  },
  {
   "id": "source:account.js, saveIdentity",
   "type": "source",
   "label": "account.js, saveIdentity"
  },
  {
   "id": "panel:the-first-key/6",
   "type": "panel",
   "label": "Her record, signed",
   "n": 6,
   "kind": "scene",
   "text": "Her record, signed. Noor says: “My name, my key, my website. Signed by me.”"
  },
  {
   "id": "prop:record",
   "type": "prop",
   "label": "record"
  },
  {
   "id": "source:directory.js",
   "type": "source",
   "label": "directory.js"
  },
  {
   "id": "panel:the-first-key/7",
   "type": "panel",
   "label": "Her laptop, the same keys",
   "n": 7,
   "kind": "scene",
   "text": "Her laptop, the same keys. Noor says: “My keys, here too.”"
  },
  {
   "id": "prop:laptop",
   "type": "prop",
   "label": "laptop"
  },
  {
   "id": "source:test_people_vault.mjs",
   "type": "source",
   "label": "test_people_vault.mjs"
  },
  {
   "id": "panel:the-first-key/8",
   "type": "panel",
   "label": "A recovery code, shown once",
   "n": 8,
   "kind": "scene",
   "text": "A recovery code, shown once. Noor says: “Written down. On paper.”"
  },
  {
   "id": "prop:board",
   "type": "prop",
   "label": "board"
  },
  {
   "id": "source:account.js, createAccount",
   "type": "source",
   "label": "account.js, createAccount"
  },
  {
   "id": "panel:the-first-key/9",
   "type": "panel",
   "label": "Nothing stored to be found. Nothing leaves but ciphertext.",
   "n": 9,
   "kind": "punchline",
   "text": "Nothing stored to be found. Nothing leaves but ciphertext.."
  }
 ],
 "edges": [
  {
   "from": "storyboard:the-first-key",
   "type": "on_shelf",
   "to": "shelf:Keys for people"
  },
  {
   "from": "storyboard:the-first-key",
   "type": "made_by",
   "to": "author:pki.agent"
  },
  {
   "from": "storyboard:the-first-key",
   "type": "has_panel",
   "to": "panel:the-first-key/1",
   "n": 1
  },
  {
   "from": "panel:the-first-key/1",
   "type": "features",
   "to": "character:noor",
   "pose": "wave",
   "mood": "happy"
  },
  {
   "from": "panel:the-first-key/1",
   "type": "features",
   "to": "character:anchor",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "panel:the-first-key/1",
   "type": "quotes",
   "to": "source:Keys for people"
  },
  {
   "from": "storyboard:the-first-key",
   "type": "has_panel",
   "to": "panel:the-first-key/2",
   "n": 2
  },
  {
   "from": "panel:the-first-key/1",
   "type": "next",
   "to": "panel:the-first-key/2"
  },
  {
   "from": "panel:the-first-key/2",
   "type": "features",
   "to": "character:noor",
   "pose": "think",
   "mood": "thinking"
  },
  {
   "from": "character:noor",
   "type": "says",
   "to": "panel:the-first-key/2",
   "text": "Just the passkey? Nothing to remember?"
  },
  {
   "from": "panel:the-first-key/2",
   "type": "features",
   "to": "character:anchor",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "character:anchor",
   "type": "says",
   "to": "panel:the-first-key/2",
   "text": "Your passkey gives the page 32 bytes. Nothing else."
  },
  {
   "from": "panel:the-first-key/2",
   "type": "shows",
   "to": "prop:phone"
  },
  {
   "from": "panel:the-first-key/2",
   "type": "drawn_from",
   "to": "source:vault/index.html: the vault bar"
  },
  {
   "from": "storyboard:the-first-key",
   "type": "has_panel",
   "to": "panel:the-first-key/3",
   "n": 3
  },
  {
   "from": "panel:the-first-key/2",
   "type": "next",
   "to": "panel:the-first-key/3"
  },
  {
   "from": "panel:the-first-key/3",
   "type": "shows",
   "to": "prop:vault"
  },
  {
   "from": "panel:the-first-key/3",
   "type": "shows",
   "to": "prop:arrow"
  },
  {
   "from": "panel:the-first-key/3",
   "type": "shows",
   "to": "prop:vault"
  },
  {
   "from": "panel:the-first-key/3",
   "type": "shows",
   "to": "prop:arrow"
  },
  {
   "from": "panel:the-first-key/3",
   "type": "shows",
   "to": "prop:vault"
  },
  {
   "from": "panel:the-first-key/3",
   "type": "drawn_from",
   "to": "source:account.js"
  },
  {
   "from": "storyboard:the-first-key",
   "type": "has_panel",
   "to": "panel:the-first-key/4",
   "n": 4
  },
  {
   "from": "panel:the-first-key/3",
   "type": "next",
   "to": "panel:the-first-key/4"
  },
  {
   "from": "panel:the-first-key/4",
   "type": "features",
   "to": "character:noor",
   "pose": "point",
   "mood": "surprised"
  },
  {
   "from": "character:noor",
   "type": "says",
   "to": "panel:the-first-key/4",
   "text": "The same keys as sgit pki?"
  },
  {
   "from": "panel:the-first-key/4",
   "type": "features",
   "to": "character:anchor",
   "pose": "stand",
   "mood": "happy"
  },
  {
   "from": "character:anchor",
   "type": "says",
   "to": "panel:the-first-key/4",
   "text": "Byte for byte. Tested both ways."
  },
  {
   "from": "panel:the-first-key/4",
   "type": "shows",
   "to": "prop:key"
  },
  {
   "from": "panel:the-first-key/4",
   "type": "shows",
   "to": "prop:key"
  },
  {
   "from": "panel:the-first-key/4",
   "type": "drawn_from",
   "to": "source:test_people.mjs"
  },
  {
   "from": "storyboard:the-first-key",
   "type": "has_panel",
   "to": "panel:the-first-key/5",
   "n": 5
  },
  {
   "from": "panel:the-first-key/4",
   "type": "next",
   "to": "panel:the-first-key/5"
  },
  {
   "from": "panel:the-first-key/5",
   "type": "features",
   "to": "character:noor",
   "pose": "think",
   "mood": "thinking"
  },
  {
   "from": "character:noor",
   "type": "says",
   "to": "panel:the-first-key/5",
   "text": "And nobody else can open it?"
  },
  {
   "from": "panel:the-first-key/5",
   "type": "shows",
   "to": "prop:vault"
  },
  {
   "from": "panel:the-first-key/5",
   "type": "shows",
   "to": "prop:key"
  },
  {
   "from": "panel:the-first-key/5",
   "type": "drawn_from",
   "to": "source:account.js, saveIdentity"
  },
  {
   "from": "storyboard:the-first-key",
   "type": "has_panel",
   "to": "panel:the-first-key/6",
   "n": 6
  },
  {
   "from": "panel:the-first-key/5",
   "type": "next",
   "to": "panel:the-first-key/6"
  },
  {
   "from": "panel:the-first-key/6",
   "type": "features",
   "to": "character:noor",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "character:noor",
   "type": "says",
   "to": "panel:the-first-key/6",
   "text": "My name, my key, my website. Signed by me."
  },
  {
   "from": "panel:the-first-key/6",
   "type": "shows",
   "to": "prop:record"
  },
  {
   "from": "panel:the-first-key/6",
   "type": "drawn_from",
   "to": "source:directory.js"
  },
  {
   "from": "storyboard:the-first-key",
   "type": "has_panel",
   "to": "panel:the-first-key/7",
   "n": 7
  },
  {
   "from": "panel:the-first-key/6",
   "type": "next",
   "to": "panel:the-first-key/7"
  },
  {
   "from": "panel:the-first-key/7",
   "type": "features",
   "to": "character:noor",
   "pose": "arms-up",
   "mood": "happy"
  },
  {
   "from": "character:noor",
   "type": "says",
   "to": "panel:the-first-key/7",
   "text": "My keys, here too."
  },
  {
   "from": "panel:the-first-key/7",
   "type": "shows",
   "to": "prop:phone"
  },
  {
   "from": "panel:the-first-key/7",
   "type": "shows",
   "to": "prop:arrow"
  },
  {
   "from": "panel:the-first-key/7",
   "type": "shows",
   "to": "prop:laptop"
  },
  {
   "from": "panel:the-first-key/7",
   "type": "shows",
   "to": "prop:vault"
  },
  {
   "from": "panel:the-first-key/7",
   "type": "drawn_from",
   "to": "source:test_people_vault.mjs"
  },
  {
   "from": "storyboard:the-first-key",
   "type": "has_panel",
   "to": "panel:the-first-key/8",
   "n": 8
  },
  {
   "from": "panel:the-first-key/7",
   "type": "next",
   "to": "panel:the-first-key/8"
  },
  {
   "from": "panel:the-first-key/8",
   "type": "features",
   "to": "character:noor",
   "pose": "think",
   "mood": "determined"
  },
  {
   "from": "character:noor",
   "type": "says",
   "to": "panel:the-first-key/8",
   "text": "Written down. On paper."
  },
  {
   "from": "panel:the-first-key/8",
   "type": "shows",
   "to": "prop:board"
  },
  {
   "from": "panel:the-first-key/8",
   "type": "drawn_from",
   "to": "source:account.js, createAccount"
  },
  {
   "from": "storyboard:the-first-key",
   "type": "has_panel",
   "to": "panel:the-first-key/9",
   "n": 9
  },
  {
   "from": "panel:the-first-key/8",
   "type": "next",
   "to": "panel:the-first-key/9"
  },
  {
   "from": "panel:the-first-key/9",
   "type": "features",
   "to": "character:noor",
   "pose": "wave",
   "mood": "happy"
  },
  {
   "from": "panel:the-first-key/9",
   "type": "features",
   "to": "character:anchor",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "panel:the-first-key/9",
   "type": "quotes",
   "to": "source:Keys for people"
  }
 ]
}
