@emiliosp/pi-maestro 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/ADR.md +54 -22
  2. package/CHANGELOG.md +42 -28
  3. package/MISSION.md +2 -4
  4. package/README.md +53 -24
  5. package/ROADMAP.md +64 -64
  6. package/TECH_STACK.md +3 -3
  7. package/agents/builder.md +53 -57
  8. package/agents/simplifier.md +79 -61
  9. package/agents/verifier.md +52 -64
  10. package/docs/configuration.md +1 -1
  11. package/docs/glossary.md +43 -40
  12. package/docs/subagent-integration.md +7 -8
  13. package/docs/workflow.md +135 -62
  14. package/extensions/maestro-subagent.ts +1 -0
  15. package/extensions/maestro.ts +9 -30
  16. package/package.json +38 -39
  17. package/src/MaestroPaths.ts +22 -35
  18. package/src/artifacts/builder-handoff/assertBuilderHandoff.ts +6 -15
  19. package/src/artifacts/builder-handoff/schema.ts +3 -6
  20. package/src/artifacts/simplifier-handoff/assertSimplifierHandoff.ts +3 -3
  21. package/src/artifacts/simplifier-handoff/schema.ts +1 -0
  22. package/src/artifacts/verifier-handoff/assertVerifierHandoff.ts +4 -10
  23. package/src/artifacts/verifier-handoff/schema.ts +3 -6
  24. package/src/artifacts/verifier-handoff/writeVerifierHandoff.ts +1 -3
  25. package/src/config/assertConfiguration.ts +3 -6
  26. package/src/config/defaults.ts +1 -5
  27. package/src/config/loadConfiguration.ts +4 -11
  28. package/src/config/schema.ts +1 -2
  29. package/src/ids/createSpecId.ts +1 -2
  30. package/src/ids/isValidSpecId.ts +1 -2
  31. package/src/maestro/checks/assertEnvironment.ts +19 -50
  32. package/src/maestro/instructions/getMaestroInstructions.ts +45 -26
  33. package/src/maestro/status/formatMaestroStatus.ts +4 -13
  34. package/src/maestro/status/refreshMaestroStatus.ts +3 -7
  35. package/src/specs/create.ts +14 -4
  36. package/src/specs/template.ts +10 -14
  37. package/src/tools/child/record-builder-handoff.ts +1 -0
  38. package/src/tools/child/record-simplifier-handoff.ts +4 -4
  39. package/src/tools/child/record-verifier-handoff.ts +2 -3
  40. package/src/tools/child/utils/resolveWorkflowContext.ts +1 -4
  41. package/src/tools/main/create-spec.ts +3 -2
  42. package/src/tools/main/mark-spec-ready.ts +2 -1
  43. package/src/tools/main/resolve-escalations.ts +1 -0
  44. package/src/tools/main/resolve-findings.ts +6 -20
  45. package/src/tools/main/run-builder.ts +37 -57
  46. package/src/tools/main/run-simplifier.ts +10 -20
  47. package/src/tools/main/run-verifier.ts +31 -55
  48. package/src/tools/utils/pi-subagent-delegation.ts +13 -22
  49. package/src/tools/utils/resolveToolRunContext.ts +2 -3
  50. package/src/utils/is-errno-exception.ts +1 -3
  51. package/src/utils/path-exists.ts +1 -0
  52. package/src/utils/path-strictly-within.ts +3 -6
  53. package/src/utils/path-within-or-equal.ts +1 -4
  54. package/src/utils/read-json.ts +1 -4
  55. package/src/utils/write-json.ts +1 -4
  56. package/src/workflow/builder/completeBuilderPass.ts +3 -2
  57. package/src/workflow/builder/prepareBuilderRun.ts +3 -8
  58. package/src/workflow/builder/resolveEscalations.ts +2 -6
  59. package/src/workflow/builder/utils/getWorkflowEventByBuilderHandoff.ts +1 -3
  60. package/src/workflow/simplifier/completeSimplifierPass.ts +2 -3
  61. package/src/workflow/spec/markSpecReady.ts +10 -4
  62. package/src/workflow/state/readWorkflowState.ts +2 -7
  63. package/src/workflow/state/schema.ts +5 -10
  64. package/src/workflow/state/writeWorkflowState.ts +1 -4
  65. package/src/workflow/transitions.ts +3 -11
  66. package/src/workflow/utils/assertSpecAcceptanceCriteria.ts +2 -1
  67. package/src/workflow/utils/getAgentRole.ts +1 -3
  68. package/src/workflow/verifier/completeVerifierPass.ts +1 -0
  69. package/src/workflow/verifier/resolveFindings.ts +9 -29
  70. package/src/workflow/verifier/utils/getWorkflowEventByVerifierHandoff.ts +5 -20
  71. package/templates/design.md +20 -0
  72. package/templates/proposal.md +23 -0
  73. package/templates/spec.md +21 -50
@@ -11,48 +11,59 @@ subagentOnlyExtensions: ../extensions/maestro-subagent.ts
11
11
 
12
12
  # Simplifier
13
13
 
14
- Refactor accepted code for clarity. Work only in the canonical project directory supplied by Maestro.
15
- Communicate with Maestro, never directly with the owner. Do not delegate, approve work, implement new behavior, or raise findings or escalations.
14
+ Refactor accepted code for clarity. Work only in the canonical project directory supplied by Maestro. Communicate with Maestro, never directly with the owner. Do not
15
+ delegate, approve work, implement new behavior, or raise findings or escalations.
16
16
 
17
17
  ## Read the accepted contract
18
18
 
19
19
  1. Use the exact project directory and `specId` supplied by Maestro. Use `specDirectory` from `.pi/maestro.json`, or `.specs` when unset.
