@sienklogic/plan-build-run 2.3.0 → 2.4.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/CHANGELOG.md +49 -0
- package/README.md +54 -20
- package/dashboard/src/services/dashboard.service.js +24 -1
- package/dashboard/src/services/milestone.service.js +68 -17
- package/package.json +1 -1
- package/plugins/copilot-pbr/CHANGELOG.md +19 -0
- package/plugins/copilot-pbr/README.md +129 -0
- package/plugins/copilot-pbr/agents/codebase-mapper.agent.md +109 -0
- package/plugins/copilot-pbr/agents/debugger.agent.md +169 -0
- package/plugins/copilot-pbr/agents/executor.agent.md +237 -0
- package/plugins/copilot-pbr/agents/general.agent.md +88 -0
- package/plugins/copilot-pbr/agents/integration-checker.agent.md +88 -0
- package/plugins/copilot-pbr/agents/plan-checker.agent.md +199 -0
- package/plugins/copilot-pbr/agents/planner.agent.md +181 -0
- package/plugins/copilot-pbr/agents/researcher.agent.md +163 -0
- package/plugins/copilot-pbr/agents/synthesizer.agent.md +102 -0
- package/plugins/copilot-pbr/agents/verifier.agent.md +194 -0
- package/plugins/copilot-pbr/hooks/hooks.json +144 -0
- package/plugins/copilot-pbr/plugin.json +30 -0
- package/plugins/copilot-pbr/references/agent-anti-patterns.md +25 -0
- package/plugins/copilot-pbr/references/agent-interactions.md +135 -0
- package/plugins/copilot-pbr/references/agent-teams.md +55 -0
- package/plugins/copilot-pbr/references/checkpoints.md +158 -0
- package/plugins/copilot-pbr/references/common-bug-patterns.md +14 -0
- package/plugins/copilot-pbr/references/config-reference.md +442 -0
- package/plugins/copilot-pbr/references/continuation-format.md +213 -0
- package/plugins/copilot-pbr/references/deviation-rules.md +113 -0
- package/plugins/copilot-pbr/references/git-integration.md +227 -0
- package/plugins/copilot-pbr/references/integration-patterns.md +118 -0
- package/plugins/copilot-pbr/references/model-profiles.md +100 -0
- package/plugins/copilot-pbr/references/model-selection.md +32 -0
- package/plugins/copilot-pbr/references/pbr-rules.md +194 -0
- package/plugins/copilot-pbr/references/plan-authoring.md +182 -0
- package/plugins/copilot-pbr/references/plan-format.md +288 -0
- package/plugins/copilot-pbr/references/planning-config.md +214 -0
- package/plugins/copilot-pbr/references/questioning.md +215 -0
- package/plugins/copilot-pbr/references/reading-verification.md +128 -0
- package/plugins/copilot-pbr/references/stub-patterns.md +161 -0
- package/plugins/copilot-pbr/references/subagent-coordination.md +120 -0
- package/plugins/copilot-pbr/references/ui-formatting.md +462 -0
- package/plugins/copilot-pbr/references/verification-patterns.md +199 -0
- package/plugins/copilot-pbr/references/wave-execution.md +96 -0
- package/plugins/copilot-pbr/rules/pbr-workflow.mdc +48 -0
- package/plugins/copilot-pbr/setup.ps1 +93 -0
- package/plugins/copilot-pbr/setup.sh +92 -0
- package/plugins/copilot-pbr/skills/begin/SKILL.md +566 -0
- package/plugins/copilot-pbr/skills/begin/templates/PROJECT.md.tmpl +34 -0
- package/plugins/copilot-pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +19 -0
- package/plugins/copilot-pbr/skills/begin/templates/STATE.md.tmpl +50 -0
- package/plugins/copilot-pbr/skills/begin/templates/config.json.tmpl +64 -0
- package/plugins/copilot-pbr/skills/begin/templates/researcher-prompt.md.tmpl +20 -0
- package/plugins/copilot-pbr/skills/begin/templates/roadmap-prompt.md.tmpl +31 -0
- package/plugins/copilot-pbr/skills/begin/templates/synthesis-prompt.md.tmpl +17 -0
- package/plugins/copilot-pbr/skills/build/SKILL.md +901 -0
- package/plugins/copilot-pbr/skills/config/SKILL.md +253 -0
- package/plugins/copilot-pbr/skills/continue/SKILL.md +159 -0
- package/plugins/copilot-pbr/skills/dashboard/SKILL.md +31 -0
- package/plugins/copilot-pbr/skills/debug/SKILL.md +511 -0
- package/plugins/copilot-pbr/skills/debug/templates/continuation-prompt.md.tmpl +17 -0
- package/plugins/copilot-pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +28 -0
- package/plugins/copilot-pbr/skills/discuss/SKILL.md +343 -0
- package/plugins/copilot-pbr/skills/discuss/templates/CONTEXT.md.tmpl +62 -0
- package/plugins/copilot-pbr/skills/discuss/templates/decision-categories.md +10 -0
- package/plugins/copilot-pbr/skills/do/SKILL.md +66 -0
- package/plugins/copilot-pbr/skills/explore/SKILL.md +374 -0
- package/plugins/copilot-pbr/skills/health/SKILL.md +218 -0
- package/plugins/copilot-pbr/skills/health/templates/check-pattern.md.tmpl +31 -0
- package/plugins/copilot-pbr/skills/health/templates/output-format.md.tmpl +64 -0
- package/plugins/copilot-pbr/skills/help/SKILL.md +152 -0
- package/plugins/copilot-pbr/skills/import/SKILL.md +498 -0
- package/plugins/copilot-pbr/skills/milestone/SKILL.md +703 -0
- package/plugins/copilot-pbr/skills/milestone/templates/audit-report.md.tmpl +49 -0
- package/plugins/copilot-pbr/skills/milestone/templates/stats-file.md.tmpl +31 -0
- package/plugins/copilot-pbr/skills/note/SKILL.md +227 -0
- package/plugins/copilot-pbr/skills/pause/SKILL.md +246 -0
- package/plugins/copilot-pbr/skills/pause/templates/continue-here.md.tmpl +72 -0
- package/plugins/copilot-pbr/skills/plan/SKILL.md +649 -0
- package/plugins/copilot-pbr/skills/plan/templates/checker-prompt.md.tmpl +22 -0
- package/plugins/copilot-pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +33 -0
- package/plugins/copilot-pbr/skills/plan/templates/planner-prompt.md.tmpl +39 -0
- package/plugins/copilot-pbr/skills/plan/templates/researcher-prompt.md.tmpl +20 -0
- package/plugins/copilot-pbr/skills/plan/templates/revision-prompt.md.tmpl +24 -0
- package/plugins/copilot-pbr/skills/quick/SKILL.md +351 -0
- package/plugins/copilot-pbr/skills/resume/SKILL.md +399 -0
- package/plugins/copilot-pbr/skills/review/SKILL.md +648 -0
- package/plugins/copilot-pbr/skills/review/templates/debugger-prompt.md.tmpl +61 -0
- package/plugins/copilot-pbr/skills/review/templates/gap-planner-prompt.md.tmpl +41 -0
- package/plugins/copilot-pbr/skills/review/templates/verifier-prompt.md.tmpl +116 -0
- package/plugins/copilot-pbr/skills/scan/SKILL.md +301 -0
- package/plugins/copilot-pbr/skills/scan/templates/mapper-prompt.md.tmpl +202 -0
- package/plugins/copilot-pbr/skills/setup/SKILL.md +250 -0
- package/plugins/copilot-pbr/skills/shared/commit-planning-docs.md +36 -0
- package/plugins/copilot-pbr/skills/shared/config-loading.md +103 -0
- package/plugins/copilot-pbr/skills/shared/context-budget.md +41 -0
- package/plugins/copilot-pbr/skills/shared/context-loader-task.md +87 -0
- package/plugins/copilot-pbr/skills/shared/digest-select.md +80 -0
- package/plugins/copilot-pbr/skills/shared/domain-probes.md +126 -0
- package/plugins/copilot-pbr/skills/shared/error-reporting.md +80 -0
- package/plugins/copilot-pbr/skills/shared/gate-prompts.md +389 -0
- package/plugins/copilot-pbr/skills/shared/phase-argument-parsing.md +46 -0
- package/plugins/copilot-pbr/skills/shared/progress-display.md +54 -0
- package/plugins/copilot-pbr/skills/shared/revision-loop.md +82 -0
- package/plugins/copilot-pbr/skills/shared/state-loading.md +63 -0
- package/plugins/copilot-pbr/skills/shared/state-update.md +162 -0
- package/plugins/copilot-pbr/skills/shared/universal-anti-patterns.md +34 -0
- package/plugins/copilot-pbr/skills/status/SKILL.md +362 -0
- package/plugins/copilot-pbr/skills/todo/SKILL.md +256 -0
- package/plugins/copilot-pbr/templates/CONTEXT.md.tmpl +53 -0
- package/plugins/copilot-pbr/templates/INTEGRATION-REPORT.md.tmpl +152 -0
- package/plugins/copilot-pbr/templates/RESEARCH-SUMMARY.md.tmpl +98 -0
- package/plugins/copilot-pbr/templates/ROADMAP.md.tmpl +41 -0
- package/plugins/copilot-pbr/templates/SUMMARY.md.tmpl +82 -0
- package/plugins/copilot-pbr/templates/VERIFICATION-DETAIL.md.tmpl +117 -0
- package/plugins/copilot-pbr/templates/codebase/ARCHITECTURE.md.tmpl +98 -0
- package/plugins/copilot-pbr/templates/codebase/CONCERNS.md.tmpl +93 -0
- package/plugins/copilot-pbr/templates/codebase/CONVENTIONS.md.tmpl +104 -0
- package/plugins/copilot-pbr/templates/codebase/INTEGRATIONS.md.tmpl +78 -0
- package/plugins/copilot-pbr/templates/codebase/STACK.md.tmpl +78 -0
- package/plugins/copilot-pbr/templates/codebase/STRUCTURE.md.tmpl +80 -0
- package/plugins/copilot-pbr/templates/codebase/TESTING.md.tmpl +107 -0
- package/plugins/copilot-pbr/templates/continue-here.md.tmpl +74 -0
- package/plugins/copilot-pbr/templates/prompt-partials/phase-project-context.md.tmpl +38 -0
- package/plugins/copilot-pbr/templates/research/ARCHITECTURE.md.tmpl +124 -0
- package/plugins/copilot-pbr/templates/research/STACK.md.tmpl +71 -0
- package/plugins/copilot-pbr/templates/research/SUMMARY.md.tmpl +112 -0
- package/plugins/copilot-pbr/templates/research-outputs/phase-research.md.tmpl +81 -0
- package/plugins/copilot-pbr/templates/research-outputs/project-research.md.tmpl +99 -0
- package/plugins/copilot-pbr/templates/research-outputs/synthesis.md.tmpl +36 -0
- package/plugins/cursor-pbr/.cursor-plugin/plugin.json +13 -3
- package/plugins/cursor-pbr/skills/dashboard/SKILL.md +14 -4
- package/plugins/cursor-pbr/skills/do/SKILL.md +67 -0
- package/plugins/cursor-pbr/skills/milestone/SKILL.md +10 -7
- package/plugins/cursor-pbr/skills/todo/SKILL.md +28 -5
- package/plugins/cursor-pbr/templates/codebase/ARCHITECTURE.md.tmpl +98 -0
- package/plugins/cursor-pbr/templates/codebase/CONCERNS.md.tmpl +93 -0
- package/plugins/cursor-pbr/templates/codebase/CONVENTIONS.md.tmpl +104 -0
- package/plugins/cursor-pbr/templates/codebase/INTEGRATIONS.md.tmpl +78 -0
- package/plugins/cursor-pbr/templates/codebase/STACK.md.tmpl +78 -0
- package/plugins/cursor-pbr/templates/codebase/STRUCTURE.md.tmpl +80 -0
- package/plugins/cursor-pbr/templates/codebase/TESTING.md.tmpl +107 -0
- package/plugins/cursor-pbr/templates/research/ARCHITECTURE.md.tmpl +124 -0
- package/plugins/cursor-pbr/templates/research/STACK.md.tmpl +71 -0
- package/plugins/cursor-pbr/templates/research/SUMMARY.md.tmpl +112 -0
- package/plugins/cursor-pbr/templates/research-outputs/phase-research.md.tmpl +81 -0
- package/plugins/cursor-pbr/templates/research-outputs/project-research.md.tmpl +99 -0
- package/plugins/cursor-pbr/templates/research-outputs/synthesis.md.tmpl +36 -0
- package/plugins/pbr/.claude-plugin/plugin.json +7 -2
- package/plugins/pbr/scripts/validate-skill-args.js +54 -10
- package/plugins/pbr/skills/do/SKILL.md +70 -0
- package/plugins/pbr/skills/milestone/SKILL.md +10 -7
- package/plugins/pbr/skills/todo/SKILL.md +29 -6
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Research Synthesis: {Topic}
|
|
2
|
+
|
|
3
|
+
> Synthesized: {date}
|
|
4
|
+
> Mode: synthesis
|
|
5
|
+
> Input documents: {count}
|
|
6
|
+
> Confidence: {overall}
|
|
7
|
+
|
|
8
|
+
## Executive Summary
|
|
9
|
+
|
|
10
|
+
{Unified findings across all input documents}
|
|
11
|
+
|
|
12
|
+
## Key Findings
|
|
13
|
+
|
|
14
|
+
{Numbered list of the most important findings, with source document attribution}
|
|
15
|
+
|
|
16
|
+
## Contradictions Resolved
|
|
17
|
+
|
|
18
|
+
{Where input documents disagreed and how it was resolved}
|
|
19
|
+
|
|
20
|
+
| Topic | Document A Says | Document B Says | Resolution | Basis |
|
|
21
|
+
|-------|----------------|----------------|------------|-------|
|
|
22
|
+
| ... | ... | ... | ... | ... |
|
|
23
|
+
|
|
24
|
+
## Recommended Approach
|
|
25
|
+
|
|
26
|
+
{The synthesized recommendation}
|
|
27
|
+
|
|
28
|
+
## Risks and Mitigations
|
|
29
|
+
|
|
30
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
31
|
+
|------|-----------|--------|------------|
|
|
32
|
+
| ... | ... | ... | ... |
|
|
33
|
+
|
|
34
|
+
## Sources
|
|
35
|
+
|
|
36
|
+
{Consolidated source list from all input documents}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pbr",
|
|
3
3
|
"displayName": "Plan-Build-Run",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.4.0",
|
|
5
5
|
"description": "Plan-Build-Run — Structured development workflow for Cursor. Solves context rot through disciplined subagent delegation, structured planning, atomic execution, and goal-backward verification.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "SienkLogic",
|
|
@@ -12,9 +12,19 @@
|
|
|
12
12
|
"repository": "https://github.com/SienkLogic/plan-build-run",
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"logo": "../assets/logo.svg",
|
|
15
|
-
"keywords": [
|
|
15
|
+
"keywords": [
|
|
16
|
+
"cursor",
|
|
17
|
+
"context-engineering",
|
|
18
|
+
"development-workflow",
|
|
19
|
+
"subagent-delegation"
|
|
20
|
+
],
|
|
16
21
|
"category": "developer-tools",
|
|
17
|
-
"tags": [
|
|
22
|
+
"tags": [
|
|
23
|
+
"planning",
|
|
24
|
+
"workflow",
|
|
25
|
+
"structured-development",
|
|
26
|
+
"context-management"
|
|
27
|
+
],
|
|
18
28
|
"skills": "./skills/",
|
|
19
29
|
"agents": "./agents/",
|
|
20
30
|
"rules": "./rules/",
|
|
@@ -8,15 +8,25 @@ argument-hint: "[--port N]"
|
|
|
8
8
|
|
|
9
9
|
1. **Parse arguments**: Extract `--port N` from the user's input. Default to `3000`.
|
|
10
10
|
|
|
11
|
-
2. **
|
|
11
|
+
2. **Locate dashboard**: The dashboard lives at `../../dashboard/` relative to this plugin's root directory (i.e. two levels up from `plugins/cursor-pbr/`). Resolve the absolute path.
|
|
12
12
|
|
|
13
|
-
3. **
|
|
13
|
+
3. **Check dependencies**: Check if `node_modules/` exists in the dashboard directory. If not, run:
|
|
14
14
|
```
|
|
15
|
-
|
|
15
|
+
npm install --prefix <dashboard-dir>
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
4. **
|
|
18
|
+
4. **Launch dashboard**: Run in background:
|
|
19
|
+
```
|
|
20
|
+
node <dashboard-dir>/bin/cli.js --dir <cwd> --port <port> &
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
5. **Output to user**:
|
|
19
24
|
```
|
|
20
25
|
Dashboard running at http://localhost:<port>
|
|
21
26
|
Open this URL in your browser to view your project's planning state.
|
|
22
27
|
```
|
|
28
|
+
|
|
29
|
+
## Notes
|
|
30
|
+
|
|
31
|
+
- If the port is already in use, the dashboard will fail to start — suggest the user try a different port with `--port`.
|
|
32
|
+
- The dashboard watches `.planning/` for live updates via SSE.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: do
|
|
3
|
+
description: "Route freeform text to the right PBR skill automatically."
|
|
4
|
+
argument-hint: "<freeform description of what you want to do>"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /pbr:do — Freeform Task Router
|
|
8
|
+
|
|
9
|
+
You are running the **do** skill. Your job is to analyze freeform text from the user and route it to the most appropriate PBR skill. You are a dispatcher, not an executor — you never do the work yourself.
|
|
10
|
+
|
|
11
|
+
## Step 0 — Immediate Output
|
|
12
|
+
|
|
13
|
+
**Before ANY tool calls**, display this banner:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
17
|
+
PLAN-BUILD-RUN ► ROUTING
|
|
18
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Then proceed to Step 1.
|
|
22
|
+
|
|
23
|
+
## Step 1 — Validate Input
|
|
24
|
+
|
|
25
|
+
If `$ARGUMENTS` is empty, ask the user what they want to do via AskUserQuestion:
|
|
26
|
+
```
|
|
27
|
+
What would you like to do? Describe the task, bug, or idea and I'll route it to the right skill.
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Step 2 — Analyze and Route
|
|
31
|
+
|
|
32
|
+
Evaluate `$ARGUMENTS` against these routing criteria. Apply the **first matching** rule:
|
|
33
|
+
|
|
34
|
+
| If the text describes... | Route to | Why |
|
|
35
|
+
|--------------------------|----------|-----|
|
|
36
|
+
| A bug, error, crash, failure, or something broken | `/pbr:debug` | Needs systematic investigation |
|
|
37
|
+
| Exploration, research, comparison, or "how does X work" | `/pbr:explore` | Open-ended investigation |
|
|
38
|
+
| A complex task: refactoring, migration, multi-file architecture, system redesign | `/pbr:plan add` | Needs a full phase with research/plan/build cycle |
|
|
39
|
+
| A review or quality concern about existing work | `/pbr:review` | Needs verification against plan |
|
|
40
|
+
| A note, idea, or "remember to..." | `/pbr:note` | Capture for later |
|
|
41
|
+
| A specific, actionable task (add feature, fix typo, update config, write test) | `/pbr:quick` | Self-contained, single executor |
|
|
42
|
+
|
|
43
|
+
**Ambiguity handling**: If the text could reasonably match multiple routes, ask the user via AskUserQuestion with the top 2-3 options. For example:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
"Refactor the authentication system" could be:
|
|
47
|
+
- /pbr:plan add — Full planning cycle (recommended for multi-file refactors)
|
|
48
|
+
- /pbr:quick — Quick execution (if scope is small and clear)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Step 3 — Confirm and Dispatch
|
|
52
|
+
|
|
53
|
+
Display the routing decision:
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
**Input:** {first 80 chars of arguments}
|
|
57
|
+
**Routing to:** {chosen skill}
|
|
58
|
+
**Reason:** {one-line explanation}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Then invoke the chosen skill via the Skill tool, passing `$ARGUMENTS` as the args.
|
|
62
|
+
|
|
63
|
+
**Special case for `/pbr:plan add`**: When routing to plan, check if `.planning/ROADMAP.md` exists first (via Read). If it doesn't, suggest `/pbr:begin` instead — the user needs to set up the project before they can add phases.
|
|
64
|
+
|
|
65
|
+
## Step 4 — No Follow-Up
|
|
66
|
+
|
|
67
|
+
After invoking the skill, your job is done. The dispatched skill handles everything from here (execution, commits, state updates). Do not add any additional output after the Skill tool call.
|
|
@@ -260,10 +260,13 @@ Archive a completed milestone and prepare for the next one.
|
|
|
260
260
|
|
|
261
261
|
5. **Archive milestone documents:**
|
|
262
262
|
|
|
263
|
-
|
|
264
|
-
- `.planning/milestones/{version}
|
|
265
|
-
- `.planning/milestones/{version}
|
|
266
|
-
- `.planning/milestones/{version}
|
|
263
|
+
Create a versioned archive directory and move phase directories into it:
|
|
264
|
+
- `.planning/milestones/{version}/ROADMAP.md` — snapshot of ROADMAP.md at completion
|
|
265
|
+
- `.planning/milestones/{version}/REQUIREMENTS.md` — snapshot of REQUIREMENTS.md
|
|
266
|
+
- `.planning/milestones/{version}/STATS.md` — milestone statistics
|
|
267
|
+
- `.planning/milestones/{version}/phases/{NN}-{slug}/` — move each milestone phase directory from `.planning/phases/` into the archive
|
|
268
|
+
|
|
269
|
+
**Move phases:** For each phase belonging to this milestone, move (not copy) its directory from `.planning/phases/{NN}-{slug}/` to `.planning/milestones/{version}/phases/{NN}-{slug}/`. This keeps the active phases directory clean for the next milestone.
|
|
267
270
|
|
|
268
271
|
**Stats file content:**
|
|
269
272
|
|
|
@@ -290,7 +293,7 @@ Archive a completed milestone and prepare for the next one.
|
|
|
290
293
|
```markdown
|
|
291
294
|
## Milestone: {name} ({version}) -- COMPLETED
|
|
292
295
|
|
|
293
|
-
Phases {start}-{end} completed on {date}. See `.planning/milestones/{version}
|
|
296
|
+
Phases {start}-{end} completed on {date}. See `.planning/milestones/{version}/ROADMAP.md` for details.
|
|
294
297
|
|
|
295
298
|
| Phase | Status |
|
|
296
299
|
|-------|--------|
|
|
@@ -322,7 +325,7 @@ Archive a completed milestone and prepare for the next one.
|
|
|
322
325
|
|
|
323
326
|
9. **Commit:**
|
|
324
327
|
```bash
|
|
325
|
-
git add .planning/milestones/ .planning/ROADMAP.md .planning/PROJECT.md .planning/STATE.md .planning/HISTORY.md
|
|
328
|
+
git add .planning/milestones/ .planning/phases/ .planning/ROADMAP.md .planning/PROJECT.md .planning/STATE.md .planning/HISTORY.md
|
|
326
329
|
git commit -m "docs(planning): complete milestone {version}"
|
|
327
330
|
```
|
|
328
331
|
|
|
@@ -339,7 +342,7 @@ Archive a completed milestone and prepare for the next one.
|
|
|
339
342
|
- {count} commits, {lines} lines of code
|
|
340
343
|
- {duration} days
|
|
341
344
|
|
|
342
|
-
Archived to: .planning/milestones/{version}
|
|
345
|
+
Archived to: .planning/milestones/{version}/
|
|
343
346
|
Git tag: {version}
|
|
344
347
|
|
|
345
348
|
───────────────────────────────────────────────────────────────
|
|
@@ -184,17 +184,38 @@ Todo {NNN} not found in pending todos.
|
|
|
184
184
|
2. If not found, display the same error block as `done` — suggest `/pbr:todo list`
|
|
185
185
|
3. Read the todo file content (frontmatter + body)
|
|
186
186
|
4. Extract the `title` from frontmatter and the full body (Goal, Scope, Acceptance Criteria sections)
|
|
187
|
-
|
|
187
|
+
|
|
188
|
+
5. **Assess complexity** to choose the right skill. Evaluate the todo content against these criteria:
|
|
189
|
+
|
|
190
|
+
| Signal | Route to |
|
|
191
|
+
|--------|----------|
|
|
192
|
+
| Single file change, small fix, simple addition | `/pbr:quick` |
|
|
193
|
+
| Multiple acceptance criteria, multi-file scope, architectural decisions, needs research | `/pbr:plan` (requires an active phase) |
|
|
194
|
+
| Investigation needed, unclear root cause | `/pbr:debug` |
|
|
195
|
+
| Open-ended exploration, no clear deliverable | `/pbr:explore` |
|
|
196
|
+
|
|
197
|
+
If unsure, ask the user via AskUserQuestion:
|
|
198
|
+
```
|
|
199
|
+
Todo {NNN} could be handled as a quick task or may need full planning.
|
|
200
|
+
|
|
201
|
+
Which approach?
|
|
202
|
+
- Quick task (/pbr:quick) — single executor, atomic commit
|
|
203
|
+
- Full planning (/pbr:plan) — research, plan, build cycle
|
|
204
|
+
- Debug (/pbr:debug) — systematic investigation
|
|
205
|
+
- Explore (/pbr:explore) — open-ended investigation
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
6. Display branded output:
|
|
188
209
|
```
|
|
189
210
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
190
211
|
PLAN-BUILD-RUN ► WORKING ON TODO {NNN}
|
|
191
212
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
192
213
|
|
|
193
214
|
**Todo {NNN}:** {title}
|
|
194
|
-
|
|
195
|
-
Launching /pbr:quick with todo context...
|
|
215
|
+
**Routing to:** /pbr:{chosen-skill}
|
|
196
216
|
```
|
|
197
|
-
|
|
217
|
+
|
|
218
|
+
7. Invoke the chosen skill via the Skill tool, passing the todo title and body as args:
|
|
198
219
|
|
|
199
220
|
```
|
|
200
221
|
{title}
|
|
@@ -203,7 +224,9 @@ Context from todo {NNN}:
|
|
|
203
224
|
{body content — Goal, Scope, Acceptance Criteria sections}
|
|
204
225
|
```
|
|
205
226
|
|
|
206
|
-
|
|
227
|
+
For `/pbr:plan`, if no phase exists for this work yet, suggest the user run `/pbr:plan add` first to create one, then re-run `/pbr:todo work {NNN}`.
|
|
228
|
+
|
|
229
|
+
8. When the skill completes, remind the user:
|
|
207
230
|
|
|
208
231
|
```
|
|
209
232
|
───────────────────────────────────────────────────────────────
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<!-- Source: agents/codebase-mapper.md | Purpose: Output format for ARCHITECTURE.md codebase analysis -->
|
|
2
|
+
# Architecture
|
|
3
|
+
|
|
4
|
+
> Analyzed: {date}
|
|
5
|
+
> Pattern: {MVC / Layered / Hexagonal / Microservices / Monolith / etc.}
|
|
6
|
+
|
|
7
|
+
## Pattern Overview
|
|
8
|
+
|
|
9
|
+
{2-3 paragraphs describing the overall architectural pattern with evidence from the codebase}
|
|
10
|
+
|
|
11
|
+
**Evidence**: {file paths, import patterns, directory structure that support this classification}
|
|
12
|
+
|
|
13
|
+
## Layers
|
|
14
|
+
|
|
15
|
+
| Layer | Purpose | Directory | Key Files |
|
|
16
|
+
|-------|---------|-----------|-----------|
|
|
17
|
+
| {Presentation} | {UI rendering} | {src/components/} | {App.tsx, Layout.tsx} |
|
|
18
|
+
| {API/Routes} | {HTTP handling} | {src/routes/ or src/app/api/} | {users.ts, auth.ts} |
|
|
19
|
+
| {Business Logic} | {Core domain} | {src/services/} | {UserService.ts} |
|
|
20
|
+
| {Data Access} | {Database interaction} | {src/repositories/ or src/db/} | {UserRepo.ts} |
|
|
21
|
+
| {Infrastructure} | {External services} | {src/lib/ or src/integrations/} | {email.ts, storage.ts} |
|
|
22
|
+
|
|
23
|
+
### Layer Rules
|
|
24
|
+
|
|
25
|
+
{How layers communicate — what imports what? What are the dependency rules?}
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Presentation → API → Business → Data Access → Database
|
|
29
|
+
↓
|
|
30
|
+
Infrastructure
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Data Flow
|
|
34
|
+
|
|
35
|
+
### Request Lifecycle
|
|
36
|
+
|
|
37
|
+
{How a typical request flows through the system}
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
1. Client sends request
|
|
41
|
+
2. → {Router/Framework} routes to handler
|
|
42
|
+
3. → {Middleware} runs (auth, validation, logging)
|
|
43
|
+
4. → {Controller/Handler} processes request
|
|
44
|
+
5. → {Service} executes business logic
|
|
45
|
+
6. → {Repository/Model} queries database
|
|
46
|
+
7. → Response returns through the stack
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### State Management
|
|
50
|
+
|
|
51
|
+
| Context | Approach | Implementation | Files |
|
|
52
|
+
|---------|----------|---------------|-------|
|
|
53
|
+
| Client state | {Redux / Zustand / Context / etc.} | {how it's structured} | {store files} |
|
|
54
|
+
| Server state | {React Query / SWR / etc.} | {how it's used} | {hook files} |
|
|
55
|
+
| Session state | {JWT / cookies / etc.} | {how it's managed} | {auth files} |
|
|
56
|
+
|
|
57
|
+
## Key Abstractions
|
|
58
|
+
|
|
59
|
+
| Abstraction | Purpose | Implementation | Used By |
|
|
60
|
+
|-------------|---------|---------------|---------|
|
|
61
|
+
| {Repository} | {Database access} | {Abstract class + implementations} | {Services} |
|
|
62
|
+
| {Middleware} | {Cross-cutting concerns} | {Function signature} | {Routes} |
|
|
63
|
+
| {DTO/Schema} | {Data validation} | {Zod schemas / class-validator} | {Routes, Services} |
|
|
64
|
+
|
|
65
|
+
## Entry Points
|
|
66
|
+
|
|
67
|
+
| Type | File | Config | Notes |
|
|
68
|
+
|------|------|--------|-------|
|
|
69
|
+
| Web app | {src/app/page.tsx} | {port 3000} | {Next.js App Router} |
|
|
70
|
+
| API server | {src/server.ts} | {port 8080} | {Express server} |
|
|
71
|
+
| CLI | {src/cli.ts} | - | {Commander.js} |
|
|
72
|
+
| Workers | {src/workers/} | {queue config} | {Bull/BullMQ} |
|
|
73
|
+
| Cron | {src/cron/} | {schedule} | {node-cron} |
|
|
74
|
+
|
|
75
|
+
## Error Handling Strategy
|
|
76
|
+
|
|
77
|
+
| Layer | Pattern | Implementation |
|
|
78
|
+
|-------|---------|---------------|
|
|
79
|
+
| API | {Error middleware + HTTP status codes} | {src/middleware/error.ts} |
|
|
80
|
+
| Service | {Custom error classes} | {src/errors/} |
|
|
81
|
+
| Client | {Error boundaries + toast notifications} | {src/components/ErrorBoundary.tsx} |
|
|
82
|
+
|
|
83
|
+
### Error Flow
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
Service throws AppError → Controller catches → Error middleware formats response → Client displays
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Security Architecture
|
|
90
|
+
|
|
91
|
+
| Aspect | Implementation | Files |
|
|
92
|
+
|--------|---------------|-------|
|
|
93
|
+
| Authentication | {how auth works} | {files} |
|
|
94
|
+
| Authorization | {RBAC / ABAC / etc.} | {files} |
|
|
95
|
+
| Input validation | {where and how} | {files} |
|
|
96
|
+
| CORS | {configuration} | {files} |
|
|
97
|
+
| Rate limiting | {if present} | {files} |
|
|
98
|
+
| CSRF protection | {if present} | {files} |
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
<!-- Source: agents/codebase-mapper.md | Purpose: Output format for CONCERNS.md codebase analysis -->
|
|
2
|
+
# Concerns & Technical Debt
|
|
3
|
+
|
|
4
|
+
> Analyzed: {date}
|
|
5
|
+
> Severity summary: {n critical, n high, n medium, n low}
|
|
6
|
+
|
|
7
|
+
## Technical Debt
|
|
8
|
+
|
|
9
|
+
| # | Area | Issue | Severity | Files | Evidence |
|
|
10
|
+
|---|------|-------|----------|-------|----------|
|
|
11
|
+
| 1 | {area} | {what's wrong} | critical/high/medium/low | {file paths} | {what you saw} |
|
|
12
|
+
| 2 | {area} | {what's wrong} | {severity} | {file paths} | {what you saw} |
|
|
13
|
+
|
|
14
|
+
### Debt Details
|
|
15
|
+
|
|
16
|
+
#### TD-1: {Issue Title}
|
|
17
|
+
|
|
18
|
+
**Severity**: {critical / high / medium / low}
|
|
19
|
+
**Files**: {list of affected files}
|
|
20
|
+
**Description**: {detailed description of the issue}
|
|
21
|
+
**Evidence**: {specific code examples, line numbers}
|
|
22
|
+
**Impact**: {what problems this causes or could cause}
|
|
23
|
+
**Recommendation**: {specific action to fix}
|
|
24
|
+
|
|
25
|
+
## Known Bugs
|
|
26
|
+
|
|
27
|
+
| # | Description | Severity | Location | Reproduction |
|
|
28
|
+
|---|-------------|----------|----------|--------------|
|
|
29
|
+
| 1 | {bug description} | {severity} | {file:line} | {how to trigger} |
|
|
30
|
+
|
|
31
|
+
## Security Considerations
|
|
32
|
+
|
|
33
|
+
| # | Issue | Severity | Location | Recommendation |
|
|
34
|
+
|---|-------|----------|----------|----------------|
|
|
35
|
+
| 1 | {Missing input validation on API} | high | {src/routes/users.ts} | {Add zod schema validation} |
|
|
36
|
+
| 2 | {Hardcoded secret in source} | critical | {src/config.ts:42} | {Move to environment variable} |
|
|
37
|
+
| 3 | {SQL injection risk} | critical | {src/db/queries.ts:15} | {Use parameterized queries} |
|
|
38
|
+
| 4 | {No rate limiting} | medium | {src/server.ts} | {Add express-rate-limit} |
|
|
39
|
+
| 5 | {No CSRF protection} | medium | {src/routes/} | {Add csrf tokens} |
|
|
40
|
+
|
|
41
|
+
## Performance Risks
|
|
42
|
+
|
|
43
|
+
| # | Issue | Location | Impact | Recommendation |
|
|
44
|
+
|---|-------|----------|--------|----------------|
|
|
45
|
+
| 1 | {N+1 query in user list} | {src/routes/users.ts:30} | {Slow page load} | {Use eager loading} |
|
|
46
|
+
| 2 | {No pagination on large queries} | {src/routes/posts.ts:15} | {Memory exhaustion} | {Add cursor pagination} |
|
|
47
|
+
| 3 | {Synchronous file operations} | {src/utils/file.ts} | {Blocks event loop} | {Use async fs methods} |
|
|
48
|
+
|
|
49
|
+
## Fragile Areas
|
|
50
|
+
|
|
51
|
+
| # | Area | Why Fragile | Impact of Breaking | Files |
|
|
52
|
+
|---|------|-------------|-------------------|-------|
|
|
53
|
+
| 1 | {Auth middleware} | {Tightly coupled to 5 services} | {All protected routes fail} | {files} |
|
|
54
|
+
| 2 | {Data migration} | {No rollback mechanism} | {Data loss on failure} | {files} |
|
|
55
|
+
|
|
56
|
+
## Dependency Risks
|
|
57
|
+
|
|
58
|
+
| Package | Version | Issue | Recommendation |
|
|
59
|
+
|---------|---------|-------|----------------|
|
|
60
|
+
| {package} | {version} | {Deprecated / EOL / Known vulnerability} | {Update to X / Replace with Y} |
|
|
61
|
+
|
|
62
|
+
## Scaling Limitations
|
|
63
|
+
|
|
64
|
+
| # | Limitation | When It Breaks | Current State | Fix Approach |
|
|
65
|
+
|---|-----------|---------------|---------------|-------------|
|
|
66
|
+
| 1 | {Single database instance} | {>1000 concurrent users} | {adequate for current load} | {Read replicas} |
|
|
67
|
+
| 2 | {In-memory session store} | {Multiple server instances} | {single instance} | {Redis session store} |
|
|
68
|
+
|
|
69
|
+
## Missing Infrastructure
|
|
70
|
+
|
|
71
|
+
| Category | Status | Impact | Priority |
|
|
72
|
+
|----------|--------|--------|----------|
|
|
73
|
+
| Error monitoring | {absent/partial/present} | {bugs go unnoticed} | {high} |
|
|
74
|
+
| Logging | {absent/partial/present} | {hard to debug production} | {high} |
|
|
75
|
+
| CI/CD | {absent/partial/present} | {manual deployments} | {medium} |
|
|
76
|
+
| Automated tests | {absent/partial/present} | {regressions not caught} | {high} |
|
|
77
|
+
| Documentation | {absent/partial/present} | {onboarding difficulty} | {low} |
|
|
78
|
+
| Backup/Recovery | {absent/partial/present} | {data loss risk} | {critical} |
|
|
79
|
+
| Health checks | {absent/partial/present} | {outages not detected} | {medium} |
|
|
80
|
+
|
|
81
|
+
## Recommendations (Prioritized)
|
|
82
|
+
|
|
83
|
+
### Critical (Fix Immediately)
|
|
84
|
+
1. {Recommendation with specific action}
|
|
85
|
+
|
|
86
|
+
### High (Fix Soon)
|
|
87
|
+
1. {Recommendation with specific action}
|
|
88
|
+
|
|
89
|
+
### Medium (Plan to Fix)
|
|
90
|
+
1. {Recommendation with specific action}
|
|
91
|
+
|
|
92
|
+
### Low (When Convenient)
|
|
93
|
+
1. {Recommendation with specific action}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<!-- Source: agents/codebase-mapper.md | Purpose: Output format for CONVENTIONS.md codebase analysis -->
|
|
2
|
+
# Code Conventions
|
|
3
|
+
|
|
4
|
+
> Analyzed: {date}
|
|
5
|
+
> Based on: {n} files inspected
|
|
6
|
+
|
|
7
|
+
## Naming Conventions
|
|
8
|
+
|
|
9
|
+
| Entity | Convention | Example |
|
|
10
|
+
|--------|-----------|---------|
|
|
11
|
+
| Files (components) | {PascalCase.tsx} | `UserProfile.tsx` |
|
|
12
|
+
| Files (utilities) | {camelCase.ts} | `formatDate.ts` |
|
|
13
|
+
| Functions | {camelCase} | `getUserById` |
|
|
14
|
+
| Classes | {PascalCase} | `UserService` |
|
|
15
|
+
| Interfaces | {PascalCase, no I prefix} | `UserProfile` |
|
|
16
|
+
| Types | {PascalCase} | `CreateUserInput` |
|
|
17
|
+
| Constants | {SCREAMING_SNAKE_CASE or camelCase} | `MAX_RETRIES` or `maxRetries` |
|
|
18
|
+
| Enum members | {PascalCase} | `UserRole.Admin` |
|
|
19
|
+
| Environment variables | {SCREAMING_SNAKE_CASE} | `DATABASE_URL` |
|
|
20
|
+
| CSS classes | {kebab-case or camelCase modules} | `user-profile` |
|
|
21
|
+
| Database tables | {snake_case} | `user_profiles` |
|
|
22
|
+
| API endpoints | {kebab-case} | `/api/user-profiles` |
|
|
23
|
+
|
|
24
|
+
## Code Style
|
|
25
|
+
|
|
26
|
+
| Aspect | Setting | Config File |
|
|
27
|
+
|--------|---------|-------------|
|
|
28
|
+
| Indentation | {2 spaces / 4 spaces / tabs} | {.editorconfig / .prettierrc} |
|
|
29
|
+
| Quotes | {single / double} | {.prettierrc} |
|
|
30
|
+
| Semicolons | {yes / no} | {.prettierrc} |
|
|
31
|
+
| Trailing commas | {all / es5 / none} | {.prettierrc} |
|
|
32
|
+
| Line width | {80 / 100 / 120} | {.prettierrc} |
|
|
33
|
+
| Line endings | {LF / CRLF} | {.editorconfig} |
|
|
34
|
+
|
|
35
|
+
## Import Organization
|
|
36
|
+
|
|
37
|
+
{Observed import order pattern from the codebase}
|
|
38
|
+
|
|
39
|
+
```{language}
|
|
40
|
+
// 1. Node.js built-in modules
|
|
41
|
+
import path from 'path';
|
|
42
|
+
|
|
43
|
+
// 2. External packages
|
|
44
|
+
import React from 'react';
|
|
45
|
+
import { z } from 'zod';
|
|
46
|
+
|
|
47
|
+
// 3. Internal aliases
|
|
48
|
+
import { Button } from '@/components/ui';
|
|
49
|
+
import { useAuth } from '@/hooks/useAuth';
|
|
50
|
+
|
|
51
|
+
// 4. Relative imports
|
|
52
|
+
import { UserCard } from './UserCard';
|
|
53
|
+
import type { User } from './types';
|
|
54
|
+
|
|
55
|
+
// 5. Style imports
|
|
56
|
+
import styles from './UserProfile.module.css';
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Function Patterns
|
|
60
|
+
|
|
61
|
+
### Async Functions
|
|
62
|
+
|
|
63
|
+
```{language}
|
|
64
|
+
// Pattern used in this codebase: {evidence file:line}
|
|
65
|
+
{actual code pattern from codebase}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Error Handling
|
|
69
|
+
|
|
70
|
+
```{language}
|
|
71
|
+
// Pattern used in this codebase: {evidence file:line}
|
|
72
|
+
{actual code pattern from codebase}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### API Route Handlers
|
|
76
|
+
|
|
77
|
+
```{language}
|
|
78
|
+
// Pattern used in this codebase: {evidence file:line}
|
|
79
|
+
{actual code pattern from codebase}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### React Components
|
|
83
|
+
|
|
84
|
+
```{language}
|
|
85
|
+
// Pattern used in this codebase: {evidence file:line}
|
|
86
|
+
{actual code pattern from codebase}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Comment Conventions
|
|
90
|
+
|
|
91
|
+
| When | Style | Example |
|
|
92
|
+
|------|-------|---------|
|
|
93
|
+
| {Complex logic} | {inline comment} | `// Calculate tax with progressive rates` |
|
|
94
|
+
| {Public API} | {JSDoc} | `/** @param user - The user to validate */` |
|
|
95
|
+
| {Temporary} | {TODO with ticket} | `// TODO(#123): refactor after migration` |
|
|
96
|
+
| {Warning} | {IMPORTANT prefix} | `// IMPORTANT: this must run before auth` |
|
|
97
|
+
|
|
98
|
+
## Git Conventions
|
|
99
|
+
|
|
100
|
+
| Aspect | Convention | Example |
|
|
101
|
+
|--------|-----------|---------|
|
|
102
|
+
| Branch naming | {pattern} | `feature/add-user-auth` |
|
|
103
|
+
| Commit format | {conventional commits / custom} | `feat(auth): add login flow` |
|
|
104
|
+
| PR titles | {pattern} | `[Feature] Add user authentication` |
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<!-- Source: agents/codebase-mapper.md | Purpose: Output format for INTEGRATIONS.md codebase analysis -->
|
|
2
|
+
# External Integrations
|
|
3
|
+
|
|
4
|
+
> Analyzed: {date}
|
|
5
|
+
> Total integrations: {n}
|
|
6
|
+
|
|
7
|
+
## APIs
|
|
8
|
+
|
|
9
|
+
| Service | Type | Auth Method | Config Var | Used In | Documentation |
|
|
10
|
+
|---------|------|-------------|------------|---------|---------------|
|
|
11
|
+
| {Discord API} | REST | {OAuth2} | DISCORD_TOKEN | {src/integrations/discord.ts} | {URL} |
|
|
12
|
+
| {Stripe} | REST | {API Key} | STRIPE_SECRET_KEY | {src/payments/} | {URL} |
|
|
13
|
+
|
|
14
|
+
### API Client Patterns
|
|
15
|
+
|
|
16
|
+
{How API calls are made in this codebase — fetch wrapper? axios instance? SDK?}
|
|
17
|
+
|
|
18
|
+
```{language}
|
|
19
|
+
// Example from codebase: {file:line}
|
|
20
|
+
{actual code pattern}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Databases
|
|
24
|
+
|
|
25
|
+
| Database | Type | ORM/Driver | Config | Schema Location | Migrations |
|
|
26
|
+
|----------|------|-----------|--------|-----------------|------------|
|
|
27
|
+
| {PostgreSQL} | {Relational} | {Prisma} | DATABASE_URL | {prisma/schema.prisma} | {prisma/migrations/} |
|
|
28
|
+
| {Redis} | {Key-value} | {ioredis} | REDIS_URL | - | - |
|
|
29
|
+
|
|
30
|
+
### Database Patterns
|
|
31
|
+
|
|
32
|
+
{How database access is structured — repository pattern? direct queries? ORM models?}
|
|
33
|
+
|
|
34
|
+
## Authentication & Authorization
|
|
35
|
+
|
|
36
|
+
| Aspect | Implementation | Config | Files |
|
|
37
|
+
|--------|---------------|--------|-------|
|
|
38
|
+
| Method | {JWT / Session / OAuth} | {env vars} | {files} |
|
|
39
|
+
| Provider | {self / Auth0 / Clerk / etc.} | {env vars} | {files} |
|
|
40
|
+
| Storage | {cookie / localStorage / header} | - | {files} |
|
|
41
|
+
| Roles | {admin, user, etc.} | {where defined} | {files} |
|
|
42
|
+
|
|
43
|
+
## Email/Notifications
|
|
44
|
+
|
|
45
|
+
| Service | Purpose | Config | Used In |
|
|
46
|
+
|---------|---------|--------|---------|
|
|
47
|
+
| {SendGrid} | {Transactional email} | SENDGRID_KEY | {src/email/} |
|
|
48
|
+
|
|
49
|
+
## File Storage
|
|
50
|
+
|
|
51
|
+
| Service | Purpose | Config | Used In |
|
|
52
|
+
|---------|---------|--------|---------|
|
|
53
|
+
| {S3} | {User uploads} | AWS_* vars | {src/storage/} |
|
|
54
|
+
|
|
55
|
+
## Monitoring & Logging
|
|
56
|
+
|
|
57
|
+
| Tool | Purpose | Config | Used In |
|
|
58
|
+
|------|---------|--------|---------|
|
|
59
|
+
| {Sentry} | {Error tracking} | SENTRY_DSN | {src/lib/sentry.ts} |
|
|
60
|
+
| {Winston} | {Logging} | - | {src/lib/logger.ts} |
|
|
61
|
+
|
|
62
|
+
## CI/CD
|
|
63
|
+
|
|
64
|
+
| Platform | Config | Stages | Deployment |
|
|
65
|
+
|----------|--------|--------|------------|
|
|
66
|
+
| {GitHub Actions} | {.github/workflows/} | {lint, test, build, deploy} | {Vercel / AWS / etc.} |
|
|
67
|
+
|
|
68
|
+
### Pipeline Details
|
|
69
|
+
|
|
70
|
+
{Description of the CI/CD pipeline flow}
|
|
71
|
+
|
|
72
|
+
## Infrastructure
|
|
73
|
+
|
|
74
|
+
| Component | Provider | Config | Notes |
|
|
75
|
+
|-----------|----------|--------|-------|
|
|
76
|
+
| {Hosting} | {Vercel} | {vercel.json} | {auto-deploy from main} |
|
|
77
|
+
| {DNS} | {Cloudflare} | - | {if relevant} |
|
|
78
|
+
| {CDN} | {included with host} | - | - |
|