The public site for jericho3110's research: https://jericho3110.github.io/research-site/
Built by GitHub Pages with Jekyll and the minima theme: there is nothing to build locally.
| File | What it is |
|---|---|
_config.yml |
site title, theme, base URL, menu |
index.md, research.md, about.md |
the pages |
_posts/YYYY-MM-DD-title.md |
blog posts (front matter: layout: post, title, date) |
meta.md, meta/*.md |
the metas: tier lists of what's strongest now, field by field |
_data/meta/*.json |
each meta's data (tiers, category lists, source, as-of date) |
_includes/tierlist.html |
the tier-list template every meta page uses (HTML-escapes all data) |
Every day at 23:07 UTC, .github/workflows/briefing.yml
runs scripts/briefing.py: it reads the day's digest from
ai-research and the KEV watch from
cybersecurity-research,
writes _posts/YYYY-MM-DD-daily-briefing.md, commits it, and asks GitHub
Pages to rebuild (a push made by the workflow's own token doesn't trigger
a Pages build by itself). jekyll-feed publishes every post at
/feed.xml.
python scripts/briefing.py --dry-run # print today's briefing
python -m unittest discover -s tests # 18 tests, no network
Security: the script fetches only raw.githubusercontent.com/jericho3110/{ai-research,cybersecurity-research}/main/,
keeps only lines matching the exact shapes those repos' generators write,
caps downloads at 2 MB, and wraps the post body in {% raw %} so text from
a feed can never run Liquid template code. No AI model, no secrets. The
workflow has contents: write and pages: write only, with actions
pinned to commit SHAs.
Every day at 22:47 UTC, .github/workflows/meta.yml
runs scripts/models.py: it reads the Artificial Analysis
free API, keeps each model family's best variant, tiers them by distance
from the leader (SSS within 4 points, SS 8, S 15, A 20, B 28, C 35), ranks
coding, agents, value and speed, and writes _data/meta/ai_models.json.
The front page and /meta/ai-models/ render it with _includes/tierlist.html.
One-time setup (needed for the daily update): create a free account at
artificialanalysis.ai, copy the API
key, then in this repo: Settings > Secrets and variables > Actions > New
repository secret, name AA_API_KEY. Until then the page shows the data
seeded by hand on 2026-10-25, and the workflow changes nothing.
AA_API_KEY=... python scripts/models.py --dry-run # print the new data
python scripts/models.py --from-file saved.json # build from a saved response, no key
Security: fetches one fixed URL with a size and page cap; the key lives only in the Actions secret and the environment; numbers out of range and control characters are dropped; the template escapes every value.
The same workflow runs scripts/kev_meta.py (vendors tiered by CISA KEV
additions in the last 90 days: S = half the top count or more, A = a
third, B = at least 2; from CISA's public feed, no key) and then
scripts/patch_notes.py, which compares every _data/meta/*.json with
its last copy in _meta_snapshots/ and logs what entered, moved, left
or became #1 to _data/patch_notes.json, newest first. Pushing a hand
edit to _data/meta/ runs the patch notes too. Pages: /meta/cybersecurity/,
/meta/patch-notes/; the latest notes are on the front page.
python scripts/kev_meta.py --dry-run # the cybersecurity meta from today's catalog
python scripts/patch_notes.py --dry-run # what would be logged, without writing
How to read, share or extend the updates: docs/STAYING_CURRENT.md.
- Add
_posts/YYYY-MM-DD-short-title.mdwith the front matter above. - Link to the repo that holds the full research and its sources.
- Commit and push; Pages rebuilds in about a minute.
- GitHub: About GitHub Pages and Jekyll
- Jekyll: Posts
- minima theme