{
  "$schema": "https://pi-tui.ratstack.sh/schema/pattern.schema.json",
  "aka": [
    "Session-saved view"
  ],
  "animated": false,
  "apis": [
    {
      "name": "pi.appendEntry",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#state-management"
    },
    {
      "name": "ctx.sessionManager.getBranch",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#state-management"
    },
    {
      "name": "ctx.sessionManager.getEntries",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#state-management"
    },
    {
      "name": "SessionManager.inMemory",
      "url": null
    },
    {
      "name": "SessionManager.appendCustomEntry",
      "url": null
    },
    {
      "name": "SessionManager.getBranch",
      "url": null
    },
    {
      "name": "setWidget",
      "url": null
    }
  ],
  "applicability": [
    "Use this when a mini-app or tree should resume after its interaction closes."
  ],
  "category": "lifecycle",
  "categoryLabel": "Lifecycle and mounting",
  "consequences": [
    "Deliberate view state can survive closing and resuming.",
    "Branch selection and snapshot compatibility need explicit checks."
  ],
  "family": "lifecycle",
  "familyLabel": "Lifecycle",
  "id": "session-memento",
  "implementation": [
    "Choose the active branch for branch-sensitive state.",
    "Validate restored identifiers and snapshot compatibility.",
    "Do not persist every animation frame."
  ],
  "intent": "Reconstruct deliberate view state from typed custom session entries.",
  "jsonUrl": "https://pi-tui.ratstack.sh/patterns/session-memento.json",
  "kind": "screen",
  "knownUses": [
    {
      "example": "arcade-persistent-session-state",
      "moreRefs": 0,
      "refs": [
        {
          "file": "arcade/tetris.ts",
          "lines": "632-652",
          "sha": "bca5070b",
          "url": "https://github.com/nicobailon/pi-extensions/blob/bca5070b541ffa7d273e74036dcd7d5f8b63eed3/arcade/tetris.ts#L632-L652"
        },
        {
          "file": "arcade/ping.ts",
          "lines": "558-588",
          "sha": "bca5070b",
          "url": "https://github.com/nicobailon/pi-extensions/blob/bca5070b541ffa7d273e74036dcd7d5f8b63eed3/arcade/ping.ts#L558-L588"
        },
        {
          "file": "arcade/picman.ts",
          "lines": "313-328",
          "sha": "bca5070b",
          "url": "https://github.com/nicobailon/pi-extensions/blob/bca5070b541ffa7d273e74036dcd7d5f8b63eed3/arcade/picman.ts#L313-L328"
        },
        {
          "file": "arcade/spice-invaders.ts",
          "lines": "1060-1104",
          "sha": "bca5070b",
          "url": "https://github.com/nicobailon/pi-extensions/blob/bca5070b541ffa7d273e74036dcd7d5f8b63eed3/arcade/spice-invaders.ts#L1060-L1104"
        },
        {
          "file": "arcade/badlogic-game/badlogic-game.ts",
          "lines": "270-297",
          "sha": "bca5070b",
          "url": "https://github.com/nicobailon/pi-extensions/blob/bca5070b541ffa7d273e74036dcd7d5f8b63eed3/arcade/badlogic-game/badlogic-game.ts#L270-L297"
        }
      ],
      "repo": "pi-extensions",
      "repoUrl": "https://github.com/nicobailon/pi-extensions",
      "title": "Arcade: persist and resume through session entries"
    },
    {
      "example": "anycopy-tree-fold-state",
      "moreRefs": 0,
      "refs": [
        {
          "file": "extensions/anycopy/index.ts",
          "lines": "971-1035",
          "sha": "17cce138",
          "url": "https://github.com/nicobailon/dot314/blob/17cce138f3f687211d0485d204408a9650953c61/extensions/anycopy/index.ts#L971-L1035"
        }
      ],
      "repo": "dot314",
      "repoUrl": "https://github.com/nicobailon/dot314",
      "title": "Persist fold state while reusing a session-tree selector"
    }
  ],
  "linkedFrom": [
    {
      "how": "persists the fold identifiers",
      "id": "branch-fold",
      "jsonUrl": "https://pi-tui.ratstack.sh/patterns/branch-fold.json",
      "mdUrl": "https://pi-tui.ratstack.sh/patterns/branch-fold.md",
      "name": "Branch Fold",
      "url": "https://pi-tui.ratstack.sh/patterns/branch-fold/"
    }
  ],
  "links": {
    "agentGuide": "https://pi-tui.ratstack.sh/llms.txt",
    "index": "https://pi-tui.ratstack.sh/patterns.md",
    "skill": "https://pi-tui.ratstack.sh/skills/build-pi-tui-component.md"
  },
  "mdUrl": "https://pi-tui.ratstack.sh/patterns/session-memento.md",
  "motivation": "Nico's arcade overlays load typed saved entries, while anycopy validates saved fold IDs before restoring them.",
  "name": "Session Memento",
  "participants": [
    {
      "name": "pi.appendEntry",
      "role": "Persists typed custom data outside model context.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#state-management"
    },
    {
      "name": "ctx.sessionManager.getBranch",
      "role": "Reads entries along the active or requested branch.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#state-management"
    },
    {
      "name": "ctx.sessionManager.getEntries",
      "role": "Reads session-file entries for deliberate reconstruction.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#state-management"
    },
    {
      "name": "Typed snapshot",
      "role": "Stores deliberate state with explicit compatibility checks.",
      "url": null
    }
  ],
  "pi": "1.0.3",
  "related": [
    {
      "how": "uses saved fold identifiers",
      "id": "branch-fold",
      "jsonUrl": "https://pi-tui.ratstack.sh/patterns/branch-fold.json",
      "mdUrl": "https://pi-tui.ratstack.sh/patterns/branch-fold.md",
      "name": "Branch Fold",
      "url": "https://pi-tui.ratstack.sh/patterns/branch-fold/"
    }
  ],
  "sampleCode": {
    "code": "// Session Memento: restore deliberate view state from compatible custom entries.\nimport { SessionManager } from \"@earendil-works/pi-coding-agent\";\nimport type { PatternStory } from \"../../../src/pattern.ts\";\n\ntype Snapshot = { version: 1; counter: number; view: \"compact\" | \"expanded\" };\nfunction compatible(value: unknown): value is Snapshot {\n  return typeof value === \"object\" && value !== null && \"version\" in value && value.version === 1 &&\n    \"counter\" in value && typeof value.counter === \"number\" && Number.isInteger(value.counter) && value.counter >= 0 &&\n    \"view\" in value && (value.view === \"compact\" || value.view === \"expanded\");\n}\n\nexport const story: PatternStory = {\n  id: \"session-memento\", title: \"Session Memento\", kind: \"screen\",\n  apis: [\"SessionManager.inMemory\", \"SessionManager.appendCustomEntry\", \"SessionManager.getBranch\", \"setWidget\"],\n  states: [\n    { id: \"initial\", label: \"New view\" },\n    { id: \"saved\", label: \"Saved snapshot\", steps: [{ type: \"action\", name: \"save\" }] },\n    { id: \"restored\", label: \"Resumed view\", steps: [{ type: \"action\", name: \"resume\" }] },\n  ],\n  setup({ ui, theme, action }) {\n    // The harness has no ExtensionAPI. Use Pi's real in-memory session store;\n    // appendCustomEntry is the storage primitive behind pi.appendEntry.\n    const sessionManager = SessionManager.inMemory(\"/workspace/example\");\n    let snapshot: Snapshot = { version: 1, counter: 3, view: \"compact\" };\n    const showView = () => ui.setWidget(\"counter\", [\n      theme.fg(\"accent\", \"Task counter · \" + snapshot.counter),\n      theme.fg(\"muted\", \"View preference: \" + snapshot.view),\n    ]);\n    ui.setEditorText(\"Continue reviewing the tasks.\");\n    action(\"save\", () => {\n      sessionManager.appendCustomEntry(\"task-counter\", { ...snapshot });\n      ui.setWidget(\"counter\", undefined);\n      ui.setWidget(\"receipt\", [theme.fg(\"success\", \"View closed · snapshot saved\"),\n        theme.fg(\"muted\", \"Counter 3 · compact · schema v1\")]);\n      // Closing the view discards its local state, not the saved entry.\n      snapshot = { version: 1, counter: 0, view: \"expanded\" };\n    });\n    action(\"resume\", () => {\n      const entry = sessionManager.getBranch().findLast(entry =>\n        entry.type === \"custom\" && entry.customType === \"task-counter\");\n      if (!entry || entry.type !== \"custom\" || !compatible(entry.data)) throw new Error(\"No compatible snapshot\");\n      snapshot = { ...entry.data };\n      ui.setWidget(\"receipt\", [theme.fg(\"success\", \"Resumed from active branch\")]);\n      showView();\n    });\n    showView();\n  },\n};\n",
    "lang": "ts",
    "path": "stories/patterns/lifecycle/session-memento.ts"
  },
  "states": [
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Session Memento, New view state, 40 columns, dark theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/initial-40-dark.3d9a29e4ef07.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Session Memento, New view state, 40 columns, light theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/initial-40-light.cf34e90af5b7.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Session Memento, New view state, 60 columns, dark theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/initial-60-dark.c9244207268f.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Session Memento, New view state, 60 columns, light theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/initial-60-light.6d09033ac92d.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Session Memento, New view state, 80 columns, dark theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/initial-80-dark.5056dced87b9.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Session Memento, New view state, 80 columns, light theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/initial-80-light.89f396761dce.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Session Memento, New view state, 120 columns, dark theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/initial-120-dark.ce7df1d40e71.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Session Memento, New view state, 120 columns, light theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/initial-120-light.c826998c929e.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Show a synthetic counter and a compact view preference.",
      "id": "initial",
      "label": "New view",
      "problems": []
    },
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Session Memento, Saved snapshot state, 40 columns, dark theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/saved-40-dark.ed81cb59cb35.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Session Memento, Saved snapshot state, 40 columns, light theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/saved-40-light.d3d4e9897b42.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Session Memento, Saved snapshot state, 60 columns, dark theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/saved-60-dark.dff036ebe07d.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Session Memento, Saved snapshot state, 60 columns, light theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/saved-60-light.2652d3a7df25.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Session Memento, Saved snapshot state, 80 columns, dark theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/saved-80-dark.016f5691db6a.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Session Memento, Saved snapshot state, 80 columns, light theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/saved-80-light.6c0906aa67ca.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Session Memento, Saved snapshot state, 120 columns, dark theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/saved-120-dark.301e7a0d69e1.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Session Memento, Saved snapshot state, 120 columns, light theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/saved-120-light.5b473d4613fd.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Close and append a deliberately typed state snapshot.",
      "id": "saved",
      "label": "Saved snapshot",
      "problems": []
    },
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Session Memento, Resumed view state, 40 columns, dark theme, 12 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 528,
          "rows": 12,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/restored-40-dark.aff9c6732d57.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Session Memento, Resumed view state, 40 columns, light theme, 12 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 528,
          "rows": 12,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/restored-40-light.22bde47f2954.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Session Memento, Resumed view state, 60 columns, dark theme, 12 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 528,
          "rows": 12,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/restored-60-dark.1f24957a9f56.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Session Memento, Resumed view state, 60 columns, light theme, 12 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 528,
          "rows": 12,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/restored-60-light.d3ce5fe9959d.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Session Memento, Resumed view state, 80 columns, dark theme, 12 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 528,
          "rows": 12,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/restored-80-dark.1fdf97c2de78.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Session Memento, Resumed view state, 80 columns, light theme, 12 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 528,
          "rows": 12,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/restored-80-light.ed671b50c22a.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Session Memento, Resumed view state, 120 columns, dark theme, 12 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 528,
          "rows": 12,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/restored-120-dark.2c738af46013.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Session Memento, Resumed view state, 120 columns, light theme, 12 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 528,
          "rows": 12,
          "still": "https://pi-tui.ratstack.sh/frames/session-memento/restored-120-light.e1dde4288d3a.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Reopen with compatible saved state and the same view preference.",
      "id": "restored",
      "label": "Resumed view",
      "problems": []
    }
  ],
  "structure": "typed snapshot -> appendEntry\nsession entries -> validate -> view",
  "thumbnails": {
    "dark": {
      "animation": null,
      "src": "https://pi-tui.ratstack.sh/thumbs/session-memento/dark.f5efad1dc869.webp"
    },
    "light": {
      "animation": null,
      "src": "https://pi-tui.ratstack.sh/thumbs/session-memento/light.d3099e64373f.webp"
    }
  },
  "url": "https://pi-tui.ratstack.sh/patterns/session-memento/",
  "widths": [
    40,
    60,
    80,
    120
  ]
}
