From 67a6f9205bd27f22f106f1a5b46400f9caa67417 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Mon, 19 Oct 2026 10:57:38 +0200 Subject: [PATCH] =?UTF-8?q?chore(plan):=20T-7=20=E2=80=94=20code=20done,?= =?UTF-8?q?=20held=20for=20the=20deployment=20milestone?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .pql/changelog/ticket_history/2026-10.sql | 7 +++++++ .pql/changelog/tickets/2026-10.sql | 5 +++++ 2 files changed, 12 insertions(+) create mode 100644 .pql/changelog/ticket_history/2026-10.sql diff --git a/.pql/changelog/ticket_history/2026-10.sql b/.pql/changelog/ticket_history/2026-10.sql new file mode 100644 index 0000000..ff4c802 --- /dev/null +++ b/.pql/changelog/ticket_history/2026-10.sql @@ -0,0 +1,7 @@ +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06GN6KV0MHDTH18NEK0AYQ9514', 'description', 'A `pg_dump_executor` that backs up every database on postgres-shared, daily, with one restore proven — the workspace''s databases have no consistent backup today (the nightly config backup tars the live data directory). Driven by workspace T-175; the design is workspace D-68 (`cladmin/governance/decisions/office.md`). + +Shape: modelled on `src/executors/portainer_backup_executor.py`; dumps server-side with `docker exec postgres-shared pg_dump -Fc` per database plus `pg_dumpall --globals-only` (the image''s own client is 17.10, the server 16.15); output `/mnt/media/backups/postgres`, 14 days; registered as a daily 01:30 UTC job.', 'A `pg_dump_executor` that backs up every database on postgres-shared, daily, with one restore proven — the workspace''s databases have no consistent backup today (the nightly config backup tars the live data directory). Driven by workspace T-175; the design is workspace D-68 (`cladmin/governance/decisions/office.md`). + +Shape: modelled on `src/executors/portainer_backup_executor.py`; dumps server-side with `docker exec postgres-shared pg_dump -Fc` per database plus `pg_dumpall --globals-only` (the image''s own client is 17.10, the server 16.15); output `/mnt/media/backups/postgres`, 14 days; registered as a daily 01:30 UTC job. + +**Code done 2026-10-19** in `a14f134` (round scheduler-T-7-001): `src/executors/pg_dump_executor.py` + 32 tests; `make test` 196 passed, 19 deselected (183 → 215 collected); mutation-checked (0600, empty TOC). Verified live read-only: a PG16 custom archive of `test_scheduler` lists 19 TOC entries through the image''s 17.10 `pg_restore`. Not yet released, mounted, registered or restore-proven — that is the deployment milestone (workspace T-175).', NULL, '2026-10-19 08:57:29', '2026-10-19 08:57:29.314', '2026-10-19 08:57:29.314', NULL, '6a59995699b60f1b7e6006a03c1a3fb8', 2) ON CONFLICT(hash) DO NOTHING; diff --git a/.pql/changelog/tickets/2026-10.sql b/.pql/changelog/tickets/2026-10.sql index 677b03d..af0a06c 100644 --- a/.pql/changelog/tickets/2026-10.sql +++ b/.pql/changelog/tickets/2026-10.sql @@ -15,3 +15,8 @@ Done when: the docstring and `TASK_REGISTRATION.md` show a working example taken INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06GN6KV0MHDTH18NEK0AYQ9514', 'task', NULL, 'pg_dump executor: back up every postgres-shared database, with a proven restore', 'A `pg_dump_executor` that backs up every database on postgres-shared, daily, with one restore proven — the workspace''s databases have no consistent backup today (the nightly config backup tars the live data directory). Driven by workspace T-175; the design is workspace D-68 (`cladmin/governance/decisions/office.md`). Shape: modelled on `src/executors/portainer_backup_executor.py`; dumps server-side with `docker exec postgres-shared pg_dump -Fc` per database plus `pg_dumpall --globals-only` (the image''s own client is 17.10, the server 16.15); output `/mnt/media/backups/postgres`, 14 days; registered as a daily 01:30 UTC job.', 'backlog', 'high', NULL, NULL, NULL, '2026-10-19 08:37:53.444', '2026-10-19 08:37:53.444', NULL, 'a7fd33e8ccf7734935d6593e818a2f2b', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at >= tickets.updated_at; +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06GN6KV0MHDTH18NEK0AYQ9514', 'task', NULL, 'pg_dump executor: back up every postgres-shared database, with a proven restore', 'A `pg_dump_executor` that backs up every database on postgres-shared, daily, with one restore proven — the workspace''s databases have no consistent backup today (the nightly config backup tars the live data directory). Driven by workspace T-175; the design is workspace D-68 (`cladmin/governance/decisions/office.md`). + +Shape: modelled on `src/executors/portainer_backup_executor.py`; dumps server-side with `docker exec postgres-shared pg_dump -Fc` per database plus `pg_dumpall --globals-only` (the image''s own client is 17.10, the server 16.15); output `/mnt/media/backups/postgres`, 14 days; registered as a daily 01:30 UTC job. + +**Code done 2026-10-19** in `a14f134` (round scheduler-T-7-001): `src/executors/pg_dump_executor.py` + 32 tests; `make test` 196 passed, 19 deselected (183 → 215 collected); mutation-checked (0600, empty TOC). Verified live read-only: a PG16 custom archive of `test_scheduler` lists 19 TOC entries through the image''s 17.10 `pg_restore`. Not yet released, mounted, registered or restore-proven — that is the deployment milestone (workspace T-175).', 'backlog', 'high', NULL, NULL, NULL, '2026-10-19 08:37:53.444', '2026-10-19 08:57:29.313', NULL, '317f4ab02ee8e077989c1452c39b91f1', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at >= tickets.updated_at;