> Core 中立版(Increment 2 改写)。术语对照见 core/adapters/TERMINOLOGY.md;本组织实例表述见 dogfood 对应文件。 ## Auto-approve stages The `auto_approve` block in the instance config controls which pipeline gates the agent passes without asking the user. Stage identifiers are matched against the stage registry (harness 内建的阶段注册模块). Unknown or retired identifiers fall back to manual confirmation (fail-closed) with a one-time `auto_approve.unknown_stage` warning — copy ids verbatim from the table below. ## Scope boundary: `auto_approve` vs `permission` Two **independent mechanisms** — confusing them is the most common "auto-approve isn't working" report: - **`auto_approve`** gates **only the `question` tool** (pipeline decision questions; the harness 内建的自动批准判定模块); no effect on tool execution. - **`permission`** gates **tool / file-system operations** (`bash`, `read`, `write`, `external_directory`, …) and **never consults `auto_approve`**. `external_directory` defaults to ask, so outside-project prompts are expected even with every stage enabled. **`auto_approve` does NOT suppress permission prompts — intentionally so.** To stop a permission prompt, change the matching `permission` rule or use the UI's "auto-accept permissions" toggle (browser-local, not the project `auto_approve` config). | Stage | Gate | Risk | | --------------- | ---------------------------- | -------------------------------------------- | | `review-dag` | DAG single-gate review | Medium — sets direction | | `review-code` | Code review | Medium — gates what reaches main | | `verify` | Iteration verification | Medium — runs tests / DoD matrix | | `audit-process` | Process infrastructure audit | Medium — read-only but gates process changes | | `merge-pr` | Create PR + merge to main | High — irreversible landing | > Risk values mirror the stage registry's `BUILTIN_STAGES[].risk` — the > registry is the runtime authority; if this table and the registry disagree, > fix this table. `merge-pr` is excluded from default/preset `stages` arrays > (not structurally blocked; explicitly adding it is not recommended). > Legacy stage retirement (12 → 5): the phase-3 retirement ruling doc > (Tier-2 reference, reachable via the ticket backend). Config shape: `"auto_approve": { "stages": ["review-code", "verify"], "stageless": false }` — `stages` empty (`[]`) = all manual; `stageless: true` also auto-approves questions called without a stage. Absent block defaults to `{ stages: ["review-code", "verify", "audit-process"], stageless: false }`; the removed `enabled` field migrates on load (mapping: Tier-2 reference page `rules/auto-approve-detail`). Presets (`safe`/`full`/`off`/`show`): same reference page — `full` never includes `merge-pr`. ### Stage matching behavior - Question has a stage → auto-approved iff that stage is in `stages`. - Stageless question → auto-approved iff `stageless: true`; otherwise prompts. - `destructive: true` → ALWAYS prompts, regardless of config — the safety net for irreversible actions; business-decision questions are never covered by a stage whitelist (§"Mandatory destructive list"). Check logic: the harness 内建的问询与自动批准判定模块 (resolveAutoApproveDecision). ### Live-gate degradation chain ([org-internal #3531]) An auto-approved question is NOT consumed instantly: L1 — a live human watching the session (SSE declaration / fresh presence ping) answers within `question_live_gate.timeout_sec` (default 600) and overrides the default; L2 — blocking questions with a `#` title and a ticket-backend token fall back to a ticket comment answered as `**answer **