{
  "$schema": "https://pi-tui.ratstack.sh/schema/pattern.schema.json",
  "aka": [
    "Settings panel"
  ],
  "animated": false,
  "apis": [
    {
      "name": "SettingsList",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/tui.md#compose-built-in-components"
    },
    {
      "name": "ctx.ui.select",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#interact-with-the-user"
    },
    {
      "name": "ctx.ui.editor",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#interact-with-the-user"
    },
    {
      "name": "ctx.ui.custom",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/tui.md#use-custom-screens-and-overlays"
    },
    {
      "name": "SelectList",
      "url": null
    },
    {
      "name": "ctx.ui.setWidget",
      "url": null
    }
  ],
  "applicability": [
    "Use this when several settings need dependent choices or value cycling."
  ],
  "category": "dialogs",
  "categoryLabel": "Overlays and dialogs",
  "consequences": [
    "Configuration changes do not complicate the live activity view.",
    "Displayed choices, persisted writes and reload-only changes differ."
  ],
  "family": "behavioral",
  "familyLabel": "Behavioral",
  "id": "settings-bench",
  "implementation": [
    "Distinguish a displayed choice from a persisted write.",
    "Some tool ownership changes require reload rather than a live UI update."
  ],
  "intent": "Keep configuration interaction separate from the live activity view.",
  "jsonUrl": "https://pi-tui.ratstack.sh/patterns/settings-bench.json",
  "kind": "screen",
  "knownUses": [
    {
      "example": "messenger-config-overlay",
      "moreRefs": 0,
      "refs": [
        {
          "file": "config-overlay.ts",
          "lines": "1-45",
          "sha": "09937ed6",
          "url": "https://github.com/nicobailon/pi-messenger/blob/09937ed647a1b07a3b595bf75943feacb80ff123/config-overlay.ts#L1-L45"
        }
      ],
      "repo": "pi-messenger",
      "repoUrl": "https://github.com/nicobailon/pi-messenger",
      "title": "Interactive configuration overlay"
    },
    {
      "example": "tool-display-settings-overlay",
      "moreRefs": 0,
      "refs": [
        {
          "file": "src/config-modal.ts",
          "lines": "398-455",
          "sha": "fca8c858",
          "url": "https://github.com/nicobailon/pi-tool-display/blob/fca8c858a0989b63eba18ab935f3d8ed78354c3a/src/config-modal.ts#L398-L455"
        }
      ],
      "repo": "pi-tool-display",
      "repoUrl": "https://github.com/nicobailon/pi-tool-display",
      "title": "Tool display: responsive settings modal"
    },
    {
      "example": "subagents-admin-selector",
      "moreRefs": 0,
      "refs": [
        {
          "file": "src/slash/subagents-admin.ts",
          "lines": "170-459",
          "sha": "6826b054",
          "url": "https://github.com/nicobailon/pi-subagents/blob/6826b0545216077195ae8ffe468a6434715814b7/src/slash/subagents-admin.ts#L170-L459"
        }
      ],
      "repo": "pi-subagents",
      "repoUrl": "https://github.com/nicobailon/pi-subagents",
      "title": "Layer admin choices as sequential selector steps"
    }
  ],
  "linkedFrom": [
    {
      "how": "supplies specialized settings content",
      "id": "shared-shell",
      "jsonUrl": "https://pi-tui.ratstack.sh/patterns/shared-shell.json",
      "mdUrl": "https://pi-tui.ratstack.sh/patterns/shared-shell.md",
      "name": "Shared Shell",
      "url": "https://pi-tui.ratstack.sh/patterns/shared-shell/"
    }
  ],
  "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/settings-bench.md",
  "motivation": "Messenger separates configuration from activity, while Subagents asks dependent admin choices.",
  "name": "Settings Bench",
  "participants": [
    {
      "name": "SettingsList",
      "role": "Owns settings values, cycling and submenus.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/tui.md#compose-built-in-components"
    },
    {
      "name": "ctx.ui.select",
      "role": "Returns a selected string or cancellation.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#interact-with-the-user"
    },
    {
      "name": "ctx.ui.editor",
      "role": "Opens a multi-line text-editing dialog.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#interact-with-the-user"
    },
    {
      "name": "ctx.ui.custom",
      "role": "Mounts one interaction and resolves through done.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/tui.md#use-custom-screens-and-overlays"
    },
    {
      "name": "Settings controller",
      "role": "Keeps displayed choices separate from persistence and reload.",
      "url": null
    }
  ],
  "pi": "1.0.3",
  "related": [
    {
      "how": "derives currently available choices",
      "id": "action-sieve",
      "jsonUrl": "https://pi-tui.ratstack.sh/patterns/action-sieve.json",
      "mdUrl": "https://pi-tui.ratstack.sh/patterns/action-sieve.md",
      "name": "Action Sieve",
      "url": "https://pi-tui.ratstack.sh/patterns/action-sieve/"
    }
  ],
  "sampleCode": {
    "code": "// Settings Bench: keep editable choices separate from saved configuration.\nimport { getSelectListTheme, getSettingsListTheme } from \"@earendil-works/pi-coding-agent\";\nimport { SelectList, SettingsList, Text } from \"@earendil-works/pi-tui\";\nimport type { PatternStory } from \"../../../src/pattern.ts\";\n\ntype Configuration = { entity: string; model: string };\n\nexport const story: PatternStory = {\n  id: \"settings-bench\", title: \"Settings Bench\", kind: \"screen\",\n  apis: [\"ctx.ui.custom\", \"SettingsList\", \"SelectList\", \"ctx.ui.setWidget\"],\n  states: [\n    { id: \"settings\", label: \"Settings list\" },\n    { id: \"dependent\", label: \"Dependent choice\", steps: [\n      { type: \"keys\", data: \"\\r\" }, { type: \"keys\", data: \"\\x1b[B\" }, { type: \"keys\", data: \"\\r\" },\n    ] },\n    { id: \"saved\", label: \"Saved selection\", steps: [\n      { type: \"keys\", data: \"\\x1b[B\" }, { type: \"keys\", data: \"\\r\" },\n      { type: \"keys\", data: \"s\" }, { type: \"resize\", rows: 12 },\n    ] },\n  ],\n  setup({ ui, theme }) {\n    let saved: Configuration = { entity: \"Builder\", model: \"fast\" };\n    ui.setEditorText(\"Continue the task review\");\n    ui.setWidget(\"activity\", [\n      theme.fg(\"accent\", \"Activity · 3 tasks · no config writes\"),\n      theme.fg(\"muted\", \"Saved: Builder / fast\"),\n    ]);\n    void ui.custom<Configuration | undefined>((tui, theme, keys, done) => {\n      const draft = { ...saved };\n      let mode: \"settings\" | \"submenu\" = \"settings\";\n      const settings = new SettingsList([\n        { id: \"entity\", label: \"Entity\", currentValue: draft.entity, values: [\"Builder\", \"Reviewer\"] },\n        { id: \"model\", label: \"Model\", currentValue: draft.model, submenu: (_current, finish) => {\n          mode = \"submenu\";\n          // Model options depend on the entity chosen in the preceding step.\n          const models = draft.entity === \"Reviewer\" ? [\"balanced\", \"careful\"] : [\"fast\", \"balanced\"];\n          const choices = new SelectList(models.map(label => ({ value: label, label })), 3, getSelectListTheme());\n          choices.onSelect = item => { mode = \"settings\"; finish(item.value); };\n          choices.onCancel = () => { mode = \"settings\"; finish(); };\n          return choices;\n        } },\n      ], 3, getSettingsListTheme(), (id, value) => {\n        if (id === \"entity\") {\n          draft.entity = value;\n          draft.model = value === \"Reviewer\" ? \"balanced\" : \"fast\";\n          settings.updateValue(\"model\", draft.model);\n        }\n        if (id === \"model\") draft.model = value;\n        tui.requestRender();\n      }, () => done(undefined));\n      return {\n        invalidate() { settings.invalidate(); },\n        handleInput(data) {\n          if (mode === \"settings\" && data === \"s\") done({ ...draft });\n          else settings.handleInput(data);\n          tui.requestRender();\n        },\n        render(width) {\n          return [\n            ...new Text(theme.fg(\"accent\", \"Configure \" + draft.entity), 0, 0).render(width),\n            ...settings.render(width),\n            ...new Text(theme.fg(\"dim\", mode === \"submenu\"\n              ? \"enter picks model · escape returns\" : \"s saves · escape discards\"), 0, 0).render(width),\n          ];\n        },\n      };\n    }).then(selection => {\n      if (selection === undefined) return;\n      // Synthetic persistence boundary: update a fixture, never real settings.\n      saved = selection;\n      ui.setWidget(\"activity\", [\n        theme.fg(\"success\", \"Saved fixture: \" + saved.entity + \" / \" + saved.model),\n        theme.fg(\"muted\", \"Reload applies config · tasks unchanged\"),\n      ]);\n      ui.setStatus(\"settings\", theme.fg(\"warning\", \"reload required\"));\n    });\n  },\n};\n",
    "lang": "ts",
    "path": "stories/patterns/behavioral/settings-bench.ts"
  },
  "states": [
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Settings Bench, Settings list state, 40 columns, dark theme, 14 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": 616,
          "rows": 14,
          "still": "https://pi-tui.ratstack.sh/frames/settings-bench/settings-40-dark.3e7201bc11f5.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Settings Bench, Settings list state, 40 columns, light theme, 14 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": 616,
          "rows": 14,
          "still": "https://pi-tui.ratstack.sh/frames/settings-bench/settings-40-light.1aa84a023d0d.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Settings Bench, Settings list state, 60 columns, dark theme, 14 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": 616,
          "rows": 14,
          "still": "https://pi-tui.ratstack.sh/frames/settings-bench/settings-60-dark.5e0d12f5e0f5.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Settings Bench, Settings list state, 60 columns, light theme, 14 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": 616,
          "rows": 14,
          "still": "https://pi-tui.ratstack.sh/frames/settings-bench/settings-60-light.b2132cba2864.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Settings Bench, Settings list state, 80 columns, dark theme, 14 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": 616,
          "rows": 14,
          "still": "https://pi-tui.ratstack.sh/frames/settings-bench/settings-80-dark.dd2163d0db5f.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Settings Bench, Settings list state, 80 columns, light theme, 14 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": 616,
          "rows": 14,
          "still": "https://pi-tui.ratstack.sh/frames/settings-bench/settings-80-light.e9af3af8c85c.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Settings Bench, Settings list state, 120 columns, dark theme, 14 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": 616,
          "rows": 14,
          "still": "https://pi-tui.ratstack.sh/frames/settings-bench/settings-120-dark.c954bc90cb73.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Settings Bench, Settings list state, 120 columns, light theme, 14 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": 616,
          "rows": 14,
          "still": "https://pi-tui.ratstack.sh/frames/settings-bench/settings-120-light.03bbba349475.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Show synthetic configurable values apart from the activity dashboard.",
      "id": "settings",
      "label": "Settings list",
      "problems": []
    },
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Settings Bench, Dependent choice 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/settings-bench/dependent-40-dark.4b1d5412ffe7.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Settings Bench, Dependent choice 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/settings-bench/dependent-40-light.cac6a46d0f15.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Settings Bench, Dependent choice 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/settings-bench/dependent-60-dark.6abe40d66f2d.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Settings Bench, Dependent choice 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/settings-bench/dependent-60-light.d6c099f1f546.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Settings Bench, Dependent choice 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/settings-bench/dependent-80-dark.108011028e55.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Settings Bench, Dependent choice 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/settings-bench/dependent-80-light.bd7c6f24cfad.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Settings Bench, Dependent choice 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/settings-bench/dependent-120-dark.435de4212d64.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Settings Bench, Dependent choice 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/settings-bench/dependent-120-light.b20b53ae8b31.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Choose an entity before showing its model or scope options.",
      "id": "dependent",
      "label": "Dependent choice",
      "problems": []
    },
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Settings Bench, Saved selection 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/settings-bench/saved-40-dark.aa6b7d7484e9.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Settings Bench, Saved selection 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/settings-bench/saved-40-light.8fc1627b9a34.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Settings Bench, Saved selection 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/settings-bench/saved-60-dark.89e6fc3b8c9d.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Settings Bench, Saved selection 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/settings-bench/saved-60-light.c5b081de7d29.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Settings Bench, Saved selection 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/settings-bench/saved-80-dark.adea93e9a16b.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Settings Bench, Saved selection 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/settings-bench/saved-80-light.581a3ced693b.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Settings Bench, Saved selection 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/settings-bench/saved-120-dark.9af81641bbae.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Settings Bench, Saved selection 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/settings-bench/saved-120-light.3cf8016cea7f.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Return to the dashboard with an explicit saved-setting notice.",
      "id": "saved",
      "label": "Saved selection",
      "problems": []
    }
  ],
  "structure": "entity -> setting choices\nchoice -> save / reload boundary",
  "thumbnails": {
    "dark": {
      "animation": null,
      "src": "https://pi-tui.ratstack.sh/thumbs/settings-bench/dark.42a6102a1c70.webp"
    },
    "light": {
      "animation": null,
      "src": "https://pi-tui.ratstack.sh/thumbs/settings-bench/light.299702a2b09b.webp"
    }
  },
  "url": "https://pi-tui.ratstack.sh/patterns/settings-bench/",
  "widths": [
    40,
    60,
    80,
    120
  ]
}
