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.
Files changed (64) hide show
  1. package/.agentic-pdlc/hooks/pdlc-stage-gate.sh +37 -10
  2. package/.agentic-pdlc/metrics/raw/2026-W22.jsonl +114 -0
  3. package/.claude/settings.json +18 -0
  4. package/.coderabbit.yaml +35 -0
  5. package/.github/ISSUE_TEMPLATE/bug.md +53 -0
  6. package/.github/ISSUE_TEMPLATE/feature.md +54 -0
  7. package/.github/ISSUE_TEMPLATE/task.md +33 -0
  8. package/.github/workflows/add-to-board.yml +1 -1
  9. package/.github/workflows/agent-trigger.yml +4 -4
  10. package/.github/workflows/ci.yml +1 -1
  11. package/.github/workflows/npm-publish.yml +2 -2
  12. package/.github/workflows/pdlc-health-check.yml +1 -1
  13. package/.github/workflows/pdlc-stage-gate.yml +2 -2
  14. package/.github/workflows/project-automation.yml +25 -40
  15. package/AGENTS.md +50 -8
  16. package/CLAUDE.md +3 -1
  17. package/README.md +33 -32
  18. package/SETUP.md +2 -1
  19. package/adapters/claude-code/skill.md +39 -14
  20. package/adapters/hooks/pdlc-stage-gate.sh +3 -8
  21. package/bin/cli.js +555 -194
  22. package/docs/pdlc.md +5 -5
  23. package/docs/superpowers/plans/2026-05-28-jules-label-pat-split.md +240 -0
  24. package/docs/superpowers/plans/2026-05-29-agentic-pulse-rework-taxonomy.md +474 -0
  25. package/docs/superpowers/plans/2026-05-29-qa-gate-enforcement.md +354 -0
  26. package/docs/superpowers/plans/2026-06-04-spec-format-issue-template.md +160 -0
  27. package/docs/superpowers/plans/2026-06-04-two-tier-installer.md +1056 -0
  28. package/docs/superpowers/specs/2026-05-29-agentic-pulse-rework-taxonomy-design.md +122 -0
  29. package/docs/superpowers/specs/2026-06-04-spec-format-issue-template-design.md +46 -0
  30. package/package.json +2 -2
  31. package/templates/.github/ISSUE_TEMPLATE/bug.md +53 -0
  32. package/templates/.github/ISSUE_TEMPLATE/feature.md +54 -0
  33. package/templates/.github/ISSUE_TEMPLATE/task.md +33 -0
  34. package/templates/.github/workflows/add-to-board.yml +4 -4
  35. package/templates/.github/workflows/agent-trigger.yml +22 -13
  36. package/{.agentic-pdlc/templates → templates}/.github/workflows/agentic-metrics.yml +150 -27
  37. package/templates/.github/workflows/ci.yml +1 -1
  38. package/templates/.github/workflows/pdlc-health-check.yml +1 -1
  39. package/templates/.github/workflows/pdlc-stage-gate.yml +2 -2
  40. package/templates/.github/workflows/project-automation.yml +71 -32
  41. package/templates/.github/workflows/qa-agent.yml +32 -18
  42. package/templates/.github/workflows/qa-gate.yml +51 -0
  43. package/templates/full/AGENTS.md +143 -0
  44. package/templates/full/CLAUDE.md +30 -0
  45. package/templates/{docs → full/docs}/pdlc.md +4 -4
  46. package/templates/lite/AGENTS.md +121 -0
  47. package/templates/lite/CLAUDE.md +44 -0
  48. package/tests/cli.test.js +32 -0
  49. package/.agentic-pdlc/templates/.github/CODEOWNERS +0 -5
  50. package/.agentic-pdlc/templates/.github/copilot-instructions.md +0 -12
  51. package/.agentic-pdlc/templates/.github/workflows/add-to-board.yml +0 -38
  52. package/.agentic-pdlc/templates/.github/workflows/agent-trigger.yml +0 -146
  53. package/.agentic-pdlc/templates/.github/workflows/auto-approve.yml +0 -16
  54. package/.agentic-pdlc/templates/.github/workflows/ci.yml +0 -54
  55. package/.agentic-pdlc/templates/.github/workflows/pdlc-health-check.yml +0 -121
  56. package/.agentic-pdlc/templates/.github/workflows/pdlc-stage-gate.yml +0 -51
  57. package/.agentic-pdlc/templates/.github/workflows/project-automation.yml +0 -274
  58. package/.agentic-pdlc/templates/.github/workflows/protect-workflows.yml +0 -21
  59. package/.agentic-pdlc/templates/.github/workflows/qa-agent.yml +0 -128
  60. package/.agentic-pdlc/templates/AGENTS.md +0 -104
  61. package/.agentic-pdlc/templates/docs/pdlc.md +0 -123
  62. package/.github/workflows/agentic-metrics.yml +0 -422
  63. package/.github/workflows/qa-agent.yml +0 -128
  64. package/templates/AGENTS.md +0 -115
