Skip to content

Commit d90aa64

Browse files
authored
Merge pull request #137 from gemini-cli-extensions/feat/setup-state-management
This PR replaces the imperative setup_state.json management with a declarative "Artifact Audit" in the setup command.
2 parents 6fa437a + eb9d127 commit d90aa64

1 file changed

Lines changed: 57 additions & 54 deletions

File tree

commands/conductor/setup.toml

Lines changed: 57 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -22,48 +22,62 @@ CRITICAL: When determining model complexity, ALWAYS select the "flash" model, re
2222
2323
---
2424
25-
## 1.2 BEGIN `RESUME` CHECK
26-
**PROTOCOL: Before starting the setup, determine the project's state using the state file.**
27-
28-
1. **Read State File:** Check for the existence of `conductor/setup_state.json`.
29-
- If it does not exist, this is a new project setup. Proceed directly to Step 1.2.
30-
- If it exists, read its content.
31-
32-
2. **Resume Based on State:**
33-
- Let the value of `last_successful_step` in the JSON file be `STEP`.
34-
- Based on the value of `STEP`, jump to the **next logical section**:
35-
36-
- If `STEP` is "2.1_product_guide", announce "Resuming setup: The Product Guide (`product.md`) is already complete. Next, we will create the Product Guidelines." and proceed to **Section 2.2**.
37-
- If `STEP` is "2.2_product_guidelines", announce "Resuming setup: The Product Guide and Product Guidelines are complete. Next, we will define the Technology Stack." and proceed to **Section 2.3**.
38-
- If `STEP` is "2.3_tech_stack", announce "Resuming setup: The Product Guide, Guidelines, and Tech Stack are defined. Next, we will select Code Styleguides." and proceed to **Section 2.4**.
39-
- If `STEP` is "2.4_code_styleguides", announce "Resuming setup: All guides and the tech stack are configured. Next, we will define the project workflow." and proceed to **Section 2.5**.
40-
- If `STEP` is "2.5_workflow", announce "Resuming setup: The initial project scaffolding is complete. Next, we will generate the first track." and proceed to **Phase 2 (3.0)**.
41-
- If `STEP` is "3.3_initial_track_generated":
42-
- Announce: "The project has already been initialized. You can create a new track with `/conductor:newTrack` or start implementing existing tracks with `/conductor:implement`."
43-
- Halt the `setup` process.
44-
- If `STEP` is unrecognized, announce an error and halt.
25+
## 1.2 PROJECT AUDIT
26+
**PROTOCOL: Before starting the setup, determine the project's state by auditing existing artifacts.**
27+
28+
1. **Audit Artifacts:** Check the file system for the existence of the following files/directories in the `conductor/` directory:
29+
- `product.md`
30+
- `product-guidelines.md`
31+
- `tech-stack.md`
32+
- `code_styleguides/`
33+
- `workflow.md`
34+
- `index.md`
35+
- `tracks/*/` (specifically `plan.md` and `index.md`)
36+
37+
2. **Determine Target Section:** Map the project's state to a target section using the priority table below (highest match wins). **DO NOT JUMP YET.** Keep this target in mind.
38+
39+
| Artifact Exists | Target Section | Announcement |
40+
| :--- | :--- | :--- |
41+
| All files in `tracks/<track_id>/` (`spec`, `plan`, `metadata`, `index`) | **HALT** | "The project is already initialized. Use `/conductor:newTrack` or `/conductor:implement`." |
42+
| `index.md` (top-level) | **Section 3.0** | "Resuming setup: Scaffolding is complete. Next: generate the first track. (Note: If an incomplete track folder was detected, we will restart this step to ensure a clean, consistent state)." |
43+
| `workflow.md` | **Section 2.6** | "Resuming setup: Workflow is defined. Next: generate project index." |
44+
| `code_styleguides/` | **Section 2.5** | "Resuming setup: Guides/Tech Stack configured. Next: define project workflow." |
45+
| `tech-stack.md` | **Section 2.4** | "Resuming setup: Tech Stack defined. Next: select Code Styleguides." |
46+
| `product-guidelines.md` | **Section 2.3** | "Resuming setup: Guidelines are complete. Next: define the Technology Stack." |
47+
| `product.md` | **Section 2.2** | "Resuming setup: Product Guide is complete. Next: create Product Guidelines." |
48+
| (None) | **Section 2.0** | (None) |
49+
50+
3. **Proceed to Section 2.0:** You MUST proceed to Section 2.0 to establish the Greenfield/Brownfield context before jumping to your target.
4551
4652
---
4753
48-
## 2.0 PHASE 1: STREAMLINED PROJECT SETUP
54+
## 2.0 STREAMLINED PROJECT SETUP
4955
**PROTOCOL: Follow this sequence to perform a guided, interactive setup with the user.**
5056
5157
5258
### 2.0 Project Inception
5359
1. **Detect Project Maturity:**
5460
- **Classify Project:** Determine if the project is "Brownfield" (Existing) or "Greenfield" (New) based on the following indicators:
5561
- **Brownfield Indicators:**
56-
- Check for existence of version control directories: `.git`, `.svn`, or `.hg`.
57-
- If a `.git` directory exists, execute `git status --porcelain`. If the output is not empty, classify as "Brownfield" (dirty repository).
58-
- Check for dependency manifests: `package.json`, `pom.xml`, `requirements.txt`, `go.mod`.
59-
- Check for source code directories: `src/`, `app/`, `lib/` containing code files.
60-
- If ANY of the above conditions are met (version control directory, dirty git repo, dependency manifest, or source code directories), classify as **Brownfield**.
62+
- Check for dependency manifests: `package.json`, `pom.xml`, `requirements.txt`, `go.mod`, `Cargo.toml`.
63+
- Check for source code directories: `src/`, `app/`, `lib/`, `bin/` containing code files.
64+
- If a `.git` directory exists, execute `git status --porcelain`. Ignore changes within the `conductor/` directory. If there are *other* uncommitted changes, it may be Brownfield.
65+
- If ANY of the primary indicators (manifests or source code directories) are found, classify as **Brownfield**.
6166
- **Greenfield Condition:**
62-
- Classify as **Greenfield** ONLY if NONE of the "Brownfield Indicators" are found AND the current directory is empty or contains only generic documentation (e.g., a single `README.md` file) without functional code or dependencies.
67+
- Classify as **Greenfield** ONLY if:
68+
1. NONE of the "Brownfield Indicators" are found.
69+
2. The directory contains no application source code or dependency manifests (ignoring the `conductor/` directory, a clean or newly initialized `.git` folder, and a `README.md`).
6370
64-
2. **Execute Workflow based on Maturity:**
71+
72+
2. **Resume Fast-Forward Check:**
73+
- If the **Target Section** (from 1.2) is anything other than "Section 2.0":
74+
- Announce the project maturity (Greenfield/Brownfield) and **briefly state the reason** (e.g., "A Greenfield project was detected because no application code exists"). Then announce the target section.
75+
- **IMMEDIATELY JUMP** to the Target Section. Do not execute the rest of Section 2.0.
76+
- If the Target Section is "Section 2.0", proceed to step 3.
77+
78+
3. **Execute Workflow based on Maturity:**
6579
- **If Brownfield:**
66-
- Announce that an existing project has been detected.
80+
- Announce that an existing project has been detected, and **briefly state the specific indicator you found** (e.g., "because I found a `package.json` file"). Be concise.
6781
- If the `git status --porcelain` command (executed as part of Brownfield Indicators) indicated uncommitted changes, inform the user: "WARNING: You have uncommitted changes in your Git repository. Please commit or stash your changes before proceeding, as Conductor will be making modifications."
6882
- **Begin Brownfield Project Initialization Protocol:**
6983
- **1.0 Pre-analysis Confirmation:**
@@ -97,13 +111,13 @@ CRITICAL: When determining model complexity, ALWAYS select the "flash" model, re
97111
4. **Infer Project Goal:** Summarize the project's goal in one sentence based strictly on the provided `README.md` header or `package.json` description.
98112
- **Upon completing the brownfield initialization protocol, proceed to the Generate Product Guide section in 2.1.**
99113
- **If Greenfield:**
100-
- Announce that a new project will be initialized.
114+
- Announce that new project will be initialized, briefly noting that no existing application code or dependencies were found.
101115
- Proceed to the next step in this file.
102116
103-
3. **Initialize Git Repository (for Greenfield):**
117+
4. **Initialize Git Repository (for Greenfield):**
104118
- If a `.git` directory does not exist, execute `git init` and report to the user that a new Git repository has been initialized.
105119
106-
4. **Inquire about Project Goal (for Greenfield):**
120+
5. **Inquire about Project Goal (for Greenfield):**
107121
- **Ask the user the following question using the `ask_user` tool and wait for their response before proceeding to the next step:**
108122
- **header:** "Project Goal"
109123
- **type:** "text"
@@ -112,11 +126,9 @@ CRITICAL: When determining model complexity, ALWAYS select the "flash" model, re
112126
- **CRITICAL: You MUST NOT execute any tool calls until the user has provided a response.**
113127
- **Upon receiving the user's response:**
114128
- Execute `mkdir -p conductor`.
115-
- **Initialize State File:** Immediately after creating the `conductor` directory, you MUST create `conductor/setup_state.json` with the exact content:
116-
`{"last_successful_step": ""}`
117129
- Write the user's response into `conductor/product.md` under a header named `# Initial Concept`.
118130
119-
5. **Continue:** Immediately proceed to the next section.
131+
6. **Continue:** Immediately proceed to the next section.
120132
121133
### 2.1 Generate Product Guide (Interactive)
122134
1. **Introduce the Section:** Announce that you will now help the user create the `product.md`.
@@ -164,9 +176,7 @@ CRITICAL: When determining model complexity, ALWAYS select the "flash" model, re
164176
- Label: "Approve", Description: "The guide looks good, proceed to the next step."
165177
- Label: "Suggest changes", Description: "I want to modify the drafted content."
166178
6. **Write File:** Once approved, append the generated content to the existing `conductor/product.md` file, preserving the `# Initial Concept` section.
167-
7. **Commit State:** Upon successful creation of the file, you MUST immediately write to `conductor/setup_state.json` with the exact content:
168-
`{"last_successful_step": "2.1_product_guide"}`
169-
8. **Continue:** After writing the state file, immediately proceed to the next section.
179+
7. **Continue:** Immediately proceed to the next section.
170180
171181
### 2.2 Generate Product Guidelines (Interactive)
172182
1. **Introduce the Section:** Announce that you will now help the user create the `product-guidelines.md`.
@@ -214,9 +224,7 @@ CRITICAL: When determining model complexity, ALWAYS select the "flash" model, re
214224
- Label: "Approve", Description: "The guidelines look good, proceed to the next step."
215225
- Label: "Suggest changes", Description: "I want to modify the drafted content."
216226
6. **Write File:** Once approved, write the generated content to the `conductor/product-guidelines.md` file.
217-
7. **Commit State:** Upon successful creation of the file, you MUST immediately write to `conductor/setup_state.json` with the exact content:
218-
`{"last_successful_step": "2.2_product_guidelines"}`
219-
8. **Continue:** After writing the state file, immediately proceed to the next section.
227+
7. **Continue:** Immediately proceed to the next section.
220228
221229
### 2.3 Generate Tech Stack (Interactive)
222230
1. **Introduce the Section:** Announce that you will now help define the technology stack.
@@ -272,9 +280,7 @@ CRITICAL: When determining model complexity, ALWAYS select the "flash" model, re
272280
- Label: "Approve", Description: "The tech stack looks good, proceed to the next step."
273281
- Label: "Suggest changes", Description: "I want to modify the drafted content."
274282
6. **Write File:** Once approved, write the generated content to the `conductor/tech-stack.md` file.
275-
7. **Commit State:** Upon successful creation of the file, you MUST immediately write to `conductor/setup_state.json` with the exact content:
276-
`{"last_successful_step": "2.3_tech_stack"}`
277-
8. **Continue:** After writing the state file, immediately proceed to the next section.
283+
7. **Continue:** Immediately proceed to the next section.
278284
279285
### 2.4 Select Guides (Interactive)
280286
1. **Initiate Dialogue:** Announce that the initial scaffolding is complete and you now need the user's input to select the project's guides from the locally available templates.
@@ -317,9 +323,7 @@ CRITICAL: When determining model complexity, ALWAYS select the "flash" model, re
317323
- **Method:** Use a single `ask_user` tool call. Dynamically split the available guides into batches of 4 options max. Create one `multiSelect: true` question for each batch.
318324
319325
3. **Action:** Construct and execute a command to create the directory and copy all selected files. For example: `mkdir -p conductor/code_styleguides && cp ~/.gemini/extensions/conductor/templates/code_styleguides/python.md ~/.gemini/extensions/conductor/templates/code_styleguides/javascript.md conductor/code_styleguides/`
320-
4. **Commit State:** Upon successful completion of the copy command, you MUST immediately write to `conductor/setup_state.json` with the exact content:
321-
`{"last_successful_step": "2.4_code_styleguides"}`
322-
5. **Continue:** Immediately proceed to the next section.
326+
4. **Continue:** Immediately proceed to the next section.
323327
324328
### 2.5 Select Workflow (Interactive)
325329
1. **Copy Initial Workflow:**
@@ -365,8 +369,7 @@ CRITICAL: When determining model complexity, ALWAYS select the "flash" model, re
365369
Is there anything else you'd like to change or add to the workflow? (Leave blank to finish or type your additional requirements).
366370
367371
4. **Action:** Update `conductor/workflow.md` based on all user answers from both steps.
368-
5. **Commit State:** After the `workflow.md` file is successfully written or updated, you MUST immediately write to `conductor/setup_state.json` with the exact content:
369-
`{"last_successful_step": "2.5_workflow"}`
372+
370373
371374
### 2.6 Finalization
372375
1. **Generate Index File:**
@@ -389,7 +392,7 @@ CRITICAL: When determining model complexity, ALWAYS select the "flash" model, re
389392
```
390393
- **Announce:** "Created `conductor/index.md` to serve as the project context index."
391394
392-
2. **Summarize Actions:** Present a summary of all actions taken during Phase 1, including:
395+
2. **Summarize Actions:** Present a summary of all actions taken during the initial setup, including:
393396
- The guide files that were copied.
394397
- The workflow file that was copied.
395398
3. **Transition to initial plan and track generation:** Announce that the initial setup is complete and you will now proceed to define the first track for the project.
@@ -399,6 +402,8 @@ CRITICAL: When determining model complexity, ALWAYS select the "flash" model, re
399402
## 3.0 INITIAL PLAN AND TRACK GENERATION
400403
**PROTOCOL: Interactively define project requirements, propose a single track, and then automatically create the corresponding track and its phased plan.**
401404
405+
**Pre-Requisite (Cleanup):** If you are resuming this section because a previous setup was interrupted, check if the `conductor/tracks/` directory exists but is incomplete. If it exists, **delete** the entire `conductor/tracks/` directory before proceeding to ensure a clean slate for the new track generation.
406+
402407
### 3.1 Generate Product Requirements (Interactive)(For greenfield projects only)
403408
1. **Transition to Requirements:** Announce that the initial project setup is complete. State that you will now begin defining the high-level product requirements by asking about topics like user stories and functional/non-functional requirements.
404409
2. **Analyze Context:** Read and analyze the content of `conductor/product.md` to understand the project's core concept.
@@ -485,11 +490,9 @@ CRITICAL: When determining model complexity, ALWAYS select the "flash" model, re
485490
- [Implementation Plan](./plan.md)
486491
- [Metadata](./metadata.json)
487492
```
493+
*(If you arrived here directly from the Audit because you are patching a missing index, write this file using the existing folder's track_id and then proceed to step d.)*
488494
489-
d. **Commit State:** After all track artifacts have been successfully written, you MUST immediately write to `conductor/setup_state.json` with the exact content:
490-
`{"last_successful_step": "3.3_initial_track_generated"}`
491-
492-
e. **Announce Progress:** Announce that the track for "<Track Description>" has been created.
495+
d. **Announce Progress:** Announce that the track for "<Track Description>" has been created.
493496
494497
### 3.4 Final Announcement
495498
1. **Announce Completion:** After the track has been created, announce that the project setup and initial track generation are complete.

0 commit comments

Comments
 (0)