create-agentic-pdlc 1.1.0 → 1.2.1

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.
@@ -5,8 +5,8 @@ on:
5
5
  types: [opened, reopened, closed]
6
6
  pull_request_review:
7
7
  types: [submitted]
8
- issue_comment:
9
- types: [created]
8
+ issues:
9
+ types: [labeled]
10
10
 
11
11
  env:
12
12
  PROJECT_ID: "{{PROJECT_ID}}"
@@ -15,43 +15,49 @@ env:
15
15
  STATUS_BRAINSTORMING: "{{ID_BRAINSTORMING}}"
16
16
  STATUS_DETAILING: "{{ID_DETAILING}}"
17
17
  STATUS_APPROVAL: "{{ID_APPROVAL}}"
18
- STATUS_CODE_REVIEW: "{{ID_CODE_REVIEW}}"
19
- STATUS_PULL_REQUEST: "{{ID_PULL_REQUEST}}"
18
+ STATUS_DEVELOPMENT: "{{ID_DEVELOPMENT}}"
19
+ STATUS_CODE_REVIEW_PR: "{{ID_CODE_REVIEW_PR}}"
20
+ STATUS_MERGE: "{{ID_MERGE}}"
20
21
  STATUS_PRODUCAO: "{{ID_PRODUCAO}}"
21
22
 
22
23
  jobs:
23
- # Issue Comment → Move Upstream
24
- move-card-on-comment:
25
- name: Upstream Comment Marker → Move Card
26
- if: github.event_name == 'issue_comment' && github.event.action == 'created'
24
+ # Issue Labeled → Move Upstream
25
+ move-card-on-label:
26
+ name: Upstream Label → Move Card
27
+ if: github.event_name == 'issues' && github.event.action == 'labeled'
27
28
  runs-on: ubuntu-latest
29
+ env:
30
+ PROJECT_TOKEN: ${{ secrets.PROJECT_TOKEN }}
28
31
  steps:
29
- - name: Detect Marker and Move Issue
30
- if: ${{ secrets.PROJECT_TOKEN != '' }}
32
+ - name: Detect Label and Move Issue
33
+ if: ${{ env.PROJECT_TOKEN != '' }}
31
34
  uses: actions/github-script@v7
32
35
  with:
33
- github-token: ${{ secrets.PROJECT_TOKEN }}
36
+ github-token: ${{ env.PROJECT_TOKEN }}
34
37
  script: |
35
- const body = context.payload.comment.body;
38
+ const labelName = context.payload.label.name;
36
39
  let targetStatusId = null;
37
40
  let stageName = null;
38
41
 
39
- if (body.includes('<!-- PDLC:stage:exploration -->')) {
42
+ if (labelName === 'stage:exploration') {
40
43
  targetStatusId = process.env.STATUS_EXPLORATION;
41
44
  stageName = 'Exploration';
42
- } else if (body.includes('<!-- PDLC:stage:brainstorming -->')) {
45
+ } else if (labelName === 'stage:brainstorming') {
43
46
  targetStatusId = process.env.STATUS_BRAINSTORMING;
44
47
  stageName = 'Brainstorming';
45
- } else if (body.includes('<!-- PDLC:stage:detailing -->')) {
48
+ } else if (labelName === 'stage:detailing') {
46
49
  targetStatusId = process.env.STATUS_DETAILING;
47
50
  stageName = 'Detailing';
48
- } else if (body.includes('<!-- PDLC:stage:approval -->')) {
51
+ } else if (labelName === 'spec:approved') {
49
52
  targetStatusId = process.env.STATUS_APPROVAL;
50
53
  stageName = 'Approval';
54
+ } else if (labelName === 'stage:development') {
55
+ targetStatusId = process.env.STATUS_DEVELOPMENT;
56
+ stageName = 'Development';
51
57
  }
52
58
 
53
59
  if (!targetStatusId) {
54
- console.log('No upstream PDLC marker found. Skipping.');
60
+ console.log('No upstream PDLC label found. Skipping.');
55
61
  return;
56
62
  }
57
63
 
@@ -78,17 +84,19 @@ jobs:
78
84
  console.log(`Issue #${number} moved to ${stageName}`);
79
85
 
80
86
 
81
- # PR Opened → Move linked issue to Code Review
87
+ # PR Opened → Move linked issue to Code Review / PR
82
88
  move-card-on-pr-open:
83
- name: Open PR → Code Review
89
+ name: Open PR → Code Review / PR
84
90
  if: github.event_name == 'pull_request' && (github.event.action == 'opened' || github.event.action == 'reopened')
85
91
  runs-on: ubuntu-latest
92
+ env:
93
+ PROJECT_TOKEN: ${{ secrets.PROJECT_TOKEN }}
86
94
  steps:
87
- - name: Move linked issue to Code Review
88
- if: ${{ secrets.PROJECT_TOKEN != '' }}
95
+ - name: Move linked issue to Code Review / PR
96
+ if: ${{ env.PROJECT_TOKEN != '' }}
89
97
  uses: actions/github-script@v7
90
98
  with:
91
- github-token: ${{ secrets.PROJECT_TOKEN }}
99
+ github-token: ${{ env.PROJECT_TOKEN }}
92
100
  script: |
93
101
  const prNumber = context.payload.pull_request.number;
94
102
  const { owner, repo } = context.repo;
@@ -113,7 +121,7 @@ jobs:
113
121
  }