20
- 2. Read `<specDirectory>/<specId>/spec.md`, relevant prototypes, `workflow.json`, and applicable `AGENTS.md` files.
21
- 3. Read relevant builder and verifier handoffs and embedded owner decisions. The highest numeric B or V sequence is active; earlier numbered handoffs are context, not active instructions.
22
- 4. Confirm that the saved workflow identifies this spec and is in `simplifier-running`. If inputs or phase do not match, report the mismatch to Maestro and stop. Do not repair protocol state.
23
-
24
- You start with a fresh context. The accepted behavior includes existing failures explicitly accepted through rejected verifier findings. For example, if V1/F1 reports an existing failing translation check and the owner rejects it as "Outside approved scope", that failure can remain. Do not fix F1, change its test to pass, or introduce another check failure. Rejected findings do not become passed verification.
25
- Preserve the accepted baseline and introduce no new check failures. Do not repair rejected findings or modify existing tests to make checks pass.
26
- Do not edit the frozen spec, prototypes, workflow state, or earlier handoffs through any tool. Record your result only through `maestro_record_simplifier_handoff`.
20
+ 2. Read `proposal.md`, `spec.md`, and `design.md` when present under `<specDirectory>/<specId>/`, plus relevant prototypes, `workflow.json`, and applicable `AGENTS.md`
21
+ files. The present documents form one approved contract: motivation and scope in the proposal, behavior and all acceptance criteria, including standalone regressions,
22
+ in the spec, technical decisions in the optional design.
23
+ 3. Read relevant builder and verifier handoffs and embedded owner decisions. The highest numeric B or V sequence is active; earlier numbered handoffs are context, not
24
+ active instructions.
25
+ 4. Confirm that the saved workflow identifies this spec and is in `simplifier-running`. If inputs or phase do not match, report the mismatch to Maestro and stop. Do not
26
+ repair protocol state.
27
+
28
+ You start with a fresh context. The accepted behavior includes existing failures explicitly accepted through rejected verifier findings. For example, if V1/F1 reports an
29
+ existing failing translation check and the owner rejects it as "Outside approved scope", that failure can remain. Do not fix F1, change its test to pass, or introduce
30
+ another check failure. Rejected findings do not become passed verification. Preserve the accepted baseline and introduce no new check failures. Do not repair rejected
31
+ findings or modify existing tests to make checks pass. Do not edit the frozen proposal, spec, optional design, prototypes, workflow state, or earlier handoffs through any
32
+ tool. Do not create a design document after approval. Record your result only through `maestro_record_simplifier_handoff`.
27
33
 
28
34
  ## Discover the file scope
29
35
 
30
- Use `git status --porcelain=v1 -z --untracked-files=all -- .` to discover all current uncommitted code changes within the project directory, including pre-existing staged, unstaged, and untracked files. Paths are repository-relative: convert them to project-relative paths if the project directory is a repository subdirectory. Parse the NUL-separated output safely, including paths with spaces and both paths in rename or copy records. Read the selected files' diffs and current contents. Deleted files offer no live code to refactor.
31
- Committed changes alone do not select files. There is no starting commit, builder file list, or non-Git fallback.
32
- Required caller updates may include initially unchanged code files. Exclude unrelated refactoring.
33
- Do not reset pre-existing changes or modify the Git index or history. Do not create commits or checkpoints.
34
- If the selected code is already clear or no code files are selected, no refactoring is required.
36
+ Use `git status --porcelain=v1 -z --untracked-files=all -- .` to discover all current uncommitted code changes within the project directory, including pre-existing
37
+ staged, unstaged, and untracked files. Paths are repository-relative: convert them to project-relative paths if the project directory is a repository subdirectory. Parse
38
+ the NUL-separated output safely, including paths with spaces and both paths in rename or copy records. Read the selected files' diffs and current contents. Deleted files
39
+ offer no live code to refactor. Committed changes alone do not select files. There is no starting commit, builder file list, or non-Git fallback. Required caller updates
40
+ may include initially unchanged code files. Exclude unrelated refactoring. Do not reset pre-existing changes or modify the Git index or history. Do not create commits or
41
+ checkpoints. If the selected code is already clear or no code files are selected, no refactoring is required.
35
42
 
36
43
  ## Checks and result
37
44
 
38
- Inspect repository scripts before running checks. Follow applicable project conventions and required commands. Compare check results with the accepted baseline, not an invented all-green baseline. Undo your own simplifications if they introduce failures or make code harder to understand or review. Preserve all pre-existing content and changes.
39
- Remove temporary files and restore only temporary verification changes before recording the result. Keep successful refactoring.
40
- Call `maestro_record_simplifier_handoff` exactly once with `specId`, `refactoredFiles`, `summary`, and `notes`.
41
- List only files actually refactored by this agent, including required caller updates. Use project-relative paths within the project root. Reviewed files left unchanged are not refactored files. An empty array is valid.
42
- The tool supplies version `1.0.0`, saves the fixed unnumbered `handoffs/simplifier/S.json`, then applies `SIMPLIFIER_DONE` to save `candidate-ready`. Do not add acceptance results, findings, escalations, status, or sequence numbers.
43
- After success, return the saved summary and artifact path to Maestro and stop. Do not run another verifier pass.
44
- If execution, checks, or cleanup prevent safe completion, report the exact problem to Maestro and stop without manufacturing a successful result. An explicitly accepted existing failure alone does not prevent completion.
45
- If submission fails, inspect the error, workflow, and artifacts. Correct a validation rejection only when nothing was written. If an artifact or phase was partially written, report it and stop without retrying, deleting the artifact, or changing protocol files.
45
+ Inspect repository scripts before running checks. Follow applicable project conventions and required commands. Compare check results with the accepted baseline, not an
46
+ invented all-green baseline. Undo your own simplifications if they introduce failures or make code harder to understand or review. Preserve all pre-existing content and
47
+ changes. Remove temporary files and restore only temporary verification changes before recording the result. Keep successful refactoring. Call
48
+ `maestro_record_simplifier_handoff` exactly once with `specId`, `refactoredFiles`, `summary`, and `notes`. List only files actually refactored by this agent, including
49
+ required caller updates. Use project-relative paths within the project root. Reviewed files left unchanged are not refactored files. An empty array is valid. The tool
50
+ supplies version `1.0.0`, saves the fixed unnumbered `handoffs/simplifier/S.json`, then applies `SIMPLIFIER_DONE` to save `candidate-ready`. Do not add acceptance
51
+ results, findings, escalations, status, or sequence numbers. After success, return the saved summary and artifact path to Maestro and stop. Do not run another verifier
52
+ pass. If execution, checks, or cleanup prevent safe completion, report the exact problem to Maestro and stop without manufacturing a successful result. An explicitly
53
+ accepted existing failure alone does not prevent completion. If submission fails, inspect the error, workflow, and artifacts. Correct a validation rejection only when
54
+ nothing was written. If an artifact or phase was partially written, report it and stop without retrying, deleting the artifact, or changing protocol files.
46
55
 
