v3.8.4 — label-invariant reconciler + budget-aware LLM sweep
Highlights
t2040 (#18529) — label-invariant reconciler with backfill. New _normalize_label_invariants() pass in pulse-issue-reconcile.sh enforces at-most-one status:* and at-most-one tier:* on every open issue, every cycle. Backfills 14 already-polluted issues left by the pre-t2033 write-without-remove bug and pre-t1997 tier concatenation bug. Precedence: done > in-review > in-progress > queued > claimed > available > blocked with done terminal. Tier rank reasoning > standard > simple matches dedup-tier-labels.yml (idempotent with GH Action). Drive-by fixes: atomic _mark_issue_done via set_issue_status, tier dedupe in issue-sync create and enrich paths.
t2041 (#18530) — budget-aware LLM sweep with state fingerprint cache. Reframes pulse prefetch from O(N) to O(churn). Layer 1 state fingerprint (SHA-256 over sorted labels + assignees + updatedAt + PR reviewDecision/mergeable) + bounded verification query short-circuits deep LLM analysis when nothing changed. Hygiene Anomalies section reads t2040 counters. New config configs/pulse-sweep-budget.json. Fail-open on cache error, fail-closed on verification doubt.
PR
Testing
40 new test assertions (19 for t2040, 21 for t2041). Regression suites clean: characterization (26), delta-prefetch (7), parent-task-guard (20), dispatch-dedup-multi-operator (7).
Verification
First post-deploy pulse cycle is expected to:
- Reduce 9 dual-status issues to one
status:*each - Reduce 5 multi-tier issues to one
tier:*each - Write
~/.aidevops/cache/pulse-label-invariants.<host>.jsonwithstatus_fixed=9 tier_fixed=5 - Emit Hygiene Anomalies section in state files
- On subsequent cycles with no changes, emit per-repo
State cache hitmarkers