create-agentic-pdlc 2.3.0 → 3.0.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.
- package/.agentic-pdlc/hooks/pdlc-stage-gate.sh +37 -10
- package/.agentic-pdlc/metrics/raw/2026-W22.jsonl +114 -0
- package/.claude/settings.json +18 -0
- package/.coderabbit.yaml +35 -0
- package/.github/ISSUE_TEMPLATE/bug.md +53 -0
- package/.github/ISSUE_TEMPLATE/feature.md +54 -0
- package/.github/ISSUE_TEMPLATE/task.md +33 -0
- package/.github/workflows/add-to-board.yml +1 -1
- package/.github/workflows/agent-trigger.yml +4 -4
- package/.github/workflows/ci.yml +1 -1
- package/.github/workflows/npm-publish.yml +2 -2
- package/.github/workflows/pdlc-health-check.yml +1 -1
- package/.github/workflows/pdlc-stage-gate.yml +2 -2
- package/.github/workflows/project-automation.yml +25 -40
- package/AGENTS.md +50 -8
- package/CLAUDE.md +3 -1
- package/README.md +33 -32
- package/SETUP.md +2 -1
- package/adapters/claude-code/skill.md +39 -14
- package/adapters/hooks/pdlc-stage-gate.sh +3 -8
- package/bin/cli.js +555 -194
- package/docs/pdlc.md +5 -5
- package/docs/superpowers/plans/2026-05-28-jules-label-pat-split.md +240 -0
- package/docs/superpowers/plans/2026-05-29-agentic-pulse-rework-taxonomy.md +474 -0
- package/docs/superpowers/plans/2026-05-29-qa-gate-enforcement.md +354 -0
- package/docs/superpowers/plans/2026-06-04-spec-format-issue-template.md +160 -0
- package/docs/superpowers/plans/2026-06-04-two-tier-installer.md +1056 -0
- package/docs/superpowers/specs/2026-05-29-agentic-pulse-rework-taxonomy-design.md +122 -0
- package/docs/superpowers/specs/2026-06-04-spec-format-issue-template-design.md +46 -0
- package/package.json +2 -2
- package/templates/.github/ISSUE_TEMPLATE/bug.md +53 -0
- package/templates/.github/ISSUE_TEMPLATE/feature.md +54 -0
- package/templates/.github/ISSUE_TEMPLATE/task.md +33 -0
- package/templates/.github/workflows/add-to-board.yml +4 -4
- package/templates/.github/workflows/agent-trigger.yml +22 -13
- package/{.agentic-pdlc/templates → templates}/.github/workflows/agentic-metrics.yml +150 -27
- package/templates/.github/workflows/ci.yml +1 -1
- package/templates/.github/workflows/pdlc-health-check.yml +1 -1
- package/templates/.github/workflows/pdlc-stage-gate.yml +2 -2
- package/templates/.github/workflows/project-automation.yml +71 -32
- package/templates/.github/workflows/qa-agent.yml +32 -18
- package/templates/.github/workflows/qa-gate.yml +51 -0
- package/templates/full/AGENTS.md +143 -0
- package/templates/full/CLAUDE.md +30 -0
- package/templates/{docs → full/docs}/pdlc.md +4 -4
- package/templates/lite/AGENTS.md +121 -0
- package/templates/lite/CLAUDE.md +44 -0
- package/tests/cli.test.js +32 -0
- package/.agentic-pdlc/templates/.github/CODEOWNERS +0 -5
- package/.agentic-pdlc/templates/.github/copilot-instructions.md +0 -12
- package/.agentic-pdlc/templates/.github/workflows/add-to-board.yml +0 -38
- package/.agentic-pdlc/templates/.github/workflows/agent-trigger.yml +0 -146
- package/.agentic-pdlc/templates/.github/workflows/auto-approve.yml +0 -16
- package/.agentic-pdlc/templates/.github/workflows/ci.yml +0 -54
- package/.agentic-pdlc/templates/.github/workflows/pdlc-health-check.yml +0 -121
- package/.agentic-pdlc/templates/.github/workflows/pdlc-stage-gate.yml +0 -51
- package/.agentic-pdlc/templates/.github/workflows/project-automation.yml +0 -274
- package/.agentic-pdlc/templates/.github/workflows/protect-workflows.yml +0 -21
- package/.agentic-pdlc/templates/.github/workflows/qa-agent.yml +0 -128
- package/.agentic-pdlc/templates/AGENTS.md +0 -104
- package/.agentic-pdlc/templates/docs/pdlc.md +0 -123
- package/.github/workflows/agentic-metrics.yml +0 -422
- package/.github/workflows/qa-agent.yml +0 -128
- package/templates/AGENTS.md +0 -115
package/docs/pdlc.md
CHANGED
|
@@ -53,7 +53,7 @@ REPO = {{REPO_OWNER}}/{{REPO_NAME}}
|
|
|
53
53
|
```
|
|
54
54
|
[icon] [PREFIX]: [short description, imperative tense]
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
✨ feat: new feature or behavioral change
|
|
57
57
|
🐛 BUG: bug
|
|
58
58
|
🔧 TASK: operational task
|
|
59
59
|
🔬 SPIKE: exploration/evaluation spike
|
|
@@ -69,7 +69,7 @@ REPO = {{REPO_OWNER}}/{{REPO_NAME}}
|
|
|
69
69
|
| `spec:approved` | Issue | Green | Gate 2 — agent is cleared to implement |
|
|
70
70
|
| `pr:in-review` | PR | Yellow | Awaiting code review |
|
|
71
71
|
| `pr:approved` | PR | Green | Code review approved |
|
|
72
|
-
| `type:
|
|
72
|
+
| `type:feature` | Issue | Blue | New feature or behavioral change — full flow |
|
|
73
73
|
| `type:task` | Issue | Yellow | Operational/non-functional change — full flow |
|
|
74
74
|
| `type:bug` | Issue | Red | Something broken — full flow |
|
|
75
75
|
| `type:spike` | Issue | Gray | Research/evaluation — never reaches Development |
|
|
@@ -90,12 +90,12 @@ The `type:*` label is the authoritative signal — set automatically by the agen
|
|
|
90
90
|
|
|
91
91
|
| Label | Flow |
|
|
92
92
|
|---|---|
|
|
93
|
-
| `type:
|
|
93
|
+
| `type:feature` | brainstorming → Gate 1 → detailing → approval |
|
|
94
94
|
| `type:task` | brainstorming → Gate 1 → detailing → approval |
|
|
95
95
|
| `type:bug` | brainstorming → Gate 1 → detailing → approval |
|
|
96
96
|
| `type:spike` | brainstorming → Gate 1 → detailing → conclusion comment (never reaches Development) |
|
|
97
97
|
|
|
98
|
-
If no `type:*` label present and agent confidence < 85%, defaults to `type:
|
|
98
|
+
If no `type:*` label present and agent confidence < 85%, defaults to `type:feature` (safe fallback — never skips gates by omission).
|
|
99
99
|
|
|
100
100
|
## Bypass Mechanism
|
|
101
101
|
|
|
@@ -103,7 +103,7 @@ Agents MUST NOT skip any stage. The ONLY authorized bypasses are:
|
|
|
103
103
|
|
|
104
104
|
| Mechanism | Who authorizes | What it bypasses |
|
|
105
105
|
|---|---|---|
|
|
106
|
-
| `human-approved` label on issue | PM (human) only | All stage gates |
|
|
106
|
+
| `human-approved` label on issue | PM (human) only | All stage gates — automation adds `qa:approved` to linked PRs, moving card to Code Review / PR. `pdlc-stage-gate` accepts `stage:testing` as a valid post-gate state. |
|
|
107
107
|
| Branch prefix `hotfix/` | PM (human) only | PR gate only |
|
|
108
108
|
|
|
109
109
|
Agents MUST NOT self-authorize a bypass. Stop and ask the PM explicitly.
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# Jules Label PAT Split Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
4
|
+
|
|
5
|
+
**Goal:** Split the `Update Labels` step in both template `agent-trigger.yml` files so stage labels use `GITHUB_TOKEN` and the agent label (`jules`) uses `PROJECT_PAT`, ensuring external GitHub App webhooks fire.
|
|
6
|
+
|
|
7
|
+
**Architecture:** Two YAML edits — one per template file (they are identical in content). The existing single step that adds all labels via `GITHUB_TOKEN` is replaced by two sequential steps: first adds stage labels via `GITHUB_TOKEN`, second adds the agent label via `PROJECT_PAT` with a guard condition. No new files, no script changes.
|
|
8
|
+
|
|
9
|
+
**Tech Stack:** GitHub Actions YAML, `actions/github-script@v7`
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## File Map
|
|
14
|
+
|
|
15
|
+
| Action | File |
|
|
16
|
+
|---|---|
|
|
17
|
+
| Modify | `templates/.github/workflows/agent-trigger.yml` |
|
|
18
|
+
| Modify | `.agentic-pdlc/templates/.github/workflows/agent-trigger.yml` |
|
|
19
|
+
|
|
20
|
+
Both files are identical — apply the same change to each.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
### Task 1: Fix `templates/.github/workflows/agent-trigger.yml`
|
|
25
|
+
|
|
26
|
+
**Files:**
|
|
27
|
+
- Modify: `templates/.github/workflows/agent-trigger.yml`
|
|
28
|
+
|
|
29
|
+
Current `Update Labels` step (lines 25–53):
|
|
30
|
+
|
|
31
|
+
```yaml
|
|
32
|
+
- name: Update Labels
|
|
33
|
+
uses: actions/github-script@v7
|
|
34
|
+
with:
|
|
35
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
36
|
+
script: |
|
|
37
|
+
const { owner, repo } = context.repo;
|
|
38
|
+
const issue_number = context.payload.issue.number;
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
await github.rest.issues.removeLabel({
|
|
42
|
+
owner,
|
|
43
|
+
repo,
|
|
44
|
+
issue_number,
|
|
45
|
+
name: 'stage:approval'
|
|
46
|
+
});
|
|
47
|
+
} catch (error) {
|
|
48
|
+
console.log('Label stage:approval not found or could not be removed');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const agentLabel = '{{IMPLEMENTATION_AGENT_LABEL}}';
|
|
52
|
+
const labelsToAdd = ['stage:development'];
|
|
53
|
+
if (!agentLabel.includes('{{')) labelsToAdd.push(agentLabel, 'agent:working');
|
|
54
|
+
|
|
55
|
+
await github.rest.issues.addLabels({
|
|
56
|
+
owner,
|
|
57
|
+
repo,
|
|
58
|
+
issue_number,
|
|
59
|
+
labels: labelsToAdd
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
- [ ] **Step 1: Replace `Update Labels` step with two steps**
|
|
64
|
+
|
|
65
|
+
Replace the step above with:
|
|
66
|
+
|
|
67
|
+
```yaml
|
|
68
|
+
- name: Update stage labels
|
|
69
|
+
uses: actions/github-script@v7
|
|
70
|
+
with:
|
|
71
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
72
|
+
script: |
|
|
73
|
+
const { owner, repo } = context.repo;
|
|
74
|
+
const issue_number = context.payload.issue.number;
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
await github.rest.issues.removeLabel({
|
|
78
|
+
owner,
|
|
79
|
+
repo,
|
|
80
|
+
issue_number,
|
|
81
|
+
name: 'stage:approval'
|
|
82
|
+
});
|
|
83
|
+
} catch (error) {
|
|
84
|
+
console.log('Label stage:approval not found or could not be removed');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
await github.rest.issues.addLabels({
|
|
88
|
+
owner,
|
|
89
|
+
repo,
|
|
90
|
+
issue_number,
|
|
91
|
+
labels: ['stage:development', 'agent:working']
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
- name: Add agent label via PAT
|
|
95
|
+
if: ${{ env.PROJECT_PAT != '' && !contains('{{IMPLEMENTATION_AGENT_LABEL}}', '{{') }}
|
|
96
|
+
uses: actions/github-script@v7
|
|
97
|
+
with:
|
|
98
|
+
github-token: ${{ env.PROJECT_PAT }}
|
|
99
|
+
script: |
|
|
100
|
+
await github.rest.issues.addLabels({
|
|
101
|
+
owner: context.repo.owner,
|
|
102
|
+
repo: context.repo.repo,
|
|
103
|
+
issue_number: context.payload.issue.number,
|
|
104
|
+
labels: ['{{IMPLEMENTATION_AGENT_LABEL}}']
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
- [ ] **Step 2: Verify file looks correct**
|
|
109
|
+
|
|
110
|
+
Run:
|
|
111
|
+
```bash
|
|
112
|
+
grep -n "name:\|github-token:" templates/.github/workflows/agent-trigger.yml
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Expected output (step names and tokens in order):
|
|
116
|
+
```
|
|
117
|
+
25: - name: Update stage labels
|
|
118
|
+
28: github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
119
|
+
55: - name: Add agent label via PAT
|
|
120
|
+
59: github-token: ${{ env.PROJECT_PAT }}
|
|
121
|
+
65: - name: Move board card to Development
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
- [ ] **Step 3: Commit**
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
git add templates/.github/workflows/agent-trigger.yml
|
|
128
|
+
git commit -m "fix(templates): split jules label into PAT step to fire external App webhook"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
### Task 2: Fix `.agentic-pdlc/templates/.github/workflows/agent-trigger.yml`
|
|
134
|
+
|
|
135
|
+
**Files:**
|
|
136
|
+
- Modify: `.agentic-pdlc/templates/.github/workflows/agent-trigger.yml`
|
|
137
|
+
|
|
138
|
+
Same change as Task 1 — the two files are identical.
|
|
139
|
+
|
|
140
|
+
- [ ] **Step 1: Replace `Update Labels` step with two steps**
|
|
141
|
+
|
|
142
|
+
Replace the same `Update Labels` block with:
|
|
143
|
+
|
|
144
|
+
```yaml
|
|
145
|
+
- name: Update stage labels
|
|
146
|
+
uses: actions/github-script@v7
|
|
147
|
+
with:
|
|
148
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
149
|
+
script: |
|
|
150
|
+
const { owner, repo } = context.repo;
|
|
151
|
+
const issue_number = context.payload.issue.number;
|
|
152
|
+
|
|
153
|
+
try {
|
|
154
|
+
await github.rest.issues.removeLabel({
|
|
155
|
+
owner,
|
|
156
|
+
repo,
|
|
157
|
+
issue_number,
|
|
158
|
+
name: 'stage:approval'
|
|
159
|
+
});
|
|
160
|
+
} catch (error) {
|
|
161
|
+
console.log('Label stage:approval not found or could not be removed');
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
await github.rest.issues.addLabels({
|
|
165
|
+
owner,
|
|
166
|
+
repo,
|
|
167
|
+
issue_number,
|
|
168
|
+
labels: ['stage:development', 'agent:working']
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
- name: Add agent label via PAT
|
|
172
|
+
if: ${{ env.PROJECT_PAT != '' && !contains('{{IMPLEMENTATION_AGENT_LABEL}}', '{{') }}
|
|
173
|
+
uses: actions/github-script@v7
|
|
174
|
+
with:
|
|
175
|
+
github-token: ${{ env.PROJECT_PAT }}
|
|
176
|
+
script: |
|
|
177
|
+
await github.rest.issues.addLabels({
|
|
178
|
+
owner: context.repo.owner,
|
|
179
|
+
repo: context.repo.repo,
|
|
180
|
+
issue_number: context.payload.issue.number,
|
|
181
|
+
labels: ['{{IMPLEMENTATION_AGENT_LABEL}}']
|
|
182
|
+
});
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
- [ ] **Step 2: Verify both files are identical**
|
|
186
|
+
|
|
187
|
+
Run:
|
|
188
|
+
```bash
|
|
189
|
+
diff templates/.github/workflows/agent-trigger.yml .agentic-pdlc/templates/.github/workflows/agent-trigger.yml
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Expected: no output (files identical).
|
|
193
|
+
|
|
194
|
+
- [ ] **Step 3: Commit**
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
git add .agentic-pdlc/templates/.github/workflows/agent-trigger.yml
|
|
198
|
+
git commit -m "fix(templates): mirror jules label PAT split in .agentic-pdlc/templates"
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
### Task 3: Open PR
|
|
204
|
+
|
|
205
|
+
- [ ] **Step 1: Push branch**
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
git push -u origin feat/125-jules-label-pat-split
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
- [ ] **Step 2: Create PR**
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
gh pr create \
|
|
215
|
+
--title "fix(templates): split jules label into PAT step — fix external App webhook" \
|
|
216
|
+
--body "$(cat <<'EOF'
|
|
217
|
+
## Summary
|
|
218
|
+
|
|
219
|
+
- Splits `Update Labels` step in both template `agent-trigger.yml` files into two steps
|
|
220
|
+
- Stage labels (`stage:development`, `agent:working`) remain on `GITHUB_TOKEN`
|
|
221
|
+
- Agent label (`{{IMPLEMENTATION_AGENT_LABEL}}`, e.g. `jules`) moved to new step using `PROJECT_PAT`
|
|
222
|
+
- New step guarded by `PROJECT_PAT != ''` and placeholder check — graceful degradation when PAT not configured
|
|
223
|
+
|
|
224
|
+
## Why
|
|
225
|
+
|
|
226
|
+
GitHub's anti-loop protection suppresses external App webhooks for events generated by `GITHUB_TOKEN`. Jules (external GitHub App) watches the `jules` label event — if generated by `GITHUB_TOKEN`, Jules never fires. Fix confirmed in context-optimizer PR#12.
|
|
227
|
+
|
|
228
|
+
## Test plan
|
|
229
|
+
|
|
230
|
+
- [ ] Scaffold new project with `npx create-agentic-pdlc`
|
|
231
|
+
- [ ] Configure `PROJECT_PAT` secret
|
|
232
|
+
- [ ] Add `spec:approved` to an issue
|
|
233
|
+
- [ ] Verify `stage:development` + `agent:working` added first (GITHUB_TOKEN), then `jules` added as separate event (PAT) → Jules activates automatically
|
|
234
|
+
|
|
235
|
+
Closes #125
|
|
236
|
+
|
|
237
|
+
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
|
238
|
+
EOF
|
|
239
|
+
)"
|
|
240
|
+
```
|