← back to Nationalrealestate
record TK-10155 production lifecycle proof
8e929e21c0842d3ffdc9df87fdb3a059229088b4 · 2026-08-31 11:32:40 -0700 · Steve Abrams
Files touched
A verification/e2e-proof.json
Diff
commit 8e929e21c0842d3ffdc9df87fdb3a059229088b4
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Aug 31 11:32:40 2026 -0700
record TK-10155 production lifecycle proof
---
verification/e2e-proof.json | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/verification/e2e-proof.json b/verification/e2e-proof.json
new file mode 100644
index 0000000..a476652
--- /dev/null
+++ b/verification/e2e-proof.json
@@ -0,0 +1,36 @@
+{
+ "ticket": "TK-10155-listing-lifecycle-tracking-withdrawal-sn",
+ "intent": "Activate listing lifecycle and withdrawal snapshots on the Kamatera production USRE database and restore the public lifecycle APIs.",
+ "risk_tier": "R4",
+ "environment": "production: usrealestate.agentabrams.com; Kamatera app /root/public-projects/nationalrealestate",
+ "build_identity": "local HEAD f8df3cd; production package nationalrealestate@0.18.0",
+ "timestamp": "2026-08-31T18:29:00Z",
+ "approval": "Steve explicitly resumed .claude/yolo-queue/pending-approval/TK-10155-usre-lifecycle-prod-activation.md; GATE 1 only.",
+ "baseline": {
+ "authenticated_listings": "HTTP 500",
+ "authenticated_withdrawn": "HTTP 500",
+ "cause": "Production lifecycle schema incomplete; migration 023 absent from production checkout."
+ },
+ "actions": [
+ "Discovered PM2 exec cwd as /root/public-projects/nationalrealestate.",
+ "Transferred only db/migrations/023_lifecycle_fk_on_delete.sql; SHA-256 5c4be7b0083fb07bfdeb136b7c73ddafc1ad6d1e46f6d795bcb2e091fa76b4e0 matched production.",
+ "Ran npm run migrate; 014-016 were already ledgered and 023 applied successfully.",
+ "Ran npm run lifecycle:backfill; production retained 72 events and 72 snapshots with zero duplicate inserts.",
+ "Repeated migrate and backfill to prove idempotency; every migration skipped and inserts remained zero."
+ ],
+ "assertions": [
+ {"boundary": "public API authenticated listings", "result": "PASS", "evidence": "GET /api/listings?limit=1 returned HTTP 200 with count=1 and a lifecycle-enriched listing."},
+ {"boundary": "public API authenticated withdrawn", "result": "PASS", "evidence": "GET /api/withdrawn returned HTTP 200 with {count:0,rows:[]}."},
+ {"boundary": "authentication negative path", "result": "PASS", "evidence": "Both endpoints returned HTTP 401 without Basic Auth."},
+ {"boundary": "database persistence", "result": "PASS", "evidence": "Direct production query returned events=72 and snapshots=72."},
+ {"boundary": "migration ledger", "result": "PASS", "evidence": "023_lifecycle_fk_on_delete.sql appears exactly once in schema_migrations."},
+ {"boundary": "delete durability constraints", "result": "PASS", "evidence": "Both lifecycle foreign keys have pg_constraint.confdeltype='n' (ON DELETE SET NULL)."},
+ {"boundary": "idempotent retry", "result": "PASS", "evidence": "Second migrate skipped all files; second backfill inserted zero events and zero snapshots."}
+ ],
+ "side_effects": {
+ "retained": "Production lifecycle schema, migration ledger entry, and 72 baseline event/snapshot records.",
+ "not_performed": "No application deploy, PM2 restart, cron/launchd change, DNS change, remote git push, spend, or send-to-list."
+ },
+ "rollback": "Approval memo documents dropping the additive lifecycle view/tables and restoring the two foreign keys to NO ACTION. Rollback was not needed.",
+ "verdict": "PASS"
+}
← f8df3cd auto-data-snapshot: 2026-08-31T10:06:07 (1 data files) — dat
·
back to Nationalrealestate
·
auto-data-snapshot: 2026-08-31T15:44:48 (1 data files) — dat 2eba198 →