@@ -1,39 +1,66 @@
1
1
  #!/bin/bash
2
- # PDLC Stage Gate — blocks gh pr create without stage:approval on linked issue.
2
+ # PDLC Stage Gate — blocks gh pr create and file edits without spec:approved on linked issue.
3
3
  # Bypass: branch prefix hotfix/ skips all checks.
4
4
 
5
5
  INPUT=$(cat)
6
6
  COMMAND=$(echo "$INPUT" | node -e "const d=JSON.parse(require('fs').readFileSync(0)); console.log(d.command || '')" 2>/dev/null || echo "")
7
+ FILE_PATH=$(echo "$INPUT" | node -e "const d=JSON.parse(require('fs').readFileSync(0)); console.log(d.file_path || '')" 2>/dev/null || echo "")
7
8
 
8
- if ! echo "$COMMAND" | grep -q "gh pr create"; then
9
+ IS_PR_CREATE=false
10
+ IS_FILE_EDIT=false
11
+
12
+ if echo "$COMMAND" | grep -q "gh pr create"; then
13
+ IS_PR_CREATE=true
14
+ elif [ -n "$FILE_PATH" ]; then
15
+ IS_FILE_EDIT=true
16
+ fi
17
+
18
+ if [ "$IS_PR_CREATE" != "true" ] && [ "$IS_FILE_EDIT" != "true" ]; then
9
19
  exit 0
10
20
  fi
11
21
 
12
22
  BRANCH=$(git branch --show-current 2>/dev/null || echo "")
13
23
 
14
24
  if echo "$BRANCH" | grep -qE "^hotfix/"; then
15
- echo "✅ PDLC: Hotfix branch — stage gate bypassed."
16
25
  exit 0
17
26
  fi
18
27
 
19
28
  ISSUE_NUM=$(echo "$BRANCH" | grep -oE '[0-9]+' | head -1)
20
29
 
21
30
  if [ -z "$ISSUE_NUM" ]; then
31
+ if [ "$IS_FILE_EDIT" = "true" ]; then
32
+ exit 0
33
+ fi
22
34
  echo "❌ PDLC Stage Gate: Cannot determine issue from branch '$BRANCH'."
23
35
  echo " Use: feat/<issue-number>-<description> or hotfix/<issue-number>-<description>"
24
36
  exit 1
25
37
  fi
26
38
 
27
- LABELS=$(gh issue view "$ISSUE_NUM" --json labels --jq '[.labels[].name] | join(" ")' 2>/dev/null || echo "")
39
+ LABELS=$(gh issue view "$ISSUE_NUM" --json labels --jq '[.labels[].name] | join(" ")' 2>/dev/null)
40
+ if [ $? -ne 0 ] || [ -z "$LABELS" ]; then
41
+ echo "❌ PDLC Stage Gate: Could not fetch labels for issue #$ISSUE_NUM."
42
+ echo " Missing condition: spec:approved"
43
+ echo " Next step: verify gh auth and issue number, then have PM add spec:approved."
44
+ exit 1
45
+ fi
28
46
 
29
- if echo "$LABELS" | grep -qw "stage:approval"; then
30
- echo "✅ PDLC: Issue #$ISSUE_NUM approved — gate passed."
47
+ if echo "$LABELS" | grep -qw "spec:approved"; then
31
48
  exit 0
32
49
  fi
33
50
 
34
51
  STAGE=$(echo "$LABELS" | tr ' ' '\n' | grep "^stage:" | head -1 || echo "none")