114
122
  }`, {
115
123
  p: process.env.PROJECT_ID, i: item.id, f: process.env.STATUS_FIELD_ID,
116
- v: { singleSelectOptionId: process.env.STATUS_CODE_REVIEW }
124
+ v: { singleSelectOptionId: process.env.STATUS_CODE_REVIEW_PR }
117
125
  });
118
126
  };
119
127
 
@@ -121,26 +129,28 @@ jobs:
121
129
  for (const n of linkedIssues) {
122
130
  const { data: issue } = await github.rest.issues.get({ owner, repo, issue_number: n });
123
131
  await moveItem(issue.node_id);
124
- console.log(`Issue #${n} → Code Review`);
132
+ console.log(`Issue #${n} → Code Review / PR`);
125
133
  }
126
134
  } else {
127
135
  await moveItem(pr.node_id);
128
- console.log(`PR #${prNumber} → Code Review (no linked issue)`);
136
+ console.log(`PR #${prNumber} → Code Review / PR (no linked issue)`);
129
137
  }
130
138
 
131
139
  await github.rest.issues.addLabels({ owner, repo, issue_number: prNumber, labels: ['pr:review'] }).catch(() => {});
132
140
 
133
- # Review Approved → Pull Request
141
+ # Review Approved → Merge
134
142
  move-card-on-review-approved:
135
- name: Approved PR → Pull Request
143
+ name: Approved PR → Merge
136
144
  if: github.event_name == 'pull_request_review' && github.event.review.state == 'approved'
137
145
  runs-on: ubuntu-latest
146
+ env:
147
+ PROJECT_TOKEN: ${{ secrets.PROJECT_TOKEN }}
138
148
  steps:
139
- - name: Move issue to Pull Request
140
- if: ${{ secrets.PROJECT_TOKEN != '' }}
149
+ - name: Move issue to Merge
150
+ if: ${{ env.PROJECT_TOKEN != '' }}
141
151
  uses: actions/github-script@v7
142
152
  with:
143
- github-token: ${{ secrets.PROJECT_TOKEN }}
153
+ github-token: ${{ env.PROJECT_TOKEN }}
144
154
  script: |
145
155
  const prNumber = context.payload.pull_request.number;
146
156
  const { owner, repo } = context.repo;
@@ -159,7 +169,7 @@ jobs:
159
169
  projectV2Item { id }
160
170
  }
