Persistent worktrees (server, client, copy, audio, visual, ci, planning,
maintenance) caused agents crossing boundaries, stuck agents leaving
uncommitted work, and index.lock collisions. Replaced with ephemeral
sprint branches (sprint-{N}/{team}) and worktrees created on demand.
Changes:
- New start-sprint script replaces start-session (dynamic tabs per active team)
- Sprint teardown integrated into sprint-start skill (A1c step)
- SR_DB_PATH env var for database access from any directory
- CLAUDE.md team boundaries rewritten (scope-based, not directory-based)
- Agent Rule 0 updated to team scope dirs instead of worktree isolation
- PR review uses git show instead of cross-directory reads
- Briefing template updated for sprint-{N}/{team} branch naming
- Deleted worktree-update skill (obsolete)
- Removed WORKTREE_TEAM env var and cross-directory Read permissions
- All 8 persistent worktrees removed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
118 lines
3.0 KiB
Markdown
118 lines
3.0 KiB
Markdown
# DevOps
|
|
|
|
Build, test, lint, and CI procedures for {Project Name}.
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
make setup # Initialize dev environment
|
|
make # Show all available targets
|
|
```
|
|
|
|
## Database
|
|
|
|
The project uses SQLite for ticketing and decision tracking.
|
|
|
|
### Initialize
|
|
|
|
```bash
|
|
tooling/db/sqlite-init
|
|
```
|
|
|
|
### Query
|
|
|
|
```bash
|
|
tooling/db/sqlite-query "SELECT * FROM tickets WHERE status='in_progress'"
|
|
tooling/db/sqlite-exec "UPDATE tickets SET status='done' WHERE id=1"
|
|
```
|
|
|
|
**Never use the `sqlite3` CLI** — it crashes in Claude Code (std::bad_alloc). Use the wrapper scripts.
|
|
|
|
### Ticket CLI
|
|
|
|
```bash
|
|
tooling/db/ticket list [--status S] [--sprint N] [--team T]
|
|
tooling/db/ticket show <id>
|
|
tooling/db/ticket create --title "Title" --team T --priority P
|
|
tooling/db/ticket assign <id> --agent name
|
|
```
|
|
|
|
### Sprint CLI
|
|
|
|
```bash
|
|
tooling/db/sprint status # Current sprint progress
|
|
tooling/db/sprint status --team T # Team-scoped view
|
|
tooling/db/sprint start-work [--team T] # Full context dump for starting work
|
|
tooling/db/sprint prepare # Prepare next sprint
|
|
tooling/db/sprint start # Activate a planned sprint
|
|
tooling/db/sprint stop # Complete an active sprint
|
|
```
|
|
|
|
## Decision Tracking
|
|
|
|
Decisions live in `decisions/*.md` domain files and sync to SQLite:
|
|
|
|
```bash
|
|
make decisions-sync # Parse decisions/*.md into SQLite
|
|
make decisions-coverage # Decision-to-ticket coverage report
|
|
make decisions-active # List all active confirmed decisions
|
|
make decisions-orphan # Decisions without associated tickets
|
|
```
|
|
|
|
## Document Search (optional)
|
|
|
|
If Qdrant + Ollama are configured for semantic search:
|
|
|
|
```bash
|
|
tooling/db/qdrant-health # Check service status
|
|
tooling/db/qdrant-search "query text" # Semantic search
|
|
tooling/db/qdrant-index path/to/doc.md # Index a document
|
|
tooling/db/qdrant-count # Collection stats
|
|
```
|
|
|
|
## Git Hooks
|
|
|
|
Install hooks:
|
|
|
|
```bash
|
|
make setup-hooks
|
|
```
|
|
|
|
Hook directory: `.config/hooks/`
|
|
|
|
The pre-commit hook runs project-specific validation checks. Add new checks by editing `.config/hooks/pre-commit` and adding `run_check` calls.
|
|
|
|
## Pre-PR Checklist
|
|
|
|
```bash
|
|
make pre-pr
|
|
```
|
|
|
|
This runs:
|
|
1. Decision sync (ensures SQLite index is current)
|
|
2. {Add project-specific checks as needed}
|
|
|
|
## Sprint Branch Workflow
|
|
|
|
Teams work on ephemeral sprint branches (`sprint-{N}/{team}`). The `start-sprint`
|
|
script creates worktrees under `.sprint/` for parallel team work:
|
|
|
|
```
|
|
{parent}/
|
|
main/ # Permanent — integration branch
|
|
.sprint/sprint-{N}/{team}/ # Ephemeral — created per sprint, deleted after close
|
|
{db_name} # Shared ticketing database
|
|
```
|
|
|
|
### Branch management
|
|
|
|
```bash
|
|
# Start sprint session (creates worktrees + terminal tabs)
|
|
./start-sprint [sprint-number]
|
|
|
|
# Clean up after sprint close
|
|
.claude/skills/sprint-start/scripts/sprint-teardown.sh {N}
|
|
```
|
|
|
|
**Protected branches** (never delete): `main`.
|