Size: M. Build order 2 (+6 for bisect). For each pattern ID present tonight but not last night: (1) candidate window = commits between the two scanned SHAs; (2) narrow via the pattern's inferred template/CSS file (git log -- ); (3) bisect fallback with a one-page/one-rule ~15s repro; (4) parse 'Issue #NNNNN by author:' from the commit subject → drupal.org issue/MR link + author. Output reports/attribution-YYYY-MM-DD.json with confidence: file-match | bisect | window. Never attribute a person at window confidence.
Design: NIGHTLY-PIPELINE.md. One bounded AI session per issue (see TOOLING-ROADMAP.md discipline). Drafted with AI assistance (Claude Code); no external code copied.
Size: M. Build order 2 (+6 for bisect). For each pattern ID present tonight but not last night: (1) candidate window = commits between the two scanned SHAs; (2) narrow via the pattern's inferred template/CSS file (git log -- ); (3) bisect fallback with a one-page/one-rule ~15s repro; (4) parse 'Issue #NNNNN by author:' from the commit subject → drupal.org issue/MR link + author. Output reports/attribution-YYYY-MM-DD.json with confidence: file-match | bisect | window. Never attribute a person at window confidence.
Design: NIGHTLY-PIPELINE.md. One bounded AI session per issue (see TOOLING-ROADMAP.md discipline). Drafted with AI assistance (Claude Code); no external code copied.