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>
85 lines
2.6 KiB
Markdown
85 lines
2.6 KiB
Markdown
# 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
|
|
|
|
1. Choose the appropriate domain file
|
|
2. Assign the next available ID in sequence
|
|
3. Use this format:
|
|
|
|
```markdown
|
|
### 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"
|
|
```
|
|
|
|
4. Run `make decisions-sync` to update the SQLite index
|
|
|
|
## Querying Decisions
|
|
|
|
### Via CLI (preferred)
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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)
|
|
|
|
```bash
|
|
tooling/db/qdrant-search "asymmetric information design"
|
|
```
|
|
|
|
## Superseding a Decision
|
|
|
|
When a decision is replaced:
|
|
|
|
1. Add `- **Status:** Superseded by D-NNN` to the original
|
|
2. Reference the original in the new decision's rationale
|
|
3. Run `make decisions-sync`
|