# 485Tech.com — Release Gate Report

**วันที่ตรวจ:** 27 สิงหาคม 2026 (เวลาใน sandbox)
**สถานะ:** source, generated assets, GitHub Actions และ Cloudflare Workers Build ของ code commit `4656cf4`/docs HEAD `b63aa65` ผ่านตามหลักฐานที่ตรวจได้; public route และ Worker security probe หลัง latest build สำเร็จผ่าน 200/307 ตาม canonical policy พร้อม headers/nonce/cache ที่คาดหมาย. Active `deployment_id` ยังว่างใน script metadata จึงเก็บ build UUID และ live evidence เป็นหลักฐานแทน

## ขอบเขตการเปลี่ยนแปลงรอบนี้

รอบนี้ต่อยอดจาก commit `9fe9fcb` ด้วย **named local workspace snapshots** สำหรับ JSON Formatter. `Tools.workspace` ใช้ IndexedDB schema version 2 และแยก `snapshots` object store ออกจาก draft เดิม มี API สำหรับ list, save, load, duplicate, delete, clear และ usage พร้อมเพดาน 5 MB ต่อค่า และ 25 MB รวม snapshot budget. JSON UI แสดงชื่อ snapshot, timestamp, ขนาดข้อมูล, restore, duplicate, delete และ privacy copy ว่าข้อมูลไม่ถูกอัปโหลด.

เพิ่ม **capability contract schema v2** โดย build inject `clientSide`, `offline`, `needsNetwork`, `fileTypes`, `maxFileBytes`, `privacyKey` และ `limitationsKey` ลง standalone HTML ทุก live tool. Shared shell แสดง details panel ใต้ tool พร้อมสถานะ local/network, capability chips, accepted inputs, size limit, privacy note และข้อจำกัด. Validator ตรวจ type, dependency consistency, metadata coverage และ translation keys ไทย/อังกฤษ.

เพิ่ม **UX hardening** ให้ first-visit beta notice แยกจาก AdSense consent banner เมื่อทั้งคู่แสดงบนจอเดียวกัน โดยไม่เปลี่ยน consent logic. แก้ UI regression ให้รอ async snapshot restore และใช้ gated `Blob.prototype.text` ใน batch-cancel fixture เพื่อให้ test สะท้อนพฤติกรรมจริงและไม่ flaky. ปรับ smoke, functional audit, matrix และ deep sweep ให้ใช้ portable paths/fixtures จึงทำงานได้ทั้ง sandbox และ clean CI runner.

เพิ่มมาตรฐาน **AI/human handoff** ได้แก่ `README.md`, `AGENTS.md`, `CONTRIBUTING.md`, project architecture, code-commenting standard, tool-authoring standard, release checklist, documentation validator และ module/JSDoc comments ใน core/build/Worker/test entrypoints. เพิ่ม `build.py` compatibility bridge ให้ Cloudflare legacy command delegate ไป canonical `npm run build` และแก้ package-manager source of truth เป็น npm/package-lock.json.

แก้ production routing ให้ `wrangler.toml` ระบุ Worker `home`, `assets.run_worker_first = true` และ `html_handling = "drop-trailing-slash"`; แก้ Worker ให้ clone immutable ASSETS response ก่อนเติม headers และเพิ่ม immutable-response regression ใน Worker smoke. นี่เป็นการแก้ root cause ของ live 1101/redirect loop ไม่ใช่เพียงเปลี่ยนข้อความใน UI.

## Release gate ที่ผ่าน

