approval_examples.json+ All 5 Batch-1 runtimes now show a Tenant rollout · Hint guidance card (tenant-zeroth · scope-tenant-only · FF candidate per surface · contract-sourced hints · no AI call).
ChangeMe2026! (rotate after first login) · redirects to /management-runtime/index.html on successpattayatogether.com/mgt-api · 6 tables (mgmt_users/screens/services/db_groups/status_summary/activity_logs)
Runtime stack: Frontend HTML+JS on GitHub Pages (console.pattayatogether.com) · Backend PHP 8.4 + SQLite on Hostinger shared (pattayatogether.com/mgt-api) · Session cookie cross-origin with CORS allow-credentials · 6 DB tables seeded from MGT-01 static JSON · Admin credential admin@management.local / ChangeMe2026! (rotate). Why separate from static: GitHub Pages can't run PHP/SQLite · so runtime lives at /management-runtime/* with backend on Hostinger · static pages at /management/* remain for reference + discoverability. Next hooks: add mgmt_users password change flow · add mgmt_dependencies registry · migrate full 84-service catalog · build Laravel/Next.js superapp backend alongside.
System intent: ไม่ใช่ "Documentation Page" · เป็น "Management System" ที่ตอบคำถามเชิงการจัดการ (มีอะไร · อยู่ตรงไหน · เชื่อมกับอะไร · เสร็จถึงไหน · ขาดอะไร · ใครรับผิดชอบ · อะไร block · พร้อมส่ง dev ไหม) · Status taxonomy: not-started / in-progress / partial / ready / blocked · Delivery ladder: foundation → working → ready-for-dev → ready-for-test → ready-for-demo → ready-for-rollout · ตอนนี้อยู่ที่ foundation. Seed source: Marketing #4 (84-service catalog) · #5 (6 modes) · #6 (registries) · #7 (DB schema). Next batch hooks: ดู status-dashboard.html section สุดท้าย.
Authorship rule (continued): ChatGPT = primary author · Claude = ingester/formatter/indexer/publisher · ไม่แก้ wording · ส่วนเสริมติดป้าย "Claude-added" ทุกจุด · 11 markdown tables → HTML tables เป็น format conversion ไม่ใช่ content change · ทุก cell preserve wording ต้นฉบับ. Slot status at time of Batch MKT-04: slot #4 Reserved → Live · slot #6 ยังคง reserved · Marketing list ตอนนั้น = 6 live + 1 reserved. Subsequent update (Batch MKT-AUDIT-02): slot #6 ถูก resolve โดย renumbering Design Readiness Blueprint (เดิม MKT-07) → MKT-06 · Marketing list ปัจจุบัน = 6 live ต่อเนื่อง · ไม่มี reserved slot.
Authorship rule (continued from Batch MKT-03/MKT-05/MKT-06): ChatGPT = primary author · Claude = ingester/formatter/indexer/publisher · ไม่แก้ wording · ส่วนเสริมติดป้าย "Claude-added" ทุกจุด · field lists render เป็น 2-col grid เป็น format conversion ไม่ใช่ content change · token + ลำดับยกจากต้นฉบับตรง ๆ. Working set status: หลัง Batch MKT-07 เอกสารแกน 4 ฉบับพร้อมใช้งานร่วมกัน (#4 service catalog · #5 mode architecture · #6 design readiness · #7 DB blueprint) · Marketing list = 7 live documents, contiguous, zero reserved slots.
Renumber rule: เฉพาะ UI labels + metadata + discoverability ที่เปลี่ยน · ไม่แตะ ChatGPT primary source แม้แต่คำเดียว · route ไม่เปลี่ยน · document ID ไม่เปลี่ยน (idx-marketing-prototype-design-readiness) · Git commit hash ของ Batch MKT-07 ยังคงเป็น historical log แท้จริง · หลัง batch นี้: Marketing list = 6 live documents, contiguous, zero reserved slots.
Authorship rule (continued from Batch MKT-03/MKT-05): ChatGPT = primary author · Claude = ingester/formatter/indexer/publisher · ไม่แก้ wording · ส่วนเสริมติดป้าย "Claude-added" ทุกจุด · §11 markdown table → HTML table เป็น format conversion ไม่ใช่ content change · symbol และ wording ยกมาจากต้นฉบับตรง ๆ. Historical note: เอกสารนี้ถูก ingest ครั้งแรกใน Batch MKT-07 (2026-04-22) ในตำแหน่ง #7 ขณะที่ slot #6 ยังเป็น reserved · Batch MKT-AUDIT-02 ย้ายมาเป็น #6 เพื่อให้ list ต่อเนื่อง 1–6 · commit hashes ของ Batch MKT-07 ยังคงใช้ได้ใน git log เป็น historical record.
Authorship rule (เหมือน Batch MKT-03): ChatGPT = primary author ของเนื้อหา · Claude = ingester / formatter / indexer / publisher · ไม่แก้ wording ของ ChatGPT · ส่วนเสริมที่ Claude เพิ่มถูกป้าย "Claude-added" ทุกจุด. Slot #4 policy: ถูกสงวนไว้ตามคำสั่งผู้ใช้ ("ข้ามเอกสารลำดับที่ 4 ไปก่อน") · เอกสารที่เคยวางแผนเป็น #5 เดิมถูกเลื่อนเป็น #6 · การ์ดช่องจองแสดงผลใน marketing-console.html ด้วย dashed border + reserved pill เพื่อไม่ให้ลำดับถูกตีความผิด.
Authorship rule: ChatGPT = primary author ของเนื้อหา · Claude = ingester / formatter / indexer / publisher · Claude ไม่แก้ wording ของ ChatGPT · ส่วนเสริมที่ Claude เพิ่มถูกป้าย "Claude-added" ทุกจุด · ถ้าผู้ใช้สั่ง "เพิ่มรายการต่อไปในเมนู Marketing" ให้ทำตาม pattern เดียวกันสำหรับเอกสารใหม่.
Content rule: ทั้ง 2 เอกสารคงเนื้อหาต้นฉบับแบบ คำต่อคำ ให้มากที่สุด · เก็บโครง heading / bullet / order · Doc 2 เก็บ ตารางทั้งหมด 8 ตาราง เป็น HTML ตารางจริง (ไม่ใช่ pre-formatted text) · ถ้าผู้ใช้สั่ง "เพิ่มรายการต่อไปในเมนู Marketing" ให้ปฏิบัติเหมือน MKT-01 · สร้าง docs/marketing/<slug>.html ใหม่ + เติม card บน list page + เพิ่ม catalog/fulltext entries.
/ecm/login.html returns 404 going forward · /login.html is the sole sign-in for console.pattayatogether.com/*
Next priority: true edge-level protection · already committed deploy-ready at docs/ecm/deploy/console-auth-worker.js + console-auth-deploy.md · waits on operator NS migration Hostinger → Cloudflare.
mice-demo-interactive.html · meta-refresh + JS fallback · ลิงก์จาก hub.html (MICE Day 2026 Showcase card) ใช้งานได้แล้วHonest scope: 2 concrete fixes landed · no architectural changes · root lockdown (Batch 20) + root-only login (Batch 20.1) preserved · 70-doc ECM still intact · ECM portal/documents/viewer/notes all unchanged.
window.PTTGate.isAuthed() · ถ้า root authed และ ECM ยังไม่มี profile → auto-login เป็น admin (visibility เต็ม) · session badge โชว์ root email + ECM role pill
Honest scope: ECM ยังคงทำงานเต็มรูปแบบ (70-doc corpus · filters · viewer · notes · access · known-gaps) · แค่ไม่มี login form แยก · `ECMDemo.login()` API ยังอยู่สำหรับ future role-testing ผ่าน ?profile=partner query flag · no regression on route protection · ECM session = admin by default เพราะ root user คือ single admin.
console.pattayatogether.com/ หรือ path ใดๆแล้วยังไม่ auth → redirect มาที่ /login.html · ใช้ admin@example.com + password (ถือไว้นอก git · post-SEC-6 rotation) · SHA-256 client check · 24-hour localStorage session/__auth/health · /__auth/login · /__auth/logoutwrangler deploy · verify curl · rollback · rotate · known-gap callouts
Honest scope: client-side gate ปิดหน้าเว็บ + redirect to login + 24-hr localStorage session ทำงานทันที (102/135 HTML covered · KB 33 pages = B-owned · ไม่แตะ) · true edge protection รอ operator NS migration + `wrangler deploy` เท่านั้น · bypass ที่เหลือเมื่ออยู่ในโหมด client-only: direct curl / view-source / public repo git clone อ่านเนื้อหาได้ · จะปิดหมดเมื่อ edge live + repo private (GitHub Pro).
console.pattayatogether.com · ใช้ second GitHub Pages repo + CNAME · auto-mirrored · evidence + 6-step bootstrap + 2 panel clicks (Pages enable + DNS row)docs/ecm/** · uses peaceiris/actions-gh-pages@v4 · external_repository + cname · guard step exits cleanly ถ้า secret ไม่ตั้งscripts/ecm-init-pages-mirror.sh · 6 automated steps · gh CLI · creates repo · generates ed25519 key · registers deploy key · stores secret · seeds README+CNAME · idempotent
Honest scope: repo ทำ workflow + bootstrap + CNAME files + docs ครบ · ecm.pattayatogether.com จะ live หลัง operator รัน 1 command + คลิก 2 ปุ่ม (~7 นาที · ฟรี) · pattern เดียวกับ console พิสูจน์จาก commit log (d7df929 Add CNAME for custom domain console.pattayatogether.com + ead5fd6 Create CNAME) + ไม่มี workflow deploy Pages เลย (Pages auto-build จาก CNAME).
wrangler login · kv:namespace create · edit toml · secret put · deploy · free tier · 5–10 นาที · same-origin ที่ console.pattayatogether.com/api/*account_id + KV id แล้ว deploy ได้เลย · route binding console.pattayatogether.com/api/* · KV binding ECM_KV · observability on?backend=1 query flag สำหรับ test ต่อ browser session · ?backend=0 สำหรับกลับ DEMO
Honest scope: repo ทำ code + config + guide + wiring ครบ · production path console.pattayatogether.com/ecm/ จะเป็น BACKEND mode จริงหลัง operator รัน wrangler deploy (5 นาที · $0 free tier) · ติดเฉพาะ Cloudflare CLI auth + KV namespace create (operator action) · gap-http-gating (render endpoint) ยังเปิดเพราะ iframe fallback พอสำหรับตอนนี้.
127.0.0.1:8090 + 127.0.0.1:8091 · production HTTPS → 'none' · boot race 3.5s timeout → backend หรือ demo
Honest scope: backend-first restored where origin makes it feasible · production console.pattayatogether.com ยังไม่มี public backend → ยังคง demo mode (honest purple banner + reason) · ไม่ claim production-ready · discoverability ถูก sync พร้อม Batch-17 entries.
assets/ecm-demo.js · 7-user roster client-side · classified error reasonsA-ecm-wave3-v1/api/access/* และ /api/notes/* shapes · localStorage keyed per user · 7-day session TTL · aggregate shape เหมือน backendhttps://console.pattayatogether.com/ecm/ is already served by the existing GitHub Pages deploy · no DNS action requiredecm.pattayatogether.com · Cloudflare Worker (5 min) · Hostinger subdomain (15–20 min) · separate gh-pages repo (20–30 min) · all require action OUTSIDE this repoecm.pattayatogether.com/* → console.pattayatogether.com/ecm/* · header comment has the exact DNS + route binding stepsecm-config.js: subdomain with CF worker · served under /ecm/ · offline-safe · local-dev · status.html now shows the resolved deployment identity live
Honest blocker: GitHub Pages allows exactly ONE CNAME per repo. docs/CNAME is already console.pattayatogether.com. Activating ecm.pattayatogether.com as its own subdomain therefore requires hosting action outside this repo · all three supported paths are fully documented with step-by-step instructions in docs/ecm/deploy/.
+ 7 additional contract artefacts under /runtime/feature-flags-service/ and /runtime/admin-control-plane-service/ (jwks_integration_notes · jwt_claim_examples · verification_mode_matrix · persistence_schema · cutover_parity_matrix · cache_runtime_notes · redis_channel_examples · admin persistence_schema · approval_store_examples). All readable directly from the service directories.
ecm.pattayatogether.com · ecm backend: ECM ?backend=1 · status+retry: Status · mirror runbook: ecm-mirror-setup.md · worker src: ecm-worker.js · worker deploy: worker-deploy.md · edge-auth worker src: console-auth-worker.js · edge-auth deploy: console-auth-deploy.md · deployment: DEPLOYMENT.md · mice demo: MICE demo (interactive) · gaps: Known Gaps · prod candidate: Prod Candidate · team usage: Team Usage · discovery: Index Portal
← Main Console