chiron 0.2.0 → 0.2.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -0
- data/CLAUDE.md +30 -1
- data/docs/development_journal.md +84 -1
- data/lib/chiron/templates/python/commands/quality/python-testing.md +578 -0
- data/lib/chiron/templates/python/commands/workflows/debug-python.md +222 -0
- data/lib/chiron/templates/python/commands/workflows/flask-development.md +667 -0
- data/lib/chiron/templates/python/commands/workflows/python-refactor.md +336 -0
- data/lib/chiron/templates/shared/commands/context/branch-context.md +176 -0
- data/lib/chiron/templates/shared/commands/context/catchup.md +6 -1
- data/lib/chiron/templates/shared/commands/context/quickstart.md +8 -3
- data/lib/chiron/templates/shared/commands/workflows/branch-management.md +256 -0
- data/lib/chiron/templates/shared/development_journal.md.erb +9 -3
- data/lib/chiron/version.rb +1 -1
- metadata +7 -1
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
# Python Refactoring Workflow
|
|
2
|
+
|
|
3
|
+
Follow this systematic approach when refactoring Python code to improve its structure, readability, and maintainability.
|
|
4
|
+
|
|
5
|
+
## Pre-Refactoring Checklist
|
|
6
|
+
|
|
7
|
+
- [ ] Ensure comprehensive test coverage exists
|
|
8
|
+
- [ ] Run all tests and confirm they pass
|
|
9
|
+
- [ ] Commit current working state to version control
|
|
10
|
+
- [ ] Identify specific refactoring goals
|
|
11
|
+
- [ ] Review Python conventions and PEP 8
|
|
12
|
+
|
|
13
|
+
## Refactoring Patterns
|
|
14
|
+
|
|
15
|
+
### 1. Extract Function
|
|
16
|
+
```python
|
|
17
|
+
# Before
|
|
18
|
+
def process_user_data(users):
|
|
19
|
+
for user in users:
|
|
20
|
+
# Complex validation logic
|
|
21
|
+
if user.age < 18:
|
|
22
|
+
user.status = 'minor'
|
|
23
|
+
elif user.age >= 65:
|
|
24
|
+
user.status = 'senior'
|
|
25
|
+
else:
|
|
26
|
+
user.status = 'adult'
|
|
27
|
+
|
|
28
|
+
# Complex calculation
|
|
29
|
+
user.discount = calculate_complex_discount(user)
|
|
30
|
+
|
|
31
|
+
# After
|
|
32
|
+
def process_user_data(users):
|
|
33
|
+
for user in users:
|
|
34
|
+
user.status = categorize_user_by_age(user.age)
|
|
35
|
+
user.discount = calculate_user_discount(user)
|
|
36
|
+
|
|
37
|
+
def categorize_user_by_age(age: int) -> str:
|
|
38
|
+
if age < 18:
|
|
39
|
+
return 'minor'
|
|
40
|
+
elif age >= 65:
|
|
41
|
+
return 'senior'
|
|
42
|
+
return 'adult'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 2. Extract Class
|
|
46
|
+
```python
|
|
47
|
+
# Before
|
|
48
|
+
def send_email(to, subject, body, smtp_server, port, username, password):
|
|
49
|
+
# Email sending logic
|
|
50
|
+
pass
|
|
51
|
+
|
|
52
|
+
# After
|
|
53
|
+
class EmailService:
|
|
54
|
+
def __init__(self, smtp_server: str, port: int, username: str, password: str):
|
|
55
|
+
self.smtp_server = smtp_server
|
|
56
|
+
self.port = port
|
|
57
|
+
self.username = username
|
|
58
|
+
self.password = password
|
|
59
|
+
|
|
60
|
+
def send(self, to: str, subject: str, body: str) -> None:
|
|
61
|
+
# Email sending logic
|
|
62
|
+
pass
|
|
63
|
+
|
|
64
|
+
# Usage
|
|
65
|
+
email_service = EmailService(smtp_server, port, username, password)
|
|
66
|
+
email_service.send(to, subject, body)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 3. Replace Conditionals with Polymorphism
|
|
70
|
+
```python
|
|
71
|
+
# Before
|
|
72
|
+
def calculate_shipping(order_type, weight, distance):
|
|
73
|
+
if order_type == 'standard':
|
|
74
|
+
return weight * 0.5 + distance * 0.1
|
|
75
|
+
elif order_type == 'express':
|
|
76
|
+
return weight * 1.0 + distance * 0.2
|
|
77
|
+
elif order_type == 'overnight':
|
|
78
|
+
return weight * 2.0 + distance * 0.5
|
|
79
|
+
|
|
80
|
+
# After
|
|
81
|
+
from abc import ABC, abstractmethod
|
|
82
|
+
|
|
83
|
+
class ShippingStrategy(ABC):
|
|
84
|
+
@abstractmethod
|
|
85
|
+
def calculate(self, weight: float, distance: float) -> float:
|
|
86
|
+
pass
|
|
87
|
+
|
|
88
|
+
class StandardShipping(ShippingStrategy):
|
|
89
|
+
def calculate(self, weight: float, distance: float) -> float:
|
|
90
|
+
return weight * 0.5 + distance * 0.1
|
|
91
|
+
|
|
92
|
+
class ExpressShipping(ShippingStrategy):
|
|
93
|
+
def calculate(self, weight: float, distance: float) -> float:
|
|
94
|
+
return weight * 1.0 + distance * 0.2
|
|
95
|
+
|
|
96
|
+
class OvernightShipping(ShippingStrategy):
|
|
97
|
+
def calculate(self, weight: float, distance: float) -> float:
|
|
98
|
+
return weight * 2.0 + distance * 0.5
|
|
99
|
+
|
|
100
|
+
# Usage
|
|
101
|
+
shipping_strategies = {
|
|
102
|
+
'standard': StandardShipping(),
|
|
103
|
+
'express': ExpressShipping(),
|
|
104
|
+
'overnight': OvernightShipping()
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
def calculate_shipping(order_type: str, weight: float, distance: float) -> float:
|
|
108
|
+
strategy = shipping_strategies.get(order_type)
|
|
109
|
+
if not strategy:
|
|
110
|
+
raise ValueError(f"Unknown order type: {order_type}")
|
|
111
|
+
return strategy.calculate(weight, distance)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 4. Simplify Complex Conditionals
|
|
115
|
+
```python
|
|
116
|
+
# Before
|
|
117
|
+
def can_withdraw(account, amount):
|
|
118
|
+
if account.balance >= amount and account.is_active and not account.is_frozen and amount > 0:
|
|
119
|
+
return True
|
|
120
|
+
return False
|
|
121
|
+
|
|
122
|
+
# After
|
|
123
|
+
def can_withdraw(account, amount):
|
|
124
|
+
has_sufficient_funds = account.balance >= amount
|
|
125
|
+
is_valid_amount = amount > 0
|
|
126
|
+
is_account_available = account.is_active and not account.is_frozen
|
|
127
|
+
|
|
128
|
+
return has_sufficient_funds and is_valid_amount and is_account_available
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 5. Use List Comprehensions and Generators
|
|
132
|
+
```python
|
|
133
|
+
# Before
|
|
134
|
+
def get_active_user_emails(users):
|
|
135
|
+
emails = []
|
|
136
|
+
for user in users:
|
|
137
|
+
if user.is_active:
|
|
138
|
+
emails.append(user.email)
|
|
139
|
+
return emails
|
|
140
|
+
|
|
141
|
+
# After
|
|
142
|
+
def get_active_user_emails(users):
|
|
143
|
+
return [user.email for user in users if user.is_active]
|
|
144
|
+
|
|
145
|
+
# For large datasets, use generator
|
|
146
|
+
def get_active_user_emails_generator(users):
|
|
147
|
+
return (user.email for user in users if user.is_active)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 6. Replace Magic Numbers with Named Constants
|
|
151
|
+
```python
|
|
152
|
+
# Before
|
|
153
|
+
def calculate_circle_area(radius):
|
|
154
|
+
return 3.14159 * radius ** 2
|
|
155
|
+
|
|
156
|
+
def is_valid_age(age):
|
|
157
|
+
return 18 <= age <= 65
|
|
158
|
+
|
|
159
|
+
# After
|
|
160
|
+
import math
|
|
161
|
+
|
|
162
|
+
MINIMUM_AGE = 18
|
|
163
|
+
RETIREMENT_AGE = 65
|
|
164
|
+
|
|
165
|
+
def calculate_circle_area(radius):
|
|
166
|
+
return math.pi * radius ** 2
|
|
167
|
+
|
|
168
|
+
def is_valid_age(age):
|
|
169
|
+
return MINIMUM_AGE <= age <= RETIREMENT_AGE
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### 7. Use Type Hints
|
|
173
|
+
```python
|
|
174
|
+
# Before
|
|
175
|
+
def process_items(items, multiplier):
|
|
176
|
+
return [item * multiplier for item in items]
|
|
177
|
+
|
|
178
|
+
# After
|
|
179
|
+
from typing import List, Union
|
|
180
|
+
|
|
181
|
+
def process_items(
|
|
182
|
+
items: List[Union[int, float]],
|
|
183
|
+
multiplier: Union[int, float]
|
|
184
|
+
) -> List[Union[int, float]]:
|
|
185
|
+
return [item * multiplier for item in items]
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### 8. Replace Nested Loops with Iterator Tools
|
|
189
|
+
```python
|
|
190
|
+
# Before
|
|
191
|
+
def get_combinations(list1, list2):
|
|
192
|
+
result = []
|
|
193
|
+
for item1 in list1:
|
|
194
|
+
for item2 in list2:
|
|
195
|
+
result.append((item1, item2))
|
|
196
|
+
return result
|
|
197
|
+
|
|
198
|
+
# After
|
|
199
|
+
from itertools import product
|
|
200
|
+
|
|
201
|
+
def get_combinations(list1, list2):
|
|
202
|
+
return list(product(list1, list2))
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Code Organization Refactoring
|
|
206
|
+
|
|
207
|
+
### 1. Module Structure
|
|
208
|
+
```python
|
|
209
|
+
# Before: everything in one file
|
|
210
|
+
# app.py (1000+ lines)
|
|
211
|
+
|
|
212
|
+
# After: organized modules
|
|
213
|
+
# project/
|
|
214
|
+
# ├── __init__.py
|
|
215
|
+
# ├── models/
|
|
216
|
+
# │ ├── __init__.py
|
|
217
|
+
# │ ├── user.py
|
|
218
|
+
# │ └── order.py
|
|
219
|
+
# ├── services/
|
|
220
|
+
# │ ├── __init__.py
|
|
221
|
+
# │ ├── email_service.py
|
|
222
|
+
# │ └── payment_service.py
|
|
223
|
+
# └── utils/
|
|
224
|
+
# ├── __init__.py
|
|
225
|
+
# └── validators.py
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 2. Dependency Injection
|
|
229
|
+
```python
|
|
230
|
+
# Before
|
|
231
|
+
class OrderService:
|
|
232
|
+
def process_order(self, order):
|
|
233
|
+
db = Database() # Hard-coded dependency
|
|
234
|
+
payment = PaymentGateway() # Hard-coded dependency
|
|
235
|
+
# Process order
|
|
236
|
+
|
|
237
|
+
# After
|
|
238
|
+
class OrderService:
|
|
239
|
+
def __init__(self, db: Database, payment_gateway: PaymentGateway):
|
|
240
|
+
self.db = db
|
|
241
|
+
self.payment_gateway = payment_gateway
|
|
242
|
+
|
|
243
|
+
def process_order(self, order):
|
|
244
|
+
# Process order using injected dependencies
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Testing During Refactoring
|
|
248
|
+
|
|
249
|
+
### 1. Maintain Test Coverage
|
|
250
|
+
```bash
|
|
251
|
+
# Run tests with coverage
|
|
252
|
+
pytest --cov=myproject tests/
|
|
253
|
+
|
|
254
|
+
# Generate coverage report
|
|
255
|
+
pytest --cov=myproject --cov-report=html tests/
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### 2. Test Each Refactoring Step
|
|
259
|
+
```python
|
|
260
|
+
# Write characterization tests before refactoring
|
|
261
|
+
def test_original_behavior():
|
|
262
|
+
# Capture current behavior
|
|
263
|
+
result = legacy_function(test_input)
|
|
264
|
+
assert result == expected_output
|
|
265
|
+
|
|
266
|
+
# Ensure behavior remains the same after refactoring
|
|
267
|
+
def test_refactored_behavior():
|
|
268
|
+
result = refactored_function(test_input)
|
|
269
|
+
assert result == expected_output
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
## Performance Considerations
|
|
273
|
+
|
|
274
|
+
### 1. Profile Before and After
|
|
275
|
+
```python
|
|
276
|
+
import cProfile
|
|
277
|
+
import pstats
|
|
278
|
+
|
|
279
|
+
# Profile original code
|
|
280
|
+
cProfile.run('original_function()', 'original_stats')
|
|
281
|
+
|
|
282
|
+
# Profile refactored code
|
|
283
|
+
cProfile.run('refactored_function()', 'refactored_stats')
|
|
284
|
+
|
|
285
|
+
# Compare results
|
|
286
|
+
original = pstats.Stats('original_stats')
|
|
287
|
+
refactored = pstats.Stats('refactored_stats')
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### 2. Memory Usage
|
|
291
|
+
```python
|
|
292
|
+
from memory_profiler import profile
|
|
293
|
+
|
|
294
|
+
@profile
|
|
295
|
+
def function_to_refactor():
|
|
296
|
+
# Your code here
|
|
297
|
+
pass
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## Refactoring Tools
|
|
301
|
+
|
|
302
|
+
### 1. Automated Refactoring with rope
|
|
303
|
+
```bash
|
|
304
|
+
pip install rope
|
|
305
|
+
|
|
306
|
+
# Use rope for automated refactoring
|
|
307
|
+
# - Extract method
|
|
308
|
+
# - Rename
|
|
309
|
+
# - Move
|
|
310
|
+
# - Inline
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### 2. Code Formatting
|
|
314
|
+
```bash
|
|
315
|
+
# Format with black
|
|
316
|
+
black myproject/
|
|
317
|
+
|
|
318
|
+
# Sort imports with isort
|
|
319
|
+
isort myproject/
|
|
320
|
+
|
|
321
|
+
# Type check with mypy
|
|
322
|
+
mypy myproject/
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
## Post-Refactoring Checklist
|
|
326
|
+
|
|
327
|
+
- [ ] All tests pass
|
|
328
|
+
- [ ] Code coverage maintained or improved
|
|
329
|
+
- [ ] Performance is acceptable
|
|
330
|
+
- [ ] Code follows PEP 8 and project conventions
|
|
331
|
+
- [ ] Type hints added where appropriate
|
|
332
|
+
- [ ] Documentation updated
|
|
333
|
+
- [ ] Complex parts have explanatory comments
|
|
334
|
+
- [ ] No code duplication
|
|
335
|
+
- [ ] SOLID principles followed
|
|
336
|
+
- [ ] Code reviewed by team member
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# Branch Context Command
|
|
2
|
+
|
|
3
|
+
Use this command when switching branches, starting new work, or when Claude needs to understand the current branch context.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
Provides comprehensive branch information to maintain context across Claude sessions, especially important when:
|
|
8
|
+
- Switching between branches
|
|
9
|
+
- Starting a new Claude session on an existing branch
|
|
10
|
+
- Collaborating with others on feature branches
|
|
11
|
+
- Resuming work after time away
|
|
12
|
+
|
|
13
|
+
## Process
|
|
14
|
+
|
|
15
|
+
### 1. **Current Branch Status**
|
|
16
|
+
```bash
|
|
17
|
+
git branch --show-current
|
|
18
|
+
git status --porcelain
|
|
19
|
+
git log --oneline -5
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### 2. **Branch Information**
|
|
23
|
+
```bash
|
|
24
|
+
# Show branch creation point
|
|
25
|
+
git merge-base main HEAD
|
|
26
|
+
|
|
27
|
+
# Show commits unique to this branch
|
|
28
|
+
git log --oneline main..HEAD
|
|
29
|
+
|
|
30
|
+
# Show files changed in this branch
|
|
31
|
+
git diff --name-only main...HEAD
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 3. **Branch Purpose Discovery**
|
|
35
|
+
Check for:
|
|
36
|
+
- **Tasks Directory**: Look for related PRD files in `/tasks/`
|
|
37
|
+
- **Development Journal**: Search for branch-related entries
|
|
38
|
+
- **Commit Messages**: Analyze recent commits for context
|
|
39
|
+
- **Pull Request**: Check if PR exists for this branch
|
|
40
|
+
|
|
41
|
+
### 4. **Work Context**
|
|
42
|
+
```bash
|
|
43
|
+
# Check for uncommitted work
|
|
44
|
+
git diff --stat
|
|
45
|
+
|
|
46
|
+
# Check for untracked files
|
|
47
|
+
git ls-files --others --exclude-standard
|
|
48
|
+
|
|
49
|
+
# Check for stashed changes
|
|
50
|
+
git stash list
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Output Format
|
|
54
|
+
|
|
55
|
+
Provide a structured summary:
|
|
56
|
+
|
|
57
|
+
### Branch Overview
|
|
58
|
+
- **Name**: Current branch name
|
|
59
|
+
- **Type**: feature/bugfix/hotfix/experiment
|
|
60
|
+
- **Base**: Branch point from main/develop
|
|
61
|
+
- **Age**: How long since branch creation
|
|
62
|
+
- **Status**: ahead/behind/up-to-date with base
|
|
63
|
+
|
|
64
|
+
### Current Work
|
|
65
|
+
- **Purpose**: What this branch is implementing
|
|
66
|
+
- **Progress**: Completed vs remaining work
|
|
67
|
+
- **Files Modified**: Key files changed
|
|
68
|
+
- **Tests**: Test status and coverage
|
|
69
|
+
|
|
70
|
+
### Context for Claude
|
|
71
|
+
- **Related PRD**: Link to requirements document
|
|
72
|
+
- **Dependencies**: Other branches or external dependencies
|
|
73
|
+
- **Blockers**: Known issues or waiting items
|
|
74
|
+
- **Next Steps**: Immediate tasks to continue
|
|
75
|
+
|
|
76
|
+
## Example Response
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
🌿 **Branch Context: feature/python-support**
|
|
80
|
+
|
|
81
|
+
**Overview:**
|
|
82
|
+
- Type: Feature branch
|
|
83
|
+
- Created: 3 days ago from main
|
|
84
|
+
- Status: 15 commits ahead of main
|
|
85
|
+
- Purpose: Add comprehensive Python project support to Chiron
|
|
86
|
+
|
|
87
|
+
**Current State:**
|
|
88
|
+
- 📁 Files changed: 25 files (mostly new Python templates)
|
|
89
|
+
- ✅ Tests: 41 examples, all passing
|
|
90
|
+
- 📝 Documentation: README and CHANGELOG updated
|
|
91
|
+
- 🚀 Status: Ready for merge
|
|
92
|
+
|
|
93
|
+
**Work Completed:**
|
|
94
|
+
- ✅ Python project detection (Django, FastAPI, Flask)
|
|
95
|
+
- ✅ ProjectConfig class for language abstraction
|
|
96
|
+
- ✅ Python workflow templates created
|
|
97
|
+
- ✅ Comprehensive test coverage added
|
|
98
|
+
|
|
99
|
+
**Context for Claude:**
|
|
100
|
+
- PRD: Located at tasks/prd-python-support.md
|
|
101
|
+
- Dependencies: None
|
|
102
|
+
- Blockers: None
|
|
103
|
+
- Next: Final review and merge to main
|
|
104
|
+
|
|
105
|
+
**Recommended Actions:**
|
|
106
|
+
1. Run final test suite
|
|
107
|
+
2. Update version number for release
|
|
108
|
+
3. Create pull request for review
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Command Variations
|
|
112
|
+
|
|
113
|
+
### Quick Branch Info
|
|
114
|
+
```bash
|
|
115
|
+
# Just the essentials
|
|
116
|
+
git branch --show-current && git status --short && git log --oneline -3
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Detailed Branch Analysis
|
|
120
|
+
```bash
|
|
121
|
+
# Comprehensive branch analysis
|
|
122
|
+
git log --graph --oneline --all -10
|
|
123
|
+
git diff --stat main...HEAD
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Branch Comparison
|
|
127
|
+
```bash
|
|
128
|
+
# Compare with main branch
|
|
129
|
+
git log --left-right --graph --cherry-pick --oneline main...HEAD
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Integration with Other Commands
|
|
133
|
+
|
|
134
|
+
### Use with Quickstart
|
|
135
|
+
- Automatically called when starting work session
|
|
136
|
+
- Provides branch context before task planning
|
|
137
|
+
|
|
138
|
+
### Use with Catchup
|
|
139
|
+
- Shows branch progress in relation to project goals
|
|
140
|
+
- Identifies if branch work aligns with current priorities
|
|
141
|
+
|
|
142
|
+
### Use before PRs
|
|
143
|
+
- Ensures all branch work is documented
|
|
144
|
+
- Confirms branch is ready for review
|
|
145
|
+
|
|
146
|
+
## Tips for Effective Branch Tracking
|
|
147
|
+
|
|
148
|
+
### Branch Naming
|
|
149
|
+
- Use prefixes: `feature/`, `bugfix/`, `hotfix/`, `experiment/`
|
|
150
|
+
- Include ticket numbers: `feature/PROJ-123-user-auth`
|
|
151
|
+
- Be descriptive: `feature/python-project-support`
|
|
152
|
+
|
|
153
|
+
### Commit Messages
|
|
154
|
+
- Reference related issues or PRDs
|
|
155
|
+
- Use conventional commits format
|
|
156
|
+
- Include context for future sessions
|
|
157
|
+
|
|
158
|
+
### Documentation
|
|
159
|
+
- Update journal when creating branches
|
|
160
|
+
- Link branches to PRDs or task lists
|
|
161
|
+
- Note collaboration context
|
|
162
|
+
|
|
163
|
+
### Session Continuity
|
|
164
|
+
- Run this command at session start
|
|
165
|
+
- Update when switching branches
|
|
166
|
+
- Use before major commits or pushes
|
|
167
|
+
|
|
168
|
+
## Automation Opportunities
|
|
169
|
+
|
|
170
|
+
Consider adding git hooks to:
|
|
171
|
+
- Auto-update journal on branch creation
|
|
172
|
+
- Prompt for branch purpose on first commit
|
|
173
|
+
- Remind about documentation updates
|
|
174
|
+
- Check for related PRD files
|
|
175
|
+
|
|
176
|
+
This command ensures Claude always has full context about your current branch and work progress, making sessions more productive and reducing ramp-up time.
|
|
@@ -22,7 +22,12 @@ Use this when the user asks "catchup", "where are we", or wants a project status
|
|
|
22
22
|
git log --oneline -5
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
4. **
|
|
25
|
+
4. **Get Branch Context**
|
|
26
|
+
- Run `/branch-context` command for detailed branch information
|
|
27
|
+
- Check branch purpose and progress
|
|
28
|
+
- Review commits unique to this branch
|
|
29
|
+
|
|
30
|
+
5. **Test Status**
|
|
26
31
|
```bash
|
|
27
32
|
bin/rspec --format progress | tail -5
|
|
28
33
|
```
|
|
@@ -15,16 +15,21 @@ Use this command to quickly get up to speed with the current project state.
|
|
|
15
15
|
git branch --show-current
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
3. **
|
|
18
|
+
3. **Get Branch Context**
|
|
19
|
+
- Run `/branch-context` command if not on main branch
|
|
20
|
+
- Understand current branch purpose and progress
|
|
21
|
+
- Check for any uncommitted work or stashes
|
|
22
|
+
|
|
23
|
+
4. **Review Recent Work**
|
|
19
24
|
- READ: docs/development_journal.md (last 3 entries)
|
|
20
25
|
- Check for active tasks in /tasks/ directory
|
|
21
26
|
|
|
22
|
-
|
|
27
|
+
5. **Quick Test Status**
|
|
23
28
|
```bash
|
|
24
29
|
bin/rspec --fail-fast
|
|
25
30
|
```
|
|
26
31
|
|
|
27
|
-
|
|
32
|
+
6. **Check Code Quality**
|
|
28
33
|
```bash
|
|
29
34
|
bin/rubocop --format simple | tail -20
|
|
30
35
|
```
|