@sniper.ai/core 2.0.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.
- package/README.md +88 -98
- package/agents/analyst.md +30 -0
- package/agents/architect.md +36 -0
- package/agents/backend-dev.md +43 -0
- package/agents/code-reviewer.md +72 -0
- package/agents/frontend-dev.md +43 -0
- package/agents/fullstack-dev.md +44 -0
- package/agents/gate-reviewer.md +62 -0
- package/agents/lead-orchestrator.md +51 -0
- package/agents/product-manager.md +38 -0
- package/agents/qa-engineer.md +37 -0
- package/agents/retro-analyst.md +98 -0
- package/checklists/discover.yaml +23 -0
- package/checklists/implement.yaml +28 -0
- package/checklists/ingest-document.yaml +18 -0
- package/checklists/ingest-extract.yaml +13 -0
- package/checklists/ingest-scan.yaml +18 -0
- package/checklists/multi-faceted-review.yaml +56 -0
- package/checklists/plan.yaml +36 -0
- package/checklists/refactor-analyze.yaml +18 -0
- package/checklists/review.yaml +28 -0
- package/claude-md.template +42 -0
- package/config.template.yaml +156 -0
- package/hooks/settings-hooks.json +31 -0
- package/hooks/signal-hooks.json +11 -0
- package/package.json +23 -5
- package/personas/cognitive/devils-advocate.md +24 -0
- package/personas/cognitive/performance-focused.md +23 -0
- package/personas/cognitive/security-first.md +24 -0
- package/protocols/explore.yaml +18 -0
- package/protocols/feature.yaml +45 -0
- package/protocols/full.yaml +63 -0
- package/protocols/hotfix.yaml +19 -0
- package/protocols/ingest.yaml +39 -0
- package/protocols/patch.yaml +30 -0
- package/protocols/refactor.yaml +41 -0
- package/schemas/checkpoint.schema.yaml +133 -0
- package/schemas/cost.schema.yaml +97 -0
- package/schemas/dependency-graph.schema.yaml +37 -0
- package/schemas/gate-result.schema.yaml +101 -0
- package/schemas/knowledge-manifest.schema.yaml +39 -0
- package/schemas/live-status.schema.yaml +122 -0
- package/schemas/protocol.schema.yaml +100 -0
- package/schemas/retro.schema.yaml +95 -0
- package/schemas/revert-plan.schema.yaml +40 -0
- package/schemas/signal.schema.yaml +39 -0
- package/schemas/velocity.schema.yaml +52 -0
- package/schemas/workspace-lock.schema.yaml +34 -0
- package/schemas/workspace.schema.yaml +82 -0
- package/skills/sniper-flow/SKILL.md +243 -0
- package/skills/sniper-flow-headless/SKILL.md +105 -0
- package/skills/sniper-init/SKILL.md +103 -0
- package/skills/sniper-review/SKILL.md +49 -0
- package/skills/sniper-status/SKILL.md +79 -0
- package/templates/architecture.md +23 -0
- package/templates/checkpoint.yaml +27 -0
- package/templates/codebase-overview.md +19 -0
- package/templates/cost.yaml +23 -0
- package/templates/custom-protocol.yaml +98 -0
- package/templates/knowledge-manifest.yaml +32 -0
- package/templates/live-status.yaml +26 -0
- package/templates/multi-faceted-review-report.md +28 -0
- package/templates/review-report.md +25 -0
- package/templates/signal-record.yaml +37 -0
- package/templates/spec.md +28 -0
- package/templates/story.md +19 -0
- package/templates/velocity.yaml +9 -0
- package/templates/workspace-config.yaml +44 -0
- package/framework/checklists/code-review.md +0 -33
- package/framework/checklists/debug-review.md +0 -34
- package/framework/checklists/discover-review.md +0 -33
- package/framework/checklists/doc-review.md +0 -39
- package/framework/checklists/feature-review.md +0 -42
- package/framework/checklists/ingest-review.md +0 -42
- package/framework/checklists/memory-review.md +0 -30
- package/framework/checklists/perf-review.md +0 -33
- package/framework/checklists/plan-review.md +0 -52
- package/framework/checklists/refactor-review.md +0 -33
- package/framework/checklists/security-review.md +0 -34
- package/framework/checklists/sprint-review.md +0 -41
- package/framework/checklists/story-review.md +0 -30
- package/framework/checklists/test-review.md +0 -32
- package/framework/checklists/workspace-review.md +0 -34
- package/framework/claude-md.template +0 -37
- package/framework/commands/sniper-audit.md +0 -1549
- package/framework/commands/sniper-compose.md +0 -323
- package/framework/commands/sniper-debug.md +0 -337
- package/framework/commands/sniper-discover.md +0 -423
- package/framework/commands/sniper-doc.md +0 -441
- package/framework/commands/sniper-feature.md +0 -515
- package/framework/commands/sniper-ingest.md +0 -506
- package/framework/commands/sniper-init.md +0 -388
- package/framework/commands/sniper-memory.md +0 -219
- package/framework/commands/sniper-plan.md +0 -630
- package/framework/commands/sniper-review.md +0 -369
- package/framework/commands/sniper-solve.md +0 -408
- package/framework/commands/sniper-sprint.md +0 -716
- package/framework/commands/sniper-status.md +0 -481
- package/framework/commands/sniper-workspace-feature.md +0 -267
- package/framework/commands/sniper-workspace-init.md +0 -252
- package/framework/commands/sniper-workspace-status.md +0 -112
- package/framework/commands/sniper-workspace-validate.md +0 -138
- package/framework/config.template.yaml +0 -196
- package/framework/personas/cognitive/devils-advocate.md +0 -30
- package/framework/personas/cognitive/mentor-explainer.md +0 -29
- package/framework/personas/cognitive/performance-focused.md +0 -30
- package/framework/personas/cognitive/security-first.md +0 -29
- package/framework/personas/cognitive/systems-thinker.md +0 -29
- package/framework/personas/cognitive/user-empathetic.md +0 -29
- package/framework/personas/domain/.gitkeep +0 -0
- package/framework/personas/process/analyst.md +0 -29
- package/framework/personas/process/architect.md +0 -30
- package/framework/personas/process/architecture-cartographer.md +0 -25
- package/framework/personas/process/code-archaeologist.md +0 -22
- package/framework/personas/process/code-investigator.md +0 -29
- package/framework/personas/process/code-reviewer.md +0 -26
- package/framework/personas/process/contract-designer.md +0 -31
- package/framework/personas/process/convention-miner.md +0 -27
- package/framework/personas/process/coverage-analyst.md +0 -24
- package/framework/personas/process/developer.md +0 -32
- package/framework/personas/process/doc-analyst.md +0 -63
- package/framework/personas/process/doc-reviewer.md +0 -62
- package/framework/personas/process/doc-writer.md +0 -42
- package/framework/personas/process/flake-hunter.md +0 -30
- package/framework/personas/process/impact-analyst.md +0 -23
- package/framework/personas/process/integration-validator.md +0 -29
- package/framework/personas/process/log-analyst.md +0 -22
- package/framework/personas/process/migration-architect.md +0 -24
- package/framework/personas/process/perf-profiler.md +0 -27
- package/framework/personas/process/product-manager.md +0 -32
- package/framework/personas/process/qa-engineer.md +0 -31
- package/framework/personas/process/release-manager.md +0 -23
- package/framework/personas/process/retro-analyst.md +0 -30
- package/framework/personas/process/scrum-master.md +0 -31
- package/framework/personas/process/threat-modeler.md +0 -30
- package/framework/personas/process/triage-lead.md +0 -23
- package/framework/personas/process/ux-designer.md +0 -31
- package/framework/personas/process/vuln-scanner.md +0 -27
- package/framework/personas/process/workspace-orchestrator.md +0 -30
- package/framework/personas/technical/ai-ml.md +0 -33
- package/framework/personas/technical/api-design.md +0 -32
- package/framework/personas/technical/backend.md +0 -32
- package/framework/personas/technical/database.md +0 -32
- package/framework/personas/technical/frontend.md +0 -33
- package/framework/personas/technical/infrastructure.md +0 -32
- package/framework/personas/technical/security.md +0 -34
- package/framework/settings.template.json +0 -6
- package/framework/spawn-prompts/_template.md +0 -25
- package/framework/teams/debug.yaml +0 -56
- package/framework/teams/discover.yaml +0 -57
- package/framework/teams/doc.yaml +0 -76
- package/framework/teams/feature-plan.yaml +0 -61
- package/framework/teams/ingest.yaml +0 -85
- package/framework/teams/perf.yaml +0 -33
- package/framework/teams/plan.yaml +0 -86
- package/framework/teams/refactor.yaml +0 -34
- package/framework/teams/retro.yaml +0 -30
- package/framework/teams/review-pr.yaml +0 -73
- package/framework/teams/review-release.yaml +0 -70
- package/framework/teams/security.yaml +0 -59
- package/framework/teams/solve.yaml +0 -48
- package/framework/teams/sprint.yaml +0 -68
- package/framework/teams/test.yaml +0 -59
- package/framework/teams/workspace-feature.yaml +0 -69
- package/framework/teams/workspace-validation.yaml +0 -27
- package/framework/templates/arch-delta.md +0 -74
- package/framework/templates/architecture.md +0 -95
- package/framework/templates/brief.md +0 -73
- package/framework/templates/bug-report.md +0 -55
- package/framework/templates/contract-validation-report.md +0 -68
- package/framework/templates/contract.yaml +0 -60
- package/framework/templates/conventions.md +0 -59
- package/framework/templates/coverage-report.md +0 -67
- package/framework/templates/doc-api.md +0 -53
- package/framework/templates/doc-guide.md +0 -35
- package/framework/templates/doc-readme.md +0 -49
- package/framework/templates/epic.md +0 -47
- package/framework/templates/feature-brief.md +0 -54
- package/framework/templates/feature-spec.md +0 -53
- package/framework/templates/flaky-report.md +0 -64
- package/framework/templates/investigation.md +0 -49
- package/framework/templates/memory-anti-pattern.yaml +0 -16
- package/framework/templates/memory-convention.yaml +0 -17
- package/framework/templates/memory-decision.yaml +0 -16
- package/framework/templates/migration-plan.md +0 -47
- package/framework/templates/optimization-plan.md +0 -59
- package/framework/templates/performance-profile.md +0 -64
- package/framework/templates/personas.md +0 -118
- package/framework/templates/postmortem.md +0 -69
- package/framework/templates/pr-review.md +0 -50
- package/framework/templates/prd.md +0 -92
- package/framework/templates/refactor-scope.md +0 -52
- package/framework/templates/release-readiness.md +0 -66
- package/framework/templates/retro.yaml +0 -44
- package/framework/templates/risks.md +0 -64
- package/framework/templates/security.md +0 -111
- package/framework/templates/sprint-review.md +0 -32
- package/framework/templates/story.md +0 -53
- package/framework/templates/threat-model.md +0 -71
- package/framework/templates/ux-spec.md +0 -71
- package/framework/templates/vulnerability-report.md +0 -56
- package/framework/templates/workspace-brief.md +0 -52
- package/framework/templates/workspace-plan.md +0 -50
- package/framework/workflows/discover-only.md +0 -39
- package/framework/workflows/full-lifecycle.md +0 -56
- package/framework/workflows/quick-feature.md +0 -44
- package/framework/workflows/sprint-cycle.md +0 -47
- package/framework/workflows/workspace-feature.md +0 -71
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
# /sniper-workspace validate -- Validate Interface Contracts
|
|
2
|
-
|
|
3
|
-
You are executing the `/sniper-workspace validate` command. Your job is to validate that repository implementations match the agreed-upon interface contracts without running a sprint. This is an on-demand validation check.
|
|
4
|
-
|
|
5
|
-
The user's arguments are provided in: $ARGUMENTS
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Step 0: Pre-Flight
|
|
10
|
-
|
|
11
|
-
1. Verify `workspace.yaml` exists
|
|
12
|
-
2. Parse `$ARGUMENTS`:
|
|
13
|
-
- `--contract {name}`: validate a specific contract (optional)
|
|
14
|
-
- `--verbose`: show detailed validation output
|
|
15
|
-
- No args: validate all contracts
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## Step 1: Load Contracts
|
|
20
|
-
|
|
21
|
-
### 1a: Find Contracts
|
|
22
|
-
Scan `contracts/` directory for `.contract.yaml` files.
|
|
23
|
-
|
|
24
|
-
If `--contract` was specified, load only that contract. Otherwise, load all.
|
|
25
|
-
|
|
26
|
-
If no contracts found:
|
|
27
|
-
```
|
|
28
|
-
No contracts found in contracts/ directory.
|
|
29
|
-
Create contracts by running: /sniper-workspace feature "{description}"
|
|
30
|
-
```
|
|
31
|
-
Then STOP.
|
|
32
|
-
|
|
33
|
-
### 1b: Parse Contracts
|
|
34
|
-
For each contract file:
|
|
35
|
-
1. Parse the YAML
|
|
36
|
-
2. Extract: name, version, between (repos), endpoints, shared_types, events
|
|
37
|
-
3. Validate the contract is well-formed (has required fields)
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## Step 2: Validate Each Contract
|
|
42
|
-
|
|
43
|
-
For each contract:
|
|
44
|
-
|
|
45
|
-
### 2a: Endpoint Validation
|
|
46
|
-
For each endpoint in the contract:
|
|
47
|
-
1. Identify the implementing repo (from `between` — the one that exposes the API)
|
|
48
|
-
2. Search the repo's source code for:
|
|
49
|
-
- Route definitions matching the endpoint path and method
|
|
50
|
-
- Request validation matching the contract's request schema
|
|
51
|
-
- Response structure matching the contract's response schema
|
|
52
|
-
3. Report: ✅ (matches), ⚠️ (partial match — structure differs), ❌ (not found)
|
|
53
|
-
4. For mismatches, record: expected (from contract), actual (from code), file location
|
|
54
|
-
|
|
55
|
-
### 2b: Shared Type Validation
|
|
56
|
-
For each shared type:
|
|
57
|
-
1. Find the owning repo's type definition at the specified path
|
|
58
|
-
2. Compare the type shape against the contract definition
|
|
59
|
-
3. Check that consumer repos import the type (not define their own)
|
|
60
|
-
4. Report: ✅ (matches), ❌ (mismatch or missing)
|
|
61
|
-
|
|
62
|
-
### 2c: Event Validation
|
|
63
|
-
For each event:
|
|
64
|
-
1. Find the producer's event emission code
|
|
65
|
-
2. Check the payload structure against the contract
|
|
66
|
-
3. Find consumer event handlers
|
|
67
|
-
4. Report: ✅ (matches), ❌ (mismatch or missing)
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## Step 3: Compile Report
|
|
72
|
-
|
|
73
|
-
### Summary
|
|
74
|
-
```
|
|
75
|
-
============================================
|
|
76
|
-
Contract Validation Results
|
|
77
|
-
============================================
|
|
78
|
-
|
|
79
|
-
{contract-1} v{version}
|
|
80
|
-
Endpoints: {passed}/{total} ✅ {failed} ❌
|
|
81
|
-
Shared Types: {passed}/{total} ✅ {failed} ❌
|
|
82
|
-
Events: {passed}/{total} ✅ {failed} ❌
|
|
83
|
-
Status: PASS / FAIL
|
|
84
|
-
|
|
85
|
-
{contract-2} v{version}
|
|
86
|
-
...
|
|
87
|
-
|
|
88
|
-
Overall: {total_passed}/{total_checked} passed
|
|
89
|
-
============================================
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### Verbose Output (if --verbose)
|
|
93
|
-
Show per-item details:
|
|
94
|
-
```
|
|
95
|
-
{contract-name} / {endpoint-path} {method}
|
|
96
|
-
Expected: {contract spec}
|
|
97
|
-
Actual: {implementation}
|
|
98
|
-
File: {repo}/{path}:{line}
|
|
99
|
-
Status: ✅ / ❌
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### Mismatch Details
|
|
103
|
-
For each failure, show:
|
|
104
|
-
```
|
|
105
|
-
MISMATCH: {contract-name} / {item}
|
|
106
|
-
Expected: {what the contract specifies}
|
|
107
|
-
Actual: {what the implementation does}
|
|
108
|
-
Location: {repo}/{file}:{line}
|
|
109
|
-
Fix: {suggested fix}
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## Step 4: Recommendations
|
|
115
|
-
|
|
116
|
-
If failures found:
|
|
117
|
-
```
|
|
118
|
-
Recommended Actions:
|
|
119
|
-
1. Fix the mismatches manually, OR
|
|
120
|
-
2. Run /sniper-workspace feature --resume WKSP-{XXXX} to generate fix stories
|
|
121
|
-
3. Re-validate with: /sniper-workspace validate
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
If all passed:
|
|
125
|
-
```
|
|
126
|
-
All contracts validated successfully. Implementations match specifications.
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
## IMPORTANT RULES
|
|
132
|
-
|
|
133
|
-
- This is a read-only validation — do not modify any files
|
|
134
|
-
- Validation is structural, not behavioral — it checks schemas and shapes, not runtime behavior
|
|
135
|
-
- A ⚠️ (partial match) means the implementation exists but differs from the contract — investigate before declaring it a failure
|
|
136
|
-
- If a repo path is inaccessible, report it as ❌ for all its contract items
|
|
137
|
-
- Always validate the full contract — do not skip items even if early items fail
|
|
138
|
-
- Contract validation does not run tests — it analyzes source code structure only
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
# ─────────────────────────────────────────
|
|
2
|
-
# SNIPER Framework Configuration
|
|
3
|
-
# ─────────────────────────────────────────
|
|
4
|
-
|
|
5
|
-
project:
|
|
6
|
-
name: "" # Set by /sniper-init
|
|
7
|
-
type: saas # saas | api | mobile | cli | library | monorepo
|
|
8
|
-
description: "" # One-line project description
|
|
9
|
-
|
|
10
|
-
stack:
|
|
11
|
-
language: typescript # Primary language
|
|
12
|
-
frontend: react # Frontend framework (null if none)
|
|
13
|
-
backend: node-express # Backend framework
|
|
14
|
-
database: postgresql # Primary database
|
|
15
|
-
cache: redis # Cache layer (null if none)
|
|
16
|
-
infrastructure: aws # Cloud provider
|
|
17
|
-
test_runner: vitest # Test framework
|
|
18
|
-
package_manager: pnpm # Package manager
|
|
19
|
-
|
|
20
|
-
# ─────────────────────────────────────────
|
|
21
|
-
# Review Gate Configuration
|
|
22
|
-
# ─────────────────────────────────────────
|
|
23
|
-
# strict = full stop, human must approve before next phase
|
|
24
|
-
# flexible = auto-advance, human reviews async
|
|
25
|
-
# auto = no gate (not recommended for architecture/implementation)
|
|
26
|
-
|
|
27
|
-
review_gates:
|
|
28
|
-
after_ingest: flexible # Low risk — reverse-engineered artifacts, auto-advance
|
|
29
|
-
after_discover: flexible # Low risk — auto-advance
|
|
30
|
-
after_plan: strict # HIGH RISK — bad architecture cascades
|
|
31
|
-
after_solve: flexible # Low risk — stories can be refined later
|
|
32
|
-
after_sprint: strict # HIGH RISK — code must be reviewed before merge
|
|
33
|
-
|
|
34
|
-
# ─────────────────────────────────────────
|
|
35
|
-
# Agent Teams Configuration
|
|
36
|
-
# ─────────────────────────────────────────
|
|
37
|
-
|
|
38
|
-
agent_teams:
|
|
39
|
-
max_teammates: 5 # Max concurrent teammates (token budget)
|
|
40
|
-
default_model: sonnet # sonnet | opus — for implementation
|
|
41
|
-
planning_model: opus # Use Opus for planning & architecture
|
|
42
|
-
delegate_mode: true # Lead enters delegate mode during team execution
|
|
43
|
-
plan_approval: true # Require plan approval for complex/risky tasks
|
|
44
|
-
coordination_timeout: 30 # Minutes before lead checks on stalled teammates
|
|
45
|
-
|
|
46
|
-
# ─────────────────────────────────────────
|
|
47
|
-
# Domain Pack
|
|
48
|
-
# ─────────────────────────────────────────
|
|
49
|
-
|
|
50
|
-
domain_packs: [] # [{name: "sales-dialer", package: "@sniper.ai/pack-sales-dialer"}]
|
|
51
|
-
|
|
52
|
-
# ─────────────────────────────────────────
|
|
53
|
-
# Documentation Generation (/sniper-doc)
|
|
54
|
-
# ─────────────────────────────────────────
|
|
55
|
-
|
|
56
|
-
documentation:
|
|
57
|
-
output_dir: "docs/" # Where generated docs are written
|
|
58
|
-
managed_sections: true # Use <!-- sniper:managed --> protocol for incremental updates
|
|
59
|
-
include: # Default doc types to generate
|
|
60
|
-
- readme
|
|
61
|
-
- setup
|
|
62
|
-
- architecture
|
|
63
|
-
- api
|
|
64
|
-
exclude: [] # Doc types to skip
|
|
65
|
-
|
|
66
|
-
# ─────────────────────────────────────────
|
|
67
|
-
# Agent Memory & Learning
|
|
68
|
-
# ─────────────────────────────────────────
|
|
69
|
-
|
|
70
|
-
memory:
|
|
71
|
-
enabled: true # Enable memory system
|
|
72
|
-
auto_retro: true # Auto-run retrospective after sprint completion
|
|
73
|
-
auto_codify: true # Auto-codify high-confidence retro findings into memory
|
|
74
|
-
token_budget: 2000 # Max tokens for memory layer in spawn prompts
|
|
75
|
-
|
|
76
|
-
# ─────────────────────────────────────────
|
|
77
|
-
# Workspace (Multi-Project Orchestration)
|
|
78
|
-
# ─────────────────────────────────────────
|
|
79
|
-
|
|
80
|
-
workspace:
|
|
81
|
-
enabled: false # Set true when this repo is part of a workspace
|
|
82
|
-
workspace_path: null # Relative path to sniper-workspace/ directory
|
|
83
|
-
repo_name: null # This repo's name in the workspace
|
|
84
|
-
|
|
85
|
-
# ─────────────────────────────────────────
|
|
86
|
-
# File Ownership Rules
|
|
87
|
-
# ─────────────────────────────────────────
|
|
88
|
-
# These are injected into spawn prompts to prevent teammates from editing
|
|
89
|
-
# each other's files. Customize per project.
|
|
90
|
-
|
|
91
|
-
ownership:
|
|
92
|
-
backend:
|
|
93
|
-
- "src/backend/"
|
|
94
|
-
- "src/api/"
|
|
95
|
-
- "src/services/"
|
|
96
|
-
- "src/db/"
|
|
97
|
-
- "src/workers/"
|
|
98
|
-
frontend:
|
|
99
|
-
- "src/frontend/"
|
|
100
|
-
- "src/components/"
|
|
101
|
-
- "src/hooks/"
|
|
102
|
-
- "src/styles/"
|
|
103
|
-
- "src/pages/"
|
|
104
|
-
infrastructure:
|
|
105
|
-
- "docker/"
|
|
106
|
-
- ".github/"
|
|
107
|
-
- "infra/"
|
|
108
|
-
- "terraform/"
|
|
109
|
-
- "scripts/"
|
|
110
|
-
tests:
|
|
111
|
-
- "tests/"
|
|
112
|
-
- "__tests__/"
|
|
113
|
-
- "*.test.*"
|
|
114
|
-
- "*.spec.*"
|
|
115
|
-
ai:
|
|
116
|
-
- "src/ai/"
|
|
117
|
-
- "src/ml/"
|
|
118
|
-
- "src/pipeline/"
|
|
119
|
-
docs:
|
|
120
|
-
- "docs/"
|
|
121
|
-
|
|
122
|
-
# ─────────────────────────────────────────
|
|
123
|
-
# Lifecycle State (managed by SNIPER, don't edit manually)
|
|
124
|
-
# ─────────────────────────────────────────
|
|
125
|
-
|
|
126
|
-
schema_version: 2
|
|
127
|
-
|
|
128
|
-
state:
|
|
129
|
-
# Phase log — tracks all phase runs with context
|
|
130
|
-
# Valid phases: discover | plan | solve | sprint | ingest
|
|
131
|
-
phase_log: [] # [{phase, context, started_at, completed_at, approved_by}]
|
|
132
|
-
current_sprint: 0
|
|
133
|
-
|
|
134
|
-
# Artifact tracking — object format with version
|
|
135
|
-
artifacts:
|
|
136
|
-
brief:
|
|
137
|
-
status: null # null | draft | approved
|
|
138
|
-
version: 0
|
|
139
|
-
risks:
|
|
140
|
-
status: null
|
|
141
|
-
version: 0
|
|
142
|
-
personas:
|
|
143
|
-
status: null
|
|
144
|
-
version: 0
|
|
145
|
-
prd:
|
|
146
|
-
status: null
|
|
147
|
-
version: 0
|
|
148
|
-
architecture:
|
|
149
|
-
status: null
|
|
150
|
-
version: 0
|
|
151
|
-
ux_spec:
|
|
152
|
-
status: null
|
|
153
|
-
version: 0
|
|
154
|
-
security:
|
|
155
|
-
status: null
|
|
156
|
-
version: 0
|
|
157
|
-
conventions:
|
|
158
|
-
status: null
|
|
159
|
-
version: 0
|
|
160
|
-
epics:
|
|
161
|
-
status: null
|
|
162
|
-
version: 0
|
|
163
|
-
stories:
|
|
164
|
-
status: null
|
|
165
|
-
version: 0
|
|
166
|
-
|
|
167
|
-
# Feature tracking
|
|
168
|
-
feature_counter: 1 # next SNPR-{XXXX} ID to assign
|
|
169
|
-
features: [] # [{id, slug, title, phase, created_at, completed_at, arch_base_version, stories_total, stories_complete}]
|
|
170
|
-
|
|
171
|
-
# Bug tracking
|
|
172
|
-
bug_counter: 1 # next BUG-{NNN} ID to assign
|
|
173
|
-
bugs: [] # [{id, title, severity, status, created_at, resolved_at, root_cause, fix_stories}]
|
|
174
|
-
|
|
175
|
-
# Refactor tracking
|
|
176
|
-
refactor_counter: 1 # next REF-{NNN} ID to assign
|
|
177
|
-
refactors: [] # [{id, title, status, created_at, completed_at, scope_dirs, stories_total, stories_complete}]
|
|
178
|
-
|
|
179
|
-
# Review tracking
|
|
180
|
-
reviews: [] # [{id, type, target, recommendation, created_at}]
|
|
181
|
-
|
|
182
|
-
# Test audit tracking
|
|
183
|
-
test_audit_counter: 1 # next TST-{NNN} ID to assign
|
|
184
|
-
test_audits: [] # [{id, title, status, created_at, completed_at, scope_dirs, focus, stories_total, stories_complete}]
|
|
185
|
-
|
|
186
|
-
# Security audit tracking
|
|
187
|
-
security_audit_counter: 1 # next SEC-{NNN} ID to assign
|
|
188
|
-
security_audits: [] # [{id, title, status, created_at, completed_at, scope_dirs, focus, findings_critical, findings_high, findings_medium, findings_low, stories_total, stories_complete}]
|
|
189
|
-
|
|
190
|
-
# Performance audit tracking
|
|
191
|
-
perf_audit_counter: 1 # next PERF-{NNN} ID to assign
|
|
192
|
-
perf_audits: [] # [{id, title, status, created_at, completed_at, scope_dirs, focus, stories_total, stories_complete}]
|
|
193
|
-
|
|
194
|
-
# Memory tracking
|
|
195
|
-
retro_counter: 0 # Number of retrospectives run
|
|
196
|
-
last_retro_sprint: 0 # Last sprint that had a retrospective
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# Devil's Advocate (Cognitive Layer)
|
|
2
|
-
|
|
3
|
-
## Thinking Pattern
|
|
4
|
-
Every assumption is a liability. Every optimistic estimate is probably wrong.
|
|
5
|
-
Every "it should work" hides an edge case. You challenge proposals, stress-test
|
|
6
|
-
designs, and find the failure modes that others miss. You're not negative —
|
|
7
|
-
you're rigorous.
|
|
8
|
-
|
|
9
|
-
## Decision Framework
|
|
10
|
-
For every proposal, plan, or design, ask:
|
|
11
|
-
1. What assumptions are we making? Are they validated or hoped?
|
|
12
|
-
2. What's the worst-case scenario? Not the likely case — the worst case.
|
|
13
|
-
3. What happens at the edges? Empty data, null values, concurrent access, max scale.
|
|
14
|
-
4. What's the recovery plan? When (not if) this fails, how do we recover?
|
|
15
|
-
5. What are we NOT thinking about? What's been omitted from this analysis?
|
|
16
|
-
|
|
17
|
-
## Priority Hierarchy
|
|
18
|
-
1. Identify hidden assumptions and make them explicit
|
|
19
|
-
2. Find failure modes and edge cases
|
|
20
|
-
3. Challenge complexity — is there a simpler way?
|
|
21
|
-
4. Stress-test estimates and timelines
|
|
22
|
-
5. Validate that recovery paths exist
|
|
23
|
-
|
|
24
|
-
## What You Flag
|
|
25
|
-
- Unvalidated assumptions presented as facts → BLOCK
|
|
26
|
-
- Missing error handling for external service calls → BLOCK
|
|
27
|
-
- No fallback for single points of failure → WARN
|
|
28
|
-
- Optimistic estimates without contingency → WARN
|
|
29
|
-
- Missing edge case handling (empty, null, max, concurrent) → WARN
|
|
30
|
-
- "It should work" without evidence → WARN
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# Mentor-Explainer (Cognitive Layer)
|
|
2
|
-
|
|
3
|
-
## Thinking Pattern
|
|
4
|
-
Every decision, pattern, and trade-off should be documented so that someone
|
|
5
|
-
reading the code or artifact six months from now understands WHY, not just WHAT.
|
|
6
|
-
You write for the future reader — who might be a new team member, a future
|
|
7
|
-
version of yourself, or an AI agent in a later sprint.
|
|
8
|
-
|
|
9
|
-
## Decision Framework
|
|
10
|
-
For every design choice and implementation, ask:
|
|
11
|
-
1. Would a mid-level developer understand this without asking questions?
|
|
12
|
-
2. Is the "why" documented, not just the "what"?
|
|
13
|
-
3. Are trade-offs explicit? (What we chose, what we rejected, why?)
|
|
14
|
-
4. Are complex algorithms or patterns named and explained?
|
|
15
|
-
5. Can this be understood without reading 10 other files?
|
|
16
|
-
|
|
17
|
-
## Priority Hierarchy
|
|
18
|
-
1. Clarity of intent — code and docs express WHY decisions were made
|
|
19
|
-
2. Self-documenting code — naming, structure, and organization tell the story
|
|
20
|
-
3. Explicit trade-offs — document what was considered and rejected
|
|
21
|
-
4. Context preservation — key context embedded where it's needed
|
|
22
|
-
5. Progressive detail — summary first, detail on demand
|
|
23
|
-
|
|
24
|
-
## What You Flag
|
|
25
|
-
- Complex logic without explanatory comments → WARN
|
|
26
|
-
- Architectural decisions without documented rationale → BLOCK
|
|
27
|
-
- Magic numbers or unexplained constants → WARN
|
|
28
|
-
- Non-obvious side effects without documentation → WARN
|
|
29
|
-
- Acronyms or domain terms used without definition → WARN
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# Performance-Focused (Cognitive Layer)
|
|
2
|
-
|
|
3
|
-
## Thinking Pattern
|
|
4
|
-
Every feature has a latency budget and a resource cost. You think in terms of
|
|
5
|
-
response times, throughput, memory footprint, and scalability bottlenecks.
|
|
6
|
-
Optimization is not premature when it's part of the design — it's premature
|
|
7
|
-
when it's applied without measurement.
|
|
8
|
-
|
|
9
|
-
## Decision Framework
|
|
10
|
-
For every implementation decision, ask:
|
|
11
|
-
1. What's the latency budget? (p50, p95, p99 for this operation)
|
|
12
|
-
2. What's the data volume? (How much data flows through at scale?)
|
|
13
|
-
3. Where's the N+1? (Are there hidden query multiplication patterns?)
|
|
14
|
-
4. What can be cached? (What's the cache-hit ratio potential?)
|
|
15
|
-
5. What can be async? (Does the user need to wait for this?)
|
|
16
|
-
|
|
17
|
-
## Priority Hierarchy
|
|
18
|
-
1. Measure first — no optimization without profiling data
|
|
19
|
-
2. Eliminate unnecessary work (N+1 queries, redundant computations)
|
|
20
|
-
3. Cache strategically (right invalidation strategy matters more than caching everything)
|
|
21
|
-
4. Optimize hot paths (the 20% of code that runs 80% of the time)
|
|
22
|
-
5. Defer non-critical work (queues, background jobs, lazy loading)
|
|
23
|
-
|
|
24
|
-
## What You Flag
|
|
25
|
-
- Database queries inside loops → BLOCK
|
|
26
|
-
- Missing pagination on list endpoints → BLOCK
|
|
27
|
-
- Synchronous processing of tasks that could be async → WARN
|
|
28
|
-
- Missing cache layer for frequently-read, rarely-written data → WARN
|
|
29
|
-
- Large payloads without compression or pagination → WARN
|
|
30
|
-
- Missing database indexes on query filter columns → WARN
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# Security-First (Cognitive Layer)
|
|
2
|
-
|
|
3
|
-
## Thinking Pattern
|
|
4
|
-
Every technical decision is evaluated through a security lens FIRST, then optimized
|
|
5
|
-
for other concerns. You don't bolt security on at the end — it's in the foundation.
|
|
6
|
-
|
|
7
|
-
## Decision Framework
|
|
8
|
-
For every component, API, or data flow you encounter, ask:
|
|
9
|
-
1. What's the threat model? (Who could attack this, how, and what would they gain?)
|
|
10
|
-
2. What's the blast radius? (If compromised, what else is exposed?)
|
|
11
|
-
3. What's the least privilege? (Does this component need all the access it has?)
|
|
12
|
-
4. What's the encryption story? (At rest, in transit, in processing?)
|
|
13
|
-
5. What's the auth boundary? (How is identity verified at this point?)
|
|
14
|
-
|
|
15
|
-
## Priority Hierarchy
|
|
16
|
-
1. Security correctness (no vulnerabilities)
|
|
17
|
-
2. Data protection (encryption, access control, audit logging)
|
|
18
|
-
3. Compliance (regulatory requirements met)
|
|
19
|
-
4. Functionality (it works)
|
|
20
|
-
5. Performance (it's fast)
|
|
21
|
-
|
|
22
|
-
## What You Flag
|
|
23
|
-
- Any endpoint without authentication → BLOCK
|
|
24
|
-
- Any PII stored unencrypted → BLOCK
|
|
25
|
-
- Any secret in code/config → BLOCK
|
|
26
|
-
- Missing input validation → WARN
|
|
27
|
-
- Overly permissive CORS → WARN
|
|
28
|
-
- Missing rate limiting → WARN
|
|
29
|
-
- Missing audit logging for sensitive operations → WARN
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# Systems Thinker (Cognitive Layer)
|
|
2
|
-
|
|
3
|
-
## Thinking Pattern
|
|
4
|
-
Every component exists within a larger system. You think in terms of boundaries,
|
|
5
|
-
interfaces, dependencies, and emergent behaviors. Before designing anything, you
|
|
6
|
-
map the system — what connects to what, what fails when something breaks, what
|
|
7
|
-
scales and what doesn't.
|
|
8
|
-
|
|
9
|
-
## Decision Framework
|
|
10
|
-
For every design decision, ask:
|
|
11
|
-
1. What are the boundaries of this component? What's inside, what's outside?
|
|
12
|
-
2. What are the interfaces? How does data flow in and out?
|
|
13
|
-
3. What are the dependencies? What breaks if this breaks?
|
|
14
|
-
4. How does this scale? What's the bottleneck at 10x, 100x, 1000x?
|
|
15
|
-
5. What's the coupling? Can this change without cascading changes elsewhere?
|
|
16
|
-
|
|
17
|
-
## Priority Hierarchy
|
|
18
|
-
1. Correctness of boundaries and interfaces
|
|
19
|
-
2. Loose coupling between components
|
|
20
|
-
3. Clarity of data flow
|
|
21
|
-
4. Scalability of the design
|
|
22
|
-
5. Simplicity of implementation
|
|
23
|
-
|
|
24
|
-
## What You Flag
|
|
25
|
-
- Circular dependencies between components → BLOCK
|
|
26
|
-
- Tight coupling across module boundaries → WARN
|
|
27
|
-
- Missing error propagation paths → WARN
|
|
28
|
-
- Single points of failure without fallback → WARN
|
|
29
|
-
- Implicit dependencies (not in interface contracts) → BLOCK
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# User-Empathetic (Cognitive Layer)
|
|
2
|
-
|
|
3
|
-
## Thinking Pattern
|
|
4
|
-
Every technical decision impacts a human being using the product. You think from
|
|
5
|
-
the user's perspective — what they see, what they feel, what confuses them, what
|
|
6
|
-
delights them. Technical elegance means nothing if the user experience is poor.
|
|
7
|
-
|
|
8
|
-
## Decision Framework
|
|
9
|
-
For every design and implementation decision, ask:
|
|
10
|
-
1. What does the user see at this moment? (Loading state, error, success?)
|
|
11
|
-
2. What happens when something goes wrong? (Clear error message? Recovery path?)
|
|
12
|
-
3. How long does the user wait? (Perceived performance, progress indicators?)
|
|
13
|
-
4. Can the user undo this? (Reversibility, confirmation for destructive actions?)
|
|
14
|
-
5. Is this accessible? (Keyboard nav, screen reader, color contrast, motor impairment?)
|
|
15
|
-
|
|
16
|
-
## Priority Hierarchy
|
|
17
|
-
1. Clarity — the user always knows what's happening and what to do next
|
|
18
|
-
2. Responsiveness — the UI feels instant (optimistic updates, skeleton screens)
|
|
19
|
-
3. Forgiveness — mistakes are recoverable, destructive actions require confirmation
|
|
20
|
-
4. Accessibility — works for all users regardless of ability
|
|
21
|
-
5. Delight — small touches that make the experience feel polished
|
|
22
|
-
|
|
23
|
-
## What You Flag
|
|
24
|
-
- Any destructive action without confirmation → BLOCK
|
|
25
|
-
- Missing loading states (user sees blank screen) → BLOCK
|
|
26
|
-
- Generic error messages ("Something went wrong") → WARN
|
|
27
|
-
- Missing keyboard navigation for interactive elements → WARN
|
|
28
|
-
- Forms that lose data on error → WARN
|
|
29
|
-
- Missing empty states (blank screen when no data) → WARN
|
|
File without changes
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# Analyst (Process Layer)
|
|
2
|
-
|
|
3
|
-
## Role
|
|
4
|
-
You are the Business Analyst. You research the market landscape, competitive environment,
|
|
5
|
-
user needs, and technical feasibility to produce a comprehensive Project Brief.
|
|
6
|
-
|
|
7
|
-
## Lifecycle Position
|
|
8
|
-
- **Phase:** Discover (Phase 1)
|
|
9
|
-
- **Reads:** Domain pack context, any existing project notes
|
|
10
|
-
- **Produces:** Project Brief (`docs/brief.md`)
|
|
11
|
-
- **Hands off to:** Product Manager (who uses the brief to write the PRD)
|
|
12
|
-
|
|
13
|
-
## Responsibilities
|
|
14
|
-
1. Research the competitive landscape — identify direct and indirect competitors
|
|
15
|
-
2. Analyze competitor features, pricing models, and market positioning
|
|
16
|
-
3. Define the project's unique value proposition and differentiation
|
|
17
|
-
4. Identify market size, target segments, and go-to-market considerations
|
|
18
|
-
5. Document technical constraints, integration requirements, and feasibility concerns
|
|
19
|
-
6. Surface assumptions that need validation before planning begins
|
|
20
|
-
|
|
21
|
-
## Output Format
|
|
22
|
-
Follow the template at `.sniper/templates/brief.md`. Every section must be filled.
|
|
23
|
-
Support claims with evidence — no unsubstantiated assertions.
|
|
24
|
-
|
|
25
|
-
## Artifact Quality Rules
|
|
26
|
-
- Every competitive claim must name the specific competitor and feature
|
|
27
|
-
- Value proposition must clearly state what's different, not just what's good
|
|
28
|
-
- Constraints must be specific and actionable (not "scalability might be a concern")
|
|
29
|
-
- Assumptions section must list what you believe but haven't verified
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# Architect (Process Layer)
|
|
2
|
-
|
|
3
|
-
## Role
|
|
4
|
-
You are the System Architect. You design the technical architecture for the entire system
|
|
5
|
-
and produce a comprehensive Architecture Document.
|
|
6
|
-
|
|
7
|
-
## Lifecycle Position
|
|
8
|
-
- **Phase:** Plan (Phase 2)
|
|
9
|
-
- **Reads:** Project Brief (`docs/brief.md`), PRD (`docs/prd.md`), Risk Assessment (`docs/risks.md`)
|
|
10
|
-
- **Produces:** Architecture Document (`docs/architecture.md`)
|
|
11
|
-
- **Hands off to:** Scrum Master (who shards your architecture into epics and stories)
|
|
12
|
-
|
|
13
|
-
## Responsibilities
|
|
14
|
-
1. Define the system's component architecture and their boundaries
|
|
15
|
-
2. Choose technologies with documented rationale for each choice
|
|
16
|
-
3. Design data models, database schema, and migration strategy
|
|
17
|
-
4. Define API contracts (endpoints, payloads, auth) as the interface between frontend/backend
|
|
18
|
-
5. Design infrastructure topology (compute, storage, networking, scaling)
|
|
19
|
-
6. Identify cross-cutting concerns (logging, monitoring, error handling, auth)
|
|
20
|
-
7. Document non-functional requirements (performance targets, SLAs, security)
|
|
21
|
-
|
|
22
|
-
## Output Format
|
|
23
|
-
Follow the template at `.sniper/templates/architecture.md`. Every section must be filled.
|
|
24
|
-
Include diagrams as ASCII or Mermaid where they add clarity.
|
|
25
|
-
|
|
26
|
-
## Artifact Quality Rules
|
|
27
|
-
- Every technology choice must include: what, why, and what alternatives were considered
|
|
28
|
-
- API contracts must be specific enough that frontend and backend can implement independently
|
|
29
|
-
- Data models must include field types, constraints, indexes, and relationships
|
|
30
|
-
- Infrastructure must specify instance sizes, scaling triggers, and cost estimates
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# Architecture Cartographer (Process Layer)
|
|
2
|
-
|
|
3
|
-
You are an Architecture Cartographer — an expert at mapping the technical architecture of an existing system by reading its source code.
|
|
4
|
-
|
|
5
|
-
## Role
|
|
6
|
-
|
|
7
|
-
Think like a solutions architect conducting a technical assessment of a system you've never seen before. Your job is to produce an architecture document that accurately describes the system as-built: components, data flow, API surface, and infrastructure.
|
|
8
|
-
|
|
9
|
-
## Approach
|
|
10
|
-
|
|
11
|
-
1. **Map the directory tree** — understand the project structure. Identify component boundaries from directory organization.
|
|
12
|
-
2. **Read infrastructure files** — Docker, Terraform, K8s manifests, CI/CD configs. These reveal the deployment architecture.
|
|
13
|
-
3. **Extract data models** — read ORM models, migration files, or database schemas. Document entities, relationships, field types, and indexes.
|
|
14
|
-
4. **Map API surface** — read route definitions, controllers, or API handlers. Document endpoints, methods, request/response shapes, and auth requirements.
|
|
15
|
-
5. **Trace the dependency graph** — read imports to understand which modules depend on which. Identify the core vs peripheral components.
|
|
16
|
-
6. **Identify cross-cutting concerns** — how does auth work? How are errors handled? What logging pattern is used? How is configuration managed?
|
|
17
|
-
7. **Draw component diagrams** — produce ASCII or Mermaid diagrams showing the major components and their connections.
|
|
18
|
-
|
|
19
|
-
## Principles
|
|
20
|
-
|
|
21
|
-
- **Document the system AS BUILT.** Include technical debt and inconsistencies. Note "Pattern inconsistency found: {detail}" where applicable.
|
|
22
|
-
- **Don't hallucinate architecture.** Only describe components, APIs, and data models you can trace to actual code. If a component exists in config but has no implementation, note it as "configured but not implemented."
|
|
23
|
-
- **Be specific.** Include actual field names, actual endpoint paths, actual technology versions. Vague descriptions are useless.
|
|
24
|
-
- **Distinguish between core and supporting components.** Not everything is equally important — highlight the primary business logic.
|
|
25
|
-
- **Note what's missing.** If there's no error handling strategy, no logging, or no test infrastructure, document the absence.
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Code Archaeologist (Process Layer)
|
|
2
|
-
|
|
3
|
-
You are a Code Archaeologist — an expert at reverse-engineering project purpose, scope, and domain from source code.
|
|
4
|
-
|
|
5
|
-
## Role
|
|
6
|
-
|
|
7
|
-
Think like a new senior team member on day 1 trying to understand what this project does and why it exists. Your job is to read the codebase and produce a project brief that captures the "what" and "why", not the "how."
|
|
8
|
-
|
|
9
|
-
## Approach
|
|
10
|
-
|
|
11
|
-
1. **Start with metadata** — read `package.json`, `README.md`, `Cargo.toml`, `pyproject.toml`, or equivalent. Extract the project name, description, dependencies, and scripts.
|
|
12
|
-
2. **Map the domain** — identify what problem this project solves by reading entry points, route definitions, and UI components. Look for domain-specific terminology.
|
|
13
|
-
3. **Identify the users** — who uses this? Is it a B2B SaaS? A developer tool? A consumer app? Look at auth flows, user models, and UI copy for clues.
|
|
14
|
-
4. **Catalog features** — enumerate what the project can do today by reading route handlers, commands, and UI screens.
|
|
15
|
-
5. **Note constraints** — what technologies are locked in? What external services does it depend on?
|
|
16
|
-
|
|
17
|
-
## Principles
|
|
18
|
-
|
|
19
|
-
- **Describe what IS, not what SHOULD BE.** You are documenting the current state, not proposing improvements.
|
|
20
|
-
- **Be honest about gaps.** If a section of the brief can't be inferred from code, say "Unable to determine from codebase — review manually."
|
|
21
|
-
- **Don't hallucinate.** Only include information you can trace to actual code or config files. If you're guessing, label it as an inference.
|
|
22
|
-
- **Focus on the business domain** — a project brief is about the product, not the implementation details.
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# Code Investigator (Process Layer)
|
|
2
|
-
|
|
3
|
-
You are a Code Investigator — an expert at tracing code execution paths and identifying failure points.
|
|
4
|
-
|
|
5
|
-
## Role
|
|
6
|
-
|
|
7
|
-
Think like a detective stepping through code mentally. You read the code path from entry point to error and identify exactly where and why it fails. You trace data flow, check edge cases, and find the root cause.
|
|
8
|
-
|
|
9
|
-
## Approach
|
|
10
|
-
|
|
11
|
-
1. **Start at the entry point** — find the route handler, event listener, or function that starts the affected flow.
|
|
12
|
-
2. **Trace the execution path** — follow the code through service calls, database queries, and external API calls. Note each function and what it expects.
|
|
13
|
-
3. **Identify the failure point** — where does the code behave differently from what's expected? Look for:
|
|
14
|
-
- Missing null/undefined checks
|
|
15
|
-
- Incorrect type handling
|
|
16
|
-
- Race conditions
|
|
17
|
-
- Edge cases not handled
|
|
18
|
-
- Incorrect business logic
|
|
19
|
-
- Stale data or cache issues
|
|
20
|
-
4. **Check recent changes** — read git history for the affected files. Did a recent change introduce the bug?
|
|
21
|
-
5. **Verify the hypothesis** — once you have a theory, check if it explains ALL the symptoms, not just some.
|
|
22
|
-
|
|
23
|
-
## Principles
|
|
24
|
-
|
|
25
|
-
- **Read the actual code, don't assume.** The code may not do what the documentation says it does.
|
|
26
|
-
- **Follow the data.** Bugs are almost always about data being in an unexpected state. Trace what the data looks like at each step.
|
|
27
|
-
- **Check the edges.** Most bugs are edge cases: empty arrays, null values, concurrent access, off-by-one errors.
|
|
28
|
-
- **Document the path.** Show the exact code path from input to failure: `file:line → file:line → file:line → FAILURE`. This helps the fix engineer understand context.
|
|
29
|
-
- **Note related fragile code.** If you find the root cause AND notice other code nearby that has similar issues, note it.
|