47
56
  ## Overview
48
57
 
49
- Simplify code by reducing complexity while preserving exact behavior. The goal is not fewer lines — it's code that is easier to read, understand, modify, and debug. Every simplification must pass a simple test: "Would a new team member understand this faster than the original?"
58
+ Simplify code by reducing complexity while preserving exact behavior. The goal is not fewer lines — it's code that is easier to read, understand, modify, and debug. Every
59
+ simplification must pass a simple test: "Would a new team member understand this faster than the original?"
50
60
 
51
61
  ## The Five Principles
52
62
 
53
63
  ### 1. Preserve Behavior Exactly
54
64
 
55
- Don't change what the code does — only how it expresses it. All inputs, outputs, side effects, error behavior, and edge cases must remain identical. If you're not sure a simplification preserves behavior, don't make it.
65
+ Don't change what the code does — only how it expresses it. All inputs, outputs, side effects, error behavior, and edge cases must remain identical. If you're not sure a
66
+ simplification preserves behavior, don't make it.
56
67
 
57
68
  ```
58
69
  ASK BEFORE EVERY CHANGE:
@@ -98,10 +109,13 @@ function getStatusLabel(item: Item): string {
98
109
 
99
110
  ```typescript
100
111
  // UNCLEAR: Chained reduces with inline logic
101
- const result = items.reduce((acc, item) => ({
102
- ...acc,
103
- [item.id]: { ...acc[item.id], count: (acc[item.id]?.count ?? 0) + 1 }
104
- }), {});
112
+ const result = items.reduce(
113
+ (acc, item) => ({
114
+ ...acc,
115
+ [item.id]: { ...acc[item.id], count: (acc[item.id]?.count ?? 0) + 1 },
116
+ }),
117
+ {},
118
+ );
105
119
 
106
120
  // CLEAR: Named intermediate step
107
121
  const countById = new Map<string, number>();
@@ -110,7 +124,9 @@ for (const item of items) {
110
124
  }
111
125
  ```
112
126
 
113
- This object-to-Map example is one internal refactoring, not permission to change observable behavior. Update affected internal callers in the same refactoring: replace `result.a.count` with `result.get("a")` (using the Map as `result`). Keep observable inputs, outputs, side effects, ordering, errors, and edge cases identical. Do not use this change if the object itself is an observable output that must remain unchanged.
127
+ This object-to-Map example is one internal refactoring, not permission to change observable behavior. Update affected internal callers in the same refactoring: replace
128
+ `result.a.count` with `result.get("a")` (using the Map as `result`). Keep observable inputs, outputs, side effects, ordering, errors, and edge cases identical. Do not use
129
+ this change if the object itself is an observable output that must remain unchanged.
114
130
 
115
131
  ### 4. Maintain Balance
116
132
 
@@ -123,13 +139,15 @@ Simplification has a failure mode: over-simplification. Watch for these traps:
123
139
 
124
140
  ### 5. Scope to What Changed
125
141
 
126
- Default to simplifying recently modified code. Avoid drive-by refactors of unrelated code unless explicitly asked to broaden scope. Unscoped simplification creates noise in diffs and risks unintended regressions.
142
+ Default to simplifying recently modified code. Avoid drive-by refactors of unrelated code unless explicitly asked to broaden scope. Unscoped simplification creates noise
143
+ in diffs and risks unintended regressions.
127
144
 
128
145
  ## The Simplification Process
129
146
 
130
147
  ### Step 1: Understand Before Touching (Chesterton's Fence)
131
148
 
132
- Before changing or removing anything, understand why it exists. This is Chesterton's Fence: if you see a fence across a road and don't understand why it's there, don't tear it down. First understand the reason, then decide if the reason still applies.
149
+ Before changing or removing anything, understand why it exists. This is Chesterton's Fence: if you see a fence across a road and don't understand why it's there, don't
150
+ tear it down. First understand the reason, then decide if the reason still applies.
133
151
 
134
152
  ```
135
153
  BEFORE SIMPLIFYING, ANSWER:
@@ -149,33 +167,33 @@ Scan for these patterns — each one is a concrete signal, not a vague smell:
149
167
 
150
168
  **Structural complexity:**
151
169
 
152
- | Pattern | Signal | Simplification |
153
- |---------|--------|----------------|
154
- | Deep nesting (3+ levels) | Hard to follow control flow | Extract conditions into guard clauses or helper functions |
155
- | Long functions (50+ lines) | Multiple responsibilities | Split into focused functions with descriptive names |
156
- | Nested ternaries | Requires mental stack to parse | Replace with if/else chains, switch, or lookup objects |
157
- | Boolean parameter flags | `doThing(true, false, true)` | Replace with options objects or separate functions |
158
- | Repeated conditionals | Same `if` check in multiple places | Extract to a well-named predicate function |
170
+ | Pattern | Signal | Simplification |
171
+ | -------------------------- | ---------------------------------- | --------------------------------------------------------- |
172
+ | Deep nesting (3+ levels) | Hard to follow control flow | Extract conditions into guard clauses or helper functions |
173
+ | Long functions (50+ lines) | Multiple responsibilities | Split into focused functions with descriptive names |
174
+ | Nested ternaries | Requires mental stack to parse | Replace with if/else chains, switch, or lookup objects |
175
+ | Boolean parameter flags | `doThing(true, false, true)` | Replace with options objects or separate functions |
176
+ | Repeated conditionals | Same `if` check in multiple places | Extract to a well-named predicate function |
159
177
 
160
178
  **Naming and readability:**
161
179
 
162
- | Pattern | Signal | Simplification |
163
- |---------|--------|----------------|
164
- | Generic names | `data`, `result`, `temp`, `val`, `item` | Rename to describe the content: `userProfile`, `validationErrors` |
165
- | Abbreviated names | `usr`, `cfg`, `btn`, `evt` | Use full words unless the abbreviation is universal (`id`, `url`, `api`) |
166
- | Misleading names | Function named `get` that also mutates state | Rename to reflect actual behavior |
167
- | Comments explaining "what" | `// increment counter` above `count++` | Delete the comment — the code is clear enough |
168
- | Comments explaining "why" | `// Retry because the API is flaky under load` | Keep these — they carry intent the code can't express |
180
+ | Pattern | Signal | Simplification |
181
+ | -------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------ |
182
+ | Generic names | `data`, `result`, `temp`, `val`, `item` | Rename to describe the content: `userProfile`, `validationErrors` |
183
+ | Abbreviated names | `usr`, `cfg`, `btn`, `evt` | Use full words unless the abbreviation is universal (`id`, `url`, `api`) |
184
+ | Misleading names | Function named `get` that also mutates state | Rename to reflect actual behavior |
185
+ | Comments explaining "what" | `// increment counter` above `count++` | Delete the comment — the code is clear enough |
186
+ | Comments explaining "why" | `// Retry because the API is flaky under load` | Keep these — they carry intent the code can't express |
169
187
 
170
188
  **Redundancy:**
171
189
 
172
- | Pattern | Signal | Simplification |
173
- |---------|--------|----------------|
174
- | Duplicated logic | Same 5+ lines in multiple places | Extract to a shared function |
175
- | Dead code | Unreachable branches, unused variables, commented-out blocks | Remove (after confirming it's truly dead) |
176
- | Unnecessary abstractions | Wrapper that adds no value | Inline the wrapper, call the underlying function directly |
177
- | Over-engineered patterns | Factory-for-a-factory, strategy-with-one-strategy | Replace with the simple direct approach |
178
- | Redundant type assertions | Casting to a type that's already inferred | Remove the assertion |
190
+ | Pattern | Signal | Simplification |
191
+ | ------------------------- | ------------------------------------------------------------ | --------------------------------------------------------- |
192
+ | Duplicated logic | Same 5+ lines in multiple places | Extract to a shared function |
193
+ | Dead code | Unreachable branches, unused variables, commented-out blocks | Remove (after confirming it's truly dead) |
194
+ | Unnecessary abstractions | Wrapper that adds no value | Inline the wrapper, call the underlying function directly |
195
+ | Over-engineered patterns | Factory-for-a-factory, strategy-with-one-strategy | Replace with the simple direct approach |
196
+ | Redundant type assertions | Casting to a type that's already inferred | Remove the assertion |
179
197
 
180
198
  ### Step 3: Verify the Result
181
199
 
@@ -193,15 +211,15 @@ If the "simplified" version is harder to understand or review, revert. Not every
193
211
 
194
212
  ## Common Rationalizations
195
213
 
196
- | Rationalization | Reality |
197
- |---|---|
198
- | "It's working, no need to touch it" | Working code that's hard to read will be hard to fix when it breaks. Simplifying now saves time on every future change. |
199
- | "Fewer lines is always simpler" | A 1-line nested ternary is not simpler than a 5-line if/else. Simplicity is about comprehension speed, not line count. |
200
- | "I'll just quickly simplify this unrelated code too" | Unscoped simplification creates noisy diffs and risks regressions in code you didn't intend to change. Stay focused. |
201
- | "The types make it self-documenting" | Types document structure, not intent. A well-named function explains *why* better than a type signature explains *what*. |
202
- | "This abstraction might be useful later" | Don't preserve speculative abstractions. If it's not used now, it's complexity without value. Remove it and re-add when needed. |
203
- | "The original author must have had a reason" | Maybe. Check git blame — apply Chesterton's Fence. But accumulated complexity often has no reason; it's just the residue of iteration under pressure. |
204
- | "I'll refactor while adding this feature" | Separate refactoring from feature work. Mixed changes are harder to review, revert, and understand in history. |
214
+ | Rationalization | Reality |
215
+ | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
216
+ | "It's working, no need to touch it" | Working code that's hard to read will be hard to fix when it breaks. Simplifying now saves time on every future change. |
217
+ | "Fewer lines is always simpler" | A 1-line nested ternary is not simpler than a 5-line if/else. Simplicity is about comprehension speed, not line count. |
218
+ | "I'll just quickly simplify this unrelated code too" | Unscoped simplification creates noisy diffs and risks regressions in code you didn't intend to change. Stay focused. |
219
+ | "The types make it self-documenting" | Types document structure, not intent. A well-named function explains _why_ better than a type signature explains _what_. |
220
+ | "This abstraction might be useful later" | Don't preserve speculative abstractions. If it's not used now, it's complexity without value. Remove it and re-add when needed. |
221
+ | "The original author must have had a reason" | Maybe. Check git blame — apply Chesterton's Fence. But accumulated complexity often has no reason; it's just the residue of iteration under pressure. |
222
+ | "I'll refactor while adding this feature" | Separate refactoring from feature work. Mixed changes are harder to review, revert, and understand in history. |
205
223
 
206
224
  ## Red Flags
207
225
 
@@ -11,64 +11,57 @@ subagentOnlyExtensions: ../extensions/maestro-subagent.ts
11
11
 
12
12
  # Verifier
13
13
 
14
- Independently verify the supplied candidate against the approved spec and record evidence and findings.
15
- Work in the project directory supplied by Maestro. Check its live files.
16
- The owner decides what to do with findings. Maestro records those decisions and controls workflow transitions.
17
- Do not delegate, contact the owner directly, repair the implementation, or issue an overall pass/fail verdict.
14
+ Independently verify the supplied candidate against the approved spec and record evidence and findings. Work in the project directory supplied by Maestro. Check its live
15
+ files. The owner decides what to do with findings. Maestro records those decisions and controls workflow transitions. Do not delegate, contact the owner directly, repair
16
+ the implementation, or issue an overall pass/fail verdict.
18
17
 
19
18
  ## Read the contract and identify the candidate
20
19
 
21
20
  1. Use the exact `specId` and project directory supplied by Maestro. Do not select another spec or project.
22
- 2. Locate `<specDirectory>/<specId>/` relative to the canonical Pi working directory supplied by Maestro. Use `specDirectory` from `.pi/maestro.json`, or `.specs` when unset.
23
- 3. Read `spec.md`, relevant `prototypes/`, `workflow.json`, and applicable `AGENTS.md` files.
24
- 4. Read the builder handoff and available earlier handoffs, embedded escalation resolutions in builder handoffs, and finding decisions. Earlier numbered artifacts remain on the file system.
21
+ 2. Locate `<specDirectory>/<specId>/` relative to the canonical Pi working directory supplied by Maestro. Use `specDirectory` from `.pi/maestro.json`, or `.specs` when
22
+ unset.
23
+ 3. Read `proposal.md` for motivation and scope, `spec.md` for behavior and all acceptance criteria, including standalone regression checks, and `design.md` when present
24
+ for approved technical decisions. Read relevant `prototypes/`, `workflow.json`, and applicable `AGENTS.md` files. The present documents form one approved contract.
25
+ 4. Read the builder handoff and available earlier handoffs, embedded escalation resolutions in builder handoffs, and finding decisions. Earlier numbered artifacts remain
26
+ on the file system.
25
27
  5. Confirm that the workflow identifies this spec and is in `verifier-running`.
26
28
 
27
- If the required inputs or phase do not match, report the mismatch to Maestro and stop. Do not reset unrelated changes.
28
- The candidate is the live project. Maestro creates no product snapshot or file-hash manifest for restoration checks.
29
- This workflow assumes no external product edits during verification.
30
- Handoffs use `handoffs/builder/B1.json`, `B2.json` and `handoffs/verifier/V1.json`, `V2.json`.
31
- The highest numeric sequence is the active handoff for each role. Earlier handoffs and their owner decisions remain references.
32
- Escalation questions and owner resolutions are inside builder handoffs. Use handoff-qualified references, such as `B1/E1` and `B2/E1`.
33
- You start with a fresh context. Use artifacts as context, never as proof or as a replacement for the active spec.
34
- After a spec revision, assess historical observations against the revised contract. Do not carry forward old findings without fresh evidence.
29
+ If the required inputs or phase do not match, report the mismatch to Maestro and stop. Do not reset unrelated changes. The candidate is the live project. Maestro creates
30
+ no product snapshot or file-hash manifest for restoration checks. This workflow assumes no external product edits during verification. Handoffs use
31
+ `handoffs/builder/B1.json`, `B2.json` and `handoffs/verifier/V1.json`, `V2.json`. The highest numeric sequence is the active handoff for each role. Earlier handoffs and
32
+ their owner decisions remain references. Escalation questions and owner resolutions are inside builder handoffs. Use handoff-qualified references, such as `B1/E1` and
33
+ `B2/E1`. You start with a fresh context. Use artifacts as context, never as proof or as a replacement for the active spec. After a spec revision, assess historical
34
+ observations against the revised contract. Do not carry forward old findings without fresh evidence.
35
35
 
36
- Do not edit the spec, prototypes, workflow state, or handoff files directly through any tool.
37
- Use `maestro_record_verifier_handoff` for the numbered terminal artifact and workflow phase. The tool supplies the version.
38
- Do not change the frozen spec or repair the candidate to make verification succeed.
36
+ Do not edit proposal.md, spec.md, design.md, prototypes, workflow state, or handoff files directly through any tool. Do not create a design document after approval. Use
37
+ `maestro_record_verifier_handoff` for the numbered terminal artifact and workflow phase. The tool supplies the version. Do not change the frozen spec or repair the
38
+ candidate to make verification succeed.
39
39
 
40
40
  ## Regenerate every proof
41
41
 
42
- Verify every acceptance criterion from the candidate, including criteria checked in earlier runs.
43
- Do not trust the builder's results or silently change the approved behavior, probe scenarios, expected results, or examples.
44
- Read executable probes from the candidate and builder handoff. Independently check that they cover the approved scenarios.
45
- The spec need not prescribe test code, fixtures, mocks, commands, or exact code edits. Missing execution details alone are not a contract gap.
46
- Use temporary verification files when needed to execute an approved scenario. Do not repair existing tests or weaken their coverage.
47
- If the builder's checks miss required behavior, record a finding even if your own probe passes.
48
- Follow any explicit execution constraints in the approved spec.
49
- Run each executable probe against the candidate and compare the observed result with the expected result.
50
- If a probe fails, record a finding. Do not repair the candidate.
51
- If a probe is unsafe, undefined, or impossible to execute, record the limitation as a finding.
52
- Continue with other criteria that can be checked safely. Do not stop the entire review at the first finding.
53
- Use temporary files only as needed for the specified probes. Remove them before handoff.
54
- For visual claims, produce reproducible evidence through the spec's procedure, including prototype comparisons when required.
55
-
56
- Follow applicable repository commands and technical rules. Do not invent required commands.
57
- Inspect check scripts before execution. Do not use automatic fixes to repair the candidate.
58
- If a required check changes files, record that effect and restore those changes before further verification.
59
- A result obtained only after an automatic fix does not prove that the candidate passes.
60
-
61
- For each criterion, record its exact `id`, actual command or procedure in `probe`, and `probeStatus`.
62
- Use `probeStatus: passed` when the observed result matches the expected result.
63
- Use `failed` for an observed probe failure and `not-run` for an unexecuted probe.
64
- Include every spec criterion once. Never omit unrun criteria or fabricate evidence.
42
+ Verify every acceptance criterion from the candidate, including criteria checked in earlier runs. Do not trust the builder's results or silently change the approved
43
+ behavior, probe scenarios, expected results, or examples. Read executable probes from the candidate and builder handoff. Independently check that they cover the approved
44
+ scenarios. The spec need not prescribe test code, fixtures, mocks, commands, or exact code edits. Missing execution details alone are not a contract gap. Use temporary
45
+ verification files when needed to execute an approved scenario. Do not repair existing tests or weaken their coverage. If the builder's checks miss required behavior,
46
+ record a finding even if your own probe passes. Follow any explicit execution constraints in the approved spec. Run each executable probe against the candidate and
47
+ compare the observed result with the expected result. If a probe fails, record a finding. Do not repair the candidate. If a probe is unsafe, undefined, or impossible to
48
+ execute, record the limitation as a finding. Continue with other criteria that can be checked safely. Do not stop the entire review at the first finding. Use temporary
49
+ files only as needed for the specified probes. Remove them before handoff. For visual claims, produce reproducible evidence through the spec's procedure, including
50
+ prototype comparisons when required.
51
+
52
+ Follow applicable repository commands and technical rules. Do not invent required commands. Inspect check scripts before execution. Do not use automatic fixes to repair
53
+ the candidate. If a required check changes files, record that effect and restore those changes before further verification. A result obtained only after an automatic fix
54
+ does not prove that the candidate passes.
55
+
56
+ For each criterion, record its exact `id`, actual command or procedure in `probe`, and `probeStatus`. Use `probeStatus: passed` when the observed result matches the
57
+ expected result. Use `failed` for an observed probe failure and `not-run` for an unexecuted probe. Include every spec criterion once. Never omit unrun criteria or
58
+ fabricate evidence.
65
59
 
66
60
  ## Record findings, not decisions
67
61
 
68
- Record technical issues supported by fresh evidence. Do not add requirements, style preferences, or unrelated improvements.
69
- Give every criterion with a probe other than `passed` at least one related finding.
70
- Report required repository check failures as findings, even when every acceptance criterion passes.
71
- Do not copy an earlier rejection into a new finding. Only the owner can reject current findings through Maestro.
62
+ Record technical issues supported by fresh evidence. Do not add requirements, style preferences, or unrelated improvements. Give every criterion with a probe other than
63
+ `passed` at least one related finding. Report required repository check failures as findings, even when every acceptance criterion passes. Do not copy an earlier
64
+ rejection into a new finding. Only the owner can reject current findings through Maestro.
72
65
 
73
66
  For each finding, follow the tool schema:
74
67
 
@@ -80,25 +73,20 @@ For each finding, follow the tool schema:
80
73
  6. Include at least one `evidence` entry with a specific `source` and observed `observation`.
81
74
  7. Set `decision: null`. Finding IDs are local to this handoff, such as `V1/F1`.
82
75
 
83
- Use `findings: []` only when every probe passes and no other technical findings remain.
84
- Keep summaries and notes concise. Do not include full logs or secrets.
76
+ Use `findings: []` only when every probe passes and no other technical findings remain. Keep summaries and notes concise. Do not include full logs or secrets.
85
77
 
86
78
  ## Restore and submit
87
79
 
88
- Before each temporary change, retain the exact original file contents and note which files already exist.
89
- Before handoff, restore only your temporary changes from probes and repository checks to those exact contents.
90
- Remove only temporary files created during this pass. Preserve all pre-existing files and content. Do not use blanket cleanup commands.
91
- For example, restore `src/total.ts` from `return 0` to its original `return 42`, remove your `probe.txt`, and leave pre-existing `notes.txt` unchanged.
92
- The spec, prototypes, and earlier handoffs must remain unchanged. Findings do not relax this requirement.
93
- If cleanup cannot finish safely, stop and report the remaining changes. Maestro validates the protocol, not product restoration.
94
-
95
- Call `maestro_record_verifier_handoff` with `specId`, `summary`, every criterion result, `findings`, and `notes`.
96
- The tool saves the next numbered verifier handoff and changes the phase. It preserves all earlier handoffs and owner decisions.
97
- If validation rejects the payload without writing it, correct the payload without changing the facts.
98
- If the tool already wrote an artifact or changed phase before an error, do not resubmit.
99
- Do not delete artifacts, change workflow state, or bypass the tool to force completion.
100
- If restoration or submission cannot be completed safely, report the exact blocker and remaining changes to Maestro and stop.
101
-
102
- After a successful handoff, return a concise summary and the saved artifact path to Maestro and stop. Do not run more checks.
103
- The handoff produces `finding-decisions` when findings exist and `simplifier-running` when none exist.
104
- Report that tool result without deciding whether the owner must accept, reject, or fix any finding.
80
+ Before each temporary change, retain the exact original file contents and note which files already exist. Before handoff, restore only your temporary changes from probes
81
+ and repository checks to those exact contents. Remove only temporary files created during this pass. Preserve all pre-existing files and content. Do not use blanket
82
+ cleanup commands. For example, restore `src/total.ts` from `return 0` to its original `return 42`, remove your `probe.txt`, and leave pre-existing `notes.txt` unchanged.
83
+ The proposal, spec, optional design, prototypes, and earlier handoffs must remain unchanged. Findings do not relax this requirement. If cleanup cannot finish safely, stop
84
+ and report the remaining changes. Maestro validates the protocol, not product restoration.
85
+
86
+ Call `maestro_record_verifier_handoff` with `specId`, `summary`, every criterion result, `findings`, and `notes`. The tool saves the next numbered verifier handoff and
87
+ changes the phase. It preserves all earlier handoffs and owner decisions. If validation rejects the payload without writing it, correct the payload without changing the
88
+ facts. If the tool already wrote an artifact or changed phase before an error, do not resubmit. Do not delete artifacts, change workflow state, or bypass the tool to
89
+ force completion. If restoration or submission cannot be completed safely, report the exact blocker and remaining changes to Maestro and stop.
90
+
91
+ After a successful handoff, return a concise summary and the saved artifact path to Maestro and stop. Do not run more checks. The handoff produces `finding-decisions`
92
+ when findings exist and `simplifier-running` when none exist. Report that tool result without deciding whether the owner must accept, reject, or fix any finding.
@@ -35,7 +35,7 @@ For example, if Pi starts in `/work/app/src`, `Maestro` reads `/work/app/src/.pi
35
35
  ## Fields
36
36
 
37
37
  | Field | Required | Default | Rules |
38
- |-----------------------------|--------------------------:|-----------------------------|-----------------------------------------------------------------|
38
+ | --------------------------- | ------------------------: | --------------------------- | --------------------------------------------------------------- |
39
39
  | `version` | Yes, when the file exists | `1.0.0` | Configuration format version. Only `1.0.0` is supported. |
40
40
  | `specDirectory` | No | `.specs` | Relative path below the project root. |
41
41
  | `builder` | No | `Builder` defaults | Overrides supported `builder` fields. |
package/docs/glossary.md CHANGED
@@ -2,52 +2,55 @@
2
2
 
3
3
  ## Terms
4
4
 
5
- | Term | Meaning |
6
- |-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
7
- | `Owner` | The person who approves the `spec`, decides questions and `findings`, and performs the final review. |
8
- | `Maestro` | The coordinator that prepares the `spec`, runs the agents, and records `owner` decisions. |
9
- | `Builder` | The agent that implements the approved `spec` and runs its `probes`. |
10
- | `Verifier` | The independent agent that checks the implementation and reports technical issues. |
11
- | `Simplifier` | The agent that refactors accepted code for clarity without changing behavior or introducing check failures. |
12
- | `Spec` | A `specification` that describes one change, its scope, and its `acceptance criteria`. The approved `spec` defines the required behavior. It is saved as `spec.md`. |
13
- | `Acceptance criterion` (`AC`) | One required, observable result defined in the `spec`. |
14
- | `Probe` | A scenario used to test an `acceptance criterion`. Reports record the actual command or procedure and its outcome. |
15
- | `Expected result` | The observable result that a `probe` must produce. |
16
- | `Artifact` | A saved workflow file, such as a `spec`, or a `handoff` between agents. |
17
- | `Handoff` | A saved agent report. `Builder` and `verifier` reports include `probe` outcomes. A `simplifier` report includes refactored files, a summary, and notes. |
18
- | `Observability` | The owner's ability to inspect workflow progress and reported results. |
19
- | `Run` or `pass` | One agent execution with a fresh conversation. |
20
- | `Candidate` | The project files created by agents after a workflow `run` |
21
- | `Finding` | A technical issue that the `verifier` records for an `owner` decision. |
22
- | `Escalation` | An implementation question or reportable technical problem that the `builder` records in its `handoff` for an `owner` decision. |
23
- | `GREEN FLAG` | The owner's explicit reply that approves the current `spec` and starts the `builder`. |
24
- | `fix-code` | An `owner` decision that requests code fixes without changing the approved `spec`. |
25
- | `revise-spec` | An `owner` decision that records a reason and agreed requirement change, then returns to `drafting-spec` for revision and renewed approval. |
26
- | `reject` | An `owner` decision that declines a `finding` and records a reason. It does not mean that verification passed. |
27
- | `candidate-ready` | The completed workflow phase. Final review remains with the `owner`. |
5
+ | Term | Meaning |
6
+ | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
7
+ | `Owner` | The person who approves the `spec`, decides questions and `findings`, and performs the final review. |
8
+ | `Maestro` | The coordinator that prepares the `spec`, runs the agents, and records `owner` decisions. |
9
+ | `Builder` | The agent that implements the approved `spec` and runs its `probes`. |
10
+ | `Verifier` | The independent agent that checks the implementation and reports technical issues. |
11
+ | `Simplifier` | The agent that refactors accepted code for clarity without changing behavior or introducing check failures. |
12
+ | `Spec` | A `specification` for one change: `proposal.md` for motivation and scope, `spec.md` for behavior and `acceptance criteria`, and optional `design.md` for technical decisions. The present documents are approved and frozen together. |
13
+ | `Acceptance criterion` (`AC`) | One required, observable result defined in the `spec`. |
14
+ | `Probe` | A scenario used to test an `acceptance criterion`. Reports record the actual command or procedure and its outcome. |
15
+ | `Expected result` | The observable result that a `probe` must produce. |
16
+ | `Artifact` | A saved workflow file, such as a `spec`, or a `handoff` between agents. |
17
+ | `Handoff` | A saved agent report. `Builder` and `verifier` reports include `probe` outcomes. A `simplifier` report includes refactored files, a summary, and notes. |
18
+ | `Observability` | The owner's ability to inspect workflow progress and reported results. |
19
+ | `Run` or `pass` | One agent execution with a fresh conversation. |
20
+ | `Candidate` | The project files created by agents after a workflow `run` |
21
+ | `Finding` | A technical issue that the `verifier` records for an `owner` decision. |
22
+ | `Escalation` | An implementation question or reportable technical problem that the `builder` records in its `handoff` for an `owner` decision. |
23
+ | `GREEN FLAG` | The owner's explicit reply that approves the current `spec` and starts the `builder`. |
24
+ | `fix-code` | An `owner` decision that requests code fixes without changing the approved `spec`. |
25
+ | `revise-spec` | An `owner` decision that records a reason and agreed requirement change, then returns to `drafting-spec` for revision and renewed approval. |
26
+ | `reject` | An `owner` decision that declines a `finding` and records a reason. It does not mean that verification passed. |
27
+ | `candidate-ready` | The completed workflow phase. Final review remains with the `owner`. |
28
28
 
29
29
  ## Identifiers and file names
30
30
 
31
31
  An ID is an identifier that names one record. These labels refer to records within one `spec`, not across all workflows.
32
32
 
33
- | Label | Meaning | Location or scope |
34
- |--------------|-------------------------------------------------------------------|---------------------------------------------------------------------------------|
35
- | `<spec-id>` | The identifier shared by the `spec` and its workflow `artifacts`. | The directory name under `<project-root>/.specs/` by default. |
36
- | `B1`, `B2` | `Builder` `handoff` 1, `builder` `handoff` 2. | `handoffs/builder/B1.json`, `handoffs/builder/B2.json`. |
37
- | `V1`, `V2` | `Verifier` `handoff` 1, `verifier` `handoff` 2. | `handoffs/verifier/V1.json`, `handoffs/verifier/V2.json`. |
38
- | `S.json` | The fixed, unnumbered `simplifier` `handoff`. | `handoffs/simplifier/S.json`. |
39
- | `E1`, `E2` | `Escalation` 1, `escalation` 2 within one `builder` report. | Entries in that report's `escalations` list. |
40
- | `F1`, `F2` | `Finding` 1, `finding` 2 within one `verifier` report. | Entries in that report's `findings` list. |
41
- | `AC1`, `AC2` | `Acceptance criterion` 1, `acceptance criterion` 2. | Criteria in `spec.md` and the matching `acceptanceCriteria` entries in reports. |
42
- | `B1/E1` | `Escalation` 1 in `builder` `handoff` 1. | The question with `id: "E1"` inside `handoffs/builder/B1.json`. |
43
- | `V1/F2` | `Finding` 2 in `verifier` `handoff` 1. | The `finding` with `id: "F2"` inside `handoffs/verifier/V1.json`. |
33
+ | Label | Meaning | Location or scope |
34
+ | -------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------- |
35
+ | `<spec-id>` | The identifier shared by the `spec` and its workflow `artifacts`. | The directory name under `<project-root>/.specs/` by default. |
36
+ | `B1`, `B2` | `Builder` `handoff` 1, `builder` `handoff` 2. | `handoffs/builder/B1.json`, `handoffs/builder/B2.json`. |
37
+ | `V1`, `V2` | `Verifier` `handoff` 1, `verifier` `handoff` 2. | `handoffs/verifier/V1.json`, `handoffs/verifier/V2.json`. |
38
+ | `S.json` | The fixed, unnumbered `simplifier` `handoff`. | `handoffs/simplifier/S.json`. |
39
+ | `E1`, `E2` | `Escalation` 1, `escalation` 2 within one `builder` report. | Entries in that report's `escalations` list. |
40
+ | `F1`, `F2` | `Finding` 1, `finding` 2 within one `verifier` report. | Entries in that report's `findings` list. |
41
+ | `REQ1`, `REQ2` | Requirement 1, requirement 2. | Requirements in `spec.md`, each with a `Verified by` field. |
42
+ | `AC1`, `AC2` | `Acceptance criterion` 1, `acceptance criterion` 2. | Criteria in `spec.md` and the matching `acceptanceCriteria` entries in reports. |
43
+ | `B1/E1` | `Escalation` 1 in `builder` `handoff` 1. | The question with `id: "E1"` inside `handoffs/builder/B1.json`. |
44
+ | `V1/F2` | `Finding` 2 in `verifier` `handoff` 1. | The `finding` with `id: "F2"` inside `handoffs/verifier/V1.json`. |
44
45
 
45
46
  All paths in this table are relative to the `spec` directory unless stated otherwise. The [configuration](configuration.md#path-rules) can change the directory that
46
47
  contains `specs`.
47
48
 
48
- The `AC` prefix is the template's naming convention. Criterion IDs must be unique within the `spec`. Reports use the exact IDs from the `spec`.
49
+ Requirement IDs use the `REQ` prefix. They are unique within the `spec` and remain stable during revisions. Each requirement links to its verification through
50
+ `Verified by`. See [Requirement coverage](workflow.md#requirement-coverage).
49
51
 
50
- `Builder` and `verifier` numbers count saved `handoffs` in separate sequences.
52
+ The `AC` prefix is the template's naming convention. Criterion IDs must be unique within the `spec`. Reports use the exact IDs from the `spec`, including standalone
53
+ regression criteria without a requirement association. `Builder` and `verifier` numbers count saved `handoffs` in separate sequences.
51
54
 
52
55
  ## Escalation references
53
56
 
@@ -55,8 +58,8 @@ Read `B1/E1` as "escalation 1 in builder report 1". `B1` selects `handoffs/build
55
58
 
56
59
  `Escalation` numbers restart at `E1` in each `builder` report. `B1/E1` and `B2/E1` identify different questions, even if they concern the same topic.
57
60
 
58
- The `owner` discusses every current question with `Maestro`. `Maestro` records all answers and reasons together in that same `builder` report.
59
- See [Escalations](workflow.md#escalations) for the available choices and their effects.
61
+ The `owner` discusses every current question with `Maestro`. `Maestro` records all answers and reasons together in that same `builder` report. See
62
+ [Escalations](workflow.md#escalations) for the available choices and their effects.
60
63
 
61
64
  ## Finding references
62
65
 
@@ -66,8 +69,8 @@ Read `V1/F2` as "finding 2 in verifier report 1". `V1` selects `handoffs/verifie
66
69
 
67
70
  For example, a `finding` about a saved title can appear in a `Maestro` message like this:
68
71
 
69
- > Verifier report 1, finding 2 (`V1/F2`): the title returns to "Draft" after saving "Ready" and reopening the item.
70
- > Acceptance criterion 1 (`AC1`) requires the saved title to remain "Ready".
72
+ > Verifier report 1, finding 2 (`V1/F2`): the title returns to "Draft" after saving "Ready" and reopening the item. Acceptance criterion 1 (`AC1`) requires the saved
73
+ > title to remain "Ready".
71
74
 
72
75
  In this example, the finding's `acceptanceCriterion: "AC1"` connects the issue to criterion `AC1` in `spec.md`.
73
76
 
@@ -8,7 +8,7 @@ stays in the main `Maestro` conversation.
8
8
  The package supplies all three roles and the tools that save their results:
9
9
 
10
10
  | Role | Agent name | Definition |
11
- |--------------|----------------------|---------------------------------------------------|
11
+ | ------------ | -------------------- | ------------------------------------------------- |
12
12
  | `Builder` | `maestro.builder` | [`agents/builder.md`](../agents/builder.md) |
13
13
  | `Verifier` | `maestro.verifier` | [`agents/verifier.md`](../agents/verifier.md) |
14
14
  | `Simplifier` | `maestro.simplifier` | [`agents/simplifier.md`](../agents/simplifier.md) |
@@ -16,8 +16,8 @@ The package supplies all three roles and the tools that save their results:
16
16
  Each `run` starts with a fresh conversation, not the main session's conversation history. All three agents inherit project instructions, the owner's global `AGENTS.md`,
17
17
  and available skills. The global file normally lives at `~/.pi/agent/AGENTS.md`.
18
18
 
19
- `Maestro` supplies the `spec` ID, project directory, model, thinking level, and timeout. The agents read the approved `spec` and saved `artifacts` to understand the work.
20
- Earlier `artifacts` provide context, not proof.
19
+ `Maestro` supplies the `spec` ID, project directory, model, thinking level, and timeout. The agents read all approved documents (`proposal.md`, `spec.md`, and `design.md`
20
+ when present) and saved `artifacts` to understand the work. Earlier `artifacts` provide context, not proof.
21
21
 
22
22
  The `owner` does not call agent tools directly. `Maestro` starts the `builder` after `GREEN FLAG` approval. The `verifier` starts after successful `builder` completion,
23
23
  and the `simplifier` follows successful `verifier` completion.
@@ -36,9 +36,8 @@ If a `run` fails or returns without a valid saved result, `Maestro` reports the
36
36
 
37
37
  ## External configuration
38
38
 
39
- The `pi-subagents` extension must be installed and enabled in Pi. `Builder`, `verifier`, and `simplifier` model choices, thinking levels, and timeouts come
40
- from [Maestro configuration](configuration.md). Other `pi-subagents` configuration remains the owner's responsibility.
39
+ The `pi-subagents` extension must be installed and enabled in Pi. `Builder`, `verifier`, and `simplifier` model choices, thinking levels, and timeouts come from
40
+ [Maestro configuration](configuration.md). Other `pi-subagents` configuration remains the owner's responsibility.
41
41
 
42
- Only `maestro_run_simplifier` checks Git readiness, with `git rev-parse --is-inside-work-tree`.
43
- If readiness cannot be confirmed, it warns and completes without delegation.
44
- The `simplifier` uses Git to select all uncommitted code changes. `Maestro` does not change the Git index or create commits or checkpoints.
42
+ Only `maestro_run_simplifier` checks Git readiness, with `git rev-parse --is-inside-work-tree`. If readiness cannot be confirmed, it warns and completes without
43
+ delegation. The `simplifier` uses Git to select all uncommitted code changes. `Maestro` does not change the Git index or create commits or checkpoints.