Skip to content

experiment: ablation Phase 2 — generalization across 6 new fixtures#150

Merged
let-sunny merged 2 commits intomainfrom
run/ablation-phase2
Mar 28, 2026
Merged

experiment: ablation Phase 2 — generalization across 6 new fixtures#150
let-sunny merged 2 commits intomainfrom
run/ablation-phase2

Conversation

@let-sunny
Copy link
Copy Markdown
Owner

Phase 2: Generalization

Phase 1 results (desktop 3) — verify reproducibility across different fixtures.

Fixtures (6)

  • mobile-product-detail (291 nodes)
  • mobile-landing-page (246 nodes)
  • mobile-shop (318 nodes)
  • mobile-pricing (266 nodes)
  • desktop-pricing (273 nodes)
  • desktop-shop (310 nodes)

Experiments

  • Baseline (6 fixtures) — 6 calls
  • Strip (5 types × 6 fixtures) — 30 calls
  • Size-constraints responsive (6 fixtures × 2) — 12 calls
    • mobile: 375px design → 768px render
    • desktop: 1200px design → 1920px render

Cost estimate: ~$16

Hover-interaction: skipped (confirmed as "cannot implement" in Phase 1)

Wiki: Experiment 05

🤖 Generated with Claude Code

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 28, 2026

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters (300)
  • data/ablation/conditions/size-constraints/desktop-pricing/code-baseline-1920.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-pricing/code-stripped-1920.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-pricing/diff-baseline-1920.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-pricing/diff-stripped-1920.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-pricing/figma-baseline-1920.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-pricing/figma-stripped-1920.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-pricing/output-baseline-expanded.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/desktop-pricing/output-baseline.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/desktop-pricing/output-stripped-expanded.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/desktop-pricing/output-stripped.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/desktop-pricing/result.json is excluded by !data/**
  • data/ablation/conditions/size-constraints/desktop-shop/code-baseline-1920.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-shop/code-stripped-1920.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-shop/diff-baseline-1920.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-shop/diff-stripped-1920.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-shop/figma-baseline-1920.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-shop/figma-stripped-1920.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-shop/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-shop/images/image-3@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-shop/images/image-4@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-shop/images/image-5@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-shop/images/image-6@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-shop/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/desktop-shop/images/mapping.json is excluded by !data/**
  • data/ablation/conditions/size-constraints/desktop-shop/output-baseline-expanded.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/desktop-shop/output-baseline.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/desktop-shop/output-stripped-expanded.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/desktop-shop/output-stripped.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/desktop-shop/result.json is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-landing-page/code-baseline-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-landing-page/code-stripped-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-landing-page/diff-baseline-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-landing-page/diff-stripped-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-landing-page/figma-baseline-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-landing-page/figma-stripped-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-landing-page/images/hero-image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-landing-page/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-landing-page/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-landing-page/images/mapping.json is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-landing-page/output-baseline-expanded.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-landing-page/output-baseline.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-landing-page/output-stripped-expanded.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-landing-page/output-stripped.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-landing-page/result.json is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-pricing/code-baseline-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-pricing/code-stripped-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-pricing/diff-baseline-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-pricing/diff-stripped-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-pricing/figma-baseline-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-pricing/figma-stripped-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-pricing/output-baseline-expanded.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-pricing/output-baseline.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-pricing/output-stripped-expanded.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-pricing/output-stripped.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-pricing/result.json is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-product-detail/code-baseline-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-product-detail/code-stripped-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-product-detail/diff-baseline-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-product-detail/diff-stripped-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-product-detail/figma-baseline-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-product-detail/figma-stripped-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-product-detail/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-product-detail/images/mapping.json is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-product-detail/images/shape-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-product-detail/images/shape-3@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-product-detail/images/shape@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-product-detail/output-baseline-expanded.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-product-detail/output-baseline.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-product-detail/output-stripped-expanded.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-product-detail/output-stripped.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-product-detail/result.json is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-shop/code-baseline-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-shop/code-stripped-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-shop/diff-baseline-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-shop/diff-stripped-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-shop/figma-baseline-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-shop/figma-stripped-768.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-shop/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-shop/images/image-3@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-shop/images/image-4@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-shop/images/image-5@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-shop/images/image-6@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-shop/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/conditions/size-constraints/mobile-shop/images/mapping.json is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-shop/output-baseline-expanded.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-shop/output-baseline.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-shop/output-stripped-expanded.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-shop/output-stripped.html is excluded by !data/**
  • data/ablation/conditions/size-constraints/mobile-shop/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/baseline/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/baseline/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/baseline/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/baseline/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/baseline/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/baseline/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/baseline/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/component-references/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/component-references/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/component-references/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/component-references/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/component-references/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/component-references/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/component-references/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/layout-direction-spacing/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/layout-direction-spacing/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/layout-direction-spacing/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/layout-direction-spacing/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/layout-direction-spacing/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/layout-direction-spacing/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/layout-direction-spacing/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/node-names-hierarchy/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/node-names-hierarchy/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/node-names-hierarchy/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/node-names-hierarchy/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/node-names-hierarchy/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/node-names-hierarchy/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/node-names-hierarchy/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/style-references/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/style-references/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/style-references/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/style-references/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/style-references/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/style-references/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/style-references/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/variable-references/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/variable-references/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/variable-references/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/variable-references/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/variable-references/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/variable-references/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-pricing/variable-references/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/images/image-3@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/images/image-4@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/images/image-5@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/images/image-6@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/images/mapping.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/baseline/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/images/image-3@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/images/image-4@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/images/image-5@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/images/image-6@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/images/mapping.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/component-references/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/images/image-3@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/images/image-4@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/images/image-5@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/images/image-6@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/images/mapping.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/layout-direction-spacing/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/images/image-3@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/images/image-4@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/images/image-5@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/images/image-6@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/images/mapping.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/node-names-hierarchy/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/images/image-3@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/images/image-4@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/images/image-5@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/images/image-6@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/images/mapping.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/style-references/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/images/image-3@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/images/image-4@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/images/image-5@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/images/image-6@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/images/mapping.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/desktop-shop/variable-references/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/baseline/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/baseline/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/baseline/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/baseline/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/baseline/run-0/images/hero-image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/baseline/run-0/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/baseline/run-0/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/baseline/run-0/images/mapping.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/baseline/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/baseline/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/baseline/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/component-references/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/component-references/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/component-references/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/component-references/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/component-references/run-0/images/hero-image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/component-references/run-0/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/component-references/run-0/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/component-references/run-0/images/mapping.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/component-references/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/component-references/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/component-references/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/layout-direction-spacing/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/layout-direction-spacing/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/layout-direction-spacing/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/layout-direction-spacing/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/layout-direction-spacing/run-0/images/hero-image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/layout-direction-spacing/run-0/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/layout-direction-spacing/run-0/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/layout-direction-spacing/run-0/images/mapping.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/layout-direction-spacing/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/layout-direction-spacing/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/layout-direction-spacing/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/node-names-hierarchy/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/node-names-hierarchy/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/node-names-hierarchy/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/node-names-hierarchy/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/node-names-hierarchy/run-0/images/hero-image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/node-names-hierarchy/run-0/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/node-names-hierarchy/run-0/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/node-names-hierarchy/run-0/images/mapping.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/node-names-hierarchy/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/node-names-hierarchy/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/node-names-hierarchy/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/style-references/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/style-references/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/style-references/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/style-references/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/style-references/run-0/images/hero-image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/style-references/run-0/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/style-references/run-0/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/style-references/run-0/images/mapping.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/style-references/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/style-references/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/style-references/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/variable-references/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/variable-references/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/variable-references/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/variable-references/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/variable-references/run-0/images/hero-image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/variable-references/run-0/images/image-2@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/variable-references/run-0/images/image@2x.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/variable-references/run-0/images/mapping.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/variable-references/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/variable-references/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-landing-page/variable-references/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/baseline/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/baseline/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/baseline/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/baseline/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/baseline/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/baseline/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/baseline/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/component-references/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/component-references/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/component-references/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/component-references/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/component-references/run-0/output.html is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/component-references/run-0/response.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/component-references/run-0/result.json is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/layout-direction-spacing/run-0/code-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/layout-direction-spacing/run-0/design-tree.txt is excluded by !data/**
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/layout-direction-spacing/run-0/diff-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/layout-direction-spacing/run-0/figma-base.png is excluded by !**/*.png, !data/**, !**/*.png
  • data/ablation/phase1/72ffc72c9103/mobile-pricing/layout-direction-spacing/run-0/output.html is excluded by !data/**

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 65b2ca34-2478-4981-9ad5-8ea615398015

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch run/ablation-phase2

Comment @coderabbitai help to get the list of available commands and usage tips.

Strip experiments (5 types × 6 new fixtures):
- layout-direction-spacing: ΔV=+7.5% (up from +3.3% in Phase 1)
- style-references: ΔV=+3.5% (emerged as significant, was noise in P1)
- variable-references: +1.5% (borderline)
- component-references: 0.0% pixel, CSS classes -15
- node-names-hierarchy: -1.0% (no impact)

Size-constraints responsive (6 fixtures):
- Average ΔV=+15.9% across 7 valid results
- mobile-shop: ΔV=+46% (extreme — complex layout breaks without size info)
- Baseline HTML reused from cache (no redundant API calls)

run-condition.ts: baseline reuse from phase1 cache
run-responsive.ts: local-only responsive comparison utility

Total Phase 2 cost: ~$13

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@let-sunny let-sunny marked this pull request as ready for review March 28, 2026 13:01
@let-sunny let-sunny merged commit 750217f into main Mar 28, 2026
2 of 3 checks passed
@let-sunny let-sunny deleted the run/ablation-phase2 branch March 28, 2026 13:01
let-sunny added a commit that referenced this pull request Mar 28, 2026
…eriment data

Categories changed from intuition-based (structure/token/component/naming/behavior)
to experiment-based (pixel-critical/responsive-critical/code-quality/token-management/minor).
Removed 10 low-impact rules, merged 6 rules into 2 (raw-value, irregular-spacing).
Scores recalibrated using Phase 1+2 ablation results (PR #149, #150).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
let-sunny added a commit that referenced this pull request Mar 29, 2026
#154)

* refactor: reorganize rule categories and scores based on ablation experiment data

Categories changed from intuition-based (structure/token/component/naming/behavior)
to experiment-based (pixel-critical/responsive-critical/code-quality/token-management/minor).
Removed 10 low-impact rules, merged 6 rules into 2 (raw-value, irregular-spacing).
Scores recalibrated using Phase 1+2 ablation results (PR #149, #150).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address CodeRabbit review — missing category, score, duplication

- Add missing responsive-critical to orchestrator + report-generator tests
- Restore missing-component score to -7 (CLAUDE.md guideline)
- Fix raw-value font check: flag partial tokenization (fontFamily OR fontSize)
- Reuse CATEGORY_LABELS in getCategoryLabel (remove duplication)
- Align example config with baseline defaults

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add subType to RuleViolation and centralize rule messages

- Add optional subType field to RuleViolation for programmatic grouping
  (e.g., raw-value has color/font/shadow/opacity/spacing sub-types)
- Create rule-messages.ts with all message template functions
- Replace inline message strings in all 15 rules with centralized constants
- Include subType in JSON output (buildResultJson)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: remove missing-responsive-behavior (duplicate of no-auto-layout), add subType to default-name and irregular-spacing

- Remove missing-responsive-behavior rule (15→14 rules) — duplicates no-auto-layout
- Add subType to default-name: frame/group/vector/shape/text/image/component/instance
- Add subType to irregular-spacing: padding/gap
- Separate vector from shape in default-name subType for granular control

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: rename group-usage → non-layout-container, add Section detection

- Rename rule: group-usage → non-layout-container (broader scope)
- Add Section detection: Sections used as layout containers are flagged
- SubTypes: group (blocking, -8) and section (same score, flagged only with children)
- Remove missing-responsive-behavior (duplicate of no-auto-layout)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add subType to missing-size-constraint (max-width/min-width/wrap/grid)

Messages pre-defined for all 4 sub-types. Currently only max-width is
detected — min-width, wrap, and grid conditions to be implemented in #152.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address CodeRabbit review round 2

- Add subType regression test in buildResultJson
- Use CATEGORIES import in report-generator.test.ts (prevent taxonomy drift)
- Legacy config deprecation → #156 (separate issue)
- raw-value single-violation-per-node → by design (RuleCheckFn contract)
- SECTION detection condition kept as-is (semantic misuse = valid flag)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test: add empty-string subType edge case test

Verifies that falsy subType (empty string) is omitted from JSON output,
matching the conditional spread guard in buildResultJson.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: reject unknown rule IDs in config-loader

Config files with invalid rule IDs now throw with a clear error message
listing the unknown IDs and all valid options. No legacy alias mapping
needed — no existing users to support.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address CodeRabbit review round 3+4

- Guard indexed array access with length assertion (noUncheckedIndexedAccess)
- Strengthen unknown rule ID test to assert both error and valid IDs list

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant