Files
settled-reach/CLAUDE.md
T
2026-02-24 12:41:43 +01:00

3.9 KiB

The Settled Reach

A top-down immersive sim — occlusion-based detective game with combat elements, set in an original science fiction universe. Single-character perspective, asymmetric information as core mechanic, Rimworld-style storyteller. Godot 4 client + Rust/bevy_ecs simulation server via subprocess/IPC.

Official Title: The Settled Reach Repository name: settled-reach Version source of truth: project.yaml (root version field, scheme: 0.1.{sprint_number})

Project Structure

client/               # Godot 4 client
server/               # Rust/bevy_ecs simulation server
tooling/              # Build tools, scripts, asset pipelines
tests/                # Integration and end-to-end tests
docs/                 # Architecture, design, briefings, sprints, workshops
db/                   # Schema + connector scripts (ticket CLI, SQLite, Qdrant)
.claude/              # Agents, skills, rules
decisions/            # Decision domain files (D-NNN confirmed, Q-NNN open, R-NNN rejected)

Full annotated tree: .claude/rules/project-structure.md

DevOps

See docs/DEVOPS.md for build, test, lint, and CI procedures. All development operations go through the top-level Makefile — run make for a summary of targets.

Agent Instructions

Worktree boundaries

This project uses git worktrees in a shared parent directory (settled-reach/). Each team branch (server, client, copy, audio, visual, ci) has its own worktree. The worktree root IS the git root.

  • All work must remain within the git root unless explicitly instructed otherwise.
  • All file paths are relative to the worktree root (e.g. server/src/bridge/types.rs).
  • Do not navigate to or access sibling worktrees (../client/, ../copy/, etc.) unless explicitly instructed.
  • Exception — stale git lock files: Worktree index locks live in the shared .git directory (e.g. main/.git/worktrees/copy/index.lock). If a git command fails with index.lock: File exists, you may remove the lock file for your own worktree only. Never touch lock files belonging to other worktrees.

Database

The ticketing database (settledreach.db) lives in the parent directory shared across all worktrees — it is not tracked in git. A backup is committed to docs/backups/settledreach.db.backup via main only.

Before starting work

  1. Read your sprint briefing at docs/sprints/sprint-N/{team}.md for current tasks
  2. Use db/connectors/ticket show <id> for full ticket details
  3. Read the relevant decisions/*.md domain file(s) referenced in the briefing
  4. Background context: docs/briefings/{your-name}.md, docs/discussions/

CLI tools

Prefer CLI wrappers over raw SQL. Never use the sqlite3 CLI — it crashes in Claude Code (std::bad_alloc). Use the wrapper scripts instead.

Tool Command Full reference
Tickets db/connectors/ticket list, show, create, assign /ticket skill
Sprints db/connectors/sprint status, start-work, prepare /sprint-start skill
SQL queries db/connectors/sqlite-query "SELECT ..."
SQL writes db/connectors/sqlite-exec "UPDATE ..."
Doc search db/connectors/qdrant-search "query" /docs-search skill
Doc index db/connectors/qdrant-index path/to/file.md /docs-search skill

File conventions

  • Decisions: domain files in decisions/ (see decisions/README.md for index)
  • Decision IDs: D-NNN (confirmed), Q-NNN (open questions), R-NNN (rejected)
  • Diagrams: .d2 source + .png renders in docs/diagrams/{category}/. Create or update diagrams via /d2-diagram when D-records are added or modified.
  • Discussion rounds: numbered sequentially, archived to docs/discussions/ when complete
  • Briefings: one per agent, updated after decision-producing rounds
  • Tickets: managed via db/connectors/ticket CLI or /ticket skill