Generates an experiment-overview snapshot of all research questions under research/reports/. Invoke when a new point-in-time report across all RQs should be produced.
日本語の概要は準備中です。原文の説明を表示しています。
Re-run the analysis pipeline on all runs matching an RQ, reaggregate metrics, and propose findings updates against the fresh data. Trigger when the user says "reanalyze RQ-N", "reanalyse RQ-N", "Runs neu analysieren", or wants to refresh metrics/findings after a pipeline change (analyze-run.sh fix, adapter added, ESLint config).
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Re-run analyze-run.sh on every run matching an RQ selector, reaggregate via aggregate-by-query.py, and propose findings updates. No new runs are started — this skill only refreshes existing data.
Typical use cases:
RQ-N (e.g. RQ-prompt-known-kata) or a direct path to an RQ dir.research/questions-claude/<chapter>-*/, research/questions-opencode/<chapter>-*/, research/questions-cross/<chapter>-*/, and research/workflow-dev/<chapter>-*/. The chapter prefix is an ordering label; the stable id is the frontmatter id: (a slug like RQ-prompt-known-kata). Resolve it to a path by exact-line id-grep across all subtrees:
RQ_DIR=$(grep -rlE "^id:[[:space:]]*RQ-prompt-known-kata[[:space:]]*$" \
research/questions-claude/*/README.md \
research/questions-opencode/*/README.md \
research/questions-cross/*/README.md \
research/workflow-dev/*/README.md \
2>/dev/null | head -1 | xargs -r dirname)
Run sequentially. On errors in any phase, stop and ask the user, do not skip ahead.
$RQ_DIR via the id-grep in "Argument" above. On no match, ask the user; on multiple, take the first and inform.$RQ_DIR/README.md — parse frontmatter for controls and factors (needed to build the selector).experiments/runs/:
for d in experiments/runs/*/; do
jq -e 'select(
.kata == "<expected>" and
.workflow == "<expected>" and
(.model | test("<model-pattern>"))
)' "$d/metrics.json" > /dev/null 2>&1 && echo "$d"
done
The selector logic mirrors aggregate-by-query.py: kata = kata_base + "-" + prompt for each prompt value (from factors or controls), model from factors or controls, workflow from controls. Match against .kata, .workflow, .model in each run's metrics.json.Get user confirmation: "Reanalyze N runs? This re-runs analyze-run.sh on each (ESLint, verification, metrics extraction). Estimated time: ~N × 10s."
After "yes": reanalyze inside the container, never on the host:
./experiments/reanalyze-in-container.sh --rq "$RQ_DIR" # every run in runs.csv
./experiments/reanalyze-in-container.sh <run_dir> [<run_dir> ...] # a subset
The wrapper runs analyze-run.sh in docker-batch:latest with the same mounts the
batch uses, and pays container startup once for the whole set. It prints one line per
run and a final reanalyzed: N failed: M; a single failing run does not abort the rest.
Do not call ./experiments/analyze-run.sh directly on the host. The verification
stage shells out to the package manager, so a host pnpm that differs from the
Dockerfile pin (pnpm@9.15.9) makes the CLI never start: every scenario fails,
verification_pct is rewritten to 0, and the host pnpm mutates the run's
node_modules besides. The number that lands is plausible enough to survive review
and reads as a correctness collapse. analyze-run.sh now refuses to write in that
situation (it exits 3 and leaves metrics.json untouched), but the guard keys on
ERR_PNPM_ specifically — other environment drift (node major, ESLint resolution)
would still pass through silently. The container is the actual protection.
Reanalysis is compared against runs that were not reanalyzed, so the analysis environment has to match the batch environment exactly. That is the whole point.
Report: "Reanalyzed N runs."
Recompute cost_usd — mandatory after any reanalysis of pi runs, not optional.
analyze-run.sh reads cost_usd from transcript-metrics.json and writes it whenever it is
not null. For pi/Requesty runs that source holds 0 (pi's cost scaffold; Requesty reports
no inline cost), so the step above overwrites correct costs with zero — silently, with no
error. Restore them:
./experiments/compute-cost.py "$RQ_DIR"
Then verify: no cell may show cost_usd 0.00 at non-zero total_tokens. That combination is
impossible and means the step did not take.
If mutation_score is in the RQ's outcomes:, also run
./experiments/compute-mutation-score.py "$RQ_DIR" (expensive — minutes per run; only for
tests_passing = true).
./experiments/aggregate-by-query.py "$RQ_DIR"
summary.md.verification_pct or the first outcome in the frontmatter).Write directly to findings.md, then notify the user to review. Markdown tables and trophy assignments are much easier to evaluate as rendered output than as a chat proposal; reverting is cheap (it's only markdown). After writing, send one line (in the user's language), e.g. "written — please review", with a brief list of what changed (STALE / STATUS / NEW).
Exception: deletions of existing findings still require explicit user confirmation before the Edit — losing a documented finding is more expensive than re-reading a fresh write.
findings.md shows only the current state. No legacy comparisons, no "previously X" references, no "revised"/"confirmed" tags. Header form: ## F-x.y — Title (no trailing suffix). The namespace before the last dot may carry dots itself (F-4.4.1, F-1.12.5 are valid). Keep the em-dash —: the snapshot generator parses on it and drops non-matching headers silently.
Trophy convention (🏆) in overview tables: When refreshing the ## Overview table at the top of findings.md, append 🏆 to the best value per outcome row alongside the bolded winner. Metric direction matters — note it in the column header or row label (smell_total, complexity metrics → "lower = better"; refactorings_applied, predictions_correct_rate → "higher = better"). Award 🏆 only where the spread is meaningful — if all values lie within 1 σ and the framing is "no effect", either award 🏆 to all tied or to none, don't fabricate winners from rounding noise. Trophies are for findings docs only; workflow files stay emoji-free.
Read current findings.md and fresh summary.md.
For each existing finding (## F-x.y):
summary.md pivot tables.F-x.y: <metric> was <old>, now <new>.Check for NEW patterns not yet captured in findings:
F-x.y block.Apply the changes directly:
Edit. Rewrite the Datenbasis table and any prose that references the changed numbers. Do NOT add "previously X" or "corrected from" — just write the current state.--- separator.--- separator on confirmation.Verify every number you just wrote before reporting. Do not skip this — a wrong
number in a findings table is the most expensive kind of error here, because it looks
authoritative and gets quoted onward. Pull the written rows back out and diff them
against summary.md:
grep -n "<cell-name>" "$RQ_DIR/findings.md" | grep "|"
Check each value against the same metric in summary.md for this RQ.
The failure mode this catches: when several RQs are edited in sequence, values from a
different kata sit in context and get written from memory instead of looked up. Cell
names and metric names are identical across RQs — only the ranges differ, and a
foreign value is often plausible enough to survive proofreading. (Real case,
2026-08-04: cc_longest_function = 15.0 from the game-of-life RQ landed in the
claim-office RQ, where 21.4 was correct — wrong trophy, plus an interpretation
sentence built on the wrong figure.)
Two habits prevent it upstream: query metrics completely per RQ rather than
selectively (the gap appears when a table column is missing from the fresh extract),
and treat magnitude as a sanity anchor — claim-office is the large kata
(code_mass ~666, cycle_count ~47), game-of-life the small one (~144, ~15).
After verifying, send one short line summarizing what changed:
written — STALE: F-x.y, F-a.b · NEW: F-x.z · OK: F-c.d, F-e.f. Please review.
Discipline-metric comparability: if the RQ declares tdd_discipline or any of
its Skip-fed siblings (tdd_discipline_test_first, tdd_discipline_closure,
test_first_rate, skip_events, cycles_total, chain_deviations), check
whether its cells span the test-list boundary — aggregate-by-query.py warns and
names both groups. Those columns then measure the architecture rather than the
discipline, so they are reported within a group and never carry a trophy across
one. Full argument: README "Comparability: the test-list boundary".
Glossary discipline: use terms from the README glossary ("Code Mass (APP)", "Production LoC", "Correctness (external)", etc.) or metric IDs in backticks. Synonyms like "Code-Volumen" or "LoC-Größe" are forbidden.
| Aspect | /run-rq | /reanalyze |
|---|---|---|
| Starts new runs | Yes (Docker batch) | No |
| Calls analyze-run.sh | Only on new runs (inside container) | On ALL matching runs (inside container, via reanalyze-in-container.sh) |
| Aggregates | Yes | Yes |
| Proposes findings | Yes (Phase 6) | Yes (Phase 4) |
| Use case | Fill missing replicates | Refresh metrics after pipeline fix |
/run-rq for that)./build-overview).まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Generates an experiment-overview snapshot of all research questions under research/reports/. Invoke when a new point-in-time report across all RQs should be produced.
日本語の概要は準備中です。原文の説明を表示しています。
Mint a new YYYY-MM-DD-exact-coding-baseline snapshot under research/workflow-dev/export/. Detects the current best correctness- oriented workflow from research/workflow-dev/workflow-construction.md (or takes an explicit source-workflow argument) and transforms it from a lab workflow into a consumer-ready one on three axes: strips lab-only measurement content, re-enables human-in-the-loop checkpoints, and converts auto-loading config into an explicitly-invoked skill. Supports both promoted EXACT Coding lines: Opus/Hybrid and SOL/Predictive TDD. Exports Claude Code, pi, OpenCode, cursor-agent and, for SOL, Copilot. Trigger when the user says "exact-coding baseline export", "neue exact-coding baseline", "exact-coding-baseline-export", or asks to refresh the baseline snapshot.
日本語の概要は準備中です。原文の説明を表示しています。
TDD Green Phase - Implement minimal code to make the failing test pass
日本語の概要は準備中です。原文の説明を表示しています。
TDD Red Phase - Activate ONE test from the test list and make it fail with explicit predictions
日本語の概要は準備中です。原文の説明を表示しています。
TDD Refactor Phase - Improve code while keeping tests green using Simple Design Rules and APP mass
日本語の概要は準備中です。原文の説明を表示しています。
Use this skill to drive a research question (RQ) end-to-end: validate the RQ README, generate a fill batch-plan, start the Docker batch in the background, monitor progress, run aggregation, and propose findings updates. Trigger when the user says "RQ-N voranbringen", "run-rq", "fill RQ-N", "run RQ-N", "Forschungsfrage N starten", or names a specific RQ-N directory in research/.
日本語の概要は準備中です。原文の説明を表示しています。