161
171
  }`, { p: process.env.PROJECT_ID, i: item.id, f: process.env.STATUS_FIELD_ID,
162
- v: { singleSelectOptionId: process.env.STATUS_PULL_REQUEST } });
172
+ v: { singleSelectOptionId: process.env.STATUS_MERGE } });
163
173
  };
164
174
 
165
175
  if (linkedIssues.length > 0) {
@@ -179,12 +189,14 @@ jobs:
179
189
  name: Merged PR → Production
180
190
  if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true
181
191
  runs-on: ubuntu-latest
192
+ env:
193
+ PROJECT_TOKEN: ${{ secrets.PROJECT_TOKEN }}
182
194
  steps:
183
195
  - name: Move issue to Production
184
- if: ${{ secrets.PROJECT_TOKEN != '' }}
196
+ if: ${{ env.PROJECT_TOKEN != '' }}
185
197
  uses: actions/github-script@v7
186
198
  with:
187
- github-token: ${{ secrets.PROJECT_TOKEN }}
199
+ github-token: ${{ env.PROJECT_TOKEN }}
188
200
  script: |
189
201
  const prNumber = context.payload.pull_request.number;
190
202
  const { owner, repo } = context.repo;
@@ -22,7 +22,7 @@ If any of these files are missing, you are in **Setup Mode**. Do not proceed wit
22
22
  - **Project basics:** Project Name, Description, Technical Stack (Structure).
23
23
  - **Commands:** Test command, Lint command, Build command.
24
24
  - **Invariants:** Critical business rules agents must never violate (e.g. Human-in-the-loop).
25
- - **Board IDs:** PROJECT_ID, STATUS_FIELD_ID, column option IDs (provide standard PDLC options: Idea, Exploration, Brainstorming, Detail Solution, Approval, Development, Testing, Code Review, Pull Request, Production). Allow user to answer "skip", which means you leave the placeholders intact.
25
+ - **Board IDs:** PROJECT_ID, STATUS_FIELD_ID, column option IDs (provide standard PDLC options: Idea, Exploration, Brainstorming, Detail Solution, Approval, Development, Testing, Code Review / PR, Merge, Production). Allow user to answer "skip", which means you leave the placeholders intact.
26
26
  - **Implementation agent handle:** e.g., `@google-labs-jules`, or "none".
27
27
  3. Generate and write the missing files replacing the `{{SCREAMING_SNAKE_CASE}}` placeholders using the templates logic you know (usually they reside in standard Agentic PDLC templates).
28
28
  4. Offer to run the `gh` commands for labels (`spec:approved`, `pr:review`, `pr:approved`, `architecture-violation`).
@@ -47,3 +47,9 @@ Once approved, you will detail the solution directly into the GitHub Issue body.
47
47
 
48
48
  ### 3. Handoff
49
49
  Do not write code for downstream features! Your goal is to refine the Spec, so the human Tech Lead can label the issue `spec:approved`. This label triggers the downstream agent via `agent-trigger.yml`.
50
+
51
+ ### 4. Moving the Board (Upstream States)
52
+ As you actively work with the user advancing the feature, you MUST use the GitHub CLI to update internal state labels. This triggers GitHub Actions behind the scenes.
53
+ - Starting context evaluation: Run `gh issue edit <N> --add-label "stage:exploration"`
54
+ - Presenting architecture/approaches: Run `gh issue edit <N> --add-label "stage:brainstorming"`
55
+ - Starting to write the technical spec: Run `gh issue edit <N> --add-label "stage:detailing"`
package/docs/pdlc.md CHANGED
@@ -4,20 +4,20 @@
4
4
 
5
5
  | Column | Meaning | Who moves the card |
6
6
  |---|---|---|
7
- | 💡 Idea | Backlog — every new issue lands here | Claude Code / Manual |
8
- | 🔍 Exploration | Claude is analyzing code and context | Claude Code |
9
- | 🧠 Brainstorming | Claude proposed approaches, awaiting PM gate | Claude Code |
10
- | 📐 Detail Solution | Claude is writing the technical spec | Claude Code |
11
- | ✅ Approval | Spec ready, awaiting `spec:approved` label | Claude Code |
12
- | ⚙️ Development | Agent implementing the spec | Jules / Implementation Agent |
7
+ | 💡 Idea | Backlog — every new issue lands here | Manual |
8
+ | 🔍 Exploration | Claude is analyzing code and context | Label `stage:exploration` |
9
+ | 🧠 Brainstorming | Claude proposed approaches, awaiting PM gate | Label `stage:brainstorming` |
10
+ | 📐 Detail Solution | Claude is writing the technical spec | Label `stage:detailing` |
11
+ | ✅ Approval | Spec ready, awaiting `spec:approved` label | Label `spec:approved` |
12
+ | ⚙️ Development | Agent implementing the spec | Label `stage:development` |
13
13
  | 🧪 Testing | CI pipeline running | GitHub Actions |
14
- | 👁 Code Review | PR opened, awaiting human review | GitHub Actions |
15
- | 🔀 Pull Request | PR approved, awaiting merge | GitHub Actions |
14
+ | 👁 Code Review / PR | PR opened, awaiting human review | GitHub Actions |
15
+ | 🔀 Merge | PR approved, awaiting merge | GitHub Actions |
16
16
  | 🚀 Production | Merged | GitHub Actions |
17
17
 
18
18
  <!--
19
19
  Adapt columns as needed. The functional baseline is:
20
- 💡 Idea → ⚙️ Development → 👁 Code Review → 🚀 Production
20
+ 💡 Idea → ⚙️ Development → 👁 Code Review / PR → 🚀 Production
21
21
  -->
22
22
 
23
23
  ## Board Identifiers (GitHub Projects)
@@ -39,8 +39,8 @@ REPO = {{REPO_OWNER}}/{{REPO_NAME}}
39
39
  | ✅ Approval | `{{ID_APPROVAL}}` |
40
40
  | ⚙️ Development | `{{ID_DEVELOPMENT}}` |
41
41
  | 🧪 Testing | `{{ID_TESTING}}` |
42
- | 👁 Code Review | `{{ID_CODE_REVIEW}}` |
43
- | 🔀 Pull Request | `{{ID_PULL_REQUEST}}` |
42
+ | 👁 Code Review / PR | `{{ID_CODE_REVIEW_PR}}` |
43
+ | 🔀 Merge | `{{ID_MERGE}}` |
44
44
  | 🚀 Production | `{{ID_PRODUCTION}}` |
45
45
 
46
46
  ## Agent × Phase Mapping
@@ -49,7 +49,7 @@ REPO = {{REPO_OWNER}}/{{REPO_NAME}}
49
49
  |---|---|
50
50
  | 💡 → 📐 (upstream) | Claude (or ideation agent) in conversational session |
51
51
  | ⚙️ → 🔀 (downstream) | {{IMPLEMENTATION_AGENT}} (e.g. Jules `@google-labs-jules`) |
52
- | 👁 Code Review | Human (you) |
52
+ | 👁 Code Review / PR | Human (you) |
53
53
  | Automatic transitions | GitHub Actions |
54
54
 
55
55
  ## Issue Title Conventions
@@ -67,6 +67,10 @@ REPO = {{REPO_OWNER}}/{{REPO_NAME}}
67
67
 
68
68
  | Label | Entity | Color | Meaning |
69
69
  |---|---|---|---|
70
+ | `stage:exploration` | Issue | Purple | Issue is being evaluated |
71
+ | `stage:brainstorming` | Issue | Pink | Proposed approaches awaiting PM gate |
72
+ | `stage:detailing` | Issue | Blue | Technical spec is being written |
73
+ | `stage:development` | Issue | Orange | Agent is implementing the spec |
70
74
  | `spec:approved` | Issue | Green | Gate 2 — agent is cleared to implement |
71
75
  | `pr:review` | PR | Yellow | Awaiting code review |
72
76
  | `pr:approved` | PR | Green | Code review approved |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-agentic-pdlc",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
4
4
  "description": "Scaffold the Agentic PDLC framework effortlessly",
5
5
  "type": "commonjs",
6
6
  "bin": {
@@ -5,8 +5,8 @@ on:
5
5
  types: [opened, reopened, closed]
6
6
  pull_request_review:
7
7
  types: [submitted]
8
- issue_comment:
9
- types: [created]
8
+ issues:
9
+ types: [labeled]
10
10
 
11
11
  env:
12
12
  PROJECT_ID: "{{PROJECT_ID}}"
@@ -15,43 +15,49 @@ env:
15
15
  STATUS_BRAINSTORMING: "{{ID_BRAINSTORMING}}"
16
16
  STATUS_DETAILING: "{{ID_DETAILING}}"
17
17
  STATUS_APPROVAL: "{{ID_APPROVAL}}"
18
- STATUS_CODE_REVIEW: "{{ID_CODE_REVIEW}}"
19
- STATUS_PULL_REQUEST: "{{ID_PULL_REQUEST}}"
18
+ STATUS_DEVELOPMENT: "{{ID_DEVELOPMENT}}"
19
+ STATUS_CODE_REVIEW_PR: "{{ID_CODE_REVIEW_PR}}"
20
+ STATUS_MERGE: "{{ID_MERGE}}"
20
21
  STATUS_PRODUCAO: "{{ID_PRODUCAO}}"
21
22
 
22
23
  jobs:
23
- # Issue Comment → Move Upstream
24
- move-card-on-comment:
25
- name: Upstream Comment Marker → Move Card
26
- if: github.event_name == 'issue_comment' && github.event.action == 'created'
24
+ # Issue Labeled → Move Upstream
25
+ move-card-on-label:
26
+ name: Upstream Label → Move Card
27
+ if: github.event_name == 'issues' && github.event.action == 'labeled'
27
28
  runs-on: ubuntu-latest
29
+ env:
30
+ PROJECT_TOKEN: ${{ secrets.PROJECT_TOKEN }}
28
31
  steps:
29
- - name: Detect Marker and Move Issue
30
- if: ${{ secrets.PROJECT_TOKEN != '' }}
32
+ - name: Detect Label and Move Issue
33
+ if: ${{ env.PROJECT_TOKEN != '' }}
31
34
  uses: actions/github-script@v7
32
35
  with:
33
- github-token: ${{ secrets.PROJECT_TOKEN }}
36
+ github-token: ${{ env.PROJECT_TOKEN }}
34
37
  script: |
35
- const body = context.payload.comment.body;
38
+ const labelName = context.payload.label.name;
36
39
  let targetStatusId = null;
37
40
  let stageName = null;
38
41
 
39
- if (body.includes('<!-- PDLC:stage:exploration -->')) {
42
+ if (labelName === 'stage:exploration') {
40
43
  targetStatusId = process.env.STATUS_EXPLORATION;
41
44
  stageName = 'Exploration';
42
- } else if (body.includes('<!-- PDLC:stage:brainstorming -->')) {
45
+ } else if (labelName === 'stage:brainstorming') {
43
46
  targetStatusId = process.env.STATUS_BRAINSTORMING;
44
47
  stageName = 'Brainstorming';
45
- } else if (body.includes('<!-- PDLC:stage:detailing -->')) {
48
+ } else if (labelName === 'stage:detailing') {
46
49
  targetStatusId = process.env.STATUS_DETAILING;
47
50
  stageName = 'Detailing';
48
- } else if (body.includes('<!-- PDLC:stage:approval -->')) {
51
+ } else if (labelName === 'spec:approved') {
49
52
  targetStatusId = process.env.STATUS_APPROVAL;
50
53
  stageName = 'Approval';
54
+ } else if (labelName === 'stage:development') {
55
+ targetStatusId = process.env.STATUS_DEVELOPMENT;
56
+ stageName = 'Development';
51
57
  }
52
58
 
53
59
  if (!targetStatusId) {
54
- console.log('No upstream PDLC marker found. Skipping.');
60
+ console.log('No upstream PDLC label found. Skipping.');
55
61
  return;
56
62
  }
57
63
 
@@ -78,17 +84,19 @@ jobs:
78
84
  console.log(`Issue #${number} moved to ${stageName}`);
