@fredericboyer/dev-team 0.4.1 → 0.6.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.
@@ -83,3 +83,9 @@ Same grouping. Include actionable recommendations.
83
83
  ### Recommended next steps
84
84
 
85
85
  Numbered list of concrete actions, ordered by priority. Each action should reference the specific finding it addresses.
86
+
87
+ ### Completion
88
+
89
+ After the audit report is delivered:
90
+ 1. Spawn **@dev-team-borges** (Librarian) to review memory freshness and capture learnings from the audit findings. This is mandatory.
91
+ 2. Include Borges's recommendations in the final report.
@@ -66,3 +66,9 @@ Group by severity:
66
66
  - **Request changes** — `[DEFECT]` findings must be resolved.
67
67
 
68
68
  State the verdict clearly. List what must be fixed for approval if requesting changes.
69
+
70
+ ### Completion
71
+
72
+ After the review report is delivered:
73
+ 1. Spawn **@dev-team-borges** (Librarian) to review memory freshness and capture any learnings from the review findings. This is mandatory.
74
+ 2. Include Borges's recommendations in the final report.
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: security-status
3
+ description: Check GitHub security signals — code scanning, Dependabot, secret scanning, and compliance status. Use at session start and before releases.
4
+ user_invocable: true
5
+ ---
6
+
7
+ # Security Status Check
8
+
9
+ Proactively monitor all GitHub Advanced Security signals for this repository.
10
+
11
+ ## Steps
12
+
13
+ 1. **Run all checks in parallel** using the Bash tool with `gh api`. Derive {owner}/{repo} from `gh repo view --json nameWithOwner --jq .nameWithOwner`:
14
+
15
+ - Code scanning alerts (CodeQL, code quality): `gh api --paginate repos/{owner}/{repo}/code-scanning/alerts?state=open`
16
+ - Dependabot alerts (vulnerable dependencies): `gh api --paginate repos/{owner}/{repo}/dependabot/alerts?state=open`
17
+ - Secret scanning alerts: `gh api --paginate repos/{owner}/{repo}/secret-scanning/alerts?state=open`
18
+ - Pending Dependabot PRs: `gh pr list --label dependencies`
19
+ - Copilot review status on open PRs: check reviews on each open PR
20
+
21
+ 2. **Report findings** in a summary table:
22
+
23
+ | Signal | Status | Details |
24
+ |--------|--------|---------|
25
+ | Code Scanning (CodeQL) | X open alerts | severity breakdown |
26
+ | Dependabot Security | X open alerts | affected packages |
27
+ | Dependabot Updates | X pending PRs | age of oldest |
28
+ | Secret Scanning | X open alerts | types |
29
+ | Copilot Review | X comments on open PRs | blocking? |
30
+
31
+ 3. **Classify findings:**
32
+ - `[DEFECT]` — Critical/high severity security alerts, exposed secrets
33
+ - `[RISK]` — Medium severity alerts, stale Dependabot PRs (>7 days)
34
+ - `[SUGGESTION]` — Low severity, informational
35
+
36
+ 4. **Recommend actions** for any open alerts — who should fix, urgency, and whether it blocks the current work.
37
+
38
+ ## When to run
39
+
40
+ - **Every session start** — quick baseline check
41
+ - **Before creating a release** — compliance gate
42
+ - **After merging Dependabot PRs** — verify alerts resolved
43
+ - **On request** — `/dev-team:security-status`
@@ -50,6 +50,48 @@ Each iteration:
50
50
 
51
51
  The Stop hook (`dev-team-task-loop.js`) manages iteration counting and re-injection.
52
52
 
53
+ ## Parallel mode
54
+
55
+ When multiple issues are being addressed in a single session, the task loop switches to parallel orchestration (see ADR-019). Drucker coordinates all phases.
56
+
57
+ ### Phase 0: Brooks pre-assessment (batch)
58
+ Spawn @dev-team-brooks once with all issues. Brooks identifies:
59
+ - **File independence**: which issues touch overlapping files (conflict groups that must run sequentially)
60
+ - **ADR needs** across the batch
61
+ - **Architectural interactions** between issues
62
+
63
+ Issues in the same conflict group execute sequentially. Independent issues proceed in parallel.
64
+
65
+ ### Phase 1: Parallel implementation
66
+ Drucker spawns one implementing agent per independent issue, each on its own branch (`feat/<issue>-<description>`). Agents work concurrently without awareness of each other. Track state in `.claude/dev-team-parallel.json`:
67
+ ```json
68
+ {
69
+ "mode": "parallel",
70
+ "issues": [
71
+ { "issue": 42, "branch": "feat/42-add-auth", "agent": "dev-team-voss", "status": "implementing" },
72
+ { "issue": 43, "branch": "feat/43-fix-nav", "agent": "dev-team-mori", "status": "implementing" }
73
+ ],
74
+ "phase": "implementation",
75
+ "conflictGroups": [[42, 55]],
76
+ "reviewWave": null
77
+ }
78
+ ```
79
+
80
+ ### Phase 2: Review wave
81
+ Reviews do **not** start until **all** implementation agents have completed. Once all are done, spawn review agents (Szabo + Knuth, plus conditional reviewers) in parallel across all branches simultaneously. Each reviewer receives the diff for one specific branch and produces classified findings scoped to that branch.
82
+
83
+ ### Phase 3: Defect routing
84
+ Collect all findings. Route `[DEFECT]` items back to the original implementing agent for each branch. Agents fix defects on their own branch. After fixes, another review wave runs. Continue until no `[DEFECT]` findings remain or the per-branch iteration limit is reached.
85
+
86
+ ### Phase 4: Borges completion
87
+ Borges runs **once** across all branches after the final review wave clears. This ensures cross-branch coherence: memory files are consistent, learnings are not duplicated, and system improvement recommendations consider the full batch.
88
+
89
+ ### Convergence criteria
90
+ Parallel mode is complete when:
91
+ 1. All branches have zero `[DEFECT]` findings, OR the per-branch iteration limit (default: 10) is reached
92
+ 2. Borges has run across all branches
93
+ 3. `.claude/dev-team-parallel.json` is deleted
94
+
53
95
  ## Completion
54
96
 
55
97
  When the loop exits: