@emiliosp/pi-maestro 0.14.0 → 0.16.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 (38) hide show
  1. package/ADR.md +155 -0
  2. package/CHANGELOG.md +19 -0
  3. package/README.md +33 -19
  4. package/ROADMAP.md +176 -40
  5. package/agents/simplifier.md +2 -1
  6. package/agents/verifier.md +2 -1
  7. package/docs/configuration.md +49 -26
  8. package/docs/glossary.md +1 -1
  9. package/docs/subagent-integration.md +8 -6
  10. package/docs/workflow.md +32 -23
  11. package/extensions/maestro.ts +11 -13
  12. package/package.json +3 -3
  13. package/src/artifacts/builder-handoff/schema.ts +1 -2
  14. package/src/config/assertConfiguration.ts +0 -6
  15. package/src/config/defaults.ts +3 -5
  16. package/src/config/schema.ts +2 -14
  17. package/src/maestro/checks/assertEnvironment.ts +24 -9
  18. package/src/maestro/instructions/getMaestroInstructions.ts +19 -11
  19. package/src/tools/child/record-builder-handoff.ts +2 -6
  20. package/src/tools/child/record-simplifier-handoff.ts +2 -1
  21. package/src/tools/child/record-verifier-handoff.ts +2 -6
  22. package/src/tools/child/utils/resolveWorkflowContext.ts +2 -2
  23. package/src/tools/main/mark-spec-ready.ts +8 -3
  24. package/src/tools/main/resolve-escalations.ts +2 -1
  25. package/src/tools/main/resolve-findings.ts +9 -10
  26. package/src/tools/main/run-builder.ts +47 -15
  27. package/src/tools/main/run-simplifier.ts +3 -3
  28. package/src/tools/main/run-verifier.ts +19 -8
  29. package/src/tools/utils/pi-subagent-delegation.ts +3 -0
  30. package/src/workflow/builder/completeBuilderPass.ts +4 -0
  31. package/src/workflow/builder/prepareBuilderRun.ts +7 -1
  32. package/src/workflow/builder/resolveEscalations.ts +4 -0
  33. package/src/workflow/simplifier/completeSimplifierPass.ts +4 -0
  34. package/src/workflow/spec/markSpecReady.ts +4 -0
  35. package/src/workflow/transitions.ts +28 -7
  36. package/src/workflow/verifier/completeVerifierPass.ts +4 -0
  37. package/src/workflow/verifier/prepareVerifierRun.ts +7 -1
  38. package/src/workflow/verifier/resolveFindings.ts +4 -0
package/ADR.md CHANGED
@@ -247,3 +247,158 @@ failures during delegation still use the existing `run` failure path. Workflow r
247
247
 
