{
  "account_id": "public",
  "areas": [
    {
      "area": "foundations",
      "coverage_pct": 100.0,
      "criteria": [
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "The Primer Web Figma file was captured at full-file variable scope (880 variables, 8 collections, 1,507 alias references), and the taxonomy_prefixes breakdown shows a genuine multi-tier alias structure: base primitives (base/size, base/typography, base/text/weight) feed functional/pattern-layer semantic tokens (button/*, control/*, text/*, bgColor/*, borderColor/*, fgColor/*, spinner/*, avatar/*). The primer-primitives source repo documents the alias mechanism directly (a token's $value can reference another token, e.g. '{base.color.blue.3}') and enforces token-name validity via an automated lint (lint:tokens). This is comprehensive and operational, not merely documented-basic, but the packet contains no automated cross-consumer validation or measurement of the graph itself (only source-repo-level lint/build/contrast checks), so anchor 4 is not met. Note a disclosed conflict: primer-figma-guidance's prose states only color and size tokens are supported as Figma variables ('we still provide text and shadow tokens using styles'), but the observed full-file capture shows live 'typography' (34 vars) and 'base/typography' (4 vars) variable collections \u2014 per evidence precedence the observed implementation is preferred over this stale claim.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 303-305",
              "path": "figma-summary.json",
              "snapshot_id": "dfc83d5c91c7186f6315",
              "source_id": "primer-web-figma",
              "source_url": "https://www.figma.com/design/20ssJWembLUTeXgBwA6wd8"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 190-199",
              "path": "figma-variable-summary.json",
              "snapshot_id": "dfc83d5c91c7186f6315",
              "source_id": "primer-web-figma",
              "source_url": "https://www.figma.com/design/20ssJWembLUTeXgBwA6wd8"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 83-117",
              "path": "files/README.md",
              "snapshot_id": "5aeca3d83424d7cde1d4",
              "source_id": "primer-primitives",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/README.md"
            },
            {
              "evidence_authority": "unknown",
              "locator": "line 45",
              "path": "files/package.json",
              "snapshot_id": "5aeca3d83424d7cde1d4",
              "source_id": "primer-primitives",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/package.json"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 387-390",
              "path": "content.txt",
              "snapshot_id": "f478be6e00ccc7aec688",
              "source_id": "primer-figma-guidance",
              "source_url": "https://primer.style/product/getting-started/figma/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 122-136",
              "path": "figma-variable-summary.json",
              "snapshot_id": "dfc83d5c91c7186f6315",
              "source_id": "primer-web-figma",
              "source_url": "https://www.figma.com/design/20ssJWembLUTeXgBwA6wd8"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "token_taxonomy",
          "critical": true,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 5,
            "declared": 5
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Consumers relying on the published guidance page may wrongly assume typography tokens are not available as Figma variables and continue using styles, missing the more consistent variable-based workflow the current library actually supports.",
            "what_broke": "No confirmed break in the taxonomy itself, but current documentation (primer-figma-guidance) understates current capability: it claims typography still relies on styles-only, while the observed full-file Figma capture shows live typography variable collections.",
            "what_to_change": "Update the Figma guidance page to reflect that typography is now (partially) variable-backed, and clarify the current scope of styles-vs-variables usage.",
            "why": "primer-figma-guidance (content.txt lines 387-390) is normative documentation that has not been updated to reflect the current 'typography' and 'base/typography' variable collections visible in the full-file Figma export."
          },
          "generalizability": "system-wide",
          "label": "Token taxonomy and semantics",
          "median_score": 3.0,
          "next_anchor": "The token graph is validated, measured, and maintained across consumers",
          "next_anchor_gap": "Anchor 4 requires the token graph to be validated, measured, and maintained across consumers; the packet shows only primitives-source-level checks (lint:tokens, a11y-contrast CI) with no automated validation or measurement of token-graph correctness across the React/CSS/ViewComponents/Figma consumer matrix.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "The Primer Web Figma file was captured at full-file variable scope (880 variables, 8 collections, 1,507 alias references), and the taxonomy_prefixes breakdown shows a genuine multi-tier alias structure: base primitives (base/size, base/typography, base/text/weight) feed functional/pattern-layer semantic tokens (button/*, control/*, text/*, bgColor/*, borderColor/*, fgColor/*, spinner/*, avatar/*). The primer-primitives source repo documents the alias mechanism directly (a token's $value can reference another token, e.g. '{base.color.blue.3}') and enforces token-name validity via an automated lint (lint:tokens). This is comprehensive and operational, not merely documented-basic, but the packet contains no automated cross-consumer validation or measurement of the graph itself (only source-repo-level lint/build/contrast checks), so anchor 4 is not met. Note a disclosed conflict: primer-figma-guidance's prose states only color and size tokens are supported as Figma variables ('we still provide text and shadow tokens using styles'), but the observed full-file capture shows live 'typography' (34 vars) and 'base/typography' (4 vars) variable collections \u2014 per evidence precedence the observed implementation is preferred over this stale claim.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "foundation",
            "generalizability": "system-wide",
            "limitations": "Full-file coverage supports system-wide claims about the token graph's existence and structure; it does not by itself prove every individual token is bug-free or that downstream consumers implement the graph identically.",
            "subjects": [
              "Primer Web Figma variable graph (full-file)",
              "@primer/primitives token source"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Semantic layers and aliases are comprehensive and operational",
          "verification_depth": "implemented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Primitive breadth is comprehensive: 880 resolved variables span color (599), float/size (274), and string (7) types across scopes covering fills/strokes (663+124), text (167), gap (51), corner radius (6), typography metrics (38), and effects (132). The @primer/primitives npm package ships this as compiled, documented CSS for size, typography, borders, breakpoints, viewport, motion, and spacing. Consumption is directly evidenced rather than inferred from naming: 10 of 11 sampled deep components (Button, TextInput, ToggleSwitch, Dialog, ActionMenu, InlineMessage, FormControl family, Blankslate, Spinner, DataTable family) resolve with dozens of shared bound_variable_ids each (e.g., Button binds roughly 90, Dialog roughly 37), showing the same primitive set consumed across distinct archetypes (action, input, overlay, navigation, feedback, content, status, data-display) without manual overrides. This meets 'comprehensive and consistently consumed' but adoption/coverage measurement across the full ~2,103-component library is not evidenced in the packet, so anchor 4 is not reached.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 30-56",
              "path": "files/README.md",
              "snapshot_id": "5aeca3d83424d7cde1d4",
              "source_id": "primer-primitives",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/README.md"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 139-154",
              "path": "figma-variable-summary.json",
              "snapshot_id": "dfc83d5c91c7186f6315",
              "source_id": "primer-web-figma",
              "source_url": "https://www.figma.com/design/20ssJWembLUTeXgBwA6wd8"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 1108-1206",
              "path": "figma-sample-details.json",
              "snapshot_id": "dfc83d5c91c7186f6315",
              "source_id": "primer-web-figma",
              "source_url": "https://www.figma.com/design/20ssJWembLUTeXgBwA6wd8"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 358-397",
              "path": "figma-sample-details.json",
              "snapshot_id": "dfc83d5c91c7186f6315",
              "source_id": "primer-web-figma",
              "source_url": "https://www.figma.com/design/20ssJWembLUTeXgBwA6wd8"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "primitives",
          "critical": false,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 5,
            "declared": 5
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "None observed within the sample; broader adoption across the full 2,103-component library cannot be confirmed or denied from public evidence.",
            "what_broke": "No confirmed break in primitive completeness for the sampled components.",
            "what_to_change": "No change needed for the sampled scope; a system-wide adoption claim would require either a cited system-wide consumption mechanism or dashboard-level evidence, which is out of scope here.",
            "why": "The evidence packet caps deep-component sampling at 11 named components and explicitly excludes adoption dashboards from public evaluation scope."
          },
          "generalizability": "sample-only",
          "label": "Primitive completeness",
          "median_score": 3.0,
          "next_anchor": "Primitive coverage and adoption are measured and governed",
          "next_anchor_gap": "Anchor 4 requires primitive coverage and adoption to be measured and governed (e.g., adoption metrics across the full component library); the coverage profile explicitly excludes adoption dashboards from this public evaluation, and the packet only demonstrates consumption within the 10-11 sampled deep components.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "Primitive breadth is comprehensive: 880 resolved variables span color (599), float/size (274), and string (7) types across scopes covering fills/strokes (663+124), text (167), gap (51), corner radius (6), typography metrics (38), and effects (132). The @primer/primitives npm package ships this as compiled, documented CSS for size, typography, borders, breakpoints, viewport, motion, and spacing. Consumption is directly evidenced rather than inferred from naming: 10 of 11 sampled deep components (Button, TextInput, ToggleSwitch, Dialog, ActionMenu, InlineMessage, FormControl family, Blankslate, Spinner, DataTable family) resolve with dozens of shared bound_variable_ids each (e.g., Button binds roughly 90, Dialog roughly 37), showing the same primitive set consumed across distinct archetypes (action, input, overlay, navigation, feedback, content, status, data-display) without manual overrides. This meets 'comprehensive and consistently consumed' but adoption/coverage measurement across the full ~2,103-component library is not evidenced in the packet, so anchor 4 is not reached.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "mixed",
            "generalizability": "sample-only",
            "limitations": "Primitive definition breadth (880 variables, full-file) is system-wide, but the 'consistently consumed' claim rests on direct binding evidence from only the 10-11 sampled deep components; the remaining ~2,092 components in the library are not directly verified consumers.",
            "subjects": [
              "Button",
              "TextInput",
              "ToggleSwitch",
              "Dialog",
              "ActionMenu",
              "InlineMessage",
              "FormControl",
              "Blankslate",
              "Spinner",
              "DataTable",
              "Primer Web full-file variable graph"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Primitives are comprehensive and consistently consumed",
          "verification_depth": "implemented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Color/theme modes are defined at the variable level, not as manual overrides: the Figma 'mode' collection carries 699 variables each with an explicit value for all 9 modes (light, dark, dark dimmed, light/dark high contrast, light/dark protanopia deuteranopia, light/dark tritanopia), and @primer/primitives ships matching versioned CSS theme files for the same set, confirming delivery to code consumers, not just design. Sampled deep components (e.g., Button) bind directly to mode-collection variable IDs, so switching Figma's mode dropdown propagates systematically rather than through per-instance overrides. A second mode axis (density: condensed/normal/spacious) is a dedicated variable collection consumed by the DataTable family sample. A third axis (responsive viewport ranges narrow/regular/wide plus six numeric breakpoints) is documented normatively with concrete per-breakpoint padding values and named component-level responsive behaviors (split-into-pages, bottom-sheet, stack-vertically). This satisfies 'systematic across tokens and components' for the evidenced sample. Anchor 4 is not reached because no packet evidence shows continuous, automated validation of mode compatibility across the supported consumer matrix (only an a11y-contrast CI check on the primitives source itself).",
          "binding_mappings": [],
          "citation_conflict": false,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 38-80",
              "path": "figma-variable-summary.json",
              "snapshot_id": "dfc83d5c91c7186f6315",
              "source_id": "primer-web-figma",
              "source_url": "https://www.figma.com/design/20ssJWembLUTeXgBwA6wd8"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 81-99",
              "path": "figma-variable-summary.json",
              "snapshot_id": "dfc83d5c91c7186f6315",
              "source_id": "primer-web-figma",
              "source_url": "https://www.figma.com/design/20ssJWembLUTeXgBwA6wd8"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 46-55",
              "path": "files/README.md",
              "snapshot_id": "5aeca3d83424d7cde1d4",
              "source_id": "primer-primitives",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/README.md"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 391-431",
              "path": "content.txt",
              "snapshot_id": "90e111436b688c05c92e",
              "source_id": "primer-layout-guidance",
              "source_url": "https://primer.style/product/getting-started/foundations/layout/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 1169-1198",
              "path": "figma-sample-details.json",
              "snapshot_id": "dfc83d5c91c7186f6315",
              "source_id": "primer-web-figma",
              "source_url": "https://www.figma.com/design/20ssJWembLUTeXgBwA6wd8"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "modes",
          "critical": true,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 5,
            "declared": 5
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Claims about accessibility-preference mode support beyond color/contrast should not be generalized past documented intent, since no binding or CI evidence for those specific media features is in the packet.",
            "what_broke": "No confirmed break; responsive user-preference modes (prefers-color-scheme, prefers-reduced-motion, forced-colors, prefers-contrast, inverted-colors) are stated as requirements in prose ('GitHub must respect these preferences') but the packet does not contain direct implementation evidence for them, unlike the color/density/viewport modes.",
            "what_to_change": "No change required for the scored color/density/viewport modes; a future evaluation could request evidence (code or tests) demonstrating prefers-reduced-motion/forced-colors handling specifically.",
            "why": "primer-responsive-guidance documents these as design requirements rather than pointing to implementation or test artifacts."
          },
          "generalizability": "sample-only",
          "label": "Modes and adaptation",
          "median_score": 3.0,
          "next_anchor": "Mode compatibility is continuously validated across supported consumers",
          "next_anchor_gap": "Anchor 4 requires mode compatibility to be continuously validated across the supported consumer matrix; the only automated check evidenced is an a11y-contrast CI workflow scoped to the primitives source repo, not a cross-consumer (React/CSS/ViewComponents/Figma) mode-parity test.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "Color/theme modes are defined at the variable level, not as manual overrides: the Figma 'mode' collection carries 699 variables each with an explicit value for all 9 modes (light, dark, dark dimmed, light/dark high contrast, light/dark protanopia deuteranopia, light/dark tritanopia), and @primer/primitives ships matching versioned CSS theme files for the same set, confirming delivery to code consumers, not just design. Sampled deep components (e.g., Button) bind directly to mode-collection variable IDs, so switching Figma's mode dropdown propagates systematically rather than through per-instance overrides. A second mode axis (density: condensed/normal/spacious) is a dedicated variable collection consumed by the DataTable family sample. A third axis (responsive viewport ranges narrow/regular/wide plus six numeric breakpoints) is documented normatively with concrete per-breakpoint padding values and named component-level responsive behaviors (split-into-pages, bottom-sheet, stack-vertically). This satisfies 'systematic across tokens and components' for the evidenced sample. Anchor 4 is not reached because no packet evidence shows continuous, automated validation of mode compatibility across the supported consumer matrix (only an a11y-contrast CI check on the primitives source itself).",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "mixed",
            "generalizability": "sample-only",
            "limitations": "The mode/breakpoint token definitions themselves are full-file/system-wide, but direct evidence that components consume them systematically (via bound_variable_ids) is limited to the resolved deep-component sample; responsive/accessibility-preference modes beyond color and viewport are documented as intent only, not implementation-verified.",
            "subjects": [
              "Primer Web mode variable collection (9 modes)",
              "Data Table density collection",
              "viewport ranges and breakpoints",
              "Button (sampled binding evidence)"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Modes are systematic across tokens and components",
          "verification_depth": "implemented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "@primer/primitives is published to npm under semantic version 11.10.0 and installed via a standard package manager command. A single build pipeline compiles the same source token data into multiple consumer-specific, versioned artifacts released together: CSS variables (build:tokens/build:fallbacks), a Figma-compatible export with explicit $extensions.org.primer.figma metadata (build:figma), TypeScript types (build:types), and an LLM-oriented artifact (build:llm). Releases are governed by changesets, and CONTRIBUTING.md documents that PRs automatically produce a canary build for pre-merge testing. CI enforces lint/format/test/build gates and a dedicated a11y-contrast workflow, both visible as status badges in the published README. This meets 'multiple consumers receive consistent versioned artifacts.' It falls short of anchor 4 because, while a check:removed-tokens script exists to flag token removals, the packet contains no measured migration-impact evidence (e.g., quantified downstream breakage tied to a specific release) and no direct evidence of automated contract validation between the delivered artifact formats themselves.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 2-4",
              "path": "files/package.json",
              "snapshot_id": "5aeca3d83424d7cde1d4",
              "source_id": "primer-primitives",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/package.json"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 31-53",
              "path": "files/package.json",
              "snapshot_id": "5aeca3d83424d7cde1d4",
              "source_id": "primer-primitives",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/package.json"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 10-16",
              "path": "files/README.md",
              "snapshot_id": "5aeca3d83424d7cde1d4",
              "source_id": "primer-primitives",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/README.md"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 38-46",
              "path": "files/CONTRIBUTING.md",
              "snapshot_id": "5aeca3d83424d7cde1d4",
              "source_id": "primer-primitives",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/CONTRIBUTING.md"
            },
            {
              "evidence_authority": "unknown",
              "locator": "line 3",
              "path": "files/README.md",
              "snapshot_id": "5aeca3d83424d7cde1d4",
              "source_id": "primer-primitives",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/README.md"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "delivery",
          "critical": false,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 5,
            "declared": 5
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Without measured migration-impact evidence, it is unknown (not disproven) whether removed/changed tokens are tracked for downstream consumer impact beyond a build-time flag.",
            "what_broke": "No confirmed break in the delivery mechanism itself.",
            "what_to_change": "To support anchor 4 in a future evaluation, publish or reference migration-impact measurements (e.g., a changelog entry quantifying affected consumer surface) alongside removed/breaking token changes.",
            "why": "check:removed-tokens (package.json scripts) exists as a detection mechanism, but the packet has no evidence of it producing measured, published impact reports."
          },
          "generalizability": "system-wide",
          "label": "Consumable delivery and versioning",
          "median_score": 3.0,
          "next_anchor": "Delivery contracts are validated and migration impact is measured",
          "next_anchor_gap": "Anchor 4 requires delivery contracts to be validated and migration impact measured; the repo has a check:removed-tokens script that can flag removed tokens, but no measured migration-impact results (e.g., quantified downstream consumer breakage per release) are present in the packet.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "@primer/primitives is published to npm under semantic version 11.10.0 and installed via a standard package manager command. A single build pipeline compiles the same source token data into multiple consumer-specific, versioned artifacts released together: CSS variables (build:tokens/build:fallbacks), a Figma-compatible export with explicit $extensions.org.primer.figma metadata (build:figma), TypeScript types (build:types), and an LLM-oriented artifact (build:llm). Releases are governed by changesets, and CONTRIBUTING.md documents that PRs automatically produce a canary build for pre-merge testing. CI enforces lint/format/test/build gates and a dedicated a11y-contrast workflow, both visible as status badges in the published README. This meets 'multiple consumers receive consistent versioned artifacts.' It falls short of anchor 4 because, while a check:removed-tokens script exists to flag token removals, the packet contains no measured migration-impact evidence (e.g., quantified downstream breakage tied to a specific release) and no direct evidence of automated contract validation between the delivered artifact formats themselves.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "foundation",
            "generalizability": "system-wide",
            "limitations": "Evidence covers the primitives package's own build/release pipeline; it does not include evidence of how downstream consumer packages (primer/react, primer/css, primer/view_components) version-pin or adopt specific primitives releases, which is out of scope for this foundations-only evidence set.",
            "subjects": [
              "@primer/primitives npm package and its release pipeline"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Multiple consumers receive consistent versioned artifacts",
          "verification_depth": "implemented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        }
      ],
      "critical_unresolved": false,
      "detail": "tokens and primitives",
      "label": "Foundations",
      "provisional_score": 75.0,
      "provisional_state": "continue",
      "publishable": true,
      "review_coverage_pct": 100.0,
      "score": 75.0,
      "state": "continue",
      "unresolved_disagreement": false
    },
    {
      "area": "bindings",
      "coverage_pct": 100.0,
      "criteria": [
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Primer publishes an explicit Figma naming policy requiring component and property names to mirror code ('reflected what is present in code whenever possible', PascalCase component names), and the observed Code Connect files for the sampled deep components show names matching almost exactly: Button, Dialog, ActionMenu, Blankslate, InlineMessage, Spinner, ToggleSwitch, TextInput, and FormControl.Label/Caption/Validation all use identical PascalCase identifiers in Figma node names and React exports, with prop names (variant, size, checked, open, align, disabled) matching documented React props. Known gaps are explicitly surfaced rather than hidden \u2014 Dialog.figma.tsx contains an auto-generated comment listing the Figma 'size' property as unmatched to any code prop. This satisfies systematic, policy-backed alignment with documented gaps rather than automated, measured drift detection.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 375-381",
              "path": "content.txt",
              "snapshot_id": "65ea004a12641821fb26",
              "source_id": "primer-figma-contribution",
              "source_url": "https://primer.style/product/contribute/contributing-to-figma/"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 1-31",
              "path": "files/packages/react/src/Button/Button.figma.tsx",
              "snapshot_id": "172db810d1a67c7273e2",
              "source_id": "primer-react-code-connect",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/packages/react/src/Button/Button.figma.tsx"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 14-23",
              "path": "files/packages/react/src/Dialog/Dialog.figma.tsx",
              "snapshot_id": "172db810d1a67c7273e2",
              "source_id": "primer-react-code-connect",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/packages/react/src/Dialog/Dialog.figma.tsx"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 7-27",
              "path": "files/packages/react/src/FormControl/FormControl.figma.tsx",
              "snapshot_id": "172db810d1a67c7273e2",
              "source_id": "primer-react-code-connect",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/packages/react/src/FormControl/FormControl.figma.tsx"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "naming_parity",
          "critical": false,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 19,
            "declared": 19
          },
          "exact_agreement_count": 2,
          "finding": {
            "impact": "Designers and engineers can reliably locate the code counterpart for a Figma component/prop by name for the sampled set, reducing translation errors during handoff.",
            "what_broke": "No confirmed break at this score; the one documented exception is a labeled property gap (Dialog 'size'), not a naming mismatch.",
            "what_to_change": "Publish an automated name/property parity report (e.g., comparing Code Connect prop keys to component prop tables in CI) to progress toward measured drift detection.",
            "why": "A published naming ADR/policy plus observed 1:1 identifier matches across nine sampled Code Connect files demonstrate systemic (not ad hoc) alignment."
          },
          "generalizability": "sample-only",
          "label": "Naming parity",
          "median_score": 3.0,
          "next_anchor": "Parity is automatically checked and drift is measured",
          "next_anchor_gap": "No evidence of an automated job that diffs Figma names against code exports and reports drift over time; reaching anchor 4 requires such a continuously-run parity/drift measurement, which is not present in the evidence.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "Primer publishes an explicit Figma naming policy requiring component and property names to mirror code ('reflected what is present in code whenever possible', PascalCase component names), and the observed Code Connect files for the sampled deep components show names matching almost exactly: Button, Dialog, ActionMenu, Blankslate, InlineMessage, Spinner, ToggleSwitch, TextInput, and FormControl.Label/Caption/Validation all use identical PascalCase identifiers in Figma node names and React exports, with prop names (variant, size, checked, open, align, disabled) matching documented React props. Known gaps are explicitly surfaced rather than hidden \u2014 Dialog.figma.tsx contains an auto-generated comment listing the Figma 'size' property as unmatched to any code prop. This satisfies systematic, policy-backed alignment with documented gaps rather than automated, measured drift detection.",
          "raw_scores": [
            3,
            3,
            2
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "deep-component",
            "generalizability": "sample-only",
            "limitations": "Only the declared deep-component sample was inspected; PageLayout (code-only by design) and DataTable's compound sub-components were not confirmed to have Code Connect naming evidence, so parity cannot be generalized to the full 15-component-set Figma library.",
            "subjects": [
              "Button",
              "Dialog",
              "ActionMenu",
              "Blankslate",
              "InlineMessage",
              "Spinner",
              "ToggleSwitch",
              "TextInput",
              "FormControl"
            ]
          },
          "score": 3.0,
          "score_range": 1.0,
          "selected_anchor": "Names are systematically aligned across surfaces",
          "verification_depth": "implemented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Across most of the sampled deep components, consumer-controlled design choices correspond to documented React APIs through Code Connect: Button's variant/size/disabled/leadingVisual/trailingVisual, FormControl's Label/Caption/Validation slots, ToggleSwitch's state-derived loading boolean, Blankslate's conditional secondary action, ActionMenu's trigger/open/align, and DataTable's Header/TextCell/LabelCell/RowActionsCell/ColumnHeaderCell subcomponents all map coherently to code composition and props. However, Dialog's Figma 'size' variant (including a 'full' option) has no code equivalent, and the Code Connect source itself states 'No matching props could be found' without an evidenced rationale or alternate mapping \u2014 code's width (small/medium/large/xlarge) and height (small/large/auto) maps do not include a 'full' value. This is a real, unexplained gap in a materially significant component, which keeps the sample below the 'surface-specific controls are explicitly classified' bar required for score 3.",
          "binding_mappings": [
            {
              "code_expression": "variant prop: primary/default/danger/invisible",
              "design_expression": "Figma enum variant: primary/secondary/danger/invisible",
              "disposition": "derived_mapping",
              "rationale": "Code Connect explicitly maps Figma 'secondary' to code 'default'; a documented one-to-one correspondence with a naming difference, not a gap.",
              "subject": "Button.variant"
            },
            {
              "code_expression": "size, disabled, leadingVisual, trailingVisual props",
              "design_expression": "Figma size/state enums, leadingVisual?/trailingVisual? booleans with instance swap",
              "disposition": "shared_contract",
              "rationale": "Button.figma.tsx maps each property directly to a matching React prop.",
              "subject": "Button.size/disabled/leadingVisual/trailingVisual"
            },
            {
              "code_expression": "position prop",
              "design_expression": "Figma position enum: center/left/right/bottom",
              "disposition": "shared_contract",
              "rationale": "Dialog.figma.tsx maps the position variant directly to the code position prop.",
              "subject": "Dialog.position"
            },
            {
              "code_expression": "width prop (small/medium/large/xlarge) and height prop (small/large/auto)",
              "design_expression": "Figma size enum: small/medium/large/full/xlarge/small-portrait/medium-portrait",
              "disposition": "genuine_gap",
              "rationale": "Code Connect explicitly states no matching code prop was found; code's width/height maps do not include a 'full' value and no rationale is evidenced for the omission.",
              "subject": "Dialog.size"
            },
            {
              "code_expression": "FormControl.Label, FormControl.Caption, FormControl.Validation subcomponents",
              "design_expression": "Figma Label/Caption/Validation components with textContent and variant properties",
              "disposition": "shared_contract",
              "rationale": "FormControl.figma.tsx maps each Figma subcomponent 1:1 to its React slot subcomponent with matching content/variant.",
              "subject": "FormControl.Label/Caption/Validation"
            },
            {
              "code_expression": "loading boolean prop",
              "design_expression": "Figma 'state' variant option 'loading' (alongside rest/active/hover)",
              "disposition": "derived_mapping",
              "rationale": "A Figma state-enum option is flattened into a standalone boolean code prop; the same meaning expressed through a different mechanism.",
              "subject": "ToggleSwitch.loading"
            },
            {
              "code_expression": "DataTable/Header, DataTable/ColumnHeaderCell, DataTable/TextCell, DataTable/LabelCell, DataTable/RowActionsCell code subcomponents",
              "design_expression": "Figma component sets DataTable/Header, DataTable/ColumnHeaderCell, DataTable/TextCell, DataTable/LabelCell, DataTable/RowActionsCell",
              "disposition": "shared_contract",
              "rationale": "Figma component set names and structure match the compound code contract declared for DataTable in the coverage profile.",
              "subject": "DataTable subcomponents"
            },
            {
              "code_expression": "PageLayout.Header/Content/Pane/Sidebar/Footer React API",
              "design_expression": "not applicable (no Figma design component)",
              "disposition": "unknown",
              "rationale": "PageLayout is declared code-only with no Figma counterpart (no 'View in Figma' link on its docs page, unlike other sampled components); this is a documented scope boundary rather than a mapping to compare.",
              "subject": "PageLayout"
            }
          ],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "observed",
              "locator": "lines 5-24",
              "path": "files/packages/react/src/Dialog/Dialog.figma.tsx",
              "snapshot_id": "172db810d1a67c7273e2",
              "source_id": "primer-react-code-connect",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/packages/react/src/Dialog/Dialog.figma.tsx"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 753-766",
              "path": "content.txt",
              "snapshot_id": "672126c6f32db3e8dd30",
              "source_id": "primer-dialog-docs",
              "source_url": "https://primer.style/product/components/dialog/"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 7-43",
              "path": "files/packages/react/src/FormControl/FormControl.figma.tsx",
              "snapshot_id": "172db810d1a67c7273e2",
              "source_id": "primer-react-code-connect",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/packages/react/src/FormControl/FormControl.figma.tsx"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 4-33",
              "path": "files/packages/react/src/ToggleSwitch/ToggleSwitch.figma.tsx",
              "snapshot_id": "172db810d1a67c7273e2",
              "source_id": "primer-react-code-connect",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/packages/react/src/ToggleSwitch/ToggleSwitch.figma.tsx"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "contract_correspondence",
          "critical": true,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 19,
            "declared": 19
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "A designer selecting the 'full' Dialog size in Figma has no documented way to verify what code output it corresponds to, risking silent visual drift for that variant.",
            "what_broke": "Dialog's Figma 'size' variant (small/medium/large/full/xlarge/small-portrait/medium-portrait) has no corresponding code prop; Code Connect explicitly notes 'No matching props could be found' with no rationale or alternate mapping, and code's width/height maps omit a 'full' value.",
            "what_to_change": "Add an explicit mapping or documented rationale in Dialog.figma.tsx for the 'full' and portrait size variants, or extend the code width/height props to cover the missing values.",
            "why": "Dialog.figma.tsx (primer-react-code-connect) comments out the size prop as unmatched, while Dialog.tsx's width (small/medium/large/xlarge) and height (small/large/auto) props do not expose an equivalent 'full' value; other sampled components (Button, FormControl, ToggleSwitch, Blankslate, ActionMenu, DataTable) show coherent, classified mappings by contrast."
          },
          "generalizability": "sample-only",
          "label": "Design-to-code contract correspondence",
          "median_score": 2.0,
          "next_anchor": "Supported choices, derived states, slots, and composition map coherently, and surface-specific controls are explicitly classified",
          "next_anchor_gap": "Dialog's Figma 'size' variant (including 'full') is flagged as unmapped without an evidence-backed rationale, so surface-specific controls are not consistently and coherently classified across the full sample as anchor 3 requires.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "Across most of the sampled deep components, consumer-controlled design choices correspond to documented React APIs through Code Connect: Button's variant/size/disabled/leadingVisual/trailingVisual, FormControl's Label/Caption/Validation slots, ToggleSwitch's state-derived loading boolean, Blankslate's conditional secondary action, ActionMenu's trigger/open/align, and DataTable's Header/TextCell/LabelCell/RowActionsCell/ColumnHeaderCell subcomponents all map coherently to code composition and props. However, Dialog's Figma 'size' variant (including a 'full' option) has no code equivalent, and the Code Connect source itself states 'No matching props could be found' without an evidenced rationale or alternate mapping \u2014 code's width (small/medium/large/xlarge) and height (small/large/auto) maps do not include a 'full' value. This is a real, unexplained gap in a materially significant component, which keeps the sample below the 'surface-specific controls are explicitly classified' bar required for score 3.",
          "raw_scores": [
            2,
            2,
            2
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "deep-component",
            "generalizability": "sample-only",
            "limitations": "Findings apply only to the declared deep-component sample; correspondence quality for the remainder of the public catalog is not established by this evidence.",
            "subjects": [
              "Button",
              "Dialog",
              "FormControl",
              "TextInput",
              "ToggleSwitch",
              "ActionMenu",
              "Blankslate",
              "InlineMessage",
              "Spinner",
              "DataTable",
              "PageLayout"
            ]
          },
          "score": 2.0,
          "score_range": 0.0,
          "selected_anchor": "Core consumer choices correspond through documented APIs or runtime mechanisms, with justified surface-specific controls excluded",
          "verification_depth": "implemented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Primer Primitives compiles a single token source (src/tokens, via style-dictionary) into both a Figma-compatible export (npm run build:figma) and code-consumable CSS variables (dist/css), using $extensions.org.primer.figma metadata to record each token's Figma collection, mode, and scopes. The same light/dark/high-contrast/colorblind/tritanopia modes are shipped as both code CSS variable files and Figma variable modes. The Primer Web Figma file evidence confirms full-file variable coverage (880 resolved variables) with 175 bound variable references sampled across the deep-component set, showing tokens are actively bound to design assets, not just declared. This demonstrates token identity and modes aligning across design and code by construction (single source of truth), rather than merely matching visual values.",
          "binding_mappings": [],
          "citation_conflict": false,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 93-117",
              "path": "files/README.md",
              "snapshot_id": "5aeca3d83424d7cde1d4",
              "source_id": "primer-primitives",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/README.md"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 46-56",
              "path": "files/README.md",
              "snapshot_id": "5aeca3d83424d7cde1d4",
              "source_id": "primer-primitives",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/README.md"
            },
            {
              "evidence_authority": "unknown",
              "locator": "/nodes/0/bound_variable_ids",
              "path": "figma-sample-details.json",
              "snapshot_id": "dfc83d5c91c7186f6315",
              "source_id": "primer-web-figma",
              "source_url": "https://www.figma.com/design/20ssJWembLUTeXgBwA6wd8"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "token_parity",
          "critical": true,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 19,
            "declared": 19
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Designers using bound Figma variables and engineers using the corresponding CSS variables can expect matching semantics and mode behavior for the sampled tokens, reducing visual drift risk.",
            "what_broke": "No confirmed break; the deprecated separate Primer Primitives Figma file is explicitly excluded as an evidence source, so no stale-token conflict from that legacy path is scoped in.",
            "what_to_change": "Add a CI job that fetches the currently published Figma variable set and diffs it against the code token build output, to move from single-source-guaranteed parity to actively measured, automatically validated parity.",
            "why": "Token generation from one source (buildTokens.ts / buildFigma.ts) with shared collection/mode metadata structurally prevents naming or value divergence between the two build outputs."
          },
          "generalizability": "system-wide",
          "label": "Token parity",
          "median_score": 3.0,
          "next_anchor": "Cross-surface token parity is automatically validated",
          "next_anchor_gap": "No evidence of an automated CI check that continuously validates that shipped code tokens and published Figma variables remain in sync after each change (the primitives repo's a11y-contrast workflow validates contrast, not cross-surface token parity); reaching anchor 4 requires such a validation/measurement job.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "Primer Primitives compiles a single token source (src/tokens, via style-dictionary) into both a Figma-compatible export (npm run build:figma) and code-consumable CSS variables (dist/css), using $extensions.org.primer.figma metadata to record each token's Figma collection, mode, and scopes. The same light/dark/high-contrast/colorblind/tritanopia modes are shipped as both code CSS variable files and Figma variable modes. The Primer Web Figma file evidence confirms full-file variable coverage (880 resolved variables) with 175 bound variable references sampled across the deep-component set, showing tokens are actively bound to design assets, not just declared. This demonstrates token identity and modes aligning across design and code by construction (single source of truth), rather than merely matching visual values.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "foundation",
            "generalizability": "system-wide",
            "limitations": "The build pipeline mechanism (single-source generation) is a system-wide guarantee, but the confirmed bound-variable evidence is limited to the sampled component nodes; full-file coverage was declared for the Figma file overall, not independently verified for every one of the 2103 components in the library.",
            "subjects": [
              "primer-primitives token pipeline",
              "primer-web-figma variable bindings (Button, Dialog, ActionMenu, FormControl, TextInput, ToggleSwitch, Spinner, InlineMessage, Blankslate, DataTable sub-components)"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Token identity and modes align across design and code",
          "verification_depth": "implemented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Code Connect mapping files exist for every sampled deep component and link each to a specific, versioned Figma node-id/URL within the Primer Web file; a CI workflow automatically republishes these mappings whenever .figma.tsx files change. Separately, Primer's public component status policy defines Experimental/Ready/Deprecated lifecycle states, requires a consumer-facing warning for deprecated components, and is applied consistently as a visible status badge on every sampled component's documentation page. A public migration guide index further cross-references specific deprecated components (experimental SelectPanel, Flash) to their replacements with dedicated upgrade guides. Together these constitute versioned mappings that expose both supported and deprecated APIs, though no automated enforcement of mapping accuracy or deprecation drift was evidenced.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "observed",
              "locator": "lines 1-36",
              "path": "files/.github/workflows/figma_connect_publish.yml",
              "snapshot_id": "172db810d1a67c7273e2",
              "source_id": "primer-react-code-connect",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/.github/workflows/figma_connect_publish.yml"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 361-378",
              "path": "content.txt",
              "snapshot_id": "4066f07b7f661cc381e7",
              "source_id": "primer-component-status-policy",
              "source_url": "https://primer.style/product/getting-started/component-status/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 361-374",
              "path": "content.txt",
              "snapshot_id": "b0ecf70d6ccc6d2328dc",
              "source_id": "primer-react-migration-index",
              "source_url": "https://primer.style/product/getting-started/react/migration-guides/"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 33-36",
              "path": "files/packages/react/src/Button/Button.figma.tsx",
              "snapshot_id": "172db810d1a67c7273e2",
              "source_id": "primer-react-code-connect",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/packages/react/src/Button/Button.figma.tsx"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "traceability",
          "critical": false,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 19,
            "declared": 19
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "A Code Connect mapping or a component's deprecation status could drift from the live implementation between publishes without an automated signal, relying on manual review to catch inconsistencies.",
            "what_broke": "No confirmed break in the traceability mechanism itself; the gap is the absence of automated enforcement of mapping accuracy or deprecation-status drift.",
            "what_to_change": "Add a CI validation step (e.g., 'figma connect parse'/dry-run or a type-check against the mapped component's props) that fails the build when a Code Connect mapping references props or values no longer present in the component API.",
            "why": "The publish workflow runs 'figma connect publish' on push to main for changed .figma.tsx files but includes no validation/test step comparing the mapping against the component's current prop types or status."
          },
          "generalizability": "sample-only",
          "label": "Traceability and deprecation",
          "median_score": 3.0,
          "next_anchor": "Traceability and deprecation drift are automatically enforced",
          "next_anchor_gap": "To reach automatically enforced traceability/deprecation drift (4), evidence would be needed that the Code Connect publish workflow or another CI gate validates mappings against the component's current prop types/status (failing the build on mismatch) rather than only publishing whatever mapping is committed.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "Code Connect mapping files exist for every sampled deep component and link each to a specific, versioned Figma node-id/URL within the Primer Web file; a CI workflow automatically republishes these mappings whenever .figma.tsx files change. Separately, Primer's public component status policy defines Experimental/Ready/Deprecated lifecycle states, requires a consumer-facing warning for deprecated components, and is applied consistently as a visible status badge on every sampled component's documentation page. A public migration guide index further cross-references specific deprecated components (experimental SelectPanel, Flash) to their replacements with dedicated upgrade guides. Together these constitute versioned mappings that expose both supported and deprecated APIs, though no automated enforcement of mapping accuracy or deprecation drift was evidenced.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "mixed",
            "generalizability": "sample-only",
            "limitations": "Automated publish/versioning is directly evidenced only for the sampled deep components with Code Connect files; the component status/deprecation policy and migration index are documented as system-wide mechanisms and observed applied consistently across all sampled component pages, but full-catalog application across all ~192 component sets was not individually verified.",
            "subjects": [
              "Code Connect mapping files for sampled deep components",
              "Component status policy",
              "Primer React migration guide index"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Versioned mappings expose supported and deprecated APIs",
          "verification_depth": "automation-wired",
          "verification_signals": {
            "automation_wiring": true,
            "current_results": false,
            "test_definition": false
          }
        }
      ],
      "critical_unresolved": false,
      "detail": "how design maps to code",
      "label": "Bindings",
      "provisional_score": 68.75,
      "provisional_state": "partial",
      "publishable": true,
      "review_coverage_pct": 100.0,
      "score": 68.75,
      "state": "partial",
      "unresolved_disagreement": false
    },
    {
      "area": "components",
      "coverage_pct": 100.0,
      "criteria": [
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "primer.style/product's Components navigation lists a large, multi-archetype catalog (ActionMenu, Blankslate, Button, DataTable, Dialog, FormControl, InlineMessage, PageLayout, Spinner, TextInput, ToggleSwitch, plus dozens more spanning navigation, overlay, feedback, layout, and data-display needs) each tagged with React/Rails readiness status (e.g. 'ready' for Button and Dialog, 'experimental' for DataTable and Blankslate). This shows documented, reusable components exist for the common product needs implied by the declared deep-component and composition scope. However, the packet contains no public evidence of aggregate gap-tracking, adoption metrics, or component-health measurement (the governance source list references a component-status policy but its content was not part of this evidence packet), so the coverage claim stops at comprehensiveness rather than measured health.",
          "binding_mappings": [],
          "citation_conflict": false,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 113-238",
              "path": "content.txt",
              "snapshot_id": "c7ead02fcec241d44d97",
              "source_id": "primer-product-docs",
              "source_url": "https://primer.style/product/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "line 368",
              "path": "content.txt",
              "snapshot_id": "230a179f4b704e33f45b",
              "source_id": "primer-button-docs",
              "source_url": "https://primer.style/product/components/button/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "line 368",
              "path": "content.txt",
              "snapshot_id": "e3ee03b83355a8615d5c",
              "source_id": "primer-data-table-docs",
              "source_url": "https://primer.style/product/components/data-table/"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "core_coverage",
          "critical": false,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 22,
            "declared": 22
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Consumers can see a component exists and its readiness tag, but cannot independently verify from public evidence which components are under-adopted, deprecated in practice, or degrading in health.",
            "what_broke": "No confirmed break; the catalog is comprehensive but public gap/adoption/health measurement is absent from the evidence.",
            "what_to_change": "Publish (or make visible in this evidence scope) adoption/usage metrics and gap-tracking dashboards tied to the component catalog to support anchor-4 measurement claims.",
            "why": "The evidence packet's governance source_ids reference a component-status policy but its content was not fetched into this packet, leaving readiness tags as the only visible signal."
          },
          "generalizability": "system-wide",
          "label": "Core component coverage",
          "median_score": 3.0,
          "next_anchor": "Gaps, adoption, and component health are measured",
          "next_anchor_gap": "No public evidence of adoption dashboards, gap analysis, or aggregate component-health measurement was present in the packet; only per-component readiness tags are shown, not system-wide gap/adoption tracking.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "primer.style/product's Components navigation lists a large, multi-archetype catalog (ActionMenu, Blankslate, Button, DataTable, Dialog, FormControl, InlineMessage, PageLayout, Spinner, TextInput, ToggleSwitch, plus dozens more spanning navigation, overlay, feedback, layout, and data-display needs) each tagged with React/Rails readiness status (e.g. 'ready' for Button and Dialog, 'experimental' for DataTable and Blankslate). This shows documented, reusable components exist for the common product needs implied by the declared deep-component and composition scope. However, the packet contains no public evidence of aggregate gap-tracking, adoption metrics, or component-health measurement (the governance source list references a component-status policy but its content was not part of this evidence packet), so the coverage claim stops at comprehensiveness rather than measured health.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": false,
          "review_status": "approve",
          "scope": {
            "basis": "catalog",
            "generalizability": "system-wide",
            "limitations": "Catalog listing proves breadth of published, documented components across archetypes but does not itself prove per-component state, accessibility, binding, or responsive quality \u2014 those are assessed under the other criteria using sampled deep-component evidence.",
            "subjects": [
              "Primer Product UI component catalog (primer.style/product)"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Coverage is comprehensive for the stated scope",
          "verification_depth": "documented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Across the declared deep-component sample, normal, loading, error/validation, success, and permission-like (inactive) states are both documented and evidenced in executable test stories. Button documents Loading, 'Loading with visuals', and Inactive ('visually disabled... intended when a system error such as an outage prevents the action') states. TextInput and FormControl document and test Error/Success validation and Loading states, and FormControl.test.ts includes dedicated 'With Success Validation' and 'With Error Validation' VRT stories. ActionMenu documents an inactive-item state explicitly tied to system outages (a permission/degraded scenario) and a loading-item state. InlineMessage provides critical/warning/success/unavailable tone variants directly supporting error and recovery messaging. The loading and degraded-experiences pattern docs describe a full lifecycle (initiated, in-progress, succeeded, failed) and recovery guidance (replace with error message, or Blankslate for larger areas), matching the declared loading-recovery and empty-state-recovery composition states. This constitutes comprehensive ownership and guidance across the sample, but there is no evidence that state-contract completeness itself (e.g., which states exist per component, whether all declared composition states are covered) is measured or enforced as a gate.",
          "binding_mappings": [],
          "citation_conflict": false,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 459-528",
              "path": "content.txt",
              "snapshot_id": "230a179f4b704e33f45b",
              "source_id": "primer-button-docs",
              "source_url": "https://primer.style/product/components/button/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 441-544",
              "path": "content.txt",
              "snapshot_id": "add9c1967361d4f74f06",
              "source_id": "primer-text-input-docs",
              "source_url": "https://primer.style/product/components/text-input/"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 62-69",
              "path": "files/e2e/components/FormControl.test.ts",
              "snapshot_id": "25d93d131a1dc240928e",
              "source_id": "primer-react-accessibility-tests",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/e2e/components/FormControl.test.ts"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 479-521",
              "path": "content.txt",
              "snapshot_id": "052102bad533067eee4a",
              "source_id": "primer-action-menu-docs",
              "source_url": "https://primer.style/product/components/action-menu/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 371-392",
              "path": "content.txt",
              "snapshot_id": "80ebd2b43e8b45cb676d",
              "source_id": "primer-inline-message-docs",
              "source_url": "https://primer.style/product/components/inline-message/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 429-437",
              "path": "content.txt",
              "snapshot_id": "ae0faabbdc1e23d922e0",
              "source_id": "primer-loading-pattern",
              "source_url": "https://primer.style/product/ui-patterns/loading/"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "state_coverage",
          "critical": true,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 22,
            "declared": 22
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Teams building on the declared create-configure-save and loading-recovery flows have solid documented and partially-tested state contracts for the sampled components, but cannot verify from public evidence that all required states across the whole catalog are tracked or enforced.",
            "what_broke": "No confirmed break in the sampled state contracts; the gap is that state-coverage completeness is not itself measured.",
            "what_to_change": "Publish or evidence a state-coverage checklist/gate (e.g., CI check requiring loading/error/disabled/empty stories per new component) to support anchor-4 'executable, tested, and measured' state contracts.",
            "why": "VRT/AAT tests exist per-component for specific named states (e.g. FormControl 'With Error Validation'), but no dashboard or CI gate enforcing a required-states checklist per component was found in the packet."
          },
          "generalizability": "sample-only",
          "label": "Normal, recovery, and permission states",
          "median_score": 3.0,
          "next_anchor": "State contracts are executable, tested, and measured",
          "next_anchor_gap": "No evidence that state-contract coverage itself is measured or gated (e.g., a report showing which components/states are missing tests); tests confirm individual states exist and render correctly but not that the full declared state matrix is continuously tracked for completeness.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "Across the declared deep-component sample, normal, loading, error/validation, success, and permission-like (inactive) states are both documented and evidenced in executable test stories. Button documents Loading, 'Loading with visuals', and Inactive ('visually disabled... intended when a system error such as an outage prevents the action') states. TextInput and FormControl document and test Error/Success validation and Loading states, and FormControl.test.ts includes dedicated 'With Success Validation' and 'With Error Validation' VRT stories. ActionMenu documents an inactive-item state explicitly tied to system outages (a permission/degraded scenario) and a loading-item state. InlineMessage provides critical/warning/success/unavailable tone variants directly supporting error and recovery messaging. The loading and degraded-experiences pattern docs describe a full lifecycle (initiated, in-progress, succeeded, failed) and recovery guidance (replace with error message, or Blankslate for larger areas), matching the declared loading-recovery and empty-state-recovery composition states. This constitutes comprehensive ownership and guidance across the sample, but there is no evidence that state-contract completeness itself (e.g., which states exist per component, whether all declared composition states are covered) is measured or enforced as a gate.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "mixed",
            "generalizability": "sample-only",
            "limitations": "State evidence is drawn from the declared deep-component sample and named UI patterns; it cannot be generalized to catalog components outside this sample, and composition-level state evidence (e.g. a full create-configure-save flow test) was not directly observed \u2014 only the component-level state building blocks and pattern-level guidance were.",
            "subjects": [
              "Button",
              "TextInput",
              "FormControl",
              "ToggleSwitch",
              "ActionMenu",
              "InlineMessage",
              "Blankslate",
              "loading-recovery pattern",
              "empty-state-recovery pattern",
              "create-configure-save flow"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Normal and recovery states have comprehensive ownership and guidance",
          "verification_depth": "test-defined",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": true
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Primer publishes strong responsive foundations: a viewport-range model (narrow <768px single column, regular >=768px up to 2 columns, wide >=1400px up to 3 columns), a breakpoint scale (xsmall-xxlarge) with per-breakpoint padding rules, minimum viewport width (320px) and minimum target size (24px AA / 44px AAA) requirements, and user-preference media feature support (prefers-color-scheme, prefers-contrast, prefers-reduced-motion, forced-colors, inverted-colors). Within the declared flow scope, Dialog documents explicit narrow/regular responsive positioning (`position={narrow: 'bottom', regular: 'center'}`) and PageLayout.Sidebar's `responsiveVariant=\"fullscreen\"` explicitly expands to a full-viewport overlay below 768px (narrow) versus staying inline at regular. Blankslate.test.ts executes VRT screenshots at explicit narrow/regular-adjacent breakpoints (`primer.breakpoint.xs`, `primer.breakpoint.sm`). This shows components adapt consistently across the supported narrow/regular conditions for the sampled components, but the packet does not show equivalent viewport-specific VRT coverage for TextInput, FormControl, ToggleSwitch, ActionMenu, InlineMessage, or Spinner, so matrix-wide continuous testing is not established.",
          "binding_mappings": [],
          "citation_conflict": false,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 391-406",
              "path": "content.txt",
              "snapshot_id": "90e111436b688c05c92e",
              "source_id": "primer-layout-guidance",
              "source_url": "https://primer.style/product/getting-started/foundations/layout/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 601-658",
              "path": "content.txt",
              "snapshot_id": "672126c6f32db3e8dd30",
              "source_id": "primer-dialog-docs",
              "source_url": "https://primer.style/product/components/dialog/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 1636-1719",
              "path": "content.txt",
              "snapshot_id": "3817f5910fb4bfa7835e",
              "source_id": "primer-page-layout-docs",
              "source_url": "https://primer.style/product/components/page-layout/"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 70-85",
              "path": "files/e2e/components/Blankslate.test.ts",
              "snapshot_id": "25d93d131a1dc240928e",
              "source_id": "primer-react-accessibility-tests",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/e2e/components/Blankslate.test.ts"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 383-406",
              "path": "content.txt",
              "snapshot_id": "04e4c4a823862a0c2a6d",
              "source_id": "primer-responsive-guidance",
              "source_url": "https://primer.style/product/getting-started/foundations/responsive/"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "responsive_behavior",
          "critical": false,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 22,
            "declared": 22
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Consumers building the create-configure-save flow (PageLayout, FormControl, TextInput, ToggleSwitch, Button, InlineMessage, Dialog, Spinner) at narrow and regular viewports get strong foundational guidance and confirmed adaptive behavior for Dialog/PageLayout/Blankslate, but cannot verify from public evidence that TextInput, FormControl, ToggleSwitch, ActionMenu, InlineMessage, and Spinner are regression-tested at those same viewports.",
            "what_broke": "No confirmed responsive failure; the gap is that continuous viewport-matrix testing is only evidenced for part of the declared sample.",
            "what_to_change": "Extend explicit narrow/regular viewport VRT coverage to the remaining sampled components (TextInput, FormControl, ToggleSwitch, ActionMenu, InlineMessage, Spinner) to support anchor-4 continuous matrix testing.",
            "why": "The e2e test files provided for TextInput, FormControl, ToggleSwitch, ActionMenu, and InlineMessage run VRT/AAT checks without setting narrow/regular-specific viewport sizes, unlike Blankslate.test.ts which explicitly does."
          },
          "generalizability": "sample-only",
          "label": "Responsive behavior",
          "median_score": 3.0,
          "next_anchor": "Responsive behavior is continuously tested across the matrix",
          "next_anchor_gap": "Viewport-specific VRT/AAT execution was only confirmed for Blankslate (and responsive props for Dialog/PageLayout) in this packet; TextInput, FormControl, ToggleSwitch, ActionMenu, InlineMessage, and Spinner show no direct narrow/regular test evidence, so a continuously-tested full responsive matrix is not established.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "Primer publishes strong responsive foundations: a viewport-range model (narrow <768px single column, regular >=768px up to 2 columns, wide >=1400px up to 3 columns), a breakpoint scale (xsmall-xxlarge) with per-breakpoint padding rules, minimum viewport width (320px) and minimum target size (24px AA / 44px AAA) requirements, and user-preference media feature support (prefers-color-scheme, prefers-contrast, prefers-reduced-motion, forced-colors, inverted-colors). Within the declared flow scope, Dialog documents explicit narrow/regular responsive positioning (`position={narrow: 'bottom', regular: 'center'}`) and PageLayout.Sidebar's `responsiveVariant=\"fullscreen\"` explicitly expands to a full-viewport overlay below 768px (narrow) versus staying inline at regular. Blankslate.test.ts executes VRT screenshots at explicit narrow/regular-adjacent breakpoints (`primer.breakpoint.xs`, `primer.breakpoint.sm`). This shows components adapt consistently across the supported narrow/regular conditions for the sampled components, but the packet does not show equivalent viewport-specific VRT coverage for TextInput, FormControl, ToggleSwitch, ActionMenu, InlineMessage, or Spinner, so matrix-wide continuous testing is not established.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": false,
          "review_status": "approve",
          "scope": {
            "basis": "mixed",
            "generalizability": "sample-only",
            "limitations": "Foundational viewport-range and breakpoint guidance is system-wide, but executable responsive test evidence (viewport-specific VRT) is confirmed only for Blankslate in this packet, with responsive code contracts (not test execution) confirmed for Dialog and PageLayout; this cannot be generalized to the rest of the declared sample or catalog without further evidence.",
            "subjects": [
              "Dialog",
              "PageLayout (Sidebar/Pane)",
              "Blankslate",
              "layout foundations",
              "responsive foundations",
              "create-configure-save flow (narrow/regular)"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Components adapt consistently across supported conditions",
          "verification_depth": "test-defined",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": true
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Component-level accessibility semantics are documented and implemented across the sample: ToggleSwitch requires `aria-labelledby`; ActionMenu single/multi-select patterns use `role=\"menuitemradio\"`/`role=\"menuitemcheckbox\"` with `aria-checked`; Dialog documents `returnFocusRef`/`initialFocusRef`/`role` for focus management; Button's loading state 'sets aria-disabled and preserves focus automatically'; the loading pattern doc gives detailed AT guidance (aria-labelledby for indicators, aria-busy on live regions, avoiding over-announcement). Beyond documentation, primer/react runs an automated axe-based Accessibility Acceptance Test (AAT) suite (Axe.test.ts) that iterates over nearly all Storybook stories (excluding a small, explicitly-named skip list) and asserts `toHaveNoViolations()`, executed via a sharded CI workflow (aat-reports.yml) that is wired into the merge-gating `reports.yml` workflow triggered on push to main and on merge-queue `checks_requested`. This is a system-wide, continuously-executed mechanism (not limited to the declared sample), giving direct evidence that accessible behavior is comprehensive and tested. It does not, however, demonstrate assistive-technology (e.g., screen-reader) interaction coverage or regression measurement \u2014 axe checks are automated DOM/ARIA rule validation, not simulated or manual AT testing \u2014 so the top anchor's 'assistive-technology coverage' clause is not met.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "observed",
              "locator": "lines 1-93",
              "path": "files/.github/workflows/aat-reports.yml",
              "snapshot_id": "25d93d131a1dc240928e",
              "source_id": "primer-react-accessibility-tests",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/.github/workflows/aat-reports.yml"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 1-21",
              "path": "files/.github/workflows/reports.yml",
              "snapshot_id": "25d93d131a1dc240928e",
              "source_id": "primer-react-accessibility-tests",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/.github/workflows/reports.yml"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 33-61",
              "path": "files/e2e/components/Axe.test.ts",
              "snapshot_id": "25d93d131a1dc240928e",
              "source_id": "primer-react-accessibility-tests",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/e2e/components/Axe.test.ts"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 462-473",
              "path": "content.txt",
              "snapshot_id": "853c59dd3ecf59e28121",
              "source_id": "primer-toggle-switch-docs",
              "source_url": "https://primer.style/product/components/toggle-switch/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 558-620",
              "path": "content.txt",
              "snapshot_id": "052102bad533067eee4a",
              "source_id": "primer-action-menu-docs",
              "source_url": "https://primer.style/product/components/action-menu/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 473-501",
              "path": "content.txt",
              "snapshot_id": "ae0faabbdc1e23d922e0",
              "source_id": "primer-loading-pattern",
              "source_url": "https://primer.style/product/ui-patterns/loading/"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "accessibility_behavior",
          "critical": true,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 22,
            "declared": 22
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Programmatic accessibility regressions (missing labels, invalid ARIA, contrast rule violations covered by axe) are caught continuously in CI across nearly the whole catalog, but real assistive-technology usage regressions (screen-reader announcement wording/timing, keyboard-only task completion) are not demonstrably measured from public evidence.",
            "what_broke": "No confirmed critical accessibility failure; the gap is between automated axe coverage and demonstrated assistive-technology interaction coverage.",
            "what_to_change": "Publish or add evidence of assistive-technology interaction testing (manual AT audits, simulated screen-reader test suites) tracked continuously alongside the existing axe AAT suite to support anchor-4 AT coverage claims.",
            "why": "Axe.test.ts uses axe-core's `toHaveNoViolations()`, a static/DOM ruleset, and the CI workflows execute it broadly and continuously, but no manual or simulated AT (e.g., screen-reader) regression suite was present in the evidence."
          },
          "generalizability": "system-wide",
          "label": "Accessibility behavior",
          "median_score": 3.0,
          "next_anchor": "Assistive-technology coverage and regressions are continuously measured",
          "next_anchor_gap": "No evidence of assistive-technology interaction coverage (e.g., screen-reader announcement correctness, simulated AT regression tracking) beyond automated axe/DOM rule checks; anchor 4 requires that AT coverage specifically, not just axe rule compliance, be continuously measured.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 3,
          "rationale": "Component-level accessibility semantics are documented and implemented across the sample: ToggleSwitch requires `aria-labelledby`; ActionMenu single/multi-select patterns use `role=\"menuitemradio\"`/`role=\"menuitemcheckbox\"` with `aria-checked`; Dialog documents `returnFocusRef`/`initialFocusRef`/`role` for focus management; Button's loading state 'sets aria-disabled and preserves focus automatically'; the loading pattern doc gives detailed AT guidance (aria-labelledby for indicators, aria-busy on live regions, avoiding over-announcement). Beyond documentation, primer/react runs an automated axe-based Accessibility Acceptance Test (AAT) suite (Axe.test.ts) that iterates over nearly all Storybook stories (excluding a small, explicitly-named skip list) and asserts `toHaveNoViolations()`, executed via a sharded CI workflow (aat-reports.yml) that is wired into the merge-gating `reports.yml` workflow triggered on push to main and on merge-queue `checks_requested`. This is a system-wide, continuously-executed mechanism (not limited to the declared sample), giving direct evidence that accessible behavior is comprehensive and tested. It does not, however, demonstrate assistive-technology (e.g., screen-reader) interaction coverage or regression measurement \u2014 axe checks are automated DOM/ARIA rule validation, not simulated or manual AT testing \u2014 so the top anchor's 'assistive-technology coverage' clause is not met.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "mixed",
            "generalizability": "system-wide",
            "limitations": "The AAT/axe mechanism is a cited system-wide mechanism (it iterates over nearly all Storybook stories, not just the declared sample), justifying broader generalization for automated rule-based accessibility testing specifically; it does not extend to proving assistive-technology interaction coverage, which remains unevidenced at any scope.",
            "subjects": [
              "Button",
              "TextInput",
              "FormControl",
              "ToggleSwitch",
              "ActionMenu",
              "Dialog",
              "InlineMessage",
              "Blankslate",
              "Spinner",
              "AAT CI mechanism (axe across Storybook stories)"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Accessible behavior is comprehensive and tested",
          "verification_depth": "automation-wired",
          "verification_signals": {
            "automation_wiring": true,
            "current_results": false,
            "test_definition": true
          }
        }
      ],
      "critical_unresolved": false,
      "detail": "coverage and states",
      "label": "Components",
      "provisional_score": 75.0,
      "provisional_state": "continue",
      "publishable": true,
      "review_coverage_pct": 100.0,
      "score": 75.0,
      "state": "continue",
      "unresolved_disagreement": false
    },
    {
      "area": "structure",
      "coverage_pct": 100.0,
      "criteria": [
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "PageLayout is documented as code-only (no Figma design component) per its declared disposition, which the packet treats as an evidenced scope boundary rather than a failure. Its React API provides a real, working container/shell contract (Header, Content, Pane, Sidebar, Footer) with padding, divider, gap, sticky, resizable, and per-viewport 'hidden'/'responsiveVariant' props, demonstrated in normative code examples rather than asserted only in prose. This operational evidence is paired with foundation-level rules (viewport ranges narrow/regular/wide, breakpoint sizes, per-breakpoint padding) that are declared full-file foundation coverage. Together these cover the stated product scope for the declared flow's narrow/regular viewports, satisfying anchor 3, but there is no evidence of automated enforcement or usage measurement needed for anchor 4.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 379-397",
              "path": "content.txt",
              "snapshot_id": "3817f5910fb4bfa7835e",
              "source_id": "primer-page-layout-docs",
              "source_url": "https://primer.style/product/components/page-layout/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 1834-1878",
              "path": "content.txt",
              "snapshot_id": "3817f5910fb4bfa7835e",
              "source_id": "primer-page-layout-docs",
              "source_url": "https://primer.style/product/components/page-layout/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 391-405",
              "path": "content.txt",
              "snapshot_id": "90e111436b688c05c92e",
              "source_id": "primer-layout-guidance",
              "source_url": "https://primer.style/product/getting-started/foundations/layout/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 555-577",
              "path": "content.txt",
              "snapshot_id": "90e111436b688c05c92e",
              "source_id": "primer-layout-guidance",
              "source_url": "https://primer.style/product/getting-started/foundations/layout/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 381-389",
              "path": "content.txt",
              "snapshot_id": "04e4c4a823862a0c2a6d",
              "source_id": "primer-responsive-guidance",
              "source_url": "https://primer.style/product/getting-started/foundations/responsive/"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "layout_primitives",
          "critical": false,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 15,
            "declared": 15
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Teams building the create-configure-save flow can rely on one documented container/shell contract (PageLayout) with responsive region behavior across narrow and regular viewports, reducing the risk of ad hoc page structure.",
            "what_broke": "No confirmed break \u2014 layout primitive coverage is well-evidenced for the declared page-level scope.",
            "what_to_change": "Publish evidence of automated enforcement or measurement of PageLayout usage and exceptions (e.g., a lint rule flagging bespoke page shells, or adoption telemetry) to support a future anchor-4 claim.",
            "why": "PageLayout's props (padding, divider, hidden-by-viewport, Sidebar responsiveVariant) directly implement the viewport-range and breakpoint rules published in the Layout and Responsive foundation docs."
          },
          "generalizability": "sample-only",
          "label": "Layout primitives",
          "median_score": 3.0,
          "next_anchor": "Layout use and exceptions are validated and measured",
          "next_anchor_gap": "No automated validation, linting, or usage/exception measurement of PageLayout adoption was found in the evidence; anchor 4 requires such enforcement or measurement evidence, which is absent.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "PageLayout is documented as code-only (no Figma design component) per its declared disposition, which the packet treats as an evidenced scope boundary rather than a failure. Its React API provides a real, working container/shell contract (Header, Content, Pane, Sidebar, Footer) with padding, divider, gap, sticky, resizable, and per-viewport 'hidden'/'responsiveVariant' props, demonstrated in normative code examples rather than asserted only in prose. This operational evidence is paired with foundation-level rules (viewport ranges narrow/regular/wide, breakpoint sizes, per-breakpoint padding) that are declared full-file foundation coverage. Together these cover the stated product scope for the declared flow's narrow/regular viewports, satisfying anchor 3, but there is no evidence of automated enforcement or usage measurement needed for anchor 4.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "mixed",
            "generalizability": "sample-only",
            "limitations": "Evidence demonstrates PageLayout's own region/responsive contract and the site-wide viewport-range/breakpoint foundation, but does not establish that other layout surfaces (e.g., SplitPageLayout, Stack, CSS Grid/Flexbox utilities) implement or enforce the same primitives. PageLayout itself carries a code-only design disposition, so no Figma-side layout-primitive evidence exists.",
            "subjects": [
              "PageLayout",
              "primer-layout-guidance foundation",
              "primer-responsive-guidance foundation"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Layout primitives cover the stated product scope",
          "verification_depth": "documented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "The Forms, Loading, Empty states, and Degraded experiences pattern pages provide explicit, non-isolated composition rules directly tied to the declared flow/pattern component sets. Forms pattern anatomy (Label/Input/Caption/Validation), structure ('default to vertically stacked FormControls'), and validation-on-submit focus/ARIA rules cover the create-configure-save flow's validation-error state. Loading pattern's lifecycle (initiated/in-progress/complete/failed) and scoping guidance cover the loading state and loading-recovery pattern. Degraded/empty-state pattern pages give explicit Blankslate+Button+InlineMessage assembly rules (leading visual, primary/secondary text and action, error copy) covering empty-state-recovery. This is documented compositional guidance beyond component inventories, satisfying 'composition contracts cover supported product assemblies,' but nothing indicates the rules are executable or automatically validated.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 429-433",
              "path": "content.txt",
              "snapshot_id": "53523b7aa25b8b2612cf",
              "source_id": "primer-forms-pattern",
              "source_url": "https://primer.style/product/ui-patterns/forms/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 499-515",
              "path": "content.txt",
              "snapshot_id": "53523b7aa25b8b2612cf",
              "source_id": "primer-forms-pattern",
              "source_url": "https://primer.style/product/ui-patterns/forms/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 429-437",
              "path": "content.txt",
              "snapshot_id": "ae0faabbdc1e23d922e0",
              "source_id": "primer-loading-pattern",
              "source_url": "https://primer.style/product/ui-patterns/loading/"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "composition_guidance",
          "critical": false,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 15,
            "declared": 15
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Engineers building the declared flow have clear documented rules for assembling FormControl/TextInput/Dialog/Spinner/InlineMessage correctly, but nothing prevents a non-compliant assembly from shipping since enforcement is not evidenced",
            "what_broke": "No confirmed break; composition guidance exists in documentation but is not shown to be enforced automatically",
            "what_to_change": "Not applicable to public-evidence scoring; a higher score would require publicly observable automated enforcement of composition rules",
            "why": "Evidence is limited to normative prose and code examples from pattern and component doc pages; no lint, CI, or Storybook interaction-test artifacts are in the packet"
          },
          "generalizability": "sample-only",
          "label": "Composition guidance",
          "median_score": 3.0,
          "next_anchor": "Composition rules are executable or automatically validated",
          "next_anchor_gap": "No evidence that composition rules are executable or automatically validated (e.g., lint rules enforcing FormControl+Validation pairing, Storybook interaction tests, or CI composition checks) \u2014 required for anchor 4.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "The Forms, Loading, Empty states, and Degraded experiences pattern pages provide explicit, non-isolated composition rules directly tied to the declared flow/pattern component sets. Forms pattern anatomy (Label/Input/Caption/Validation), structure ('default to vertically stacked FormControls'), and validation-on-submit focus/ARIA rules cover the create-configure-save flow's validation-error state. Loading pattern's lifecycle (initiated/in-progress/complete/failed) and scoping guidance cover the loading state and loading-recovery pattern. Degraded/empty-state pattern pages give explicit Blankslate+Button+InlineMessage assembly rules (leading visual, primary/secondary text and action, error copy) covering empty-state-recovery. This is documented compositional guidance beyond component inventories, satisfying 'composition contracts cover supported product assemblies,' but nothing indicates the rules are executable or automatically validated.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "composition",
            "generalizability": "sample-only",
            "limitations": "Only the three declared compositions/patterns are evidenced; guidance for other listed UI patterns (navigation, notification messaging, progressive disclosure, saving, feature onboarding) is not in this evidence packet and is not assumed",
            "subjects": [
              "create-configure-save (forms pattern)",
              "loading-recovery (loading pattern)",
              "empty-state-recovery (empty-states and degraded-experiences patterns)"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Composition contracts cover supported product assemblies",
          "verification_depth": "documented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "The three declared compositions each map to a dedicated, normative Primer UI-pattern page (Forms, Loading, Degraded experiences, Empty states) addressing recurring product tasks (data entry/validation, async waiting, outage handling, first-use/no-data states). Each pattern page explicitly cross-references the components that implement it \u2014 e.g., the Empty states page ties directly to Blankslate, the Degraded experiences page links to Blankslate/Dialog/Tooltip/Loading/Messaging, and the Loading page links to DataTable/SelectPanel/TreeView/Spinner/SkeletonLoaders/ProgressBar \u2014 satisfying anchor 3's 'remain linked to components' clause for important tasks. No evidence shows pattern adoption, outcomes, or lifecycle being tracked, so anchor 4 is not met.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 561-573",
              "path": "content.txt",
              "snapshot_id": "53523b7aa25b8b2612cf",
              "source_id": "primer-forms-pattern",
              "source_url": "https://primer.style/product/ui-patterns/forms/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 365-373",
              "path": "content.txt",
              "snapshot_id": "ae0faabbdc1e23d922e0",
              "source_id": "primer-loading-pattern",
              "source_url": "https://primer.style/product/ui-patterns/loading/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 533-544",
              "path": "content.txt",
              "snapshot_id": "ae0faabbdc1e23d922e0",
              "source_id": "primer-loading-pattern",
              "source_url": "https://primer.style/product/ui-patterns/loading/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 359-365",
              "path": "content.txt",
              "snapshot_id": "9802e3b6b3f4bf5f5ac2",
              "source_id": "primer-empty-state-pattern",
              "source_url": "https://primer.style/product/ui-patterns/empty-states/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 576-589",
              "path": "content.txt",
              "snapshot_id": "7cbf28d142607f99b54f",
              "source_id": "primer-degraded-pattern",
              "source_url": "https://primer.style/product/ui-patterns/degraded-experiences/"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "patterns_templates",
          "critical": false,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 15,
            "declared": 15
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Teams solving forms, loading/degraded-recovery, or empty-state tasks have a canonical pattern reference tied to specific components rather than having to reverse-engineer conventions from isolated examples.",
            "what_broke": "No confirmed break \u2014 the sampled patterns are documented and explicitly linked to their implementing components.",
            "what_to_change": "Publish pattern-adoption or outcome metrics (e.g., which teams use the documented forms pattern, error-recovery success rates) to progress toward anchor 4; none is present in current evidence.",
            "why": "Each pattern doc (Forms, Loading, Degraded experiences, Empty states) contains dedicated related-links or inline cross-references to the exact components (Blankslate, Dialog, Spinner, etc.) used in the declared compositions."
          },
          "generalizability": "sample-only",
          "label": "Patterns and templates",
          "median_score": 3.0,
          "next_anchor": "Pattern use, outcomes, and lifecycle are measured",
          "next_anchor_gap": "No evidence of pattern usage being tracked or of pattern lifecycle (e.g., deprecation, adoption metrics, outcome measurement) \u2014 anchor 4 requires pattern use, outcomes, and lifecycle to be measured, which is absent.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "The three declared compositions each map to a dedicated, normative Primer UI-pattern page (Forms, Loading, Degraded experiences, Empty states) addressing recurring product tasks (data entry/validation, async waiting, outage handling, first-use/no-data states). Each pattern page explicitly cross-references the components that implement it \u2014 e.g., the Empty states page ties directly to Blankslate, the Degraded experiences page links to Blankslate/Dialog/Tooltip/Loading/Messaging, and the Loading page links to DataTable/SelectPanel/TreeView/Spinner/SkeletonLoaders/ProgressBar \u2014 satisfying anchor 3's 'remain linked to components' clause for important tasks. No evidence shows pattern adoption, outcomes, or lifecycle being tracked, so anchor 4 is not met.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "composition",
            "generalizability": "sample-only",
            "limitations": "Only the three declared compositions/patterns and their directly linked components were evaluated; Primer's broader 'Scenario Patterns' set (Copy, Create, Delegate, Delete, Filter, Search, View) referenced in site navigation is outside this evidence's scope and was not assessed.",
            "subjects": [
              "create-configure-save flow",
              "loading-recovery pattern",
              "empty-state-recovery pattern",
              "Forms pattern",
              "Loading pattern",
              "Degraded experiences pattern",
              "Empty states pattern"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Patterns cover important tasks and remain linked to components",
          "verification_depth": "documented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Dialog's code contract explicitly assigns focus ownership (returnFocusRef, initialFocusRef, onClose gesture argument) and responsive positioning (position={{narrow:'bottom', regular:'center'}}). The Loading pattern's dedicated Focus management section specifies who owns focus during and after async state changes (Dialog auto-returns focus on close, move focus to first invalid field on failure, move focus into newly loaded content, aria-live/aria-busy rules to prevent premature announcement). The Forms pattern's validation-on-submit section specifies the exact ownership contract for error state (aria-invalid, aria-describedby wiring, focus to interactive summary or first invalid field). This is comprehensive, code- and documentation-level ownership coverage across the declared flow's dialog, validation-error, loading, and responsive-transition scenarios, satisfying 'navigation, focus, and state contracts are comprehensive.' No evidence shows these contracts are executable or continuously verified (e.g., automated focus-trap or ARIA tests), so anchor 4 is unreached.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 768-772",
              "path": "content.txt",
              "snapshot_id": "672126c6f32db3e8dd30",
              "source_id": "primer-dialog-docs",
              "source_url": "https://primer.style/product/components/dialog/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 513-521",
              "path": "content.txt",
              "snapshot_id": "ae0faabbdc1e23d922e0",
              "source_id": "primer-loading-pattern",
              "source_url": "https://primer.style/product/ui-patterns/loading/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 503-513",
              "path": "content.txt",
              "snapshot_id": "53523b7aa25b8b2612cf",
              "source_id": "primer-forms-pattern",
              "source_url": "https://primer.style/product/ui-patterns/forms/"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "interaction_ownership",
          "critical": true,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 15,
            "declared": 15
          },
          "exact_agreement_count": 2,
          "finding": {
            "impact": "Implementers of the create-configure-save flow have clear, comprehensive guidance for who owns focus/state during dialogs, validation errors, loading, and responsive transitions, but nothing confirms these contracts are enforced or regression-tested in practice",
            "what_broke": "No confirmed break; ownership is documented comprehensively but not shown to be automatically or continuously verified",
            "what_to_change": "Not applicable to public-evidence scoring; a higher score would require publicly observable automated/continuous verification of these ownership contracts",
            "why": "Evidence includes explicit component props and detailed pattern-level prose, but the packet contains no test results, CI gate output, or execution logs tied to these specific ownership contracts"
          },
          "generalizability": "sample-only",
          "label": "Navigation, focus, and state ownership",
          "median_score": 3.0,
          "next_anchor": "Cross-composition contracts are executable and continuously verified",
          "next_anchor_gap": "No evidence that these ownership contracts are executable or continuously verified (e.g., automated focus-trap tests, axe-core CI gating, or interaction test suites tied to these specific contracts) \u2014 required for anchor 4. The primer/react package.json lists @github/axe-github and @playwright/test as devDependencies, but a tool declaration alone does not prove these contracts are actually tested or gated.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "Dialog's code contract explicitly assigns focus ownership (returnFocusRef, initialFocusRef, onClose gesture argument) and responsive positioning (position={{narrow:'bottom', regular:'center'}}). The Loading pattern's dedicated Focus management section specifies who owns focus during and after async state changes (Dialog auto-returns focus on close, move focus to first invalid field on failure, move focus into newly loaded content, aria-live/aria-busy rules to prevent premature announcement). The Forms pattern's validation-on-submit section specifies the exact ownership contract for error state (aria-invalid, aria-describedby wiring, focus to interactive summary or first invalid field). This is comprehensive, code- and documentation-level ownership coverage across the declared flow's dialog, validation-error, loading, and responsive-transition scenarios, satisfying 'navigation, focus, and state contracts are comprehensive.' No evidence shows these contracts are executable or continuously verified (e.g., automated focus-trap or ARIA tests), so anchor 4 is unreached.",
          "raw_scores": [
            3,
            3,
            2
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "composition",
            "generalizability": "sample-only",
            "limitations": "Ownership evidence is drawn from Dialog, Forms, Loading, and Degraded-experiences documentation for the declared flow/patterns; it does not establish ownership contracts for other overlays, routes, or nested compositions outside this sample (e.g., Popover, Overlay, TreeView) beyond incidental mentions",
            "subjects": [
              "dialog",
              "primer-forms-pattern validation ownership",
              "primer-loading-pattern focus management",
              "primer-degraded-pattern dialog/button ownership rules"
            ]
          },
          "score": 3.0,
          "score_range": 1.0,
          "selected_anchor": "Navigation, focus, and state contracts are comprehensive",
          "verification_depth": "documented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        }
      ],
      "critical_unresolved": false,
      "detail": "layout and composition",
      "label": "Structure",
      "provisional_score": 75.0,
      "provisional_state": "continue",
      "publishable": true,
      "review_coverage_pct": 100.0,
      "score": 75.0,
      "state": "continue",
      "unresolved_disagreement": false
    },
    {
      "area": "governance",
      "coverage_pct": 100.0,
      "criteria": [
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Public evidence names an owning team for primer/primitives via a GitHub-enforced CODEOWNERS file (@primer/engineer-reviewers, which mechanically gates PR review on that repo), names individual DRIs for the Primer Web and Primer Brand Figma libraries who must approve any branch before a maintainer merges it, and identifies GitHub's Design Infrastructure team as the maintainer of the Figma organization with a named Slack support channel and issue-tracker escalation path. This goes beyond static documentation of contacts (anchor 2) into an operationally enforced decision-rights mechanism (CODEOWNERS-required review; DRI sign-off gate before merge), satisfying anchor 3. No public evidence measures ownership health (response times, backlog aging, satisfaction) as anchor 4 requires.",
          "binding_mappings": [],
          "citation_conflict": false,
          "citations": [
            {
              "evidence_authority": "observed",
              "locator": "line 42",
              "path": "files/contributor-docs/CONTRIBUTING.md",
              "snapshot_id": "afbb7a337d452b0d0a14",
              "source_id": "primer-react-operating-governance",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/contributor-docs/CONTRIBUTING.md"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 259-272",
              "path": "files/contributor-docs/CONTRIBUTING.md",
              "snapshot_id": "afbb7a337d452b0d0a14",
              "source_id": "primer-react-operating-governance",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/contributor-docs/CONTRIBUTING.md"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 365-367",
              "path": "content.txt",
              "snapshot_id": "65ea004a12641821fb26",
              "source_id": "primer-figma-contribution",
              "source_url": "https://primer.style/product/contribute/contributing-to-figma/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 519-525",
              "path": "content.txt",
              "snapshot_id": "65ea004a12641821fb26",
              "source_id": "primer-figma-contribution",
              "source_url": "https://primer.style/product/contribute/contributing-to-figma/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 456-458",
              "path": "content.txt",
              "snapshot_id": "f478be6e00ccc7aec688",
              "source_id": "primer-figma-guidance",
              "source_url": "https://primer.style/product/getting-started/figma/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "line 1",
              "path": "files/.github/CODEOWNERS",
              "snapshot_id": "5aeca3d83424d7cde1d4",
              "source_id": "primer-primitives",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/.github/CODEOWNERS"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "ownership",
          "critical": false,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "reviewer",
          "evidence_source_coverage": {
            "captured": 13,
            "declared": 13
          },
          "exact_agreement_count": 2,
          "finding": {
            "impact": "Consumers can identify who owns a component/library and how to escalate, but cannot verify from public evidence how well or how quickly that ownership function actually performs over time.",
            "what_broke": "Ownership health (e.g., response-time or backlog-aging expectations) is not publicly measured or reported.",
            "what_to_change": "Publish periodic public reporting on ownership responsiveness (e.g., median PR review time for CODEOWNERS-gated repos, DRI review backlog) to move from operational to measured ownership.",
            "why": "Public evidence documents named DRIs, an enforced CODEOWNERS team, and support channels, but includes no publicly available dashboard or service-level metric; governance known_limitations explicitly place internal adoption/service dashboards out of scope."
          },
          "generalizability": "sample-only",
          "label": "Named ownership",
          "median_score": 2.0,
          "next_anchor": "Ownership health and service expectations are measured",
          "next_anchor_gap": "Additional evidence must satisfy the next anchor: Ownership health and service expectations are measured",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "Operational ownership is evidenced across the public surfaces without requiring one specific mechanism. Primer Web requires named DRI approval before maintainer merge and identifies the Design Infrastructure support boundary; Primer Primitives has repository-wide engineering review ownership; Primer React documents Primer-team review and merge decision rights, a response expectation, and weekly proposal triage. The absence of a public Primer React CODEOWNERS file is an unknown implementation detail, not evidence that these documented decision rights are non-operational.",
          "raw_scores": [
            2,
            3,
            2
          ],
          "requires_review": true,
          "review_status": "revise",
          "scope": {
            "basis": "governance",
            "generalizability": "sample-only",
            "limitations": "The primer/react code repository's own CODEOWNERS file was not retrievable in this snapshot (marked as a missing optional path), so named/operational code-review ownership for the React implementation specifically is unconfirmed beyond the generic 'a contributor of Primer React will review' language; conclusions generalize confidently to primitives and Figma but not to the React code repo specifically.",
            "subjects": [
              "primer/primitives CODEOWNERS",
              "Primer Web/Brand Figma DRI process",
              "Design Infrastructure team support channel"
            ]
          },
          "score": 3.0,
          "score_range": 1.0,
          "selected_anchor": "Decision rights and support boundaries are operational",
          "verification_depth": "documented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "primer/react's contributor docs publish an operational, cross-discipline review process: a documented 'What we look for in reviews' checklist (code style, theme values, API design, type definitions, documentation, tests, bundle size, CI checks), a stated review turnaround ('within a day or two'), and a documented release cadence (weekly minor/patch, biannual major). This is enforced mechanically by the check_for_changeset.yml CI gate, which blocks PRs lacking a changeset unless an explicit skip-label override is applied. In parallel, Primer Web Figma has an operational design-review path: contributors branch, request review from the file's DRI, and a maintainer merges once approved, backed by an explicit contribution checklist (including accessibility). Together these show cross-discipline (engineering + design) review criteria and decisions operating, satisfying anchor 3. No public throughput, rejection-rate, or review-quality metrics exist, so anchor 4 is not reached.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "observed",
              "locator": "lines 257-272",
              "path": "files/contributor-docs/CONTRIBUTING.md",
              "snapshot_id": "afbb7a337d452b0d0a14",
              "source_id": "primer-react-operating-governance",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/contributor-docs/CONTRIBUTING.md"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 1-44",
              "path": "files/.github/workflows/check_for_changeset.yml",
              "snapshot_id": "afbb7a337d452b0d0a14",
              "source_id": "primer-react-operating-governance",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/.github/workflows/check_for_changeset.yml"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 364-369",
              "path": "content.txt",
              "snapshot_id": "65ea004a12641821fb26",
              "source_id": "primer-figma-contribution",
              "source_url": "https://primer.style/product/contribute/contributing-to-figma/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 494-518",
              "path": "content.txt",
              "snapshot_id": "65ea004a12641821fb26",
              "source_id": "primer-figma-contribution",
              "source_url": "https://primer.style/product/contribute/contributing-to-figma/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 378-379",
              "path": "content.txt",
              "snapshot_id": "51ca77b7640ae2ad9db1",
              "source_id": "primer-contribution-model",
              "source_url": "https://primer.style/product/contribute/how-to-contribute/"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "contribution_review",
          "critical": false,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 13,
            "declared": 13
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "It cannot be confirmed from public evidence whether the documented checklist and DRI review model translate into consistently fast or high-quality outcomes at scale, versus being aspirational policy.",
            "what_broke": "Review throughput, quality, and outcome metrics are not published, so the effectiveness of the documented review process cannot be measured from public evidence.",
            "what_to_change": "Publish periodic review-health metrics (e.g., median PR review time, changeset-compliance rate, Figma branch approval latency) to demonstrate the documented process operates at the claimed level.",
            "why": "contributor-docs/CONTRIBUTING.md and the Figma contribution guide document review criteria and process, but per the governance known_limitations, private Slack discussions and GitHub-internal review artifacts are outside evidence scope, and no aggregate review-outcome data is published."
          },
          "generalizability": "sample-only",
          "label": "Contribution and review",
          "median_score": 3.0,
          "next_anchor": "Review quality, throughput, and outcomes are measured",
          "next_anchor_gap": "No public review-outcome measurement (e.g., time-to-merge distributions, rejection rates, changeset-compliance rate) is published; internal Slack and GitHub-internal review artifacts are explicitly out of the governance evidence scope, so throughput/quality of review cannot be measured.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "primer/react's contributor docs publish an operational, cross-discipline review process: a documented 'What we look for in reviews' checklist (code style, theme values, API design, type definitions, documentation, tests, bundle size, CI checks), a stated review turnaround ('within a day or two'), and a documented release cadence (weekly minor/patch, biannual major). This is enforced mechanically by the check_for_changeset.yml CI gate, which blocks PRs lacking a changeset unless an explicit skip-label override is applied. In parallel, Primer Web Figma has an operational design-review path: contributors branch, request review from the file's DRI, and a maintainer merges once approved, backed by an explicit contribution checklist (including accessibility). Together these show cross-discipline (engineering + design) review criteria and decisions operating, satisfying anchor 3. No public throughput, rejection-rate, or review-quality metrics exist, so anchor 4 is not reached.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "governance",
            "generalizability": "sample-only",
            "limitations": "Evidence covers primer/react and Primer Web Figma only; other Primer repos (CSS, ViewComponents, Octicons) and internal review artifacts are not evidenced.",
            "subjects": [
              "primer/react PR review process",
              "primer/react changeset CI gate",
              "Primer Web Figma DRI branch-review model"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Cross-discipline review criteria and decisions are operational",
          "verification_depth": "automation-wired",
          "verification_signals": {
            "automation_wiring": true,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Deprecation and migration have explicit operational contracts, satisfying anchor 3. The normative component-status policy defines a lifecycle (Experimental/Ready/Deprecated) with concrete, binding consequences: for 'Ready' components, 'breaking changes... will result in a major version bump... and Primer will provide a migration path,' and 'Deprecated' components must have deprecation documentation and 'a warning is shown to the consumer' at use-time. This contract is backed by two published, code-level migration guides (experimental SelectPanel -> stable SelectPanel, with detailed prop-mapping tables and before/after code; Flash -> Banner) and by changeset-driven automated versioning and changelog generation (evidenced by extensive, PR-linked CHANGELOG.md entries on both primer/react and primer/primitives) enforced by the CI changeset gate. RELEASING.md documents a release-candidate testing and publish process. This is current, normative documentation plus directly observed automation (changesets config, CHANGELOG structure), meeting the evidence-precedence bar. Anchor 4 (validated/measured compatibility and migration success) is not evidenced: release-candidate testing is explicitly scoped '(GitHub staff only)' with no public test results, and there is no published migration-success or compatibility-regression measurement.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "unknown",
              "locator": "lines 369-379",
              "path": "content.txt",
              "snapshot_id": "4066f07b7f661cc381e7",
              "source_id": "primer-component-status-policy",
              "source_url": "https://primer.style/product/getting-started/component-status/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 361-374",
              "path": "content.txt",
              "snapshot_id": "b0ecf70d6ccc6d2328dc",
              "source_id": "primer-react-migration-index",
              "source_url": "https://primer.style/product/getting-started/react/migration-guides/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 382-391",
              "path": "content.txt",
              "snapshot_id": "66d075d0ac541a7fc467",
              "source_id": "primer-select-panel-migration",
              "source_url": "https://primer.style/product/getting-started/react/migration-guides/primer-experimental-selectpanel/"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 1-16",
              "path": "files/CHANGELOG.md",
              "snapshot_id": "cf82bbb745b7e997d38f",
              "source_id": "primer-react-release-history",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/CHANGELOG.md"
            },
            {
              "evidence_authority": "unknown",
              "locator": "lines 9-21",
              "path": "files/RELEASING.md",
              "snapshot_id": "8c1871123ec8eee1b57e",
              "source_id": "primer-primitives-release-process",
              "source_url": "https://github.com/primer/primitives/blob/30cb00c65d789d6ad4850f8a4fd172276e143226/RELEASING.md"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "release_safety",
          "critical": true,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 13,
            "declared": 13
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Consumers get a documented, binding process for breaking changes and concrete migration steps, but cannot verify from public evidence that migrations actually succeed or that release candidates pass their internal tests, since that testing is GitHub-staff-only.",
            "what_broke": "No confirmed break at anchor 3; the gap is that migration/compatibility success is asserted in policy but not measured.",
            "what_to_change": "Publish aggregate or anonymized migration-success/compatibility validation results (e.g., percentage of consumers migrated off deprecated SelectPanel, automated compat-test pass rates) to close the anchor-4 gap.",
            "why": "The RELEASING.md release-candidate testing step is explicitly scoped to internal staff, and no public compatibility/migration-success metrics are published alongside the changelog or migration guides."
          },
          "generalizability": "system-wide",
          "label": "Releases, migration, and deprecation",
          "median_score": 3.0,
          "next_anchor": "Compatibility and migration success are validated and measured",
          "next_anchor_gap": "No public evidence that compatibility or migration success is validated or measured (e.g., automated codemod verification, migration completion tracking, or compatibility test results); release-candidate testing is explicitly gated as staff-only with no published outcomes.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "Deprecation and migration have explicit operational contracts, satisfying anchor 3. The normative component-status policy defines a lifecycle (Experimental/Ready/Deprecated) with concrete, binding consequences: for 'Ready' components, 'breaking changes... will result in a major version bump... and Primer will provide a migration path,' and 'Deprecated' components must have deprecation documentation and 'a warning is shown to the consumer' at use-time. This contract is backed by two published, code-level migration guides (experimental SelectPanel -> stable SelectPanel, with detailed prop-mapping tables and before/after code; Flash -> Banner) and by changeset-driven automated versioning and changelog generation (evidenced by extensive, PR-linked CHANGELOG.md entries on both primer/react and primer/primitives) enforced by the CI changeset gate. RELEASING.md documents a release-candidate testing and publish process. This is current, normative documentation plus directly observed automation (changesets config, CHANGELOG structure), meeting the evidence-precedence bar. Anchor 4 (validated/measured compatibility and migration success) is not evidenced: release-candidate testing is explicitly scoped '(GitHub staff only)' with no public test results, and there is no published migration-success or compatibility-regression measurement.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "governance",
            "generalizability": "system-wide",
            "limitations": "The component-status policy and changeset versioning apply to the whole public component catalog, not just the sampled components, supporting system-wide generalization; however, only two migration guides are directly evidenced and staff-only release-candidate testing/private migration outcomes remain unknown.",
            "subjects": [
              "primer-component-status-policy lifecycle contract",
              "primer-react-migration-index migration guides",
              "primer-select-panel-migration guide",
              "changeset-driven CHANGELOG/versioning"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Deprecation and migration have explicit operational contracts",
          "verification_depth": "documented",
          "verification_signals": {
            "automation_wiring": false,
            "current_results": false,
            "test_definition": false
          }
        },
        {
          "assessor_contradiction_warnings": [],
          "assessor_rationale": "Primer's public repos show concrete, executing quality gates rather than mere tool declarations: an axe-based accessibility test (Axe.test.ts) iterates over nearly all Storybook stories and asserts `toHaveNoViolations()`, with an explicit, commented exception list (SKIPPED_TESTS, including open TODOs for known contrast issues) run via a sharded CI workflow (aat-reports.yml); Playwright visual regression tests exist for each sampled deep component (Button, Dialog, FormControl, DataTable, ToggleSwitch, TextInput, InlineMessage, PageLayout, ActionMenu, Blankslate); required CI jobs enforce lint, format, unit tests (React 18/19 matrix), and type-checking on every push/PR/merge-queue event; CodeQL SAST scanning runs on push, PR, and a weekly schedule; and primer/primitives runs an automated a11y-contrast check. This direct code and workflow evidence, spanning the full sampled component set with documented exceptions, satisfies anchor 3's requirement that quality gates cover the supported lifecycle and exceptions with comprehensive operational behavior. No public evidence shows measured, acted-upon quality/regression/adoption outcomes over time (anchor 4) \u2014 report artifacts and a Datadog code-metrics pipeline are configured, but their result contents are not in evidence.",
          "binding_mappings": [],
          "citation_conflict": true,
          "citations": [
            {
              "evidence_authority": "observed",
              "locator": "lines 1-62",
              "path": "files/e2e/components/Axe.test.ts",
              "snapshot_id": "25d93d131a1dc240928e",
              "source_id": "primer-react-accessibility-tests",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/e2e/components/Axe.test.ts"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 1-93",
              "path": "files/.github/workflows/aat-reports.yml",
              "snapshot_id": "25d93d131a1dc240928e",
              "source_id": "primer-react-accessibility-tests",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/.github/workflows/aat-reports.yml"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 58-91",
              "path": "files/.github/workflows/ci.yml",
              "snapshot_id": "afbb7a337d452b0d0a14",
              "source_id": "primer-react-operating-governance",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/.github/workflows/ci.yml"
            },
            {
              "evidence_authority": "observed",
              "locator": "lines 1-71",
              "path": "files/.github/workflows/codeql.yml",
              "snapshot_id": "afbb7a337d452b0d0a14",
              "source_id": "primer-react-operating-governance",
              "source_url": "https://github.com/primer/react/blob/b1117811cebfb9463f20fe76f77cdf13917ae6b2/.github/workflows/codeql.yml"
            }
          ],
          "contradiction_warnings": [],
          "criterion_id": "quality_enforcement",
          "critical": true,
          "evidence_ceiling_is_capability_score": false,
          "evidence_completeness": "complete",
          "evidence_decision_source": "assessor",
          "evidence_source_coverage": {
            "captured": 13,
            "declared": 13
          },
          "exact_agreement_count": 3,
          "finding": {
            "impact": "Strong automated gates exist and demonstrably execute across nearly the full sampled component set, but the public evidence does not show whether gate failures, waived checks, or regressions are tracked to closure and acted upon systematically.",
            "what_broke": "Quality and regression outcomes are not publicly measured or reported over time, and exception entries (e.g., color-contrast TODOs in SKIPPED_TESTS) have no visible resolution tracking.",
            "what_to_change": "Publish periodic public summaries of AAT/VRT pass rates, CodeQL finding trends, or the aging/resolution of SKIPPED_TESTS-style exceptions so quality outcomes \u2014 not just gate existence \u2014 become independently verifiable.",
            "why": "CI workflow definitions and test source files prove the gates execute and cover exceptions explicitly, but report artifacts and the Datadog code-metrics pipeline are configured without any visible published results in the evidence, so outcome measurement and follow-up cannot be confirmed."
          },
          "generalizability": "sample-only",
          "label": "Quality enforcement and feedback",
          "median_score": 3.0,
          "next_anchor": "Quality, adoption, exceptions, and regressions are measured and acted on",
          "next_anchor_gap": "Anchor 4 requires that quality, adoption, exceptions, and regressions be measured and acted on (e.g., published pass-rate trends, tracked regression counts). CI report artifacts (blob-report, playwright-report) and a Datadog code-metrics pipeline (codescan.yml) are configured to produce measurements, but their actual result contents, trends, or evidence of follow-up action are not present in the supplied evidence.",
          "not_applicable": false,
          "plausible_evidence_ceiling": 4,
          "rationale": "Primer's public repos show concrete, executing quality gates rather than mere tool declarations: an axe-based accessibility test (Axe.test.ts) iterates over nearly all Storybook stories and asserts `toHaveNoViolations()`, with an explicit, commented exception list (SKIPPED_TESTS, including open TODOs for known contrast issues) run via a sharded CI workflow (aat-reports.yml); Playwright visual regression tests exist for each sampled deep component (Button, Dialog, FormControl, DataTable, ToggleSwitch, TextInput, InlineMessage, PageLayout, ActionMenu, Blankslate); required CI jobs enforce lint, format, unit tests (React 18/19 matrix), and type-checking on every push/PR/merge-queue event; CodeQL SAST scanning runs on push, PR, and a weekly schedule; and primer/primitives runs an automated a11y-contrast check. This direct code and workflow evidence, spanning the full sampled component set with documented exceptions, satisfies anchor 3's requirement that quality gates cover the supported lifecycle and exceptions with comprehensive operational behavior. No public evidence shows measured, acted-upon quality/regression/adoption outcomes over time (anchor 4) \u2014 report artifacts and a Datadog code-metrics pipeline are configured, but their result contents are not in evidence.",
          "raw_scores": [
            3,
            3,
            3
          ],
          "requires_review": true,
          "review_status": "approve",
          "scope": {
            "basis": "governance",
            "generalizability": "sample-only",
            "limitations": "Evidence confirms gates are wired to execute across nearly all stories/components (a system-wide mechanism via Axe.test.ts iterating the full Storybook story set), but per-component outcome confirmation is limited to the sampled deep components; actual pass/fail results, trend history, and confirmation that flagged issues (e.g., open color-contrast TODOs) are eventually resolved rather than perpetually skipped are not in evidence.",
            "subjects": [
              "primer/react AAT via axe",
              "primer/react VRT via Playwright",
              "primer/react CI (lint/test/type-check)",
              "CodeQL security scanning",
              "primer/primitives a11y-contrast check"
            ]
          },
          "score": 3.0,
          "score_range": 0.0,
          "selected_anchor": "Quality gates cover the supported lifecycle and exceptions",
          "verification_depth": "automation-wired",
          "verification_signals": {
            "automation_wiring": true,
            "current_results": false,
            "test_definition": true
          }
        }
      ],
      "critical_unresolved": false,
      "detail": "review and ownership",
      "label": "Governance",
      "provisional_score": 75.0,
      "provisional_state": "continue",
      "publishable": true,
      "review_coverage_pct": 100.0,
      "score": 75.0,
      "state": "continue",
      "unresolved_disagreement": false
    }
  ],
  "assessment_contract_version": 2,
  "assessor_model": "claude-sonnet-5",
  "assessor_profile_id": "claude-code/claude-sonnet-5/claude-json/contract-2",
  "assessor_provider": "claude-code",
  "assessor_review_warning_count": 0,
  "comparability_fingerprint": "58f35842a8604b8b3d3e16e5abe372a85986507781e5d926e9f466c188b92e01",
  "cutoff_date": "2026-08-20",
  "disposition": "pilot",
  "draft": false,
  "evaluation": "primer-public-diagnostic",
  "evaluation_name": "Primer public-evidence diagnostic",
  "evidence_complete_pct": 100.0,
  "evidence_lock_sha256": "742626b9d8bf76fade5adc17a10bf0aacf67a9f7d8ec7304b92d3d71eb009d7f",
  "evidence_scope": {
    "governance": "public",
    "missing_evidence_policy": "unknown-not-absent",
    "visibility": "public"
  },
  "exact_assessor_agreement_pct": 85.0,
  "expected_passes": 3,
  "framework": "design-system-diagnostic/1.0.0",
  "generated_at_epoch": 1787496550,
  "limitations": [
    "This scorecard describes capability supported by the configured evidence snapshot.",
    "Missing public evidence is reported as unknown and is not evidence that an internal capability is absent.",
    "Repeated outputs from one assessor model measure agreement, not statistical independence.",
    "Deep component findings are scoped to 11 declared component samples across 10 archetypes unless system-wide evidence is cited.",
    "Structure findings use 1 declared flow sample(s) and 2 declared pattern sample(s).",
    "Governance findings describe public evidence only."
  ],
  "overall_score": 73.75,
  "provisional_overall_score": 73.75,
  "publication_status": "approved",
  "publishable": true,
  "resolved_review_warning_count": 0,
  "review_coverage_pct": 100.0,
  "sampling": {
    "component_archetypes": [
      "action",
      "content",
      "data-display",
      "feedback",
      "input",
      "layout",
      "navigation",
      "overlay",
      "selection",
      "status"
    ],
    "component_design_dispositions": {
      "action-menu": "component",
      "blankslate": "component",
      "button": "component",
      "data-table": "compound",
      "dialog": "component",
      "form-control": "compound",
      "inline-message": "component",
      "page-layout": "code-only",
      "spinner": "component",
      "text-input": "component",
      "toggle-switch": "component"
    },
    "component_design_provenance": {
      "action-menu": "analyst-declared",
      "blankslate": "analyst-declared",
      "button": "analyst-declared",
      "data-table": "analyst-declared",
      "dialog": "analyst-declared",
      "form-control": "analyst-declared",
      "inline-message": "analyst-declared",
      "page-layout": "analyst-declared",
      "spinner": "analyst-declared",
      "text-input": "analyst-declared",
      "toggle-switch": "analyst-declared"
    },
    "composition_limitations": {
      "create-configure-save": [
        "This is an analyst-declared product flow evaluated from Primer's published composition, responsive, component, and behavioral guidance; Primer Web does not publish a corresponding end-to-end Figma flow."
      ],
      "empty-state-recovery": [
        "Primer Web publishes the participating component assets but not a composed empty-state recovery Figma artifact."
      ],
      "loading-recovery": [
        "Primer Web publishes the participating component assets but not a composed loading-to-recovery Figma artifact."
      ]
    },
    "composition_provenance": {
      "create-configure-save": "not-recorded",
      "empty-state-recovery": "not-recorded",
      "loading-recovery": "not-recorded"
    },
    "composition_required_surfaces": {
      "create-configure-save": [
        "code",
        "documentation"
      ],
      "empty-state-recovery": [
        "code",
        "documentation"
      ],
      "loading-recovery": [
        "code",
        "documentation"
      ]
    },
    "deep_components": 11,
    "evaluation_profile": "cross-surface-comprehensive",
    "flows": 1,
    "foundation_variable_coverage": "full-file",
    "governance_limitations": [
      "Internal decision records, service levels, adoption dashboards, and governance outcome metrics are not assumed from public evidence.",
      "Private Slack discussions and GitHub-internal review artifacts are outside this public evaluation.",
      "Public migration documentation is evaluated directly, but linked staff-only production pull requests and private migration outcomes remain outside the evidence scope."
    ],
    "governance_scope": "public",
    "patterns": 2,
    "sampling_fingerprint": "eedbfbc0fd995e604b6f4434c4def737d3865fd24bd902b741bc85a88c1d7b55"
  },
  "score_interpretation": "Scores show how closely the captured evidence meets each rubric anchor. A criterion score of 3 maps to 75 and means the configured anchor is comprehensive, operational, or tested as defined by that criterion.",
  "scorecard_version": 3,
  "system": "primer",
  "system_name": "Primer",
  "system_role": "anchor",
  "system_version": "public-snapshot-2026-08-20",
  "unresolved_review_warning_count": 0,
  "visibility": "public"
}