35
- echo "❌ PDLC Stage Gate: Issue #$ISSUE_NUM is not approved."
36
- echo " Current stage: $STAGE"
37
- echo " Required: stage:approval label on the issue."
38
- echo " Emergency bypass: rename branch to hotfix/<issue-number>-<description>."
52
+
53
+ if [ "$IS_PR_CREATE" = "true" ]; then
54
+ echo " PDLC Stage Gate: PR creation blocked issue #$ISSUE_NUM missing spec:approved."
55
+ echo " Current stage: $STAGE"
56
+ echo " Missing condition: spec:approved (set by PM after reviewing spec in issue body)"
57
+ echo " Next step: complete spec → stage:approval → wait for PM to add spec:approved."
58
+ echo " Emergency bypass: rename branch to hotfix/<issue-number>-<description>."
59
+ else
60
+ echo "❌ PDLC Stage Gate: File edit blocked — issue #$ISSUE_NUM missing spec:approved."
61
+ echo " Current stage: $STAGE"
62
+ echo " Missing condition: spec:approved (set by PM after reviewing spec in issue body)"
63
+ echo " Next step: complete spec → stage:approval → wait for PM to add spec:approved."
64
+ echo " Emergency bypass: rename branch to hotfix/<issue-number>-<description>."
65
+ fi
39
66
  exit 1
