After PR #5 moved all 5 upptime workflows out of .github/workflows/,
no CI fires on push to main. The dashboard's CI status badge is
sticky on the LAST CI run, which was the broken upptime cron from
before the disable — so the repo displays a permanent red X.
Add a tiny noop workflow that prints why the repo is idle and
exits 0. Fires on push + daily cron so the badge stays accurate.
Replacement tracked in internal#97 (external uptime monitor RFC).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Five status-page workflows have been red on every cron tick (5x/hour)
since the 2026-05-06 GitHub org suspension. Symptom from the latest
run (run 8002):
url: api.github.com/repos/upptime/uptime-monitor/releases?per_page=1
data: { message: 'Bad credentials', status: '401' }
upptime fundamentally cannot work on this infra:
- upstream upptime/uptime-monitor action calls api.github.com on
every run to check its own version
- GitHub Molecule-AI org PAT is dead
- operator-host anonymous IP is rate-limited
- re-tokenizing with a personal PAT recreates the bot-ring shape
that triggered the original suspension (memory:
feedback_github_botring_fingerprint)
Move the five workflow files to .github/workflows-disabled-post-suspension/
so Gitea Actions stops dispatching them. This eliminates the 5x/hour
red CI noise on dashboards and stops paging on a known-impossible run.
Replacement plan: external uptime monitor (StatusPage.io, BetterStack,
healthchecks.io). RFC follow-up filed separately on internal#.
Files moved (no functional change to YAML):
- uptime.yml
- response-time.yml
- graphs.yml
- summary.yml
- static-site.yml
Plus a README explaining why under the new dir.
Rollback: git mv them back if upptime ever becomes runnable again.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Static Site CI was building the Sapper export successfully but had no
step to publish it — `gh-pages` branch never existed so GitHub Pages
couldn't serve anything. Matches the canonical Upptime template:
- static-site.yml: adds peaceiris/actions-gh-pages@v4 step publishing
site/status-page/__sapper__/export/ to gh-pages
- All 5 workflows: pin upptime/uptime-monitor to @v1.41.0 instead of
@master (reproducibility + matches upstream template expectations)
The Upptime action reads .upptimerc.yml from the current working
directory; without an explicit checkout step the runner starts in an
empty dir and every run fails with ENOENT. Adding actions/checkout@v4
with fetch-depth: 0 (full history required by the commit-back step)
as the first step of each workflow.
Observed on the initial-commit runs of uptime.yml + static-site.yml
which both failed with:
ERROR [Error: ENOENT: no such file or directory, open '.upptimerc.yml']
Seeds the Upptime-powered status page for Molecule AI. Zero-infra:
GitHub Actions cron every 5min checks each endpoint, commits the
result to history/, and rebuilds the static site into the gh-pages
branch. Incident detection auto-opens Issues in this repo.
- .upptimerc.yml — five sites monitored on first cut:
- molecule-cp /health + /legal/terms
- moleculesai.app / + /pricing + /legal/terms
Each has a display name that matches the status page UI.
- .github/workflows/uptime.yml — 5min uptime check
- .github/workflows/response-time.yml — hourly latency histogram
- .github/workflows/graphs.yml — daily long-term graphs
- .github/workflows/static-site.yml — hourly site rebuild
- .github/workflows/summary.yml — daily README badge refresh
- README.md — landing page with workflow status badges, Upptime
markers for auto-populated status section
- history/.gitkeep — placeholder so the workflows' first run has a
dir to commit into
- LICENSE — MIT
Next steps documented separately: enable GitHub Pages (Settings →
Pages → Source: gh-pages branch), add DNS CNAME record for
status.moleculesai.app → molecule-ai.github.io.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>