Files
settled-reach/whatsinagame/templates/DEVOPS.md
T
jpmschweitzerandClaude Opus 4.6 dd75203d11 refactor(process): replace persistent team worktrees with ephemeral sprint branches
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>
2026-04-05 00:33:02 +02:00

3.0 KiB

DevOps

Build, test, lint, and CI procedures for {Project Name}.

Quick Start

make setup          # Initialize dev environment
make                # Show all available targets

Database

The project uses SQLite for ticketing and decision tracking.

Initialize

tooling/db/sqlite-init

Query

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

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

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:

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:

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:

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

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

# 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.