tidaldb/.sdlc/tools/dev-driver/README.md
jordan 5ceef74f3b chore: bootstrap SDLC state machine for tidalDB
- Initialize .sdlc/ with config, guidance, and state machine
- Register M0-M8 as released milestones (full engine track history)
- Seed M9 (Community Sync & Revocation) and M10 (Governance & Agent Rights) with features
- Seed product milestones P0-P4 and PG1 gate with features from existing planning docs
- Add Team section to AGENTS.md (tidal-engineer, tidal-visionary, tidal-researcher, tidal-storyteller)
- Add knowledge-librarian agent for .sdlc/knowledge/ curation
- Gitignore .sdlc/telemetry.redb (volatile binary state)
- Add .ai/ scaffold (project knowledge index)
2026-03-03 00:41:41 -07:00

170 lines
4.4 KiB
Markdown

# dev-driver
A stock sdlc tool that reads project state, finds the single most important next
development action, dispatches it asynchronously, and exits. Paired with a recurring
orchestrator action (every 4 hours), it makes your sdlc project self-advancing.
---
## What it does
On each invocation, dev-driver applies a 5-level priority waterfall and takes exactly one action:
1. **Flight lock** — if a previous dispatch is still in flight (< 2h), do nothing
2. **Quality check** if `quality-check` reports failures, do nothing (fix quality first)
3. **Feature advancement** if any feature has an active directive, advance it one step
4. **Wave start** if a milestone has all features PLANNED/READY, start the wave
5. **Idle** nothing actionable, exit cleanly
One action per tick. The 4-hour recurrence IS the iteration rhythm.
---
## Default action recipe
Create this action once in the sdlc UI or via CLI:
```
Label: dev-driver
Tool: dev-driver
Input: {}
Recurrence: 14400 (4 hours in seconds)
```
Then run `sdlc ui --run-actions` to enable the orchestrator.
---
## Priority waterfall (detail)
### Level 1: Flight lock
Reads `.sdlc/.dev-driver.lock`. If the lock exists and is less than 2 hours old,
exits immediately with `{ action: "waiting", lock_age_mins: N }`.
This prevents double-dispatch when a previous Claude agent is still running.
### Level 2: Quality check
Runs the `quality-check` tool. If any checks fail, exits with:
```json
{ "action": "quality_failing", "failed_checks": ["test", "lint"] }
```
Fix the failing checks before dev-driver will advance features.
### Level 3: Feature advancement
Finds features in `implementation`, `review`, `audit`, or `qa` phase with a
pending directive. Picks the first one alphabetically. Dispatches:
```bash
claude --print "/sdlc-next <slug>"
```
**This is `/sdlc-next` — one step only.** The 4-hour recurrence advances the feature
step by step over time. This is intentional: it keeps you in control and lets you
course-correct between steps.
Returns:
```json
{ "action": "feature_advanced", "slug": "my-feature", "phase": "implementation", "directive": "/sdlc-next my-feature" }
```
### Level 4: Wave start
If no features have active directives but a milestone has all features in PLANNED or READY
phase, starts the next wave:
```bash
claude --print "/sdlc-run-wave <milestone>"
```
Returns:
```json
{ "action": "wave_started", "milestone": "v21-dev-driver" }
```
### Level 5: Idle
No actionable work found. Returns:
```json
{ "action": "idle", "reason": "no actionable work found" }
```
---
## How to skip a feature
If you don't want dev-driver to autonomously advance a specific feature, add a task
with `skip:autonomous` in the title:
```bash
sdlc task add <slug> --title "skip:autonomous: needs human review before proceeding"
```
Dev-driver will exclude this feature from Level 3 selection until the task is removed
or marked done. You retain full control over which features advance autonomously.
---
## One step, not full run
Dev-driver dispatches `/sdlc-next <slug>`, NOT `/sdlc-run <slug>`.
`/sdlc-next` executes exactly one directive (write a spec, approve a design, implement
a task, etc.) and exits. The next tick, dev-driver will pick the same feature again
and advance it one more step.
This means:
- Each tick = one atomic state machine step
- You can review after each step in the Actions page
- No surprise full-feature runs that take hours
---
## Lock file
Path: `.sdlc/.dev-driver.lock`
TTL: 2 hours
```json
{
"started_at": "2026-03-02T04:00:00.000Z",
"action": "feature_advanced",
"slug": "my-feature",
"pid": 12345
}
```
The lock is written before each dispatch and cleared automatically after 2 hours.
You can delete it manually if you need to run dev-driver before the TTL expires.
---
## Output reference
All five possible outputs:
```json
// Level 1 (lock)
{ "action": "waiting", "lock_age_mins": 45 }
// Level 1 (active run)
{ "action": "waiting", "reason": "agent run in progress" }
// Level 2
{ "action": "quality_failing", "failed_checks": ["test", "clippy"] }
// Level 3
{ "action": "feature_advanced", "slug": "my-feature", "phase": "implementation", "directive": "/sdlc-next my-feature" }
// Level 4
{ "action": "wave_started", "milestone": "v21-dev-driver" }
// Level 5
{ "action": "idle", "reason": "no actionable work found" }
```
All wrapped in: `{ "ok": true, "data": { ... }, "duration_ms": N }`