{
  "$schema": "https://pi-tui.ratstack.sh/schema/pattern.schema.json",
  "aka": [
    "Call-scoped renderer"
  ],
  "animated": false,
  "apis": [
    {
      "name": "ToolRenderContext",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#tool-rendering"
    },
    {
      "name": "ToolDefinition.renderCall",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#tool-rendering"
    },
    {
      "name": "ToolDefinition.renderResult",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#tool-rendering"
    },
    {
      "name": "ToolExecutionComponent",
      "url": null
    }
  ],
  "applicability": [
    "Use this when streamed results should update their existing mounted presentation."
  ],
  "category": "tools",
  "categoryLabel": "Tool and message output",
  "consequences": [
    "One tool execution can update its retained presentation.",
    "Result rendering must tolerate an absent or hidden shell."
  ],
  "family": "presentation",
  "familyLabel": "Presentation",
  "id": "call-capsule",
  "implementation": [
    "Scope state to the tool call rather than the whole session.",
    "Handle an absent or hidden previous component."
  ],
  "intent": "Retain a display shell through call and result renders of one tool execution.",
  "jsonUrl": "https://pi-tui.ratstack.sh/patterns/call-capsule.json",
  "kind": "component",
  "knownUses": [
    {
      "example": "renderer-call-state",
      "moreRefs": 0,
      "refs": [
        {
          "file": "extensions/repoprompt-mcp/src/index.ts",
          "lines": "2903-2932",
          "sha": "17cce138",
          "url": "https://github.com/nicobailon/dot314/blob/17cce138f3f687211d0485d204408a9650953c61/extensions/repoprompt-mcp/src/index.ts#L2903-L2932"
        },
        {
          "file": "extensions/repoprompt-cli/index.ts",
          "lines": "3134-3164",
          "sha": "17cce138",
          "url": "https://github.com/nicobailon/dot314/blob/17cce138f3f687211d0485d204408a9650953c61/extensions/repoprompt-cli/index.ts#L3134-L3164"
        },
        {
          "file": "extensions/repoprompt-mcp/src/index.ts",
          "lines": "2900-2935",
          "sha": "17cce138",
          "url": "https://github.com/nicobailon/dot314/blob/17cce138f3f687211d0485d204408a9650953c61/extensions/repoprompt-mcp/src/index.ts#L2900-L2935"
        }
      ],
      "repo": "dot314",
      "repoUrl": "https://github.com/nicobailon/dot314",
      "title": "Reuse call-scoped presentation across tool phases"
    }
  ],
  "linkedFrom": [
    {
      "how": "retains a shell across result updates",
      "id": "detail-fold",
      "jsonUrl": "https://pi-tui.ratstack.sh/patterns/detail-fold.json",
      "mdUrl": "https://pi-tui.ratstack.sh/patterns/detail-fold.md",
      "name": "Detail Fold",
      "url": "https://pi-tui.ratstack.sh/patterns/detail-fold/"
    },
    {
      "how": "retains per-execution renderer state",
      "id": "renderer-chain",
      "jsonUrl": "https://pi-tui.ratstack.sh/patterns/renderer-chain.json",
      "mdUrl": "https://pi-tui.ratstack.sh/patterns/renderer-chain.md",
      "name": "Renderer Chain",
      "url": "https://pi-tui.ratstack.sh/patterns/renderer-chain/"
    }
  ],
  "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/call-capsule.md",
  "motivation": "Dot314's renderer-call-state keeps a call display shell available during result rendering.",
  "name": "Call Capsule",
  "participants": [
    {
      "name": "ToolRenderContext",
      "role": "Shares per-call state, prior components and invalidation.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#tool-rendering"
    },
    {
      "name": "ToolDefinition.renderCall",
      "role": "Renders the call before or during execution.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#tool-rendering"
    },
    {
      "name": "ToolDefinition.renderResult",
      "role": "Renders partial or final tool output.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#tool-rendering"
    },
    {
      "name": "Display shell",
      "role": "Belongs to one tool execution across call and result rendering.",
      "url": null
    }
  ],
  "pi": "1.0.3",
  "related": [
    {
      "how": "selects or wraps the renderer",
      "id": "renderer-chain",
      "jsonUrl": "https://pi-tui.ratstack.sh/patterns/renderer-chain.json",
      "mdUrl": "https://pi-tui.ratstack.sh/patterns/renderer-chain.md",
      "name": "Renderer Chain",
      "url": "https://pi-tui.ratstack.sh/patterns/renderer-chain/"
    }
  ],
  "sampleCode": {
    "code": "// Call Capsule: retain one display shell per execution, with a safe missing-shell path.\nimport { Text, wrapTextWithAnsi } from \"@earendil-works/pi-tui\";\nimport { ToolExecutionComponent, type ToolRenderers } from \"@earendil-works/pi-coding-agent\";\nimport type { PatternStory } from \"../../../src/pattern.ts\";\n\nexport const story: PatternStory = {\n  id: \"call-capsule\", title: \"Call Capsule\", kind: \"component\",\n  apis: [\"ToolExecutionComponent\", \"ToolRenderContext\", \"ToolDefinition.renderCall\", \"ToolDefinition.renderResult\"],\n  rows: 12,\n  states: [\n    { id: \"call\", label: \"Call shell\" },\n    { id: \"partial\", label: \"Shell updated\", steps: [{ type: \"action\", name: \"partial\" }] },\n    { id: \"no-shell\", label: \"Missing shell\", steps: [{ type: \"action\", name: \"no-shell\" }] },\n  ],\n  setup({ theme, tui, action }) {\n    let omitShell = false;\n    const renderers: ToolRenderers = {\n      renderCall(_args, _theme, context) {\n        if (omitShell) {\n          delete context.state.shell;\n          return new Text(\"\", 0, 0);\n        }\n        if (!(context.state.shell instanceof Text)) {\n          context.state.shell = new Text(theme.fg(\"toolTitle\", \"build_preview · waiting for output\"), 0, 0);\n        }\n        return context.state.shell;\n      },\n      renderResult(_result, options, _theme, context) {\n        const shell: unknown = context.state.shell;\n        if (shell instanceof Text) {\n          shell.setText(theme.fg(\"toolTitle\", \"build_preview · \" + context.toolCallId));\n        }\n        const message = options.isPartial ? \"Same shell · compiled 2 of 5 modules\" :\n          \"No earlier shell · 5 modules compiled\";\n        return {\n          invalidate() {},\n          render(width) {\n            return wrapTextWithAnsi(message, width).map(line =>\n              theme.fg(options.isPartial ? \"warning\" : \"success\", line));\n          },\n        };\n      },\n    };\n    const tool = new ToolExecutionComponent(\"build_preview\", \"example-build-1\", {},\n      undefined, renderers, tui, \"/workspace/example\");\n    action(\"partial\", () => {\n      tool.markExecutionStarted();\n      tool.updateResult({ content: [], isError: false }, true);\n      tui.requestRender();\n    });\n    action(\"no-shell\", () => {\n      omitShell = true;\n      tool.updateResult({ content: [], isError: false }, false);\n      tui.requestRender();\n    });\n    return tool;\n  },\n};\n",
    "lang": "ts",
    "path": "stories/patterns/presentation/call-capsule.ts"
  },
  "states": [
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Call Capsule, Call shell state, 40 columns, dark theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/call-40-dark.a724559bc6a1.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Call Capsule, Call shell state, 40 columns, light theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/call-40-light.2ac2d29ed230.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Call Capsule, Call shell state, 60 columns, dark theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/call-60-dark.e8a42c77cfeb.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Call Capsule, Call shell state, 60 columns, light theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/call-60-light.09e37632b1c0.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Call Capsule, Call shell state, 80 columns, dark theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/call-80-dark.8dd30ca2cb9b.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Call Capsule, Call shell state, 80 columns, light theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/call-80-light.c4705f3ab311.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Call Capsule, Call shell state, 120 columns, dark theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/call-120-dark.d4791a8d23dc.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Call Capsule, Call shell state, 120 columns, light theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/call-120-light.9d79ef1277a0.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Show a synthetic tool call before its result arrives.",
      "id": "call",
      "label": "Call shell",
      "problems": []
    },
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Call Capsule, Shell updated state, 40 columns, dark theme, 5 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": 220,
          "rows": 5,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/partial-40-dark.5a24b6a934fc.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Call Capsule, Shell updated state, 40 columns, light theme, 5 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": 220,
          "rows": 5,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/partial-40-light.f4e5036524bb.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Call Capsule, Shell updated state, 60 columns, dark theme, 5 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": 220,
          "rows": 5,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/partial-60-dark.a6dd7f8c5123.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Call Capsule, Shell updated state, 60 columns, light theme, 5 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": 220,
          "rows": 5,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/partial-60-light.4d4f97c4bf3b.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Call Capsule, Shell updated state, 80 columns, dark theme, 5 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": 220,
          "rows": 5,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/partial-80-dark.7282f3fb318c.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Call Capsule, Shell updated state, 80 columns, light theme, 5 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": 220,
          "rows": 5,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/partial-80-light.1d010aac09ea.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Call Capsule, Shell updated state, 120 columns, dark theme, 5 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": 220,
          "rows": 5,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/partial-120-dark.5a57af4069bf.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Call Capsule, Shell updated state, 120 columns, light theme, 5 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": 220,
          "rows": 5,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/partial-120-light.1ae22a708e2b.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Update the same presentation with partial data.",
      "id": "partial",
      "label": "Shell updated",
      "problems": []
    },
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Call Capsule, Missing shell state, 40 columns, dark theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/no-shell-40-dark.641ecdb5c4b5.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Call Capsule, Missing shell state, 40 columns, light theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/no-shell-40-light.62dcb0fa80a0.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Call Capsule, Missing shell state, 60 columns, dark theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/no-shell-60-dark.651c400eaf70.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Call Capsule, Missing shell state, 60 columns, light theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/no-shell-60-light.2b3e837fe5f7.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Call Capsule, Missing shell state, 80 columns, dark theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/no-shell-80-dark.e7fc335d2258.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Call Capsule, Missing shell state, 80 columns, light theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/no-shell-80-light.c5233b774ca8.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Call Capsule, Missing shell state, 120 columns, dark theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/no-shell-120-dark.fa2dd9b61a0f.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Call Capsule, Missing shell state, 120 columns, light theme, 4 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": 176,
          "rows": 4,
          "still": "https://pi-tui.ratstack.sh/frames/call-capsule/no-shell-120-light.b0eb444139a4.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Render a final result safely without an earlier mounted shell.",
      "id": "no-shell",
      "label": "Missing shell",
      "problems": []
    }
  ],
  "structure": "call context -> display shell\npartial / final -> same call state",
  "thumbnails": {
    "dark": {
      "animation": null,
      "src": "https://pi-tui.ratstack.sh/thumbs/call-capsule/dark.46664f2c3240.webp"
    },
    "light": {
      "animation": null,
      "src": "https://pi-tui.ratstack.sh/thumbs/call-capsule/light.ad581c03dbce.webp"
    }
  },
  "url": "https://pi-tui.ratstack.sh/patterns/call-capsule/",
  "widths": [
    40,
    60,
    80,
    120
  ]
}