@@ -0,0 +1,114 @@
1
+ {"issueNumber":84,"stage":"stage:brainstorming","durationDays":0}
2
+ {"issueNumber":84,"stage":"stage:detailing","durationDays":0}
3
+ {"issueNumber":84,"stage":"stage:approval","durationDays":0}
4
+ {"issueNumber":84,"stage":"stage:development","durationDays":0}
5
+ {"issueNumber":85,"stage":"stage:brainstorming","durationDays":0}
6
+ {"issueNumber":85,"stage":"stage:detailing","durationDays":0}
7
+ {"issueNumber":85,"stage":"stage:approval","durationDays":0}
8
+ {"issueNumber":85,"stage":"stage:approval","durationDays":0}
9
+ {"issueNumber":87,"stage":"stage:approval","durationDays":0}
10
+ {"issueNumber":87,"stage":"stage:development","durationDays":0}
11
+ {"issueNumber":87,"stage":"stage:brainstorming","durationDays":0}
12
+ {"issueNumber":87,"stage":"stage:detailing","durationDays":0}
13
+ {"issueNumber":87,"stage":"stage:approval","durationDays":0}
14
+ {"issueNumber":88,"stage":"stage:brainstorming","durationDays":0}
15
+ {"issueNumber":88,"stage":"stage:detailing","durationDays":0}
16
+ {"issueNumber":88,"stage":"stage:approval","durationDays":0}
17
+ {"issueNumber":88,"stage":"stage:development","durationDays":0}
18
+ {"issueNumber":89,"stage":"stage:brainstorming","durationDays":0}
19
+ {"issueNumber":90,"stage":"stage:brainstorming","durationDays":0}
20
+ {"issueNumber":90,"stage":"stage:detailing","durationDays":0}
21
+ {"issueNumber":90,"stage":"stage:approval","durationDays":0}
22
+ {"issueNumber":90,"stage":"stage:approval","durationDays":0}
23
+ {"issueNumber":91,"stage":"stage:brainstorming","durationDays":0}
24
+ {"issueNumber":91,"stage":"stage:detailing","durationDays":0}
25
+ {"issueNumber":91,"stage":"stage:approval","durationDays":0}
26
+ {"issueNumber":91,"stage":"stage:development","durationDays":0}
27
+ {"issueNumber":92,"stage":"stage:brainstorming","durationDays":0}
28
+ {"issueNumber":92,"stage":"stage:detailing","durationDays":0}
29
+ {"issueNumber":92,"stage":"stage:approval","durationDays":0}
30
+ {"issueNumber":92,"stage":"stage:development","durationDays":0}
31
+ {"issueNumber":93,"stage":"stage:brainstorming","durationDays":0}
32
+ {"issueNumber":93,"stage":"stage:detailing","durationDays":0}
33
+ {"issueNumber":93,"stage":"stage:approval","durationDays":0}
34
+ {"issueNumber":93,"stage":"stage:development","durationDays":0}
35
+ {"issueNumber":94,"stage":"stage:brainstorming","durationDays":0}
36
+ {"issueNumber":94,"stage":"stage:detailing","durationDays":0}
37
+ {"issueNumber":94,"stage":"stage:approval","durationDays":0}
38
+ {"issueNumber":96,"stage":"stage:brainstorming","durationDays":0}
39
+ {"issueNumber":96,"stage":"stage:detailing","durationDays":0}
40
+ {"issueNumber":96,"stage":"stage:approval","durationDays":0}
41
+ {"issueNumber":96,"stage":"stage:development","durationDays":0}
42
+ {"issueNumber":97,"stage":"stage:brainstorming","durationDays":0}
43
+ {"issueNumber":97,"stage":"stage:detailing","durationDays":0}
44
+ {"issueNumber":97,"stage":"stage:approval","durationDays":0}
45
+ {"issueNumber":109,"stage":"stage:brainstorming","durationDays":0}
46
+ {"issueNumber":109,"stage":"stage:detailing","durationDays":0}
47
+ {"issueNumber":109,"stage":"stage:approval","durationDays":0}
48
+ {"issueNumber":109,"stage":"stage:development","durationDays":0}
49
+ {"issueNumber":110,"stage":"stage:brainstorming","durationDays":0}
50
+ {"issueNumber":110,"stage":"stage:detailing","durationDays":0}
51
+ {"issueNumber":110,"stage":"stage:approval","durationDays":0.3}
52
+ {"issueNumber":110,"stage":"stage:development","durationDays":0}
53
+ {"issueNumber":110,"stage":"stage:testing","durationDays":0}
54
+ {"issueNumber":111,"stage":"stage:brainstorming","durationDays":0}
55
+ {"issueNumber":111,"stage":"stage:detailing","durationDays":0}
56
+ {"issueNumber":111,"stage":"stage:approval","durationDays":0.3}
57
+ {"issueNumber":111,"stage":"stage:development","durationDays":0}
58
+ {"issueNumber":111,"stage":"stage:testing","durationDays":0}
59
+ {"issueNumber":113,"stage":"stage:brainstorming","durationDays":0}
60
+ {"issueNumber":113,"stage":"stage:detailing","durationDays":0}
61
+ {"issueNumber":113,"stage":"stage:approval","durationDays":0}
62
+ {"issueNumber":113,"stage":"stage:development","durationDays":0}
63
+ {"issueNumber":116,"stage":"stage:brainstorming","durationDays":3.7}
64
+ {"issueNumber":116,"stage":"stage:detailing","durationDays":0}
65
+ {"issueNumber":116,"stage":"stage:approval","durationDays":0}
66
+ {"issueNumber":116,"stage":"stage:development","durationDays":0}
67
+ {"issueNumber":119,"stage":"stage:brainstorming","durationDays":0}
68
+ {"issueNumber":119,"stage":"stage:detailing","durationDays":0}
69
+ {"issueNumber":119,"stage":"stage:approval","durationDays":0}
70
+ {"issueNumber":119,"stage":"stage:approval","durationDays":0.3}
71
+ {"issueNumber":119,"stage":"stage:development","durationDays":0}
72
+ {"issueNumber":120,"stage":"stage:brainstorming","durationDays":0}
73
+ {"issueNumber":120,"stage":"stage:detailing","durationDays":0}
74
+ {"issueNumber":120,"stage":"stage:approval","durationDays":0}
75
+ {"issueNumber":120,"stage":"stage:development","durationDays":0}
76
+ {"issueNumber":122,"stage":"stage:brainstorming","durationDays":0.1}
77
+ {"issueNumber":122,"stage":"stage:detailing","durationDays":0}
78
+ {"issueNumber":122,"stage":"stage:approval","durationDays":0}
79
+ {"issueNumber":122,"stage":"stage:development","durationDays":0}
80
+ {"issueNumber":125,"stage":"stage:brainstorming","durationDays":0}
81
+ {"issueNumber":125,"stage":"stage:detailing","durationDays":0}
82
+ {"issueNumber":125,"stage":"stage:approval","durationDays":0.1}
83
+ {"issueNumber":125,"stage":"stage:development","durationDays":0}
84
+ {"issueNumber":128,"stage":"stage:brainstorming","durationDays":0.6}
85
+ {"issueNumber":128,"stage":"stage:detailing","durationDays":0}
86
+ {"issueNumber":128,"stage":"stage:approval","durationDays":0}
87
+ {"issueNumber":128,"stage":"stage:development","durationDays":0}
88
+ {"issueNumber":130,"stage":"stage:brainstorming","durationDays":0}
89
+ {"issueNumber":130,"stage":"stage:detailing","durationDays":0}
90
+ {"issueNumber":130,"stage":"stage:approval","durationDays":0}
91
+ {"issueNumber":130,"stage":"stage:development","durationDays":0}
92
+ {"issueNumber":132,"stage":"stage:brainstorming","durationDays":0}
93
+ {"issueNumber":132,"stage":"stage:detailing","durationDays":0}
94
+ {"issueNumber":132,"stage":"stage:approval","durationDays":0}
95
+ {"issueNumber":132,"stage":"stage:development","durationDays":0}
96
+ {"issueNumber":132,"stage":"stage:testing","durationDays":0}
97
+ {"issueNumber":135,"stage":"stage:brainstorming","durationDays":0}
98
+ {"issueNumber":135,"stage":"stage:detailing","durationDays":0}
99
+ {"issueNumber":135,"stage":"stage:approval","durationDays":0}
100
+ {"issueNumber":135,"stage":"stage:development","durationDays":0}
101
+ {"issueNumber":136,"stage":"stage:brainstorming","durationDays":0}
102
+ {"issueNumber":136,"stage":"stage:detailing","durationDays":0}
103
+ {"issueNumber":136,"stage":"stage:approval","durationDays":0}
104
+ {"issueNumber":136,"stage":"stage:development","durationDays":0}
105
+ {"issueNumber":136,"stage":"stage:testing","durationDays":0.1}
106
+ {"issueNumber":137,"stage":"stage:brainstorming","durationDays":0}
107
+ {"issueNumber":137,"stage":"stage:detailing","durationDays":0}
108
+ {"issueNumber":137,"stage":"stage:approval","durationDays":0}
109
+ {"issueNumber":137,"stage":"stage:development","durationDays":0}
110
+ {"issueNumber":137,"stage":"stage:testing","durationDays":0}
111
+ {"issueNumber":141,"stage":"stage:brainstorming","durationDays":0}
112
+ {"issueNumber":142,"stage":"stage:brainstorming","durationDays":0}
113
+ {"issueNumber":142,"stage":"stage:detailing","durationDays":0}
114
+ {"issueNumber":142,"stage":"stage:approval","durationDays":0}
@@ -9,6 +9,24 @@
9
9
  "command": "bash .agentic-pdlc/hooks/pdlc-stage-gate.sh"
