← back to IWasCute
verification/TK-11380/PRODUCTION.md
36 lines
# IWasCute production deployment — TK-11380
Passed on 2026-09-10. Existing PM2 `gap-iwascute` continues at `/root/Projects/iwascute`, port9636. No nginx, DNS, account or photo records changed.
The reviewed ownership metadata is live and the AdSense executable is removed across public, login and account routes. Existing GA4 `G-2DHDBP8R78` remains installed and its configuration executes. The deployment guard also required replacing an existing broad photo projection with the same22 explicit columns, verified against the live schema. A read-only `LIMIT 0` query confirmed those fields without returning user rows.
## Deployment and verification
- Approved window: 2026-09-10T17:19:10Z through 2026-09-11T09:19:10Z. Activation enforces the expiry; rollback remains available for recovery.
- Remote baseline snapshot: `1dd9768`. Existing non-secret tracked changes and ads.txt were committed; unrelated legacy files remained untouched/untracked. A private source backup preserves the full original worktree.
- Built in `/root/Projects/.iwascute-TK11380-20260910T172500Z` using `npm ci --ignore-scripts --no-audit --no-fund` then `NEXT_TELEMETRY_DISABLED=1 npm run build` while production continued running. Build ID: `CDMq148tzzvoWWsHCxsrN`.
- First activation exposed a Turbopack package-link relocation defect: admin returned500 because the generated pg link still referenced the staging directory. Immediately restored previous build/modules and confirmed admin401. No completion claim was made for that attempt.
- Normalized the single generated pg link to `../../node_modules/pg`; moved the whole candidate into another directory and verified metadata, analytics, ads.txt and admin GET/POST401. Re-activated with a production HTTP verifier inside the automatic rollback guard.
- Final production source commit: `d0dc519`. Dependencies and compiled artifacts were swapped together; the existing process identity and runtime environment remained intact.
- `verify.cjs`: nine public/account-route HTML and hydrated checks, home→v1→login real clicks, both unauthenticated admin methods401, exact ads.txt, GA configuration, zero attempted advertising requests. Third-party requests blocked during this test. See `live/results.json` and `live/login.png`.
- `/3x`: HTTP, rendered screenshot, browser interaction and Chrome allPASS (4/4 available); Safari and Firefox skipped because their engines are unavailable. See `live/3x-render.png` and `live/3x-e2e.png`.
- Pre-deploy guard5/5PASS; live nginx syntax valid with existing unrelated duplicate-name warnings. No nginx modification by this task.
## Rollback
Retained state: `/root/.local/state/iwascute-deploy/TK11380-20260910T172500Z/` (private directory).
`previous.next` and `previous.node_modules` contain the pre-deployment runtime. Source backup is `source/`. Build/install and activation logs remain here. Run the saved task script:
```sh
ssh kamatera 'bash /tmp/TK11380-iwascute-deploy.sh rollback'
```
The script stops only `gap-iwascute`, retains the rejected artifacts, restores the previous runtime, reverses only the task patch when applicable and restarts the same process. Rollback was actually exercised after the first failed activation. The filesystem recovery function additionally passed full-swap and partial-swap fixture tests (PM2 and Git mocked).
Local tunnel and both remote canary processes were stopped. Staging source and rollback artifacts remain intentionally for recovery; no scheduled process was added.
## Limits
This proves the deployed ownership-verification and advertising-execution boundary. It does not establish AdSense approval or general content/privacy readiness. No authenticated account, photo upload, license purchase or Google account mutation was exercised. Direct-route hydration uses a750ms bounded observation, supplemented by real navigation and request assertions. Analytics installation/configuration is verified; receipt by Google Analytics was not tested because third-party requests were blocked.