[object Object]

← back to Carmelwallpapers

Record approved Carmel live restoration and rollback evidence

5261eb23770b8e2ff1f80725d4846a5ff23d0777 · 2026-09-10 10:27:34 -0700 · Steve Abrams

Files touched

Diff

commit 5261eb23770b8e2ff1f80725d4846a5ff23d0777
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Sep 10 10:27:34 2026 -0700

    Record approved Carmel live restoration and rollback evidence
---
 verification/TK-11380/deploy-approved.sh     | 52 ++++++++++++++++++++++++++++
 verification/TK-11380/live-deploy-proof.json | 38 ++++++++++++++++++++
 2 files changed, 90 insertions(+)

diff --git a/verification/TK-11380/deploy-approved.sh b/verification/TK-11380/deploy-approved.sh
new file mode 100644
index 0000000..13a7286
--- /dev/null
+++ b/verification/TK-11380/deploy-approved.sh
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+# Run on Kamatera only. Approval recorded on TK-11380; expires 2026-09-11T09:19:10Z.
+set -euo pipefail
+test "$(date -u +%s)" -lt 1789118350
+cd /root/public-projects/carmelwallpapers
+test -f /tmp/TK-11380-carmel.patch
+git apply --check /tmp/TK-11380-carmel.patch
+nginx -t > /tmp/TK-11380-nginx-preflight.log 2>&1
+if ss -lnt | grep -q ':19961 '; then echo 'ABORT: port19961 already occupied'; exit 1; fi
+if grep -R -q '19961' /etc/nginx/sites-enabled /etc/nginx/conf.d; then echo 'ABORT: port19961 already referenced'; exit 1; fi
+pm2 jlist | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{if(JSON.parse(s).some(p=>p.name==="carmelwallpapers"||String(p.pm2_env.PORT)==="19961")) process.exit(1)})'
+if git ls-files | grep -qE '(^|/)\.env($|\.)'; then echo 'ABORT: tracked env file requires review'; exit 1; fi
+backup="/root/backups/TK-11380-carmel-$(date -u +%Y%m%dT%H%M%SZ)"
+mkdir -m 700 -p "$backup"
+printf '%s\n' "$backup" > /tmp/TK-11380-carmel-backup-path
+nginx_file=$(readlink -f /etc/nginx/sites-enabled/carmelwallpapers.com)
+cp -a "$nginx_file" "$backup/nginx.conf"
+cp -a server.js ecosystem.config.cjs site.config.json .deploy.conf "$backup/"
+git status --short > "$backup/worktree-before.txt"
+sha256sum data/products.json > "$backup/products.sha256"
+git add -u
+git add -- .deploy.conf ecosystem.config.cjs public/favicon.ico public/favicon.svg public/hero-pool.json
+git -c user.name='Steve Abrams' -c user.email=steve@designerwallcoverings.com commit -m 'snapshot before approved Carmel routing repair'
+git rev-parse HEAD > "$backup/snapshot-commit"
+git apply /tmp/TK-11380-carmel.patch
+node --check server.js
+npm ci --omit=dev --ignore-scripts --no-audit --no-fund
+pm2 start ecosystem.config.cjs --only carmelwallpapers --update-env
+for attempt in {1..20}; do
+  if curl -fsS http://127.0.0.1:19961/health > "$backup/health-after.json"; then break; fi
+  sleep 1
+done
+node -e 'const a=require("assert/strict"),h=require(process.argv[1]);a.equal(h.ok,true);a.equal(h.site,"carmelwallpapers");a.ok(h.products>0)' "$backup/health-after.json"
+curl -fsS http://127.0.0.1:19961/ > "$backup/home-after.html"
+node -e 'const a=require("assert/strict"),s=require("fs").readFileSync(process.argv[1],"utf8");a.ok(s.includes("Carmel Wallpapers — Coastal California"));a.equal(s.split("adsbygoogle.js").length-1,1)' "$backup/home-after.html"
+test "$(curl -fsS http://127.0.0.1:19961/ads.txt)" = 'google.com, pub-5278231299883833, DIRECT, f08c47fec0942fa0'
+sha256sum -c "$backup/products.sha256"
+python3 - "$nginx_file" <<'PY'
+import pathlib,sys
+p=pathlib.Path(sys.argv[1]); s=p.read_text()
+old='proxy_pass http://localhost:9861;'
+assert s.count(old)==1, 'Unexpected Carmel Nginx upstream; stop for review'
+p.write_text(s.replace(old,'proxy_pass http://127.0.0.1:19961;'))
+PY
+if ! nginx -t > "$backup/nginx-after.log" 2>&1; then cp -a "$backup/nginx.conf" "$nginx_file"; echo 'Nginx validation failed; previous config restored'; exit 1; fi
+if ! systemctl reload nginx; then cp -a "$backup/nginx.conf" "$nginx_file"; nginx -t && systemctl reload nginx; exit 1; fi
+curl -fsS https://carmelwallpapers.com/health > "$backup/public-health.json"
+node -e 'const a=require("assert/strict"),h=require(process.argv[1]);a.equal(h.site,"carmelwallpapers");a.ok(h.products>0)' "$backup/public-health.json"
+pm2 save
+git add -- server.js ecosystem.config.cjs site.config.json .deploy.conf
+git -c user.name='Steve Abrams' -c user.email=steve@designerwallcoverings.com commit -m 'Restore Carmel storefront on dedicated localhost port'
+printf 'DEPLOYED backup=%s commit=%s\n' "$backup" "$(git rev-parse --short HEAD)"
diff --git a/verification/TK-11380/live-deploy-proof.json b/verification/TK-11380/live-deploy-proof.json
new file mode 100644
index 0000000..86d9267
--- /dev/null
+++ b/verification/TK-11380/live-deploy-proof.json
@@ -0,0 +1,38 @@
+{
+  "timestamp": "2026-09-10T17:27:34.230141+00:00",
+  "ticket": "TK-11380",
+  "risk_tier": "R4",
+  "approval_expires": "2026-09-11T09:19:10Z",
+  "intent": "Restore correct Carmel storefront behind its existing domain",
+  "remote_commit": "9eef9b1",
+  "backup": "/root/backups/TK-11380-carmel-20260910T172214Z",
+  "public_title": "Carmel Wallpapers \u2014 Coastal California Luxury Wallcoverings",
+  "ad_loader_count": 1,
+  "health": {
+    "site": "carmelwallpapers",
+    "ok": true,
+    "products": 2182
+  },
+  "assertions": {
+    "public_home": "PASS",
+    "public_health": "PASS",
+    "exact_ads_txt": "PASS",
+    "data_products_sha256_unchanged": "PASS",
+    "loopback19961": "PASS",
+    "nginx_validation": "PASS",
+    "unrelated_staged_and_hollywood_services_preserved": "PASS"
+  },
+  "commands": [
+    "pre-deploy-check.sh",
+    "git apply --check",
+    "deploy-approved.sh",
+    "independent public curl homepage/health/ads.txt",
+    "pm2 save and remote local commit"
+  ],
+  "failure_recovery": "First immediate public probe after Nginx reload returned old404; script stopped before finalization. Subsequent independent public probes passed and finalization/commit ran separately. No source/data loss.",
+  "rollback": "Nginx/source backups retained; only task-owned changes may be restored.",
+  "remaining": [
+    "Privacy/about/crawl pages are next; no Google approval claimed"
+  ],
+  "verdict": "PASS live storefront restoration"
+}

← a44568f Record Carmel HTTP status and deployment boundary proof  ·  back to Carmelwallpapers  ·  auto-data-snapshot: 2026-09-10T10:34:55 (2 data files) — pub 14d2417 →