{
  "title": "Websim: the smallest sufficient stack",
  "date": "2026-09-06",
  "source": ["CHEATSHEET.md", "PLAN.md", "PRD.md"],
  "kind": "Conceptual design recommendations, not deployed architecture or tested apps",
  "imageProvenance": {
    "requestedProvider": "openai-codex",
    "actualProvider": "xai",
    "actualModel": "grok-imagine-image",
    "format": "PNG",
    "dimensions": [2496, 1664],
    "method": "Generated images with corrective image edits; actual provider reported by tool, not inferred from request."
  },
  "verification": {
    "method": "Individually inspected final images for title, copy, node identity, arrow direction and scope boundaries.",
    "acceptedEdgeCounts": {"S1": 3, "S2": 2, "S3": 2},
    "scope3CopyDecision": "Omitted redundant Presence + live state caption to retain the safety-complete render; sync links already express live sharing.",
    "limits": "Conceptual scope diagrams, not tested applications, a network topology, accessibility certification or independent review."
  },
  "globalRules": [
    "Three selectable scopes, not a mandatory upgrade roadmap; each may be the final product.",
    "AI is independently optional in every scope; no scope inherits services automatically.",
    "Creator publishes tested revisions; visitor diagrams show use, never publishing ownership.",
    "One visual accent on the primary outcome; quiet neutral supporting information; proximity over enclosing boxes.",
    "Static artwork palette is illustration styling, not a hardcoded product-theme requirement.",
    "No invented framework, SDK, database engine, cloud service or capacity guarantee."
  ],
  "scopes": [
    {
      "id": "S1",
      "title": "PLAY NOW",
      "filename": "scope-1-play-now.png",
      "question": "Can one visitor get value without saved or shared state?",
      "decision": "Start here. Stop when the core loop works.",
      "composition": "One large visitor browser containing a spacious local interaction loop; outcome dominates, no infrastructure diagram.",
      "nodes": ["INPUT", "ACTION", "RESULT"],
      "edges": [
        {"from": "INPUT", "to": "ACTION", "kind": "solid"},
        {"from": "ACTION", "to": "RESULT", "kind": "solid"},
        {"from": "RESULT", "to": "INPUT", "kind": "dotted", "label": "try again"}
      ],
      "copy": ["SCOPE 1 / PLAY NOW", "One visitor. One useful loop.", "IN THE BROWSER", "INPUT", "ACTION", "RESULT", "try again", "Memory first. Local preferences only if useful.", "NO ACCOUNT / NO DATABASE / NO MULTIPLAYER", "AI only if the outcome requires it.", "SHIP CHECK: repeat, reset, keyboard, touch", "Stop here if this solves the need.", "Conceptual scope / Websim research / 2026-09-06"],
      "checks": ["All three nodes inside browser", "Forward arrows input to action to result", "Return arrow result to input", "No managed service nodes", "AI conditional text present", "Stop condition readable"]
    },
    {
      "id": "S2",
      "title": "KEEP WHAT MATTERS",
      "filename": "scope-2-keep-what-matters.png",
      "question": "Must meaningful work survive return visits or move between devices?",
      "decision": "Add only the records needed for the return journey.",
      "composition": "Two large distinct zones: browser draft and durable records, connected through a labeled permission check. Detached AI note, no AI edge implying requirement.",
      "nodes": ["BROWSER DRAFT", "CHECK ACCESS", "SAVED RECORDS"],
      "edges": [
        {"from": "BROWSER DRAFT", "to": "CHECK ACCESS", "kind": "solid", "label": "request"},
        {"from": "CHECK ACCESS", "to": "SAVED RECORDS", "kind": "solid", "label": "allowed only"}
      ],
      "copy": ["SCOPE 2 / KEEP WHAT MATTERS", "Remember useful work, not everything.", "BROWSER DRAFT", "Temporary input", "CHECK ACCESS", "Who may read or change it?", "SAVED RECORDS", "Only required fields", "request", "allowed only", "Identity only when ownership requires it.", "Show saved only after confirmation.", "AI: independent opt-in. Check cost and failure.", "SKIP: live rooms, feeds, extra roles", "SHIP CHECK: refresh, second account, denied access", "Choose this only when return visits need it.", "Conceptual scope / Websim research / 2026-09-06"],
      "checks": ["Permissions precede durable access", "Arrows do not grant unconditional writes", "Temporary input distinct from durable records", "AI clearly separate optional note", "No multiplayer implied", "No database engine or API invented"]
    },
    {
      "id": "S3",
      "title": "PLAY TOGETHER",
      "filename": "scope-3-play-together.png",
      "question": "Does the core interaction require people at the same time?",
      "decision": "Add live synchronization only when simultaneous participation is essential.",
      "composition": "Two visitor browser silhouettes connected through one central shared-project node, with no direct peer-to-peer connector. Center is primary figure; low-contrast supporting optional requirements below.",
      "nodes": ["VISITOR A", "SHARED PROJECT", "VISITOR B"],
      "edges": [
        {"from": "VISITOR A", "to": "SHARED PROJECT", "kind": "bidirectional", "label": "sync"},
        {"from": "VISITOR B", "to": "SHARED PROJECT", "kind": "bidirectional", "label": "sync"}
      ],
      "copy": ["SCOPE 3 / PLAY TOGETHER", "Only when the experience needs people together.", "VISITOR A", "SHARED PROJECT", "VISITOR B", "sync", "sync", "Define access, conflicts and reconnects.", "Show shared outcomes only after trusted confirmation.", "Save history only if needed. Moderate to match risk.", "AI is optional. A feed is not required.", "SHIP CHECK: two visitors, late join, disconnect, rejoin", "Stop at the smallest safe shared loop.", "Conceptual capability map, not network topology / 2026-09-06"],
      "checks": ["Exactly two visitors connect through shared project", "No direct visitor-to-visitor edge", "Bidirectional links have heads at both ends", "Persistence and moderation conditional", "No AI requirement", "No anti-cheat or transport guarantee"]
    }
  ]
}
