Issue forms
Three issue forms in .github/ISSUE_TEMPLATE/ fix the sections of every task and study body. guard, merge.py, the results command and the skills read bodies by their ### headings, so the heading names can’t change.
Sources: study.yml, code.yml, run.yml.
Overview
Section titled “Overview”| Form | Form name | Label | Sections, in order |
|---|---|---|---|
study.yml |
研究 | study |
Question, Arms, Controlled, Adaptable, Criteria, Budget, Context |
code.yml |
代码任务 | code |
Goal, Scope, Acceptance, Budget, Merge |
run.yml |
运行任务 | run |
Runs, Budget, Report |
A development parent, labelled plan, has no form; its body has ### Goal and ### Context. Agents write bodies with these exact sections and set parents and dependencies with gh issue create --parent P --blocked-by M, never in the body. The forms’ descriptions are in Chinese, the language of CVSM’s own human-facing text.
A research question, answered by code and run sub-issues. Arms, Controlled and Adaptable are the spec every run is checked against.
| Section | Field | Required | Format |
|---|---|---|---|
### Question |
textarea | yes | The question the study answers. |
### Arms |
textarea | yes | One arm per line: <arm>: <key>=<value> [<key>=<value> ...]. Only the settings in which the arms differ, e.g. lora: model.adapter=lora model.lora.rank=8. |
### Controlled |
textarea | yes | One setting per line, reason required: <key>=<value> # <reason> (every run takes this value) or <key> in <v1>,<v2>,... # <reason> (every arm runs every value, e.g. seeds and tuning grids). |
### Adaptable |
textarea | no | One per line: <key> # <rule>. Engineering settings that may differ between runs and be changed within their rule, e.g. train.per_device_batch. May be empty. |
### Criteria |
textarea | yes | What result answers the question. |
### Budget |
input | no | GPU hours and time, e.g. 4 GPU hours, 1 day. |
### Context |
textarea | no | Links to related studies, results comments and papers. |
Spec line rules, as results.py reads them:
- One item per line; any line may end with
# <comment>(whitespace before#). - Keys are the dotted keys of the run’s
config.json. A key appears in one section at most. - Values that parse as JSON (numbers,
true/false/null, lists) compare as JSON, so1and1.0are equal; others compare as strings. invalues are split on commas outside brackets, so a value may be a JSON list.- The Controlled description lists the usual confounders to cover: data and split, preprocessing and augmentation, model and init, optimizer and schedule, effective batch and training length, precision, tuning budget, evaluation protocol and checkpoint selection, seeds.
One code or file change, limited to a fixed Scope.
| Section | Field | Required | Format | Read by |
|---|---|---|---|---|
### Goal |
textarea | yes | At most 3 sentences; the outcome, not the steps. | implement, review |
### Scope |
textarea | yes | Path globs, one per line, none starting with a wildcard. | guard |
### Acceptance |
textarea | yes | Commands, one per line, run from the repo root. | implement, review |
### Budget |
input | no | Time, e.g. 2h. |
implement |
### Merge |
dropdown | default human |
human: the human merges. agent: the agent merges with merge.py after a passing review. A PR that touches a protected path is always merged by the human. |
merge.py |
guard reads Scope lines with a leading - or * and backticks stripped, and ignores _No response_. Globs use ** (crosses /), * and ? (don’t); every other character is literal.
A set of experiment runs, whose results are posted as one comment.
| Section | Field | Required | Format |
|---|---|---|---|
### Runs |
textarea | yes | One command per line, with its config overrides and seed. With Run-command options, <options> -- <cmd>, e.g. --gpus 4 -- python train.py seed=1. |
### Budget |
input | no | GPU hours, e.g. 2. |
### Report |
input | no | Metric names, space-separated; passed to the results command as --metric. |
Each Runs line runs one arm. Each arm an issue runs gets every value of each Controlled in line, and the study’s run issues together run every arm.