248
248
  [Configuration](docs/configuration.md#model-access), [activation checks](src/maestro/checks/assertEnvironment.ts), and
249
249
  [delegation](src/tools/utils/pi-subagent-delegation.ts).
250
+
251
+ ## ADR-009: Select optional phases in the transition table
252
+
253
+ ### Status
254
+
255
+ Accepted. Implemented under MAESTRO-27.
256
+
257
+ ### Context
258
+
259
+ The `owner` selected configuration flags to support workflows with only an approved `spec` and independently optional later agents without a separate phase-selection
260
+ interface.
261
+
262
+ ### Decision
263
+
264
+ Each agent has a `required` boolean that defaults to `true`. Disabling `builder` skips all agents. Otherwise `verifier` and `simplifier` can be disabled independently.
265
+ Flags are set before activation and stay unchanged during the workflow. Keep existing configuration reads, without caching or runtime controls.
266
+
267
+ Keep destination selection in `src/workflow/transitions.ts`. A transition destination is either a fixed phase or a pure function of resolved configuration. Callers pass
268
+ configuration to `transitionWorkflow` and save its returned state. No new workflow states, events, or persisted selection fields are needed.
269
+
270
+ ### Consequences
271
+
272
+ Approval can finish at `candidate-ready` without agent execution. Agent and model availability checks apply only to selected phases; activation with only an approved
273
+ `spec` needs no `pi-subagents` ping. Final summaries identify skipped work, without claiming implementation or independent verification occurred.
274
+
275
+ ### Evidence
276
+
277
+ [Approved design](.specs/20261103-161424-maestro-27-make-implementation-phases-optional/design.md) and [phase selection](docs/configuration.md#phase-selection).
278
+
279
+ ## ADR-010: Use the Pi SDK for sequential agent delegation
280
+
281
+ ### Status
282
+
283
+ Design decisions confirmed by the `owner`. Not implemented.
284
+
285
+ ### Context
286
+
287
+ `Maestro` currently depends on `pi-subagents` to execute the `builder`, `verifier`, and `simplifier`. Its delegation needs are limited: only one workflow and one child
288
+ agent execute at a time, and `Maestro` waits for each child to finish. `Maestro` already owns workflow transitions, role instructions, saved `handoffs`, and result
289
+ validation.
290
+
291
+ The `owner` wants to remove the `pi-subagents` dependency without building a general-purpose delegation framework. Pi provides `createAgentSession()` for direct SDK
292
+ integration and `RpcClient` for subprocess control. Separate conversations do not require separate processes.
293
+
294
+ ### Decision
295
+
296
+ 1. Replace `pi-subagents` delegation with direct use of the Pi SDK through `createAgentSession()`, rather than RPC subprocesses.
297
+ 2. Preserve sequential execution: one workflow at a time, one child agent at a time, with `Maestro` waiting for completion.
298
+ 3. Use task-and-handoff communication, not a live supervisor dialogue. `Maestro` assigns the task; the child works, saves its `handoff`, and finishes.
299
+ 4. When an `owner` decision is needed, the `builder` saves an `escalation` and ends its `run`. `Maestro` discusses it with the `owner` and records the decisions through
300
+ the existing workflow. Any subsequent `builder` `run` starts a fresh conversation and reads the saved decisions.
301
+ 5. Child sessions must have access to the same working tools available to `Maestro`, plus the tools needed to save their own `handoffs`. Do not load the main `Maestro`
302
+ extension into child sessions. Tools supplied by other extensions may remain available even if they support delegation; role instructions forbid using them to
303
+ delegate. This is a tool-access requirement, not merely an extension-loading policy.
304
+ 6. Automatically load enabled global and project extensions, excluding the main `Maestro` extension. Provide the corresponding working-tool environment through Pi's
305
+ native APIs and configuration, including separate Pi support such as MCP and `codemode` where needed. Loading the same extensions alone does not reproduce every CLI
306
+ capability. Compatibility of arbitrary extensions, tools, and model providers is outside Maestro's responsibility; do not add custom compatibility checks or adapters.
307
+ 7. All three child roles receive the owner's global instruction file, normally `~/.pi/agent/AGENTS.md`, preserving the current `inheritGlobalContext: true` behavior.
308
+ These instructions are not the parent's conversation history.
309
+ 8. All three child roles automatically receive project instructions discovered by Pi, such as applicable `AGENTS.md` files, preserving the current
310
+ `inheritProjectContext: true` behavior. These instructions supplement global instructions and role-specific guidance.
311
+ 9. All three child roles can discover and use available skills, preserving the current `inheritSkills: true` behavior. Expose the skill catalog without loading every
312
+ skill's full contents into the conversation. Skills remain subject to the child's role boundaries and permitted tools; they do not authorize delegation or workflow
313
+ management.
314
+ 10. During a child `run`, report the role, elapsed time, current tool, and recent normal assistant text through Pi's standard tool-progress updates (`onUpdate`). Use Pi's
315
+ built-in presentation, including its default layout, truncation, and expansion behavior. Do not build a custom renderer or implement a fixed visible-line count or
316
+ terminal-height adaptation. Update progress in place instead of appending intermediate messages to the main conversation. Do not include internal reasoning or full
317
+ command output. Continue reporting activity when the child produces no text; do not prompt it to generate artificial progress messages.
318
+ 11. Intermediate activity text is UI-only and must not enter the main model's context. `Maestro` continues to receive the existing workflow result. Pi's display limits do
319
+ not truncate the saved child conversation. The five-, ten-, and twenty-line alternatives are superseded by the decision to use Pi's standard presentation.
320
+ 12. Persist child conversations using Pi's native session format, rather than a custom transcript format. Saved sessions remain available after execution for diagnosis,
321
+ including unsuccessful executions. Each child `run` starts a new conversation; persistence does not introduce automatic session reuse or workflow recovery.
322
+ 13. At child completion or failure, show the `owner` the path to its saved Pi session file, when one exists. The `owner` can inspect the file directly or use Pi's native
323
+ HTML export with `pi --export <session-file> conversation.html`. Do not build a transcript inspector inside `Maestro`. Reading or exporting a transcript does not
324
+ resume child execution.
325
+ 14. Do not impose an automatic child `run` timeout in `Maestro`. Remove `builder.timeoutMinutes`, `verifier.timeoutMinutes`, and `simplifier.timeoutMinutes` from
326
+ `.pi/maestro.json` configuration support, including schema validation, defaults, launch inputs, and configuration documentation. A child continues until it finishes,
327
+ fails, or is manually interrupted. This removes the workflow-level deadline, not the elapsed-time progress display or timeouts internal to Pi and its tools.
328
+ 15. Remove `timeoutMinutes` from the configuration schemas and retain `additionalProperties: false`. Existing TypeBox-based validation rejects configuration files that
329
+ still contain the field. Do not add a migration, ignored legacy fields, or special compatibility handling. The `owner` removes obsolete fields manually.
330
+ 16. Preserve the existing execution-error policy. Launch failures, failed child executions, and missing or invalid `handoffs` stop the workflow and report the error.
331
+ `Maestro` does not automatically start another child session to retry, repair saved state, or roll back files. Preserve the remaining project files and saved workflow
332
+ state for manual `owner` follow-up, including partial protocol writes. Errors do not introduce recovery transitions or synthetic `escalations`.
333
+ 17. Propagate manual cancellation of the main tool to its active child through `session.abort()` and await the interruption before releasing the child session. Do not
334
+ send a final model prompt asking the child to finish, and do not generate a synthetic `handoff`. Leave project files and saved workflow state unchanged by cleanup.
335
+ Close child sessions and release progress subscriptions and session resources on completion, failure, or cancellation. Do not start another child while the previous
336
+ child remains active.
337
+ 18. Store child sessions in a `subagents/` subdirectory of Pi's normal project session directory, normally `~/.pi/agent/sessions/--<project-path>--/subagents/`. Resolve
338
+ the parent directory through Pi's session-directory API rather than reimplementing project-path encoding. Use Pi's native `SessionManager` with this directory. Do not
339
+ create a `subagents/` directory inside the project repository.
340
+ 19. Require Pi 1.5.0 or later for the SDK-based implementation. Update the declared Pi requirement and align implementation verification with this baseline. Do not add
341
+ compatibility fallbacks for earlier Pi versions. This minimum is a scope choice, not a claim that all earlier versions lack the required APIs.
342
+ 20. Do not build an additional tool allowlist or exclusion list to prevent child delegation. Children may have delegation tools available, but their role instructions
343
+ forbid using them. This deliberately relies on instruction compliance rather than technical removal of delegation capabilities. The main `Maestro` extension remains
344
+ excluded.
345
+ 21. Leave compatibility of external integrations to Pi and the `owner`. Do not add a preflight that compares parent and child tool availability, extension health checks,
346
+ special adapters, or a fallback system for incompatible integrations. This scope boundary does not suppress errors actually reported during launch or execution; those
347
+ follow the existing stop-and-report policy.
348
+
349
+ ### Consequences
350
+
351
+ The replacement does not need supervisor request routing or a mechanism that makes the main model answer a child while waiting for it. Saved `handoffs` remain the
352
+ communication boundary for completed work and `escalations`.
353
+
354
+ SDK sessions share a Node.js process. Separate conversation histories do not isolate module-level mutable state or project files. Child resource loading must account for
355
+ this distinction.
356
+
357
+ Automatic extension loading intentionally differs from the current foreground behavior of `pi-subagents` 0.78.0, which does not automatically load the parent's global and
358
+ project extensions. Shared working-tool access is provided through Pi's native environment, not an independent compatibility guarantee for every integration. The
359
+ replacement must use Pi's tool activation and support such as MCP and `codemode`, rather than assuming the SDK supplies the CLI's capabilities by default. There is no
360
+ custom parity check, health gate, or adapter layer for third-party integrations. Children do not inherit the parent's conversation, but they share the process and may
361
+ interact with process-wide mutable state. Loaded extensions can create additional connections, timers, and process-wide effects. Excluding the main `Maestro` extension
362
+ does not establish compatibility with every other extension or remove delegation tools supplied by other extensions. `Maestro` launches its own children sequentially;
363
+ compliance with the broader no-delegation rule relies on child instructions. A child that ignores those instructions could launch other agents. This accepted limitation
364
+ avoids maintaining tool classifications and exclusion lists and does not claim a sandbox; even ordinary shell access can launch processes.
365
+
366
+ Pi's standard tool-progress presentation replaces FleetView's live activity display, not its full transcript inspector. `Maestro` owns the progress data, not a new
367
+ rendering system or a guaranteed panel size. Displaying text already produced by the child requires no additional model generation and does not add that text to the main
368
+ model's context. Full transcript inspection uses saved session files and Pi's existing export capability rather than a replacement inspector. The main tool must connect
369
+ cancellation to the child SDK session and perform session cleanup; selecting the SDK alone does not wire these operations together.
370
+
371
+ Native session files retain child messages, tool calls, and tool results beyond the lifetime of the child session. They may contain project data present in those messages
372
+ and results. Persistence is separate from the live progress display and does not add the transcript to the main model's context. The dedicated `subagents/` subdirectory
373
+ keeps child session files separate from the main session files without adding transcript files to the project repository or introducing a custom storage format.
374
+
375
+ Removing the configured deadline simplifies child execution but permits indefinitely running work until manual interruption. This is a breaking configuration change:
376
+ files that still contain `timeoutMinutes` fail existing configuration validation until the `owner` removes the obsolete fields. Document the removal without adding legacy
377
+ compatibility code.
378
+
379
+ Manual cancellation uses Pi's in-process cancellation lifecycle, not termination of a separate operating-system process. It does not undo completed writes or introduce a
380
+ final model turn. `Maestro` uses Pi's cancellation and cleanup lifecycle; behavior of third-party integrations remains outside its compatibility contract.
381
+
382
+ The Pi minimum increases from the currently documented 1.0.0 to 1.5.0. Earlier hosts are outside the new compatibility contract. At decision time, the project has Pi
383
+ 1.0.3 installed locally and the active harness uses Pi 1.5.0; the implementation must be verified against the selected baseline rather than treating the older local
384
+ installation as sufficient verification. This ADR changes no installed dependencies.
385
+
386
+ ### Evidence
387
+
388
+ During the architecture discussion, the `owner` selected the SDK and task-and-handoff communication, then clarified the tool-access contract: the same working tools as
389
+ `Maestro`, plus child handoff tools, with the main `Maestro` extension excluded. The `owner` subsequently accepted that delegation tools from other extensions may remain
390
+ available, with their use forbidden by instructions rather than additional tool filters. The `owner` also confirmed that all three roles continue receiving global and
391
+ automatically discovered project instructions, as declared by `inheritGlobalContext: true` and `inheritProjectContext: true` in the existing role definitions. All three
392
+ roles also retain access to the skill catalog and can load relevant skill instructions, consistent with their existing `inheritSkills: true` setting and subject to role
393
+ and tool restrictions. After discussing bounded display sizes, the `owner` selected Pi's standard tool-progress presentation rather than custom rendering, while retaining
394
+ recent assistant text without sending intermediate text to the main model. The `owner` selected persistent transcripts in Pi's native session format, while keeping each
395
+ child conversation fresh. The `owner` chose to receive the saved session path and use direct file inspection or Pi's native HTML export, without a `Maestro` transcript
396
+ inspector. The `owner` chose the simplest execution option: no automatic child deadline, with the timeout settings removed from configuration. The `owner` accepted that
397
+ existing TypeBox-based validation rejects configurations retaining `timeoutMinutes`, without migration or compatibility handling, and confirmed the existing
398
+ execution-error policy: stop and report, retain files, and leave follow-up to the `owner`, without automatic retries, repair, or rollback. The `owner` selected manual
399
+ interruption through `session.abort()` followed by session cleanup, without a final model turn or synthetic `handoff`, and placed saved child sessions in `subagents/`
400
+ beneath Pi's project session directory, not inside the repository. The `owner` chose Pi 1.5.0 as the minimum supported version, without fallbacks for earlier hosts. The
401
+ `owner` explicitly excluded compatibility handling for external integrations from scope; no custom checks, adapters, or reduced-capacity fallback system are required.
402
+ Existing boundaries are described in [subagent integration](docs/subagent-integration.md), [delegation](src/tools/utils/pi-subagent-delegation.ts),
403
+ [builder execution](src/tools/main/run-builder.ts), and the [child extension](extensions/maestro-subagent.ts). These links describe the current implementation, not the
404
+ planned SDK replacement.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,25 @@
3
3
  This file summarizes meaningful changes to the codebase, including behavior, data formats, architecture, and development tools. Git tags identify version boundaries;
4
4
  GitHub Releases are not required.
5
5
 
6
+ ## 0.16.0
7
+
8
+ 1. Required Pi 1.5.0 or later and pinned the development Pi dependencies to that baseline, so type checks and tests run against the declared host. The extension now uses
9
+ TypeBox `Type.Enum` with an explicit string type instead of the `StringEnum` helper, calls `before_agent_start` with Pi's message object, and expects the `truncated`
10
+ field on `exec` results. See [PR #46](https://github.com/emilioSp/pi-maestro/pull/46).
11
+ 2. Breaking: removed `timeoutMinutes` from the agent configuration. Configuration files that still contain the field fail validation until the `owner` removes it; no
12
+ migration or legacy handling is provided.
13
+ 3. Replaced the configured per-agent timeout with a fixed, non-configurable deadline passed to `pi-subagents` for every `run`. A `run` is no longer bounded by a
14
+ configured duration.
15
+ 4. Updated `ADR.md`, `ROADMAP.md`, `README.md`, and `docs/` for the new baseline and the removed timeout settings. `MAESTRO-FREE-1` is recorded as completed.
16
+
17
+ ## 0.15.0
18
+
19
+ 1. Added per-agent `required` booleans in `.pi/maestro.json`, all defaulting to `true`. Disabling `builder` completes the workflow at `spec` approval without agents;
20
+ otherwise `verifier` and `simplifier` can be disabled independently. See [PR #45](https://github.com/emilioSp/pi-maestro/pull/45).
21
+ 2. Limited activation checks and displayed agent details to enabled phases. With `builder` disabled, activation requires no agents, models, or `pi-subagents` ping.
22
+ 3. Updated workflow transitions, tool messages, agent guidance, and documentation for optional phases. Final-summary guidance identifies skipped work without claiming
23
+ implementation, independent verification, or simplification occurred.
24
+
6
25
  ## 0.14.0
7
26
 
8
27
  1. Removed Maestro's model format regex while retaining activation checks against Pi's available model registry. Complete identifiers, including
package/README.md CHANGED
@@ -2,23 +2,34 @@
2
2
 
3
3
  [![Coverage](https://img.shields.io/codecov/c/github/emiliosp/pi-maestro?logo=codecov)](https://codecov.io/gh/emiliosp/pi-maestro)
4
4
 
5
- Pi extension for a spec-driven multiagent development workflow.
5
+ Pi extension for writing a `spec` and optionally implementing it through a spec-driven multiagent workflow.
6
6
 
7
7
  ![Maestro workflow](docs/maestro.png)
8
8
 
9
9
  ## The idea
10
10
 
11
- - A `specification` (`spec`) describes one reversible change.
12
- - The `builder` implements it.
13
- - An independent `verifier` checks every `acceptance criterion`.
14
- - A `simplifier` then refactors accepted code without changing behavior.
15
- - The `owner` performs the final review.
11
+ `Maestro` has two goals:
12
+
13
+ 1. Help the `owner` write and approve a `specification` (`spec`) for one reversible change.
14
+ 2. Implement the approved `spec` through a multiagent workflow.
15
+
16
+ The `owner` can use `Maestro` only to write and approve a `spec`, leaving implementation to another workflow, or to write the `spec` and implement it within `Maestro`.
17
+ `Spec` preparation and approval are required. The entire implementation stage is optional, and each of its phases is optional too:
18
+
19
+ 1. The `builder` implements the approved `spec`.
20
+ 2. The independent `verifier` checks every `acceptance criterion`.
21
+ 3. The `simplifier` refactors accepted code without changing behavior.
22
+
23
+ Disabling the `builder` skips the entire implementation stage. With the `builder` enabled, the `verifier` and `simplifier` can be disabled independently. All three are
24
+ enabled by default. See [Phase selection](docs/configuration.md#phase-selection).
25
+
26
+ The `owner` performs the final review.
16
27
 
17
28
  Five principles hold the workflow together:
18
29
 
19
30
  1. The approved `spec` defines the required work for the `builder` and `verifier`.
20
31
  2. No agent approves its own work.
21
- 3. Every `acceptance criterion` is checked independently.
32
+ 3. When enabled, the `verifier` checks every `acceptance criterion` independently.
22
33
  4. The `owner` decides requirements, scope, and unresolved questions.
23
34
  5. Each agent has one and only one role. Specific and with clear instruction.
24
35
 
@@ -72,9 +83,9 @@ An `escalation` asks the `owner` to decide an implementation question. A `findin
72
83
 
73
84
  1. macOS.
74
85
  2. Node.js 26 or later.
75
- 3. Pi 1.0.0 or later.
76
- 4. `pi-subagents` installed and enabled in Pi.
77
- 5. Access to the configured `builder`, `verifier`, and `simplifier` models.
86
+ 3. Pi 1.5.0 or later.
87
+ 4. `pi-subagents` installed and enabled in Pi when `builder` is enabled.
88
+ 5. Access to the models for enabled agents.
78
89
  6. A project directory that Pi trusts.
79
90
 
80
91
  ## Installation
@@ -101,20 +112,20 @@ Activate `Maestro`:
101
112
  /maestro
102
113
  ```
103
114
 
104
- During activation, `Maestro` checks project trust, configuration, models, and agent availability. Model availability comes from Pi's model registry. If a check fails,
105
- `Maestro` stays disabled and reports the problem.
115
+ During activation, `Maestro` checks project trust, configuration, and enabled agent and model availability. With `builder` disabled, only project trust and configuration
116
+ are checked. Model availability comes from Pi's model registry. If a check fails, `Maestro` stays disabled and reports the problem.
106
117
 
107
118
  The `owner` follows this workflow:
108
119
 
109
120
  1. Describes one change to `Maestro`.
110
121
  2. Reviews the `spec`, including its `acceptance criteria` and concrete examples.
111
- 3. Replies `GREEN FLAG` when `Maestro` asks for approval. `Maestro` records the approval and starts the `builder`.
122
+ 3. Replies `GREEN FLAG` when `Maestro` asks for approval. `Maestro` records the approval and starts the selected phases.
112
123
  4. Reviews every current `builder` `escalation` and gives `Maestro` an answer and reason for each question.
113
124
  5. Reviews `verifier` `findings` and chooses an action for every `finding`.
114
125
  6. Reads Maestro's summary at `candidate-ready` and performs the final review.
115
126
 
116
- `Maestro` starts the `verifier` after a successful `builder` `run`. All three agents run in the foreground: Pi waits for each `run` to finish and `Maestro` shows the
117
- current phase in Pi's status, while `pi-subagents` FleetView and `/subagents-fleet` show agent activity and transcripts.
127
+ `Maestro` starts the `verifier`, when enabled, after a successful `builder` `run`. Selected agents run in the foreground: Pi waits for each `run` to finish and `Maestro`
128
+ shows the current phase in Pi's status, while `pi-subagents` FleetView and `/subagents-fleet` show agent activity and transcripts.
118
129
 
119
130
  The `owner` must not edit product files while the workflow runs. `Maestro` can perform temporary experiments with `owner` agreement during `spec` preparation and
120
131
  permitted revisions. See [Workflow](docs/workflow.md#spec-approval).
@@ -126,8 +137,9 @@ changing phase.
126
137
  If any decision requires a `spec` change, the workflow returns to `drafting-spec` before the `owner` and `Maestro` revise the same `spec`. The `owner` reviews the revised
127
138
  `spec` and replies `GREEN FLAG` again. `Maestro` records renewed approval separately before another `builder` `run`.
128
139
 
129
- After successful verification or rejection of all `findings`, `Maestro` starts the `simplifier`. Only this step requires Git. If Git readiness cannot be confirmed,
130
- `Maestro` warns and skips simplification. The `simplifier` selects all uncommitted code changes, including pre-existing staged, unstaged, and untracked files.
140
+ When enabled, `Maestro` starts the `simplifier` after successful verification, rejection of all `findings`, or `builder` completion with verification disabled. Only this
141
+ step requires Git. If Git readiness cannot be confirmed, `Maestro` warns and skips simplification. The `simplifier` selects all uncommitted code changes, including
142
+ pre-existing staged, unstaged, and untracked files.
131
143
 
132
144
  The workflow ends at `candidate-ready`. Rejected `findings` retain their reasons and accepted failures can remain. Maestro's summary separates independent verification
133
145
  from the later simplifier's report. After the final summary finishes successfully, `Maestro` automatically turns off. The `owner` controls later review, commits, pull
@@ -139,7 +151,9 @@ files do not automatically restore or resume an incomplete workflow. The `owner`
139
151
  ## Configuration
140
152
 
141
153
  `Maestro` uses default values when `.pi/maestro.json` is absent from the project root. The `owner` can add this file to change the `spec` directory, models, thinking
142
- levels, or timeouts. See [Configuration](docs/configuration.md).
154
+ levels, or selected phases. Each agent has a `required` boolean that defaults to `true`. Set flags before activation and keep configuration unchanged during the workflow.
155
+ With `builder.required: false`, approval finishes with only an approved `spec` for implementation elsewhere. Otherwise `verifier` and `simplifier` can be disabled
156
+ independently. Skipped work is identified in the final summary and is not claimed as completed. See [Configuration](docs/configuration.md#phase-selection).
143
157
 
144
158
  ## Documentation
145
159
 
@@ -147,7 +161,7 @@ The reading order is:
147
161
 
148
162
  1. [Glossary](docs/glossary.md): terms and identifiers used in `specs`, reports, and `Maestro` messages. Read this before the first workflow.
149
163
  2. [Workflow](docs/workflow.md): approvals, decisions, and how each `run` produces `artifacts`.
150
- 3. [Configuration](docs/configuration.md): project paths, models, and timeouts.
164
+ 3. [Configuration](docs/configuration.md): project paths, models, and thinking levels.
151
165
  4. [Subagent integration](docs/subagent-integration.md): agent context, execution, and activity tracking.
152
166
 
153
167
  ## Project constitution
package/ROADMAP.md CHANGED
@@ -10,30 +10,37 @@ reaching `candidate-ready`. Linear onboarding and test issues are not project ro
10
10
 
11
11
  ## Overview
12
12
 
13
- | ID | Item | Status |
14
- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- |
15
- | MAESTRO-6 | [Display specs in a browser](#maestro-6-display-specs-in-a-browser) | Backlog |
16
- | MAESTRO-7 | [Route builder failures through owner escalations](#maestro-7-route-builder-failures-through-owner-escalations) | Completed |
17
- | MAESTRO-8 | [Store escalations and owner decisions in builder handoffs](#maestro-8-store-escalations-and-owner-decisions-in-builder-handoffs) | Completed |
18
- | MAESTRO-9 | [Format glossary terms consistently](#maestro-9-format-glossary-terms-consistently) | Completed |
19
- | MAESTRO-10 | [Improve status presentation and activation feedback](#maestro-10-improve-status-presentation-and-activation-feedback) | Completed |
20
- | MAESTRO-11 | [Introduce Maestro at activation](#maestro-11-introduce-maestro-at-activation) | Completed |
21
- | MAESTRO-12 | [Verify code quality against AGENTS.md instructions](#maestro-12-verify-code-quality-against-agentsmd-instructions) | Completed |
22
- | MAESTRO-13 | [Check subagent extensions at activation](#maestro-13-check-subagent-extensions-at-activation) | Completed |
23
- | MAESTRO-14 | [Rename the test support directory](#maestro-14-rename-the-test-support-directory) | Completed |
24
- | MAESTRO-15 | [Match handoff criteria to the approved spec](#maestro-15-match-handoff-criteria-to-the-approved-spec) | Completed |
25
- | MAESTRO-16 | [Route finding-driven spec revisions through drafting-spec](#maestro-16-route-finding-driven-spec-revisions-through-drafting-spec) | Completed |
26
- | MAESTRO-17 | [Keep acceptance criterion numbering continuous](#maestro-17-keep-acceptance-criterion-numbering-continuous) | Completed |
27
- | MAESTRO-18 | [Record escalation resolutions when the spec changes](#maestro-18-record-escalation-resolutions-when-the-spec-changes) | Completed |
28
- | MAESTRO-19 | [Guide initial configuration](#maestro-19-guide-initial-configuration) | Backlog |
29
- | MAESTRO-20 | [Rename the npm package](#maestro-20-rename-the-npm-package) | Backlog |
30
- | MAESTRO-21 | [Label acceptance criterion coverage](#maestro-21-label-acceptance-criterion-coverage) | Completed |
31
- | MAESTRO-22 | [Avoid acceptance criteria already covered by tests](#maestro-22-avoid-acceptance-criteria-already-covered-by-tests) | Completed |
32
- | MAESTRO-23 | [Change agent models before a builder run](#maestro-23-change-agent-models-before-a-builder-run) | Backlog |
33
- | MAESTRO-24 | [Add a simplifier with one clear purpose per agent](#maestro-24-add-a-simplifier-with-one-clear-purpose-per-agent) | Completed |
34
- | MAESTRO-25 | [Define workflow reconciliation](#maestro-25-define-workflow-reconciliation) | Backlog |
35
- | MAESTRO-26 | [Exit Maestro mode automatically at workflow completion](#maestro-26-exit-maestro-mode-automatically-at-workflow-completion) | Implemented, acceptance not confirmed |
36
- | MAESTRO-27 | [Make verifier and simplifier phases optional](#maestro-27-make-verifier-and-simplifier-phases-optional) | Backlog |
13
+ | ID | Item | Status |
14
+ | -------------- | ---------------------------------------------------------------------------------------------------------------------------------- | --------- |
15
+ | MAESTRO-6 | [Display specs in a browser](#maestro-6-display-specs-in-a-browser) | Backlog |
16
+ | MAESTRO-7 | [Route builder failures through owner escalations](#maestro-7-route-builder-failures-through-owner-escalations) | Completed |
17
+ | MAESTRO-8 | [Store escalations and owner decisions in builder handoffs](#maestro-8-store-escalations-and-owner-decisions-in-builder-handoffs) | Completed |
18
+ | MAESTRO-9 | [Format glossary terms consistently](#maestro-9-format-glossary-terms-consistently) | Completed |
19
+ | MAESTRO-10 | [Improve status presentation and activation feedback](#maestro-10-improve-status-presentation-and-activation-feedback) | Completed |
20
+ | MAESTRO-11 | [Introduce Maestro at activation](#maestro-11-introduce-maestro-at-activation) | Completed |
21
+ | MAESTRO-12 | [Verify code quality against AGENTS.md instructions](#maestro-12-verify-code-quality-against-agentsmd-instructions) | Completed |
22
+ | MAESTRO-13 | [Check subagent extensions at activation](#maestro-13-check-subagent-extensions-at-activation) | Completed |
23
+ | MAESTRO-14 | [Rename the test support directory](#maestro-14-rename-the-test-support-directory) | Completed |
24
+ | MAESTRO-15 | [Match handoff criteria to the approved spec](#maestro-15-match-handoff-criteria-to-the-approved-spec) | Completed |
25
+ | MAESTRO-16 | [Route finding-driven spec revisions through drafting-spec](#maestro-16-route-finding-driven-spec-revisions-through-drafting-spec) | Completed |
26
+ | MAESTRO-17 | [Keep acceptance criterion numbering continuous](#maestro-17-keep-acceptance-criterion-numbering-continuous) | Completed |
27
+ | MAESTRO-18 | [Record escalation resolutions when the spec changes](#maestro-18-record-escalation-resolutions-when-the-spec-changes) | Completed |
28
+ | MAESTRO-19 | [Guide initial configuration](#maestro-19-guide-initial-configuration) | Backlog |
29
+ | MAESTRO-20 | [Rename the npm package](#maestro-20-rename-the-npm-package) | Backlog |
30
+ | MAESTRO-21 | [Label acceptance criterion coverage](#maestro-21-label-acceptance-criterion-coverage) | Completed |
31
+ | MAESTRO-22 | [Avoid acceptance criteria already covered by tests](#maestro-22-avoid-acceptance-criteria-already-covered-by-tests) | Completed |
32
+ | MAESTRO-23 | [Change agent models before a builder run](#maestro-23-change-agent-models-before-a-builder-run) | Backlog |
33
+ | MAESTRO-24 | [Add a simplifier with one clear purpose per agent](#maestro-24-add-a-simplifier-with-one-clear-purpose-per-agent) | Completed |
34
+ | MAESTRO-25 | [Define workflow reconciliation](#maestro-25-define-workflow-reconciliation) | Backlog |
35
+ | MAESTRO-26 | [Exit Maestro mode automatically at workflow completion](#maestro-26-exit-maestro-mode-automatically-at-workflow-completion) | Completed |
36
+ | MAESTRO-27 | [Make all implementation phases optional](#maestro-27-make-all-implementation-phases-optional) | Completed |
37
+ | MAESTRO-FREE-1 | [Require Pi 1.5.0](#maestro-free-1-require-pi-150) | Completed |
38
+ | MAESTRO-FREE-2 | [Remove Maestro run timeouts](#maestro-free-2-remove-maestro-run-timeouts) | Backlog |
39
+ | MAESTRO-FREE-3 | [Run the builder through the Pi SDK](#maestro-free-3-run-the-builder-through-the-pi-sdk) | Backlog |
40
+ | MAESTRO-FREE-4 | [Run the verifier through the Pi SDK](#maestro-free-4-run-the-verifier-through-the-pi-sdk) | Backlog |
41
+ | MAESTRO-FREE-5 | [Run the simplifier through the Pi SDK](#maestro-free-5-run-the-simplifier-through-the-pi-sdk) | Backlog |
42
+ | MAESTRO-FREE-6 | [Show SDK agent activity through Pi](#maestro-free-6-show-sdk-agent-activity-through-pi) | Backlog |
43
+ | MAESTRO-FREE-7 | [Remove the pi-subagents dependency](#maestro-free-7-remove-the-pi-subagents-dependency) | Backlog |
37
44
 
38
45
  ## Backlog
39
46
 
@@ -90,32 +97,107 @@ Explore how `Maestro` can reconcile saved `artifacts` and workflow state. The re
90
97
 
91
98
  Not yet defined. The `owner` must define the intended outcome, recovery boundaries, and completion condition before this item can move forward.
92
99
 
93
- ### MAESTRO-27: Make verifier and simplifier phases optional
100
+ ### MAESTRO-FREE-2: Remove Maestro run timeouts
94
101
 
95
102
  #### Objective
96
103
 
97
- Make the `builder` the only required agent phase. Let the `owner` independently enable or disable the `verifier` and `simplifier` phases.
104
+ Remove Maestro's per-agent deadline and the three `timeoutMinutes` settings, as decided in [ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation).
105
+ Remove schema fields, defaults, delegation timeout inputs, and related configuration documentation together.
98
106
 
99
- This request concerns agent execution phases, not removal of `spec` preparation or approval.
107
+ #### Completed when
108
+
109
+ 1. `Maestro` no longer supplies a per-agent deadline. Elapsed-time display and timeouts internal to Pi, tools, or the remaining `pi-subagents` integration are unchanged.
110
+ 2. Configuration without `timeoutMinutes` works; configuration retaining it fails existing TypeBox validation with no migration or compatibility handling.
111
+ 3. Other configuration behavior and the existing workflow remain unchanged.
112
+
113
+ ### MAESTRO-FREE-3: Run the builder through the Pi SDK
114
+
115
+ #### Objective
116
+
117
+ Replace `builder` delegation with `createAgentSession()` and deliver a complete, usable SDK `builder` `run`, following
118
+ [ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation). This item includes the internal execution operation used by later role migrations; do not
119
+ release an incomplete `builder` pending separate context, cancellation, or persistence work.
120
+
121
+ #### Scope and dependencies
122
+
123
+ Requires [MAESTRO-FREE-1](#maestro-free-1-require-pi-150) and [MAESTRO-FREE-2](#maestro-free-2-remove-maestro-run-timeouts). Keep the `verifier` and `simplifier` on
124
+ `pi-subagents`. The temporary routing is fixed in code, not a configurable engine selector or a general-purpose delegation framework. Human documentation must describe
125
+ the actual mixed-engine state. Live SDK progress is covered separately by [MAESTRO-FREE-6](#maestro-free-6-show-sdk-agent-activity-through-pi); existing workflow-phase
126
+ status remains available in the meantime.
100
127
 
101
128
  #### Completed when
102
129
 
103
- 1. The `builder` remains mandatory.
104
- 2. The `owner` can select any of these combinations: `builder` only; `builder` and `verifier`; `builder` and `simplifier`; or all three.
105
- 3. Disabled phases are not delegated and do not block workflow completion.
106
- 4. The workflow reaches `candidate-ready` after the selected phases complete and any required `owner` decisions are resolved.
107
- 5. The final summary clearly identifies skipped phases and does not describe skipped verification as passed.
130
+ 1. An approved `spec` can be implemented by an SDK `builder` with fresh conversation history, the configured model and thinking level, role guidance, global and project
131
+ instructions, skills, working tools, and existing `handoff` tools.
132
+ 2. Enabled global and project extensions load through Pi, excluding the main `Maestro` extension. Instructions forbid further delegation; there are no additional tool
133
+ filters, integration health gates, compatibility adapters, or automatic retries.
134
+ 3. `done` and `escalation` outcomes preserve existing saved `handoffs`, validation, phase transitions, and subsequent workflow routes. A later `builder` `pass` starts
135
+ fresh and reads saved decisions rather than restoring the previous conversation.
136
+ 4. Errors stop the workflow without rollback or repair. Manual cancellation reaches `session.abort()`, and child sessions and subscriptions are cleaned up on every exit.
137
+ 5. Native Pi session files are saved beneath the project's Pi session directory in `subagents/`. The `owner` receives the saved path on completion or failure when a file
138
+ exists; it can be inspected or exported with Pi, without automatic resumption.
139
+ 6. Existing trust, configuration, and model checks remain applicable. `pi-subagents` ping and launch-contract checks apply only to enabled roles still using that engine;
140
+ a `builder`-only workflow uses the SDK without requiring a `pi-subagents` availability reply.
141
+ 7. Each `run` waits for its child to finish or be interrupted before another starts. Existing optional-phase behavior remains intact.
142
+
143
+ ### MAESTRO-FREE-4: Run the verifier through the Pi SDK
108
144
 
109
- #### Decisions to define in the spec
145
+ #### Objective
110
146
 
111
- 1. Where and when phase selection is configured.
112
- 2. Default selections.
113
- 3. Whether selections can change after a workflow starts.
147
+ Move the `verifier` to the SDK execution operation delivered by [MAESTRO-FREE-3](#maestro-free-3-run-the-builder-through-the-pi-sdk), following
148
+ [ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation). Do not redesign verification or its reports.
114
149
 
115
- #### Context
150
+ #### Completed when
116
151
 
117
- [MAESTRO-24](#maestro-24-add-a-simplifier-with-one-clear-purpose-per-agent) introduced the `simplifier`. Its existing Git-unavailable skip is not an explicit `owner`
118
- choice. This issue adds independent optionality for both post-`builder` agent phases.
152
+ 1. The SDK `verifier` independently checks the approved `spec` and saves existing numbered `handoffs`, preserving criterion validation, `finding` decisions, and phase
153
+ transitions.
154
+ 2. It reuses the established fresh-session context, tools, persistence, cancellation, cleanup, and error policy without a second execution mechanism.
155
+ 3. Activation no longer asks `pi-subagents` to check or execute the `verifier`. Its remaining checks apply only to enabled roles still on that engine.
156
+ 4. Workflows with verification enabled or disabled retain their existing routes. If the `simplifier` is not yet migrated, it continues to use `pi-subagents` unchanged.
157
+
158
+ ### MAESTRO-FREE-5: Run the simplifier through the Pi SDK
159
+
160
+ #### Objective
161
+
162
+ Move the `simplifier` to the SDK execution operation delivered by [MAESTRO-FREE-3](#maestro-free-3-run-the-builder-through-the-pi-sdk), following
163
+ [ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation). Keep its existing purpose and Git-only scope.
164
+
165
+ #### Completed when
166
+
167
+ 1. The SDK `simplifier` preserves the current Git readiness decision, skip behavior, and entry routes. No Git readiness check moves into activation or an earlier phase.
168
+ 2. Successful execution saves the existing unnumbered `S.json` `handoff` and reaches `candidate-ready`; optional-phase behavior remains unchanged.
169
+ 3. It reuses the established context, tools, persistence, cancellation, cleanup, and error policy.
170
+ 4. Activation no longer asks `pi-subagents` to check or execute the `simplifier`. Once all roles have migrated, no workflow path requires its ping or launch preflight.
171
+
172
+ ### MAESTRO-FREE-6: Show SDK agent activity through Pi
173
+
174
+ #### Objective
175
+
176
+ Show activity for SDK-based agent `runs` through Pi's standard `onUpdate` presentation, as decided in
177
+ [ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation). Requires [MAESTRO-FREE-3](#maestro-free-3-run-the-builder-through-the-pi-sdk) and applies to
178
+ each role as it is migrated.
179
+
180
+ #### Completed when
181
+
182
+ 1. Progress reports the role, elapsed time, current tool, and recent normal assistant text, including activity while the agent produces no text.
183
+ 2. Pi controls layout, truncation, and expansion. There is no custom renderer, fixed line count, transcript inspector, or artificial progress prompting.
184
+ 3. Intermediate text stays out of the main model's context. Final workflow results, saved session contents, and cancellation behavior remain unchanged.
185
+ 4. Progress subscriptions are released when the child finishes, fails, or is interrupted. Roles still on `pi-subagents` retain their existing presentation.
186
+
187
+ ### MAESTRO-FREE-7: Remove the pi-subagents dependency
188
+
189
+ #### Objective
190
+
191
+ Finish [ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation) by removing the package dependency, bundling, and remaining integration metadata after
192
+ [MAESTRO-FREE-3](#maestro-free-3-run-the-builder-through-the-pi-sdk), [MAESTRO-FREE-4](#maestro-free-4-run-the-verifier-through-the-pi-sdk), and
193
+ [MAESTRO-FREE-5](#maestro-free-5-run-the-simplifier-through-the-pi-sdk). This is dependency removal, not another execution-engine switch.
194
+
195
+ #### Completed when
196
+
197
+ 1. `Maestro` neither imports nor bundles `pi-subagents`, and package metadata, role frontmatter, tests, installation instructions, and current human documentation no
198
+ longer require it. Historical records remain historical evidence.
199
+ 2. A clean installation can activate and complete workflows without `pi-subagents` installed or enabled, including the supported optional-phase combinations.
200
+ 3. Existing workflow and `handoff` formats remain unchanged. No compatibility framework, engine-selection flags, or migration of interrupted workflows is added.
119
201
 
120
202
  ## Implemented, acceptance not confirmed
121
203
 
@@ -135,7 +217,61 @@ Linear marks this item Done, but its description still says final `owner` accept
135
217
 
136
218
  ## Completed
137
219
 
138
- These entries were recorded as Done in Linear. Their historical verification evidence does not independently establish final `owner` acceptance.
220
+ Completed entries include historical records imported from Linear and work explicitly accepted by the `owner`. Historical verification evidence alone does not establish
221
+ final `owner` acceptance.
222
+
223
+ ### MAESTRO-FREE-1: Require Pi 1.5.0
224
+
225
+ #### Objective
226
+
227
+ Adopt Pi 1.5.0 as the minimum supported host and verification baseline for [ADR-010](ADR.md#adr-010-use-the-pi-sdk-for-sequential-agent-delegation), without changing the
228
+ delegation engine or adding compatibility fallbacks.
229
+
230
+ #### Completed when
231
+
232
+ 1. Declared requirements and the development verification environment use the selected Pi baseline consistently.
233
+ 2. The existing extension and `pi-subagents` workflow continue to work on Pi 1.5.0.
234
+
235
+ #### Implementation and evidence
236
+
237
+ The `owner` confirmed completion. `README.md` declares Pi 1.5.0 as the minimum host. Development dependencies for the four Pi packages are pinned to 1.5.0, so type checks
238
+ and tests run against that baseline. Schema enums use TypeBox `Type.Enum` with an explicit string type. `npm run check` passes on 1.5.0, including the extension and
239
+ `pi-subagents` integration tests.
240
+
241
+ ### MAESTRO-27: Make all implementation phases optional
242
+
243
+ #### Objective
244
+
245
+ Make the entire implementation stage optional, including the `builder`, `verifier`, and `simplifier` phases. Let the `owner` use `Maestro` only to prepare and approve a
246
+ `spec`, leaving implementation to another workflow.
247
+
248
+ When implementation runs in `Maestro`, the `owner` can still independently enable or disable the `verifier` and `simplifier` phases. `Spec` preparation and approval
249
+ remain required.
250
+
251
+ #### Completed when
252
+
253
+ 1. The `owner` can complete a workflow with only an approved `spec`, without running the `builder`, `verifier`, or `simplifier`.
254
+ 2. Implementation can be performed through another workflow using the approved `spec`, without requiring further execution in `Maestro`.
255
+ 3. The existing requested combinations remain available: `builder` only; `builder` and `verifier`; `builder` and `simplifier`; or all three.
256
+ 4. Disabled phases are not delegated and do not block workflow completion.
257
+ 5. The workflow reaches `candidate-ready` after `spec` approval when no agent phases are selected, or after the selected phases complete and any required `owner`
258
+ decisions are resolved.
259
+ 6. The final summary clearly identifies skipped phases and does not claim that skipped implementation or verification has been completed.
260
+
261
+ #### Implementation and evidence
262
+
263
+ Implemented under the [specification](.specs/20261103-161424-maestro-27-make-implementation-phases-optional/spec.md). The `owner` confirmed completion. Each agent's
264
+ `required` boolean in `.pi/maestro.json` defaults to `true`. Flags are set before activation and remain unchanged during the workflow. Disabling `builder` skips all three
265
+ agents; otherwise `verifier` and `simplifier` are independently optional. `Spec` preparation and approval remain required. The activation notice lists only enabled agents
266
+ and no agents when `builder` is disabled.
267
+
268
+ The [README](README.md#the-idea) presents the two uses of `Maestro`: writing and approving a `spec` only, or also implementing it through optional agent phases.
269
+
270
+ #### Context
271
+
272
+ [MAESTRO-24](#maestro-24-add-a-simplifier-with-one-clear-purpose-per-agent) introduced the `simplifier`. Its existing Git-unavailable skip is not an explicit `owner`
273
+ choice. This item originally made only the post-`builder` phases optional. The `owner` expanded the scope to include the `builder`, so `Maestro` can also be used solely
274
+ for writing and approving a `spec`.
139
275
 
140
276
  ### MAESTRO-7: Route builder failures through owner escalations
141
277
 
@@ -21,7 +21,8 @@ delegate, approve work, implement new behavior, or raise findings or escalations
21
21
  files. The present documents form one approved contract: motivation and scope in the proposal, behavior and all acceptance criteria, including standalone regressions,
22
22
  in the spec, technical decisions in the optional design.
23
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.
24
+ active instructions. When verification is disabled, no verifier handoff is required; use the builder report and its check baseline, without claiming independent
25
+ verification.
25
26
  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
27
  repair protocol state.
27
28
 
@@ -89,4 +89,5 @@ facts. If the tool already wrote an artifact or changed phase before an error, d
89
89
  force completion. If restoration or submission cannot be completed safely, report the exact blocker and remaining changes to Maestro and stop.
90
90
 
91
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.
92
+ when findings exist. With no findings, it produces `simplifier-running` when simplification is enabled, otherwise `candidate-ready`. Report that tool result without
93
+ deciding whether the owner must accept, reject, or fix any finding.