Experiment Report
Use this skill to turn selected nn_cfd W&B runs into the project-standard
experiment comparison report. The canonical template is the W&B report
[DO NOT DELETE/EDIT] Template Experiment Comparison Report.
Workflow
- Identify the baseline run first. If the user did not provide it, ask for the
baseline run ID or run name before creating the report.
- Identify the experiment run IDs. Prefer exact run IDs over names, groups, or
regex searches.
- Query W&B summaries and configs with the W&B SDK. Use bounded metric keys;
do not scan broad histories unless the report needs a curve-specific claim.
- Read
references/template.md before making a report by hand. It records the
report width, runset settings, panel positions, plot axis limits, media
keys, and expected block order from the template.
- Prefer
scripts/create_experiment_report.py for consistency. It builds the
report from run IDs, validates the summary metrics needed by the table, and
recreates the template panel grid.
- Always publish the report. Do not leave experiment reports as W&B drafts.
- Name every report
[YYYY-MM-DD] NAME, where the date is the report's first
creation date. Preserve that date on later edits because the W&B Reports UI
shows the last modified date, not the original creation date.
Report Command
Run from the repo root:
uv run python .agents/skills/experiment-report/scripts/create_experiment_report.py \
--baseline_run_id a9300aedc8926440 \
--experiment_run_ids 854f115d43294ece qz4xm8cq ch930ho8 \
--title "cape domain residual variants"
Useful optional arguments:
--human_result: fills the TL;DR block. If absent, keep the template's human
placeholder.
--hypothesis: fills the hypothesis block. If absent, keep the template
placeholder.
--core_changes: describes the tested changes in Experiment Setup.
--pr_url: adds the PR link.
--report_date: pins the [YYYY-MM-DD] prefix when recreating or updating a
report whose first-created date is not today.
--created_at_max: adds the template-style CreatedTimestamp runset cap when
cloning a historical report snapshot. Prefer exact run IDs without this cap
for normal reports.
Report Standards
- Use
wandb_workspaces.reports.v2, not deprecated wandb.apis.reports.
- Use
width="fluid" so reports render full-width. The report builder must
force this width immediately before save/upsert and verify the saved report
model spec still has width="fluid"; do not silently accept W&B's default
readable width. Check Report.from_url(url, as_model=True).spec.width
because the hydrated Report object can fall back to its local default.
- Use
report.save(draft=False); this project does not keep hanging draft
experiment reports.
- Use report titles of the form
[YYYY-MM-DD] NAME. The script will add
today's date if --title omits the bracketed prefix.
- Filter the runset by exact run ID with
expr.Metric("name").isin(run_ids).
The W&B UI may display this as Metric("ID"), but the structured expression
should use lowercase name.
- Sort by
CreatedTimestamp ascending.
- Hide the
run:name column.
- Set
RunSettings(disabled=True) for the baseline by default, matching the
template's plot behavior, while still keeping the baseline in the markdown
results table.
- Use
wr.MarkdownBlock for tables and markdown headings. Do not put markdown
tables inside wr.P.
- In Experiment Setup, render
Input features and Targets as separate YAML
blocks. Never bury target fields inside an input/features block or say that
targets are "included above."
- Keep the Results table to two decimal places and include run links, run IDs,
and validation-set labels.
- In the Results table, every run name must be a plain markdown link to its W&B
run URL. Escape square brackets in run names before using them as link
labels, and do not rely on unlabeled IDs or placeholder text.
- State missing evidence plainly. Do not invent PR links, hypotheses, or human
final verdicts.
Resources
scripts/create_experiment_report.py: deterministic report builder for the
template.
references/template.md: exact template anatomy and panel layout.
1---2name: experiment-report3description: Create consistent nn_cfd W&B experiment comparison reports from selected run IDs using wandb and wandb_workspaces. Use this whenever the user asks to report experiment results, create a W&B Report, compare CFD training/eval runs, document baseline-vs-variant outcomes, reproduce the project experiment report template, or publish a leaderboard-style report for milieu/nn_cfd.4---56# Experiment Report78Use this skill to turn selected nn_cfd W&B runs into the project-standard9experiment comparison report. The canonical template is the W&B report10`[DO NOT DELETE/EDIT] Template Experiment Comparison Report`.1112## Workflow13141. Identify the baseline run first. If the user did not provide it, ask for the15 baseline run ID or run name before creating the report.162. Identify the experiment run IDs. Prefer exact run IDs over names, groups, or17 regex searches.183. Query W&B summaries and configs with the W&B SDK. Use bounded metric keys;19 do not scan broad histories unless the report needs a curve-specific claim.204. Read `references/template.md` before making a report by hand. It records the21 report width, runset settings, panel positions, plot axis limits, media22 keys, and expected block order from the template.235. Prefer `scripts/create_experiment_report.py` for consistency. It builds the24 report from run IDs, validates the summary metrics needed by the table, and25 recreates the template panel grid.266. Always publish the report. Do not leave experiment reports as W&B drafts.277. Name every report `[YYYY-MM-DD] NAME`, where the date is the report's first28 creation date. Preserve that date on later edits because the W&B Reports UI29 shows the last modified date, not the original creation date.3031## Report Command3233Run from the repo root:3435```bash36uv run python .agents/skills/experiment-report/scripts/create_experiment_report.py \37 --baseline_run_id a9300aedc8926440 \38 --experiment_run_ids 854f115d43294ece qz4xm8cq ch930ho8 \39 --title "cape domain residual variants"40```4142Useful optional arguments:4344- `--human_result`: fills the TL;DR block. If absent, keep the template's human45 placeholder.46- `--hypothesis`: fills the hypothesis block. If absent, keep the template47 placeholder.48- `--core_changes`: describes the tested changes in Experiment Setup.49- `--pr_url`: adds the PR link.50- `--report_date`: pins the `[YYYY-MM-DD]` prefix when recreating or updating a51 report whose first-created date is not today.52- `--created_at_max`: adds the template-style CreatedTimestamp runset cap when53 cloning a historical report snapshot. Prefer exact run IDs without this cap54 for normal reports.5556## Report Standards5758- Use `wandb_workspaces.reports.v2`, not deprecated `wandb.apis.reports`.59- Use `width="fluid"` so reports render full-width. The report builder must60 force this width immediately before save/upsert and verify the saved report61 model spec still has `width="fluid"`; do not silently accept W&B's default62 `readable` width. Check `Report.from_url(url, as_model=True).spec.width`63 because the hydrated `Report` object can fall back to its local default.64- Use `report.save(draft=False)`; this project does not keep hanging draft65 experiment reports.66- Use report titles of the form `[YYYY-MM-DD] NAME`. The script will add67 today's date if `--title` omits the bracketed prefix.68- Filter the runset by exact run ID with `expr.Metric("name").isin(run_ids)`.69 The W&B UI may display this as `Metric("ID")`, but the structured expression70 should use lowercase `name`.71- Sort by `CreatedTimestamp` ascending.72- Hide the `run:name` column.73- Set `RunSettings(disabled=True)` for the baseline by default, matching the74 template's plot behavior, while still keeping the baseline in the markdown75 results table.76- Use `wr.MarkdownBlock` for tables and markdown headings. Do not put markdown77 tables inside `wr.P`.78- In Experiment Setup, render `Input features` and `Targets` as separate YAML79 blocks. Never bury target fields inside an input/features block or say that80 targets are "included above."81- Keep the Results table to two decimal places and include run links, run IDs,82 and validation-set labels.83- In the Results table, every run name must be a plain markdown link to its W&B84 run URL. Escape square brackets in run names before using them as link85 labels, and do not rely on unlabeled IDs or placeholder text.86- State missing evidence plainly. Do not invent PR links, hypotheses, or human87 final verdicts.8889## Resources9091- `scripts/create_experiment_report.py`: deterministic report builder for the92 template.93- `references/template.md`: exact template anatomy and panel layout.