79
85
 
80
86
 
81
- # PR Opened → Move linked issue to Code Review
87
+ # PR Opened → Move linked issue to Code Review / PR
82
88
  move-card-on-pr-open:
83
- name: Open PR → Code Review
89
+ name: Open PR → Code Review / PR
84
90
  if: github.event_name == 'pull_request' && (github.event.action == 'opened' || github.event.action == 'reopened')
85
91
  runs-on: ubuntu-latest
92
+ env:
93
+ PROJECT_TOKEN: ${{ secrets.PROJECT_TOKEN }}
86
94
  steps:
87
- - name: Move linked issue to Code Review
88
- if: ${{ secrets.PROJECT_TOKEN != '' }}
95
+ - name: Move linked issue to Code Review / PR
96
+ if: ${{ env.PROJECT_TOKEN != '' }}
89
97
  uses: actions/github-script@v7
90
98
  with:
91
- github-token: ${{ secrets.PROJECT_TOKEN }}
99
+ github-token: ${{ env.PROJECT_TOKEN }}
92
100
  script: |
93
101
  const prNumber = context.payload.pull_request.number;
94
102
  const { owner, repo } = context.repo;
@@ -113,7 +121,7 @@ jobs:
113
121
  }
114
122
  }`, {
115
123
  p: process.env.PROJECT_ID, i: item.id, f: process.env.STATUS_FIELD_ID,
116
- v: { singleSelectOptionId: process.env.STATUS_CODE_REVIEW }
124
+ v: { singleSelectOptionId: process.env.STATUS_CODE_REVIEW_PR }
117
125
  });
118
126
  };
119
127
 
@@ -121,26 +129,28 @@ jobs:
121
129
  for (const n of linkedIssues) {
122
130
  const { data: issue } = await github.rest.issues.get({ owner, repo, issue_number: n });
123
131
  await moveItem(issue.node_id);
124
- console.log(`Issue #${n} → Code Review`);
132
+ console.log(`Issue #${n} → Code Review / PR`);
125
133
  }