| ชุดตรวจ | ผลลัพธ์ |
|---|---:|
| `npm ci` | ผ่าน; dependency install สะอาด, 0 vulnerabilities |
| `npm run build` / `python3 build.py` | ผ่าน; 8 public pages, 159 standalone pages, sitemap 167 URLs; wrapper delegate ตรงกัน |
| Catalog validation | ผ่าน; 159 catalog / 159 live / 0 failures |
| Capability contract v2 | ผ่าน; 159/159 metadata ครบ, `needsNetwork` 3 tools (`bg-remover`, `diagram`, `excel-chat`), i18n keys ครบ |
| Documentation/handoff contract | ผ่าน; `validate:docs` ตรวจ required docs 10/10, critical module headers 5/5 และ README links |
| GitHub Actions | ผ่าน; run `33092071834` ของ commit `b63aa65` static/browser jobs 2/2 success; workflow validation-only ไม่ deploy |
| Cloudflare Workers Build | ผ่าน; docs-only commit `b63aa65`, build UUID `6631647b-8ee9-41b6-8c11-b1d432178d73`; code-changing commit `4656cf4`, build UUID `35a95605-6ebe-4365-aede-e98f9b6381e3`; ทั้งคู่ `build_outcome: success` |
| Production live route probe | ผ่านหลัง build; canonical no-slash routes 200, trailing-slash variants 307 → no-slash, ไม่พบ 1101 |
| Production security probe | ผ่าน; HSTS/CSP-Report-Only/XCTO/XFO/Referrer/Permissions/COOP/CORP/Reporting-Endpoints, nonce parity และ HTML `no-store` ครบ |
| Unit app test | ผ่านทั้งหมด |
| Background remover integration | ผ่านทั้งหมด |
| Worker security/route smoke | 54/54 ผ่าน |
| Smoke test ทุก standalone tool | 159/159 ผ่าน; evidence: `docs/smoke-all-tools.json` |
| Functional audit ไฟล์/PDF/Office/ZIP/image/audio | 19/19 ผ่าน |
| Functional matrix | 159/159 ready, interactive และ clean |
| Deep interaction sweep | 159/159 ready และ action-clean, 158/159 page-clean; ไม่มี failed tools. 1 console warning เป็น expected first-use model/network warning ของ Background Remover ใน networkless sweep |
| UI regression desktop/mobile | 44/44 ผ่าน รวม named snapshot workflow, draft reload, batch cancel และ mobile overflow |
| JSON snapshot viewport QA | 16/16 ผ่าน; ไทย/อังกฤษ, desktop/mobile, controls/privacy/overlay separation |
| Capability details QA | 34/34 ผ่าน; JSON, Batch Text, Background Remover, Diagram และ Excel Chat |
| JavaScript syntax และ JSON parse | ผ่าน; 163 JSON files, 25 JS files |
| `git diff --check` | ผ่าน |
| `CI=1 npx --yes wrangler@4.127.0 deploy --dry-run --env production` | ผ่าน; อ่าน assets 938 ไฟล์, bindings ครบ, ไม่ deploy จริง |

## Privacy และ dependency disclosures

เครื่องมือทั่วไปประกาศว่าประมวลผลใน browser และไม่อัปโหลด input โดยค่าเริ่มต้น. `bg-remover` ยังคงเป็น browser inference แต่ต้องดาวน์โหลด model assets จาก CDN เมื่อใช้ครั้งแรก; จึงถูกระบุ `offline: false` และ `needsNetwork: true` อย่างตรงไปตรงมา. `diagram` และ `excel-chat` มี dependency สำหรับ renderer/parser ที่ดาวน์โหลดเมื่อใช้ครั้งแรกเช่นกัน. รอบนี้ยังไม่มีการอ้างว่า AI หรือทุกเครื่องมือทำงาน fully offline.

AdSense ยังคงเป็น consent-gated และ non-personalized default. การ serve โฆษณาจริงยังขึ้นกับการยืนยันบัญชี Google, การเพิ่ม/ตรวจ site ใน AdSense และการตั้ง Google Privacy & Messaging หรือ CMP ที่เหมาะสมสำหรับ traffic ที่เกี่ยวข้อง. Source ใช้ publisher ID `ca-pub-6341158024893936`; ยังไม่ควรอ้างว่า ads live จนกว่าเจ้าของบัญชียืนยันและตรวจ production จริง.

