All sites showing stale 'down' status from 2026-04-19 data.
Current probe data shows all 7 sites up. Updating yml + summary.json
to reflect actual state.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adds the missing Upptime-format aggregator step that was lost in the
Upptime → custom-probe migration (post-2026-05-06 GitHub suspension).
Changes:
- scripts/aggregate.py (NEW): Python script that reads history/<slug>.jsonl,
computes rolling uptime% and response-time aggregates, writes
history/<slug>.yml (latest status) and history/summary.json
(day/week/month/year per-site aggregates)
- .github/workflows/uptime-probe.yml: adds "Aggregate probe results"
step between probe run and commit; ensures .yml and summary.json
are regenerated on every probe tick
Immediate effect: fixes false-positive "down" status on Canvas pricing
and legal routes (stuck at 404 from 2026-04-19); refreshes all rolling
uptime aggregates to reflect current probe data.
See: molecule-ai/molecule-ai-status#7
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
curl without -f returns non-zero on connection failure (DNS/timeout)
before reading the HTTP status line, causing a bare exit under set -euo
pipefail. Wrapping with || echo 000 ensures the friendly ::error::
message fires for all failure modes (HTTP 502 and connect failures alike).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Probe runs on GitHub Actions (ubuntu-latest) — confirmed independent of
Gitea Actions runner. Previously the commit step silently swallowed push
failures with `|| echo "push failed"`. Now:
1. Health gate: checks git.moleculesai.app/api/v1/version returns 200
before pushing. Fails fast with a clear ::error message if Gitea is
502 or unreachable, rather than silently skipping the push.
2. Fail loudly: `set -euo pipefail` replaces `set +e`, so any push error
surfaces as a workflow failure (visible in GitHub Actions UI).
3. Self-heals: the next /5 cron firing picks up the buffered history/
results once Gitea recovers.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>