chore(db): remove db/connectors backwards-compat symlink (#568)
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>
This commit is contained in:
@@ -17,7 +17,6 @@ docs/
|
|||||||
workshops/ # Workshop briefs and outputs
|
workshops/ # Workshop briefs and outputs
|
||||||
db/
|
db/
|
||||||
schema.sql # Database schema
|
schema.sql # Database schema
|
||||||
connectors/ # Symlink → tooling/db/ (backwards compat, remove after Sprint 22)
|
|
||||||
tooling/
|
tooling/
|
||||||
db/ # Connector scripts for SQLite, Qdrant, and audio
|
db/ # Connector scripts for SQLite, Qdrant, and audio
|
||||||
config.json # Endpoint configuration
|
config.json # Endpoint configuration
|
||||||
|
|||||||
@@ -42,23 +42,6 @@
|
|||||||
"Bash(tooling/db/audio-post *)",
|
"Bash(tooling/db/audio-post *)",
|
||||||
"Bash(tooling/db/audio-batch *)",
|
"Bash(tooling/db/audio-batch *)",
|
||||||
|
|
||||||
"Bash(db/connectors/ticket *)",
|
|
||||||
"Bash(db/connectors/sprint *)",
|
|
||||||
"Bash(db/connectors/sqlite-query *)",
|
|
||||||
"Bash(db/connectors/sqlite-exec *)",
|
|
||||||
"Bash(db/connectors/qdrant-search *)",
|
|
||||||
"Bash(db/connectors/qdrant-index *)",
|
|
||||||
"Bash(db/connectors/qdrant-health)",
|
|
||||||
"Bash(db/connectors/qdrant-count)",
|
|
||||||
"Bash(db/connectors/sqlite-init)",
|
|
||||||
"Bash(db/connectors/decisions-sync)",
|
|
||||||
"Bash(db/connectors/decision *)",
|
|
||||||
|
|
||||||
"Bash(db/connectors/audio-generate *)",
|
|
||||||
"Bash(db/connectors/audio-health)",
|
|
||||||
"Bash(db/connectors/audio-post *)",
|
|
||||||
"Bash(db/connectors/audio-batch *)",
|
|
||||||
|
|
||||||
"Bash(make *)",
|
"Bash(make *)",
|
||||||
"Bash(make)",
|
"Bash(make)",
|
||||||
|
|
||||||
|
|||||||
@@ -250,7 +250,7 @@ func test_gauntlet_ui_stays_hidden_after_multiple_snapshots() -> void:
|
|||||||
|
|
||||||
# -- GauntletHUD Feature Tests (#496) ----------------------------------------
|
# -- GauntletHUD Feature Tests (#496) ----------------------------------------
|
||||||
# Timer lifecycle, personal bests, room change, visibility.
|
# Timer lifecycle, personal bests, room change, visibility.
|
||||||
# Spec: sprint-9/client.md #496. Ticket: db/connectors/ticket show 496.
|
# Spec: sprint-9/client.md #496. Ticket: tooling/db/ticket show 496.
|
||||||
|
|
||||||
func test_format_time_zero() -> void:
|
func test_format_time_zero() -> void:
|
||||||
# Static utility: 0 seconds → "00:00"
|
# Static utility: 0 seconds → "00:00"
|
||||||
@@ -476,7 +476,7 @@ func test_gauntlet_snapshot_roundtrip_via_apply() -> void:
|
|||||||
|
|
||||||
# -- BugReportDialog Feature Tests (#495) ------------------------------------
|
# -- BugReportDialog Feature Tests (#495) ------------------------------------
|
||||||
# Pause/unpause lifecycle, wire guard, text render, state machine.
|
# Pause/unpause lifecycle, wire guard, text render, state machine.
|
||||||
# Spec: sprint-9/client.md #495. Ticket: db/connectors/ticket show 495.
|
# Spec: sprint-9/client.md #495. Ticket: tooling/db/ticket show 495.
|
||||||
|
|
||||||
func test_bug_report_sends_pause_on_open() -> void:
|
func test_bug_report_sends_pause_on_open() -> void:
|
||||||
# start_capture() must send Pause to the server.
|
# start_capture() must send Pause to the server.
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
../tooling/db
|
|
||||||
@@ -84,9 +84,9 @@ If the user chooses a theme, rename each agent file and adapt the personality to
|
|||||||
|
|
||||||
Copy static infrastructure files from the kit's `static/` directory:
|
Copy static infrastructure files from the kit's `static/` directory:
|
||||||
|
|
||||||
1. **Database**: Copy `static/db/schema.sql` and `static/db/connectors/` to the project's `db/` directory.
|
1. **Database**: Copy `static/db/schema.sql` and `static/tooling/db/` to the project's `db/` directory.
|
||||||
2. **Config**: Write `db/connectors/config.json` with the user's service URLs (or sensible defaults).
|
2. **Config**: Write `tooling/db/config.json` with the user's service URLs (or sensible defaults).
|
||||||
3. **Initialize DB**: Run `python3 db/connectors/sqlite_connector.py init` (or equivalent) to create the SQLite database.
|
3. **Initialize DB**: Run `python3 tooling/db/sqlite_connector.py init` (or equivalent) to create the SQLite database.
|
||||||
4. **Git hooks** (standard/full): Read the hook templates from `templates/.config/hooks/` and adapt for the project.
|
4. **Git hooks** (standard/full): Read the hook templates from `templates/.config/hooks/` and adapt for the project.
|
||||||
5. **Makefile**: If no Makefile exists, write one with standard targets (build, test, lint, format, clean, help). Adapt targets to the detected tech stack.
|
5. **Makefile**: If no Makefile exists, write one with standard targets (build, test, lint, format, clean, help). Adapt targets to the detected tech stack.
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@ After deploying all files:
|
|||||||
|
|
||||||
1. **File check**: Use Glob to verify all expected files were created. List any missing files.
|
1. **File check**: Use Glob to verify all expected files were created. List any missing files.
|
||||||
2. **DB check**: Run a simple query against the SQLite database to confirm it's working.
|
2. **DB check**: Run a simple query against the SQLite database to confirm it's working.
|
||||||
3. **CLI check**: Run `db/connectors/ticket --help` and `db/connectors/sprint --help` (standard+) to verify CLIs are functional.
|
3. **CLI check**: Run `tooling/db/ticket --help` and `tooling/db/sprint --help` (standard+) to verify CLIs are functional.
|
||||||
4. **Decisions check**: Verify decision files have correct structure with domain index entries.
|
4. **Decisions check**: Verify decision files have correct structure with domain index entries.
|
||||||
5. **Agent check**: Verify all agent files have valid YAML frontmatter.
|
5. **Agent check**: Verify all agent files have valid YAML frontmatter.
|
||||||
|
|
||||||
|
|||||||
@@ -70,13 +70,13 @@ The project uses local Qdrant (vector database) and Ollama (embedding model) for
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Search across all project documents
|
# Search across all project documents
|
||||||
db/connectors/qdrant-search "asymmetric information design"
|
tooling/db/qdrant-search "asymmetric information design"
|
||||||
|
|
||||||
# Index a new document
|
# Index a new document
|
||||||
db/connectors/qdrant-index docs/briefings/tyre.md
|
tooling/db/qdrant-index docs/briefings/tyre.md
|
||||||
|
|
||||||
# Health check
|
# Health check
|
||||||
db/connectors/qdrant-health
|
tooling/db/qdrant-health
|
||||||
```
|
```
|
||||||
|
|
||||||
Configuration:
|
Configuration:
|
||||||
|
|||||||
@@ -87,13 +87,13 @@ decisions/process.md # Process decisions
|
|||||||
.config/hooks/pre-commit # Pre-commit hook
|
.config/hooks/pre-commit # Pre-commit hook
|
||||||
.config/hooks/commit-msg # Commit message validation
|
.config/hooks/commit-msg # Commit message validation
|
||||||
db/schema.sql # Ticketing database schema
|
db/schema.sql # Ticketing database schema
|
||||||
db/connectors/config.json # Service endpoint config
|
tooling/db/config.json # Service endpoint config
|
||||||
db/connectors/ticket # Ticket CLI
|
tooling/db/ticket # Ticket CLI
|
||||||
db/connectors/sprint # Sprint CLI
|
tooling/db/sprint # Sprint CLI
|
||||||
db/connectors/sqlite_connector.py # SQLite wrapper
|
tooling/db/sqlite_connector.py # SQLite wrapper
|
||||||
db/connectors/sqlite-query # SQL query helper
|
tooling/db/sqlite-query # SQL query helper
|
||||||
db/connectors/sqlite-exec # SQL exec helper
|
tooling/db/sqlite-exec # SQL exec helper
|
||||||
db/connectors/sqlite-init # DB initializer
|
tooling/db/sqlite-init # DB initializer
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -172,9 +172,9 @@ docs/workshops/ # Workshop directory scaffolding
|
|||||||
.claude/skills/dep-audit/SKILL.md # Dependency audit skill
|
.claude/skills/dep-audit/SKILL.md # Dependency audit skill
|
||||||
.claude/skills/team-onboard/SKILL.md # Onboarding skill
|
.claude/skills/team-onboard/SKILL.md # Onboarding skill
|
||||||
.claude/skills/debt-scan/SKILL.md # Debt scan skill
|
.claude/skills/debt-scan/SKILL.md # Debt scan skill
|
||||||
db/connectors/qdrant_connector.py # Qdrant + Ollama connector
|
tooling/db/qdrant_connector.py # Qdrant + Ollama connector
|
||||||
db/connectors/qdrant-search # Semantic search CLI
|
tooling/db/qdrant-search # Semantic search CLI
|
||||||
db/connectors/qdrant-index # Document indexer CLI
|
tooling/db/qdrant-index # Document indexer CLI
|
||||||
db/connectors/qdrant-health # Qdrant health check
|
tooling/db/qdrant-health # Qdrant health check
|
||||||
db/connectors/qdrant-count # Collection document count
|
tooling/db/qdrant-count # Collection document count
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
-- Project Ticketing Database Schema
|
-- Project Ticketing Database Schema
|
||||||
-- Access via: python3 db/connectors/sqlite_connector.py <command>
|
-- Access via: python3 tooling/db/sqlite_connector.py <command>
|
||||||
-- DO NOT use sqlite3 CLI (crashes in Claude Code due to std::bad_alloc bug)
|
-- DO NOT use sqlite3 CLI (crashes in Claude Code due to std::bad_alloc bug)
|
||||||
|
|
||||||
PRAGMA journal_mode=WAL;
|
PRAGMA journal_mode=WAL;
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ PROJECT_ROOT = (SCRIPT_DIR / ".." / "..").resolve()
|
|||||||
|
|
||||||
REMINDER = """---
|
REMINDER = """---
|
||||||
Reminder: Keep ticket status up to date after finishing work.
|
Reminder: Keep ticket status up to date after finishing work.
|
||||||
db/connectors/ticket status <id> in_progress (when starting)
|
tooling/db/ticket status <id> in_progress (when starting)
|
||||||
db/connectors/ticket status <id> done (when finished)"""
|
tooling/db/ticket status <id> done (when finished)"""
|
||||||
|
|
||||||
|
|
||||||
def load_config():
|
def load_config():
|
||||||
@@ -24,16 +24,16 @@
|
|||||||
"Bash(git rm *)",
|
"Bash(git rm *)",
|
||||||
"Bash(git rev-parse --show-toplevel)",
|
"Bash(git rev-parse --show-toplevel)",
|
||||||
|
|
||||||
"Bash(db/connectors/ticket *)",
|
"Bash(tooling/db/ticket *)",
|
||||||
"Bash(db/connectors/sprint *)",
|
"Bash(tooling/db/sprint *)",
|
||||||
"Bash(db/connectors/sqlite-query *)",
|
"Bash(tooling/db/sqlite-query *)",
|
||||||
"Bash(db/connectors/sqlite-exec *)",
|
"Bash(tooling/db/sqlite-exec *)",
|
||||||
"Bash(db/connectors/qdrant-search *)",
|
"Bash(tooling/db/qdrant-search *)",
|
||||||
"Bash(db/connectors/qdrant-index *)",
|
"Bash(tooling/db/qdrant-index *)",
|
||||||
"Bash(db/connectors/qdrant-health)",
|
"Bash(tooling/db/qdrant-health)",
|
||||||
"Bash(db/connectors/qdrant-count)",
|
"Bash(tooling/db/qdrant-count)",
|
||||||
"Bash(db/connectors/sqlite-init)",
|
"Bash(tooling/db/sqlite-init)",
|
||||||
"Bash(db/connectors/decisions-sync)",
|
"Bash(tooling/db/decisions-sync)",
|
||||||
|
|
||||||
"Bash(make *)",
|
"Bash(make *)",
|
||||||
"Bash(make)",
|
"Bash(make)",
|
||||||
|
|||||||
@@ -18,36 +18,36 @@ in CLAUDE.md. This skill covers advanced operations and workflows.
|
|||||||
|
|
||||||
### Search
|
### Search
|
||||||
```bash
|
```bash
|
||||||
db/connectors/qdrant-search "search query"
|
tooling/db/qdrant-search "search query"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Index a file
|
### Index a file
|
||||||
```bash
|
```bash
|
||||||
db/connectors/qdrant-index <file-path>
|
tooling/db/qdrant-index <file-path>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Index a single chunk
|
### Index a single chunk
|
||||||
|
|
||||||
For precise indexing of specific content:
|
For precise indexing of specific content:
|
||||||
```bash
|
```bash
|
||||||
python3 db/connectors/qdrant_connector.py index "unique-id" "Text content to index" --metadata source=manual heading="Custom heading"
|
python3 tooling/db/qdrant_connector.py index "unique-id" "Text content to index" --metadata source=manual heading="Custom heading"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Create collection
|
### Create collection
|
||||||
|
|
||||||
Initialize the Qdrant collection (run once during setup):
|
Initialize the Qdrant collection (run once during setup):
|
||||||
```bash
|
```bash
|
||||||
python3 db/connectors/qdrant_connector.py create-collection
|
python3 tooling/db/qdrant_connector.py create-collection
|
||||||
```
|
```
|
||||||
|
|
||||||
### Health check
|
### Health check
|
||||||
```bash
|
```bash
|
||||||
db/connectors/qdrant-health
|
tooling/db/qdrant-health
|
||||||
```
|
```
|
||||||
|
|
||||||
### Count documents
|
### Count documents
|
||||||
```bash
|
```bash
|
||||||
db/connectors/qdrant-count
|
tooling/db/qdrant-count
|
||||||
```
|
```
|
||||||
|
|
||||||
## Bulk Indexing
|
## Bulk Indexing
|
||||||
@@ -55,7 +55,7 @@ db/connectors/qdrant-count
|
|||||||
Index all project documents at once:
|
Index all project documents at once:
|
||||||
```bash
|
```bash
|
||||||
for f in decisions/*.md docs/discussions/*.md docs/briefings/*.md docs/*.md; do
|
for f in decisions/*.md docs/discussions/*.md docs/briefings/*.md docs/*.md; do
|
||||||
db/connectors/qdrant-index "$f"
|
tooling/db/qdrant-index "$f"
|
||||||
done
|
done
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ Generate a team health metrics dashboard covering sprint velocity, cycle time, P
|
|||||||
Calculate velocity and throughput trends:
|
Calculate velocity and throughput trends:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/sqlite-query "SELECT s.name, COUNT(CASE WHEN t.status='done' THEN 1 END) as done, COUNT(t.id) as total FROM sprints s LEFT JOIN tickets t ON t.sprint_id = s.id GROUP BY s.id ORDER BY s.id DESC LIMIT 5"
|
tooling/db/sqlite-query "SELECT s.name, COUNT(CASE WHEN t.status='done' THEN 1 END) as done, COUNT(t.id) as total FROM sprints s LEFT JOIN tickets t ON t.sprint_id = s.id GROUP BY s.id ORDER BY s.id DESC LIMIT 5"
|
||||||
```
|
```
|
||||||
|
|
||||||
Compute:
|
Compute:
|
||||||
|
|||||||
@@ -53,12 +53,12 @@ Scan the project for kit-managed files:
|
|||||||
|
|
||||||
**Static files** (deployed as-is, safe to update):
|
**Static files** (deployed as-is, safe to update):
|
||||||
- `db/schema.sql`
|
- `db/schema.sql`
|
||||||
- `db/connectors/sqlite_connector.py`
|
- `tooling/db/sqlite_connector.py`
|
||||||
- `db/connectors/ticket`
|
- `tooling/db/ticket`
|
||||||
- `db/connectors/sprint`
|
- `tooling/db/sprint`
|
||||||
- `db/connectors/decisions_sync.py`
|
- `tooling/db/decisions_sync.py`
|
||||||
- `db/connectors/qdrant_connector.py`
|
- `tooling/db/qdrant_connector.py`
|
||||||
- All shell wrappers in `db/connectors/`
|
- All shell wrappers in `tooling/db/`
|
||||||
|
|
||||||
**Adapted files** (customized during init, update with care):
|
**Adapted files** (customized during init, update with care):
|
||||||
- `.claude/skills/*/SKILL.md` — skill definitions
|
- `.claude/skills/*/SKILL.md` — skill definitions
|
||||||
@@ -73,7 +73,7 @@ For each category, compare the installed version against the source:
|
|||||||
|
|
||||||
**Static files**: Direct diff against `static/` in the source repo.
|
**Static files**: Direct diff against `static/` in the source repo.
|
||||||
```bash
|
```bash
|
||||||
diff -u db/connectors/ticket <source_path>/static/db/connectors/ticket
|
diff -u tooling/db/ticket <source_path>/static/tooling/db/ticket
|
||||||
```
|
```
|
||||||
|
|
||||||
**Skills**: Compare the installed skill's SKILL.md against the source
|
**Skills**: Compare the installed skill's SKILL.md against the source
|
||||||
@@ -117,8 +117,8 @@ Installed: {installed_version}
|
|||||||
### Safe Updates (auto-apply recommended)
|
### Safe Updates (auto-apply recommended)
|
||||||
| File | Change | Source Date |
|
| File | Change | Source Date |
|
||||||
|------|--------|-------------|
|
|------|--------|-------------|
|
||||||
| db/connectors/ticket | Bug fix: handle empty sprint list | 2026-03-01 |
|
| tooling/db/ticket | Bug fix: handle empty sprint list | 2026-03-01 |
|
||||||
| db/connectors/sprint | New command: sprint archive | 2026-03-01 |
|
| tooling/db/sprint | New command: sprint archive | 2026-03-01 |
|
||||||
|
|
||||||
### Skill Improvements (review diff)
|
### Skill Improvements (review diff)
|
||||||
| Skill | Change |
|
| Skill | Change |
|
||||||
@@ -169,10 +169,10 @@ When `db/schema.sql` has changed in the source, the update must be additive:
|
|||||||
Compare schemas:
|
Compare schemas:
|
||||||
```bash
|
```bash
|
||||||
diff <(sqlite3 "" ".read <source>/static/db/schema.sql" ".schema") \
|
diff <(sqlite3 "" ".read <source>/static/db/schema.sql" ".schema") \
|
||||||
<(db/connectors/sqlite-query "SELECT sql FROM sqlite_master ORDER BY name")
|
<(tooling/db/sqlite-query "SELECT sql FROM sqlite_master ORDER BY name")
|
||||||
```
|
```
|
||||||
|
|
||||||
If new tables or indexes are detected, offer to run `db/connectors/sqlite-init`
|
If new tables or indexes are detected, offer to run `tooling/db/sqlite-init`
|
||||||
to apply them (it uses IF NOT EXISTS, so it's safe to re-run).
|
to apply them (it uses IF NOT EXISTS, so it's safe to re-run).
|
||||||
|
|
||||||
## Tips
|
## Tips
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ file so the team knows who to spawn.
|
|||||||
Get carry-overs, backlog candidates, and decision gaps in one shot:
|
Get carry-overs, backlog candidates, and decision gaps in one shot:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/sprint prepare
|
tooling/db/sprint prepare
|
||||||
```
|
```
|
||||||
|
|
||||||
This auto-detects the next sprint number (max ID + 1), creates the sprint
|
This auto-detects the next sprint number (max ID + 1), creates the sprint
|
||||||
@@ -73,10 +73,10 @@ record in `planning` status if needed, and outputs:
|
|||||||
For critical epics, check their children for granular candidates:
|
For critical epics, check their children for granular candidates:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket children <epic_id>
|
tooling/db/ticket children <epic_id>
|
||||||
```
|
```
|
||||||
|
|
||||||
Use `db/connectors/ticket show --brief <id> [<id>...]` to quickly scan multiple tickets.
|
Use `tooling/db/ticket show --brief <id> [<id>...]` to quickly scan multiple tickets.
|
||||||
|
|
||||||
### 3. Read existing code state
|
### 3. Read existing code state
|
||||||
|
|
||||||
@@ -136,14 +136,14 @@ Update it with the theme and goal, then assign tickets:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Update the sprint with theme and goal
|
# Update the sprint with theme and goal
|
||||||
db/connectors/sqlite-exec "UPDATE sprints SET name='Sprint N: Theme', goal='goal' WHERE id=N"
|
tooling/db/sqlite-exec "UPDATE sprints SET name='Sprint N: Theme', goal='goal' WHERE id=N"
|
||||||
|
|
||||||
# Assign tickets
|
# Assign tickets
|
||||||
db/connectors/ticket sprint assign <ticket_id> <sprint_id>
|
tooling/db/ticket sprint assign <ticket_id> <sprint_id>
|
||||||
```
|
```
|
||||||
|
|
||||||
The sprint stays in `planning` status until explicitly activated via
|
The sprint stays in `planning` status until explicitly activated via
|
||||||
`db/connectors/sprint start`. This prevents starting an unplanned sprint.
|
`tooling/db/sprint start`. This prevents starting an unplanned sprint.
|
||||||
|
|
||||||
### 8. Present summary
|
### 8. Present summary
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ Each team gets one briefing file at `docs/sprints/sprint-N/<team>.md`.
|
|||||||
|---|-------|------------|
|
|---|-------|------------|
|
||||||
| #ID | Title | #dependency or — |
|
| #ID | Title | #dependency or — |
|
||||||
|
|
||||||
Use `db/connectors/ticket show <id>` for full details.
|
Use `tooling/db/ticket show <id>` for full details.
|
||||||
|
|
||||||
## Key Decisions
|
## Key Decisions
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ Run a structured sprint retrospective by gathering data from git history, ticket
|
|||||||
|
|
||||||
Find the most recently completed sprint, or accept `--sprint N` as argument.
|
Find the most recently completed sprint, or accept `--sprint N` as argument.
|
||||||
|
|
||||||
- Read sprint record from DB: `db/connectors/sprint status`
|
- Read sprint record from DB: `tooling/db/sprint status`
|
||||||
- If a sprint number is provided, use: `db/connectors/ticket list --sprint N`
|
- If a sprint number is provided, use: `tooling/db/ticket list --sprint N`
|
||||||
- Extract sprint start and end dates from the sprint record.
|
- Extract sprint start and end dates from the sprint record.
|
||||||
|
|
||||||
### 2. Gather Data
|
### 2. Gather Data
|
||||||
@@ -33,7 +33,7 @@ git log --oneline --since=<start_date> --until=<end_date>
|
|||||||
|
|
||||||
**Ticket outcomes:**
|
**Ticket outcomes:**
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket list --sprint N
|
tooling/db/ticket list --sprint N
|
||||||
```
|
```
|
||||||
Categorize tickets into: done, carry-over, cancelled.
|
Categorize tickets into: done, carry-over, cancelled.
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ If the merge has conflicts, report them and stop — do not force-resolve.
|
|||||||
Run the sprint CLI to get the full context dump in one shot:
|
Run the sprint CLI to get the full context dump in one shot:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/sprint start-work
|
tooling/db/sprint start-work
|
||||||
```
|
```
|
||||||
|
|
||||||
This auto-detects the active sprint and current team from the branch.
|
This auto-detects the active sprint and current team from the branch.
|
||||||
@@ -59,7 +59,7 @@ If no matching briefing exists for the team, suggest running
|
|||||||
|
|
||||||
For tickets that need more detail than the `start-work` summary provides:
|
For tickets that need more detail than the `start-work` summary provides:
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket show <id>
|
tooling/db/ticket show <id>
|
||||||
```
|
```
|
||||||
|
|
||||||
### 6. Read key decisions
|
### 6. Read key decisions
|
||||||
@@ -141,7 +141,7 @@ Task(
|
|||||||
5. When done, mark the task completed and check TaskList for
|
5. When done, mark the task completed and check TaskList for
|
||||||
the next available task.
|
the next available task.
|
||||||
|
|
||||||
Use `db/connectors/ticket show <id>` for full ticket specs.",
|
Use `tooling/db/ticket show <id>` for full ticket specs.",
|
||||||
description: "Sprint {N} {team}: {name}",
|
description: "Sprint {N} {team}: {name}",
|
||||||
run_in_background: true
|
run_in_background: true
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -67,19 +67,19 @@ Provide a snapshot of current project state:
|
|||||||
|
|
||||||
**Current sprint:**
|
**Current sprint:**
|
||||||
```bash
|
```bash
|
||||||
db/connectors/sprint status
|
tooling/db/sprint status
|
||||||
```
|
```
|
||||||
|
|
||||||
**In-flight work:**
|
**In-flight work:**
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket list --status in_progress
|
tooling/db/ticket list --status in_progress
|
||||||
```
|
```
|
||||||
|
|
||||||
**Recent decisions:** Last 5 decisions by date from `decisions/` files.
|
**Recent decisions:** Last 5 decisions by date from `decisions/` files.
|
||||||
|
|
||||||
**Open questions:**
|
**Open questions:**
|
||||||
```bash
|
```bash
|
||||||
db/connectors/sqlite-query "SELECT id, title FROM decisions WHERE type='question' AND status='open'"
|
tooling/db/sqlite-query "SELECT id, title FROM decisions WHERE type='question' AND status='open'"
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. First Task Suggestions
|
### 4. First Task Suggestions
|
||||||
|
|||||||
@@ -29,12 +29,12 @@ git log --oneline --since="24 hours ago" --all
|
|||||||
|
|
||||||
**Ticket status changes:**
|
**Ticket status changes:**
|
||||||
```bash
|
```bash
|
||||||
db/connectors/sqlite-query "SELECT * FROM ticket_history WHERE changed_at > datetime('now', '-1 day') ORDER BY changed_at DESC"
|
tooling/db/sqlite-query "SELECT * FROM ticket_history WHERE changed_at > datetime('now', '-1 day') ORDER BY changed_at DESC"
|
||||||
```
|
```
|
||||||
|
|
||||||
**Active work:**
|
**Active work:**
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket list --status in_progress
|
tooling/db/ticket list --status in_progress
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Identify Blockers
|
### 3. Identify Blockers
|
||||||
|
|||||||
@@ -18,60 +18,60 @@ This skill covers the full command reference.
|
|||||||
|
|
||||||
### List tickets (full flags)
|
### List tickets (full flags)
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket list [--status S] [--priority P] [--epic N] [--sprint N] [--assigned A] [--team T]
|
tooling/db/ticket list [--status S] [--priority P] [--epic N] [--sprint N] [--assigned A] [--team T]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Create ticket
|
### Create ticket
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket create <type> <title> [--parent N] [--priority P] [--decision D] [--team T]
|
tooling/db/ticket create <type> <title> [--parent N] [--priority P] [--decision D] [--team T]
|
||||||
```
|
```
|
||||||
Types: `initiative`, `epic`, `story`, `task`, `bug`
|
Types: `initiative`, `epic`, `story`, `task`, `bug`
|
||||||
Priorities: `critical`, `high`, `medium`, `low`
|
Priorities: `critical`, `high`, `medium`, `low`
|
||||||
|
|
||||||
### Update status
|
### Update status
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket status <id> <new_status>
|
tooling/db/ticket status <id> <new_status>
|
||||||
db/connectors/ticket done <id> [<id> ...]
|
tooling/db/ticket done <id> [<id> ...]
|
||||||
```
|
```
|
||||||
Statuses: `backlog`, `ready`, `in_progress`, `review`, `done`, `cancelled`
|
Statuses: `backlog`, `ready`, `in_progress`, `review`, `done`, `cancelled`
|
||||||
|
|
||||||
### Assignment
|
### Assignment
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket assign <id> <agent>
|
tooling/db/ticket assign <id> <agent>
|
||||||
db/connectors/ticket unassign <id>
|
tooling/db/ticket unassign <id>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Team assignment
|
### Team assignment
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket team <id> <teams>
|
tooling/db/ticket team <id> <teams>
|
||||||
```
|
```
|
||||||
Teams are comma-separated, e.g. `backend`, `frontend`, `backend,frontend`.
|
Teams are comma-separated, e.g. `backend`, `frontend`, `backend,frontend`.
|
||||||
|
|
||||||
### Sprint management
|
### Sprint management
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket sprint [--active]
|
tooling/db/ticket sprint [--active]
|
||||||
db/connectors/ticket sprint assign <id> <sprint_id>
|
tooling/db/ticket sprint assign <id> <sprint_id>
|
||||||
```
|
```
|
||||||
|
|
||||||
For sprint-scoped operations (status overview, context dumps, lifecycle),
|
For sprint-scoped operations (status overview, context dumps, lifecycle),
|
||||||
use the dedicated sprint CLI instead: `db/connectors/sprint --help`
|
use the dedicated sprint CLI instead: `tooling/db/sprint --help`
|
||||||
|
|
||||||
### Dependencies
|
### Dependencies
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket deps <id>
|
tooling/db/ticket deps <id>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Search and browse
|
### Search and browse
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket search <keyword>
|
tooling/db/ticket search <keyword>
|
||||||
db/connectors/ticket epics [--status S]
|
tooling/db/ticket epics [--status S]
|
||||||
db/connectors/ticket children <id>
|
tooling/db/ticket children <id>
|
||||||
db/connectors/ticket count [--status S]
|
tooling/db/ticket count [--status S]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Batch show
|
### Batch show
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket show --brief <id> [<id>...]
|
tooling/db/ticket show --brief <id> [<id>...]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Workflow
|
## Workflow
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ docs/
|
|||||||
workshops/ # Workshop briefs and outputs
|
workshops/ # Workshop briefs and outputs
|
||||||
db/
|
db/
|
||||||
schema.sql # Database schema
|
schema.sql # Database schema
|
||||||
connectors/ # Connector scripts for SQLite and Qdrant
|
tooling/
|
||||||
|
db/ # Connector scripts for SQLite and Qdrant
|
||||||
config.json # Endpoint configuration
|
config.json # Endpoint configuration
|
||||||
ticket # Ticket CLI (list, show, create, assign, sprint, etc.)
|
ticket # Ticket CLI (list, show, create, assign, sprint, etc.)
|
||||||
sqlite_connector.py # SQLite mini MCP
|
sqlite_connector.py # SQLite mini MCP
|
||||||
@@ -64,15 +65,15 @@ All work happens on feature branches from `main`. All file paths are relative to
|
|||||||
The ticketing database (`{db_name}`) lives {in the parent directory shared across worktrees | in the repository root}. Access via CLI wrappers — never use the `sqlite3` CLI directly (it crashes in Claude Code due to std::bad_alloc):
|
The ticketing database (`{db_name}`) lives {in the parent directory shared across worktrees | in the repository root}. Access via CLI wrappers — never use the `sqlite3` CLI directly (it crashes in Claude Code due to std::bad_alloc):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket list --sprint N --team {team}
|
tooling/db/ticket list --sprint N --team {team}
|
||||||
db/connectors/ticket show N
|
tooling/db/ticket show N
|
||||||
db/connectors/sprint status
|
tooling/db/sprint status
|
||||||
```
|
```
|
||||||
|
|
||||||
### Before starting work
|
### Before starting work
|
||||||
|
|
||||||
1. Read your sprint briefing at `docs/sprints/sprint-N/{team}.md` for current tasks
|
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
|
2. Use `tooling/db/ticket show <id>` for full ticket details
|
||||||
3. Read the relevant `decisions/*.md` domain file(s) referenced in the briefing
|
3. Read the relevant `decisions/*.md` domain file(s) referenced in the briefing
|
||||||
4. Background context: `docs/briefings/{your-name}.md`, `docs/discussions/`
|
4. Background context: `docs/briefings/{your-name}.md`, `docs/discussions/`
|
||||||
|
|
||||||
@@ -81,16 +82,16 @@ db/connectors/sprint status
|
|||||||
**Prefer the ticket CLI over raw SQL.** The CLI handles column names, joins, and output formatting correctly:
|
**Prefer the ticket CLI over raw SQL.** The CLI handles column names, joins, and output formatting correctly:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket list [--status S] [--sprint N] [--team T]
|
tooling/db/ticket list [--status S] [--sprint N] [--team T]
|
||||||
db/connectors/ticket show <id>
|
tooling/db/ticket show <id>
|
||||||
db/connectors/ticket sprint --active
|
tooling/db/ticket sprint --active
|
||||||
```
|
```
|
||||||
|
|
||||||
Only fall back to raw SQL for queries the CLI doesn't support. **Never use the `sqlite3` CLI** — use the wrapper scripts instead:
|
Only fall back to raw SQL for queries the CLI doesn't support. **Never use the `sqlite3` CLI** — use the wrapper scripts instead:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/sqlite-query "SELECT * FROM tickets WHERE status='in_progress'"
|
tooling/db/sqlite-query "SELECT * FROM tickets WHERE status='in_progress'"
|
||||||
db/connectors/sqlite-exec "UPDATE tickets SET status='done' WHERE id=1"
|
tooling/db/sqlite-exec "UPDATE tickets SET status='done' WHERE id=1"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Sprint CLI
|
### Sprint CLI
|
||||||
@@ -98,12 +99,12 @@ db/connectors/sqlite-exec "UPDATE tickets SET status='done' WHERE id=1"
|
|||||||
**Use the sprint CLI for sprint-scoped operations.** It batches ticket queries and formats output for agent consumption:
|
**Use the sprint CLI for sprint-scoped operations.** It batches ticket queries and formats output for agent consumption:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/sprint status # Current sprint progress
|
tooling/db/sprint status # Current sprint progress
|
||||||
db/connectors/sprint status --team {team} # Team-scoped view
|
tooling/db/sprint status --team {team} # Team-scoped view
|
||||||
db/connectors/sprint start-work [--team T] # Full context dump for starting work
|
tooling/db/sprint start-work [--team T] # Full context dump for starting work
|
||||||
db/connectors/sprint prepare # Prepare next sprint (candidates + gaps)
|
tooling/db/sprint prepare # Prepare next sprint (candidates + gaps)
|
||||||
db/connectors/sprint start # Activate a planned sprint
|
tooling/db/sprint start # Activate a planned sprint
|
||||||
db/connectors/sprint stop # Complete an active sprint
|
tooling/db/sprint stop # Complete an active sprint
|
||||||
```
|
```
|
||||||
|
|
||||||
Team is auto-detected from the current git branch (if not `main`). Sprint is auto-detected from DB state.
|
Team is auto-detected from the current git branch (if not `main`). Sprint is auto-detected from DB state.
|
||||||
@@ -113,10 +114,10 @@ Team is auto-detected from the current git branch (if not `main`). Sprint is aut
|
|||||||
If Qdrant + Ollama are configured for semantic search:
|
If Qdrant + Ollama are configured for semantic search:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/qdrant-search "query text"
|
tooling/db/qdrant-search "query text"
|
||||||
db/connectors/qdrant-index docs/briefings/agent.md
|
tooling/db/qdrant-index docs/briefings/agent.md
|
||||||
db/connectors/qdrant-health
|
tooling/db/qdrant-health
|
||||||
db/connectors/qdrant-count
|
tooling/db/qdrant-count
|
||||||
```
|
```
|
||||||
|
|
||||||
### Git host access
|
### Git host access
|
||||||
@@ -157,7 +158,7 @@ Key rules:
|
|||||||
- Decision IDs: `D-NNN` (confirmed), `Q-NNN` (open questions), `R-NNN` (rejected)
|
- Decision IDs: `D-NNN` (confirmed), `Q-NNN` (open questions), `R-NNN` (rejected)
|
||||||
- Discussion rounds: numbered sequentially, archived to `docs/discussions/` when complete
|
- Discussion rounds: numbered sequentially, archived to `docs/discussions/` when complete
|
||||||
- Briefings: one per agent, updated after decision-producing rounds
|
- Briefings: one per agent, updated after decision-producing rounds
|
||||||
- Tickets: managed via `db/connectors/ticket` CLI
|
- Tickets: managed via `tooling/db/ticket` CLI
|
||||||
|
|
||||||
### Commit conventions
|
### Commit conventions
|
||||||
|
|
||||||
|
|||||||
@@ -16,14 +16,14 @@ The project uses SQLite for ticketing and decision tracking.
|
|||||||
### Initialize
|
### Initialize
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/sqlite-init
|
tooling/db/sqlite-init
|
||||||
```
|
```
|
||||||
|
|
||||||
### Query
|
### Query
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/sqlite-query "SELECT * FROM tickets WHERE status='in_progress'"
|
tooling/db/sqlite-query "SELECT * FROM tickets WHERE status='in_progress'"
|
||||||
db/connectors/sqlite-exec "UPDATE tickets SET status='done' WHERE id=1"
|
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.
|
**Never use the `sqlite3` CLI** — it crashes in Claude Code (std::bad_alloc). Use the wrapper scripts.
|
||||||
@@ -31,21 +31,21 @@ db/connectors/sqlite-exec "UPDATE tickets SET status='done' WHERE id=1"
|
|||||||
### Ticket CLI
|
### Ticket CLI
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/ticket list [--status S] [--sprint N] [--team T]
|
tooling/db/ticket list [--status S] [--sprint N] [--team T]
|
||||||
db/connectors/ticket show <id>
|
tooling/db/ticket show <id>
|
||||||
db/connectors/ticket create --title "Title" --team T --priority P
|
tooling/db/ticket create --title "Title" --team T --priority P
|
||||||
db/connectors/ticket assign <id> --agent name
|
tooling/db/ticket assign <id> --agent name
|
||||||
```
|
```
|
||||||
|
|
||||||
### Sprint CLI
|
### Sprint CLI
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/sprint status # Current sprint progress
|
tooling/db/sprint status # Current sprint progress
|
||||||
db/connectors/sprint status --team T # Team-scoped view
|
tooling/db/sprint status --team T # Team-scoped view
|
||||||
db/connectors/sprint start-work [--team T] # Full context dump for starting work
|
tooling/db/sprint start-work [--team T] # Full context dump for starting work
|
||||||
db/connectors/sprint prepare # Prepare next sprint
|
tooling/db/sprint prepare # Prepare next sprint
|
||||||
db/connectors/sprint start # Activate a planned sprint
|
tooling/db/sprint start # Activate a planned sprint
|
||||||
db/connectors/sprint stop # Complete an active sprint
|
tooling/db/sprint stop # Complete an active sprint
|
||||||
```
|
```
|
||||||
|
|
||||||
## Decision Tracking
|
## Decision Tracking
|
||||||
@@ -64,10 +64,10 @@ make decisions-orphan # Decisions without associated tickets
|
|||||||
If Qdrant + Ollama are configured for semantic search:
|
If Qdrant + Ollama are configured for semantic search:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/qdrant-health # Check service status
|
tooling/db/qdrant-health # Check service status
|
||||||
db/connectors/qdrant-search "query text" # Semantic search
|
tooling/db/qdrant-search "query text" # Semantic search
|
||||||
db/connectors/qdrant-index path/to/doc.md # Index a document
|
tooling/db/qdrant-index path/to/doc.md # Index a document
|
||||||
db/connectors/qdrant-count # Collection stats
|
tooling/db/qdrant-count # Collection stats
|
||||||
```
|
```
|
||||||
|
|
||||||
## Git Hooks
|
## Git Hooks
|
||||||
|
|||||||
@@ -21,16 +21,16 @@ setup-hooks:
|
|||||||
@echo "Git hooks path set to .config/hooks"
|
@echo "Git hooks path set to .config/hooks"
|
||||||
|
|
||||||
decisions-sync:
|
decisions-sync:
|
||||||
@db/connectors/decisions-sync
|
@tooling/db/decisions-sync
|
||||||
|
|
||||||
decisions-coverage:
|
decisions-coverage:
|
||||||
@db/connectors/sqlite-query "SELECT d.domain, COUNT(DISTINCT d.id) as decisions, COUNT(DISTINCT t.decision_ref) as with_tickets FROM decisions d LEFT JOIN tickets t ON d.id = t.decision_ref WHERE d.status='active' AND d.type='confirmed' GROUP BY d.domain"
|
@tooling/db/sqlite-query "SELECT d.domain, COUNT(DISTINCT d.id) as decisions, COUNT(DISTINCT t.decision_ref) as with_tickets FROM decisions d LEFT JOIN tickets t ON d.id = t.decision_ref WHERE d.status='active' AND d.type='confirmed' GROUP BY d.domain"
|
||||||
|
|
||||||
decisions-active:
|
decisions-active:
|
||||||
@db/connectors/sqlite-query "SELECT id, domain, title FROM decisions WHERE status='active' AND type='confirmed' ORDER BY domain, id"
|
@tooling/db/sqlite-query "SELECT id, domain, title FROM decisions WHERE status='active' AND type='confirmed' ORDER BY domain, id"
|
||||||
|
|
||||||
decisions-orphan:
|
decisions-orphan:
|
||||||
@db/connectors/sqlite-query "SELECT id, title FROM decisions WHERE type='confirmed' AND status='active' AND id NOT IN (SELECT DISTINCT decision_ref FROM tickets WHERE decision_ref IS NOT NULL)"
|
@tooling/db/sqlite-query "SELECT id, title FROM decisions WHERE type='confirmed' AND status='active' AND id NOT IN (SELECT DISTINCT decision_ref FROM tickets WHERE decision_ref IS NOT NULL)"
|
||||||
|
|
||||||
pre-pr: decisions-sync
|
pre-pr: decisions-sync
|
||||||
@echo "=== PRE-PR: CHECKS PASSED ==="
|
@echo "=== PRE-PR: CHECKS PASSED ==="
|
||||||
|
|||||||
@@ -54,25 +54,25 @@ make decisions-coverage
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# All active decisions
|
# All active decisions
|
||||||
db/connectors/sqlite-query "SELECT id, domain, title FROM decisions WHERE status='active' AND type='confirmed' ORDER BY domain, id"
|
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
|
# Decisions in a specific domain
|
||||||
db/connectors/sqlite-query "SELECT id, title FROM decisions WHERE domain='architecture' AND status='active'"
|
tooling/db/sqlite-query "SELECT id, title FROM decisions WHERE domain='architecture' AND status='active'"
|
||||||
|
|
||||||
# Search by keyword
|
# Search by keyword
|
||||||
db/connectors/sqlite-query "SELECT id, domain, title FROM decisions WHERE title LIKE '%keyword%' OR decision LIKE '%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
|
# Decisions linked to a specific ticket
|
||||||
db/connectors/sqlite-query "SELECT d.id, d.title FROM decisions d JOIN tickets t ON d.id = t.decision_ref WHERE t.id = 42"
|
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
|
# Open questions
|
||||||
db/connectors/sqlite-query "SELECT id, title FROM decisions WHERE type='question' AND status='active'"
|
tooling/db/sqlite-query "SELECT id, title FROM decisions WHERE type='question' AND status='active'"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Via Qdrant (semantic search)
|
### Via Qdrant (semantic search)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
db/connectors/qdrant-search "asymmetric information design"
|
tooling/db/qdrant-search "asymmetric information design"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Superseding a Decision
|
## Superseding a Decision
|
||||||
|
|||||||
@@ -40,10 +40,10 @@ EXPECTED_FILES=(
|
|||||||
"skill/references/git-host-patterns.md"
|
"skill/references/git-host-patterns.md"
|
||||||
"skill/references/customization-examples.md"
|
"skill/references/customization-examples.md"
|
||||||
"static/db/schema.sql"
|
"static/db/schema.sql"
|
||||||
"static/db/connectors/config.json"
|
"static/tooling/db/config.json"
|
||||||
"static/db/connectors/sqlite_connector.py"
|
"static/tooling/db/sqlite_connector.py"
|
||||||
"static/db/connectors/ticket"
|
"static/tooling/db/ticket"
|
||||||
"static/db/connectors/sprint"
|
"static/tooling/db/sprint"
|
||||||
"tests/test-install.sh"
|
"tests/test-install.sh"
|
||||||
"tests/test-completeness.sh"
|
"tests/test-completeness.sh"
|
||||||
)
|
)
|
||||||
@@ -215,7 +215,7 @@ EXPECTED_DIRS=(
|
|||||||
"skill/references"
|
"skill/references"
|
||||||
"static"
|
"static"
|
||||||
"static/db"
|
"static/db"
|
||||||
"static/db/connectors"
|
"static/tooling/db"
|
||||||
"templates"
|
"templates"
|
||||||
"templates/.claude"
|
"templates/.claude"
|
||||||
"templates/.claude/agents"
|
"templates/.claude/agents"
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ STANDARD_FILES=(
|
|||||||
"decisions/scope.md"
|
"decisions/scope.md"
|
||||||
"decisions/process.md"
|
"decisions/process.md"
|
||||||
"db/schema.sql"
|
"db/schema.sql"
|
||||||
"db/connectors/config.json"
|
"tooling/db/config.json"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Create the expected structure
|
# Create the expected structure
|
||||||
@@ -133,7 +133,7 @@ mkdir -p "$TMPDIR_STANDARD/.claude/skills/worktree-update"
|
|||||||
mkdir -p "$TMPDIR_STANDARD/.claude/skills/sprint-retro"
|
mkdir -p "$TMPDIR_STANDARD/.claude/skills/sprint-retro"
|
||||||
mkdir -p "$TMPDIR_STANDARD/.claude/skills/release-notes"
|
mkdir -p "$TMPDIR_STANDARD/.claude/skills/release-notes"
|
||||||
mkdir -p "$TMPDIR_STANDARD/decisions"
|
mkdir -p "$TMPDIR_STANDARD/decisions"
|
||||||
mkdir -p "$TMPDIR_STANDARD/db/connectors"
|
mkdir -p "$TMPDIR_STANDARD/tooling/db"
|
||||||
for f in "${STANDARD_FILES[@]}"; do
|
for f in "${STANDARD_FILES[@]}"; do
|
||||||
mkdir -p "$TMPDIR_STANDARD/$(dirname "$f")"
|
mkdir -p "$TMPDIR_STANDARD/$(dirname "$f")"
|
||||||
touch "$TMPDIR_STANDARD/$f"
|
touch "$TMPDIR_STANDARD/$f"
|
||||||
@@ -175,7 +175,7 @@ FULL_FILES=(
|
|||||||
".claude/skills/debt-scan/SKILL.md"
|
".claude/skills/debt-scan/SKILL.md"
|
||||||
"decisions/README.md"
|
"decisions/README.md"
|
||||||
"db/schema.sql"
|
"db/schema.sql"
|
||||||
"db/connectors/config.json"
|
"tooling/db/config.json"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Create the expected structure
|
# Create the expected structure
|
||||||
@@ -206,8 +206,8 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Test that sqlite_connector.py exists and is parseable
|
# Test that sqlite_connector.py exists and is parseable
|
||||||
if [[ -f "$KIT_DIR/static/db/connectors/sqlite_connector.py" ]]; then
|
if [[ -f "$KIT_DIR/static/tooling/db/sqlite_connector.py" ]]; then
|
||||||
if python3 -c "import ast; ast.parse(open('$KIT_DIR/static/db/connectors/sqlite_connector.py').read())" 2>/dev/null; then
|
if python3 -c "import ast; ast.parse(open('$KIT_DIR/static/tooling/db/sqlite_connector.py').read())" 2>/dev/null; then
|
||||||
pass "sqlite_connector.py is valid Python"
|
pass "sqlite_connector.py is valid Python"
|
||||||
else
|
else
|
||||||
fail "sqlite_connector.py has syntax errors"
|
fail "sqlite_connector.py has syntax errors"
|
||||||
@@ -221,12 +221,12 @@ echo ""
|
|||||||
# --- Test 5: CLI tools ---
|
# --- Test 5: CLI tools ---
|
||||||
echo "--- Test 5: CLI tools respond to --help ---"
|
echo "--- Test 5: CLI tools respond to --help ---"
|
||||||
|
|
||||||
if [[ -f "$KIT_DIR/static/db/connectors/ticket" ]]; then
|
if [[ -f "$KIT_DIR/static/tooling/db/ticket" ]]; then
|
||||||
if "$KIT_DIR/static/db/connectors/ticket" --help >/dev/null 2>&1; then
|
if "$KIT_DIR/static/tooling/db/ticket" --help >/dev/null 2>&1; then
|
||||||
pass "ticket --help succeeds"
|
pass "ticket --help succeeds"
|
||||||
else
|
else
|
||||||
# Some CLIs exit non-zero on --help but still work
|
# Some CLIs exit non-zero on --help but still work
|
||||||
if "$KIT_DIR/static/db/connectors/ticket" --help 2>&1 | head -1 | grep -qi "usage\|ticket\|help"; then
|
if "$KIT_DIR/static/tooling/db/ticket" --help 2>&1 | head -1 | grep -qi "usage\|ticket\|help"; then
|
||||||
pass "ticket --help produces output"
|
pass "ticket --help produces output"
|
||||||
else
|
else
|
||||||
fail "ticket --help failed"
|
fail "ticket --help failed"
|
||||||
@@ -236,11 +236,11 @@ else
|
|||||||
fail "ticket CLI missing"
|
fail "ticket CLI missing"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f "$KIT_DIR/static/db/connectors/sprint" ]]; then
|
if [[ -f "$KIT_DIR/static/tooling/db/sprint" ]]; then
|
||||||
if "$KIT_DIR/static/db/connectors/sprint" --help >/dev/null 2>&1; then
|
if "$KIT_DIR/static/tooling/db/sprint" --help >/dev/null 2>&1; then
|
||||||
pass "sprint --help succeeds"
|
pass "sprint --help succeeds"
|
||||||
else
|
else
|
||||||
if "$KIT_DIR/static/db/connectors/sprint" --help 2>&1 | head -1 | grep -qi "usage\|sprint\|help"; then
|
if "$KIT_DIR/static/tooling/db/sprint" --help 2>&1 | head -1 | grep -qi "usage\|sprint\|help"; then
|
||||||
pass "sprint --help produces output"
|
pass "sprint --help produces output"
|
||||||
else
|
else
|
||||||
fail "sprint --help failed"
|
fail "sprint --help failed"
|
||||||
|
|||||||
Reference in New Issue
Block a user