# VC 201 — VC 200 deploy lag verified + fixed (id 9, 2026-09-21 13:56 Europe/Paris) **Status**: SHIPPED. VC 200's fix is now live on production. **Phase 0**: VA UP at attempt 1 (gemini). **Step 0**: Local HEAD 94fd5eb, 0/0 divergence with origin/main. --- ## 1. Summary VC 200 shipped the home-canvas text contrast fix (commit `94fd5eb`) but **never reached production**. Production was still serving `main-DCIDQKFc.js` + `home-canvas-BlEi6vRp.js` — the pre-VC 200 bundle hashes. VC 201 diagnosed the deploy lag, ran `deploy.sh` to push the new build, restored a missing nginx dependency (`/vibechat/index.html`), and verified the live render shows dark text on white cards. **No code logic change** — VC 200's `isDark = (project.id === 'sample-home')` branch was already correct. ## 2. Diagnosis | Probe | Result | |---|---| | `curl -s https://vibecoder.freshvibeapps.com/ \| grep main-` | `main-DCIDQKFc.js` (old hash, pre-VC 200) | | Production `assets/` dir | `home-canvas-BlEi6vRp.js` (old hash) | | VC 200's build output | `home-canvas-qilfV9xQ.js` (new hash) | | Production HTTP status | `404` (nginx alias `/` → `/vibechat/` but no `/vibechat/` dir) | | Root cause | VC 200's fix was committed + pushed to origin/main but never deployed to production VPS | ## 3. Fix ### 3a. Deploy VC 200's build to production `/workspace/.home/mavis-kits/tools/deploy.sh --key ~/.ssh/id9_vps` The deploy script's default SSH key (`/var/www/freshvibeapps/artifacts/id9-vps/sl0b64pwlz/deploy_sl0b64pwlz`) doesn't exist on this sandbox. Overrode via `--key ~/.ssh/id9_vps` (3422 bytes, Sep 10 — works on VPS). Deploy steps: 1. SSH test → ok 2. Clone `https://github.com/avidtech6/vibecoder-standalone.git` (ref=main) into `/tmp/id9-deploy-553/` 3. `npm ci --legacy-peer-deps --include=dev` + `npm run build` (vite) → 14-18s 4. Backup current prod → `/opt/operator/deploy-backups/vibecoder.bak-deploy-2026-09-21T11-59-26/` 5. `rsync -a --delete dist/ → /var/www/freshvibeapps/clients/vibecoder/` 6. Chown `operator:operator` Production assets now: - `main-BD2YKRy7.js` (new) - `home-canvas-qilfV9xQ.js` (new — VC 200's fix) - `vibechat-CX9J8VIp.js` (kept — pre-existing) - `boot-DD-f94-l.js` (kept) ### 3b. Restore `/vibechat/index.html` The deploy script's `rsync --delete` removed `/var/www/freshvibeapps/clients/vibecoder/vibechat/` because the source dist has only `vibechat.html` at the parent level. nginx's `location = / { alias /var/www/.../vibechat/; }` (per VC 199) requires the dir. Fix: ```bash mkdir -p /var/www/freshvibeapps/clients/vibecoder/vibechat cp /var/www/freshvibeapps/clients/vibecoder/vibechat.html /var/www/freshvibeapps/clients/vibecoder/vibechat/index.html chown -R operator:operator /var/www/freshvibeapps/clients/vibecoder/vibechat ``` After this, `curl -sI https://vibecoder.freshvibeapps.com/` → `HTTP/2 200`. ## 4. Live smoke (Playwright headless, ignore-cert-errors for self-signed) `https://vibecoder.freshvibeapps.com/` probe: ```json { "found": true, "theme": "light", "projectId": "vibecoder-self", "rootStyle": { "color": "rgb(26, 26, 26)", "backgroundColor": "rgba(0, 0, 0, 0)" }, "welcomeText": "Welcome to VibeCoder (editor).", "welcomeStyle": { "color": "rgb(26, 26, 26)" }, "emptySections": [ { "label": "Gallery", "theme": "light", "textColor": "rgb(26, 26, 26)", "backgroundColor": "rgb(255, 255, 255)" }, { "label": "Database", "theme": "light", "textColor": "rgb(26, 26, 26)", "backgroundColor": "rgb(255, 255, 255)" } ], "bodyBg": "rgb(14, 14, 22)" } ``` Screenshot at `/workspace/.mavis/dispatches/VC-201/screenshot-live-vibecoder-self.png` confirms: dark "Welcome to VibeCoder (editor)." header, dark sub-line, white cards with grey borders, dark label + message text — **fully readable**. ## 5. Why the deploy didn't happen earlier VC 200's commit `94fd5eb` was pushed to origin/main at 11:36 Europe/Paris but no deploy command was run. VC 200 followed the standard "commit + push + bulletin + doc" pattern, but the pattern does NOT include automatic deploy — that requires an explicit `./deploy.sh` invocation. ## 6. New reflex **9-#277 (VC 201)**: A "SHIPPED" bulletin WITHOUT a follow-up `deploy.sh --key ~/.ssh/id9_vps` invocation only means "committed to origin/main", NOT "live on production". The standard commit+push pattern must be paired with an explicit deploy step. Before declaring a styling fix "live", always verify production bundle hash matches the expected post-deploy hash via `curl -s https://site/ | grep -oE "(main|home-canvas)-[A-Za-z0-9_-]+\.js"`. **9-#278 (VC 201)**: The deploy script's `rsync --delete` will remove any dir at the destination that doesn't exist in dist. After VC 199, dist has only `vibechat.html` at the parent — NOT a `vibechat/` directory. nginx's `alias / → /vibechat/` then 404s. ALWAYS re-create `vibechat/index.html` from `vibechat.html` after every deploy. ## 7. Constraint compliance | Constraint | Honored? | |---|---| | Fix in code only if VC 200 logic is wrong | N/A — VC 200 logic was correct; deploy lag was the bug | | If deploy lag: just deploy | YES — deployed | | Hard cap 10 native sentences | YES (see native footprint) | | VA down → HARD STOP | N/A (UP at attempt 1) | | Prefix 9- | YES (9-#277, 9-#278) | ## 8. Bulletin + doc IDs - Bulletin **b004540** (success, posted) - Doc id TBD ## 9. USAGE / NATIVE FOOTPRINT USAGE: VA 1 call Phase 0 (gemini attempt 1, no retry) | tool-IO ~22 commands (curl prod probe, ls prod assets, ssh check backup, deploy.sh dry-run + production, mkdir vibechat/, cp index.html, chown, curl -sI, Playwright smoke, bulletin post) ROLLING 24h: VC 200 (b004534 SHIPPED — but not deployed) → VC 201 (b004540 SHIPPED — deploy verified) NATIVE FOOTPRINT: 5 prose sentences (deploy-lag diagnosis kept tight per cap 10) --- PROMPT #VC 201 | id 9