mirror of
https://github.com/CyberMind-FR/secubox-deb.git
synced 2026-07-29 13:59:40 +00:00
Extract reusable development methodology from 88+ sessions into portable document: - Project tracking structure (.claude/ files: WIP, TODO, HISTORY, PATTERNS) - Session-based development workflow with numbered sessions - Migration patterns (Shell/UCI → FastAPI/TOML) - Performance patterns for embedded systems (background cache, parallel exec) - Compliance framework with checklists - Templates for new projects Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
763 lines
14 KiB
Markdown
763 lines
14 KiB
Markdown
# SecuBox-Dev Methodology
|
|
*A reusable development methodology for AI-assisted embedded system projects*
|
|
|
|
**Version:** 1.0.0
|
|
**Extracted from:** SecuBox-DEB Project (Session 88)
|
|
**Author:** CyberMind / Gérald Kerma
|
|
**License:** MIT (methodology only)
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
SecuBox-Dev is a structured methodology for developing embedded system software with AI coding assistants. It provides:
|
|
|
|
1. **Tracking Files** — Structured project state management
|
|
2. **Session-Based Development** — Isolated work units with clear documentation
|
|
3. **Migration Patterns** — Systematic code porting with traceability
|
|
4. **Compliance Framework** — Quality gates and verification
|
|
5. **Performance Patterns** — Embedded-optimized code patterns
|
|
|
|
This methodology emerged from 88+ sessions of AI-assisted development migrating a complex embedded security platform from OpenWrt to Debian.
|
|
|
|
---
|
|
|
|
## Part 1: Project Tracking Structure
|
|
|
|
### Directory: `.claude/`
|
|
|
|
Central project state directory. Read on session start.
|
|
|
|
```
|
|
.claude/
|
|
├── WIP.md ← Current work in progress (READ FIRST)
|
|
├── TODO.md ← Backlog organized by phases
|
|
├── HISTORY.md ← Change log with root cause analysis
|
|
├── PATTERNS.md ← Code patterns with before/after examples
|
|
├── MODULE-COMPLIANCE.md ← Quality requirements checklist
|
|
├── NOTES.md ← Temporary observations, investigation notes
|
|
└── skills/ ← Domain-specific coding guides
|
|
```
|
|
|
|
### File: `WIP.md` (Work In Progress)
|
|
|
|
**Purpose:** What's being worked on RIGHT NOW. First file to read.
|
|
|
|
**Format:**
|
|
```markdown
|
|
# WIP — Work In Progress
|
|
*Mis à jour : YYYY-MM-DD (Session XX)*
|
|
|
|
---
|
|
|
|
## ⬜ Next Up — [Feature Name]
|
|
|
|
**Goal:** One-sentence description
|
|
|
|
**Approach:**
|
|
1. Step one
|
|
2. Step two
|
|
3. Step three
|
|
|
|
---
|
|
|
|
## ✅ Complété (Session XX) — [Feature Name]
|
|
|
|
**Problem:** What was broken
|
|
|
|
**Root Cause:**
|
|
- Technical reason 1
|
|
- Technical reason 2
|
|
|
|
**Fix:**
|
|
- What was changed
|
|
|
|
**Files Modified:**
|
|
- `path/to/file.py` — Description of change
|
|
|
|
**Result:**
|
|
- Observable outcome
|
|
```
|
|
|
|
**Key Rules:**
|
|
- Only ONE item in "Next Up" at a time
|
|
- Completed items move to "Complété" with session number
|
|
- Include root cause analysis for every fix
|
|
- List all modified files
|
|
|
|
### File: `TODO.md` (Backlog)
|
|
|
|
**Purpose:** Prioritized work organized by phases.
|
|
|
|
**Format:**
|
|
```markdown
|
|
# TODO — Backlog
|
|
|
|
---
|
|
|
|
## ✅ Phase 1 — [Phase Name] (TERMINÉ)
|
|
|
|
- [x] Task completed
|
|
- [x] Another completed task
|
|
|
|
## 🔄 Phase 2 — [Phase Name] (EN COURS)
|
|
|
|
- [x] Completed task
|
|
- [ ] Pending task
|
|
- [ ] Another pending task
|
|
|
|
## ⬜ Phase 3 — [Phase Name] (À VENIR)
|
|
|
|
- [ ] Future task
|
|
```
|
|
|
|
**Status Symbols:**
|
|
| Symbol | Meaning |
|
|
|--------|---------|
|
|
| ✅ | Phase complete |
|
|
| 🔄 | Phase in progress |
|
|
| ⬜ | Phase not started |
|
|
| ⏸ | Phase blocked |
|
|
|
|
### File: `HISTORY.md` (Change Log)
|
|
|
|
**Purpose:** Detailed change history with root cause analysis.
|
|
|
|
**Format:**
|
|
```markdown
|
|
# HISTORY — Change Log
|
|
|
|
---
|
|
|
|
## Session XX — [Feature/Fix Name]
|
|
*YYYY-MM-DD*
|
|
|
|
### Goal
|
|
What we set out to accomplish.
|
|
|
|
### Problem
|
|
Symptom observed by user.
|
|
|
|
### Investigation
|
|
1. First thing checked
|
|
2. Second thing checked
|
|
3. Discovery made
|
|
|
|
### Root Cause
|
|
Technical explanation of why the problem occurred.
|
|
|
|
### Fix
|
|
What was changed to resolve it.
|
|
|
|
### Files Changed
|
|
- `path/file.py` — What changed and why
|
|
- `path/other.py` — What changed and why
|
|
|
|
### Commits
|
|
- `abc1234` feat(module): Description
|
|
|
|
### Result
|
|
Observable outcome confirming fix worked.
|
|
```
|
|
|
|
**Key Rules:**
|
|
- Every entry has a Session number
|
|
- Root cause is REQUIRED (not just "fixed it")
|
|
- List exact files changed
|
|
- Include verification result
|
|
|
|
### File: `PATTERNS.md` (Code Patterns)
|
|
|
|
**Purpose:** Reusable code patterns with source → target examples.
|
|
|
|
**Format:**
|
|
```markdown
|
|
# PATTERNS — Code Reference
|
|
|
|
---
|
|
|
|
## Pattern N — [Pattern Name]
|
|
|
|
### When to Use
|
|
Describe the situation where this pattern applies.
|
|
|
|
### Source (Before)
|
|
```language
|
|
// Original code or legacy format
|
|
```
|
|
|
|
### Target (After)
|
|
```language
|
|
// Migrated/improved code
|
|
```
|
|
|
|
### Key Transformations
|
|
- Transformation 1
|
|
- Transformation 2
|
|
|
|
### Common Mistakes
|
|
- Don't do X because Y
|
|
```
|
|
|
|
### File: `MODULE-COMPLIANCE.md` (Quality Gates)
|
|
|
|
**Purpose:** Checklist that MUST pass before marking work complete.
|
|
|
|
**Format:**
|
|
```markdown
|
|
# MODULE-COMPLIANCE — Quality Requirements
|
|
|
|
---
|
|
|
|
## Checklist
|
|
|
|
### 1. Documentation
|
|
- [ ] README.md exists with all sections
|
|
- [ ] API endpoints documented
|
|
- [ ] Configuration documented
|
|
|
|
### 2. Testing
|
|
- [ ] Unit tests pass
|
|
- [ ] Integration tests pass
|
|
- [ ] Manual verification complete
|
|
|
|
### 3. Structure
|
|
- [ ] Directory structure matches template
|
|
- [ ] Required files present
|
|
- [ ] Naming conventions followed
|
|
|
|
### 4. Performance
|
|
- [ ] Response time < threshold
|
|
- [ ] Memory usage < limit
|
|
- [ ] No blocking operations in hot paths
|
|
```
|
|
|
|
---
|
|
|
|
## Part 2: Session-Based Development
|
|
|
|
### What is a Session?
|
|
|
|
A **session** is a bounded unit of work with:
|
|
- Single goal or closely related goals
|
|
- Clear start and end
|
|
- Documented changes
|
|
- Traceable commits
|
|
|
|
### Session Workflow
|
|
|
|
```
|
|
1. READ WIP.md → Identify current task
|
|
2. READ relevant files → Understand context
|
|
3. IMPLEMENT → Make changes
|
|
4. TEST → Verify changes work
|
|
5. UPDATE tracking files:
|
|
- Move task to "Complété" in WIP.md
|
|
- Add entry to HISTORY.md
|
|
- Update TODO.md phase status
|
|
6. COMMIT → With session reference
|
|
```
|
|
|
|
### Session Numbering
|
|
|
|
Sessions are numbered sequentially (S01, S02, ..., S88, etc.)
|
|
|
|
**In commit messages:**
|
|
```
|
|
feat(module): Add feature X (Session 42)
|
|
fix(api): Resolve 500 error on /status (Session 43)
|
|
```
|
|
|
|
**In HISTORY.md:**
|
|
```markdown
|
|
## Session 43 — API 500 Error Fix
|
|
```
|
|
|
|
### Session Documentation Template
|
|
|
|
```markdown
|
|
## Session XX — [Title]
|
|
*YYYY-MM-DD*
|
|
|
|
### Goal
|
|
[One sentence]
|
|
|
|
### Changes
|
|
1. [Change 1]
|
|
2. [Change 2]
|
|
|
|
### Files
|
|
- `path/file.py` — [What changed]
|
|
|
|
### Testing
|
|
- [How verified]
|
|
|
|
### Result
|
|
- [Observable outcome]
|
|
```
|
|
|
|
---
|
|
|
|
## Part 3: Migration Patterns (Legacy → Modern)
|
|
|
|
### Pattern 1: Shell Script → Python API
|
|
|
|
**Source (Shell/UCI):**
|
|
```sh
|
|
#!/bin/sh
|
|
status() {
|
|
json_init
|
|
local running=0
|
|
pgrep service >/dev/null && running=1
|
|
json_add_boolean "running" "$running"
|
|
json_print
|
|
}
|
|
```
|
|
|
|
**Target (FastAPI):**
|
|
```python
|
|
from fastapi import APIRouter, Depends
|
|
import subprocess
|
|
|
|
router = APIRouter()
|
|
|
|
@router.get("/status")
|
|
async def status(user=Depends(require_auth)):
|
|
running = subprocess.run(
|
|
["pgrep", "service"], capture_output=True
|
|
).returncode == 0
|
|
return {"running": running}
|
|
```
|
|
|
|
### Pattern 2: Config File → Structured API
|
|
|
|
**Source (UCI config):**
|
|
```
|
|
config service 'main'
|
|
option enabled '1'
|
|
option port '8080'
|
|
```
|
|
|
|
**Target (TOML + Pydantic):**
|
|
```python
|
|
# config.toml
|
|
[service]
|
|
enabled = true
|
|
port = 8080
|
|
|
|
# Python
|
|
from pydantic import BaseModel
|
|
import toml
|
|
|
|
class ServiceConfig(BaseModel):
|
|
enabled: bool = True
|
|
port: int = 8080
|
|
|
|
def get_config() -> ServiceConfig:
|
|
data = toml.load("/etc/app/config.toml")
|
|
return ServiceConfig(**data.get("service", {}))
|
|
```
|
|
|
|
### Pattern 3: Action Endpoint (POST)
|
|
|
|
**Source (Shell):**
|
|
```sh
|
|
restart() {
|
|
/etc/init.d/service restart
|
|
json_init
|
|
json_add_boolean "success" "1"
|
|
json_print
|
|
}
|
|
```
|
|
|
|
**Target (FastAPI):**
|
|
```python
|
|
@router.post("/restart")
|
|
async def restart(user=Depends(require_auth)):
|
|
result = subprocess.run(
|
|
["systemctl", "restart", "service"],
|
|
capture_output=True, text=True
|
|
)
|
|
return {
|
|
"success": result.returncode == 0,
|
|
"message": result.stderr if result.returncode != 0 else "OK"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Part 4: Performance Patterns (Embedded)
|
|
|
|
### Pattern: Background Cache Refresh
|
|
|
|
**Problem:** Stats endpoints block on expensive operations.
|
|
|
|
**Solution:**
|
|
```python
|
|
import asyncio
|
|
import json
|
|
from pathlib import Path
|
|
|
|
CACHE_FILE = Path("/var/cache/app/stats.json")
|
|
_cache: dict = {}
|
|
|
|
async def _refresh_cache():
|
|
"""Background task: refresh every 60s."""
|
|
while True:
|
|
try:
|
|
data = await _compute_expensive_stats()
|
|
CACHE_FILE.write_text(json.dumps(data))
|
|
_cache.update(data)
|
|
except Exception as e:
|
|
log.error(f"cache refresh: {e}")
|
|
await asyncio.sleep(60)
|
|
|
|
@app.on_event("startup")
|
|
async def startup():
|
|
asyncio.create_task(_refresh_cache())
|
|
|
|
@router.get("/stats")
|
|
async def stats():
|
|
return _cache or {"error": "not ready"}
|
|
```
|
|
|
|
**When to Use:**
|
|
- Dashboard statistics
|
|
- Log aggregation
|
|
- Metrics collection
|
|
- Anything reading files/subprocesses
|
|
|
|
**When NOT to Use:**
|
|
- Real-time actions (restart, ban, apply)
|
|
- User-initiated operations
|
|
|
|
### Pattern: Parallel Subprocess Execution
|
|
|
|
**Problem:** Sequential CLI calls are slow.
|
|
|
|
**Solution:**
|
|
```python
|
|
async def run_cmd(cmd: str) -> str:
|
|
proc = await asyncio.create_subprocess_shell(
|
|
cmd, stdout=asyncio.subprocess.PIPE
|
|
)
|
|
stdout, _ = await proc.communicate()
|
|
return stdout.decode()
|
|
|
|
async def get_all_status():
|
|
# Parallel execution
|
|
results = await asyncio.gather(
|
|
run_cmd("cmd1"),
|
|
run_cmd("cmd2"),
|
|
run_cmd("cmd3"),
|
|
)
|
|
return {"r1": results[0], "r2": results[1], "r3": results[2]}
|
|
```
|
|
|
|
### Pattern: Device-Specific Limits
|
|
|
|
```python
|
|
DEVICE_PROFILES = {
|
|
"low-memory": { # 1GB RAM
|
|
"max_entries": 1000,
|
|
"cache_ttl": 120,
|
|
},
|
|
"standard": { # 4-8GB RAM
|
|
"max_entries": 10000,
|
|
"cache_ttl": 60,
|
|
},
|
|
}
|
|
|
|
def get_profile() -> dict:
|
|
board = os.environ.get("DEVICE_PROFILE", "standard")
|
|
return DEVICE_PROFILES.get(board, DEVICE_PROFILES["standard"])
|
|
```
|
|
|
|
---
|
|
|
|
## Part 5: Compliance Verification
|
|
|
|
### Pre-Completion Checklist
|
|
|
|
Before marking ANY task complete:
|
|
|
|
```
|
|
□ Code compiles/runs without errors
|
|
□ Tests pass (unit + integration)
|
|
□ Manual verification performed
|
|
□ README updated (if API/config changed)
|
|
□ WIP.md updated (moved to Complété)
|
|
□ HISTORY.md entry added with root cause
|
|
□ Commit made with session reference
|
|
```
|
|
|
|
### Module Completion Checklist
|
|
|
|
```
|
|
□ Directory structure matches template
|
|
□ Required endpoints implemented
|
|
□ Authentication enforced
|
|
□ Health endpoint responds
|
|
□ Configuration documented
|
|
□ README complete with examples
|
|
□ No blocking operations in GET endpoints
|
|
□ Memory usage verified
|
|
```
|
|
|
|
### Debugging Template
|
|
|
|
When investigating issues:
|
|
|
|
```markdown
|
|
## Investigation: [Issue Title]
|
|
|
|
### Symptom
|
|
What the user observed.
|
|
|
|
### Hypothesis 1
|
|
What I think might be wrong.
|
|
|
|
### Test 1
|
|
How I tested it.
|
|
|
|
### Result 1
|
|
What I found.
|
|
|
|
### Hypothesis 2
|
|
...
|
|
|
|
### Root Cause
|
|
The actual reason.
|
|
|
|
### Fix
|
|
What I changed.
|
|
|
|
### Verification
|
|
How I confirmed it worked.
|
|
```
|
|
|
|
---
|
|
|
|
## Part 6: Quick Reference
|
|
|
|
### Status Symbols
|
|
|
|
| Symbol | Meaning |
|
|
|--------|---------|
|
|
| ✅ | Complete |
|
|
| 🔄 | In progress |
|
|
| ⬜ | Not started |
|
|
| ⏸ | Blocked |
|
|
| ❌ | Failed/Rejected |
|
|
|
|
### File Naming
|
|
|
|
- `WIP.md` — Work in Progress
|
|
- `TODO.md` — Backlog/Roadmap
|
|
- `HISTORY.md` — Change log
|
|
- `PATTERNS.md` — Code patterns
|
|
- `NOTES.md` — Investigation notes
|
|
- `MODULE-COMPLIANCE.md` — Quality checklist
|
|
|
|
### Session Commands (Git)
|
|
|
|
```bash
|
|
# View recent sessions
|
|
git log --oneline -20 | grep Session
|
|
|
|
# Find session commits
|
|
git log --grep="Session 42"
|
|
|
|
# Session summary
|
|
git log --since="2024-01-01" --pretty=format:"%s" | grep -E "^(feat|fix)" | head -20
|
|
```
|
|
|
|
### Tracking File Update Order
|
|
|
|
1. Make code changes
|
|
2. Test changes
|
|
3. Update `WIP.md` (move to Complété)
|
|
4. Add entry to `HISTORY.md`
|
|
5. Update `TODO.md` phase status
|
|
6. Commit all together
|
|
|
|
---
|
|
|
|
## Part 7: Applying to New Projects
|
|
|
|
### Step 1: Create `.claude/` Directory
|
|
|
|
```bash
|
|
mkdir -p .claude
|
|
touch .claude/{WIP,TODO,HISTORY,PATTERNS,NOTES}.md
|
|
```
|
|
|
|
### Step 2: Initialize Tracking Files
|
|
|
|
**WIP.md:**
|
|
```markdown
|
|
# WIP — Work In Progress
|
|
*Updated: YYYY-MM-DD (Session 1)*
|
|
|
|
---
|
|
|
|
## ⬜ Next Up — Initial Setup
|
|
|
|
**Goal:** Set up project structure
|
|
|
|
**Approach:**
|
|
1. Create directories
|
|
2. Add base files
|
|
3. Verify builds
|
|
```
|
|
|
|
**TODO.md:**
|
|
```markdown
|
|
# TODO — Backlog
|
|
|
|
## 🔄 Phase 1 — Setup (IN PROGRESS)
|
|
|
|
- [ ] Project structure
|
|
- [ ] Build system
|
|
- [ ] CI/CD
|
|
```
|
|
|
|
**HISTORY.md:**
|
|
```markdown
|
|
# HISTORY — Change Log
|
|
|
|
## Session 1 — Project Initialization
|
|
*YYYY-MM-DD*
|
|
|
|
### Goal
|
|
Initialize project with SecuBox-Dev methodology.
|
|
|
|
### Changes
|
|
- Created .claude/ tracking directory
|
|
- Added initial tracking files
|
|
|
|
### Result
|
|
Ready for development.
|
|
```
|
|
|
|
### Step 3: Add to .gitignore (Optional)
|
|
|
|
If you want tracking files to be local only:
|
|
```
|
|
# .gitignore
|
|
.claude/NOTES.md # Investigation notes
|
|
```
|
|
|
|
### Step 4: First Session
|
|
|
|
1. Define Phase 1 tasks in TODO.md
|
|
2. Add first task to WIP.md "Next Up"
|
|
3. Implement
|
|
4. Update tracking files
|
|
5. Commit with "Session 1" reference
|
|
|
|
---
|
|
|
|
## Appendix: Template Files
|
|
|
|
### Template: Session Entry
|
|
|
|
```markdown
|
|
## Session XX — [Title]
|
|
*YYYY-MM-DD*
|
|
|
|
### Goal
|
|
[One sentence goal]
|
|
|
|
### Problem
|
|
[What was broken, if applicable]
|
|
|
|
### Root Cause
|
|
[Technical reason, if applicable]
|
|
|
|
### Changes
|
|
1. [Change 1]
|
|
2. [Change 2]
|
|
|
|
### Files Modified
|
|
- `path/file.ext` — [What changed]
|
|
|
|
### Testing
|
|
- [How verified]
|
|
|
|
### Commits
|
|
- `hash` message
|
|
|
|
### Result
|
|
[Observable outcome]
|
|
```
|
|
|
|
### Template: Pattern Entry
|
|
|
|
```markdown
|
|
## Pattern N — [Name]
|
|
|
|
### When to Use
|
|
[Situation description]
|
|
|
|
### Source
|
|
```language
|
|
[Before code]
|
|
```
|
|
|
|
### Target
|
|
```language
|
|
[After code]
|
|
```
|
|
|
|
### Notes
|
|
- [Important consideration 1]
|
|
- [Important consideration 2]
|
|
```
|
|
|
|
### Template: README Module
|
|
|
|
```markdown
|
|
# [Module Name]
|
|
|
|
## Description
|
|
[What this module does]
|
|
|
|
## Features
|
|
- Feature 1
|
|
- Feature 2
|
|
|
|
## API Endpoints
|
|
|
|
| Method | Path | Description |
|
|
|--------|------|-------------|
|
|
| GET | /status | Get status |
|
|
| POST | /action | Perform action |
|
|
|
|
## Configuration
|
|
|
|
File: `/etc/app/module.toml`
|
|
|
|
```toml
|
|
[module]
|
|
enabled = true
|
|
```
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
apt install module-name
|
|
```
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
# Example command
|
|
curl http://localhost/api/module/status
|
|
```
|
|
```
|
|
|
|
---
|
|
|
|
*End of SecuBox-Dev Methodology*
|