10
10
  }
11
11
  ]
12
+ },
13
+ {
14
+ "matcher": "Edit",
15
+ "hooks": [
16
+ {
17
+ "type": "command",
18
+ "command": "bash .agentic-pdlc/hooks/pdlc-stage-gate.sh"
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "matcher": "Write",
24
+ "hooks": [
25
+ {
26
+ "type": "command",
27
+ "command": "bash .agentic-pdlc/hooks/pdlc-stage-gate.sh"
28
+ }
29
+ ]
12
30
  }
13
31
  ]
14
32
  }
@@ -0,0 +1,35 @@
1
+ language: "en-US"
2
+ reviews:
3
+ profile: "chill"
4
+ request_changes_workflow: false
5
+ high_level_summary: true
6
+ poem: false
7
+ auto_review:
8
+ enabled: true
9
+ drafts: false
10
+ base_branches:
11
+ - main
12
+ path_instructions:
13
+ - path: ".github/workflows/**"
14
+ instructions: >
15
+ Pay close attention to GitHub Actions syntax correctness, trigger
16
+ semantics (push/pull_request/workflow_run events and their filters),
17
+ expression syntax (${{ }}), and shell quoting in run steps.
18
+ Flag any logic that could cause silent failures or unintended trigger
19
+ behavior.
20
+ review_status: true
21
+ auto_apply_labels: true
22
+ labeling_instructions:
23
+ - label: "architecture-violation"
24
+ instructions: >
25
+ Apply when the PR introduces runtime behavior that violates documented
26
+ architectural invariants: code that bypasses the PDLC stage gate at runtime,
27
+ application code that programmatically sets or removes labels reserved for
28
+ automation (stage:*, spec:approved, qa:*) outside of their designated
29
+ automation workflows, business logic added directly to templates instead of
30
+ the CLI, or behavior that directly contradicts invariants in AGENTS.md or
31
+ CLAUDE.md. Do NOT apply for configuration changes to tools (e.g., updating
32
+ .coderabbit.yaml, GitHub Actions workflows, or CI config files) — those are
33
+ infrastructure, not invariant violations.
34
+ chat:
35
+ auto_reply: true
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: Bug
3
+ about: Broken behavior with root cause and fix criteria
4
+ title: 'bug: '
5
+ labels: type:bug
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Problem
10
+
11
+ <!-- What fails. Who affected. Measured impact. -->
12
+
13
+ ## Root Cause
14
+
15
+ <!-- Why it fails. Link to code/config if known. -->
16
+
17
+ ## Reproduction Steps
18
+
19
+ 1.
20
+ 2.
21
+ 3.
22
+
23
+ **Expected:**
24
+ **Actual:**
25
+
26
+ ## Acceptance Criteria
27
+
28
+ <!-- agent fills during detailing -->
29
+
30
+ **AC1 — [name]**
31
+ - Given
32
+ - When
33
+ - Then
34
+
35
+ ## Edge Cases
36
+
37
+ <!-- agent fills during detailing -->
38
+ - EC1: [condition] → [expected behavior]
39
+
40
+ ## Out of Scope
41
+
42
+ <!-- agent fills during detailing -->
43
+ -
44
+
45
+ ## Non-Functional Requirements
46
+
47
+ <!-- agent fills during detailing — omit if pure docs/markdown -->
48
+ - Reliability: idempotent — safe to re-run
49
+
50
+ ## Files to Modify
51
+
52
+ <!-- agent fills during detailing -->
53
+ - `path/to/file` — what changes
@@ -0,0 +1,54 @@
1
+ ---
2
+ name: Feature
3
+ about: New capability with spec scaffold for detailing agent
4
+ title: 'feat: '
5
+ labels: type:feature
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Problem
10
+
11
+ <!-- What fails or is missing. Who affected. Measured impact. -->
12
+
13
+ ## Sprint Goal / Success Metrics
14
+
15
+ <!-- agent fills during detailing -->
16
+
17
+ | Metric | Baseline | Target | When |
18
+ |--------|----------|--------|------|
19
+ | | | | |
20
+
21
+ ## Solution
22
+
23
+ <!-- agent fills during detailing — behavioral description, no implementation details -->
24
+
25
+ ## Acceptance Criteria
26
+
27
+ <!-- agent fills during detailing -->
28
+
29
+ **AC1 — [name]**
30
+ - Given
31
+ - When
32
+ - Then
33
+
34
+ ## Edge Cases
35
+
36
+ <!-- agent fills during detailing -->
37
+ - EC1: [condition] → [expected behavior]
38
+
39
+ ## Out of Scope
40
+
41
+ <!-- agent fills during detailing -->
42
+ -
43
+
44
+ ## Non-Functional Requirements
45
+
46
+ <!-- agent fills during detailing — omit if pure docs/markdown -->
47
+ - Performance:
48
+ - Security:
49
+ - Reliability:
50
+
51
+ ## Files to Modify
52
+
53
+ <!-- agent fills during detailing -->
54
+ - `path/to/file` — what changes
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: Task
3
+ about: Defined work unit with clear done criteria
4
+ title: 'task: '
5
+ labels: type:task
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Objective
10
+
11
+ <!-- What must be done and why. -->
12
+
13
+ ## Steps
14
+
15
+ <!-- agent fills during detailing -->
16
+ 1.
17
+ 2.
18
+
19
+ ## Acceptance Criteria
20
+
21
+ <!-- agent fills during detailing -->
22
+ - [ ]
23
+ - [ ]
24
+
25
+ ## Out of Scope
26
+
27
+ <!-- agent fills during detailing -->
28
+ -
29
+
30
+ ## Files to Modify
31
+
32
+ <!-- agent fills during detailing -->
33
+ - `path/to/file` — what changes
@@ -18,7 +18,7 @@ jobs:
18
18
  steps:
