@howlil/ez-agents 3.4.1 → 3.5.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/LICENSE +21 -21
- package/README.md +84 -20
- package/agents/ez-observer-agent.md +260 -0
- package/agents/ez-release-agent.md +333 -0
- package/agents/ez-requirements-agent.md +377 -0
- package/agents/ez-scrum-master-agent.md +242 -0
- package/agents/ez-tech-lead-agent.md +267 -0
- package/bin/install.js +3221 -3230
- package/commands/ez/arch-review.md +102 -0
- package/commands/ez/execute-phase.md +11 -0
- package/commands/ez/export-session.md +79 -0
- package/commands/ez/gather-requirements.md +117 -0
- package/commands/ez/git-workflow.md +72 -0
- package/commands/ez/hotfix.md +120 -0
- package/commands/ez/import-session.md +82 -0
- package/commands/ez/join-discord.md +18 -18
- package/commands/ez/list-sessions.md +96 -0
- package/commands/ez/package-manager.md +316 -0
- package/commands/ez/plan-phase.md +9 -1
- package/commands/ez/preflight.md +79 -0
- package/commands/ez/progress.md +13 -1
- package/commands/ez/release.md +153 -0
- package/commands/ez/resume.md +107 -0
- package/commands/ez/standup.md +85 -0
- package/ez-agents/bin/ez-tools.cjs +1095 -716
- package/ez-agents/bin/lib/assistant-adapter.cjs +264 -264
- package/ez-agents/bin/lib/audit-exec.cjs +7 -2
- package/ez-agents/bin/lib/bdd-validator.cjs +622 -0
- package/ez-agents/bin/lib/circuit-breaker.cjs +118 -118
- package/ez-agents/bin/lib/config.cjs +190 -190
- package/ez-agents/bin/lib/content-scanner.cjs +238 -0
- package/ez-agents/bin/lib/context-cache.cjs +154 -0
- package/ez-agents/bin/lib/context-errors.cjs +71 -0
- package/ez-agents/bin/lib/context-manager.cjs +220 -0
- package/ez-agents/bin/lib/discussion-synthesizer.cjs +458 -0
- package/ez-agents/bin/lib/file-access.cjs +207 -0
- package/ez-agents/bin/lib/file-lock.cjs +236 -236
- package/ez-agents/bin/lib/frontmatter.cjs +299 -299
- package/ez-agents/bin/lib/fs-utils.cjs +153 -153
- package/ez-agents/bin/lib/git-errors.cjs +83 -0
- package/ez-agents/bin/lib/git-utils.cjs +118 -0
- package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -0
- package/ez-agents/bin/lib/index.cjs +157 -113
- package/ez-agents/bin/lib/init.cjs +757 -757
- package/ez-agents/bin/lib/lockfile-validator.cjs +227 -0
- package/ez-agents/bin/lib/logger.cjs +124 -124
- package/ez-agents/bin/lib/memory-compression.cjs +256 -0
- package/ez-agents/bin/lib/metrics-tracker.cjs +406 -0
- package/ez-agents/bin/lib/milestone.cjs +241 -241
- package/ez-agents/bin/lib/model-provider.cjs +241 -241
- package/ez-agents/bin/lib/package-manager-detector.cjs +203 -0
- package/ez-agents/bin/lib/package-manager-executor.cjs +385 -0
- package/ez-agents/bin/lib/package-manager-service.cjs +216 -0
- package/ez-agents/bin/lib/phase.cjs +925 -925
- package/ez-agents/bin/lib/planning-write.cjs +107 -107
- package/ez-agents/bin/lib/release-validator.cjs +614 -0
- package/ez-agents/bin/lib/retry.cjs +119 -119
- package/ez-agents/bin/lib/roadmap.cjs +306 -306
- package/ez-agents/bin/lib/safe-exec.cjs +128 -128
- package/ez-agents/bin/lib/safe-path.cjs +130 -130
- package/ez-agents/bin/lib/session-chain.cjs +304 -0
- package/ez-agents/bin/lib/session-errors.cjs +81 -0
- package/ez-agents/bin/lib/session-export.cjs +251 -0
- package/ez-agents/bin/lib/session-import.cjs +262 -0
- package/ez-agents/bin/lib/session-manager.cjs +280 -0
- package/ez-agents/bin/lib/state.cjs +736 -736
- package/ez-agents/bin/lib/temp-file.cjs +239 -239
- package/ez-agents/bin/lib/template.cjs +223 -223
- package/ez-agents/bin/lib/test-file-lock.cjs +112 -112
- package/ez-agents/bin/lib/test-graceful.cjs +93 -93
- package/ez-agents/bin/lib/test-logger.cjs +60 -60
- package/ez-agents/bin/lib/test-safe-exec.cjs +38 -38
- package/ez-agents/bin/lib/test-safe-path.cjs +33 -33
- package/ez-agents/bin/lib/test-temp-file.cjs +125 -125
- package/ez-agents/bin/lib/tier-manager.cjs +428 -0
- package/ez-agents/bin/lib/timeout-exec.cjs +63 -63
- package/ez-agents/bin/lib/url-fetch.cjs +170 -0
- package/ez-agents/bin/lib/verify.cjs +15 -1
- package/ez-agents/references/checkpoints.md +776 -776
- package/ez-agents/references/continuation-format.md +249 -249
- package/ez-agents/references/metrics-schema.md +118 -0
- package/ez-agents/references/planning-config.md +140 -0
- package/ez-agents/references/questioning.md +162 -162
- package/ez-agents/references/tdd.md +263 -263
- package/ez-agents/references/tier-strategy.md +103 -0
- package/ez-agents/templates/bdd-feature.md +173 -0
- package/ez-agents/templates/codebase/concerns.md +310 -310
- package/ez-agents/templates/codebase/conventions.md +307 -307
- package/ez-agents/templates/codebase/integrations.md +280 -280
- package/ez-agents/templates/codebase/stack.md +186 -186
- package/ez-agents/templates/codebase/testing.md +480 -480
- package/ez-agents/templates/config.json +37 -37
- package/ez-agents/templates/continue-here.md +78 -78
- package/ez-agents/templates/discussion.md +68 -0
- package/ez-agents/templates/incident-runbook.md +205 -0
- package/ez-agents/templates/milestone-archive.md +123 -123
- package/ez-agents/templates/milestone.md +115 -115
- package/ez-agents/templates/release-checklist.md +133 -0
- package/ez-agents/templates/requirements.md +231 -231
- package/ez-agents/templates/research-project/ARCHITECTURE.md +204 -204
- package/ez-agents/templates/research-project/FEATURES.md +147 -147
- package/ez-agents/templates/research-project/PITFALLS.md +200 -200
- package/ez-agents/templates/research-project/STACK.md +120 -120
- package/ez-agents/templates/research-project/SUMMARY.md +170 -170
- package/ez-agents/templates/retrospective.md +54 -54
- package/ez-agents/templates/roadmap.md +202 -202
- package/ez-agents/templates/rollback-plan.md +201 -0
- package/ez-agents/templates/summary-minimal.md +41 -41
- package/ez-agents/templates/summary-standard.md +48 -48
- package/ez-agents/templates/summary.md +248 -248
- package/ez-agents/templates/user-setup.md +311 -311
- package/ez-agents/templates/verification-report.md +322 -322
- package/ez-agents/workflows/add-phase.md +112 -112
- package/ez-agents/workflows/add-tests.md +351 -351
- package/ez-agents/workflows/add-todo.md +158 -158
- package/ez-agents/workflows/arch-review.md +54 -0
- package/ez-agents/workflows/audit-milestone.md +332 -332
- package/ez-agents/workflows/autonomous.md +131 -30
- package/ez-agents/workflows/check-todos.md +177 -177
- package/ez-agents/workflows/cleanup.md +152 -152
- package/ez-agents/workflows/complete-milestone.md +766 -766
- package/ez-agents/workflows/diagnose-issues.md +219 -219
- package/ez-agents/workflows/discovery-phase.md +289 -289
- package/ez-agents/workflows/discuss-phase.md +762 -762
- package/ez-agents/workflows/execute-phase.md +513 -468
- package/ez-agents/workflows/execute-plan.md +483 -483
- package/ez-agents/workflows/export-session.md +255 -0
- package/ez-agents/workflows/gather-requirements.md +206 -0
- package/ez-agents/workflows/health.md +159 -159
- package/ez-agents/workflows/help.md +584 -492
- package/ez-agents/workflows/hotfix.md +291 -0
- package/ez-agents/workflows/import-session.md +303 -0
- package/ez-agents/workflows/insert-phase.md +130 -130
- package/ez-agents/workflows/list-phase-assumptions.md +178 -178
- package/ez-agents/workflows/map-codebase.md +316 -316
- package/ez-agents/workflows/new-milestone.md +339 -10
- package/ez-agents/workflows/new-project.md +293 -299
- package/ez-agents/workflows/node-repair.md +92 -92
- package/ez-agents/workflows/pause-work.md +122 -122
- package/ez-agents/workflows/plan-milestone-gaps.md +274 -274
- package/ez-agents/workflows/plan-phase.md +673 -651
- package/ez-agents/workflows/progress.md +372 -382
- package/ez-agents/workflows/quick.md +610 -610
- package/ez-agents/workflows/release.md +253 -0
- package/ez-agents/workflows/remove-phase.md +155 -155
- package/ez-agents/workflows/research-phase.md +74 -74
- package/ez-agents/workflows/resume-project.md +307 -307
- package/ez-agents/workflows/resume-session.md +215 -0
- package/ez-agents/workflows/set-profile.md +81 -81
- package/ez-agents/workflows/settings.md +242 -242
- package/ez-agents/workflows/standup.md +64 -0
- package/ez-agents/workflows/stats.md +57 -57
- package/ez-agents/workflows/transition.md +544 -544
- package/ez-agents/workflows/ui-phase.md +290 -290
- package/ez-agents/workflows/ui-review.md +157 -157
- package/ez-agents/workflows/update.md +320 -320
- package/ez-agents/workflows/validate-phase.md +167 -167
- package/ez-agents/workflows/verify-phase.md +243 -243
- package/ez-agents/workflows/verify-work.md +584 -584
- package/package.json +10 -4
- package/scripts/build-hooks.js +43 -43
- package/scripts/run-tests.cjs +29 -29
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
{
|
|
2
|
-
"mode": "interactive",
|
|
3
|
-
"granularity": "standard",
|
|
4
|
-
"workflow": {
|
|
5
|
-
"research": true,
|
|
6
|
-
"plan_check": true,
|
|
7
|
-
"verifier": true,
|
|
8
|
-
"auto_advance": false,
|
|
9
|
-
"nyquist_validation": true
|
|
10
|
-
},
|
|
11
|
-
"planning": {
|
|
12
|
-
"commit_docs": true,
|
|
13
|
-
"search_gitignored": false
|
|
14
|
-
},
|
|
15
|
-
"parallelization": {
|
|
16
|
-
"enabled": true,
|
|
17
|
-
"plan_level": true,
|
|
18
|
-
"task_level": false,
|
|
19
|
-
"skip_checkpoints": true,
|
|
20
|
-
"max_concurrent_agents": 3,
|
|
21
|
-
"min_plans_for_parallel": 2
|
|
22
|
-
},
|
|
23
|
-
"gates": {
|
|
24
|
-
"confirm_project": true,
|
|
25
|
-
"confirm_phases": true,
|
|
26
|
-
"confirm_roadmap": true,
|
|
27
|
-
"confirm_breakdown": true,
|
|
28
|
-
"confirm_plan": true,
|
|
29
|
-
"execute_next_plan": true,
|
|
30
|
-
"issues_review": true,
|
|
31
|
-
"confirm_transition": true
|
|
32
|
-
},
|
|
33
|
-
"safety": {
|
|
34
|
-
"always_confirm_destructive": true,
|
|
35
|
-
"always_confirm_external_services": true
|
|
36
|
-
}
|
|
37
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"mode": "interactive",
|
|
3
|
+
"granularity": "standard",
|
|
4
|
+
"workflow": {
|
|
5
|
+
"research": true,
|
|
6
|
+
"plan_check": true,
|
|
7
|
+
"verifier": true,
|
|
8
|
+
"auto_advance": false,
|
|
9
|
+
"nyquist_validation": true
|
|
10
|
+
},
|
|
11
|
+
"planning": {
|
|
12
|
+
"commit_docs": true,
|
|
13
|
+
"search_gitignored": false
|
|
14
|
+
},
|
|
15
|
+
"parallelization": {
|
|
16
|
+
"enabled": true,
|
|
17
|
+
"plan_level": true,
|
|
18
|
+
"task_level": false,
|
|
19
|
+
"skip_checkpoints": true,
|
|
20
|
+
"max_concurrent_agents": 3,
|
|
21
|
+
"min_plans_for_parallel": 2
|
|
22
|
+
},
|
|
23
|
+
"gates": {
|
|
24
|
+
"confirm_project": true,
|
|
25
|
+
"confirm_phases": true,
|
|
26
|
+
"confirm_roadmap": true,
|
|
27
|
+
"confirm_breakdown": true,
|
|
28
|
+
"confirm_plan": true,
|
|
29
|
+
"execute_next_plan": true,
|
|
30
|
+
"issues_review": true,
|
|
31
|
+
"confirm_transition": true
|
|
32
|
+
},
|
|
33
|
+
"safety": {
|
|
34
|
+
"always_confirm_destructive": true,
|
|
35
|
+
"always_confirm_external_services": true
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
# Continue-Here Template
|
|
2
|
-
|
|
3
|
-
Copy and fill this structure for `.planning/phases/XX-name/.continue-here.md`:
|
|
4
|
-
|
|
5
|
-
```yaml
|
|
6
|
-
---
|
|
7
|
-
phase: XX-name
|
|
8
|
-
task: 3
|
|
9
|
-
total_tasks: 7
|
|
10
|
-
status: in_progress
|
|
11
|
-
last_updated: 2025-01-15T14:30:00Z
|
|
12
|
-
---
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
```markdown
|
|
16
|
-
<current_state>
|
|
17
|
-
[Where exactly are we? What's the immediate context?]
|
|
18
|
-
</current_state>
|
|
19
|
-
|
|
20
|
-
<completed_work>
|
|
21
|
-
[What got done this session - be specific]
|
|
22
|
-
|
|
23
|
-
- Task 1: [name] - Done
|
|
24
|
-
- Task 2: [name] - Done
|
|
25
|
-
- Task 3: [name] - In progress, [what's done on it]
|
|
26
|
-
</completed_work>
|
|
27
|
-
|
|
28
|
-
<remaining_work>
|
|
29
|
-
[What's left in this phase]
|
|
30
|
-
|
|
31
|
-
- Task 3: [name] - [what's left to do]
|
|
32
|
-
- Task 4: [name] - Not started
|
|
33
|
-
- Task 5: [name] - Not started
|
|
34
|
-
</remaining_work>
|
|
35
|
-
|
|
36
|
-
<decisions_made>
|
|
37
|
-
[Key decisions and why - so next session doesn't re-debate]
|
|
38
|
-
|
|
39
|
-
- Decided to use [X] because [reason]
|
|
40
|
-
- Chose [approach] over [alternative] because [reason]
|
|
41
|
-
</decisions_made>
|
|
42
|
-
|
|
43
|
-
<blockers>
|
|
44
|
-
[Anything stuck or waiting on external factors]
|
|
45
|
-
|
|
46
|
-
- [Blocker 1]: [status/workaround]
|
|
47
|
-
</blockers>
|
|
48
|
-
|
|
49
|
-
<context>
|
|
50
|
-
[Mental state, "vibe", anything that helps resume smoothly]
|
|
51
|
-
|
|
52
|
-
[What were you thinking about? What was the plan?
|
|
53
|
-
This is the "pick up exactly where you left off" context.]
|
|
54
|
-
</context>
|
|
55
|
-
|
|
56
|
-
<next_action>
|
|
57
|
-
[The very first thing to do when resuming]
|
|
58
|
-
|
|
59
|
-
Start with: [specific action]
|
|
60
|
-
</next_action>
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
<yaml_fields>
|
|
64
|
-
Required YAML frontmatter:
|
|
65
|
-
|
|
66
|
-
- `phase`: Directory name (e.g., `02-authentication`)
|
|
67
|
-
- `task`: Current task number
|
|
68
|
-
- `total_tasks`: How many tasks in phase
|
|
69
|
-
- `status`: `in_progress`, `blocked`, `almost_done`
|
|
70
|
-
- `last_updated`: ISO timestamp
|
|
71
|
-
</yaml_fields>
|
|
72
|
-
|
|
73
|
-
<guidelines>
|
|
74
|
-
- Be specific enough that a fresh Claude instance understands immediately
|
|
75
|
-
- Include WHY decisions were made, not just what
|
|
76
|
-
- The `<next_action>` should be actionable without reading anything else
|
|
77
|
-
- This file gets DELETED after resume - it's not permanent storage
|
|
78
|
-
</guidelines>
|
|
1
|
+
# Continue-Here Template
|
|
2
|
+
|
|
3
|
+
Copy and fill this structure for `.planning/phases/XX-name/.continue-here.md`:
|
|
4
|
+
|
|
5
|
+
```yaml
|
|
6
|
+
---
|
|
7
|
+
phase: XX-name
|
|
8
|
+
task: 3
|
|
9
|
+
total_tasks: 7
|
|
10
|
+
status: in_progress
|
|
11
|
+
last_updated: 2025-01-15T14:30:00Z
|
|
12
|
+
---
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```markdown
|
|
16
|
+
<current_state>
|
|
17
|
+
[Where exactly are we? What's the immediate context?]
|
|
18
|
+
</current_state>
|
|
19
|
+
|
|
20
|
+
<completed_work>
|
|
21
|
+
[What got done this session - be specific]
|
|
22
|
+
|
|
23
|
+
- Task 1: [name] - Done
|
|
24
|
+
- Task 2: [name] - Done
|
|
25
|
+
- Task 3: [name] - In progress, [what's done on it]
|
|
26
|
+
</completed_work>
|
|
27
|
+
|
|
28
|
+
<remaining_work>
|
|
29
|
+
[What's left in this phase]
|
|
30
|
+
|
|
31
|
+
- Task 3: [name] - [what's left to do]
|
|
32
|
+
- Task 4: [name] - Not started
|
|
33
|
+
- Task 5: [name] - Not started
|
|
34
|
+
</remaining_work>
|
|
35
|
+
|
|
36
|
+
<decisions_made>
|
|
37
|
+
[Key decisions and why - so next session doesn't re-debate]
|
|
38
|
+
|
|
39
|
+
- Decided to use [X] because [reason]
|
|
40
|
+
- Chose [approach] over [alternative] because [reason]
|
|
41
|
+
</decisions_made>
|
|
42
|
+
|
|
43
|
+
<blockers>
|
|
44
|
+
[Anything stuck or waiting on external factors]
|
|
45
|
+
|
|
46
|
+
- [Blocker 1]: [status/workaround]
|
|
47
|
+
</blockers>
|
|
48
|
+
|
|
49
|
+
<context>
|
|
50
|
+
[Mental state, "vibe", anything that helps resume smoothly]
|
|
51
|
+
|
|
52
|
+
[What were you thinking about? What was the plan?
|
|
53
|
+
This is the "pick up exactly where you left off" context.]
|
|
54
|
+
</context>
|
|
55
|
+
|
|
56
|
+
<next_action>
|
|
57
|
+
[The very first thing to do when resuming]
|
|
58
|
+
|
|
59
|
+
Start with: [specific action]
|
|
60
|
+
</next_action>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
<yaml_fields>
|
|
64
|
+
Required YAML frontmatter:
|
|
65
|
+
|
|
66
|
+
- `phase`: Directory name (e.g., `02-authentication`)
|
|
67
|
+
- `task`: Current task number
|
|
68
|
+
- `total_tasks`: How many tasks in phase
|
|
69
|
+
- `status`: `in_progress`, `blocked`, `almost_done`
|
|
70
|
+
- `last_updated`: ISO timestamp
|
|
71
|
+
</yaml_fields>
|
|
72
|
+
|
|
73
|
+
<guidelines>
|
|
74
|
+
- Be specific enough that a fresh Claude instance understands immediately
|
|
75
|
+
- Include WHY decisions were made, not just what
|
|
76
|
+
- The `<next_action>` should be actionable without reading anything else
|
|
77
|
+
- This file gets DELETED after resume - it's not permanent storage
|
|
78
|
+
</guidelines>
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
phase: {phase-number}-{phase-slug}
|
|
3
|
+
status: open
|
|
4
|
+
participants: [ez-requirements-agent, ez-tech-lead-agent, ez-observer-agent, ez-scrum-master-agent]
|
|
5
|
+
opened: {timestamp}
|
|
6
|
+
consensus: pending
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Phase {X}: {Name} — Pre-Execution Discussion
|
|
10
|
+
|
|
11
|
+
**Purpose:** Parallel agent perspectives before phase execution. Orchestrator reads consensus before spawning executors.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Requirements Perspective (ez-requirements-agent)
|
|
16
|
+
|
|
17
|
+
> *Populated by ez-requirements-agent during phase kickoff*
|
|
18
|
+
|
|
19
|
+
{Populated during gather-requirements or plan-phase kickoff}
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Tech Lead Perspective (ez-tech-lead-agent)
|
|
24
|
+
|
|
25
|
+
> *Populated by ez-tech-lead-agent during plan-phase review*
|
|
26
|
+
|
|
27
|
+
{Populated during arch-review after plan creation}
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Observer Perspective (ez-observer-agent)
|
|
32
|
+
|
|
33
|
+
> *Populated by ez-observer-agent during execute-phase pre-flight*
|
|
34
|
+
|
|
35
|
+
{Populated during execute-phase pre-flight}
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Scrum Master Perspective (ez-scrum-master-agent)
|
|
40
|
+
|
|
41
|
+
> *Populated by ez-scrum-master-agent during phase kickoff*
|
|
42
|
+
|
|
43
|
+
{Populated during standup or phase kickoff}
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Consensus
|
|
48
|
+
|
|
49
|
+
> *Synthesized by orchestrator from above perspectives*
|
|
50
|
+
|
|
51
|
+
**Status:** {open | consensus-reached | needs-human}
|
|
52
|
+
|
|
53
|
+
### Blockers
|
|
54
|
+
{List any hard blockers from any agent, or "None"}
|
|
55
|
+
|
|
56
|
+
### Key Warnings
|
|
57
|
+
{List significant warnings, or "None"}
|
|
58
|
+
|
|
59
|
+
### Go / No-Go
|
|
60
|
+
{GO — proceed to execution | NO-GO — resolve blockers first | HUMAN-NEEDED — requires user input}
|
|
61
|
+
|
|
62
|
+
### Rationale
|
|
63
|
+
{1-2 sentences explaining the consensus decision}
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
*Discussion opened: {timestamp}*
|
|
68
|
+
*Last updated: {timestamp}*
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Incident Runbook: {service-name}
|
|
2
|
+
|
|
3
|
+
**Version:** v{version} ({tier} tier)
|
|
4
|
+
**Last updated:** {date}
|
|
5
|
+
**Owner:** {team or individual}
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Severity Levels
|
|
10
|
+
|
|
11
|
+
| Level | Description | Response Time | Example |
|
|
12
|
+
|-------|-------------|---------------|---------|
|
|
13
|
+
| P0 — Critical | Complete outage, data loss | Immediate | App unreachable, DB corruption |
|
|
14
|
+
| P1 — High | Major feature broken, many users affected | 15 minutes | Login broken, payments failing |
|
|
15
|
+
| P2 — Medium | Feature degraded, workaround exists | 1 hour | Slow responses, non-critical feature down |
|
|
16
|
+
| P3 — Low | Minor issue, cosmetic | Next business day | UI glitch, non-critical error |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## On-Call Contacts
|
|
21
|
+
|
|
22
|
+
| Role | Contact | When to Call |
|
|
23
|
+
|------|---------|--------------|
|
|
24
|
+
| Primary on-call | {name/handle} | P0 and P1 |
|
|
25
|
+
| Secondary | {name/handle} | Primary unreachable |
|
|
26
|
+
| Database | {name/handle} | DB issues |
|
|
27
|
+
| Platform/Infra | {name/handle} | Infrastructure issues |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Quick Diagnostics
|
|
32
|
+
|
|
33
|
+
### 1. Is the app running?
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
curl -f https://{your-domain}/health && echo "UP" || echo "DOWN"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 2. Check recent deployments
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
git log --oneline -5 # Recent commits
|
|
43
|
+
# Or check your deployment platform dashboard
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 3. Check error logs
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Vercel: vercel logs
|
|
50
|
+
# Railway: railway logs
|
|
51
|
+
# Generic: tail -100 /var/log/app.log
|
|
52
|
+
# Or: check error tracking dashboard (Sentry, etc.)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 4. Check database connectivity
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Test DB connection
|
|
59
|
+
node -e "
|
|
60
|
+
const { PrismaClient } = require('@prisma/client');
|
|
61
|
+
const prisma = new PrismaClient();
|
|
62
|
+
prisma.\$connect().then(() => { console.log('DB OK'); process.exit(0); })
|
|
63
|
+
.catch(e => { console.error('DB FAIL:', e.message); process.exit(1); });
|
|
64
|
+
"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Common Incidents and Resolutions
|
|
70
|
+
|
|
71
|
+
### App is down (P0)
|
|
72
|
+
|
|
73
|
+
1. Check if recent deployment caused it: `git log --oneline -3`
|
|
74
|
+
2. If yes → roll back immediately (see Rollback Procedure)
|
|
75
|
+
3. If no → check infrastructure status (hosting provider status page)
|
|
76
|
+
4. Check logs for error pattern
|
|
77
|
+
5. If DB issue → see DB incident section
|
|
78
|
+
|
|
79
|
+
### Login/Auth broken (P1)
|
|
80
|
+
|
|
81
|
+
1. Check auth service logs
|
|
82
|
+
2. Verify environment variables: `NEXTAUTH_SECRET`, `NEXTAUTH_URL`, OAuth credentials
|
|
83
|
+
3. Check if auth provider (Google, GitHub, etc.) is having issues
|
|
84
|
+
4. Test with curl: `curl -X POST /api/auth/signin`
|
|
85
|
+
5. If JWT secret rotated → issue new tokens (force re-login acceptable)
|
|
86
|
+
|
|
87
|
+
### Payments failing (P1)
|
|
88
|
+
|
|
89
|
+
1. Check payment provider dashboard (Stripe, etc.) for service issues
|
|
90
|
+
2. Check webhook delivery in provider dashboard
|
|
91
|
+
3. Verify API keys are valid: check for expiry or rotation
|
|
92
|
+
4. Check logs for specific Stripe error codes
|
|
93
|
+
5. **Do NOT retry failed charges** until root cause identified
|
|
94
|
+
|
|
95
|
+
### Database full / slow (P1)
|
|
96
|
+
|
|
97
|
+
1. Check disk usage and connection count
|
|
98
|
+
2. Identify slow queries: check database logs or monitoring
|
|
99
|
+
3. Kill long-running queries if blocking
|
|
100
|
+
4. Check for lock contention
|
|
101
|
+
5. Consider read replica if load issue
|
|
102
|
+
|
|
103
|
+
### High error rate (P2)
|
|
104
|
+
|
|
105
|
+
1. Check error tracking for error pattern
|
|
106
|
+
2. Identify affected endpoints from logs
|
|
107
|
+
3. Check if recent deployment correlates
|
|
108
|
+
4. Roll back if correlation found
|
|
109
|
+
5. Otherwise: hotfix with `/ez:hotfix start {description}`
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Rollback Procedure
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# 1. Decision: roll back if P0/P1 persists > {rollback_window}
|
|
117
|
+
|
|
118
|
+
# 2. Roll back application
|
|
119
|
+
vercel rollback # Vercel
|
|
120
|
+
# OR: git revert HEAD && git push # generic
|
|
121
|
+
|
|
122
|
+
# 3. Verify health
|
|
123
|
+
curl -f https://{your-domain}/health
|
|
124
|
+
|
|
125
|
+
# 4. Notify stakeholders
|
|
126
|
+
# See communication templates below
|
|
127
|
+
|
|
128
|
+
# 5. Document in post-mortem
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Full rollback plan: `.planning/releases/v{version}-ROLLBACK-PLAN.md`
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Communication Templates
|
|
136
|
+
|
|
137
|
+
### Customer-facing (P0)
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
[{service-name} Status] Service disruption
|
|
141
|
+
|
|
142
|
+
We are experiencing a service disruption affecting {impact description}.
|
|
143
|
+
Our team is actively working to restore service.
|
|
144
|
+
|
|
145
|
+
Current status: Investigating
|
|
146
|
+
ETA: Unknown (update in 30 minutes)
|
|
147
|
+
|
|
148
|
+
We apologize for the inconvenience.
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Customer-facing (Resolved)
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
[{service-name} Status] Service restored
|
|
155
|
+
|
|
156
|
+
The service disruption has been resolved at {time}.
|
|
157
|
+
All systems are operating normally.
|
|
158
|
+
|
|
159
|
+
Duration: {duration}
|
|
160
|
+
Impact: {description}
|
|
161
|
+
|
|
162
|
+
We apologize for the disruption. A full post-mortem will be published at {link}.
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Post-Incident Process
|
|
168
|
+
|
|
169
|
+
1. **Immediate** (within 1 hour): Write incident timeline in `.planning/incidents/{date}-{title}.md`
|
|
170
|
+
2. **Short-term** (within 24 hours): Root cause analysis complete
|
|
171
|
+
3. **Follow-up** (within 1 week): Prevention measures implemented
|
|
172
|
+
|
|
173
|
+
### Post-Mortem Template
|
|
174
|
+
|
|
175
|
+
```markdown
|
|
176
|
+
# Incident Post-Mortem: {title}
|
|
177
|
+
|
|
178
|
+
**Date:** {date}
|
|
179
|
+
**Duration:** {start} – {end} ({total duration})
|
|
180
|
+
**Severity:** P{level}
|
|
181
|
+
**Impact:** {affected users/features}
|
|
182
|
+
|
|
183
|
+
## Timeline
|
|
184
|
+
- HH:MM — {event}
|
|
185
|
+
- HH:MM — {event}
|
|
186
|
+
|
|
187
|
+
## Root Cause
|
|
188
|
+
{Single sentence root cause}
|
|
189
|
+
|
|
190
|
+
## Contributing Factors
|
|
191
|
+
{What made this possible}
|
|
192
|
+
|
|
193
|
+
## What Went Well
|
|
194
|
+
{Detection speed, response time, etc.}
|
|
195
|
+
|
|
196
|
+
## Action Items
|
|
197
|
+
| Action | Owner | Due |
|
|
198
|
+
|--------|-------|-----|
|
|
199
|
+
| {item} | {person} | {date} |
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
*Generated by EZ Agents release-agent*
|
|
205
|
+
*Tier: {tier} | Version: v{version}*
|