← back to Homesonspec
auto-data-snapshot: 2026-09-11T08:57:34 (9 data files) — ops/TK-11364-validationevent-approval.md ops/o3-partition-PROVEN-runbook.md verification/TK-11364/app-after.jsonl verification/TK-11364/independent-after.txt verification/TK-11364/previous-e2e-proof.json
df934fe29e80518365cf5f901cfb607e695b4b9c · 2026-09-11 08:59:56 -0700 · auto-commit-fleet
Files touched
M ops/TK-11364-validationevent-approval.mdM ops/o3-partition-PROVEN-runbook.mdA verification/TK-11364/app-after.jsonlA verification/TK-11364/independent-after.txtA verification/TK-11364/previous-e2e-proof.jsonA verification/TK-11364/processes-after.jsonA verification/TK-11364/production-before.txtA verification/TK-11364/production-run.txtM verification/e2e-proof.json
Diff
commit df934fe29e80518365cf5f901cfb607e695b4b9c
Author: auto-commit-fleet <steve@designerwallcoverings.com>
Date: Fri Sep 11 08:59:56 2026 -0700
auto-data-snapshot: 2026-09-11T08:57:34 (9 data files) — ops/TK-11364-validationevent-approval.md ops/o3-partition-PROVEN-runbook.md verification/TK-11364/app-after.jsonl verification/TK-11364/independent-after.txt verification/TK-11364/previous-e2e-proof.json
---
ops/TK-11364-validationevent-approval.md | 119 ++++++-------------------
ops/o3-partition-PROVEN-runbook.md | 9 +-
verification/TK-11364/app-after.jsonl | 4 +
verification/TK-11364/independent-after.txt | 60 +++++++++++++
verification/TK-11364/previous-e2e-proof.json | 31 +++++++
verification/TK-11364/processes-after.json | 25 ++++++
verification/TK-11364/production-before.txt | 19 ++++
verification/TK-11364/production-run.txt | 67 ++++++++++++++
verification/e2e-proof.json | 122 +++++++++++++++++++++-----
9 files changed, 341 insertions(+), 115 deletions(-)
diff --git a/ops/TK-11364-validationevent-approval.md b/ops/TK-11364-validationevent-approval.md
index 1f66582d..1328b0eb 100644
--- a/ops/TK-11364-validationevent-approval.md
+++ b/ops/TK-11364-validationevent-approval.md
@@ -1,90 +1,29 @@
-# TK-11364 — remaining ValidationEvent conversion
-
-Status: **HOLD — production DDL gated; existing script requires revision.**
-Owner: `codex-run-11364`. Verified 2026-09-11 00:56:36 UTC
-(2026-09-10 5:56 PM America/Los_Angeles).
-
-## Current state, independently verified
-
-- SourceEvidence is already a native RANGE(createdAt) partitioned table:
- legacy before 2026-10-01, default, and 15 monthly partitions through
- December 2027. All 17 children have effective SELECT and INSERT privileges
- for the app role. Do not rerun its conversion.
-- ValidationEvent is still an ordinary table, 14 GB, with zero partitions.
- Its runAt column is timestamp(3) without time zone, NOT NULL.
-- ValidationEvent has PRIMARY KEY(id) and a validated stagedRecordId FK
- with ON UPDATE CASCADE ON DELETE RESTRICT. No incoming FK appeared in
- the catalog query.
-- pg_partman is absent. The newer TK-11363 native partition approach has
- superseded the original extension/rewrite proposal; installing pg_partman
- is not part of this proposed action.
-- Root filesystem has 121 GiB available, 82% used. The earlier 44 GiB / 75 GiB
- disk blocker no longer describes current state.
-- Default table privileges for postgres include homesonspec=arwdDxt.
- No database sessions were waiting on locks at the measurement time.
-- A real published home page returned HTTP 200:
- https://homesonspec.com/homes/cms52dly81wntdzqsqppje24n
-
-These are current-state checks, not a fresh proof of the historical conversion's
-row preservation, write routing, or archive behavior. This session made no
-production mutations. TK-11363 records the prior conversion and its verification.
-
-## Proposed gated action
-
-In an explicitly approved maintenance window, convert only ValidationEvent to
-native monthly RANGE(runAt) partitions using the no-rewrite legacy ATTACH
-approach. Preserve every existing row and its heap, the stagedRecordId index,
-the existing FK actions, and app permissions. Provide a default partition and
-forward months; never install automatic DROP retention. Archival is a separately
-approved DETACH operation with retained history and a retrieval plan.
-
-The existing candidate is `ops/o3b-apply-validationevent.sh` (introduced in
-commit 3e4d499f). TK-11363 reports a copy at `/root/o3b.sh`, but this session
-did not verify that remote copy. **Do not execute that staged copy as-is.**
-
-## Required before an execution request
-
-1. Correct and locally rehearse the candidate's error handling. It currently
- suppresses all forward-partition FK creation errors with `|| true`.
- The negative FK probe runs an expected-failing psql command under
- `set -euo pipefail`, so the script can exit before its app-role query
- and final partition verification. Catch and assert SQLSTATE 23503 in
- a rolled-back test; reject unexpected outcomes without leaving a probe row.
-2. Preserve FK semantics explicitly. Forward/default FKs currently omit
- ON UPDATE CASCADE ON DELETE RESTRICT, unlike the live legacy FK.
- Verify validated FK definitions and effective privileges on every child.
-3. Bound DDL work, not just lock acquisition. The swap currently sets only
- lock_timeout; a statement_timeout is also needed to bound unexpected work
- after acquiring locks. Rehearse transactional failure and retry behavior.
-4. Assert rather than merely print the expected partition count, default
- contents, successful app-role queries, and HTTP results. A SQL query with
- the admin page's shape does not prove the authenticated admin page works.
-5. Validate a current backup's contents, including the full ValidationEvent
- data block, and rehearse a rollback that retains rows written to forward
- and default partitions after cutover. Age and filename alone are insufficient.
-6. Recheck catalog topology, oldest/newest runAt values, grants, backup, traffic,
- and resource headroom immediately before the window. The fixed October 2026
- cutoff must be reconsidered if execution is deferred beyond that boundary.
-
-## Acceptance and stop conditions
-
-Before/after evidence must prove row preservation under a defined writer window,
-unchanged legacy heap identity, monthly insert routing, FK rejection and original
-FK actions, app-role read/write access, partition pruning, real authenticated
-admin validation flow, public home HTTP success, and recovery after an interrupted
-attempt. Rehearse DETACH/re-ATTACH in scratch with all history retained.
-
-The prior SourceEvidence conversion caused approximately seven minutes of blocked
-queries and a public 500, per TK-11363. Its revised design must be checked at the
-application boundary as well as the database boundary before O3b is approved.
-
-Production conversion is not authorized by the current request: Steve explicitly
-instructed this session to draft gated actions to pending-approval and stop.
-TK-11363 also records three prior automatic-approval denials of the O3b run;
-their exact classifier rationale is not present in that ticket. This session
-has not retried that production mutation or attempted another command shape.
-
-TK-11364 remains blocked and must not be marked done until ValidationEvent is
-converted and the full acceptance journey passes. Disk space is not the current
-blocker. The next safe work is local candidate revision/rehearsal; production
-execution additionally requires explicit maintenance-window authorization.
+# TK-11364 — approval executed and verified
+
+Steve approved “ungate and run” on 2026-09-11. The authorized ValidationEvent
+conversion ran successfully using implementation commit `90b58b81` and package
+SHA256 `b72545fdbc30f43de9838e3d9bf2608aef16026867249dcec4ce451c068bf9dd`.
+
+- Before/after cutover: **73,482,427 rows**, exact match.
+- Original heap OID/filenode **5911890**, PK **5913194**, hot index **5913277** retained.
+- Parent **7602286**; **17 partitions** with original FK actions, child PKs and app grants.
+- Independent 15:40 UTC check: **73,494,584 rows** in both parent and legacy,
+ default empty; live ingestion had added rows after cutover.
+- Authenticated admin all/failed pages: HTTP 200, 100 data rows each.
+ Unauthenticated request: 401. Public home: 200.
+- SourceEvidence remains partitioned with 17 children.
+- No history dropped; no automatic retention or archival job installed.
+
+The initial HOLD and script review are preserved in commit `36033811` and
+`verification/TK-11364/previous-e2e-proof.json`. All identified migration
+corrections were implemented and rehearsed before execution. Production
+backup content was validated, and the exact SQL passed the private PG14
+failure/retry/routing/rollback rehearsal.
+
+Current procedure and rollback limitations: `ops/o3b/README.md`.
+Final evidence: `verification/e2e-proof.json` and `verification/TK-11364/`.
+Local PKs enforce IDs per partition; the parent has no global PK. A rollback
+with conflicting IDs fails atomically and retains all rows for reconciliation.
+The real application has no ValidationEvent findUnique(id) call site.
+
+The production approval is fulfilled. No remaining execution request in this memo.
diff --git a/ops/o3-partition-PROVEN-runbook.md b/ops/o3-partition-PROVEN-runbook.md
index 31c78b5f..a0a2f525 100644
--- a/ops/o3-partition-PROVEN-runbook.md
+++ b/ops/o3-partition-PROVEN-runbook.md
@@ -1,6 +1,13 @@
# O3 — SourceEvidence partitioning: PROVEN runbook (ATTACH, no rewrite)
-- **Ticket:** TK-11363 (successor to TK-10878) · **Authored:** 2026-09-10 · **Status:** feasibility PROVEN on a scratch DB; prod execution still GATED.
+> **Historical design, not an execution script.** SourceEvidence was applied under
+> TK-11363 on September 10; ValidationEvent was applied under TK-11364 on
+> September 11. Both now have 17 partitions. Use `ops/o3b/README.md` and
+> `verification/TK-11364/` for the current procedure/evidence. The example below
+> predates the FK-before-ATTACH incident and missing app grants: do not rerun it.
+> Partition-local PKs do not enforce global ID uniqueness.
+
+- **Ticket:** TK-11363 (successor to TK-10878) · **Authored:** 2026-09-10 · **Status:** historical, superseded by the applied procedures.
- **Supersedes the cost assumptions in** `ops/o3-partition-and-disk-plan.md` and the TK-11363 opening comment.
## TL;DR — three blockers we believed in are now disproven
diff --git a/verification/TK-11364/app-after.jsonl b/verification/TK-11364/app-after.jsonl
new file mode 100644
index 00000000..52dea10d
--- /dev/null
+++ b/verification/TK-11364/app-after.jsonl
@@ -0,0 +1,4 @@
+{"name":"admin-denied","status":401,"marker":true,"rows":0,"ms":54,"ok":true}
+{"name":"admin-all","status":200,"marker":true,"rows":101,"ms":13029,"ok":true}
+{"name":"admin-failed","status":200,"marker":true,"rows":101,"ms":15229,"ok":true}
+{"name":"public-home","status":200,"marker":true,"rows":22,"ms":234,"ok":true}
diff --git a/verification/TK-11364/independent-after.txt b/verification/TK-11364/independent-after.txt
new file mode 100644
index 00000000..35d60ade
--- /dev/null
+++ b/verification/TK-11364/independent-after.txt
@@ -0,0 +1,60 @@
+BEGIN
+SET
+ measured_at
+-------------------------------
+ 2026-09-11 15:40:08.536712+00
+(1 row)
+
+ parent_rows | legacy_rows | default_rows
+-------------+-------------+--------------
+ 73494584 | 73494584 | 0
+(1 row)
+
+ oid | relfilenode | relname | relkind
+---------+-------------+-------------------------------+---------
+ 5911890 | 5911890 | ValidationEvent_p_legacy | r
+ 5913194 | 5913194 | ValidationEvent_p_legacy_pkey | i
+ 5913277 | 5913277 | VE_p_legacy_staged_idx | i
+ 7526113 | 0 | SourceEvidence | p
+ 7602286 | 0 | ValidationEvent | p
+(5 rows)
+
+ parent | children
+-----------------+----------
+ SourceEvidence | 17
+ ValidationEvent | 17
+(2 rows)
+
+ relname | bounds | pk_count | valid_original_fk | app_read | app_write
+---------------------------+--------------------------------------------------------------------+----------+-------------------+----------+-----------
+ ValidationEvent_p_2026_10 | FOR VALUES FROM ('2026-10-01 00:00:00') TO ('2026-11-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2026_11 | FOR VALUES FROM ('2026-11-01 00:00:00') TO ('2026-12-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2026_12 | FOR VALUES FROM ('2026-12-01 00:00:00') TO ('2027-01-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2027_01 | FOR VALUES FROM ('2027-01-01 00:00:00') TO ('2027-02-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2027_02 | FOR VALUES FROM ('2027-02-01 00:00:00') TO ('2027-03-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2027_03 | FOR VALUES FROM ('2027-03-01 00:00:00') TO ('2027-04-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2027_04 | FOR VALUES FROM ('2027-04-01 00:00:00') TO ('2027-05-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2027_05 | FOR VALUES FROM ('2027-05-01 00:00:00') TO ('2027-06-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2027_06 | FOR VALUES FROM ('2027-06-01 00:00:00') TO ('2027-07-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2027_07 | FOR VALUES FROM ('2027-07-01 00:00:00') TO ('2027-08-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2027_08 | FOR VALUES FROM ('2027-08-01 00:00:00') TO ('2027-09-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2027_09 | FOR VALUES FROM ('2027-09-01 00:00:00') TO ('2027-10-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2027_10 | FOR VALUES FROM ('2027-10-01 00:00:00') TO ('2027-11-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2027_11 | FOR VALUES FROM ('2027-11-01 00:00:00') TO ('2027-12-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_2027_12 | FOR VALUES FROM ('2027-12-01 00:00:00') TO ('2028-01-01 00:00:00') | 1 | 1 | t | t
+ ValidationEvent_p_default | DEFAULT | 1 | 1 | t | t
+ ValidationEvent_p_legacy | FOR VALUES FROM (MINVALUE) TO ('2026-10-01 00:00:00') | 1 | 1 | t | t
+(17 rows)
+
+ QUERY PLAN
+------------------------------------------------------------------------------------------------------------------------------------------------
+ Seq Scan on "ValidationEvent_p_2026_10" "ValidationEvent"
+ Filter: (("runAt" >= '2026-10-01 00:00:00'::timestamp without time zone) AND ("runAt" < '2026-11-01 00:00:00'::timestamp without time zone))
+(2 rows)
+
+ lock_waiters
+--------------
+ 0
+(1 row)
+
+COMMIT
diff --git a/verification/TK-11364/previous-e2e-proof.json b/verification/TK-11364/previous-e2e-proof.json
new file mode 100644
index 00000000..0e9a7812
--- /dev/null
+++ b/verification/TK-11364/previous-e2e-proof.json
@@ -0,0 +1,31 @@
+{
+ "ticket": "TK-11364-homesonspec-o3-pg-partman-time-partition",
+ "agent": "codex-run-11364",
+ "intent": "Reconcile remaining O3 scope against live state and prepare the required production approval handoff",
+ "risk_tier": "R0 documentation with read-only production verification; proposed conversion is R4 and unexecuted",
+ "environment": "Local homesonspec checkout; read-only PostgreSQL catalog on kamatera; public home GET",
+ "baseline_commit": "0200179cc46d997fbb241c4cd1d79a7c1e37857d",
+ "timestamp": "2026-09-11T00:56:36Z",
+ "baseline": "Working tree clean. Ticket opening predates the TK-11363 SourceEvidence conversion. ValidationEvent conversion previously denied and unexecuted.",
+ "commands_executed": [
+ "TK_AGENT=codex-run-11364 tk inbox; tk show TK-11364-homesonspec-o3-pg-partman-time-partition; tk take TK-11364-homesonspec-o3-pg-partman-time-partition",
+ "tk show TK-11363; read ops/o3b-apply-validationevent.sh and O3 runbooks; inspect ValidationEvent schema and application call sites",
+ "ssh kamatera: date -u; df -h /; runuser -u postgres -- psql -X -v ON_ERROR_STOP=1 -d homesonspec; BEGIN READ ONLY; SET LOCAL statement_timeout='15s'; catalog SELECTs; COMMIT",
+ "curl -fsS --max-time 25 -o /tmp/TK-11364-home.html -w '%{http_code}\\n' https://homesonspec.com/homes/cms52dly81wntdzqsqppje24n",
+ "bash -n ops/o3b-apply-validationevent.sh"
+ ],
+ "checks": [
+ {"boundary":"database catalog", "verdict":"PASS", "observed":"SourceEvidence relkind=p, RANGE(createdAt), 17 children: legacy/default/15 monthly through December 2027"},
+ {"boundary":"database authorization", "verdict":"PASS", "observed":"All 17 SourceEvidence children have effective app SELECT and INSERT; postgres default table ACL grants homesonspec=arwdDxt"},
+ {"boundary":"remaining conversion", "verdict":"FAIL", "observed":"ValidationEvent relkind=r, 14 GB, zero partitions. Ticket outcome is incomplete"},
+ {"boundary":"disk and locks", "verdict":"PASS", "observed":"121 GiB free, 82% root usage; zero homesonspec sessions waiting on locks at measurement"},
+ {"boundary":"public HTTP", "verdict":"PASS", "observed":"Published /homes/cms52dly81wntdzqsqppje24n returned 200"},
+ {"boundary":"script syntax", "verdict":"PASS", "observed":"bash -n exit 0; this does not establish behavioral correctness"},
+ {"boundary":"candidate safety review", "verdict":"FAIL", "observed":"FK creation errors suppressed; expected FK-error probe can terminate script early; new FKs omit legacy CASCADE/RESTRICT actions; default count is printed rather than asserted"},
+ {"boundary":"production migration and persisted data", "verdict":"SKIP", "reason":"Explicit production gate; no DDL or probe writes performed"},
+ {"boundary":"negative FK, retry, rollback, authenticated admin flow", "verdict":"SKIP", "reason":"No new execution or scratch rehearsal in this session; required before migration success can be claimed"}
+ ],
+ "artifacts": ["ops/TK-11364-validationevent-approval.md"],
+ "cleanup": "No production rows, schemas, services, schedules or permissions changed. Local report and approval draft intentionally retained. Public page response retained in /tmp/TK-11364-home.html.",
+ "verdict": "BLOCKED — approval handoff prepared; production conversion and critical acceptance checks remain incomplete"
+}
diff --git a/verification/TK-11364/processes-after.json b/verification/TK-11364/processes-after.json
new file mode 100644
index 00000000..7dece49b
--- /dev/null
+++ b/verification/TK-11364/processes-after.json
@@ -0,0 +1,25 @@
+{
+ "timestamp": "2026-09-11T15:47:47.163Z",
+ "processes": [
+ {
+ "name": "homesonspec-ingest",
+ "pid": 1580002,
+ "status": "online"
+ },
+ {
+ "name": "homesonspec-workers",
+ "pid": 1585071,
+ "status": "online"
+ },
+ {
+ "name": "homesonspec-web",
+ "pid": 1599576,
+ "status": "online"
+ },
+ {
+ "name": "homesonspec-admin",
+ "pid": 1599592,
+ "status": "online"
+ }
+ ]
+}
diff --git a/verification/TK-11364/production-before.txt b/verification/TK-11364/production-before.txt
new file mode 100644
index 00000000..a4f4ae4e
--- /dev/null
+++ b/verification/TK-11364/production-before.txt
@@ -0,0 +1,19 @@
+BEGIN
+SET
+ measured_at | rows | first_run | last_run
+-------------------------------+----------+-------------------------+-------------------------
+ 2026-09-11 15:34:27.072695+00 | 73482427 | 2026-07-22 18:26:29.378 | 2026-09-11 13:06:30.847
+(1 row)
+
+ oid | relfilenode | relkind
+---------+-------------+---------
+ 5911890 | 5911890 | r
+(1 row)
+
+ indexrelid | indexrelid | indisvalid
+--------------------------------------+------------+------------
+ "ValidationEvent_pkey" | 5913194 | t
+ "ValidationEvent_stagedRecordId_idx" | 5913277 | t
+(2 rows)
+
+COMMIT
diff --git a/verification/TK-11364/production-run.txt b/verification/TK-11364/production-run.txt
new file mode 100644
index 00000000..d6a1a9b8
--- /dev/null
+++ b/verification/TK-11364/production-run.txt
@@ -0,0 +1,67 @@
+Validated backup: /root/backups/db/homesonspec_2026-09-11_1020.dump (1789123222:12837479359)
+SET
+SET
+SET
+SET
+BEGIN
+LOCK TABLE
+DO
+COMMIT
+SET
+ALTER TABLE
+SET
+SET
+SET
+SET
+SET
+BEGIN
+LOCK TABLE
+SELECT 1
+DO
+ set_config
+------------
+ none
+(1 row)
+
+ALTER TABLE
+DO
+ALTER INDEX
+ALTER INDEX
+CREATE TABLE
+CREATE INDEX
+ALTER TABLE
+DO
+DO
+ oid | relfilenode | pk_oid | index_oid
+---------+-------------+---------+-----------
+ 5911890 | 5911890 | 5913194 | 5913277
+(1 row)
+
+COMMIT
+SET
+SET
+SET
+SET
+BEGIN
+DO
+ physical_table | rows
+----------------------------+----------
+ "ValidationEvent_p_legacy" | 73482427
+(1 row)
+
+ retained_heap
+---------------
+ 5911890
+(1 row)
+
+COMMIT
+BEGIN
+SET
+DO
+ROLLBACK
+ result
+----------------------------------------------------------------------------------------
+ PASS: topology, grants, PKs, FKs, indexes and 17-range routing; probe rows rolled back
+(1 row)
+
+DATABASE VERIFIED; authenticated admin + public HTTP and monitoring are required before ticket completion.
diff --git a/verification/e2e-proof.json b/verification/e2e-proof.json
index 0e9a7812..863c2f3e 100644
--- a/verification/e2e-proof.json
+++ b/verification/e2e-proof.json
@@ -1,31 +1,105 @@
{
"ticket": "TK-11364-homesonspec-o3-pg-partman-time-partition",
"agent": "codex-run-11364",
- "intent": "Reconcile remaining O3 scope against live state and prepare the required production approval handoff",
- "risk_tier": "R0 documentation with read-only production verification; proposed conversion is R4 and unexecuted",
- "environment": "Local homesonspec checkout; read-only PostgreSQL catalog on kamatera; public home GET",
- "baseline_commit": "0200179cc46d997fbb241c4cd1d79a7c1e37857d",
- "timestamp": "2026-09-11T00:56:36Z",
- "baseline": "Working tree clean. Ticket opening predates the TK-11363 SourceEvidence conversion. ValidationEvent conversion previously denied and unexecuted.",
+ "intent": "Complete authorized native monthly ValidationEvent partitioning without deleting history; reconcile existing SourceEvidence conversion",
+ "risk_tier": "R4",
+ "environment": "Kamatera PostgreSQL14.24 homesonspec; private PostgreSQL14.23 rehearsal; existing authenticated admin and public web",
+ "implementation_commit": "90b58b81",
+ "package_sha256": "b72545fdbc30f43de9838e3d9bf2608aef16026867249dcec4ce451c068bf9dd",
+ "timestamp": "2026-09-11T15:47:47.244857+00:00",
+ "checks": [
+ {
+ "boundary": "authorization",
+ "verdict": "PASS",
+ "evidence": "Steve explicitly said ungate and run; scoped to the previously drafted ValidationEvent conversion"
+ },
+ {
+ "boundary": "private PostgreSQL rehearsal",
+ "verdict": "PASS",
+ "evidence": "41 command checks plus full-row composite digest and heap-identity assertions; rename/timeout/FK failure, retry, all routes, PK rejection, FK CASCADE/RESTRICT, pruning, DETACH/reattach, successful and conflicting rollback; cluster stopped"
+ },
+ {
+ "boundary": "production backup",
+ "verdict": "PASS",
+ "evidence": "Latest homesonspec_2026-09-11_1020.dump TOC includes ValidationEvent; complete table data decompressed to /dev/null; archive age/size/mtime checked unchanged"
+ },
+ {
+ "boundary": "atomic migration",
+ "verdict": "PASS",
+ "evidence": "Applied exact package checksum; wrapper exit 0; 5s statement/2s lock/20s outer cutover budgets; no heap scan or app query within exclusive-lock swap"
+ },
+ {
+ "boundary": "row preservation",
+ "verdict": "PASS",
+ "evidence": "73482427 before and immediate after; original heap5911890, PK5913194, staged index5913277 physically retained"
+ },
+ {
+ "boundary": "live database probes",
+ "verdict": "PASS",
+ "evidence": "Separate post-commit app-role insert/delete routing and invalid-parent FK probes across17 ranges passed; all transactional probes rolled back"
+ },
+ {
+ "boundary": "independent final catalog/count check",
+ "verdict": "PASS",
+ "evidence": "2026-09-11T15:40:08Z repeatable-read parent73494584 equals legacy73494584, default0; original storage IDs retained;17children each PK+validated CASCADE/RESTRICT FK and effective read/write grants"
+ },
+ {
+ "boundary": "partition pruning",
+ "verdict": "PASS",
+ "evidence": "October2026 query plan scans only ValidationEvent_p_2026_10"
+ },
+ {
+ "boundary": "authenticated admin",
+ "verdict": "PASS",
+ "evidence": "Before and after /validation and /validation?failed=1 returned200 with101 table rows including header; before15.1s/11.1s, after13.0s/15.2s"
+ },
+ {
+ "boundary": "negative auth",
+ "verdict": "PASS",
+ "evidence": "Unauthenticated admin returns401 and authentication-required body before and after"
+ },
+ {
+ "boundary": "public HTTP",
+ "verdict": "PASS",
+ "evidence": "Real published home cms52dly81wntdzqsqppje24n returned200 before/after"
+ },
+ {
+ "boundary": "post-action monitoring",
+ "verdict": "PASS",
+ "evidence": "No lock waiters in sampled observations; independent check several minutes after cutover observed12157 additional rows from ongoing ingestion"
+ },
+ {
+ "boundary": "existing SourceEvidence scope",
+ "verdict": "PASS",
+ "evidence": "Independent final catalog confirms SourceEvidence remains partitioned with17children"
+ }
+ ],
"commands_executed": [
- "TK_AGENT=codex-run-11364 tk inbox; tk show TK-11364-homesonspec-o3-pg-partman-time-partition; tk take TK-11364-homesonspec-o3-pg-partman-time-partition",
- "tk show TK-11363; read ops/o3b-apply-validationevent.sh and O3 runbooks; inspect ValidationEvent schema and application call sites",
- "ssh kamatera: date -u; df -h /; runuser -u postgres -- psql -X -v ON_ERROR_STOP=1 -d homesonspec; BEGIN READ ONLY; SET LOCAL statement_timeout='15s'; catalog SELECTs; COMMIT",
- "curl -fsS --max-time 25 -o /tmp/TK-11364-home.html -w '%{http_code}\\n' https://homesonspec.com/homes/cms52dly81wntdzqsqppje24n",
- "bash -n ops/o3b-apply-validationevent.sh"
+ "python3 ops/o3b/rehearse.py",
+ "bash -n ops/o3b-apply-validationevent.sh",
+ "full-table pg_restore --data-only -t ValidationEvent -f /dev/null of fresh production dump",
+ "bash /root/o3b-TK11364-20260911/ops/o3b-apply-validationevent.sh --approved-TK-11364",
+ "separate psql repeatable-read catalog/count/pruning verifier",
+ "authenticated admin all/failed GET; unauthenticated GET; published home GET",
+ "pm2 process-status readback"
],
- "checks": [
- {"boundary":"database catalog", "verdict":"PASS", "observed":"SourceEvidence relkind=p, RANGE(createdAt), 17 children: legacy/default/15 monthly through December 2027"},
- {"boundary":"database authorization", "verdict":"PASS", "observed":"All 17 SourceEvidence children have effective app SELECT and INSERT; postgres default table ACL grants homesonspec=arwdDxt"},
- {"boundary":"remaining conversion", "verdict":"FAIL", "observed":"ValidationEvent relkind=r, 14 GB, zero partitions. Ticket outcome is incomplete"},
- {"boundary":"disk and locks", "verdict":"PASS", "observed":"121 GiB free, 82% root usage; zero homesonspec sessions waiting on locks at measurement"},
- {"boundary":"public HTTP", "verdict":"PASS", "observed":"Published /homes/cms52dly81wntdzqsqppje24n returned 200"},
- {"boundary":"script syntax", "verdict":"PASS", "observed":"bash -n exit 0; this does not establish behavioral correctness"},
- {"boundary":"candidate safety review", "verdict":"FAIL", "observed":"FK creation errors suppressed; expected FK-error probe can terminate script early; new FKs omit legacy CASCADE/RESTRICT actions; default count is printed rather than asserted"},
- {"boundary":"production migration and persisted data", "verdict":"SKIP", "reason":"Explicit production gate; no DDL or probe writes performed"},
- {"boundary":"negative FK, retry, rollback, authenticated admin flow", "verdict":"SKIP", "reason":"No new execution or scratch rehearsal in this session; required before migration success can be claimed"}
+ "artifacts": [
+ "verification/TK-11364/scratch-proof.json",
+ "verification/TK-11364/production-before.txt",
+ "verification/TK-11364/production-run.txt",
+ "verification/TK-11364/independent-after.txt",
+ "verification/TK-11364/app-before.jsonl",
+ "verification/TK-11364/app-after.jsonl",
+ "verification/TK-11364/processes-after.json",
+ "verification/TK-11364/dtd-verdict.md"
+ ],
+ "cleanup": "Private cluster stopped and retained for audit; all live probe transactions rolled back. Original history remains attached. No services were restarted, no data was dropped, no retention job installed. Versioned remote package retained.",
+ "rollback": "Rehearsed data-retaining rollback copies forward/default rows back and retains old partitioned parent. Cross-partition duplicate IDs abort rollback atomically without loss. See ops/o3b/README.md.",
+ "limitations": [
+ "Native partitions replace the old pg_partman/rewrite proposal. No extension needed or installed.",
+ "Parent has no global id PK; every ValidationEvent child has local id PK.",
+ "Forward months precreated through December2027 with default fallback; future additions require the documented FK/PK/grant procedure.",
+ "Monitoring is sampled; no claim of continuous zero-wait telemetry."
],
- "artifacts": ["ops/TK-11364-validationevent-approval.md"],
- "cleanup": "No production rows, schemas, services, schedules or permissions changed. Local report and approval draft intentionally retained. Public page response retained in /tmp/TK-11364-home.html.",
- "verdict": "BLOCKED — approval handoff prepared; production conversion and critical acceptance checks remain incomplete"
+ "verdict": "PASS \u2014 approved migration applied and critical operational boundaries verified"
}
← 90b58b81 Rehearse and harden ValidationEvent partition conversion
·
back to Homesonspec
·
Record verified production ValidationEvent partitioning 42bd9935 →