factcircuit
FactCircuit: an auditable claim-and-evidence verification loop with immutable provenance, staged checks, bounded retrieval, and reproducible evaluation.
Where the climate is abnormal this week, measured against each place's own record. 99% chance of a 1997/2015-magnitude El Niño peak.
Translation pending
DataPython · HTMLGitHub @kristjanlepik-commitsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Weekly probability tracker for the developing 2026-27 El Niño event
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Internal weekly tracker for the 2026-27 El Niño peak. Generates a markdown brief and analog chart each Monday, automated via GitHub Actions. This README is the operator's guide. Implementation context for Claude Code lives in CLAUDE.md. Methodology lives in methodology.md (maintained separately as a project doc). • brief.md: 4-section structured brief with headline probability buckets, physical state panel, analog tracker, and editorial layer. • analog.png: 2026-27 ONI trajectory vs 1997-98, 2015-16, 2023-24.Read the full README ↗
Internal weekly tracker for the 2026-27 El Niño peak. Generates a markdown brief and analog chart each Monday, automated via GitHub Actions.
This README is the operator's guide. Implementation context for Claude
Code lives in CLAUDE.md. Methodology lives in methodology.md
(maintained separately as a project doc).
Each Monday, in briefs/YYYY-MM-DD/:
brief.md: 4-section structured brief with headline probability
buckets, physical state panel, analog tracker, and editorial layer.analog.png: 2026-27 ONI trajectory vs 1997-98, 2015-16, 2023-24.And in snapshots/YYYY-MM-DD.json, a frozen copy of all input data
that produced that issue. This is what makes week-over-week comparisons
possible.
git clone <this repo>
cd eltracker
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python run_brief.py
This generates a brief using whatever's in sources.py (the V1
hand-curated seed values). It will work without any API keys.
To enable live fetching and AI-generated editorial layer:
export ANTHROPIC_API_KEY=sk-ant-...
# Configure CDS API for ECMWF/ERA5 (free, register at cds.climate.copernicus.eu):
cat > ~/.cdsapirc <<EOF
url: https://cds.climate.copernicus.eu/api
key: <your-uid>:<your-api-key>
EOF
chmod 600 ~/.cdsapirc
python run_brief.py
ANTHROPIC_API_KEY (required for the auto-generated editorial)CDS_API_KEY in format <UID>:<API-key> (required once ECMWF
and ERA5 fetchers are implemented)SMTP_HOST, SMTP_USER, SMTP_PASS, BRIEF_RECIPIENT (optional;
for emailing the brief). Without these the workflow still runs
and commits to the repo..github/workflows/weekly_brief.yml if needed.As of this V1.5 scaffolding, all fetchers are stubs that fall back to
seed values in sources.py. The pipeline runs end-to-end but reads
from seeds, not the live web. To make it truly automated, implement
the fetchers in priority order (see HANDOVER.md).
The brief includes a "Source freshness" subsection in the editorial layer that shows which sources were fetched live vs fell back. So you can always tell at a glance whether a given week was fully automated or not.
In the steady state (all fetchers implemented, cron running):
Nothing. The brief lands in your inbox Monday afternoon. You read it, decide whether to edit the auto-generated Analyst Read paragraph, and move on.
In the bootstrap state (fetchers still stubs):
Either run python run_brief.py locally Monday morning after manually
updating any changed fields in sources.py (V1 workflow), or skip
weeks until the fetchers are implemented enough to run unattended.
When you change anything that would shift headline numbers without an
underlying probability change (RONI offset, conversion math, bucket
definitions, analog event list), bump METHODOLOGY_VERSION in
sources.py. The next brief will surface the bump with a loud banner
so you know that week's numbers are not strictly comparable to last
week's.
sources.py Seed values, methodology constants
fetchers/ One module per data source
fetch_all.py Orchestrator
probs.py Probability harmonization
snapshot.py Snapshots and diffing
analog.py Chart generation
editorial.py Anthropic API call for analyst prose
run_brief.py Entry point
briefs/ Generated briefs
snapshots/ Input state per issue (audit trail)
.github/workflows/weekly_brief.yml
scripts/send_email.py