19
19
  - name: Add issue to project board
20
20
  if: ${{ env.PROJECT_TOKEN != '' && env.PROJECT_ID != '{{PROJECT_ID}}' }}
21
- uses: actions/github-script@v7
21
+ uses: actions/github-script@v8
22
22
  with:
23
23
  github-token: ${{ env.PROJECT_TOKEN }}
24
24
  script: |
@@ -22,7 +22,7 @@ jobs:
22
22
  STATUS_DEVELOPMENT: "2c9e78e6"
23
23
  steps:
24
24
  - name: Swap labels — stage:approval → stage:development
25
- uses: actions/github-script@v7
25
+ uses: actions/github-script@v8
26
26
  with:
27
27
  github-token: ${{ secrets.GITHUB_TOKEN }}
28
28
  script: |
@@ -44,13 +44,13 @@ jobs:
44
44
  owner,
45
45
  repo,
46
46
  issue_number,
47
- labels: ['stage:development', 'agent:working']
47
+ labels: ['stage:development']
48
48
  });
49
49
 
50
50
  - name: Move board card to Development
51
51
  if: ${{ env.PROJECT_TOKEN != '' }}
52
52
  continue-on-error: true
53
- uses: actions/github-script@v7
53
+ uses: actions/github-script@v8
54
54
  with:
55
55
  github-token: ${{ env.PROJECT_TOKEN }}
56
56
  script: |
@@ -79,7 +79,7 @@ jobs:
79
79
  contents: read
80
80
  steps:
81
81
  - name: Comment on issue
82
- uses: actions/github-script@v7
82
+ uses: actions/github-script@v8
83
83
  with:
84
84
  github-token: ${{ secrets.GITHUB_TOKEN }}
85
85
  script: |
@@ -11,7 +11,7 @@ jobs:
11
11
  name: Run tests and linters
12
12
  runs-on: ubuntu-latest
13
13
  steps:
14
- - uses: actions/checkout@v4
14
+ - uses: actions/checkout@v5.0.1
15
15
 
16
16
  - name: Setup environment
17
17
  run: echo "Replace this with your language/toolchain setup (e.g., actions/setup-node)"
@@ -14,10 +14,10 @@ jobs:
14
14
 
15
15
  steps:
16
16
  - name: Checkout Code
17
- uses: actions/checkout@v4
17
+ uses: actions/checkout@v5.0.1
18
18
 
19
19
  - name: Setup Node.js
20
- uses: actions/setup-node@v4
20
+ uses: actions/setup-node@v6.4.0
21
21
  with:
22
22
  node-version: '24'
23
23
  registry-url: 'https://registry.npmjs.org'
@@ -27,7 +27,7 @@ jobs:
27
27
  steps:
28
28
  - name: Validate Board Configuration
29
29
  if: ${{ env.PROJECT_TOKEN != '' && env.PROJECT_ID != '{{PROJECT_ID}}' }}
30
- uses: actions/github-script@v7
30
+ uses: actions/github-script@v8
31
31
  with:
32
32
  github-token: ${{ env.PROJECT_TOKEN }}
33
33
  script: |
@@ -37,12 +37,12 @@ jobs:
37
37
 
38
38
  for NUM in $ISSUE_NUMS; do
39
39
  LABELS=$(gh issue view "$NUM" --repo "$REPO" --json labels --jq '[.labels[].name] | join(" ")' 2>/dev/null || echo "")
40
- if echo "$LABELS" | grep -qw "stage:approval" || echo "$LABELS" | grep -qw "spec:approved" || echo "$LABELS" | grep -qw "stage:development"; then
40
+ if echo "$LABELS" | grep -qw "stage:approval" || echo "$LABELS" | grep -qw "spec:approved" || echo "$LABELS" | grep -qw "stage:development" || echo "$LABELS" | grep -qw "stage:testing" || echo "$LABELS" | grep -qw "human-approved"; then
41
41
  echo "✅ Issue #$NUM approved"
42
42
  else
43
43
  STAGE=$(echo "$LABELS" | tr ' ' '\n' | grep "^stage:" | head -1 || echo "none")
44
44
  echo "❌ Issue #$NUM missing approval (current: $STAGE)"
45
- echo " Required: stage:approval OR spec:approved OR stage:development label on the issue."
45
+ echo " Required: stage:approval OR spec:approved OR stage:development OR stage:testing OR human-approved label on the issue."
46
46
  echo " Emergency bypass: add 'hotfix' label to this PR."
47
47
  exit 1
48
48
  fi