## Production/pipeline status ที่ยังต้องยืนยัน

Cloudflare API ยืนยันว่า Worker `home` เชื่อม GitHub repository `485Tech.com`, branch `main`, และ trigger `Deploy default branch` ทำงานจริง. Custom domains `485tech.com` และ `www.485tech.com` อยู่ใน `production` ของ service `home`. GitHub Actions `.github/workflows/ci.yml` เป็น validation-only และ run `33092071834` ของ docs HEAD `b63aa65` ผ่านทั้ง static/browser jobs; latest Workers Build `6631647b-8ee9-41b6-8c11-b1d432178d73` สำเร็จหลัง code build `4656cf4` ผ่านด้วย npm clean-install, `python3 build.py` และ `npx wrangler deploy`. Live GET probe หลัง latest build ยืนยัน route status, security headers, CSP nonce parity และ HTML `no-store`. `deployment_id` ใน script metadata ยังว่าง จึงต้องยืนยัน version/rollback record ใน dashboard เป็น operational follow-up. [1]

หลัง push ตรวจ read-only ที่ `/`, `/tools`, `/use-cases`, `/sitemap.xml`, `/ads.txt`, `/manifest.webmanifest`, `/tools/json` และ `/tools/batch-text` แล้ว. ผล final คือ public/canonical no-slash routes 200, trailing-slash tool URLs 307 กลับ no-slash, Worker security headers/nonce/no-store ผ่าน และไม่พบ 1101. Workers Builds เป็น deploy source of truth ปัจจุบัน ส่วน GitHub Actions คง validation-only เพื่อไม่ให้ deployment ซ้อนกัน.

## สถานะหลัง commit/push และ live probe

commit `b63aa652350ed0a674e81c5e50c28dad63b5a836` ถูก push สำเร็จไปยัง `origin/main` และ Cloudflare docs-only Build `6631647b-8ee9-41b6-8c11-b1d432178d73` จบด้วย success หลัง code-changing build `35a95605-6ebe-4365-aede-e98f9b6381e3` ผ่าน. หลังจากนั้นตรวจ GitHub Actions run `33092071834`, latest Cloudflare build, custom-domain binding และ live probe ตาม release checklist; generated standalone pages จำนวน 159 รายการถูก rebuild และ handoff/standards/portable test fixtures อยู่ใน repository.

| Production read-only route probe | ผลล่าสุด |
|---|---|
| `/`, `/tools`, `/use-cases` | 200; HTML ตอบได้ |
| `/sitemap.xml`, `/ads.txt`, `/manifest.webmanifest` | 200; asset/metadata ตอบได้ |
| `/tools/json`, `/tools/batch-text` | 200; canonical no-slash standalone pages |
| `/tools/json/`, `/tools/batch-text/` | 307; redirect ไป canonical no-slash |
| Cloudflare build | success; latest docs-only `b63aa65`, build UUID `6631647b-8ee9-41b6-8c11-b1d432178d73`; code baseline `4656cf4`, build UUID `35a95605-6ebe-4365-aede-e98f9b6381e3` |
| Security headers/nonce | ผ่าน; HSTS, CSP-Report-Only, headers baseline, nonce body↔CSP และ `Cache-Control: no-store` |
| Deployment conclusion | production routes and Worker middleware verified after successful Workers Build; exact active version/rollback record ยังต้องเก็บจาก dashboard เพราะ `deployment_id` API field ว่าง |

ผลนี้แยกชัดเจนระหว่าง source/CI/build/live verification. ไม่ควรเพิ่ม GitHub deployment workflow ซ้อนกับ Workers Builds; follow-up เชิง operational คือยืนยัน version history และ rollback owner ใน Cloudflare.

## References

[1]: https://developers.cloudflare.com/workers/ci-cd/builds/git-integration/github-integration/ "Cloudflare Workers — GitHub integration"
