{
  "$schema": "https://pi-tui.ratstack.sh/schema/pattern.schema.json",
  "aka": [
    "Validated theme colours"
  ],
  "animated": false,
  "apis": [
    {
      "name": "parseColor",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/tui/README.md#colors-and-terminal-styles"
    },
    {
      "name": "theme.style",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/tui.md#apply-themes-correctly"
    },
    {
      "name": "Text",
      "url": null
    }
  ],
  "applicability": [
    "Use this when an extension exposes configurable appearance."
  ],
  "category": "themes",
  "categoryLabel": "Theming",
  "consequences": [
    "Validated colours can flow through the current theme helpers.",
    "Invalid overrides need rejection and reused colour math belongs outside rendering."
  ],
  "family": "presentation",
  "familyLabel": "Presentation",
  "id": "colour-sentry",
  "implementation": [
    "Reject invalid colour values before emitting ANSI output.",
    "Apply the supplied theme rather than fixed ANSI colours.",
    "Compute reusable concrete colours outside the render path."
  ],
  "intent": "Validate colour overrides before using them in themed terminal output.",
  "jsonUrl": "https://pi-tui.ratstack.sh/patterns/colour-sentry.json",
  "kind": "component",
  "knownUses": [
    {
      "example": "theme-config",
      "moreRefs": 0,
      "refs": [
        {
          "file": "theme.ts",
          "lines": "1-50",
          "sha": "859dee67",
          "url": "https://github.com/nicobailon/pi-powerline-footer/blob/859dee671b633fb533b07ceba3e6c1ab1c43360a/theme.ts#L1-L50"
        }
      ],
      "repo": "pi-powerline-footer",
      "repoUrl": "https://github.com/nicobailon/pi-powerline-footer",
      "title": "Theme configuration and sanitization"
    }
  ],
  "linkedFrom": [
    {
      "how": "validates values before styling",
      "id": "palette-deck",
      "jsonUrl": "https://pi-tui.ratstack.sh/patterns/palette-deck.json",
      "mdUrl": "https://pi-tui.ratstack.sh/patterns/palette-deck.md",
      "name": "Palette Deck",
      "url": "https://pi-tui.ratstack.sh/patterns/palette-deck/"
    }
  ],
  "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/colour-sentry.md",
  "motivation": "Powerline Footer normalizes user colour overrides before emitting terminal output.",
  "name": "Colour Sentry",
  "participants": [
    {
      "name": "parseColor",
      "role": "Converts supported colour values into a Color.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/tui/README.md#colors-and-terminal-styles"
    },
    {
      "name": "theme.style",
      "role": "Styles text through semantic or concrete colours.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/tui.md#apply-themes-correctly"
    },
    {
      "name": "Override validator",
      "role": "Rejects invalid values before they become terminal styles.",
      "url": null
    }
  ],
  "pi": "1.0.3",
  "related": [
    {
      "how": "supplies coordinated override values",
      "id": "palette-deck",
      "jsonUrl": "https://pi-tui.ratstack.sh/patterns/palette-deck.json",
      "mdUrl": "https://pi-tui.ratstack.sh/patterns/palette-deck.md",
      "name": "Palette Deck",
      "url": "https://pi-tui.ratstack.sh/patterns/palette-deck/"
    }
  ],
  "sampleCode": {
    "code": "// Colour Sentry: validate overrides before they become terminal styles.\nimport { colorToHex, parseColor, Text, type Color } from \"@earendil-works/pi-tui\";\nimport type { PatternStory } from \"../../../src/pattern.ts\";\n\nexport const story: PatternStory = {\n  id: \"colour-sentry\", title: \"Colour Sentry\", kind: \"component\",\n  apis: [\"parseColor\", \"theme.style\", \"Text\"], rows: 10,\n  states: [\n    { id: \"default\", label: \"Active theme\" },\n    { id: \"override\", label: \"Valid override\", steps: [{ type: \"action\", name: \"valid\" }] },\n    { id: \"invalid\", label: \"Invalid override\", steps: [{ type: \"action\", name: \"invalid\" }] },\n    { id: \"dont-fixed-ansi\", label: \"Don't: fixed ANSI\", steps: [{ type: \"action\", name: \"fixed\" }],\n      expectFail: [\"hard-coded-colour\"] },\n  ],\n  setup({ theme, action, tui }) {\n    let colour: Color = theme.colors.accent;\n    let note = \"Default: accent\", rejected = false, fixed = false;\n    function override(value: string) {\n      try {\n        const parsed = parseColor(value);\n        colour = parsed; note = \"Accepted: active success colour\"; rejected = false;\n      } catch {\n        note = \"Rejected: not-a-colour\"; rejected = true;\n      }\n      tui.requestRender();\n    }\n    action(\"valid\", () => override(colorToHex(theme.colors.success)));\n    action(\"invalid\", () => override(\"not-a-colour\"));\n    action(\"fixed\", () => { fixed = true; tui.requestRender(); });\n    return {\n      invalidate() {},\n      render(width) {\n        const label = fixed\n          ? \"\\x1b[38;2;255;0;119mBuild ready · fixed RGB\\x1b[0m\"\n          : theme.style(\"Build ready\", { fg: colour, bold: true });\n        return new Text([\n          theme.fg(\"accent\", \"Appearance overrides\"), \"\",\n          label, theme.fg(rejected ? \"error\" : \"muted\", note), \"\",\n          theme.fg(\"dim\", fixed ? \"Don't bypass the active palette\" :\n            rejected ? \"Previous accepted output is unchanged\" : \"Validation happens before styling\"),\n        ].join(\"\\n\"), 0, 0).render(width);\n      },\n    };\n  },\n};\n",
    "lang": "ts",
    "path": "stories/patterns/presentation/colour-sentry.ts"
  },
  "states": [
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Colour Sentry, Active theme state, 40 columns, dark theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/default-40-dark.8a65b64322f8.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Colour Sentry, Active theme state, 40 columns, light theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/default-40-light.da9ad3881750.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Colour Sentry, Active theme state, 60 columns, dark theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/default-60-dark.6f48139ed5bf.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Colour Sentry, Active theme state, 60 columns, light theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/default-60-light.9836a80364a8.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Colour Sentry, Active theme state, 80 columns, dark theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/default-80-dark.b3d5e955155a.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Colour Sentry, Active theme state, 80 columns, light theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/default-80-light.af37cd51bff6.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Colour Sentry, Active theme state, 120 columns, dark theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/default-120-dark.3cec06c42eb2.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Colour Sentry, Active theme state, 120 columns, light theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/default-120-light.4654d6d5f54f.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Show synthetic labels styled by active semantic tokens.",
      "id": "default",
      "label": "Active theme",
      "problems": []
    },
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Colour Sentry, Valid override state, 40 columns, dark theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/override-40-dark.5365c4183ad7.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Colour Sentry, Valid override state, 40 columns, light theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/override-40-light.119515cf5557.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Colour Sentry, Valid override state, 60 columns, dark theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/override-60-dark.bd51988303af.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Colour Sentry, Valid override state, 60 columns, light theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/override-60-light.d6cc3f765e40.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Colour Sentry, Valid override state, 80 columns, dark theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/override-80-dark.49496ec33580.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Colour Sentry, Valid override state, 80 columns, light theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/override-80-light.fbe75f790310.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Colour Sentry, Valid override state, 120 columns, dark theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/override-120-dark.5eca26a9bf29.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Colour Sentry, Valid override state, 120 columns, light theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/override-120-light.21e9db28f938.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Apply a validated colour override through theme.style.",
      "id": "override",
      "label": "Valid override",
      "problems": []
    },
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Colour Sentry, Invalid override state, 40 columns, dark theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/invalid-40-dark.225796720b14.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Colour Sentry, Invalid override state, 40 columns, light theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/invalid-40-light.db84edec26f7.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Colour Sentry, Invalid override state, 60 columns, dark theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/invalid-60-dark.af56c497736a.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Colour Sentry, Invalid override state, 60 columns, light theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/invalid-60-light.b42622e394dd.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Colour Sentry, Invalid override state, 80 columns, dark theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/invalid-80-dark.f8a5708811e6.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Colour Sentry, Invalid override state, 80 columns, light theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/invalid-80-light.24cfd234aba8.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Colour Sentry, Invalid override state, 120 columns, dark theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/invalid-120-dark.984e9be347d5.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Colour Sentry, Invalid override state, 120 columns, light theme, 6 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": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/invalid-120-light.eee3669c65d6.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Show an explicit rejected override and unchanged output.",
      "id": "invalid",
      "label": "Invalid override",
      "problems": []
    },
    {
      "dont": true,
      "expectFail": [
        "hard-coded-colour"
      ],
      "frames": [
        {
          "alt": "Colour Sentry, Don't: fixed ANSI state, 40 columns, dark theme, 6 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [
                "line 3, column 1: frame 0: fg=#ff0077 is not an active theme token"
              ],
              "name": "hard-coded-colour",
              "status": "fail",
              "verdict": "expected-fail"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/dont-fixed-ansi-40-dark.bbd5e35c4317.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Colour Sentry, Don't: fixed ANSI state, 40 columns, light theme, 6 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [
                "line 3, column 1: frame 0: fg=#ff0077 is not an active theme token"
              ],
              "name": "hard-coded-colour",
              "status": "fail",
              "verdict": "expected-fail"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/dont-fixed-ansi-40-light.b348e6fce0c2.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Colour Sentry, Don't: fixed ANSI state, 60 columns, dark theme, 6 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [
                "line 3, column 1: frame 0: fg=#ff0077 is not an active theme token"
              ],
              "name": "hard-coded-colour",
              "status": "fail",
              "verdict": "expected-fail"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/dont-fixed-ansi-60-dark.847cae2fe1cd.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Colour Sentry, Don't: fixed ANSI state, 60 columns, light theme, 6 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [
                "line 3, column 1: frame 0: fg=#ff0077 is not an active theme token"
              ],
              "name": "hard-coded-colour",
              "status": "fail",
              "verdict": "expected-fail"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/dont-fixed-ansi-60-light.da96d3a87632.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Colour Sentry, Don't: fixed ANSI state, 80 columns, dark theme, 6 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [
                "line 3, column 1: frame 0: fg=#ff0077 is not an active theme token"
              ],
              "name": "hard-coded-colour",
              "status": "fail",
              "verdict": "expected-fail"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/dont-fixed-ansi-80-dark.58367eb8cd48.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Colour Sentry, Don't: fixed ANSI state, 80 columns, light theme, 6 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [
                "line 3, column 1: frame 0: fg=#ff0077 is not an active theme token"
              ],
              "name": "hard-coded-colour",
              "status": "fail",
              "verdict": "expected-fail"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/dont-fixed-ansi-80-light.850730840892.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Colour Sentry, Don't: fixed ANSI state, 120 columns, dark theme, 6 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [
                "line 3, column 1: frame 0: fg=#ff0077 is not an active theme token"
              ],
              "name": "hard-coded-colour",
              "status": "fail",
              "verdict": "expected-fail"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/dont-fixed-ansi-120-dark.2ffb95d0aa91.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Colour Sentry, Don't: fixed ANSI state, 120 columns, light theme, 6 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [
                "line 3, column 1: frame 0: fg=#ff0077 is not an active theme token"
              ],
              "name": "hard-coded-colour",
              "status": "fail",
              "verdict": "expected-fail"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 264,
          "rows": 6,
          "still": "https://pi-tui.ratstack.sh/frames/colour-sentry/dont-fixed-ansi-120-light.bcd452dd74a7.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Render a fixed ANSI-colour label instead of resolving the active theme.",
      "id": "dont-fixed-ansi",
      "label": "Don't: fixed ANSI",
      "problems": []
    }
  ],
  "structure": "override -> validate / parse\nvalid colour + theme -> styled text",
  "thumbnails": {
    "dark": {
      "animation": null,
      "src": "https://pi-tui.ratstack.sh/thumbs/colour-sentry/dark.6dddb93b0aef.webp"
    },
    "light": {
      "animation": null,
      "src": "https://pi-tui.ratstack.sh/thumbs/colour-sentry/light.d5afc5ca5116.webp"
    }
  },
  "url": "https://pi-tui.ratstack.sh/patterns/colour-sentry/",
  "widths": [
    40,
    60,
    80,
    120
  ]
}
