If any required file above was not expanded into context by the host, or its content is no longer in context, Read it explicitly before executing any step.
Mode selection precedence: explicit --mode <name> > intent keyword auto-detection > request_user_input (Normal) / error E000 (-y).
Auto-detection from <intent> keywords (first match wins, ordered):
Keyword matching: case-insensitive substring match against the intent text. Multi-word keywords require all words present (not necessarily adjacent). First matching row wins (ordered by specificity).
| Keywords in intent |
Detected mode |
| bug, crash, error, broken, fails, regression, race, leak, "why does" |
debug |
| requirement, implement, build, add feature, I need to implement, I need to build, I need to add, deliver feature, user story |
planex |
| ui, visual, layout, style, component, page, responsive, a11y, accessibility, UI design, visual design, design system, design tokens |
ui |
| security audit, OWASP, vulnerability, CVE, secrets scan, STRIDE, threat model, supply chain, dependency audit, dependencies, supply chain audit |
security |
| defensive programming, defensive code, exception swallowing, silent failure, fallback risk, default value risk, error suppression, 防御性编程, 防御性代码, 异常吞噬, 兜底风险 |
defensive |
| improve, optimize, performance, refactor quality, reliability, observability |
improve |
| review, audit, code check, check the code, inspect the code, inspect changes, "look over", zero-residual |
review |
Ambiguous / no match → Normal: request_user_input (7-way mode pick) | -y: E000.
Mode registry:
| Mode |
Purpose |
Discovery phases |
Audit phase |
Fix→verify pair |
Unique states |
debug |
Symptom → root cause → fix → confirm |
ARCHAEOLOGY, EXPLORE |
DIAGNOSE (hypothesis test) |
FIX → CONFIRM |
ESCALATE_DIAGNOSIS |
improve |
6-dimension quality audit → diagnose → fix |
SURVEY |
AUDIT (6 dims) + DIAGNOSE |
FIX → VERIFY |
ESCALATE_DIAGNOSIS |
planex |
Requirement → plan → execute → verify loop |
(none) |
PLAN + EXECUTE |
(EXECUTE) → VERIFY → FIX loop |
— |
review |
Multi-dimension deep review → zero-residual fix |
ARCHAEOLOGY, EXPLORE |
REVIEW (4+ dims) |
FIX → CONFIRM |
— |
security |
Read-only tiered security audit → severity matrix |
RECON |
SCAN (OWASP + deps + secrets + CI/CD + STRIDE + git) |
(none — read-only) |
— |
defensive |
Business-anchor → backward-slice → 8-pattern scan → forward-propagate → risk score |
ANCHOR, SLICE |
SCAN (8 defensive patterns) + PROPAGATE |
(none — read-only) |
— |
ui |
Visual survey → 6-dim audit → diverge → fix |
SURVEY |
AUDIT (6 dims) + DIVERGE |
FIX → VERIFY |
— |
CONFIRM and VERIFY are synonymous — both refer to the post-fix validation phase. Mode workflow files use mode-specific naming; semantics are identical.
The back half is identical across all modes: GENERALIZE → DISCOVER → RECORD → END (see odyssey-base.md §Shared Back-Half).
On mode resolved: read the deferred workflow file for that mode + odyssey-base.md, then execute.
Universal flags: --mode <name> mode selector | --skip-fix audit/diagnose only, skip fix+verify | --skip-generalize skip GENERALIZE+DISCOVER | -y skip all confirmation interactions (including delegate/agent confirmations in execution phases), use default choices; decisions skipped this way are recorded as deferred; never bypasses mode ambiguity (E000), INTAKE gate blockers, escalation | -c resume the most recent unfinished Session of the SAME mode via exact Session resolution: locate it with maestro session list --json + maestro session status --session {session_id} --json (both read-only), re-attach context with maestro session resume-view and the brief-result/3.0 Resume Packet via run brief (exact invocation per run-mode.md), then continue the chain with fenced maestro run next / run check / run complete --advance. If --mode conflicts with the resumed Session's mode → E003 (mode mismatch); no history → ignore -c, create new Session | --heartbeat /loop periodic progress
Mode-scoped flags:
| Flag |
Modes |
Description |
Default |
--template <name> |
debug, planex |
Predefined strategy/criteria template |
— |
--dimensions <list> |
improve, review, ui |
Audit dimension subset |
all |
--fix-threshold <sev> |
improve, review, ui |
Severity cutoff (critical|high|medium|low|all) |
all |
--tier quick|standard|deep |
security, defensive |
Audit depth tier |
standard |
--sink-depth <list> |
defensive |
Explicit sink layer focus (1|2|3|all) |
all |
--max-iterations N |
planex |
Max verify-fix cycles before escalation |
3 |
--method agent|cli|auto |
planex |
Task execution method |
auto |
--executor <tool> |
planex |
Explicit CLI executor |
first enabled |
--skip-verify |
planex |
Skip post-execution validation gate |
false |
--skip-fix applicability: security and defensive modes ignore (read-only, no fix phase); planex skips FIX loop but retains EXECUTE+VERIFY; debug/review/improve/ui skip FIX+VERIFY/CONFIRM. --skip-fix + --skip-verify on planex = PLAN only (no execution).
Mode-scoped flags passed to inapplicable mode: emit W008 warning and ignore the flag.
Session creation: follow run-mode.md exactly. Negotiate capabilities, then use the receipt-chained self-start path: open an empty Session with participant == actor and a unique open request ID, insert odyssey-<mode> plus every mode/domain argument through fenced repeatable --arg, and dispatch it with fenced run next using a third request ID. Every mutation consumes the exact revision returned by the preceding receipt. Consume the resulting birth packet's resolved task and structured executable continuation; never pass task prose via --input. A direct machine-protocol run create is allowed only with positional domain arguments, explicit --session/--run/--step, identical participant/actor values, request ID/reason, exact CAS revision, and --input values restricted to sealed same-Session Artifact IDs.
Session: {run_dir}/outputs/
Output: session.json | evidence.ndjson | understanding.md | explore.json (debug/review only) | anchors.json (defensive only)
Output boundary: ALL session artifacts MUST target the run outputs directory ({run_dir}/outputs/) only. .workflow/state.json and all sessions/<sid>/ protocol files are runtime-owned — a workflow never writes them. Source code modifications during fix/execute phases are in-scope but MUST be committed per action. NEVER write session artifacts outside {run_dir}/outputs/.
session.json — shared core + mode fields:
{ "mode": "debug|improve|planex|review|security|defensive|ui",
"target": "", "dimensions": [],
"patterns": [], "confirmation": null, "generalization_stats": null,
"cross_phase_loops": 0 }
Each mode extends the core — see the mode's workflow file for session fields.
Commit convention: "odyssey-{mode}({slug}): {STATE} — {summary}" (mode = active mode short name; review mode uses odyssey-review).
- Evidence append-only — never delete or overwrite evidence.ndjson entries.
- Phase goal tracking — mark each goal done/failed before transition; no silent skips.
- Generalize is mandatory — GENERALIZE and DISCOVER execute unless
skip_generalize == true. Prior-phase convergence, "no findings / all verified / zero remaining," or context pressure are NOT valid skip reasons. The phase itself determines whether patterns exist.
- Zero-residual (improve/review/ui) — every finding MUST have a concrete action (fix / issue / decision). "Report and shelve" and blanket "pre-existing" skips are forbidden.
- Read-only (security, defensive) — NEVER modify source code, configuration, or dependencies. Security and defensive audits produce reports only; fixes route to
--mode improve.
- Acceptance criteria are sacred (planex) — no "close enough", no manual override without explicit escalation.
- Browser is truth (ui) — verify in real rendering, not just code review. Diverge before converge.
- Goal 跟宿主原生 /goal 走 — session.json 是权威进度。不要为了刷新外观去重建 Goal;用户 clear 之后外观必须保持消失。
时机与操作(plan 是 session 权威状态的 UI 镜像,不替代 session 状态):
| 时机 |
操作 |
示例 |
| Session 创建后 |
update_plan 初始化步骤清单 |
update_plan({ plan: [{ step: "Step {index}: {step.skill}", status: "pending" }, ...] }) |
| Step 派发时 |
update_plan 标记当前 step |
update_plan({ plan: [..., 当前 step status: "in_progress"] }) |
| Step 完成时 |
update_plan 标记完成 |
update_plan({ plan: [..., 该 step status: "completed"] }) |
| Step 失败时 |
update_plan + explanation 说明 |
update_plan({ explanation: "Step {index} failed: {reason}", plan: [...] }) |
| Mode |
Self-iterating stages |
| debug |
S_ARCHAEOLOGY, S_EXPLORE, S_DIAGNOSE, S_GENERALIZE |
| improve |
S_SURVEY, S_AUDIT, S_DIAGNOSE, S_GENERALIZE |
| planex |
S_PLAN, S_VERIFY, S_GENERALIZE |
| review |
S_ARCHAEOLOGY, S_EXPLORE, S_REVIEW, S_FIX, S_GENERALIZE |
| security |
S_RECON, S_SCAN, S_GENERALIZE |
| defensive |
S_ANCHOR, S_SLICE, S_SCAN, S_PROPAGATE, S_GENERALIZE |
| ui |
S_SURVEY, S_AUDIT, S_DIVERGE, S_GENERALIZE |
|
|
Shared Phase Gates (MANDATORY, BLOCKING)
- INTAKE gate: mode resolved, target/requirement resolved, SESSION_DIR created, session.json initialized (with baseline_metrics for improve; acceptance_criteria for planex), phase_goals[] derived from flags, understanding.md §1 written. BLOCKED if no target (E001) / no requirement (planex E001) / target path not found (E002) / mode unresolved (E000).
- GENERALIZE gate: ALL 3 layers (syntax/semantic/structural) attempted with evidence logged; generalization_stats written with by_layer entries for all 3 layers; generalize goal marked. Any layer not attempted = thoroughness-floor violation (BLOCKED).
- DISCOVER gate: all hits triaged with per-item classification and reason;
remaining_actionable == 0 OR loops >= max_loops with per-item reasons logged; discover goal marked. Unclassified hits = BLOCKED.
Mode-specific phase gates (Discovery, Audit, FIX, VERIFY/CONFIRM) are defined in each mode's workflow file.
1---2name: maestro-odyssey3description: Long-running iterative cycle — one entry, seven modes (debug|improve|planex|review|security|defensive|ui). Shared archaeology/audit → fix → verify → generalize → discover → persist skeleton with mode-specific dimensions. User-invoked campaign entry; single-step fixes route via /maestro-next4---56<required_reading>7@~/.maestro/workflows/run-mode.md8@~/.maestro/workflows/codex-run-mode.md9</required_reading>1011If any required file above was not expanded into context by the host, or its content is no longer in context, Read it explicitly before executing any step.1213<deferred_reading>14- [odyssey-base.md](~/.maestro/workflows/odyssey-base.md) — read after mode resolved for shared back-half (INTAKE gate → GENERALIZE → DISCOVER → RECORD → END)15- [odyssey-debug.md](~/.maestro/workflows/odyssey-debug.md) — read when mode=debug16- [odyssey-improve.md](~/.maestro/workflows/odyssey-improve.md) — read when mode=improve17- [odyssey-planex.md](~/.maestro/workflows/odyssey-planex.md) — read when mode=planex18- [odyssey-review.md](~/.maestro/workflows/odyssey-review.md) — read when mode=review19- [odyssey-security.md](~/.maestro/workflows/odyssey-security.md) — read when mode=security20- [odyssey-defensive.md](~/.maestro/workflows/odyssey-defensive.md) — read when mode=defensive21- [odyssey-ui.md](~/.maestro/workflows/odyssey-ui.md) — read when mode=ui22</deferred_reading>2324<purpose>25Long-running, evidence-driven iterative cycle. A single entry dispatches to one of seven modes; all share the same26skeleton — discovery → domain audit → fix → verify → generalize → discover siblings → persist knowledge —27and iterate exhaustively until the mode's exit condition is met or escalation is required.28</purpose>2930<mode_dispatch>3132**Mode selection precedence:** explicit `--mode <name>` > intent keyword auto-detection > request_user_input (Normal) / error E000 (`-y`).3334**Auto-detection from `<intent>` keywords** (first match wins, ordered):3536Keyword matching: case-insensitive substring match against the intent text. Multi-word keywords require all words present (not necessarily adjacent). First matching row wins (ordered by specificity).3738| Keywords in intent | Detected mode |39|--------------------|---------------|40| bug, crash, error, broken, fails, regression, race, leak, "why does" | `debug` |41| requirement, implement, build, add feature, I need to implement, I need to build, I need to add, deliver feature, user story | `planex` |42| ui, visual, layout, style, component, page, responsive, a11y, accessibility, UI design, visual design, design system, design tokens | `ui` |43| security audit, OWASP, vulnerability, CVE, secrets scan, STRIDE, threat model, supply chain, dependency audit, dependencies, supply chain audit | `security` |44| defensive programming, defensive code, exception swallowing, silent failure, fallback risk, default value risk, error suppression, 防御性编程, 防御性代码, 异常吞噬, 兜底风险 | `defensive` |45| improve, optimize, performance, refactor quality, reliability, observability | `improve` |46| review, audit, code check, check the code, inspect the code, inspect changes, "look over", zero-residual | `review` |4748Ambiguous / no match → Normal: request_user_input (7-way mode pick) | `-y`: E000.4950**Mode registry:**5152| Mode | Purpose | Discovery phases | Audit phase | Fix→verify pair | Unique states |53|------|---------|------------------|-------------|-----------------|---------------|54| `debug` | Symptom → root cause → fix → confirm | ARCHAEOLOGY, EXPLORE | DIAGNOSE (hypothesis test) | FIX → CONFIRM | ESCALATE_DIAGNOSIS |55| `improve` | 6-dimension quality audit → diagnose → fix | SURVEY | AUDIT (6 dims) + DIAGNOSE | FIX → VERIFY | ESCALATE_DIAGNOSIS |56| `planex` | Requirement → plan → execute → verify loop | (none) | PLAN + EXECUTE | (EXECUTE) → VERIFY → FIX loop | — |57| `review` | Multi-dimension deep review → zero-residual fix | ARCHAEOLOGY, EXPLORE | REVIEW (4+ dims) | FIX → CONFIRM | — |58| `security` | Read-only tiered security audit → severity matrix | RECON | SCAN (OWASP + deps + secrets + CI/CD + STRIDE + git) | (none — read-only) | — |59| `defensive` | Business-anchor → backward-slice → 8-pattern scan → forward-propagate → risk score | ANCHOR, SLICE | SCAN (8 defensive patterns) + PROPAGATE | (none — read-only) | — |60| `ui` | Visual survey → 6-dim audit → diverge → fix | SURVEY | AUDIT (6 dims) + DIVERGE | FIX → VERIFY | — |6162CONFIRM and VERIFY are synonymous — both refer to the post-fix validation phase. Mode workflow files use mode-specific naming; semantics are identical.6364The **back half is identical across all modes**: `GENERALIZE → DISCOVER → RECORD → END` (see odyssey-base.md §Shared Back-Half).6566On mode resolved: read the deferred workflow file for that mode + odyssey-base.md, then execute.6768</mode_dispatch>6970<context>71$ARGUMENTS7273**Universal flags:** `--mode <name>` mode selector | `--skip-fix` audit/diagnose only, skip fix+verify | `--skip-generalize` skip GENERALIZE+DISCOVER | `-y` skip all confirmation interactions (including delegate/agent confirmations in execution phases), use default choices; decisions skipped this way are recorded as `deferred`; never bypasses mode ambiguity (E000), INTAKE gate blockers, escalation | `-c` resume the most recent unfinished Session of the SAME mode via exact Session resolution: locate it with `maestro session list --json` + `maestro session status --session {session_id} --json` (both read-only), re-attach context with `maestro session resume-view` and the `brief-result/3.0` Resume Packet via `run brief` (exact invocation per run-mode.md), then continue the chain with fenced `maestro run next` / `run check` / `run complete --advance`. If `--mode` conflicts with the resumed Session's mode → E003 (mode mismatch); no history → ignore -c, create new Session | `--heartbeat` /loop periodic progress7475**Mode-scoped flags:**7677| Flag | Modes | Description | Default |78|------|-------|-------------|---------|79| `--template <name>` | debug, planex | Predefined strategy/criteria template | — |80| `--dimensions <list>` | improve, review, ui | Audit dimension subset | all |81| `--fix-threshold <sev>` | improve, review, ui | Severity cutoff (critical\|high\|medium\|low\|all) | all |82| `--tier quick\|standard\|deep` | security, defensive | Audit depth tier | standard |83| `--sink-depth <list>` | defensive | Explicit sink layer focus (1\|2\|3\|all) | all |84| `--max-iterations N` | planex | Max verify-fix cycles before escalation | 3 |85| `--method agent\|cli\|auto` | planex | Task execution method | auto |86| `--executor <tool>` | planex | Explicit CLI executor | first enabled |87| `--skip-verify` | planex | Skip post-execution validation gate | false |8889`--skip-fix` applicability: security and defensive modes ignore (read-only, no fix phase); planex skips FIX loop but retains EXECUTE+VERIFY; debug/review/improve/ui skip FIX+VERIFY/CONFIRM. `--skip-fix` + `--skip-verify` on planex = PLAN only (no execution).9091Mode-scoped flags passed to inapplicable mode: emit W008 warning and ignore the flag.9293**Session creation**: follow `run-mode.md` exactly. Negotiate capabilities, then use the receipt-chained self-start path: open an empty Session with `participant == actor` and a unique open request ID, insert `odyssey-<mode>` plus every mode/domain argument through fenced repeatable `--arg`, and dispatch it with fenced `run next` using a third request ID. Every mutation consumes the exact revision returned by the preceding receipt. Consume the resulting birth packet's resolved `task` and structured executable `continuation`; never pass task prose via `--input`. A direct machine-protocol `run create` is allowed only with positional domain arguments, explicit `--session`/`--run`/`--step`, identical participant/actor values, request ID/reason, exact CAS revision, and `--input` values restricted to sealed same-Session Artifact IDs.9495**Session**: `{run_dir}/outputs/`96**Output**: `session.json` | `evidence.ndjson` | `understanding.md` | `explore.json` (debug/review only) | `anchors.json` (defensive only)9798**Output boundary**: ALL session artifacts MUST target the run outputs directory (`{run_dir}/outputs/`) only. `.workflow/state.json` and all `sessions/<sid>/` protocol files are runtime-owned — a workflow never writes them. Source code modifications during fix/execute phases are in-scope but MUST be committed per action. NEVER write session artifacts outside `{run_dir}/outputs/`.99100**session.json — shared core + mode fields:**101```json102{ "mode": "debug|improve|planex|review|security|defensive|ui",103 "target": "", "dimensions": [],104 "patterns": [], "confirmation": null, "generalization_stats": null,105 "cross_phase_loops": 0 }106```107Each mode extends the core — see the mode's workflow file for **session fields**.108109**Commit convention:** `"odyssey-{mode}({slug}): {STATE} — {summary}"` (mode = active mode short name; review mode uses `odyssey-review`).110111</context>112113<invariants>114All base invariants apply (evidence append-only, session-as-state, phase goal tracking, auto-commit per action). Additionally:1151161. **Evidence append-only** — never delete or overwrite evidence.ndjson entries.1172. **Phase goal tracking** — mark each goal done/failed before transition; no silent skips.1183. **Generalize is mandatory** — GENERALIZE and DISCOVER execute unless `skip_generalize == true`. Prior-phase convergence, "no findings / all verified / zero remaining," or context pressure are NOT valid skip reasons. The phase itself determines whether patterns exist.1194. **Zero-residual** (improve/review/ui) — every finding MUST have a concrete action (fix / issue / decision). "Report and shelve" and blanket "pre-existing" skips are forbidden.1205. **Read-only** (security, defensive) — NEVER modify source code, configuration, or dependencies. Security and defensive audits produce reports only; fixes route to `--mode improve`.1216. **Acceptance criteria are sacred** (planex) — no "close enough", no manual override without explicit escalation.1227. **Browser is truth** (ui) — verify in real rendering, not just code review. Diverge before converge.1238. **Goal 跟宿主原生 /goal 走** — session.json 是权威进度。不要为了刷新外观去重建 Goal;用户 clear 之后外观必须保持消失。124</invariants>125126<task_tracking>127128**时机与操作**(plan 是 session 权威状态的 UI 镜像,不替代 session 状态):129130| 时机 | 操作 | 示例 |131|------|------|------|132| Session 创建后 | update_plan 初始化步骤清单 | `update_plan({ plan: [{ step: "Step {index}: {step.skill}", status: "pending" }, ...] })` |133| Step 派发时 | update_plan 标记当前 step | `update_plan({ plan: [..., 当前 step status: "in_progress"] })` |134| Step 完成时 | update_plan 标记完成 | `update_plan({ plan: [..., 该 step status: "completed"] })` |135| Step 失败时 | update_plan + explanation 说明 | `update_plan({ explanation: "Step {index} failed: {reason}", plan: [...] })` |136137</task_tracking>138139<self_iteration>140Self-iteration (logic in odyssey-base.md) applies to each mode's discovery + audit + GENERALIZE stages:141142| Mode | Self-iterating stages |143|------|----------------------|144| debug | S_ARCHAEOLOGY, S_EXPLORE, S_DIAGNOSE, S_GENERALIZE |145| improve | S_SURVEY, S_AUDIT, S_DIAGNOSE, S_GENERALIZE |146| planex | S_PLAN, S_VERIFY, S_GENERALIZE |147| review | S_ARCHAEOLOGY, S_EXPLORE, S_REVIEW, S_FIX, S_GENERALIZE |148| security | S_RECON, S_SCAN, S_GENERALIZE |149| defensive | S_ANCHOR, S_SLICE, S_SCAN, S_PROPAGATE, S_GENERALIZE |150| ui | S_SURVEY, S_AUDIT, S_DIVERGE, S_GENERALIZE |151</self_iteration>152153<execution>154Follow base execution discipline completely. On entry: resolve mode (§mode_dispatch), then read the deferred workflow file for that mode + odyssey-base.md, and run that mode's state machine. All modes converge on the Shared Back-Half in odyssey-base.md.155156### Shared Phase Gates (MANDATORY, BLOCKING)157158- **INTAKE gate:** mode resolved, target/requirement resolved, SESSION_DIR created, session.json initialized (with baseline_metrics for improve; acceptance_criteria for planex), phase_goals[] derived from flags, understanding.md §1 written. BLOCKED if no target (E001) / no requirement (planex E001) / target path not found (E002) / mode unresolved (E000).159- **GENERALIZE gate:** ALL 3 layers (syntax/semantic/structural) attempted with evidence logged; generalization_stats written with by_layer entries for all 3 layers; generalize goal marked. Any layer not attempted = thoroughness-floor violation (BLOCKED).160- **DISCOVER gate:** all hits triaged with per-item classification and reason; `remaining_actionable == 0` OR `loops >= max_loops` with per-item reasons logged; discover goal marked. Unclassified hits = BLOCKED.161162Mode-specific phase gates (Discovery, Audit, FIX, VERIFY/CONFIRM) are defined in each mode's workflow file.163164</execution>165166<error_codes>167| Code | Severity | Condition | Recovery |168|------|----------|-----------|----------|169| E000 | error | Mode unresolved (`-y`, ambiguous intent, no `--mode`) | Provide `--mode` |170| E001 | error | No target / no requirement (planex) / no issue (debug) | Provide target or -c |171| E002 | error | Target path not found | Check path |172| E003 | error | -c mode mismatch (resumed session is different mode) | Use correct --mode or omit -c |173| E004 | error | Mode workflow file not found (~/.maestro/workflows/odyssey-{mode}.md) | Verify workflow installation or select another mode |174| W001 | warning | No relevant git history / no dependency manifest / no design system | Proceed with defaults |175| W002 | warning | Some dimension agents failed / 3 retries exhausted | Partial coverage / INCONCLUSIVE |176| W003 | warning | Archaeology agent or delegate failure (debug/review) | Proceed with available results, log failed agent |177| W004 | warning | Generalization 0 hits after full 3-layer scan | Advance to S_RECORD (requires all 3 layers attempted with evidence) |178| W005 | warning | Pending decisions | Filter evidence phase=decision |179| W006 | warning | No CLI tools (debug/review explore) | Skip explore |180| W007 | warning | planex CLI review regression concern | Review before next iteration |181| W008 | warning | Mode-scoped flag ignored (not applicable to resolved mode) | Remove flag or use correct mode |182</error_codes>183184<success_criteria>185- [ ] Mode resolved (explicit or auto-detected); session + output files created; prior knowledge searched186- [ ] Discovery phase(s) for the mode completed with evidence (archaeology/explore/survey)187- [ ] Domain audit completed with structured findings + severity matrix (or acceptance criteria + plan for planex)188- [ ] understanding.md sections written progressively per mode189- [ ] Fix + verify/confirm (unless --skip-fix); zero-residual for improve/review/ui; all criteria pass for planex190- [ ] Read-only invariant maintained for security and defensive modes — zero source modifications191- [ ] Multi-layer generalization + discovery triage (unless --skip-generalize); every unfixed finding individually justified192- [ ] phase_goals derived, tracked, and hardened-audited; goal_mode injected via prepare goal:true; `-y` no blocking prompts193- [ ] Session resumable via -c; mode-specific completion summary emitted194</success_criteria>195196<next_step_routing>197| Condition | Next |198|-----------|------|199| Single-file mechanical fix discovered | `/maestro-companion "<fix>"` |200| Discovery issues created | `/maestro-issue list --source {mode}-odyssey` |201| Deeper debug needed (from any mode) | `/maestro-odyssey <finding> --mode debug` |202| Security findings need remediation | `/maestro-odyssey <finding> --mode improve` |203| Defensive findings need remediation | `/maestro-odyssey <finding> --mode improve` |204| Defensive root-cause needed | `/maestro-odyssey <finding> --mode debug` |205| Formal review of changes | `/maestro-odyssey <changed-files> --mode review` |206| UI-related findings | `/maestro-odyssey <component> --mode ui` |207| Document pattern | `/maestro-learn decompose <module>` |208| Second opinion | `/maestro-learn consult <understanding.md>` |209| Related question | `/maestro-learn investigate "<question>"` |210| Design/perf/arch pattern to persist | `/maestro-spec add ui\|coding\|arch "..."` |211| Pending decisions | Filter evidence phase=decision status=pending |212</next_step_routing>