126
134
  } else {
127
135
  await moveItem(pr.node_id);
128
- console.log(`PR #${prNumber} → Code Review (no linked issue)`);
136
+ console.log(`PR #${prNumber} → Code Review / PR (no linked issue)`);
129
137
  }
130
138
 
131
139
  await github.rest.issues.addLabels({ owner, repo, issue_number: prNumber, labels: ['pr:review'] }).catch(() => {});
132
140
 
133
- # Review Approved → Pull Request
141
+ # Review Approved → Merge
134
142
  move-card-on-review-approved:
135
- name: Approved PR → Pull Request
143
+ name: Approved PR → Merge
136
144
  if: github.event_name == 'pull_request_review' && github.event.review.state == 'approved'
137
145
  runs-on: ubuntu-latest
146
+ env:
147
+ PROJECT_TOKEN: ${{ secrets.PROJECT_TOKEN }}
138
148
  steps:
139
- - name: Move issue to Pull Request
140
- if: ${{ secrets.PROJECT_TOKEN != '' }}
149
+ - name: Move issue to Merge
150
+ if: ${{ env.PROJECT_TOKEN != '' }}
141
151
  uses: actions/github-script@v7
142
152
  with:
143
- github-token: ${{ secrets.PROJECT_TOKEN }}
153
+ github-token: ${{ env.PROJECT_TOKEN }}
144
154
  script: |
