Skip to content

Instantly share code, notes, and snippets.

@sxalexander
Last active March 16, 2026 19:36
Show Gist options
  • Select an option

  • Save sxalexander/92e7aa95898725789f47de89faa2d1bf to your computer and use it in GitHub Desktop.

Select an option

Save sxalexander/92e7aa95898725789f47de89faa2d1bf to your computer and use it in GitHub Desktop.
conflict_viewer.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/sxalexander/92e7aa95898725789f47de89faa2d1bf/conflict_viewer.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FCHFvRq504Nv"
},
"source": [
"# Source Conflict Viewer\n",
"\n",
"**Silver -> Gold** -- Where multiple sources diverge on shared design system entities.\n",
"\n",
"Add conflict JSON file paths to the `CONFLICT_FILES` list and run all cells."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "vYX0CMGI04Nw",
"outputId": "8a2d4094-fe3c-4c3d-8e5b-99e6825a7d4d"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008000; text-decoration-color: #008000\">Ready</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[32mReady\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# ── Setup ─────────────────────────────────────────────────────────────────────\n",
"try:\n",
" import polars\n",
"except ImportError:\n",
" %pip install -q polars rich\n",
"\n",
"import json, re, io\n",
"from pathlib import Path\n",
"import polars as pl\n",
"from rich.console import Console\n",
"from rich.table import Table\n",
"from rich import box\n",
"\n",
"console = Console(width=120)\n",
"\n",
"SOURCE_STYLES = {\n",
" \"KNAPSACK\": \"bold blue\",\n",
" \"STORYBOOK\": \"bold yellow\",\n",
" \"FIGMA\": \"bold magenta\",\n",
" \"CODE\": \"bold green\",\n",
" \"MDX\": \"bold cyan\",\n",
"}\n",
"\n",
"def styled_source(s: str) -> str:\n",
" style = SOURCE_STYLES.get(s, \"bold white\")\n",
" return f\"[{style}]{s}[/{style}]\"\n",
"\n",
"console.print(\"[green]Ready[/green]\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "I1gQy88s04Nx"
},
"outputs": [],
"source": [
"# ── Data loading ──────────────────────────────────────────────────────────────\n",
"#\n",
"# Accepts:\n",
"# - A single ConflictBundle JSON object { \"conflict\": ..., \"items\": ..., \"diffs\": ... }\n",
"# - A JSON array of ConflictBundles [ { ... }, { ... } ]\n",
"# - Multi-bundle text output ==== Conflict Bundle ====\\n{ ... }\n",
"\n",
"def parse_bundles(text: str) -> list[dict]:\n",
" \"\"\"Parse conflict bundles from any supported format.\"\"\"\n",
" text = text.strip()\n",
" if text.startswith(\"{\"):\n",
" return [json.loads(text)]\n",
" if text.startswith(\"[\"):\n",
" return json.loads(text)\n",
" # Multi-bundle text format (\\s* tolerates \\r\\n and missing trailing newline)\n",
" blocks = re.findall(\n",
" r\"==== Conflict Bundle ====\\s*(\\{.*?\\})\\s*(?====|\\Z)\", text, re.DOTALL\n",
" )\n",
" return [json.loads(b) for b in blocks]\n",
"\n",
"\n",
"def dedupe(bundles: list[dict]) -> list[dict]:\n",
" seen = set()\n",
" out = []\n",
" for b in bundles:\n",
" fp = b[\"conflict\"][\"fingerprint\"]\n",
" if fp not in seen:\n",
" seen.add(fp)\n",
" out.append(b)\n",
" return out"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "VZmfn8m404Nx"
},
"outputs": [],
"source": [
"# ── Load conflicts ────────────────────────────────────────────────────────────\n",
"#\n",
"# Supports conflict JSON in any format:\n",
"# - Single bundle: { \"conflict\": ..., \"items\": ..., \"diffs\": ... }\n",
"# - Array: [ { ... }, { ... } ]\n",
"# - output.txt: ==== Conflict Bundle ====\\n{ ... }\n",
"\n",
"# Detect environment\n",
"try:\n",
" from google.colab import files as _colab_files\n",
" _IN_COLAB = True\n",
"except ImportError:\n",
" _IN_COLAB = False\n",
"\n",
"# ── Default: fetch output.txt from gist ──\n",
"SAMPLE_URL = \"https://gist.githubusercontent.com/sxalexander/9c1645e0905e4dea23bf386e9ab9888d/raw/output.txt\"\n",
"\n",
"SAMPLE = []\n",
"\n",
"# 1. Try URL first (works everywhere, no blocking)\n",
"try:\n",
" import urllib.request\n",
" text = urllib.request.urlopen(SAMPLE_URL).read().decode()\n",
" SAMPLE.extend(parse_bundles(text))\n",
" console.print(f\" [green]+[/green] fetched from gist\")\n",
"except Exception:\n",
" pass\n",
"\n",
"# 2. Local files (jupyter lab)\n",
"if not _IN_COLAB:\n",
" CONFLICT_FILES = [\n",
" Path(\"~/Downloads/output.txt\").expanduser(),\n",
" Path(\"~/Downloads/conflicts.json\").expanduser(),\n",
" ]\n",
" for f in CONFLICT_FILES:\n",
" if f.exists():\n",
" SAMPLE.extend(parse_bundles(f.read_text()))\n",
" console.print(f\" [green]+[/green] {f.name}\")\n",
"\n",
"BUNDLES = dedupe(SAMPLE)\n",
"console.print(f\"\\n[bold green]{len(BUNDLES)}[/] unique entities loaded\")\n",
"\n",
"if not BUNDLES:\n",
" console.print(\"[yellow]No data. Set UPLOAD = True in next cell to upload files.[/yellow]\")"
]
},
{
"cell_type": "code",
"source": [
"# ── (Optional) Upload your own conflicts ──────────────────────────────────────\n",
"# Set UPLOAD = True, then run THIS cell to upload. Safe to skip on Run All.\n",
"\n",
"UPLOAD = False # <-- flip to True, then run this cell\n",
"\n",
"if UPLOAD and _IN_COLAB:\n",
" uploaded = _colab_files.upload()\n",
" for name, content in uploaded.items():\n",
" SAMPLE.extend(parse_bundles(content.decode()))\n",
" console.print(f\" [green]+[/green] {name}\")\n",
" BUNDLES = dedupe(SAMPLE)\n",
" console.print(f\"[bold green]{len(BUNDLES)}[/] unique entities loaded\")\n",
"else:\n",
" console.print(\"[dim]Skipped upload — using gist data. Set UPLOAD = True to add files.[/dim]\")"
],
"metadata": {
"id": "A8XF8FK-04Nx"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "Kudq8NzD04Nx",
"outputId": "54f249cb-9e3e-4958-b493-0b316efd9110"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">44</span> anchor-level diffs across <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3</span> entities\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1;36m44\u001b[0m anchor-level diffs across \u001b[1;36m3\u001b[0m entities\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# ── Flatten to polars ─────────────────────────────────────────────────────────\n",
"\n",
"def flatten_diffs(bundles: list[dict]) -> pl.DataFrame:\n",
" rows = []\n",
" for b in bundles:\n",
" entity = b[\"conflict\"][\"entityRelPath\"]\n",
" entity_type = b[\"conflict\"][\"entityType\"]\n",
" sources = [item[\"sourceId\"] for item in b[\"items\"]]\n",
" for d in b[\"diffs\"]:\n",
" present = set()\n",
" for defn in d[\"preview\"][\"definitions\"]:\n",
" present.update(defn[\"sources\"])\n",
" diff_kind = d[\"preview\"][\"diff\"][\"kind\"]\n",
" missing = d[\"preview\"][\"diff\"].get(\"missingSourceIds\", [])\n",
" row = {\n",
" \"entity\": entity,\n",
" \"entity_type\": entity_type,\n",
" \"anchor\": d[\"anchor\"],\n",
" \"verdict\": d[\"verdict\"],\n",
" \"delta_count\": d[\"deltaCount\"],\n",
" \"diff_kind\": diff_kind,\n",
" \"summary\": d[\"diffSummary\"],\n",
" \"present_in\": \",\".join(sorted(present)),\n",
" \"missing_in\": \",\".join(sorted(missing)),\n",
" }\n",
" for s in sources:\n",
" row[s] = (s not in missing) if diff_kind == \"MISSING_SOURCES\" else (s in present)\n",
" rows.append(row)\n",
" return pl.DataFrame(rows)\n",
"\n",
"df = flatten_diffs(BUNDLES)\n",
"console.print(f\"[bold]{df.height}[/] anchor-level diffs across [bold]{df['entity'].n_unique()}[/] entities\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FkcSAN4-04Nx"
},
"source": [
"---\n",
"## Level 1 — Entity Queue"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "Q6L-ROJ204Nx",
"outputId": "1be45a76-1023-4626-8df9-c3f01f4f4df2"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\"> Entity Queue </span>\n",
"╭──────────────┬───────────┬──────────────────────────┬───────┬───────────┬─────────╮\n",
"│<span style=\"font-weight: bold\"> Entity </span>│<span style=\"font-weight: bold\"> Type </span>│<span style=\"font-weight: bold\"> Sources </span>│<span style=\"font-weight: bold\"> Diffs </span>│<span style=\"font-weight: bold\"> DIFFERENT </span>│<span style=\"font-weight: bold\"> MISSING </span>│\n",
"├──────────────┼───────────┼──────────────────────────┼───────┼───────────┼─────────┤\n",
"│<span style=\"font-weight: bold\"> button.react </span>│<span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> component </span>│ <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">KNAPSACK</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">STORYBOOK</span> │ 9 │<span style=\"color: #800000; text-decoration-color: #800000\"> 5 </span>│<span style=\"color: #808000; text-decoration-color: #808000\"> 4 </span>│\n",
"├──────────────┼───────────┼──────────────────────────┼───────┼───────────┼─────────┤\n",
"│<span style=\"font-weight: bold\"> card.react </span>│<span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> component </span>│ <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">KNAPSACK</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">STORYBOOK</span> │ 11 │<span style=\"color: #800000; text-decoration-color: #800000\"> 4 </span>│<span style=\"color: #808000; text-decoration-color: #808000\"> 7 </span>│\n",
"├──────────────┼───────────┼──────────────────────────┼───────┼───────────┼─────────┤\n",
"│<span style=\"font-weight: bold\"> modal.react </span>│<span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> component </span>│ <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">FIGMA</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">KNAPSACK</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">STORYBOOK</span> │ 24 │<span style=\"color: #800000; text-decoration-color: #800000\"> 3 </span>│<span style=\"color: #808000; text-decoration-color: #808000\"> 21 </span>│\n",
"╰──────────────┴───────────┴──────────────────────────┴───────┴───────────┴─────────╯\n",
"</pre>\n"
],
"text/plain": [
"\u001b[3m Entity Queue \u001b[0m\n",
"╭──────────────┬───────────┬──────────────────────────┬───────┬───────────┬─────────╮\n",
"│\u001b[1m \u001b[0m\u001b[1mEntity \u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mType \u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mSources \u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mDiffs\u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mDIFFERENT\u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mMISSING\u001b[0m\u001b[1m \u001b[0m│\n",
"├──────────────┼───────────┼──────────────────────────┼───────┼───────────┼─────────┤\n",
"│\u001b[1m \u001b[0m\u001b[1mbutton.react\u001b[0m\u001b[1m \u001b[0m│\u001b[2m \u001b[0m\u001b[2mcomponent\u001b[0m\u001b[2m \u001b[0m│ \u001b[1;34mKNAPSACK\u001b[0m \u001b[1;33mSTORYBOOK\u001b[0m │ 9 │\u001b[31m \u001b[0m\u001b[31m 5\u001b[0m\u001b[31m \u001b[0m│\u001b[33m \u001b[0m\u001b[33m 4\u001b[0m\u001b[33m \u001b[0m│\n",
"├──────────────┼───────────┼──────────────────────────┼───────┼───────────┼─────────┤\n",
"│\u001b[1m \u001b[0m\u001b[1mcard.react \u001b[0m\u001b[1m \u001b[0m│\u001b[2m \u001b[0m\u001b[2mcomponent\u001b[0m\u001b[2m \u001b[0m│ \u001b[1;34mKNAPSACK\u001b[0m \u001b[1;33mSTORYBOOK\u001b[0m │ 11 │\u001b[31m \u001b[0m\u001b[31m 4\u001b[0m\u001b[31m \u001b[0m│\u001b[33m \u001b[0m\u001b[33m 7\u001b[0m\u001b[33m \u001b[0m│\n",
"├──────────────┼───────────┼──────────────────────────┼───────┼───────────┼─────────┤\n",
"│\u001b[1m \u001b[0m\u001b[1mmodal.react \u001b[0m\u001b[1m \u001b[0m│\u001b[2m \u001b[0m\u001b[2mcomponent\u001b[0m\u001b[2m \u001b[0m│ \u001b[1;35mFIGMA\u001b[0m \u001b[1;34mKNAPSACK\u001b[0m \u001b[1;33mSTORYBOOK\u001b[0m │ 24 │\u001b[31m \u001b[0m\u001b[31m 3\u001b[0m\u001b[31m \u001b[0m│\u001b[33m \u001b[0m\u001b[33m 21\u001b[0m\u001b[33m \u001b[0m│\n",
"╰──────────────┴───────────┴──────────────────────────┴───────┴───────────┴─────────╯\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"t = Table(title=\"Entity Queue\", box=box.ROUNDED, show_lines=True)\n",
"t.add_column(\"Entity\", style=\"bold\")\n",
"t.add_column(\"Type\", style=\"dim\")\n",
"t.add_column(\"Sources\")\n",
"t.add_column(\"Diffs\", justify=\"right\")\n",
"t.add_column(\"DIFFERENT\", justify=\"right\", style=\"red\")\n",
"t.add_column(\"MISSING\", justify=\"right\", style=\"yellow\")\n",
"\n",
"for b in BUNDLES:\n",
" entity = b[\"conflict\"][\"entityRelPath\"]\n",
" etype = b[\"conflict\"][\"entityType\"]\n",
" sources = [item[\"sourceId\"] for item in b[\"items\"]]\n",
" n = len(b[\"diffs\"])\n",
" n_diff = sum(1 for d in b[\"diffs\"] if d[\"verdict\"] == \"DIFFERENT\")\n",
" n_miss = sum(1 for d in b[\"diffs\"] if d[\"verdict\"] == \"MISSING\")\n",
" t.add_row(\n",
" entity, etype.lower(),\n",
" \" \".join(styled_source(s) for s in sources),\n",
" str(n), str(n_diff), str(n_miss),\n",
" )\n",
"\n",
"console.print(t)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "65I5X-Yo04Nx"
},
"source": [
"---\n",
"## Level 2 — Coverage Matrix\n",
"\n",
"For each entity: which anchors exist in which sources?\n",
"\n",
"- `●` present &nbsp;&nbsp; `○` absent"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "hALjMjQ304Ny",
"outputId": "7eca5c19-a80a-4af7-b1aa-a9ea58fd8fd5"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\"> button.react (2 sources, 9 diffs) </span>\n",
" \n",
" <span style=\"font-weight: bold\">Anchor </span> <span style=\"font-weight: bold\"> KNAPSACK </span> <span style=\"font-weight: bold\"> STORYBOOK </span> <span style=\"font-weight: bold\"> Verdict </span> <span style=\"font-weight: bold\"> Detail </span> \n",
" ─────────────────────────────────────────────────────────────────────────────────────────────────────── \n",
" <span style=\"font-weight: bold\">#props </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DIFFERENT</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Content differs (STORYBOOK vs KNAPSACK)</span> \n",
" <span style=\"font-weight: bold\">#props.size </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DIFFERENT</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Content differs (KNAPSACK vs STORYBOOK)</span> \n",
" <span style=\"font-weight: bold\">#props.variant </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DIFFERENT</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Content differs (STORYBOOK vs KNAPSACK)</span> \n",
" <span style=\"font-weight: bold\">#snippets.default </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DIFFERENT</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Content differs (STORYBOOK vs KNAPSACK)</span> \n",
" <span style=\"font-weight: bold\">#snippets.with-variant </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DIFFERENT</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Content differs (STORYBOOK vs KNAPSACK)</span> \n",
" <span style=\"font-weight: bold\">#props.loading </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" <span style=\"font-weight: bold\">#slots.icon </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" <span style=\"font-weight: bold\">#snippets.disabled </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" <span style=\"font-weight: bold\">#snippets.loading </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" \n",
"</pre>\n"
],
"text/plain": [
"\u001b[3m button.react (2 sources, 9 diffs) \u001b[0m\n",
" \n",
" \u001b[1mAnchor \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mKNAPSACK\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mSTORYBOOK\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mVerdict \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mDetail \u001b[0m \n",
" ─────────────────────────────────────────────────────────────────────────────────────────────────────── \n",
" \u001b[1m#props \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;31mDIFFERENT\u001b[0m \u001b[2m \u001b[0m\u001b[2mContent differs (STORYBOOK vs KNAPSACK)\u001b[0m \n",
" \u001b[1m#props.size \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;31mDIFFERENT\u001b[0m \u001b[2m \u001b[0m\u001b[2mContent differs (KNAPSACK vs STORYBOOK)\u001b[0m \n",
" \u001b[1m#props.variant \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;31mDIFFERENT\u001b[0m \u001b[2m \u001b[0m\u001b[2mContent differs (STORYBOOK vs KNAPSACK)\u001b[0m \n",
" \u001b[1m#snippets.default \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;31mDIFFERENT\u001b[0m \u001b[2m \u001b[0m\u001b[2mContent differs (STORYBOOK vs KNAPSACK)\u001b[0m \n",
" \u001b[1m#snippets.with-variant \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;31mDIFFERENT\u001b[0m \u001b[2m \u001b[0m\u001b[2mContent differs (STORYBOOK vs KNAPSACK)\u001b[0m \n",
" \u001b[1m#props.loading \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \u001b[1m#slots.icon \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \u001b[1m#snippets.disabled \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \u001b[1m#snippets.loading \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\"> card.react (2 sources, 11 diffs) </span>\n",
" \n",
" <span style=\"font-weight: bold\">Anchor </span> <span style=\"font-weight: bold\"> KNAPSACK </span> <span style=\"font-weight: bold\"> STORYBOOK </span> <span style=\"font-weight: bold\"> Verdict </span> <span style=\"font-weight: bold\"> Detail </span> \n",
" ─────────────────────────────────────────────────────────────────────────────────────────────────────── \n",
" <span style=\"font-weight: bold\">#description </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DIFFERENT</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Content differs (KNAPSACK vs STORYBOOK)</span> \n",
" <span style=\"font-weight: bold\">#props </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DIFFERENT</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Content differs (STORYBOOK vs KNAPSACK)</span> \n",
" <span style=\"font-weight: bold\">#props.padding </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DIFFERENT</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Content differs (KNAPSACK vs STORYBOOK)</span> \n",
" <span style=\"font-weight: bold\">#snippets.default </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DIFFERENT</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Content differs (STORYBOOK vs KNAPSACK)</span> \n",
" <span style=\"font-weight: bold\">#props.elevation </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" <span style=\"font-weight: bold\">#props.interactive </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" <span style=\"font-weight: bold\">#slots.footer </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" <span style=\"font-weight: bold\">#slots.header </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" <span style=\"font-weight: bold\">#snippets.elevated </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" <span style=\"font-weight: bold\">#snippets.interactive </span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" <span style=\"font-weight: bold\">#snippets.no-border </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" \n",
"</pre>\n"
],
"text/plain": [
"\u001b[3m card.react (2 sources, 11 diffs) \u001b[0m\n",
" \n",
" \u001b[1mAnchor \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mKNAPSACK\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mSTORYBOOK\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mVerdict \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mDetail \u001b[0m \n",
" ─────────────────────────────────────────────────────────────────────────────────────────────────────── \n",
" \u001b[1m#description \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;31mDIFFERENT\u001b[0m \u001b[2m \u001b[0m\u001b[2mContent differs (KNAPSACK vs STORYBOOK)\u001b[0m \n",
" \u001b[1m#props \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;31mDIFFERENT\u001b[0m \u001b[2m \u001b[0m\u001b[2mContent differs (STORYBOOK vs KNAPSACK)\u001b[0m \n",
" \u001b[1m#props.padding \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;31mDIFFERENT\u001b[0m \u001b[2m \u001b[0m\u001b[2mContent differs (KNAPSACK vs STORYBOOK)\u001b[0m \n",
" \u001b[1m#snippets.default \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;31mDIFFERENT\u001b[0m \u001b[2m \u001b[0m\u001b[2mContent differs (STORYBOOK vs KNAPSACK)\u001b[0m \n",
" \u001b[1m#props.elevation \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \u001b[1m#props.interactive \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \u001b[1m#slots.footer \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \u001b[1m#slots.header \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \u001b[1m#snippets.elevated \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \u001b[1m#snippets.interactive \u001b[0m\u001b[1m \u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \u001b[1m#snippets.no-border \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\"> modal.react (3 sources, 24 diffs) </span>\n",
" \n",
" <span style=\"font-weight: bold\">Anchor </span> <span style=\"font-weight: bold\"> FIGMA </span> <span style=\"font-weight: bold\"> KNAPSACK </span> <span style=\"font-weight: bold\"> STORYBOOK </span> <span style=\"font-weight: bold\"> Verdict </span> <span style=\"font-weight: bold\"> Detail </span> \n",
" ───────────────────────────────────────────────────────────────────────────────────────────────────────────────── \n",
" <span style=\"font-weight: bold\">#overview </span> <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">●</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DIFFERENT</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Content differs across 3 definitions </span> \n",
" <span style=\"font-weight: bold\">#props.size </span> <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">●</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DIFFERENT</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Content differs across 3 definitions </span> \n",
" <span style=\"font-weight: bold\">#title </span> <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">●</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DIFFERENT</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Content differs (KNAPSACK, STORYBOOK +1)</span> \n",
" <span style=\"font-weight: bold\">#accessibility </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#migration </span> <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#props.danger </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#props.dismissible </span> <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#props.isOpen </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#props.kind </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#props.onClose </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#props.onRequestClose </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#props.open </span> <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">●</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" <span style=\"font-weight: bold\">#props.returnFocus </span> <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#slots </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#slots.body </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#slots.footer </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#slots.title </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#snippets.confirm-delete </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#snippets.destructive </span> <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#snippets.long-content </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#snippets.non-dismissible </span> <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#snippets.scroll </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">●</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" <span style=\"font-weight: bold\">#usage </span> <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">●</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 1 source </span> \n",
" <span style=\"font-weight: bold\">#usage.do-dont </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">●</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">○</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">MISSING</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Missing in 2 sources </span> \n",
" \n",
"</pre>\n"
],
"text/plain": [
"\u001b[3m modal.react (3 sources, 24 diffs) \u001b[0m\n",
" \n",
" \u001b[1mAnchor \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mFIGMA \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mKNAPSACK\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mSTORYBOOK\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mVerdict \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1mDetail \u001b[0m \n",
" ───────────────────────────────────────────────────────────────────────────────────────────────────────────────── \n",
" \u001b[1m#overview \u001b[0m\u001b[1m \u001b[0m \u001b[1;35m●\u001b[0m \u001b[1;34m●\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;31mDIFFERENT\u001b[0m \u001b[2m \u001b[0m\u001b[2mContent differs across 3 definitions \u001b[0m \n",
" \u001b[1m#props.size \u001b[0m\u001b[1m \u001b[0m \u001b[1;35m●\u001b[0m \u001b[1;34m●\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;31mDIFFERENT\u001b[0m \u001b[2m \u001b[0m\u001b[2mContent differs across 3 definitions \u001b[0m \n",
" \u001b[1m#title \u001b[0m\u001b[1m \u001b[0m \u001b[1;35m●\u001b[0m \u001b[1;34m●\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;31mDIFFERENT\u001b[0m \u001b[2m \u001b[0m\u001b[2mContent differs (KNAPSACK, STORYBOOK +1)\u001b[0m \n",
" \u001b[1m#accessibility \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#migration \u001b[0m\u001b[1m \u001b[0m \u001b[1;35m●\u001b[0m \u001b[2m○\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#props.danger \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#props.dismissible \u001b[0m\u001b[1m \u001b[0m \u001b[1;35m●\u001b[0m \u001b[2m○\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#props.isOpen \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#props.kind \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#props.onClose \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#props.onRequestClose \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#props.open \u001b[0m\u001b[1m \u001b[0m \u001b[1;35m●\u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \u001b[1m#props.returnFocus \u001b[0m\u001b[1m \u001b[0m \u001b[1;35m●\u001b[0m \u001b[2m○\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#slots \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#slots.body \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#slots.footer \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#slots.title \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#snippets.confirm-delete \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#snippets.destructive \u001b[0m\u001b[1m \u001b[0m \u001b[1;35m●\u001b[0m \u001b[2m○\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#snippets.long-content \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#snippets.non-dismissible\u001b[0m\u001b[1m \u001b[0m \u001b[1;35m●\u001b[0m \u001b[2m○\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#snippets.scroll \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33m●\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \u001b[1m#usage \u001b[0m\u001b[1m \u001b[0m \u001b[1;35m●\u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 1 source \u001b[0m \n",
" \u001b[1m#usage.do-dont \u001b[0m\u001b[1m \u001b[0m \u001b[2m○\u001b[0m \u001b[1;34m●\u001b[0m \u001b[2m○\u001b[0m \u001b[1;33mMISSING\u001b[0m \u001b[2m \u001b[0m\u001b[2mMissing in 2 sources \u001b[0m \n",
" \n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def coverage_table(bundle: dict) -> Table:\n",
" entity = bundle[\"conflict\"][\"entityRelPath\"]\n",
" sources = [item[\"sourceId\"] for item in bundle[\"items\"]]\n",
" diffs = sorted(bundle[\"diffs\"], key=lambda d: (d[\"verdict\"] != \"DIFFERENT\", d[\"anchor\"]))\n",
"\n",
" t = Table(\n",
" title=f\"{entity} ({len(sources)} sources, {len(diffs)} diffs)\",\n",
" box=box.SIMPLE_HEAD, show_lines=False, pad_edge=False,\n",
" )\n",
" t.add_column(\"Anchor\", style=\"bold\", min_width=24)\n",
" for s in sources:\n",
" t.add_column(s, justify=\"center\", min_width=6)\n",
" t.add_column(\"Verdict\", min_width=10)\n",
" t.add_column(\"Detail\", style=\"dim\", max_width=40)\n",
"\n",
" for d in diffs:\n",
" present = set()\n",
" for defn in d[\"preview\"][\"definitions\"]:\n",
" present.update(defn[\"sources\"])\n",
" missing = set(d[\"preview\"][\"diff\"].get(\"missingSourceIds\", []))\n",
"\n",
" dots = []\n",
" for s in sources:\n",
" has_it = (s not in missing) if d[\"preview\"][\"diff\"][\"kind\"] == \"MISSING_SOURCES\" else (s in present)\n",
" style = SOURCE_STYLES.get(s, \"white\")\n",
" dots.append(f\"[{style}]●[/{style}]\" if has_it else \"[dim]○[/dim]\")\n",
"\n",
" vs = \"bold red\" if d[\"verdict\"] == \"DIFFERENT\" else \"bold yellow\"\n",
" t.add_row(d[\"anchor\"], *dots, f\"[{vs}]{d['verdict']}[/{vs}]\", d[\"diffSummary\"])\n",
" return t\n",
"\n",
"\n",
"for b in BUNDLES:\n",
" console.print()\n",
" console.print(coverage_table(b))\n",
" console.print()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "o342xXcy04Ny"
},
"source": [
"---\n",
"## Summary"
]
},
{
"cell_type": "markdown",
"source": [
"---\n",
"## Level 3 — Diff Detail\n",
"\n",
"Pick an entity and anchor to drill into the actual content divergence."
],
"metadata": {
"id": "J7AzziNq04Ny"
}
},
{
"cell_type": "code",
"source": [
"from rich.panel import Panel\n",
"from rich.columns import Columns\n",
"from rich.text import Text\n",
"from rich.syntax import Syntax\n",
"\n",
"def _lookup(entity: str, anchor: str | None = None):\n",
" \"\"\"Find a bundle by entity name (fuzzy), optionally a diff by anchor.\"\"\"\n",
" bundle = None\n",
" for b in BUNDLES:\n",
" if entity in b[\"conflict\"][\"entityRelPath\"]:\n",
" bundle = b\n",
" break\n",
" if not bundle:\n",
" console.print(f\"[red]Entity not found:[/red] {entity}\")\n",
" return None, None\n",
" if anchor is None:\n",
" return bundle, None\n",
" if not anchor.startswith(\"#\"):\n",
" anchor = \"#\" + anchor\n",
" for d in bundle[\"diffs\"]:\n",
" if d[\"anchor\"] == anchor:\n",
" return bundle, d\n",
" console.print(f\"[red]Anchor not found:[/red] {anchor}\")\n",
" console.print(\" Available:\", \", \".join(d[\"anchor\"] for d in bundle[\"diffs\"]))\n",
" return bundle, None\n",
"\n",
"\n",
"def show_diff(entity: str, anchor: str):\n",
" \"\"\"Show a rich diff for one entity + anchor.\"\"\"\n",
" bundle, diff = _lookup(entity, anchor)\n",
" if not diff:\n",
" return\n",
"\n",
" sources = [i[\"sourceId\"] for i in bundle[\"items\"]]\n",
" verdict = diff[\"verdict\"]\n",
" vc = \"red\" if verdict == \"DIFFERENT\" else \"yellow\"\n",
"\n",
" console.print()\n",
" console.print(Panel(\n",
" f\"[bold]{bundle['conflict']['entityRelPath']}[/bold] > [bold]{diff['anchor']}[/bold]\"\n",
" f\" [{vc}]{verdict}[/{vc}]\"\n",
" f\"\\n[dim]{diff['diffSummary']}[/dim]\",\n",
" title=\"Diff Detail\", border_style=\"bright_blue\",\n",
" ))\n",
"\n",
" # ── Definitions: what each source says ──\n",
" for defn in diff[\"preview\"][\"definitions\"]:\n",
" src_label = \" \".join(styled_source(s) for s in defn[\"sources\"])\n",
" val = defn.get(\"value\")\n",
" if val is None:\n",
" console.print(Panel(\n",
" f\"[dim]Content not inlined (hash: {defn['hash']})[/dim]\",\n",
" title=src_label, border_style=\"dim\",\n",
" ))\n",
" elif val[\"kind\"] == \"TEXT\":\n",
" lang = val.get(\"lang\", \"\")\n",
" if lang == \"tsx\":\n",
" lang = \"typescript\"\n",
" body = Syntax(val[\"text\"], lang or \"text\", theme=\"monokai\", word_wrap=True) if val[\"text\"].strip() else Text(\"(empty)\", style=\"dim italic\")\n",
" console.print(Panel(body, title=src_label, border_style=\"bright_white\"))\n",
" elif val[\"kind\"] == \"TABLE\":\n",
" tbl = Table(box=box.SIMPLE, show_lines=False, pad_edge=False)\n",
" for col in val[\"table\"][\"columns\"]:\n",
" tbl.add_column(col)\n",
" for row in val[\"table\"][\"rows\"]:\n",
" tbl.add_row(*(row.get(c, \"\") for c in val[\"table\"][\"columns\"]))\n",
" console.print(Panel(tbl, title=src_label, border_style=\"bright_white\"))\n",
"\n",
" # ── Diff payload ──\n",
" payload = diff[\"preview\"][\"diff\"]\n",
" kind = payload[\"kind\"]\n",
"\n",
" if kind == \"MISSING_SOURCES\":\n",
" missing = payload[\"missingSourceIds\"]\n",
" present = set()\n",
" for defn in diff[\"preview\"][\"definitions\"]:\n",
" present.update(defn[\"sources\"])\n",
" t = Text()\n",
" t.append(\"Present: \", style=\"bold\")\n",
" t.append(\", \".join(sorted(present)), style=\"green\")\n",
" t.append(\" Missing: \", style=\"bold\")\n",
" t.append(\", \".join(missing), style=\"red bold\")\n",
" console.print(Panel(t, title=\"Coverage\", border_style=\"yellow\"))\n",
"\n",
" elif kind == \"TEXT_UNIFIED\":\n",
" for patch in payload[\"patches\"]:\n",
" lines = patch[\"text\"].split(\"\\\\n\") if \"\\\\n\" in patch[\"text\"] else patch[\"text\"].splitlines()\n",
" rich_lines = Text()\n",
" for line in lines:\n",
" if line.startswith(\"-\"):\n",
" rich_lines.append(line + \"\\n\", style=\"red\")\n",
" elif line.startswith(\"+\"):\n",
" rich_lines.append(line + \"\\n\", style=\"green\")\n",
" else:\n",
" rich_lines.append(line + \"\\n\", style=\"dim\")\n",
" console.print(Panel(rich_lines, title=\"Unified Diff\", border_style=\"magenta\"))\n",
"\n",
" elif kind == \"TABLE_DELTA\":\n",
" for entry in payload[\"deltas\"]:\n",
" delta = entry[\"delta\"]\n",
" t = Text()\n",
" if delta.get(\"added\"):\n",
" t.append(\"+ Added rows: \", style=\"green bold\")\n",
" t.append(\", \".join(delta[\"added\"]) + \"\\n\", style=\"green\")\n",
" if delta.get(\"removed\"):\n",
" t.append(\"- Removed rows: \", style=\"red bold\")\n",
" t.append(\", \".join(delta[\"removed\"]) + \"\\n\", style=\"red\")\n",
" if delta.get(\"changed\"):\n",
" t.append(\"~ Changed rows: \", style=\"yellow bold\")\n",
" t.append(\", \".join(delta[\"changed\"]) + \"\\n\", style=\"yellow\")\n",
" console.print(Panel(t, title=\"Table Delta\", border_style=\"magenta\"))\n",
"\n",
"\n",
"def show_entity(entity: str):\n",
" \"\"\"Show all diffs for an entity.\"\"\"\n",
" bundle, _ = _lookup(entity)\n",
" if not bundle:\n",
" return\n",
" for d in bundle[\"diffs\"]:\n",
" show_diff(entity, d[\"anchor\"])"
],
"metadata": {
"id": "EM4nqWeg04Ny"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Try it: show_diff(\"modal\", \"#props.size\") or show_diff(\"button\", \"#props\")\n",
"show_diff(\"modal\", \"#overview\")"
],
"metadata": {
"id": "Gh6QqlYE04Ny"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "ZSGGapqB04Ny",
"outputId": "0f84d5f3-9258-4580-e5ee-bb2fb84e9205"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Verdict breakdown per entity</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1mVerdict breakdown per entity\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"shape: (3, 3)\n",
"┌──────────────┬─────────┬───────────┐\n",
"│ entity ┆ MISSING ┆ DIFFERENT │\n",
"│ --- ┆ --- ┆ --- │\n",
"│ str ┆ u32 ┆ u32 │\n",
"╞══════════════╪═════════╪═══════════╡\n",
"│ button.react ┆ 4 ┆ 5 │\n",
"│ card.react ┆ 7 ┆ 4 │\n",
"│ modal.react ┆ 21 ┆ 3 │\n",
"└──────────────┴─────────┴───────────┘\n"
]
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Diff kind x verdict</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1mDiff kind x verdict\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"shape: (3, 3)\n",
"┌─────────────────┬───────────┬─────┐\n",
"│ diff_kind ┆ verdict ┆ len │\n",
"│ --- ┆ --- ┆ --- │\n",
"│ str ┆ str ┆ u32 │\n",
"╞═════════════════╪═══════════╪═════╡\n",
"│ MISSING_SOURCES ┆ MISSING ┆ 32 │\n",
"│ TEXT_UNIFIED ┆ DIFFERENT ┆ 10 │\n",
"│ TABLE_DELTA ┆ DIFFERENT ┆ 2 │\n",
"└─────────────────┴───────────┴─────┘\n"
]
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\"> Source Richness </span>\n",
"╭───────────┬─────────────╮\n",
"│<span style=\"font-weight: bold\"> Source </span>│<span style=\"font-weight: bold\"> Definitions </span>│\n",
"├───────────┼─────────────┤\n",
"│ <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">KNAPSACK</span> │ 33 │\n",
"│ <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">STORYBOOK</span> │ 18 │\n",
"│ <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">FIGMA</span> │ 10 │\n",
"╰───────────┴─────────────╯\n",
"</pre>\n"
],
"text/plain": [
"\u001b[3m Source Richness \u001b[0m\n",
"╭───────────┬─────────────╮\n",
"│\u001b[1m \u001b[0m\u001b[1mSource \u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mDefinitions\u001b[0m\u001b[1m \u001b[0m│\n",
"├───────────┼─────────────┤\n",
"│ \u001b[1;34mKNAPSACK\u001b[0m │ 33 │\n",
"│ \u001b[1;33mSTORYBOOK\u001b[0m │ 18 │\n",
"│ \u001b[1;35mFIGMA\u001b[0m │ 10 │\n",
"╰───────────┴─────────────╯\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"summary = (\n",
" df.group_by(\"entity\", \"verdict\")\n",
" .len()\n",
" .pivot(on=\"verdict\", index=\"entity\", values=\"len\")\n",
" .fill_null(0)\n",
" .sort(\"entity\")\n",
")\n",
"console.print(\"[bold]Verdict breakdown per entity[/bold]\")\n",
"print(summary)\n",
"console.print()\n",
"\n",
"kind_dist = df.group_by(\"diff_kind\", \"verdict\").len().sort(\"len\", descending=True)\n",
"console.print(\"[bold]Diff kind x verdict[/bold]\")\n",
"print(kind_dist)\n",
"console.print()\n",
"\n",
"source_counts = {}\n",
"for b in BUNDLES:\n",
" for d in b[\"diffs\"]:\n",
" for defn in d[\"preview\"][\"definitions\"]:\n",
" for s in defn[\"sources\"]:\n",
" source_counts[s] = source_counts.get(s, 0) + 1\n",
"\n",
"t = Table(title=\"Source Richness\", box=box.ROUNDED)\n",
"t.add_column(\"Source\")\n",
"t.add_column(\"Definitions\", justify=\"right\")\n",
"for s, c in sorted(source_counts.items(), key=lambda x: -x[1]):\n",
" style = SOURCE_STYLES.get(s, \"white\")\n",
" t.add_row(f\"[{style}]{s}[/{style}]\", str(c))\n",
"console.print(t)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "o-Blguqa04Ny"
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "ttn2X4Q_04Ny"
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.9"
},
"colab": {
"provenance": [],
"include_colab_link": true
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Found groups: [
'COMPONENT::button.react.mdx',
'COMPONENT::card.react.mdx',
'COMPONENT::modal.react.mdx',
'TOKEN::global.tokens.json'
]
==== Conflict Bundle ====
{
"conflict": {
"entityKey": "component/button.react",
"entityType": "COMPONENT",
"entityRelPath": "button.react",
"fingerprint": "cf_v1_08cb0ec6fa7890be6f7973f5cc05dd28794430fe3ef045146f2cc534f79e00dc",
"createdAt": "2026-02-12T18:06:50.990Z",
"updatedAt": "2026-02-12T18:06:50.990Z"
},
"items": [
{
"fingerprint": "cf_v1_08cb0ec6fa7890be6f7973f5cc05dd28794430fe3ef045146f2cc534f79e00dc",
"sourceId": "KNAPSACK",
"frontmatterSchemaVersion": 1,
"frontmatter": {
"siteId": "synthetic-test",
"canonicalKey": "component/button.react",
"source": "knapsack",
"sourceKey": "knapsack://patterns/button",
"lastIngested": "2026-02-03T12:00:00.000Z",
"contentHash": "sha256:c3d4e5f6789012345678901234567890abcdef1234567890abcdef1234567ab2",
"platform": "react"
}
},
{
"fingerprint": "cf_v1_08cb0ec6fa7890be6f7973f5cc05dd28794430fe3ef045146f2cc534f79e00dc",
"sourceId": "STORYBOOK",
"frontmatterSchemaVersion": 1,
"frontmatter": {
"siteId": "synthetic-test",
"canonicalKey": "component/button.react",
"source": "storybook",
"sourceKey": "storybook://design/story/button--default",
"lastIngested": "2026-02-03T12:00:00.000Z",
"contentHash": "sha256:a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
"platform": "react"
}
}
],
"diffs": [
{
"fingerprint": "cf_v1_08cb0ec6fa7890be6f7973f5cc05dd28794430fe3ef045146f2cc534f79e00dc",
"anchor": "#props",
"verdict": "DIFFERENT",
"matchMethod": "EXACT",
"diffSummary": "Content differs (STORYBOOK vs KNAPSACK)",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "b8f9f657b26a28269d93c1cae1dd562a30b46717f91296df702f7b7b3ef69bcd",
"sources": [
"STORYBOOK"
],
"value": {
"kind": "TABLE",
"table": {
"columns": [
"Default",
"Description",
"Name",
"Type"
],
"keyColumn": "Name",
"rows": [
{
"Name": "disabled",
"Type": "boolean",
"Default": "false",
"Description": "Whether the button is disabled"
},
{
"Name": "onClick",
"Type": "function",
"Default": "-",
"Description": "Click handler callback"
},
{
"Name": "size",
"Type": "string",
"Default": "\"md\"",
"Description": "The size of the button"
},
{
"Name": "variant",
"Type": "string",
"Default": "\"primary\"",
"Description": "The visual style variant"
}
]
}
}
},
{
"hash": "f3130da3e8ec701b6c804c30ed1943a2b91f812e882008e8a6de64d8c506145a",
"sources": [
"KNAPSACK"
],
"value": {
"kind": "TABLE",
"table": {
"columns": [
"Default",
"Description",
"Name",
"Type"
],
"keyColumn": "Name",
"rows": [
{
"Name": "disabled",
"Type": "boolean",
"Default": "false",
"Description": "Whether the button is disabled"
},
{
"Name": "loading",
"Type": "boolean",
"Default": "false",
"Description": "Shows loading spinner"
},
{
"Name": "onClick",
"Type": "function",
"Default": "-",
"Description": "Click handler callback"
},
{
"Name": "size",
"Type": "string",
"Default": "\"medium\"",
"Description": "The size of the button"
},
{
"Name": "variant",
"Type": "string",
"Default": "\"primary\"",
"Description": "The visual style variant"
}
]
}
}
}
],
"diff": {
"kind": "TABLE_DELTA",
"baselineHash": "b8f9f657b26a28269d93c1cae1dd562a30b46717f91296df702f7b7b3ef69bcd",
"deltas": [
{
"toHash": "f3130da3e8ec701b6c804c30ed1943a2b91f812e882008e8a6de64d8c506145a",
"delta": {
"kind": "ROW_DIFF",
"added": [
"loading"
],
"removed": [],
"changed": [
"size"
]
}
}
]
}
},
"diffHash": "e59437c5a729380f7ecc0508ea4c52008eed063083e0e8e6c54e2841afdb09df",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_08cb0ec6fa7890be6f7973f5cc05dd28794430fe3ef045146f2cc534f79e00dc",
"anchor": "#props.loading",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "1242545ff8e564f1997882243e4dc4730086d4c4a1f7ca89c7d1b1c1bf2d197e",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"STORYBOOK"
]
}
},
"diffHash": "974abd78d52396335a2938c843e70d769e855dfe7b0aa01b52e4f26eb651dccd",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_08cb0ec6fa7890be6f7973f5cc05dd28794430fe3ef045146f2cc534f79e00dc",
"anchor": "#props.size",
"verdict": "DIFFERENT",
"matchMethod": "FALLBACK",
"diffSummary": "Content differs (KNAPSACK vs STORYBOOK)",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "16f2ae5b346ea69706d8eb05b396be19e85085053be645e35d12736b0dc09950",
"sources": [
"KNAPSACK"
],
"value": {
"kind": "TEXT",
"text": "Controls the size of the button.\n\n**Allowed values:** `small`, `medium`, `large`",
"lang": "tsx"
}
},
{
"hash": "2cacdc8f87ddef2baffa2dfaedf5fbccba2a6a6d4cb3df045bb55eec42bd7959",
"sources": [
"STORYBOOK"
],
"value": {
"kind": "TEXT",
"text": "Controls the size of the button.\n\n**Allowed values:** `sm`, `md`, `lg`",
"lang": "tsx"
}
}
],
"diff": {
"kind": "TEXT_UNIFIED",
"baselineHash": "16f2ae5b346ea69706d8eb05b396be19e85085053be645e35d12736b0dc09950",
"patches": [
{
"toHash": "2cacdc8f87ddef2baffa2dfaedf5fbccba2a6a6d4cb3df045bb55eec42bd7959",
"text": "===================================================================\n--- KNAPSACK:#props.size\t\n+++ STORYBOOK:#props.size\t\n@@ -1,3 +1,3 @@\n Controls the size of the button.\n \n-**Allowed values:** `small`, `medium`, `large`\n\\ No newline at end of file\n+**Allowed values:** `sm`, `md`, `lg`\n\\ No newline at end of file\n"
}
]
}
},
"diffHash": "d61665467cadd42ea25a7cdac007a4c1738c62491531662f4b8e7846fd1f2f61",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_08cb0ec6fa7890be6f7973f5cc05dd28794430fe3ef045146f2cc534f79e00dc",
"anchor": "#props.variant",
"verdict": "DIFFERENT",
"matchMethod": "FALLBACK",
"diffSummary": "Content differs (STORYBOOK vs KNAPSACK)",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "d90ee977ab039513140b9c7dd65f49e347f619ce5bb8b6885a5074e2856c122e",
"sources": [
"STORYBOOK"
],
"value": {
"kind": "TEXT",
"text": "Controls the visual appearance of the button.\n\n**Allowed values:** `primary`, `secondary`",
"lang": "tsx"
}
},
{
"hash": "dbfe8be6afb1d9a23341c6cda9f83bfa563592202701e3d37635b1d91d6ed1ce",
"sources": [
"KNAPSACK"
],
"value": {
"kind": "TEXT",
"text": "Controls the visual appearance of the button.\n\n**Allowed values:** `primary`, `secondary`, `danger`",
"lang": "tsx"
}
}
],
"diff": {
"kind": "TEXT_UNIFIED",
"baselineHash": "d90ee977ab039513140b9c7dd65f49e347f619ce5bb8b6885a5074e2856c122e",
"patches": [
{
"toHash": "dbfe8be6afb1d9a23341c6cda9f83bfa563592202701e3d37635b1d91d6ed1ce",
"text": "===================================================================\n--- STORYBOOK:#props.variant\t\n+++ KNAPSACK:#props.variant\t\n@@ -1,3 +1,3 @@\n Controls the visual appearance of the button.\n \n-**Allowed values:** `primary`, `secondary`\n\\ No newline at end of file\n+**Allowed values:** `primary`, `secondary`, `danger`\n\\ No newline at end of file\n"
}
]
}
},
"diffHash": "91d8a36aa0784405538ce2f1cfab49f78d8e9e7f26d80549bdc8a17a114a86a5",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_08cb0ec6fa7890be6f7973f5cc05dd28794430fe3ef045146f2cc534f79e00dc",
"anchor": "#slots.icon",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "9c253952f8b761e2455f281ef72f1e25466dd11dd2392e7dec710e56a7de5a46",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"STORYBOOK"
]
}
},
"diffHash": "2a0146c66192db7b82c2853d21c32b61b19c6d23b590d1e23a3768e30b4155b7",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_08cb0ec6fa7890be6f7973f5cc05dd28794430fe3ef045146f2cc534f79e00dc",
"anchor": "#snippets.default",
"verdict": "DIFFERENT",
"matchMethod": "FALLBACK",
"diffSummary": "Content differs (STORYBOOK vs KNAPSACK)",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "831baaaf87331f052714a0117c71ffb02be9d7f8ea99296a133628a95af325d6",
"sources": [
"STORYBOOK"
],
"value": {
"kind": "TEXT",
"text": "<Button>Click</Button>",
"lang": "tsx"
}
},
{
"hash": "dcf2cd37f518dd69343b29b2126fa978323a677f87d2b86f16d1e7ad0733e8e2",
"sources": [
"KNAPSACK"
],
"value": {
"kind": "TEXT",
"text": "<Button variant=\"primary\">Click me</Button>",
"lang": "tsx"
}
}
],
"diff": {
"kind": "TEXT_UNIFIED",
"baselineHash": "831baaaf87331f052714a0117c71ffb02be9d7f8ea99296a133628a95af325d6",
"patches": [
{
"toHash": "dcf2cd37f518dd69343b29b2126fa978323a677f87d2b86f16d1e7ad0733e8e2",
"text": "===================================================================\n--- STORYBOOK:#snippets.default\t\n+++ KNAPSACK:#snippets.default\t\n@@ -1,1 +1,1 @@\n-<Button>Click</Button>\n\\ No newline at end of file\n+<Button variant=\"primary\">Click me</Button>\n\\ No newline at end of file\n"
}
]
}
},
"diffHash": "d866db45d10a821740006c288d288e0ed060d9647dacf4cf35f16316b9b318fd",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_08cb0ec6fa7890be6f7973f5cc05dd28794430fe3ef045146f2cc534f79e00dc",
"anchor": "#snippets.disabled",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "cebb4b02d2aa40a48b4a4c9a408aa1ad0015dc64e49b5404c6daaa248f804e20",
"sources": [
"STORYBOOK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"KNAPSACK"
]
}
},
"diffHash": "783c63b951150e743ae8840533c4aae0e587408ee90b15b8a3ffda09d6a0d97a",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_08cb0ec6fa7890be6f7973f5cc05dd28794430fe3ef045146f2cc534f79e00dc",
"anchor": "#snippets.loading",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "68e24701bd6afa1d0bc37442125798b38f0ecadbed34c037c976ca2760be2967",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"STORYBOOK"
]
}
},
"diffHash": "9d7d913a6db7f8ca8dbe451de77dab216732d243c84c718fd7eaa166a95cfd72",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_08cb0ec6fa7890be6f7973f5cc05dd28794430fe3ef045146f2cc534f79e00dc",
"anchor": "#snippets.with-variant",
"verdict": "DIFFERENT",
"matchMethod": "FALLBACK",
"diffSummary": "Content differs (STORYBOOK vs KNAPSACK)",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "7ebfa1911bed59de13cdea0d2b960a8fa1efc3866ae92567977126b7df516831",
"sources": [
"STORYBOOK"
],
"value": {
"kind": "TEXT",
"text": "<Button variant=\"secondary\">Secondary</Button>",
"lang": "tsx"
}
},
{
"hash": "c4479082493ce92473cb9c66a38617e516786a7b0b68d4a3c304ed55b460893f",
"sources": [
"KNAPSACK"
],
"value": {
"kind": "TEXT",
"text": "<Button variant=\"danger\">Delete</Button>",
"lang": "tsx"
}
}
],
"diff": {
"kind": "TEXT_UNIFIED",
"baselineHash": "7ebfa1911bed59de13cdea0d2b960a8fa1efc3866ae92567977126b7df516831",
"patches": [
{
"toHash": "c4479082493ce92473cb9c66a38617e516786a7b0b68d4a3c304ed55b460893f",
"text": "===================================================================\n--- STORYBOOK:#snippets.with-variant\t\n+++ KNAPSACK:#snippets.with-variant\t\n@@ -1,1 +1,1 @@\n-<Button variant=\"secondary\">Secondary</Button>\n\\ No newline at end of file\n+<Button variant=\"danger\">Delete</Button>\n\\ No newline at end of file\n"
}
]
}
},
"diffHash": "cfebc527dcc7cd38e00147ff62e43e8ee54a62422617b724e8e47da514dbd34a",
"diffObjectKey": null
}
],
"truncated": false
}
==== Conflict Bundle ====
{
"conflict": {
"entityKey": "component/card.react",
"entityType": "COMPONENT",
"entityRelPath": "card.react",
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"createdAt": "2026-02-12T18:06:50.993Z",
"updatedAt": "2026-02-12T18:06:50.993Z"
},
"items": [
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"sourceId": "KNAPSACK",
"frontmatterSchemaVersion": 1,
"frontmatter": {
"siteId": "synthetic-test",
"canonicalKey": "component/card.react",
"source": "knapsack",
"sourceKey": "knapsack://patterns/card",
"lastIngested": "2026-02-03T12:00:00.000Z",
"contentHash": "sha256:d4e5f6789012345678901234567890abcdef1234567890abcdef1234567ab2c3",
"platform": "react"
}
},
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"sourceId": "STORYBOOK",
"frontmatterSchemaVersion": 1,
"frontmatter": {
"siteId": "synthetic-test",
"canonicalKey": "component/card.react",
"source": "storybook",
"sourceKey": "storybook://design/story/card--default",
"lastIngested": "2026-02-03T12:00:00.000Z",
"contentHash": "sha256:b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef1234567a",
"platform": "react"
}
}
],
"diffs": [
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"anchor": "#description",
"verdict": "DIFFERENT",
"matchMethod": "FALLBACK",
"diffSummary": "Content differs (KNAPSACK vs STORYBOOK)",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "2d5b91d0f79016d0febba55233686d83ee2f73ef0ee2aaeaa65e1b5314383839",
"sources": [
"KNAPSACK"
],
"value": {
"kind": "TEXT",
"text": "A flexible card container for grouping related content with optional elevation and interactive states.",
"lang": "tsx"
}
},
{
"hash": "e652a055930768b0863320d82ed0f2d4a9ba5a8f595dcad163fd069a14119f09",
"sources": [
"STORYBOOK"
],
"value": {
"kind": "TEXT",
"text": "Container for content.",
"lang": "tsx"
}
}
],
"diff": {
"kind": "TEXT_UNIFIED",
"baselineHash": "2d5b91d0f79016d0febba55233686d83ee2f73ef0ee2aaeaa65e1b5314383839",
"patches": [
{
"toHash": "e652a055930768b0863320d82ed0f2d4a9ba5a8f595dcad163fd069a14119f09",
"text": "===================================================================\n--- KNAPSACK:#description\t\n+++ STORYBOOK:#description\t\n@@ -1,1 +1,1 @@\n-A flexible card container for grouping related content with optional elevation and interactive states.\n\\ No newline at end of file\n+Container for content.\n\\ No newline at end of file\n"
}
]
}
},
"diffHash": "10f9103a620ea3faa02688bbee2c0e0fefdd190c63dc81f496fb68028d06b500",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"anchor": "#props",
"verdict": "DIFFERENT",
"matchMethod": "EXACT",
"diffSummary": "Content differs (STORYBOOK vs KNAPSACK)",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "14c2f71dc5cc9a23b648ae4fcce84e0ec59a530c6cd4895fc55810a1b5a36ba5",
"sources": [
"STORYBOOK"
],
"value": {
"kind": "TABLE",
"table": {
"columns": [
"Default",
"Description",
"Name",
"Type"
],
"keyColumn": "Name",
"rows": [
{
"Name": "border",
"Type": "boolean",
"Default": "true",
"Description": "Whether to show border"
},
{
"Name": "padding",
"Type": "string",
"Default": "\"md\"",
"Description": "Internal padding"
}
]
}
}
},
{
"hash": "e1d2e4f0e38c8caa0cd127cf12989550184a63c590e830583b218bc4660cb701",
"sources": [
"KNAPSACK"
],
"value": {
"kind": "TABLE",
"table": {
"columns": [
"Default",
"Description",
"Name",
"Type"
],
"keyColumn": "Name",
"rows": [
{
"Name": "border",
"Type": "boolean",
"Default": "true",
"Description": "Whether to show border"
},
{
"Name": "elevation",
"Type": "string",
"Default": "\"none\"",
"Description": "Shadow depth level"
},
{
"Name": "interactive",
"Type": "boolean",
"Default": "false",
"Description": "Whether card is clickable"
},
{
"Name": "padding",
"Type": "string",
"Default": "\"md\"",
"Description": "Internal padding"
}
]
}
}
}
],
"diff": {
"kind": "TABLE_DELTA",
"baselineHash": "14c2f71dc5cc9a23b648ae4fcce84e0ec59a530c6cd4895fc55810a1b5a36ba5",
"deltas": [
{
"toHash": "e1d2e4f0e38c8caa0cd127cf12989550184a63c590e830583b218bc4660cb701",
"delta": {
"kind": "ROW_DIFF",
"added": [
"elevation",
"interactive"
],
"removed": [],
"changed": []
}
}
]
}
},
"diffHash": "86929123c1018f7308c2ea4842b94b1f32e04f51e35670611bbfee3329e4dea1",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"anchor": "#props.elevation",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "60ee65f30505113b3a117b036b25ad7676fe51ae58ea149f714c4d1fac916118",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"STORYBOOK"
]
}
},
"diffHash": "74ec6815341e22758f4220fa4f327af60b52cce9715a159508f2f9b94ba8ae3d",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"anchor": "#props.interactive",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "0c968dfae13a8894d8d5fa8838ed8aa6b2cbae7f30dd552fa47d8b3f668d15a4",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"STORYBOOK"
]
}
},
"diffHash": "833513e481fa1c37725f976a5feef5f5b992bfa9b33c1cef6610b421c91c54f3",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"anchor": "#props.padding",
"verdict": "DIFFERENT",
"matchMethod": "FALLBACK",
"diffSummary": "Content differs (KNAPSACK vs STORYBOOK)",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "34fe1dc4f42c96a6134d5683f509f827b67847c05431d0a66b8f527dd2297ae7",
"sources": [
"KNAPSACK"
],
"value": {
"kind": "TEXT",
"text": "Controls the internal spacing of the card.\n\n**Allowed values:** `none`, `sm`, `md`, `lg`, `xl`",
"lang": "tsx"
}
},
{
"hash": "fcd235ab91bb166e50b68b2254f395aa38d90b57a4c3ffc83a66f3bf7538cdca",
"sources": [
"STORYBOOK"
],
"value": {
"kind": "TEXT",
"text": "Controls the internal spacing of the card.\n\n**Allowed values:** `none`, `sm`, `md`, `lg`",
"lang": "tsx"
}
}
],
"diff": {
"kind": "TEXT_UNIFIED",
"baselineHash": "34fe1dc4f42c96a6134d5683f509f827b67847c05431d0a66b8f527dd2297ae7",
"patches": [
{
"toHash": "fcd235ab91bb166e50b68b2254f395aa38d90b57a4c3ffc83a66f3bf7538cdca",
"text": "===================================================================\n--- KNAPSACK:#props.padding\t\n+++ STORYBOOK:#props.padding\t\n@@ -1,3 +1,3 @@\n Controls the internal spacing of the card.\n \n-**Allowed values:** `none`, `sm`, `md`, `lg`, `xl`\n\\ No newline at end of file\n+**Allowed values:** `none`, `sm`, `md`, `lg`\n\\ No newline at end of file\n"
}
]
}
},
"diffHash": "4348bff7dd5c1040d0a32165486c8215c17b4dd91eaf54eb84e9ab8d4c1013ce",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"anchor": "#slots.footer",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "a3119caa3cd579e4332885d8960bd3921b2e539f0be9af40d68714d3f577a777",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"STORYBOOK"
]
}
},
"diffHash": "3cac6b441b55d96de5226cc0eb7c275edb73fc5e8dc94ba97f4fe182e25b1a32",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"anchor": "#slots.header",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "48c6d9f526a49b2621e01765735644862d789304cf7d51488bf32ea0878ec079",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"STORYBOOK"
]
}
},
"diffHash": "f16b08949ce2cb38092d46632bf6b61364e486bac42657f8ee64d7ac86928144",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"anchor": "#snippets.default",
"verdict": "DIFFERENT",
"matchMethod": "FALLBACK",
"diffSummary": "Content differs (STORYBOOK vs KNAPSACK)",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "1987615f0f4582c7769eacfea29817081c0517f1c2e8c63c1ac0bf43bfd485c4",
"sources": [
"STORYBOOK"
],
"value": {
"kind": "TEXT",
"text": "<Card>\n <p>Card content</p>\n</Card>",
"lang": "tsx"
}
},
{
"hash": "bd03b0987e576ac0d7741a9bb23a51cc2c113063bfae4d6381cc1f062a6682ce",
"sources": [
"KNAPSACK"
],
"value": {
"kind": "TEXT",
"text": "<Card elevation=\"low\">\n <Card.Header>\n <h3>Card Title</h3>\n </Card.Header>\n <p>Card content goes here with rich formatting.</p>\n <Card.Footer>\n <Button variant=\"primary\">Action</Button>\n </Card.Footer>\n</Card>",
"lang": "tsx"
}
}
],
"diff": {
"kind": "TEXT_UNIFIED",
"baselineHash": "1987615f0f4582c7769eacfea29817081c0517f1c2e8c63c1ac0bf43bfd485c4",
"patches": [
{
"toHash": "bd03b0987e576ac0d7741a9bb23a51cc2c113063bfae4d6381cc1f062a6682ce",
"text": "===================================================================\n--- STORYBOOK:#snippets.default\t\n+++ KNAPSACK:#snippets.default\t\n@@ -1,3 +1,9 @@\n-<Card>\n- <p>Card content</p>\n+<Card elevation=\"low\">\n+ <Card.Header>\n+ <h3>Card Title</h3>\n+ </Card.Header>\n+ <p>Card content goes here with rich formatting.</p>\n+ <Card.Footer>\n+ <Button variant=\"primary\">Action</Button>\n+ </Card.Footer>\n </Card>\n\\ No newline at end of file\n"
}
]
}
},
"diffHash": "47bb5a69d6c5adbe91421f54b60f22fbabda3841887c804f44d10d5cd5806422",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"anchor": "#snippets.elevated",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "7a6c46cf79910a002913b234f6a52bc39a82ff6c856bd206f97a045c493c8bdb",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"STORYBOOK"
]
}
},
"diffHash": "070eec93b75da6ea0f67979576a109dc5403db8ee4754279dbbfaa43bcb835c7",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"anchor": "#snippets.interactive",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "987c4a4427d99c0c8295f7627e7bfac80862350624b21ca0d12d22a0020c3ed9",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"STORYBOOK"
]
}
},
"diffHash": "531977e691d1e9d60cf7eb8af251c5d8cf70b5af6fa01fd90f9190499ad0d85d",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_aacc8cc38b4da67e060ffa588bd6295a8c267dffa5bf0901902dbb147094f03a",
"anchor": "#snippets.no-border",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "223ead2d8126788f3d443b03e569b81b0f08e5386ca197c0d11ff75a2e5b793c",
"sources": [
"STORYBOOK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"KNAPSACK"
]
}
},
"diffHash": "6506fc7698cb06425b301a49013298fe1bb9df07a6a3b56ad62bbb240d09757e",
"diffObjectKey": null
}
],
"truncated": false
}
==== Conflict Bundle ====
{
"conflict": {
"entityKey": "component/modal.react",
"entityType": "COMPONENT",
"entityRelPath": "modal.react",
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"createdAt": "2026-02-12T18:06:50.994Z",
"updatedAt": "2026-02-12T18:06:50.994Z"
},
"items": [
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"sourceId": "FIGMA",
"frontmatterSchemaVersion": 1,
"frontmatter": {
"siteId": "synthetic-test",
"canonicalKey": "component/modal.react",
"source": "figma",
"sourceKey": "figma://patterns/modal",
"lastIngested": "2026-02-03T12:00:00.000Z",
"contentHash": "sha256:e5f6789012345678901234567890abcdef1234567890abcdef1234567ab2c3d4",
"platform": "react"
}
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"sourceId": "KNAPSACK",
"frontmatterSchemaVersion": 1,
"frontmatter": {
"siteId": "synthetic-test",
"canonicalKey": "component/modal.react",
"source": "knapsack",
"sourceKey": "knapsack://patterns/modal",
"lastIngested": "2026-02-03T12:00:00.000Z",
"contentHash": "sha256:e5f6789012345678901234567890abcdef1234567890abcdef1234567ab2c3d4",
"platform": "react"
}
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"sourceId": "STORYBOOK",
"frontmatterSchemaVersion": 1,
"frontmatter": {
"siteId": "synthetic-test",
"canonicalKey": "component/modal.react",
"source": "storybook",
"sourceKey": "storybook://patterns/modal",
"lastIngested": "2026-02-03T12:00:00.000Z",
"contentHash": "sha256:e5f6789012345678901234567890abcdef1234567890abcdef1234567ab2c3d4",
"platform": "react"
}
}
],
"diffs": [
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#accessibility",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "f710b775947dce44dbeb9d2cfc3029a485d151c1bd0504a1da1180da642acd8d",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"STORYBOOK"
]
}
},
"diffHash": "9b2c5122d53152f187d672fac9350c41f15676deab910c0b85c1836fede9f22e",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#migration",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "0d2dde3c90d44eb373acaa8e7277cccc759444982a1542763fe1eff17f3774b0",
"sources": [
"FIGMA"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"KNAPSACK",
"STORYBOOK"
]
}
},
"diffHash": "f5c83588b85bffe7c73eadc4e8d1676815c778b5eed4f17faf091d85397e7cb9",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#overview",
"verdict": "DIFFERENT",
"matchMethod": "FALLBACK",
"diffSummary": "Content differs across 3 definitions",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "a8144cc4c5fbe96bcf54824a8c4389fc8553fe7ff07ef559d15ab6fdb4e5f505",
"sources": [
"STORYBOOK"
],
"value": {
"kind": "TEXT",
"text": "Dialog for content.",
"lang": "tsx"
}
},
{
"hash": "b1d1175a20c3e9e9b0c8ec68de1f790b5fe9916fc572064b249adfeb41913c91",
"sources": [
"KNAPSACK"
],
"value": {
"kind": "TEXT",
"text": "A dialog used to interrupt the user and capture attention for a focused task or decision.",
"lang": "tsx"
}
},
{
"hash": "c1e8fe6bc3ec7d1b3f3e20c4a82d01ab4cc31b28d0e8953e4f86c3454f0b858e",
"sources": [
"FIGMA"
],
"value": {
"kind": "TEXT",
"text": "This page documents the Modal component and recommended interaction patterns.",
"lang": "tsx"
}
}
],
"diff": {
"kind": "TEXT_UNIFIED",
"baselineHash": "a8144cc4c5fbe96bcf54824a8c4389fc8553fe7ff07ef559d15ab6fdb4e5f505",
"patches": [
{
"toHash": "b1d1175a20c3e9e9b0c8ec68de1f790b5fe9916fc572064b249adfeb41913c91",
"text": "===================================================================\n--- STORYBOOK:#overview\t\n+++ KNAPSACK:#overview\t\n@@ -1,1 +1,1 @@\n-Dialog for content.\n\\ No newline at end of file\n+A dialog used to interrupt the user and capture attention for a focused task or decision.\n\\ No newline at end of file\n"
},
{
"toHash": "c1e8fe6bc3ec7d1b3f3e20c4a82d01ab4cc31b28d0e8953e4f86c3454f0b858e",
"text": "===================================================================\n--- STORYBOOK:#overview\t\n+++ FIGMA:#overview\t\n@@ -1,1 +1,1 @@\n-Dialog for content.\n\\ No newline at end of file\n+This page documents the Modal component and recommended interaction patterns.\n\\ No newline at end of file\n"
}
]
}
},
"diffHash": "60a97b5e90e3a74d95ea1efcc362045e504a3b6adca9d12bda16a221d2514f33",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#props.danger",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "00af11a4d430d4d729aacc13cff2cd013559018cce3c110fdbc0d187b4d30d12",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"STORYBOOK"
]
}
},
"diffHash": "0b602b49c67ea45b08c26735f46db4265c265d0e90e80f6f2d85ce491b49a374",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#props.dismissible",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "73950f4f1e6371aca847192fb17b07bcfa8bddc548ddda5ccebaca189fadd73b",
"sources": [
"FIGMA"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"KNAPSACK",
"STORYBOOK"
]
}
},
"diffHash": "10de2e62669d70f115c3606237fb6449b9a60c9e1ddf79e488bf8323f0f9a058",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#props.isOpen",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "2505011a2d28f10814b7d57b279a6ae7e509892ec559df4b780e703a1c701b81",
"sources": [
"STORYBOOK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"KNAPSACK"
]
}
},
"diffHash": "2ec3767e27b6147e6b3b86b9649afa1aed974c913f91333a50573eae9ea0678b",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#props.kind",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "d6c4ddeea5cb59cd184234adf7e740cef8f665d3c0be691b9e7502d065de4e24",
"sources": [
"STORYBOOK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"KNAPSACK"
]
}
},
"diffHash": "2146ec261a573239bf0ab1ff3c681c96209797a438f5c6ff0cc9debb76e1bdcc",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#props.onClose",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "34d1d4436a6220e1266cd594fe116f2b5274438c3f8d68826873f9f241e2aea6",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"STORYBOOK"
]
}
},
"diffHash": "c0a305751f577da3794346eb9228c667ed2598b3a3fd9d94c1184e37a715c8f6",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#props.onRequestClose",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "fd73ce9e7f111b90b8909d1fb6d6bbbc2d753c906cf4b614292026bfd0da645d",
"sources": [
"STORYBOOK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"KNAPSACK"
]
}
},
"diffHash": "34a74dad065ba290df27fad925aacee4a110b100b643b39bcc2dc5cf81c81918",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#props.open",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "2505011a2d28f10814b7d57b279a6ae7e509892ec559df4b780e703a1c701b81",
"sources": [
"FIGMA",
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"STORYBOOK"
]
}
},
"diffHash": "807650d71edf3219afb56b3323b87d019157bef89ae16949bb881f74159d788f",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#props.returnFocus",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "bc0908db5449d0ccb34b67f71ceaf1bbe57602dc3fc7148facc476dce0283da4",
"sources": [
"FIGMA"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"KNAPSACK",
"STORYBOOK"
]
}
},
"diffHash": "f7d51efebcdc9a652ef0176afcde9715bfc2f5c0214136a79ee5fb5403dc003c",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#props.size",
"verdict": "DIFFERENT",
"matchMethod": "FALLBACK",
"diffSummary": "Content differs across 3 definitions",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "1cff234468cd821f3c7b1aba1b1ade474a414f38c249d5549ba0750800952c3d",
"sources": [
"STORYBOOK"
],
"value": {
"kind": "TEXT",
"text": "Allowed values: `small`, `medium`, `large`",
"lang": "tsx"
}
},
{
"hash": "3965fcf32026e7065e4e644c3f0647d63861d5bbb24603e27d0bfcff193edb69",
"sources": [
"FIGMA"
],
"value": {
"kind": "TEXT",
"text": "Allowed values: `sm`, `md`, `lg`, `xl`",
"lang": "tsx"
}
},
{
"hash": "7cac08bf98d88a629ba39ec1d5e008b165c53f3fa7c889947ecc98b6228b6ada",
"sources": [
"KNAPSACK"
],
"value": {
"kind": "TEXT",
"text": "Allowed values: `sm`, `md`, `lg`",
"lang": "tsx"
}
}
],
"diff": {
"kind": "TEXT_UNIFIED",
"baselineHash": "1cff234468cd821f3c7b1aba1b1ade474a414f38c249d5549ba0750800952c3d",
"patches": [
{
"toHash": "3965fcf32026e7065e4e644c3f0647d63861d5bbb24603e27d0bfcff193edb69",
"text": "===================================================================\n--- STORYBOOK:#props.size\t\n+++ FIGMA:#props.size\t\n@@ -1,1 +1,1 @@\n-Allowed values: `small`, `medium`, `large`\n\\ No newline at end of file\n+Allowed values: `sm`, `md`, `lg`, `xl`\n\\ No newline at end of file\n"
},
{
"toHash": "7cac08bf98d88a629ba39ec1d5e008b165c53f3fa7c889947ecc98b6228b6ada",
"text": "===================================================================\n--- STORYBOOK:#props.size\t\n+++ KNAPSACK:#props.size\t\n@@ -1,1 +1,1 @@\n-Allowed values: `small`, `medium`, `large`\n\\ No newline at end of file\n+Allowed values: `sm`, `md`, `lg`\n\\ No newline at end of file\n"
}
]
}
},
"diffHash": "b92ec34e2927dc4f0a11b3200f1b77da4801b07c1a5f8fdd42c9402924f57401",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#slots",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"STORYBOOK"
]
}
},
"diffHash": "48758b3ac9639e1a7db88b9dca2c60f145f95c276791a06fb377a8f029fe7f9a",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#slots.body",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "5ba9191630808f4446eb2623943b644b520a96fd46fea67b8c6b34f3588441dc",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"STORYBOOK"
]
}
},
"diffHash": "662aa8f79b39cbcb0731224a2f5fd31c5aa1730049b03ec669e30a05911ded31",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#slots.footer",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "bd12b501f9cd8509261ef4c0bf5fcd09d67ec4ffaed7d8b17ba551a4540849d5",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"STORYBOOK"
]
}
},
"diffHash": "0b2d71ee6c4ebe7d94c208f1a97e8b7b2c693b6a2386bdb08a5c3b02a1b4998f",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#slots.title",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "81ee566c51e2843caf7b21505c068801e7f7ac2ee1f8c7c36ef997e425e25b20",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"STORYBOOK"
]
}
},
"diffHash": "a71cbeed413d19e04e63567ac51e97a66a415dffdb2ac5e921de9f9a6c85b5f7",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#snippets.confirm-delete",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "c9773ccd5950fe8ca5ea4e3c0f07fd9d03fc4cafe25db6e40ddd0d80d67788b3",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"STORYBOOK"
]
}
},
"diffHash": "e270723e8a2cb4a9609bd30cedaf46ee191d9d2c8a3d251d6ead3a1214b71130",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#snippets.destructive",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "f18b554cfca61e52d5f43b8bb728784de92c57b861beb67a195e65cb6898ff27",
"sources": [
"FIGMA"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"KNAPSACK",
"STORYBOOK"
]
}
},
"diffHash": "77f6f3559a4642835a89523094e9c72181ef426d309ea8190d965089c67cb856",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#snippets.long-content",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "50f3da558756efd62aef94308b1b543fe84dc67fbde4a2337ce1d411554749a7",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"STORYBOOK"
]
}
},
"diffHash": "66a606307d34cb89f8fe63fb8f6971360bd098359e847e939658448a31944146",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#snippets.non-dismissible",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "06961b1512ad7d615563a7cff81fd3bd59b0f7be0f80f6cf06682ca470af7feb",
"sources": [
"FIGMA"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"KNAPSACK",
"STORYBOOK"
]
}
},
"diffHash": "ea60771d14955f0821b621dedbe759438833c2258c0444bb39f06b8e59398d9d",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#snippets.scroll",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "c8877fec79f765bca8d92925addf70ca20114edcd2a60b1e5e20ef4b0c5c96b2",
"sources": [
"STORYBOOK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"KNAPSACK"
]
}
},
"diffHash": "ba2b8a6d1ea8933963a7b8c86826267bb7246bfc0998056130c10655ca448425",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#title",
"verdict": "DIFFERENT",
"matchMethod": "FALLBACK",
"diffSummary": "Content differs (KNAPSACK, STORYBOOK +1)",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "bdaaa304983f9501cf55033cefe98470417a20ff455af61f4c8be046402088a6",
"sources": [
"KNAPSACK",
"STORYBOOK"
],
"value": {
"kind": "TEXT",
"text": "<Description />",
"lang": "tsx"
}
},
{
"hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"sources": [
"FIGMA"
],
"value": {
"kind": "TEXT",
"text": "",
"lang": "tsx"
}
}
],
"diff": {
"kind": "TEXT_UNIFIED",
"baselineHash": "bdaaa304983f9501cf55033cefe98470417a20ff455af61f4c8be046402088a6",
"patches": [
{
"toHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"text": "===================================================================\n--- KNAPSACK:#title\t\n+++ FIGMA:#title\t\n@@ -1,1 +0,0 @@\n-<Description />\n\\ No newline at end of file\n"
}
]
}
},
"diffHash": "1c213bce222f1edb23c400f59f79026fc11effbf7069a30b43a7f3e807ac5d92",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#usage",
"verdict": "MISSING",
"matchMethod": "FALLBACK",
"diffSummary": "Missing in 1 source",
"deltaCount": 1,
"preview": {
"definitions": [
{
"hash": "29a27ce3f7b4e5c115bd55cad532ce6ae4a3c60fd9c1cf6b7b2480c592dab0a8",
"sources": [
"KNAPSACK"
],
"value": {
"kind": "TEXT",
"text": "Use a Modal for critical flows that require an explicit action to continue.",
"lang": "tsx"
}
},
{
"hash": "989c35d5a0953a9f9b3667317c5d60d68fc75f9495283a983fed4631df618a49",
"sources": [
"FIGMA"
],
"value": {
"kind": "TEXT",
"text": "Prefer inline content when possible; reserve modals for decisions or multi-step tasks.",
"lang": "tsx"
}
}
],
"presentDefinitionHashes": [
"29a27ce3f7b4e5c115bd55cad532ce6ae4a3c60fd9c1cf6b7b2480c592dab0a8",
"989c35d5a0953a9f9b3667317c5d60d68fc75f9495283a983fed4631df618a49"
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"STORYBOOK"
]
}
},
"diffHash": "725d4602214adb693019422cc7a2697dc6641f1f9dd51fdddb705eaade71db8a",
"diffObjectKey": null
},
{
"fingerprint": "cf_v1_bba96e3b8fec9c3eab75ce81680085599ef580bf87c2c4f24e6ec2cd5bdbbc00",
"anchor": "#usage.do-dont",
"verdict": "MISSING",
"matchMethod": "EXACT",
"diffSummary": "Missing in 2 sources",
"deltaCount": 2,
"preview": {
"definitions": [
{
"hash": "b889619febab77baf7bf29e93e5d744015584de93f38081a403f8cc83fbc1b45",
"sources": [
"KNAPSACK"
]
}
],
"diff": {
"kind": "MISSING_SOURCES",
"missingSourceIds": [
"FIGMA",
"STORYBOOK"
]
}
},
"diffHash": "26c0236456f414810efb28ba4ba11b9e84b1cdd40b4fa452b657c8096cb80347",
"diffObjectKey": null
}
],
"truncated": false
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment