@drunkcoding/agents-and-skills 0.0.19 → 0.0.23
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/.claude-plugin/marketplace.json +5 -5
- package/package.json +1 -1
- package/plugins/auto-power/.claude-plugin/plugin.json +1 -1
- package/plugins/html-effectiveness/.claude-plugin/plugin.json +1 -1
- package/plugins/plugin-validator/.claude-plugin/plugin.json +1 -1
- package/plugins/team-superpower/.claude-plugin/plugin.json +1 -1
- package/plugins/team-superpower/README.md +186 -115
- package/plugins/team-superpower/agents/backend-developer.md +105 -73
- package/plugins/team-superpower/agents/feature-planner.md +66 -0
- package/plugins/team-superpower/agents/frontend-developer.md +108 -70
- package/plugins/team-superpower/agents/orchestrator.md +83 -0
- package/plugins/team-superpower/agents/qc-engineer.md +84 -0
- package/plugins/team-superpower/agents/security-engineer.md +79 -44
- package/plugins/team-superpower/agents/solution-architect.md +80 -0
- package/plugins/team-superpower/agents/team-leader.md +100 -0
- package/plugins/team-superpower/assets/CLAUDE.md.template +22 -18
- package/plugins/team-superpower/assets/ESCALATION.md +114 -66
- package/plugins/team-superpower/assets/SESSION_README.md +232 -159
- package/plugins/team-superpower/commands/team-feature.md +191 -645
- package/plugins/team-superpower/hooks/task-completed.sh +100 -182
- package/plugins/team-superpower/hooks/task-created.sh +55 -38
- package/plugins/team-superpower/hooks/teammate-idle.sh +118 -13
- package/plugins/team-superpower/scripts/team-state.sh +106 -37
- package/plugins/tech-graph/.claude-plugin/plugin.json +1 -1
- package/plugins/team-superpower/agents/designer.md +0 -65
- package/plugins/team-superpower/agents/planner.md +0 -242
- package/plugins/team-superpower/agents/qa-engineer.md +0 -103
- package/plugins/team-superpower/agents/reviewer.md +0 -175
- package/plugins/team-superpower/agents/software-architect.md +0 -60
- package/plugins/team-superpower/commands/team-feature-resume.md +0 -185
|
@@ -1,94 +1,142 @@
|
|
|
1
|
-
# Escalation template (team-superpower)
|
|
1
|
+
# Escalation template (team-superpower v5)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
v5 replaces v4's peer mailbox + multi-class escalation gauntlet with a single routing point: **team-leader**. Implementers SendMessage team-leader; team-leader routes by `class` per spec §6.4. The only owner-facing path is `RESTART_REQUEST` (team-leader → lead → owner recovery touchpoint).
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Where escalations go in v5
|
|
6
|
+
|
|
7
|
+
| From | Channel | Trigger |
|
|
8
|
+
| ----------------------------------------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------- |
|
|
9
|
+
| backend-developer / frontend-developer | SendMessage **team-leader** | Any task-level question that is not pure tactical (style/naming). |
|
|
10
|
+
| security-engineer (phase A) | SendMessage **lead** | SEC_BLOCKED finding, or `CLAUDE.md` `security.*: # CONFIRM:` blocks threat-modelling. |
|
|
11
|
+
| solution-architect / feature-planner (phase A) | SendMessage **lead** | Touchpoint output is owner-facing; lead presents to owner. |
|
|
12
|
+
| qc-engineer (phase G) | SendMessage **lead** | `QC_REWORK_NEEDED <n>` or `QC_PASS <slug>`. Lead re-spawns team-leader for rework dispatch. |
|
|
13
|
+
| team-leader (phase B–F coordinator) | SendMessage **lead** (`SPAWN_REQUEST` / `RESTART_REQUEST`) | Wave dispatch needs implementers; architectural escalation can't be resolved without owner touchpoint. |
|
|
14
|
+
| lead (orchestrator) | Owner touchpoint | Touchpoints 1–4 per spec §3.5 plus recovery touchpoints triggered by RESTART_REQUEST or 3+ QC rounds. |
|
|
15
|
+
|
|
16
|
+
## Implementer → team-leader template (spec §6.4)
|
|
17
|
+
|
|
18
|
+
Use this when a backend-developer or frontend-developer can't resolve a question alone.
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
ESCALATE <task-id>
|
|
22
|
+
class: tactical | cross-role | architectural
|
|
23
|
+
question: <one line>
|
|
24
|
+
context: <2-4 sentences — what we tried, what we considered, why we are stuck>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
team-leader routes by `class`:
|
|
28
|
+
|
|
29
|
+
- **tactical** (style, naming, local design) → team-leader answers from arch-map + AGENTS.md. SendMessage back to originator.
|
|
30
|
+
- **cross-role** (affects another implementer) → team-leader SendMessages the affected peer with the context and a proposed coordination point.
|
|
31
|
+
- **architectural** (changes arch-map, requires planner judgment, invalidates wave plan) → team-leader posts `RESTART_REQUEST <reason+task-id>` to lead. Do NOT re-answer. Do NOT downgrade legitimate architectural questions to tactical.
|
|
32
|
+
|
|
33
|
+
team-leader MAY downgrade an over-eager `class=architectural` to tactical when the question is genuinely style/naming dressed up as architecture. team-leader explains the downgrade in its reply.
|
|
34
|
+
|
|
35
|
+
## team-leader → lead protocols
|
|
36
|
+
|
|
37
|
+
### SPAWN_REQUEST (wave dispatch)
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
SPAWN_REQUEST wave=<plan-phase>.<wave>
|
|
41
|
+
roles_needed:
|
|
42
|
+
backend-developer: <count>
|
|
43
|
+
frontend-developer: <count>
|
|
44
|
+
brief_path: .team-superpower/spawn-briefs/wave-<plan-phase>.<wave>.md
|
|
45
|
+
expected_tasks: [<task-id-1>, <task-id-2>, ...]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Lead reads the brief, TaskCreates per task block, spawns implementers, replies `SPAWN_DONE wave=<...> agent_ids=<...>`.
|
|
49
|
+
|
|
50
|
+
### RESTART_REQUEST (architectural unblock)
|
|
6
51
|
|
|
7
52
|
```
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
Options:
|
|
12
|
-
A. <option> — <trade-off>
|
|
13
|
-
B. <option> — <trade-off>
|
|
14
|
-
C. <option> — <trade-off> (optional)
|
|
15
|
-
Recommendation: <our pick + one-sentence why>
|
|
16
|
-
Need from you: <choose one | yes/no | other>
|
|
17
|
-
Peer attempts:
|
|
18
|
-
- <ISO ts> asked <role>: <one-line reply summary or "no reply within cadence">
|
|
19
|
-
- <ISO ts> asked <role>: <one-line reply summary or "no reply within cadence">
|
|
20
|
-
(or, when no peer attempt is required:)
|
|
21
|
-
- class=tactical — no peer attempt; logged as assumption, see checkpoint § Assumptions
|
|
22
|
-
- class=owner-only — no peer attempt because <reason>
|
|
53
|
+
RESTART_REQUEST <reason>
|
|
54
|
+
trigger: <task-id | wave-id | qc-issue>
|
|
55
|
+
context: <2-4 sentences — what arch decision broke, what implementers reported>
|
|
23
56
|
```
|
|
24
57
|
|
|
25
|
-
|
|
58
|
+
Lead:
|
|
59
|
+
1. Shuts down all phase B–F teammates (team-leader + active implementers).
|
|
60
|
+
2. Presents owner recovery touchpoint with summary of partial commits + reason.
|
|
61
|
+
3. On owner approval, re-runs phase A (fresh solution-architect + feature-planner + security-engineer if applicable) with the prior spec/plan/arch-map + partial commits as input.
|
|
62
|
+
4. Increments `cycle_restart_count`. Cap is `limits.max_cycle_restarts` (default 2). Third restart triggers owner escalation: "this feature is not tractable, please refactor scope."
|
|
26
63
|
|
|
27
|
-
## Decision classes
|
|
64
|
+
## Decision classes (v5 reference)
|
|
28
65
|
|
|
29
66
|
| Class | Examples | Routing |
|
|
30
67
|
| --------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
31
|
-
| tactical | naming, error wording, log field choice, fixture data, threshold inside a stated range | Originator decides. Logs to
|
|
32
|
-
| cross-role | API contract shape across roles,
|
|
33
|
-
| architectural | new runtime dependency, persistence-model change, public-interface shape change
|
|
34
|
-
|
|
68
|
+
| tactical | naming, error wording, log field choice, fixture data, threshold inside a stated range | Originator decides. Logs to commit body `## Assumptions` line. No escalation. |
|
|
69
|
+
| cross-role | API contract shape across roles, error-handling contract, ambiguous acceptance criterion | `ESCALATE class=cross-role` to team-leader. team-leader routes to affected peer. |
|
|
70
|
+
| architectural | new runtime dependency, persistence-model change, public-interface shape change, contract drift | `ESCALATE class=architectural` to team-leader. team-leader posts `RESTART_REQUEST` to lead. |
|
|
71
|
+
|
|
72
|
+
Classification rule of thumb: if the answer changes a test the implementer would write, AND the existing arch-map / plan does not pin it, AND the change does not alter scope / architecture / external policy, the question is tactical or cross-role. Otherwise it is architectural.
|
|
35
73
|
|
|
36
|
-
|
|
74
|
+
## Worked example 1 — backend-developer tactical (NOT escalated, logged as assumption)
|
|
37
75
|
|
|
38
|
-
|
|
76
|
+
backend-developer chose error message `"user_id required"` over `"missing user_id"` for consistency with existing 422 responses on /v1/users. They log it in the commit body:
|
|
39
77
|
|
|
40
78
|
```
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
Need from you: choose A/B/C.
|
|
50
|
-
Peer attempts:
|
|
51
|
-
- 2026-05-12T14:02Z asked designer: "no reply within cadence (30min)"
|
|
79
|
+
feat(users): validate user_id on POST /v1/users
|
|
80
|
+
|
|
81
|
+
Files: src/routes/users.ts, tests/routes/users.test.ts
|
|
82
|
+
Wave: 2.1
|
|
83
|
+
Test-status: green
|
|
84
|
+
|
|
85
|
+
## Assumptions
|
|
86
|
+
- error string "user_id required" matches existing 422 wording on /v1/users (peer: none, class=tactical)
|
|
52
87
|
```
|
|
53
88
|
|
|
54
|
-
|
|
89
|
+
No `ESCALATE` is sent. team-leader's phase-end review will spot-check assumption lines.
|
|
90
|
+
|
|
91
|
+
## Worked example 2 — cross-role (frontend asks backend via team-leader)
|
|
92
|
+
|
|
93
|
+
frontend-developer hits an ambiguous request shape on a paginated endpoint.
|
|
55
94
|
|
|
56
95
|
```
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
A. Owner confirms PUT /users/{id} is correct → planner amends task 4 → owner re-approves the plan delta → backend-developer proceeds.
|
|
62
|
-
B. Owner confirms POST /users is correct → designer amends the design doc → owner re-approves the design delta → backend-developer proceeds.
|
|
63
|
-
C. Owner reopens the design question entirely (the two APIs imply different semantics).
|
|
64
|
-
Recommendation: A — the design doc was approved first and the discrepancy reads as a plan-writing slip, not a design change. But this is a load-bearing decision and we won't move without your call.
|
|
65
|
-
Need from you: choose A/B/C.
|
|
66
|
-
Peer attempts:
|
|
67
|
-
- class=owner-only — no peer attempt because design-vs-plan contradiction requires owner adjudication
|
|
96
|
+
ESCALATE impl:fe-list-orders
|
|
97
|
+
class: cross-role
|
|
98
|
+
question: Should the paginated /v1/orders response use `nextCursor: string | null` or `nextCursor?: string`?
|
|
99
|
+
context: arch-map §4 pins cursor-based pagination but does not pick the null-vs-omitted shape. AGENTS.md has no precedent. backend-developer published the contract last wave; I need to align before I write the RED test for `useOrdersQuery`.
|
|
68
100
|
```
|
|
69
101
|
|
|
70
|
-
|
|
102
|
+
team-leader inspects the contract artefact, sees the BE published `nextCursor: string | null`, SendMessages frontend-developer with the decision and a one-line rationale, no further action.
|
|
103
|
+
|
|
104
|
+
## Worked example 3 — architectural → RESTART_REQUEST
|
|
105
|
+
|
|
106
|
+
backend-developer discovers mid-implementation that the planned `payments.transactions` table cannot enforce idempotency because the chosen primary key is auto-increment; the arch-map specified idempotency at the application layer but the plan ended up moving it to the DB.
|
|
71
107
|
|
|
72
108
|
```
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
A. Owner rebases the feature branch locally onto origin/main, signals "ready to retry"; lead instructs reviewer to retry merge (counts as 1/3 retries).
|
|
78
|
-
B. Owner pulls latest origin/main into trunk first, then signals; lead retries.
|
|
79
|
-
C. Owner switches the decision to pr_opened and merges via GitHub UI.
|
|
80
|
-
Recommendation: A — the conflict surface is small and a clean rebase plus retry is the cheapest path. We won't move until you say which.
|
|
81
|
-
Need from you: choose A/B/C.
|
|
82
|
-
Peer attempts:
|
|
83
|
-
- class=owner-only — no peer attempt because owner explicitly chose escalate over inline retry
|
|
109
|
+
ESCALATE impl:be-2.3-add-charge-endpoint
|
|
110
|
+
class: architectural
|
|
111
|
+
question: Idempotency on POST /v1/charges requires a stable key the client supplies. The plan task uses the DB auto-id, which won't dedupe retries. Should I add an `idempotency_key` column + unique index, or revert idempotency to the app layer as arch-map originally stated?
|
|
112
|
+
context: arch-map §3.2 said "app-layer idempotency via redis SETNX." Plan task 2.3 dropped redis and pushed dedup to DB without a key column. Either fix changes the migration and the route handler. I held RED before writing code.
|
|
84
113
|
```
|
|
85
114
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
This is shown for completeness; this entry NEVER reaches the owner mailbox. It is what the originator writes into `## Assumptions` in the session checkpoint. No `BLOCKED:` is filed.
|
|
115
|
+
team-leader confirms this contradicts arch-map, posts to lead:
|
|
89
116
|
|
|
90
117
|
```
|
|
91
|
-
|
|
118
|
+
RESTART_REQUEST arch-vs-plan-mismatch on impl:be-2.3
|
|
119
|
+
trigger: impl:be-2.3-add-charge-endpoint
|
|
120
|
+
context: Plan dropped redis layer arch-map specified; resulting migration cannot enforce idempotency. Implementer held RED. Two valid fixes (DB column + index, OR restore redis); both change the plan. Needs solution-architect adjudication, not team-leader.
|
|
92
121
|
```
|
|
93
122
|
|
|
94
|
-
|
|
123
|
+
Lead shuts down team-leader + implementers, presents owner touchpoint summarising partial commits, runs phase A again on owner approval.
|
|
124
|
+
|
|
125
|
+
## Hook validation
|
|
126
|
+
|
|
127
|
+
`task-completed.sh` does NOT gate on the escalation template (escalations are SendMessages, not commits). It DOES validate:
|
|
128
|
+
|
|
129
|
+
- `Files:`, `Wave:`, `Test-status:` lines on every commit (`INVALID_WAVE_REFERENCE` if missing).
|
|
130
|
+
- `Reworks:` line on every commit for an `impl:rework-*` task (`MISSING_REWORK_REFERENCE`).
|
|
131
|
+
- Static-check log present and exit=0 (`MISSING_STATIC_CHECKS`).
|
|
132
|
+
- No agent-attributed commit touches `docs/superpowers/AGENTS.md` (`AGENT_WROTE_AGENTS_MD`).
|
|
133
|
+
|
|
134
|
+
The escalation template is policy, not hook-enforced. team-leader bounces ill-formed `ESCALATE` messages with a one-line reformat request.
|
|
135
|
+
|
|
136
|
+
## v4 → v5 changes (delta reference)
|
|
137
|
+
|
|
138
|
+
- Removed: 4-class table including `owner-only`. v5 routes owner touchpoints only via `RESTART_REQUEST`.
|
|
139
|
+
- Removed: `Peer attempts:` field. v5 implementers do not peer-mailbox; team-leader is the single router.
|
|
140
|
+
- Removed: `BLOCKED:` template with `Phase / Context / Options / Recommendation / Need from you / Peer attempts`. Replaced by terse `ESCALATE / class / question / context`.
|
|
141
|
+
- Removed: `FINISH_BLOCKED` 5-option menu. v5 finish-branch is a lead-only flow; failures are surfaced as a regular touchpoint to owner.
|
|
142
|
+
- Removed: software-architect / planner / reviewer references. Routing collapses to team-leader + lead.
|