What's Changed
Features
- feat(claude-hooks): prose-only PRs skip CodeRabbit and merge with --admin (#1648) by @niklam in #1650
Bug Fixes
- fix(deck-adapter-ulanzi): derive a context's controller from the dial input it receives (#1530) by @niklam in #1595
- fix(audio-scenarios): limiter warnings read the engaged bit (#1548) by @niklam in #1601
- fix(replay-engine): one pending replay speed for keys, the dial and jumps (#1427) by @niklam in #1602
- fix(claude-hooks): judge a merge only in niklam/iracedeck (#1393) by @niklam in #1605
- fix(scripts): heal and hide the typecheck guard's probe file (#1394) by @niklam in #1609
- fix(diagnostics): stop the resource-monitor test reading 0 % CPU under load (#1576) by @niklam in #1608
- fix(scripts): shut the capture browser down so capture:settings exits (#1544) by @niklam in #1612
- fix(claude-hooks): count a spec section only when its heading is the section (#1391) by @niklam in #1610
- fix(ci): publish voice packs from master and deploy only the verified catalog (#1392) by @niklam in #1614
- fix(race-engineer): judge the player's lap the way iRacing does (#1582) by @niklam in #1621
- fix(deck-core): order each context's lifecycle events on every deck adapter (#1597) by @niklam in #1623
- fix(iracing-actions): Cycle Car reads CamCarIdx as the dial does (#1072) by @niklam in #1622
- fix(claude-hooks): read a commit's files from the commit at command position (#1594) by @niklam in #1619
- fix(claude-hooks): read the program word in any spelling and past git's global options (#1606) by @niklam in #1628
- fix(sim-events-iracing): a formation lineup change is iRacing's slot moving, with the 2026-11-04 evidence (#1550) by @niklam in #1626
- fix(ci): refuse a deploy whose voice-pack catalog is behind the live one (#1613) by @niklam in #1625
- fix(claude-hooks): set the mask aside only where a shell is fed (#1607) by @niklam in #1632
- fix(iracing-sdk): hold the replay state through the plugin's own seek (#1429) by @niklam in #1636
- fix(claude-hooks): gate the first word of a shell-fed string and a wrapper's program (#1634) by @niklam in #1637
- fix(deck-adapter-elgato): a failed log write never throws out of a logger call (#1630) by @niklam in #1639
- fix(sim-events-iracing): report a one-to-go missed while the driver was away (#1395) by @niklam in #1640
- fix(sim-events-iracing): stop fuel warnings on the last laps of a race the tank covers (#1405) by @niklam in #1645
- fix(sim-events-iracing): count the gap closing horizon in the player's own laps (#1380) by @niklam in #1652
- fix(audio-assets): bump both voice packs for #1582's script change (#1665) by @niklam in #1666
Refactoring
- refactor(claude-hooks): split the shell lexer and script interpreter out of rules-bash.mjs (#1590) by @niklam in #1598
- refactor(iracing-sdk): isolate each telemetry subscriber's failures (#1558) by @niklam in #1600
- refactor(sim-events-iracing): isolate each translator tick step's failures (#1559) by @niklam in #1603
- refactor(event-bus): report handler throws through the bounded reporter (#1560) by @niklam in #1604
- refactor(audio-service): share one fake audio service across the Race Engineer tests (#1504) by @niklam in #1611
- refactor(packages): tidy package boundaries and dependencies, part A (#1375) by @niklam in #1615
- refactor(race-engineer-wiring): one neutral live car position dep (#1577) by @niklam in #1618
- refactor(iracing-actions): dial surfaces extend a shared base (#1589) by @niklam in #1627
- refactor(packages): one SubSessionID reader, GATED completeness, recorder docs (#1591) by @niklam in #1620
- refactor(race-engineer): read the classified session from the translator (#1587) by @niklam in #1624
- refactor(packages): replace cross-package test reaches and share the file sink (#1375) by @niklam in #1629
- refactor(sim-events-iracing): translator state arrives in slices, a diff takes its slice (#1588) by @niklam in #1638
Documentation
- docs(rules): path-scope the turbo, Node-crash, board and action-test sections (#1501) by @niklam in #1592
- docs(rules): name the CodeRabbit CLI round as a review exception (#1586) by @niklam in #1593
- docs: correct the documentation the deck-core split left stale (#1374) by @niklam in #1651
Maintenance
- chore(eslint): lint and format the website's .astro pages and .mts scripts (#1616) by @niklam in #1635
Other Changes
Full Changelog: v3.8.0...v3.8.1