refactor(meta): phases-as-hierarchy + retire legacy SQLite tooling #155

Closed
jpmschweitzer wants to merge 0 commits from post-migration-cleanup into main
Owner

Summary

Two post-migration cleanups, following PR #154 (decisions + ticketing on pql).

1. Phases gate on the cascade hierarchy, not labels

The migration carried the old milestone over as a phase:4 label, which had already
drifted (66 tickets under the Phase-4 epic but only 42 labelled). pql's native
initiative/epic hierarchy already models this: initiative T-745 (Development Cascade)
holds the six phases as epics. So phase membership is now "parented under the phase epic"
— self-maintaining, no label to forget.

  • T-750 (Phase 4) → in_progress (active phase; sequential per D-166).
  • Re-parented 2 strays (T-974, T-1008) under T-750; dropped all 42 phase:4 labels.
  • /whats-next, /ticket, ticket-cli.md, CLAUDE.md now gate on
    pql ticket list --under <active-phase-epic> --unblocked.
  • Fixed a doc bug: pql's label action is add|rm, not add|remove.
  • pql-requirements #9 flipped — no milestone entity / labels-as-milestones needed.

2. Phase 6 — retire legacy SQLite tooling

The pql cutover is stable (verified live via the clide IDE's pql panels), so remove the
superseded SQLite planning tooling. Surgical: only ticket/decision/raw-SQL scripts
(settledreach.db-bound, replaced by pql) deleted; asset/audio/wiki connectors + shared
common.py kept (they only use common.ensure_venv).

  • Removed tooling/db/{ticket,decision,decisions-sync,decisions_sync.py,sqlite-*}, the
    db-backup/db-install ritual + committed settledreach.db.backup, the dead
    check-decision-ids stub, Makefile targets, SR_DB_PATH + dead allowlist entries.
  • Updated DEVOPS.md / project-structure / asset-pipeline / ticket-cli to pql.
  • Net −1500 lines. The live settledreach.db (gitignored) stays on disk as cold rollback.

Verification

  • pql decisions validate ok; 357 decisions / 1013 tickets.
  • pql plan rebuild reconstructs the re-parent + status + label-tombstone mutations.
  • --under T-750 --unblocked returns the active phase's ready work.
  • ruff clean; kept asset connectors still parse + import common.ensure_venv.

🤖 Generated with Claude Code

## Summary Two post-migration cleanups, following PR #154 (decisions + ticketing on pql). ### 1. Phases gate on the cascade hierarchy, not labels The migration carried the old milestone over as a `phase:4` **label**, which had already drifted (66 tickets under the Phase-4 epic but only 42 labelled). pql's native initiative/epic hierarchy already models this: initiative **T-745** (Development Cascade) holds the six phases as epics. So phase membership is now "parented under the phase epic" — self-maintaining, no label to forget. - T-750 (Phase 4) → `in_progress` (active phase; sequential per D-166). - Re-parented 2 strays (T-974, T-1008) under T-750; dropped all 42 `phase:4` labels. - `/whats-next`, `/ticket`, ticket-cli.md, CLAUDE.md now gate on `pql ticket list --under <active-phase-epic> --unblocked`. - Fixed a doc bug: pql's label action is `add|rm`, not `add|remove`. - pql-requirements #9 flipped — no milestone entity / labels-as-milestones needed. ### 2. Phase 6 — retire legacy SQLite tooling The pql cutover is stable (verified live via the clide IDE's pql panels), so remove the superseded SQLite planning tooling. Surgical: only ticket/decision/raw-SQL scripts (settledreach.db-bound, replaced by pql) deleted; asset/audio/wiki connectors + shared `common.py` kept (they only use `common.ensure_venv`). - Removed tooling/db/{ticket,decision,decisions-sync,decisions_sync.py,sqlite-*}, the db-backup/db-install ritual + committed settledreach.db.backup, the dead check-decision-ids stub, Makefile targets, SR_DB_PATH + dead allowlist entries. - Updated DEVOPS.md / project-structure / asset-pipeline / ticket-cli to pql. - Net −1500 lines. The live settledreach.db (gitignored) stays on disk as cold rollback. ## Verification - `pql decisions validate` ok; 357 decisions / 1013 tickets. - `pql plan rebuild` reconstructs the re-parent + status + label-tombstone mutations. - `--under T-750 --unblocked` returns the active phase's ready work. - ruff clean; kept asset connectors still parse + import common.ensure_venv. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jpmschweitzer added 2 commits 2026-06-06 22:27:26 +02:00
Replaces the labels-as-milestones pattern (carried over from the retired SQLite
milestone subsystem) with pql's native initiative/epic hierarchy, which already
modelled this: initiative T-745 (Development Cascade) holds the six phases as epics.
A ticket is in a phase by being parented under that phase epic — self-maintaining,
no label to apply or forget.

The `phase:4` label had already drifted (66 tickets under the Phase-4 epic T-750 but
only 42 labelled). Fixes:
- T-750 (Phase 4) -> in_progress to mark the active phase (sequential per D-166).
- Re-parented the 2 strays (T-974 Atlas-to-tile epic, T-1008 economy task) under T-750.
- Dropped all 42 phase:4 labels (tombstoned in the changelog).
- /whats-next, /ticket, ticket-cli.md, CLAUDE.md now gate on
  `pql ticket list --under <active-phase-epic> --unblocked` instead of `--label phase:4`.
- Fixed the label-action verb in the docs: pql uses `add|rm`, not `add|remove`.
- pql-requirements #9 flipped: no milestone entity / labels-as-milestones needed — the
  initiative/epic tree is the answer.

Verified: `pql plan rebuild` reconstructs the mutations; `--under T-750 --unblocked`
returns the active phase's ready work.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The pql cutover is stable, so remove the superseded SQLite planning tooling. Surgical
— only the ticket/decision/raw-SQL scripts (all settledreach.db-bound and replaced by
pql) are deleted; the asset/audio/wiki connectors and shared common.py stay.

Removed:
- tooling/db/{ticket,decision,decisions-sync,decisions_sync.py,sqlite-query,sqlite-exec,
  sqlite-init,sqlite-seed,sqlite_connector.py}
- tooling/{db-backup,db-install} + docs/backups/settledreach.db.backup (the binary-DB
  backup ritual; tickets now live in the git-tracked .pql/changelog/)
- tooling/check-decision-ids (dead stub, superseded by `pql decisions validate`)
- Makefile db-backup/db-install targets; SR_DB_PATH + tooling/db/{ticket,sqlite-*,
  decision*} entries from .claude/settings.json (audio entries kept)

Updated docs to pql: DEVOPS.md (SQLite Access + Decisions System → pql), project
structure, ticket-cli closing note, asset-pipeline raw-SQL warning.

Kept (verified still imported by the asset connectors via common.ensure_venv): common.py,
config.json, audio/image/trellis/wiki connectors. The live settledreach.db file
(gitignored, repo-parent) is left on disk as a cold rollback only.

ruff clean; pql decisions validate ok (357 decisions / 1013 tickets).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Author
Owner

Review: post-migration-cleanup → main (type: code)

Tyre (architecture) + Hoshe (QA).

Tyre (Architecture): APPROVE

Both changes sound. Phases-as-hierarchy correctly maps D-166's sequential cascade
(initiative T-745 → six phase epics; T-750 in_progress is the active gate), and
--under T-750 --unblocked is strictly better than the drifted label (the hierarchy
self-maintains; labels need manual discipline). Label tombstones land correctly. The
Phase-6 deletions are clean — every kept connector imports only common.ensure_venv;
nothing depends on the removed settledreach.db path.

Non-blocking note:

# File Issue
tooling/db/common.py Docstring still names deleted scripts (ticket/sprint/sqlite_connector/decisions_sync) as consumers; resolve_db_path/get_connection are now dead settledreach.db code. Cosmetic.

Hoshe (QA): REQUEST_CHANGES

Phase model + deletions verified: --label phase:4 empty, T-750 in_progress, T-974/T-1008
re-parented to T-750, 357 decisions / 1013 tickets survive plan rebuild, decisions validate
ok, no dangling refs to deleted scripts in active files, label verb consistent (add/rm).
One defect:

# File Issue
1 docs/DEVOPS.md:19 Repository Layout still lists decisions/ — should be governance/ (line 323 already correct).

Verdict: CHANGES REQUESTED

Both accepted (no pushback). Fixing the DEVOPS layout path + the common.py docstring/dead-code on the branch.

## Review: post-migration-cleanup → main (type: code) Tyre (architecture) + Hoshe (QA). ### Tyre (Architecture): APPROVE Both changes sound. Phases-as-hierarchy correctly maps D-166's sequential cascade (initiative T-745 → six phase epics; T-750 `in_progress` is the active gate), and `--under T-750 --unblocked` is strictly better than the drifted label (the hierarchy self-maintains; labels need manual discipline). Label tombstones land correctly. The Phase-6 deletions are clean — every kept connector imports only `common.ensure_venv`; nothing depends on the removed settledreach.db path. Non-blocking note: | # | File | Issue | |---|------|-------| | – | `tooling/db/common.py` | Docstring still names deleted scripts (ticket/sprint/sqlite_connector/decisions_sync) as consumers; `resolve_db_path`/`get_connection` are now dead settledreach.db code. Cosmetic. | ### Hoshe (QA): REQUEST_CHANGES Phase model + deletions verified: `--label phase:4` empty, T-750 `in_progress`, T-974/T-1008 re-parented to T-750, 357 decisions / 1013 tickets survive `plan rebuild`, `decisions validate` ok, no dangling refs to deleted scripts in active files, label verb consistent (`add`/`rm`). One defect: | # | File | Issue | |---|------|-------| | 1 | `docs/DEVOPS.md:19` | Repository Layout still lists `decisions/` — should be `governance/` (line 323 already correct). | ### Verdict: CHANGES REQUESTED Both accepted (no pushback). Fixing the DEVOPS layout path + the common.py docstring/dead-code on the branch.
jpmschweitzer added 1 commit 2026-06-06 23:06:49 +02:00
Hoshe (QA): docs/DEVOPS.md Repository Layout still listed `decisions/` — corrected to
`governance/` (the DQR tree) and added a `.pql/` entry for the planning store.

Tyre (architecture, non-blocking): tooling/db/common.py docstring named deleted scripts
as consumers and `resolve_db_path`/`load_config`/`get_connection` were dead settledreach.db
code. Trimmed common.py to just `ensure_venv` (the only symbol any kept connector imports)
and rewrote the docstring to name the real consumers.

ruff clean; common.py parses; ensure_venv intact.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Author
Owner

Re-review after fixes — APPROVED

Both reviewers approve (commit ccc194d5f):

  • Hoshe (QA): DEVOPS.md layout corrected to governance/ + .pql/ entry added; common.py trimmed and parses. APPROVE.
  • Tyre (Architecture): approved on first pass; non-blocking common.py docstring/dead-code note also addressed.

Phase model verified (label empty, T-750 in_progress, strays re-parented, 357/1013 survive rebuild); Phase-6 deletions clean (no dangling refs, kept connectors intact). Ready to merge.

## Re-review after fixes — APPROVED ✅ Both reviewers approve (commit `ccc194d5f`): - **Hoshe (QA):** DEVOPS.md layout corrected to `governance/` + `.pql/` entry added; common.py trimmed and parses. APPROVE. - **Tyre (Architecture):** approved on first pass; non-blocking common.py docstring/dead-code note also addressed. Phase model verified (label empty, T-750 in_progress, strays re-parented, 357/1013 survive rebuild); Phase-6 deletions clean (no dangling refs, kept connectors intact). Ready to merge.
jpmschweitzer closed this pull request 2026-06-06 23:09:16 +02:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jpmschweitzer/settled-reach#155