- recipe-report.py: survey (run + per-recipe PRs + CI verdicts) / render (spec->HTML) / publish (copy to cc-ci:/var/lib/cc-ci-reports + regen index). - skill .claude/skills/recipe-report: review the weekly run, classify needs-attention vs routine, publish one public HTML page per week + index at report.ci.commoninternet.net. Read-only. - launch-report.py: one-shot cc-ci-report agent, REPORT_MODEL default opus (separate from the sonnet upgrader), REPORT_BACKEND default claude. - upgrade-all SKILL: closing step launches the report agent. Serving (nix/modules/reports.nix) already deployed + live. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.3 KiB
name, description
| name | description |
|---|---|
| recipe-report | Generate the weekly public "Recipe Report" after the cc-ci /upgrade-all run. Reviews how the upgrade went and the state of every recipe + open PR, classifies what needs attention vs routine, and publishes a self-contained HTML page to report.ci.commoninternet.net (one page per week + a home index). Read-only — reports, never merges or edits PRs. Runs as its own agent (model configured separately from the upgrader; default opus). Invoke as /recipe-report [YYYY-MM-DD]. |
recipe-report
Produce the weekly "The Recipe Report" — a public HTML page reviewing the latest /upgrade-all run
and the live state of every recipe + open PR. Served at https://report.ci.commoninternet.net (one
week-<date>.html per run + a home-page index). You are read-only: you report, you never merge,
edit, or comment on PRs. The page is public + unauthenticated — include only public-safe data
(recipe names, version bumps, PR titles/links, CI verdicts, concise error summaries); never secrets,
tokens, internal IPs, or raw logs.
Helper: python3 /srv/cc-ci/cc-ci-plan/recipe-report.py {survey|render|publish} (see its header).
Procedure
-
Pick the date.
DATE= the argument, else today (UTC). The/upgrade-allsummary for that run is/srv/cc-ci/.cc-ci-logs/upgrades/upgrade-all-<DATE>.md. -
Survey.
python3 /srv/cc-ci/cc-ci-plan/recipe-report.py survey <DATE> > /tmp/survey.json. This gives you the raw/upgrade-allsummary markdown plus, for every recipe mirror, its open PRs and thecc-ci/testmeCI verdict on each PR head. Read it all. -
Review & classify. Judge the run and the recipe/PR state. Sort everything into:
- Needs attention — PRs that are GREEN and ready to merge, and errors/failures to investigate
(RED
!testme, recipe bugs, anything blocking). Lead with these. Short, specific prose per item. - Routine — minor/clean bumps, stale-test PRs (need operator
--with-tests), up-to-date or skipped-by-design. Brief. Also flag cross-cutting issues (e.g. a recipe ending with two open PRs to reconcile).
- Needs attention — PRs that are GREEN and ready to merge, and errors/failures to investigate
(RED
-
Write the spec
/tmp/report-spec.json(shape in the helper header):date,subtitle("Week of "), a one-lineheadline,needs_attention[],routine[], and a comprehensivetable[]with EVERY recipe (recipe,change"a → b",statusGREEN/STALE/FAILED/SKIPPED/UPTODATE,cias a level/result number+info string e.g.build 154 ✓orRED · restorewithci_url,pr/pr_url,notes). CI = link + number/info only; no images. -
Render & publish.
python3 .../recipe-report.py render /tmp/report-spec.json /tmp/week-<DATE>.htmlpython3 .../recipe-report.py publish /tmp/week-<DATE>.html <DATE>(publish copies the page tocc-ci:/var/lib/cc-ci-reports/and regenerates the index.) -
Verify & stop.
curl -fsS https://report.ci.commoninternet.net/week-<DATE>.htmlrenders and the index lists it. Print the report URL andRECIPE REPORT COMPLETE, then go idle (one-shot — do not loop).
Guardrails
- Read-only. Never merge/edit/comment on PRs or touch recipes/tests. You only describe + link.
- Public-safe. No secrets/tokens/internal hostnames/raw logs on the page. Summarize errors.
- One page per run; always regenerate the index so all weeks are listed (newest first).