diff --git a/.gitignore b/.gitignore index a0d70ed6..e68934dd 100644 --- a/.gitignore +++ b/.gitignore @@ -48,9 +48,14 @@ coverage.* /tmp/ # -- pql per-repo state (clide dogfoods against itself; pql's index lands -# here when running queries locally). Mirror what `pql init` writes. +# here when running queries locally). `pql.db` is also where the +# `tools/scripts/plan` stopgap writes decisions + tickets (D-040). /.pql/ +# -- Python stopgap tooling under tools/scripts/plan ------------------ +tools/scripts/__pycache__/ +tools/scripts/planning/__pycache__/ + # -- SQLite index files (defensive; should never land at repo root) ---- *.sqlite *.sqlite-journal diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d3b301d..900eae23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,19 @@ heading, and (b) bumping `project.yaml` `version:` in the same commit. - `DECISIONS.md` one-line pointer at the repo root (matches settled-reach's convention). +- `tools/scripts/plan` — Python stopgap entrypoint for `decisions` + and `ticket` subcommands, writing to `.pql/pql.db` (gitignored). + Supports `decisions sync | validate | claim | list | show | coverage` + and `ticket new | list | show | status | assign | team | block | + unblock | label | search | board`, plus `sqlite-query`. Verb shape + and output format mirror the eventual `pql` subcommands so migration + when pql ships feature parity is a call-site find-replace + (`tools/scripts/plan ` → `pql `). Ported from settled-reach with + the Scrum layer stripped; ticket IDs are `T-NNN` (TEXT PKs) and + there's no `sprints` table. Time-limited per + [`D-040`](decisions/process.md#d-040-python-stopgap-under-toolsscriptsplan) + / [`R-011`](decisions/rejected.md#r-011-permanent-stopgap). + ### Removed - `docs/ADRs/` directory — content lifted into `decisions/` as D/R diff --git a/tools/scripts/README.md b/tools/scripts/README.md new file mode 100644 index 00000000..2d084e85 --- /dev/null +++ b/tools/scripts/README.md @@ -0,0 +1,49 @@ +# STOPGAP — Planning tooling + +This directory is a **time-limited stopgap**. The Python scripts here +port settled-reach's `decisions_sync.py` + `ticket` + `decision` +scripts, Scrum-stripped, and write to `.pql/pql.db` (gitignored). + +## Sunset clause + +Per [`D-040`](../../decisions/process.md#d-040-python-stopgap-under-toolsscriptsplan) +and [`R-011`](../../decisions/rejected.md#r-011-permanent-stopgap), +this stopgap deletes when pql ships: + +- `pql decisions sync | validate | list | show | claim | coverage` +- `pql ticket new | list | show | status | assign | block | board` + +with feature parity on the same `.pql/pql.db` file this stopgap wrote. + +Migration is a call-site find-replace: + +``` +tools/scripts/plan decisions sync → pql decisions sync +tools/scripts/plan ticket new task "…" → pql ticket new task "…" +tools/scripts/plan ticket board → pql ticket board +``` + +See [`Q-021`](../../decisions/questions-architecture.md#q-021-pql-absorbs-planning-vs-keeps-separate) +for the open gate on whether pql absorbs planning long-term. + +## Entrypoint + +`plan` is a Python executable. Support modules live under `planning/`. + +``` +plan decisions sync | validate | claim D|Q|R [title] | list | show | coverage +plan ticket new "title" | list | show | status | assign +plan ticket block --by | unblock --from +plan ticket team | label add|rm