Opus finding
`cron-state.json` consecutive_failures counter resets only on success branch, but JSON merge in apply_state_update never resets on success when prior state was loaded fresh after a conflict
- .github/workflows/aeon.yml:670-686
The success branch sets NEW_CONSEC=0 but then writes it as `.[$s].consecutive_failures = $consec`. That's fine on first apply. However on the conflict-retry path the function reads STATE again from disk (line 731-740) and re-runs apply_state_update, incrementing total_runs again, which over-counts runs when the push retries. Each conflict retry adds another +1 to total_runs / total_successes / total_failures even though the skill ran exactly once. This poisons success_rate metrics that the heartbeat/skill-health logic depends on for the self-healing loop described in README.
Recommendation
Guard apply_state_update so counters are only incremented if the current run's timestamp is not already recorded, e.g. write a per-run idempotency key (GITHUB_RUN_ID + attempt) into the state and skip increments if present.