# CritMatic

## [v5.5.8-beta.1](https://github.com/InfiniteLoopAlchemist/CritMatic/tree/v5.5.8-beta.1) (2026-05-07)
[Full Changelog](https://github.com/InfiniteLoopAlchemist/CritMatic/compare/v5.5.7...v5.5.8-beta.1) 

- feat(5.5.8-beta.1): crits-only mode, configurable chat format, broadcast/CLEU fixes  
    Adds a "Track Crits Only" toggle that suppresses recording normal hits,  
    normal heals, DoT/HoT ticks, and bandage ticks (off by default), plus  
    two text-input templates so users can customize the social broadcast  
    format (use {rt1} for the gold star on every locale).  
    Also a deep-scan pass on broadcast and CLEU code:  
    - BG/Raid opt-outs no longer bypassed via fallthrough  
    - castTime nil guard in tooltip code  
    - SetAction / SetSpellBookItem hooks now check method existence  
    - BroadcastVersion gated on IsInGroup(); GROUP_ROSTER_UPDATE coalesced  
    - self-cast heals are now recorded (self-damage still excluded)  
    - compareVersions is local and reordered; broken string fallback removed  
    - /cmhelp now uses self:Print consistently  
- fix(bot): enforce release retry cap + refresh stale 4h cadence docs  
- chore(bot): tighten launchd cadence to 15min for Phase 3  
- feat(bot): drain step + auto-release pipeline (Phase 3)  
    Adds _drain_due_releases at the start of every poll to push + run release.sh  
    for any pending-releases.json entry whose scheduled_at <= now, with retry  
    cap 3 on failure. Replaces the Phase 2 auto-ship-eligible branch with  
    _auto_release_pipeline, which auto-merges via cmd_merge, version-bumps via  
    apply_bump, and schedules via next_peak_timestamp. The auto-release-disabled  
    kill switch falls back to Phase 2 behavior (record pending-fix only).  
- feat(bot): approve.py cancel + list scheduled releases  
- feat(bot): add release runner with dotenv parser  
- feat(bot): add ms-jittered peak-window scheduler  
- feat(bot): add transactional version bump (toc + json + changelog + tag)  
- feat(bot): add pending-release state helpers (Phase 3)  
- docs: implementation plan for patch watcher Phase 3  
- docs: spec for Phase 3 CritMatic patch watcher  
    Auto-merge eligible Phase 2 fixes, bump version (heuristic minor for  
    >3 files OR >50 lines, else patch), prepend CHANGE_LOG.md, annotated  
    tag, schedule release at a randomized ms-jittered timestamp inside the  
    next Tue Pacific or Wed CET peak window. Drain due releases on every  
    poll: git push origin + run release.sh with CF_API_KEY from .env.  
    Tighten launchd cadence from 4h to 15min. New auto-release-disabled  
    kill switch reverts to Phase 2 behaviour. Approval CLI gains 'cancel'  
    for scheduled releases.  
- fix(bot): explicit worktree-add error + brace-safe JSON parse  
- fix(bot): treat git-worktree packager incompat as skip, not fail  
- docs(bot): document Phase 2 auto-fix and approval CLI  
- feat(bot): add approve.py CLI for listing, merging, and rejecting fixes  
- feat(bot): wire fixer + verify into detector with 3-way fork  
- refactor(bot): analyze.run returns removed_symbols set (Phase 2 prep)  
- feat(bot): add 5-check verify gate (luac, packager, grep, paths, size)  
- fix(bot): make claude-output JSON regex non-greedy  
- feat(bot): add fixer module that runs claude -p in a worktree  
- feat(bot): add pending-fix state helpers (Phase 2)  
- docs: implementation plan for patch watcher Phase 2  
    8 bite-sized TDD tasks covering: pending-fix state helpers, fixer module  
    that drives claude -p in an isolated worktree, 5-check verify gate  
    (luac, packager dry-run, removed-symbol grep, path allowlist, diff  
    size), analyzer signature change to surface removed_symbols, detector  
    3-way fork (manual-review / fixer+verify / nothing), approval CLI with  
    ff-only merge, README, and an end-to-end manual test using a fake  
    claude shim. Stdlib only.  
- docs: spec for Phase 2 CritMatic patch watcher  
    Auto-fix proposer (claude -p in an isolated worktree) plus a five-check  
    verify gate (luac -p, packager dry-run, zero-removed-grep, path  
    allowlist, diff size cap). Fix branches land in auto-ship-eligible,  
    held-for-review, or manual-review-needed states. Approval CLI lets the  
    user list, inspect, merge (ff-only, no push), or reject pending fixes.  
    Phase 2 stops at local merge; auto-push and timed release are Phase 3.  
- docs(bot): drop Phase 1 source-layout limitation, document apidocs source  
- feat(bot): rewire analyzer to use apidocs (Phase 1.5)  
- feat(bot): add apidocs extractor with SHA-diff for modern WoW API source  
- feat(bot): write notifications.log per spec Component 5  
- fix(bot): drop bogus tag prefix; document Phase 1.5 source-layout work  
- docs(bot): add Phase 1 README  
- feat(bot): add launchd plist template  
- fix(bot): use timezone.utc for broader Python compat  
- feat(bot): add detector entry point with state + notify wiring  
- feat(bot): add analyzer entry point wiring diff + grep + report  
- feat(bot): add macOS notifier with terminal-notifier fallback  
- fix(bot): apply pipe escaping uniformly across report cells  
- feat(bot): add Markdown report renderer  
- feat(bot): add Lua source greper for at-risk symbols  
- fix(bot): make rename pairing bijective in diff helper  
- feat(bot): add API surface diff with rename heuristic  
- feat(bot): add Townlong-Yak global-function extractor  
- feat(bot): add Wago build feed fetcher with frozen fixture  
- feat(bot): add state module (last-seen builds, kill switch, failure counter)  
- refactor(bot): tighten http helper types and exception init  
- feat(bot): add stdlib HTTP helper with timeout and retry  
- chore: scaffold bot/ for patch watcher Phase 1  
- docs: implementation plan for patch watcher Phase 1  
    14 bite-sized TDD tasks covering: HTTP helper, state module, Wago build  
    feed parser, Townlong-Yak global-function extractor, set diff with rename  
    heuristic, Lua source greper, Markdown report renderer, macOS notifier,  
    analyzer entry point, detector entry point, launchd plist, README, and  
    end-to-end manual test. Stdlib only.  
- docs: spec for Phase 1 CritMatic patch watcher  
    Local-only macOS bot that polls Wago.tools for new WoW builds, diffs the  
    API surface, greps CritMatic Lua sources for at-risk symbols, and posts a  
    macOS notification linking to a structured Markdown report. Phase 1 only:  
    detect + analyze + notify, no fixes, no releases.  
