Research Pipeline
Orchestrates the AgentSociety research workflow. Determines which skill to invoke based on the current workspace state and user intent.
Overview
The research pipeline is a revision-capable workflow: literature search → hypothesis → experiment config → run → analysis → paper, with explicit reroutes back to the smallest sufficient earlier stage. After a draft exists, paper-review can perform an optional robust author-side mock review using three parallel independent reviewers and a separate evidence-verifying MetaReview agent, then advise which earlier stage to revisit. The review remains read-only; the user or controlling coding agent closes the feedback loop by explicitly applying an accepted route through research-pipeline reroute. Supporting skills (scan-modules, create-agent, create-env-module, web-research, datasets) branch off the main trunk at specific points.
Scale Planning Gate
Before entering experiment-config, create-agent, or create-env-module, confirm the simulation scale budget:
- target agent count or range
- expected step budget
- acceptable runtime or compute budget
- preferred complexity tier, such as lean, balanced, or rich
If any of these are missing, ask one round of clarifying questions first. Present 2-3 approaches with trade-offs and a recommendation, then route into the appropriate skill once the budget is fixed.
Dataset Gate
If the task may depend on external data, treat dataset access as a first-class branch rather than an afterthought.
- Use
agentsociety-use-dataset to search, inspect, and download datasets from the platform.
- If no suitable dataset exists locally or remotely, surface that gap before continuing with experiment design.
- Use
agentsociety-create-dataset when the work needs packaging, validation, upload, or publishing of a dataset.
- If local files should be shared or reused, guide the user through dataset upload rather than folding the files into experiment config by hand.
Quick Reference
At the beginning of a new session or resumption, run:
$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline where-am-i --json
This reads .agentsociety/progress.json to determine the current stage. If the file does not exist, fall back to file-existence detection and then bootstrap tracking with init.
Git Checkpoint Discipline
Every pipeline transition must be persisted with an explicit git commit. Hook-based auto-commit approaches are unreliable — always commit manually.
Workspace Initialization
When bootstrapping a new workspace with research-pipeline init:
# 1. Init the workspace directory if not already a git repo
git init
# 2. Create progress tracking
$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline init --topic "TOPIC"
# 3. Initial commit
git add -A && git commit -m "init: bootstrap research pipeline"
Stage Transitions
After every call to research-pipeline update-stage, commit the current iteration's changes:
$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline update-stage STAGE STATUS
git add -A && git commit -m "pipeline: STAGE → STATUS"
For example:
$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline update-stage literature_search completed
git add -A && git commit -m "pipeline: literature_search → completed"
Apply an accepted review or analysis reroute with the same checkpoint discipline:
$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline reroute experiment_config \
--reason "MetaReview found that the control cannot identify the claimed effect" \
--source-artifact paper/reviews/acl-arr-review-r1.md
git add -A && git commit -m "pipeline: reroute to experiment_config"
Rules
- If
git is not initialized in the workspace, run git init first.
- Commit messages follow the pattern:
pipeline: STAGE → STATUS.
- Use
git add -A to capture all changes produced by the current stage.
- Do not rely on git hooks (pre-commit, post-commit, etc.) for this — they are unreliable in this context. Commit explicitly.
Entry Conditions
Use where-am-i --json whenever the current stage is unclear.
- If
.agentsociety/progress.json exists, trust current_stage as the primary routing signal.
- If the file is missing, infer the stage from workspace artifacts, then initialize progress tracking.
- If the current stage already has a failed status, route to the owning skill for repair rather than restarting the pipeline.
- If the current stage has
needs_revision, route to the owning skill with the active reroute reason and source artifact as required context.
- If the work depends on simulation size or runtime budget and those values are missing, resolve the scale planning gate before routing onward.
current_stage |
Route to Skill |
literature_search |
literature-search |
hypothesis |
hypothesis |
experiment_config |
experiment-config |
run_experiment |
run-experiment |
analysis |
analysis |
generate_paper |
paper-toolkit |
Post-paper review is routed by user intent rather than current_stage: when a complete draft exists and the user asks for an internal review, venue score, or revision-stage advice, invoke agentsociety-paper-review. For PDF input, prepare one frozen page-aware intake and pass the same text, layout, and page renders to every agent; stop when its quality gate fails. A normal result requires three isolated reviewer subagents running concurrently followed by a separately spawned MetaReview subagent. The review bundle is advisory and must not update .agentsociety/progress.json; only the user or controlling coding agent may subsequently accept a stage-valued reroute and call research-pipeline reroute.
Progress File Quick Reference
| Command |
Purpose |
$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline init --topic "TEXT" |
Bootstrap progress.json (also git init + initial commit if needed) |
$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline status |
Show progress summary |
$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline where-am-i --json |
Get current stage as JSON |
$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline update-stage STAGE STATUS |
Update stage status (then git add -A && git commit) |
$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline reroute STAGE --reason "TEXT" --source-artifact PATH |
Start an auditable revision round at the current or an earlier stage |
$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline set-verification STAGE STATUS |
Update stage verification status |
$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline next-action --json |
Get the recommended next action |
Workflow
digraph research_pipeline {
rankdir=LR;
node [shape=box, style=filled, fillcolor="#E8F4FD"];
decide [label="where-am-i"];
lit [label="literature-search"];
hypo [label="hypothesis"];
scan [label="scan-modules\noptional helper"];
exp [label="experiment-config"];
run [label="run-experiment"];
analysis [label="analysis"];
paper [label="paper-toolkit"];
review [label="paper-review\n3 reviewers + MetaReview"];
agent [label="create-agent"];
env [label="create-env-module"];
create_ds [label="create-dataset"];
use_ds [label="use-dataset"];
web [label="web-research"];
decide -> lit;
decide -> hypo;
decide -> exp;
decide -> run;
decide -> analysis;
decide -> paper;
lit -> hypo;
lit -> web [style=dashed, label="supplementary context"];
hypo -> scan [style=dashed, label="names uncertain"];
scan -> hypo;
hypo -> exp;
exp -> scan [style=dashed, label="need discovery or validation"];
scan -> exp;
exp -> agent [style=dashed, label="missing agent"];
agent -> exp;
exp -> env [style=dashed, label="missing env"];
env -> exp;
exp -> create_ds [style=dashed, label="publish dataset"];
exp -> use_ds [style=dashed, label="need external data"];
use_ds -> exp;
exp -> run;
run -> analysis;
analysis -> paper;
paper -> review [style=dashed, label="internal mock review"];
review -> lit [style=dashed, label="accepted reroute"];
review -> hypo [style=dashed, label="accepted reroute"];
review -> exp [style=dashed, label="accepted reroute"];
review -> run [style=dashed, label="accepted reroute"];
review -> analysis [style=dashed, label="accepted reroute"];
review -> paper [style=dashed, label="accepted reroute"];
analysis -> hypo [style=dashed, label="revise hypothesis"];
analysis -> use_ds [style=dashed, label="comparison data"];
analysis -> web [style=dashed, label="supplementary context"];
}
Pipeline Map
| # |
Skill |
Produces |
Consumes |
| 1 |
literature-search |
papers/, papers/literature_index.json |
TOPIC.md |
| 2 |
hypothesis |
hypothesis_{id}/HYPOTHESIS.md, SIM_SETTINGS.json |
literature index |
| 3 |
experiment-config |
init_config.json, steps.yaml, config_params.py |
SIM_SETTINGS.json |
| 4 |
run-experiment |
run/replay/_schema.json, sharded replay JSONL, run/output.log, run/artifacts/ |
init_config.json + steps.yaml |
| 5 |
analysis |
presentation/hypothesis_{id}/report.md, charts, data |
run/replay/ |
| 6 |
paper-toolkit |
paper deliverables |
analysis report + literature index |
| 7 (optional) |
paper-review |
frozen input manifest + 3 independent reviews under paper/reviews/<venue>-review-r<N>/; final paper/reviews/<venue>-review-r<N>.md MetaReview |
complete paper draft + selected evidence artifacts |
Branch Skills (called from trunk)
| Branch Skill |
Called By |
When |
| scan-modules |
hypothesis, experiment-config |
When module names are unknown or need validation |
| create-agent |
experiment-config |
When needed agent class doesn't exist |
| create-env-module |
experiment-config |
When needed env module doesn't exist |
| web-research |
literature-search, hypothesis, analysis |
When supplementary non-academic context needed |
| create-dataset |
experiment-config |
When packaging data for upload or publishing |
| use-dataset |
literature-search, hypothesis, experiment-config, analysis |
When searching, downloading, or inspecting datasets |
Skill Index
| Skill |
Trigger Keywords |
| literature-search |
"literature", "papers", "related work", "background research" |
| hypothesis |
"hypothesis", "research question", "control", "treatment", "experiment groups" |
| experiment-config |
"configure experiment", "init_config", "steps.yaml", "set up experiment" |
| run-experiment |
"run experiment", "start simulation", "check status", "stop experiment" |
| analysis |
"analyze", "results", "visualization", "chart", "report" |
| paper-toolkit |
"write paper", "academic paper", "generate paper", "Nature paper" |
| paper-review |
"review paper", "paper score", "mock review", "review feedback", "where should revision go" |
| scan-modules |
"available modules", "list agents", "find environment" |
| create-agent |
"create agent", "custom agent", "new agent type" |
| create-env-module |
"create environment", "custom module", "env module" |
| web-research |
"web search", "current events", "recent developments" |
| create-dataset |
"create dataset", "upload dataset", "publish data" |
| use-dataset |
"download dataset", "find data", "browse datasets", "search datasets", "dataset search" |
Iterative Cycles
- Analysis → Hypothesis: results may refine or revise the hypothesis
- Experiment-config → Create-agent/Create-env-module: missing modules trigger creation
- Experiment-config → Scan-modules: names can be confirmed when discovery is needed
- Run → Config: failed validation or execution loops back to config fixes
- Paper → Review → Earlier stage: paper-review emits advisory reroutes; the user or controlling coding agent decides whether to apply one with
research-pipeline reroute
reroute is the only supported backward transition. It:
- rejects forward jumps;
- increments
workspace.revision_round;
- changes the accepted target and already-completed downstream stages to
needs_revision without deleting artifacts;
- resets stale verification and stage metadata for those stages;
- records the reason, source artifact, previous stage-state snapshots, and invalidated stages in the append-only
transitions log;
- keeps
active_reroute until all invalidated stages are completed or explicitly skipped.
Do not apply human_decision or none as stages. Pause for accountable input on human_decision; leave pipeline state unchanged for none. When several review routes exist, apply the earliest accepted stage once—the normal forward flow will revisit its invalidated downstream stages.
Persistence Files
| File |
Git |
Purpose |
.agentsociety/progress.json |
Committable |
Stage tracker with status, revision round, active reroute, attempts, and append-only transition history |
Hard Constraints
- Never run analysis before
run-experiment produces run/replay/_schema.json
- Always run
experiment-config check before run-experiment
paper-toolkit requires analysis reports to exist
paper-review requires a complete draft, a passing shared PDF intake when applicable, and a valid 3-reviewer ensemble before MetaReview; it writes only the reserved review bundle and never updates pipeline stage or executes reroute advice
- Apply backward movement only through
research-pipeline reroute; do not edit current_stage or downstream statuses by hand
- Keep the controlling agent as the single writer of
progress.json; subagents return artifacts and must not perform pipeline transitions
- Always call
research-pipeline update-stage after completing a pipeline stage
- Always git commit after
research-pipeline update-stage — see Git Checkpoint Discipline
- On workspace init, run
git init (if needed) followed by an initial commit
- Do not rely on git hooks for auto-commit; commit explicitly after every stage transition
1---2name: agentsociety-research-pipeline3description: Use when starting or resuming an AgentSociety research workspace, deciding which research skill to invoke next, checking current pipeline state, or sizing a simulation before configuration and module creation.4---56# Research Pipeline78Orchestrates the AgentSociety research workflow. Determines which skill to invoke based on the current workspace state and user intent.910## Overview1112The research pipeline is a revision-capable workflow: **literature search → hypothesis → experiment config → run → analysis → paper**, with explicit reroutes back to the smallest sufficient earlier stage. After a draft exists, `paper-review` can perform an optional robust author-side mock review using three parallel independent reviewers and a separate evidence-verifying MetaReview agent, then advise which earlier stage to revisit. The review remains read-only; the user or controlling coding agent closes the feedback loop by explicitly applying an accepted route through `research-pipeline reroute`. Supporting skills (scan-modules, create-agent, create-env-module, web-research, datasets) branch off the main trunk at specific points.1314## Scale Planning Gate1516Before entering `experiment-config`, `create-agent`, or `create-env-module`, confirm the simulation scale budget:1718- target agent count or range19- expected step budget20- acceptable runtime or compute budget21- preferred complexity tier, such as lean, balanced, or rich2223If any of these are missing, ask one round of clarifying questions first. Present 2-3 approaches with trade-offs and a recommendation, then route into the appropriate skill once the budget is fixed.2425## Dataset Gate2627If the task may depend on external data, treat dataset access as a first-class branch rather than an afterthought.2829- Use `agentsociety-use-dataset` to search, inspect, and download datasets from the platform.30- If no suitable dataset exists locally or remotely, surface that gap before continuing with experiment design.31- Use `agentsociety-create-dataset` when the work needs packaging, validation, upload, or publishing of a dataset.32- If local files should be shared or reused, guide the user through dataset upload rather than folding the files into experiment config by hand.3334## Quick Reference3536At the beginning of a new session or resumption, run:3738```bash39$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline where-am-i --json40```4142This reads `.agentsociety/progress.json` to determine the current stage. If the file does not exist, fall back to file-existence detection and then bootstrap tracking with `init`.4344## Git Checkpoint Discipline4546Every pipeline transition must be persisted with an explicit git commit. Hook-based auto-commit approaches are unreliable — always commit manually.4748### Workspace Initialization4950When bootstrapping a new workspace with `research-pipeline init`:5152```bash53# 1. Init the workspace directory if not already a git repo54git init55# 2. Create progress tracking56$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline init --topic "TOPIC"57# 3. Initial commit58git add -A && git commit -m "init: bootstrap research pipeline"59```6061### Stage Transitions6263After **every** call to `research-pipeline update-stage`, commit the current iteration's changes:6465```bash66$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline update-stage STAGE STATUS67git add -A && git commit -m "pipeline: STAGE → STATUS"68```6970For example:7172```bash73$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline update-stage literature_search completed74git add -A && git commit -m "pipeline: literature_search → completed"75```7677Apply an accepted review or analysis reroute with the same checkpoint discipline:7879```bash80$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline reroute experiment_config \81 --reason "MetaReview found that the control cannot identify the claimed effect" \82 --source-artifact paper/reviews/acl-arr-review-r1.md83git add -A && git commit -m "pipeline: reroute to experiment_config"84```8586### Rules8788- If `git` is not initialized in the workspace, run `git init` first.89- Commit messages follow the pattern: `pipeline: STAGE → STATUS`.90- Use `git add -A` to capture all changes produced by the current stage.91- Do **not** rely on git hooks (pre-commit, post-commit, etc.) for this — they are unreliable in this context. Commit explicitly.9293## Entry Conditions9495Use `where-am-i --json` whenever the current stage is unclear.9697- If `.agentsociety/progress.json` exists, trust `current_stage` as the primary routing signal.98- If the file is missing, infer the stage from workspace artifacts, then initialize progress tracking.99- If the current stage already has a failed status, route to the owning skill for repair rather than restarting the pipeline.100- If the current stage has `needs_revision`, route to the owning skill with the active reroute reason and source artifact as required context.101- If the work depends on simulation size or runtime budget and those values are missing, resolve the scale planning gate before routing onward.102103| `current_stage` | Route to Skill |104|-----------------|----------------|105| `literature_search` | literature-search |106| `hypothesis` | hypothesis |107| `experiment_config` | experiment-config |108| `run_experiment` | run-experiment |109| `analysis` | analysis |110| `generate_paper` | paper-toolkit |111112Post-paper review is routed by user intent rather than `current_stage`: when a complete draft exists and the user asks for an internal review, venue score, or revision-stage advice, invoke `agentsociety-paper-review`. For PDF input, prepare one frozen page-aware intake and pass the same text, layout, and page renders to every agent; stop when its quality gate fails. A normal result requires three isolated reviewer subagents running concurrently followed by a separately spawned MetaReview subagent. The review bundle is advisory and must not update `.agentsociety/progress.json`; only the user or controlling coding agent may subsequently accept a stage-valued reroute and call `research-pipeline reroute`.113114### Progress File Quick Reference115116| Command | Purpose |117|---------|---------|118| `$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline init --topic "TEXT"` | Bootstrap `progress.json` (also `git init` + initial commit if needed) |119| `$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline status` | Show progress summary |120| `$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline where-am-i --json` | Get current stage as JSON |121| `$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline update-stage STAGE STATUS` | Update stage status (then `git add -A && git commit`) |122| `$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline reroute STAGE --reason "TEXT" --source-artifact PATH` | Start an auditable revision round at the current or an earlier stage |123| `$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline set-verification STAGE STATUS` | Update stage verification status |124| `$PYTHON_PATH .agentsociety/bin/ags.py research-pipeline next-action --json` | Get the recommended next action |125126## Workflow127128```dot129digraph research_pipeline {130 rankdir=LR;131 node [shape=box, style=filled, fillcolor="#E8F4FD"];132 decide [label="where-am-i"];133 lit [label="literature-search"];134 hypo [label="hypothesis"];135 scan [label="scan-modules\noptional helper"];136 exp [label="experiment-config"];137 run [label="run-experiment"];138 analysis [label="analysis"];139 paper [label="paper-toolkit"];140 review [label="paper-review\n3 reviewers + MetaReview"];141 agent [label="create-agent"];142 env [label="create-env-module"];143 create_ds [label="create-dataset"];144 use_ds [label="use-dataset"];145 web [label="web-research"];146147 decide -> lit;148 decide -> hypo;149 decide -> exp;150 decide -> run;151 decide -> analysis;152 decide -> paper;153154 lit -> hypo;155 lit -> web [style=dashed, label="supplementary context"];156 hypo -> scan [style=dashed, label="names uncertain"];157 scan -> hypo;158 hypo -> exp;159 exp -> scan [style=dashed, label="need discovery or validation"];160 scan -> exp;161 exp -> agent [style=dashed, label="missing agent"];162 agent -> exp;163 exp -> env [style=dashed, label="missing env"];164 env -> exp;165 exp -> create_ds [style=dashed, label="publish dataset"];166 exp -> use_ds [style=dashed, label="need external data"];167 use_ds -> exp;168 exp -> run;169 run -> analysis;170 analysis -> paper;171 paper -> review [style=dashed, label="internal mock review"];172 review -> lit [style=dashed, label="accepted reroute"];173 review -> hypo [style=dashed, label="accepted reroute"];174 review -> exp [style=dashed, label="accepted reroute"];175 review -> run [style=dashed, label="accepted reroute"];176 review -> analysis [style=dashed, label="accepted reroute"];177 review -> paper [style=dashed, label="accepted reroute"];178 analysis -> hypo [style=dashed, label="revise hypothesis"];179 analysis -> use_ds [style=dashed, label="comparison data"];180 analysis -> web [style=dashed, label="supplementary context"];181}182```183184## Pipeline Map185186| # | Skill | Produces | Consumes |187|---|-------|----------|----------|188| 1 | **literature-search** | `papers/`, `papers/literature_index.json` | `TOPIC.md` |189| 2 | **hypothesis** | `hypothesis_{id}/HYPOTHESIS.md`, `SIM_SETTINGS.json` | literature index |190| 3 | **experiment-config** | `init_config.json`, `steps.yaml`, `config_params.py` | `SIM_SETTINGS.json` |191| 4 | **run-experiment** | `run/replay/_schema.json`, sharded replay JSONL, `run/output.log`, `run/artifacts/` | `init_config.json` + `steps.yaml` |192| 5 | **analysis** | `presentation/hypothesis_{id}/report.md`, charts, data | `run/replay/` |193| 6 | **paper-toolkit** | paper deliverables | analysis report + literature index |194| 7 (optional) | **paper-review** | frozen input manifest + 3 independent reviews under `paper/reviews/<venue>-review-r<N>/`; final `paper/reviews/<venue>-review-r<N>.md` MetaReview | complete paper draft + selected evidence artifacts |195196### Branch Skills (called from trunk)197198| Branch Skill | Called By | When |199|-------------|-----------|------|200| **scan-modules** | hypothesis, experiment-config | When module names are unknown or need validation |201| **create-agent** | experiment-config | When needed agent class doesn't exist |202| **create-env-module** | experiment-config | When needed env module doesn't exist |203| **web-research** | literature-search, hypothesis, analysis | When supplementary non-academic context needed |204| **create-dataset** | experiment-config | When packaging data for upload or publishing |205| **use-dataset** | literature-search, hypothesis, experiment-config, analysis | When searching, downloading, or inspecting datasets |206207## Skill Index208209| Skill | Trigger Keywords |210|-------|-----------------|211| literature-search | "literature", "papers", "related work", "background research" |212| hypothesis | "hypothesis", "research question", "control", "treatment", "experiment groups" |213| experiment-config | "configure experiment", "init_config", "steps.yaml", "set up experiment" |214| run-experiment | "run experiment", "start simulation", "check status", "stop experiment" |215| analysis | "analyze", "results", "visualization", "chart", "report" |216| paper-toolkit | "write paper", "academic paper", "generate paper", "Nature paper" |217| paper-review | "review paper", "paper score", "mock review", "review feedback", "where should revision go" |218| scan-modules | "available modules", "list agents", "find environment" |219| create-agent | "create agent", "custom agent", "new agent type" |220| create-env-module | "create environment", "custom module", "env module" |221| web-research | "web search", "current events", "recent developments" |222| create-dataset | "create dataset", "upload dataset", "publish data" |223| use-dataset | "download dataset", "find data", "browse datasets", "search datasets", "dataset search" |224225## Iterative Cycles226227- **Analysis → Hypothesis**: results may refine or revise the hypothesis228- **Experiment-config → Create-agent/Create-env-module**: missing modules trigger creation229- **Experiment-config → Scan-modules**: names can be confirmed when discovery is needed230- **Run → Config**: failed validation or execution loops back to config fixes231- **Paper → Review → Earlier stage**: paper-review emits advisory reroutes; the user or controlling coding agent decides whether to apply one with `research-pipeline reroute`232233`reroute` is the only supported backward transition. It:2342351. rejects forward jumps;2362. increments `workspace.revision_round`;2373. changes the accepted target and already-completed downstream stages to `needs_revision` without deleting artifacts;2384. resets stale verification and stage metadata for those stages;2395. records the reason, source artifact, previous stage-state snapshots, and invalidated stages in the append-only `transitions` log;2406. keeps `active_reroute` until all invalidated stages are completed or explicitly skipped.241242Do not apply `human_decision` or `none` as stages. Pause for accountable input on `human_decision`; leave pipeline state unchanged for `none`. When several review routes exist, apply the earliest accepted stage once—the normal forward flow will revisit its invalidated downstream stages.243244## Persistence Files245246| File | Git | Purpose |247|------|-----|---------|248| `.agentsociety/progress.json` | Committable | Stage tracker with status, revision round, active reroute, attempts, and append-only transition history |249250## Hard Constraints251252- Never run analysis before `run-experiment` produces `run/replay/_schema.json`253- Always run `experiment-config check` before `run-experiment`254- `paper-toolkit` requires analysis reports to exist255- `paper-review` requires a complete draft, a passing shared PDF intake when applicable, and a valid 3-reviewer ensemble before MetaReview; it writes only the reserved review bundle and never updates pipeline stage or executes reroute advice256- Apply backward movement only through `research-pipeline reroute`; do not edit `current_stage` or downstream statuses by hand257- Keep the controlling agent as the single writer of `progress.json`; subagents return artifacts and must not perform pipeline transitions258- Always call `research-pipeline update-stage` after completing a pipeline stage259- Always git commit after `research-pipeline update-stage` — see **Git Checkpoint Discipline**260- On workspace init, run `git init` (if needed) followed by an initial commit261- Do not rely on git hooks for auto-commit; commit explicitly after every stage transition