Remove the db/connectors → tooling/db/ symlink added in Sprint 21 (#274) and migrate all references to use tooling/db/ directly. - Delete tracked symlink from db/connectors - Remove duplicate db/connectors/* permission patterns from settings - Update project-structure.md to reflect removal - Move whatsinagame/static/db/connectors/ to whatsinagame/static/tooling/db/ - Update 20 whatsinagame template, skill, and test files - Update comment references in client/tests/test_anti_tedium.gd - Historical docs (old sprint briefings, changelog, discussions) left as-is Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Decision Records
This directory contains the project's decision records, organized by domain. Decisions are the source of truth for all architectural, design, scope, and process choices.
Domain Files
| File | Domain | Contents |
|---|---|---|
architecture.md |
Architecture | Technical foundation — how we build, tools, patterns, infrastructure |
scope.md |
Scope | Project concept, target audience, platform, feature boundaries |
process.md |
Process | Team workflow, communication, development process |
questions.md |
Open Questions | Unresolved questions requiring team discussion |
rejected.md |
Rejected | Options considered and rejected, with rationale |
Decision Types
- D-NNN — Confirmed decisions (active or superseded)
- Q-NNN — Open questions awaiting resolution
- R-NNN — Rejected alternatives (kept for historical context)
Adding a Decision
- Choose the appropriate domain file
- Assign the next available ID in sequence
- Use this format:
### D-NNN: Decision title
- **Date:** YYYY-MM-DD
- **Decision:** What was decided
- **Rationale:** Why this option was chosen
- **Raised by:** Who proposed or surfaced the question
- **Dissent:** Any disagreement, or "None"
- Run
make decisions-syncto update the SQLite index
Querying Decisions
Via CLI (preferred)
# List all active confirmed decisions
make decisions-active
# Find decisions without associated tickets
make decisions-orphan
# Check decision-to-ticket coverage
make decisions-coverage
Via SQLite wrapper
# All active decisions
tooling/db/sqlite-query "SELECT id, domain, title FROM decisions WHERE status='active' AND type='confirmed' ORDER BY domain, id"
# Decisions in a specific domain
tooling/db/sqlite-query "SELECT id, title FROM decisions WHERE domain='architecture' AND status='active'"
# Search by keyword
tooling/db/sqlite-query "SELECT id, domain, title FROM decisions WHERE title LIKE '%keyword%' OR decision LIKE '%keyword%'"
# Decisions linked to a specific ticket
tooling/db/sqlite-query "SELECT d.id, d.title FROM decisions d JOIN tickets t ON d.id = t.decision_ref WHERE t.id = 42"
# Open questions
tooling/db/sqlite-query "SELECT id, title FROM decisions WHERE type='question' AND status='active'"
Via Qdrant (semantic search)
tooling/db/qdrant-search "asymmetric information design"
Superseding a Decision
When a decision is replaced:
- Add
- **Status:** Superseded by D-NNNto the original - Reference the original in the new decision's rationale
- Run
make decisions-sync