One command that reproduces the 2026-09-08 DeepSWE analysis on a new week's results. Everything numeric is recomputed from the trials; nothing is copied from a previous week.
Inputs
repo— the analysis checkout, default/w/seungpil.lee/deepswe(harbor 0.22,.venv,deepswe/package,refresh.sh).week— meeting idYYYY-MM-DD. Data goes tosite/weeks/<week>/, prose todocs/weeks/<week>/.jobs— harbor job dirs for this week (jobs/<name>/<task>__<trial>/). Trials from other scaffolds or benchmarks are fine as long ascollect.pyhas an adapter for them (see "Adapters").- Optional:
--sample-wins N(judge only N passing trials per model; default all),--crosscheck N(default 30).
Procedure — run every step, in order, and do not stop early
- Briefs —
scripts/pipeline.sh <repo> <week> briefs <jobs...>Writesjobs/analysis-briefs/<id>.mdfor failed trials (task statement, reference patch, model patch, failing tests, the FULL transcript with[call N]markers) andjobs/analysis-wins/<id>.mdfor passing ones.jobs/analysis-briefs/pending.jsonlists ids that still need a verdict. - Failure verdicts — launch the Workflow in
references/workflows/1-failure-judge.jswithargs= pending ids, orargs={"file": "<path to a one-id-per-line text file>", "count": N}when the list is long: each agent reads only its own line withsed, so no id list passes through any context. Do not try to have an agent echo the list back — 1,800 ids exceeds the output cap. One Sonnet agent per trial,effort: high. Judge every failed trial — do not sample — unless the user asks for a sample. The agent must read the whole brief in chunks and writejobs/analysis/<id>.jsonwith the 13-key schema in that script. Prefix every prompt with "Do this work YOURSELF. Do not spawn sub-agents." — without it Sonnet delegates and writes nothing. - Validate —
scripts/pipeline.sh <repo> <week> validate. Removes verdicts that fail the schema or the self-consistency rules indeepswe/analyze.py(inconsistency()); re-run step 2 for the removed ids. - Taxonomy relabel — Workflow
references/workflows/2-taxonomy-relabel.js. Adds thetaxonomyblock (root cause / phase / post-failure behaviour, definitions inreferences/taxonomy.md, provenance arXiv 2607.09510 and 2509.13941). Labels come from the verdict evidence; keepconfidence. - Success verdicts + contrast pairs — Workflow
references/workflows/3-winners-contrast.js. Success judges MUST carry the calibration line "passing does NOT prove the requirements were met" (without it every trial came back 100% covered). Contrast pairs: same model, same repo or task, one pass one fail, judged by Sonnet withdecisive_factorin {approach_differed, verification_differed, task_was_harder, luck}. - Agreement check — a second, blind Sonnet agent re-judges
--crosschecktrials independently on the three taxonomy axes (same model family, separate context, no access to the first verdict); compute Cohen's kappa per axis. Report all three. If root-cause kappa < 0.6, stop and tell the user before publishing; do not silently proceed. - Collect + deploy —
scripts/pipeline.sh <repo> <week> collect <jobs...>then... deploy <jobs...>.collect --weekwritessite/weeks/<week>/{trials,meta}.json,traj/, and the headline entry insite/weeks.json(the meetings home reads only that file). - Weekly table — write
docs/weeks/<week>/summary.md(three sentences, insight first) andnotes.mdwith: pass-rate table vs leaderboard, root-cause / phase distribution with the change from the previous week, contrast decisive-factor split, kappa row, incidents, decisions needed. Numbers only fromsite/weeks/<week>/trials.json. Thenbash refresh.sh <week>once more so the home card picks up the summary.
Adapters (extend before running a new scaffold or benchmark)
deepswe/collect.py assumes mini-swe-agent trajectories (messages with one shell command per turn)
and DeepSWE task metadata (task.toml → language, category, gold patch under solution/).
For a new scaffold add a turns_from_* reader that yields the same (turn, think, calls[phase,cmd,out])
shape and tag each trial with scaffold; for a new benchmark add a task_meta reader and tag benchmark.
The viewer filters and the findings cards work off those fields unchanged.
Guard rails learned the hard way
- Never run
collectwith a subset of job dirs into an existing week folder: it overwritestrials.json. - Judges see the outcome; failure-side and success-side prompts both need the calibration warning.
post_failure_behaviourhad kappa 0.29 when labelled from extracted evidence instead of the raw transcript; treat it as reference-only unless relabelled from the full transcript.- Duplicate (task, model) trials (smoke + full) must be marked
superseded, or per-model counts drift. - Do not
grepsite/index.html; some tools treat it as binary and return nothing. Use Python.
Output the skill returns to the caller
A markdown block: per-model pass rate, root-cause family split, phase split, contrast split, kappa per
axis, count of trials judged / removed / re-judged, site URL for ?week=<week>, and the open decisions.