145
155
  const prNumber = context.payload.pull_request.number;
146
156
  const { owner, repo } = context.repo;
@@ -159,7 +169,7 @@ jobs:
159
169
  projectV2Item { id }
160
170
  }
161
171
  }`, { p: process.env.PROJECT_ID, i: item.id, f: process.env.STATUS_FIELD_ID,
162
- v: { singleSelectOptionId: process.env.STATUS_PULL_REQUEST } });
172
+ v: { singleSelectOptionId: process.env.STATUS_MERGE } });
163
173
  };
164
174
 
165
175
  if (linkedIssues.length > 0) {
@@ -179,12 +189,14 @@ jobs:
179
189
  name: Merged PR → Production
180
190
  if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true
181
191
  runs-on: ubuntu-latest
192
+ env:
193
+ PROJECT_TOKEN: ${{ secrets.PROJECT_TOKEN }}
182
194
  steps:
183
195
  - name: Move issue to Production
184
- if: ${{ secrets.PROJECT_TOKEN != '' }}
196
+ if: ${{ env.PROJECT_TOKEN != '' }}
185
197
  uses: actions/github-script@v7
186
198
  with:
187
- github-token: ${{ secrets.PROJECT_TOKEN }}
199
+ github-token: ${{ env.PROJECT_TOKEN }}
188
200
  script: |
189
201
  const prNumber = context.payload.pull_request.number;
190
202
  const { owner, repo } = context.repo;
@@ -4,20 +4,20 @@
4
4
 
5
5
  | Column | Meaning | Who moves the card |
6
6
  |---|---|---|
7
- | 💡 Idea | Backlog — every new issue lands here | Claude Code / Manual |
8
- | 🔍 Exploration | Claude is analyzing code and context | Claude Code |
9
- | 🧠 Brainstorming | Claude proposed approaches, awaiting PM gate | Claude Code |
10
- | 📐 Detail Solution | Claude is writing the technical spec | Claude Code |
11
- | ✅ Approval | Spec ready, awaiting `spec:approved` label | Claude Code |
12
- | ⚙️ Development | Agent implementing the spec | Jules / Implementation Agent |
7
+ | 💡 Idea | Backlog — every new issue lands here | Manual |
8
+ | 🔍 Exploration | Claude is analyzing code and context | Label `stage:exploration` |
9
+ | 🧠 Brainstorming | Claude proposed approaches, awaiting PM gate | Label `stage:brainstorming` |
10
+ | 📐 Detail Solution | Claude is writing the technical spec | Label `stage:detailing` |
11
+ | ✅ Approval | Spec ready, awaiting `spec:approved` label | Label `spec:approved` |
12
+ | ⚙️ Development | Agent implementing the spec | Label `stage:development` |
13
13
  | 🧪 Testing | CI pipeline running | GitHub Actions |
14
- | 👁 Code Review | PR opened, awaiting human review | GitHub Actions |
15
- | 🔀 Pull Request | PR approved, awaiting merge | GitHub Actions |
14
+ | 👁 Code Review / PR | PR opened, awaiting human review | GitHub Actions |
15
+ | 🔀 Merge | PR approved, awaiting merge | GitHub Actions |
16
16
  | 🚀 Production | Merged | GitHub Actions |
17
17
 
18
18
  <!--
19
19
  Adapt columns as needed. The functional baseline is:
20
- 💡 Idea → ⚙️ Development → 👁 Code Review → 🚀 Production
20
+ 💡 Idea → ⚙️ Development → 👁 Code Review / PR → 🚀 Production
21
21
  -->
22
22
 
23
23
  ## Board Identifiers (GitHub Projects)
@@ -39,8 +39,8 @@ REPO = {{REPO_OWNER}}/{{REPO_NAME}}
39
39
  | ✅ Approval | `{{ID_APPROVAL}}` |
40
40
  | ⚙️ Development | `{{ID_DEVELOPMENT}}` |
41
41
  | 🧪 Testing | `{{ID_TESTING}}` |
42
- | 👁 Code Review | `{{ID_CODE_REVIEW}}` |
43
- | 🔀 Pull Request | `{{ID_PULL_REQUEST}}` |
42
+ | 👁 Code Review / PR | `{{ID_CODE_REVIEW_PR}}` |
43
+ | 🔀 Merge | `{{ID_MERGE}}` |
44
44
  | 🚀 Production | `{{ID_PRODUCTION}}` |
45
45
 
46
46
  ## Agent × Phase Mapping
@@ -49,7 +49,7 @@ REPO = {{REPO_OWNER}}/{{REPO_NAME}}
49
49
  |---|---|
50
50
  | 💡 → 📐 (upstream) | Claude (or ideation agent) in conversational session |
51
51
  | ⚙️ → 🔀 (downstream) | {{IMPLEMENTATION_AGENT}} (e.g. Jules `@google-labs-jules`) |
52
- | 👁 Code Review | Human (you) |
52
+ | 👁 Code Review / PR | Human (you) |
53
53
  | Automatic transitions | GitHub Actions |
54
54
 
55
55
  ## Issue Title Conventions
@@ -67,6 +67,10 @@ REPO = {{REPO_OWNER}}/{{REPO_NAME}}
67
67
 
68
68
  | Label | Entity | Color | Meaning |
69
69
  |---|---|---|---|
70
+ | `stage:exploration` | Issue | Purple | Issue is being evaluated |
71
+ | `stage:brainstorming` | Issue | Pink | Proposed approaches awaiting PM gate |
72
+ | `stage:detailing` | Issue | Blue | Technical spec is being written |
73
+ | `stage:development` | Issue | Orange | Agent is implementing the spec |
70
74
  | `spec:approved` | Issue | Green | Gate 2 — agent is cleared to implement |
71
75
  | `pr:review` | PR | Yellow | Awaiting code review |
72
76
  | `pr:approved` | PR | Green | Code review approved |