Reverse Engineer Spec from Branch Implementation
Problem
Feature branches often ship without comprehensive documentation. After the fact, teams need
product specs, architectural docs, or onboarding materials that explain what was built and why.
Manually reading every file change is slow and error-prone. This skill systematically extracts
a complete spec from a branch's diff.
Context / Trigger Conditions
- User asks to "analyze this branch" or "reverse engineer a spec"
- User asks to "document what this branch does"
- User wants a product spec, technical spec, or design doc from existing code
- A branch has many commits and files changed and needs a coherent explanation
- Onboarding to an unfamiliar feature branch
Solution
Phase 1: Scope the Branch
Get the full picture of what changed before reading any files.
# 1. Identify the base branch (usually main or latest)
git log --oneline <base>..HEAD | head -50
# 2. Get file-level diff stats
git diff --stat <base>...HEAD
# 3. Count the scale
git diff --stat <base>...HEAD | tail -1
From the diff stats, categorize files into groups:
- Core implementation (new modules, business logic)
- Integration points (modified selectors, reducers, hooks, components)
- Tests (unit tests, integration tests, e2e tests)
- Configuration (feature flags, env vars, types, configs)
- Incidental (formatting, imports, minor refactors)
Phase 2: Parallel Deep Exploration
Launch 2-4 parallel exploration agents, each focused on a different file group. This is
critical for efficiency — reading 50+ files sequentially is too slow.
Agent 1: Core Implementation
- All new files (the heart of the feature)
- Focus on: purpose, key types, exported functions, data flow, inter-module connections
Agent 2: Integration Points
- Modified selectors, reducers, hooks, components
- Focus on: what changed, why (inferred), how it connects to core implementation
Agent 3: Tests
- All test files (unit, integration, e2e)
- Focus on: what behaviors are validated, key assertions, what product requirements they encode
Agent 4 (if needed): Configuration & Infrastructure
- Feature flags, env vars, build configs, type declarations
- Focus on: rollout strategy, gating mechanisms, deployment concerns
Each agent prompt should ask for:
- Purpose of each file
- Key exports and types
- Data flow and dependencies
- How each file connects to others in the group
Phase 3: Cross-Check for Gaps
After agents return, diff the analyzed files against the full file list:
# List all non-test changed files
git diff --stat <base>...HEAD -- '*.ts' '*.tsx' | awk '{print $1}' | sort
# Show small diffs for any files not yet analyzed
git diff <base>...HEAD -- <uncovered-files>
Read the remaining small diffs directly. These often contain important details:
- Type declarations (new fields on models)
- Feature flag definitions
- Bug fixes discovered during development
- Proxy/compatibility changes in existing code
Phase 4: Write the Spec Document
Structure the spec with these sections (skip sections that don't apply):
# [Feature Name]
## Reverse-Engineered Product & Technical Specification
## 1. Problem Statement
Why this feature exists. What user/business pain it addresses.
Infer from the nature of the changes and any comments in the code.
## 2. Solution Overview
High-level description of the approach. Key design properties
(transparent, lazy, bounded, etc.).
## 3. Product Requirements
### 3.1 User-Facing Behavior
Table of requirements inferred from tests and UI changes.
### 3.2 Supported Workflows
List of workflows validated by tests.
### 3.3 Scope Boundaries
What is and isn't included.
## 4. Architecture
### 4.1 System Diagram
ASCII diagram showing component relationships and data flow.
### 4.2 Data Lifecycle
Step-by-step flow from initial state through steady state.
## 5. Technical Design
Subsections for each major design decision:
- Feature flags and gating
- Data models / schema changes
- Key algorithms or patterns
- Integration patterns (how existing code was modified)
- Cache/performance design
- Error handling and fallbacks
## 6. New Files
Table: file path, purpose (one line each).
## 7. Modified Files (Key Changes)
Table: file path, what changed (one line each).
Include ALL files — even minor ones. The cross-check in Phase 3
catches files that agents missed.
## 8. Testing Strategy
### Unit Tests
### Integration / E2E Tests
### Instrumentation / Observability
## 9. Rollout Strategy
How the feature is gated, incremental rollout steps, kill switches.
## 10. Risks and Mitigations
Table: risk, mitigation.
## 11. Summary
Key metrics: files added/modified, lines changed, scope of impact.
Phase 5: Verify Completeness
Cross-check the spec against the branch:
- Every file in
git diff --stat should appear in Section 6 or 7
- Every test file should be referenced in Section 8
- Feature flags mentioned in code should appear in Section 5/9
- The architecture diagram should match the actual data flow discovered by agents
Verification
- Every changed file on the branch is accounted for in the spec
- The architecture diagram accurately represents the data flow
- Product requirements match what the tests actually validate
- No significant design decisions are missing from the technical design section
Example
See the canonical offload spec produced for the test-parity-mem-exp-99-with-pr16393 branch:
a 12-section document covering 74 changed files across 12 commits, with architecture diagrams,
IndexedDB schema documentation, proxy design details, cache eviction policies, testing strategy
against a real customer dataset, and a complete file inventory.
Notes
- Parallel agents are essential: A branch with 50+ files takes too long to analyze
sequentially. 3-4 parallel agents cut analysis time by 3-4x.
- Cross-check is critical: Agents inevitably miss some files. The Phase 3 cross-check
catches small but important changes (type declarations, bug fixes, compatibility shims).
- Infer the "why": Code shows "what" but not always "why". Use test assertions, comments,
commit messages, and the shape of changes to infer product motivation.
- Save to
docs/: Write the spec to a docs/ directory in the repo so it's discoverable.
- Don't over-document incidentals: Formatting changes, import reordering, and trailing
commas can be mentioned in a single line rather than getting their own subsection.
- Use tables liberally: File inventories, feature flags, risks — tables are scannable
and compact.
1---2name: schematic3description: Reverse engineer a detailed product and technical specification document from a git branch's implementation. Use when: (1) a branch has shipped or is in-progress and needs documentation, (2) you need to understand what a branch does at product and architecture level, (3) onboarding to someone else's feature branch, (4) creating PR descriptions or design docs after the fact, (5) user asks to "analyze this branch", "write a spec from the code", or "document what this branch does". Produces a structured markdown spec covering problem statement, product requirements, architecture, technical design, file inventories, testing strategy, rollout plan, and risks.4---5
6# Reverse Engineer Spec from Branch Implementation
7
8## Problem
9
10Feature branches often ship without comprehensive documentation. After the fact, teams need
11product specs, architectural docs, or onboarding materials that explain what was built and why.
12Manually reading every file change is slow and error-prone. This skill systematically extracts
13a complete spec from a branch's diff.
14
15## Context / Trigger Conditions
16
17- User asks to "analyze this branch" or "reverse engineer a spec"
18- User asks to "document what this branch does"
19- User wants a product spec, technical spec, or design doc from existing code
20- A branch has many commits and files changed and needs a coherent explanation
21- Onboarding to an unfamiliar feature branch
22
23## Solution
24
25### Phase 1: Scope the Branch
26
27Get the full picture of what changed before reading any files.
28
29```bash
30# 1. Identify the base branch (usually main or latest)
31git log --oneline <base>..HEAD | head -50
32
33# 2. Get file-level diff stats
34git diff --stat <base>...HEAD
35
36# 3. Count the scale
37git diff --stat <base>...HEAD | tail -1
38```
39
40From the diff stats, categorize files into groups:
41- **Core implementation** (new modules, business logic)
42- **Integration points** (modified selectors, reducers, hooks, components)
43- **Tests** (unit tests, integration tests, e2e tests)
44- **Configuration** (feature flags, env vars, types, configs)
45- **Incidental** (formatting, imports, minor refactors)
46
47### Phase 2: Parallel Deep Exploration
48
49Launch 2-4 parallel exploration agents, each focused on a different file group. This is
50critical for efficiency — reading 50+ files sequentially is too slow.
51
52**Agent 1: Core Implementation**
53- All new files (the heart of the feature)
54- Focus on: purpose, key types, exported functions, data flow, inter-module connections
55
56**Agent 2: Integration Points**
57- Modified selectors, reducers, hooks, components
58- Focus on: what changed, why (inferred), how it connects to core implementation
59
60**Agent 3: Tests**
61- All test files (unit, integration, e2e)
62- Focus on: what behaviors are validated, key assertions, what product requirements they encode
63
64**Agent 4 (if needed): Configuration & Infrastructure**
65- Feature flags, env vars, build configs, type declarations
66- Focus on: rollout strategy, gating mechanisms, deployment concerns
67
68Each agent prompt should ask for:
69- Purpose of each file
70- Key exports and types
71- Data flow and dependencies
72- How each file connects to others in the group
73
74### Phase 3: Cross-Check for Gaps
75
76After agents return, diff the analyzed files against the full file list:
77
78```bash
79# List all non-test changed files
80git diff --stat <base>...HEAD -- '*.ts' '*.tsx' | awk '{print $1}' | sort
81
82# Show small diffs for any files not yet analyzed
83git diff <base>...HEAD -- <uncovered-files>
84```
85
86Read the remaining small diffs directly. These often contain important details:
87- Type declarations (new fields on models)
88- Feature flag definitions
89- Bug fixes discovered during development
90- Proxy/compatibility changes in existing code
91
92### Phase 4: Write the Spec Document
93
94Structure the spec with these sections (skip sections that don't apply):
95
96```markdown
97# [Feature Name]
98## Reverse-Engineered Product & Technical Specification
99
100## 1. Problem Statement
101Why this feature exists. What user/business pain it addresses.
102Infer from the nature of the changes and any comments in the code.
103
104## 2. Solution Overview
105High-level description of the approach. Key design properties
106(transparent, lazy, bounded, etc.).
107
108## 3. Product Requirements
109### 3.1 User-Facing Behavior
110Table of requirements inferred from tests and UI changes.
111
112### 3.2 Supported Workflows
113List of workflows validated by tests.
114
115### 3.3 Scope Boundaries
116What is and isn't included.
117
118## 4. Architecture
119### 4.1 System Diagram
120ASCII diagram showing component relationships and data flow.
121
122### 4.2 Data Lifecycle
123Step-by-step flow from initial state through steady state.
124
125## 5. Technical Design
126Subsections for each major design decision:
127- Feature flags and gating
128- Data models / schema changes
129- Key algorithms or patterns
130- Integration patterns (how existing code was modified)
131- Cache/performance design
132- Error handling and fallbacks
133
134## 6. New Files
135Table: file path, purpose (one line each).
136
137## 7. Modified Files (Key Changes)
138Table: file path, what changed (one line each).
139Include ALL files — even minor ones. The cross-check in Phase 3
140catches files that agents missed.
141
142## 8. Testing Strategy
143### Unit Tests
144### Integration / E2E Tests
145### Instrumentation / Observability
146
147## 9. Rollout Strategy
148How the feature is gated, incremental rollout steps, kill switches.
149
150## 10. Risks and Mitigations
151Table: risk, mitigation.
152
153## 11. Summary
154Key metrics: files added/modified, lines changed, scope of impact.
155```
156
157### Phase 5: Verify Completeness
158
159Cross-check the spec against the branch:
160
1611. Every file in `git diff --stat` should appear in Section 6 or 7
1622. Every test file should be referenced in Section 8
1633. Feature flags mentioned in code should appear in Section 5/9
1644. The architecture diagram should match the actual data flow discovered by agents
165
166## Verification
167
168- Every changed file on the branch is accounted for in the spec
169- The architecture diagram accurately represents the data flow
170- Product requirements match what the tests actually validate
171- No significant design decisions are missing from the technical design section
172
173## Example
174
175See the canonical offload spec produced for the `test-parity-mem-exp-99-with-pr16393` branch:
176a 12-section document covering 74 changed files across 12 commits, with architecture diagrams,
177IndexedDB schema documentation, proxy design details, cache eviction policies, testing strategy
178against a real customer dataset, and a complete file inventory.
179
180## Notes
181
182- **Parallel agents are essential**: A branch with 50+ files takes too long to analyze
183 sequentially. 3-4 parallel agents cut analysis time by 3-4x.
184- **Cross-check is critical**: Agents inevitably miss some files. The Phase 3 cross-check
185 catches small but important changes (type declarations, bug fixes, compatibility shims).
186- **Infer the "why"**: Code shows "what" but not always "why". Use test assertions, comments,
187 commit messages, and the shape of changes to infer product motivation.
188- **Save to `docs/`**: Write the spec to a `docs/` directory in the repo so it's discoverable.
189- **Don't over-document incidentals**: Formatting changes, import reordering, and trailing
190 commas can be mentioned in a single line rather than getting their own subsection.
191- **Use tables liberally**: File inventories, feature flags, risks — tables are scannable
192 and compact.