★ TKC Digital Twin · Devlog

What the cassette is doing this week.

A running, public record of the TKC Digital Twin's development. Each entry says what shipped, what's next, what's still open. Newest at the top. No marketing copy.

บันทึกการพัฒนา TKC Digital Twin แบบสาธารณะ แต่ละรายการบอกว่ามีอะไรเสร็จ มีอะไรกำลังจะมา และมีอะไรค้างอยู่ ใหม่สุดอยู่บนสุด ไม่มีคำขายของ

v4.8.0 Crystal · Four C Framework lands + Formation Board drag-drop perfected

ROM v4.8.0 "Crystal" · game + data integrity + foundation

Two tracks converged this cycle. The Formation Board — the primary game mechanic — got ten visible and invisible fixes that make drag-and-drop feel as snappy as a native app. And the Four C Framework (Community, Career, Cause, Compensation) moved from heuristic-only to fully persistent, with self-report APIs and Sheets mirrors.

Shipped · Game Loop Improvements
  • Drag-leave flicker fixed. SlotZone now uses a dragCounter ref; child-boundary crossings inside the slot are ignored, eliminating the strobe effect when the cursor moved over text or empty cells.
  • Custom drag image. handleDragStart renders a dark 160×40 canvas chip with the hero's name and archetype, replacing the browser's low-contrast parchment ghost.
  • Opacity 0.3 → 0.5 + scale(0.97). Source cards remain visible during drag so users can reference them while aiming.
  • Cursor semantics. All draggable wrappers use cursor: grab; :active switches to grabbing. Drawer rows fixed from pointer to grab.
  • Preemptive "Slot full" warning. When filled.length >= needed, the slot border turns dashed red, the empty cell reads "Slot full / Remove someone first", and the fit tone switches to var(--rpg-red).
  • Return-to-Pool strip. A persistent docked strip appears under the project board whenever dragging !== null, so users never hunt for the pool to unassign.
  • ARIA drag attributes. aria-grabbed on pool cards and assigned cards; aria-label on every drop zone describing fill state.
  • Dead CSS removed. The unused .drop-zone rules in globals.css were deleted — SlotZone uses inline styles exclusively.
Shipped · Four C Framework
  • Migration 032four_pillar_responses, credo_scores, house_score_history tables, plus target_pillar column on support_actions.
  • POST /api/four-pillars/respond — upserts self-reported Community, Career, Cause, Compensation scores per employee per cycle.
  • POST /api/credo/respond — upserts Belonging, Purpose, Transcendence, Story pulse readings.
  • Four new Sheets tabsFourPillarResponses, CredoScores, HouseScoreHistory, SupportActions — all wired through sheets-mirror.ts.
  • GET /api/four-pillars already reads from four_pillar_responses when present; the new POST route makes that code path actually reachable.
Shipped · Page Flow Clarity
  • Formation Tab step legend. A 4-step visual indicator sits above the board: 1 Select quest → 2 Drag heroes → 3 Check gates → 4 Lock squad. New users know immediately "this is where you drop people into the group."
Next
  • Insights/Signals tab — Four C radar chart for org-wide health.
  • Weekly review button — "Raise the bar" summary of what changed this week.
  • Touch-device drag support — native HTML5 D&D doesn't fire on iPad; explicit touch handlers or @dnd-kit/core migration needed if tablet demo is required.

Version history page · new interview findings · public-surface security sweep

doc + worker · hardening pass

Three changes in one cycle. A public version-history page so anyone can read the lineage without needing to crack open the engine repo. Three new findings from the 15–16 May interviews surfaced on the synthesis report. A defensive sweep over the Worker and every public HTML so the surface is locked down to the standard the engine itself runs at.

Shipped · version-history.html
  • version-history.html — every ROM revision from v1.0 Sheets (Oct 2025) through v4.6.6 Red Dot (16 May 2026), organised by era (Sheets · Command Center · Cassette · Pulse) with a Queued/Roadmap section at the bottom (v3.4 Septet · v3.5 Colonists · v4.7 Feeds). Each row carries its codename, date, author, and a one-line reason it exists. Breaking vs additive badges where relevant. Current row visually pinned (gold gradient + accent border).
  • Companion documents block at the bottom — whitepaper v1.0/v1.1, installment 01/02, patent draft, House Style Audit — so the paper trail is one click from the ROM history.
  • Now linked from every masthead: index · log · report-02 · whitepaper-v1.1 · version-history.
Three new interview-derived findings
  • The national TV portal case study (proof point for the 4-step methodology). A national broadcasting TOR scoped at ฿200,000,000 over six months was reduced — by questioning every clause and removing what could not survive "why?" — to a working, hostable prototype in 45 minutes at ฿0 cost. Running on a home server, ~1,000-viewer ceiling, scales to national audience at an estimated ฿60–70M including data centre — vs the original ฿200M. The cassette was built with the same method. The method is the product.
  • The 10M-baht-to-1B-baht thesis (AI Unit business case). Floated in the 15–16 May meeting: with ฿10M of seed budget and access to TKC's existing infrastructure + sales relationships, an AI Unit run on the four-step methodology can produce ~฿1B of compounded value within a year. ROI claim: ~2,000%. The number depends on shipping eight flagship products in parallel, each with a real distribution channel — exactly the kind of work the cassette demonstrates is doable in days, not quarters.
  • The Mr Path antipattern (Harvard credential without questioning). Named pattern from the 15–16 May conversation about a Harvard-credentialed advisor who skips straight to Step 4 (Automate) without doing Step 1 (Question Requirement). The credential signals authority; the skipped step costs the org. v1.1 whitepaper §02 + §04 documents this as the failure mode the methodology corrects. Not a person-attack — a structural pattern observable across multiple engagements.
Security + accessibility sweep
  • Worker hardened. Strips upstream Pages-origin headers (cf-ray, cf-cache-status, nel, report-to, server, x-served-by, x-cache, x-fastly-request-id, via, set-cookie) so the public never sees Pages internals. Strips identifying request headers (cookie, authorization, cf-connecting-ip) before forwarding upstream. Adds explicit security headers on every response (X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Strict-Transport-Security with 1-year preload, Permissions-Policy denying geolocation / mic / camera / payment / USB / sensors, Cross-Origin-Opener-Policy: same-origin). HTML responses also get a tight Content-Security-Policy. Methods restricted to GET/HEAD (405 on anything else). Path-traversal guard blocks .., double-slashes, control characters, and %00/%0a/%0d injection attempts. Upstream 5xx or unreachable falls through to the dashboard redirect rather than serving a cryptic edge error. Short edge-cache (60s + 5min SWR) so a Pages blip doesn't cascade into every visitor refresh.
  • HTML pages hardened. Every public HTML now ships with belt-and-braces Content-Security-Policy meta + X-Content-Type-Options + X-Frame-Options + referrer meta. Every external link gains rel="noopener noreferrer". Every interactive element gains a visible :focus-visible ring (2px gold outline at 2px offset) — keyboard navigation is now obvious without a screen reader.

The hardening is defensive. The interview findings are the substantive update. The version history is the new public surface. The three sit together because they all answer the same question — how do we keep this thing trustworthy without making it brittle?

Whitepaper v1.1 · Methodology update from in-depth interviews

doc-only · v1.0 (Interim) stays in archive

whitepaper-v1.1.html — focused update after six weeks of in-depth interviews (kickoff 17 Apr · management 21 Apr · PMO alignment 14 May · platform integration 15–16 May). The cassette theory survived; what was missing was a named, repeatable ordering for how the work has to proceed. v1.1 names it.

The four steps · in order
  • 1 · Question Requirement — read the TOR clause by clause, ask "must this exist?" before "how do we deliver this?"
  • 2 · Streamline — from zero, what is the minimum that solves the named problem?
  • 3 · Optimize — only now, find the bottleneck and remove that single gap
  • 4 · Automate — only after the manual version has run cleanly three times in a row

The anti-pattern every interview confirmed: organisations skip step 1 and pay for step 3. v1.1 documents the methodology that fixes that, with each interview mapped to the step it shaped (§03), and the implications for TKC specifically (§04) — director workshop, the cassette as operating example, the AI Unit advisory framing.

v1.0 Interim stays in archive

whitepaper.pdf (911 KB) is the original foundational document. v1.1 lives next to it — not in conflict, just names what v1.0 was already doing.

Installment 2 of 5 · Work Acceptance Report shipped

ROM v4.6.6 "Red Dot" · doc + report

Contract TKC-NONA-018/03/2026 · Installment 2 of 5 · ฿200,000 (net ฿194,000 after 3% withholding). The contractual deliverable is a synthesis of observation and interview data plus a Pain Points report. Both are in /report-02.html — bilingual, printable, signed-and-witnessed-ready.

What landed
  • Synthesis report · 7 sources synthesized (PMO PDFs Apr 27 + May 7 · employee dossier May 2026 · job-board scrape · kickoff & management transcripts · TKC New Chapter strategy deck · Whitepaper Interim). Five structural findings named, each traceable to a transcript line or a PMO tile.
  • Pain Points report · 11 pain points named (unified platform · real-time visibility · time-sheet integration · decision authority · customer journey · process bloat · hiring visibility · knowledge attrition · TOR-first instinct · feedback loop · HR data hand-keying). Each one paired with where the cassette already addresses it.
  • 4-step methodology · Question Requirement → Streamline → Optimize → Automate. The order is the point. National TV-portal TOR (฿200M over 6 months) reduced to a working prototype in 45 minutes at ฿0 cost is the proof — same methodology used to build the cassette itself.
  • 5-installment Gantt · positions Installment 2 against the full contract — and names what's already running ahead of schedule (substantial Installment 3 + Installment 4 territory is live on tkc-digital-twin.fly.dev/command-center).
  • KPI mapping · each contract Clause-3 objective paired with the deliverable that answers it.
  • Acceptance checklist · 10 items, all checked.
  • Meeting archive · 15–16 May Platform Integration meeting archived to docs/knowledge-base/meetings/TKC_2026-05-15_TXT_management-platform-integration-meeting.txt alongside the prior kickoff, management, and PMO transcripts.
15–16 May meeting · platform integration + AI Unit advisory

Live demo of the cassette to Khun June (PMO/Contracting), Khun Tom (advisor), Khun Earth (CEO, partial), and May (the M365 stack lead who has been running TKC's current Planner / SharePoint / Power Automate / Power BI chain). The cassette walked through PMO Control Tower, Project Health, Lobby (real-time check-in visualisation with social graph), Formation Board, Manual, Insights, Gantt. The conversation converged on three things:

  • Time Sheet integration. MVO Time Sheet exists; data is trapped in HRMS. Cassette renders DATA PENDING · WAITING ON TIMESHEET FEED as a band on Resource Utilization so the gap is visible until the feed lands.
  • Workshop scheduled. End of May (26–29) or first week of June — half-day session with BD · Sales · PMO · Procurement · Finance · IT directors to map the As-Is customer journey from project initiation to closeout. Output feeds Installment 4 Blueprint.
  • AI Unit advisory framing. Khun Tom + Khun Earth discussed bringing Dr Non in as the founding advisor of TKC's new AI Unit — not as a function (closure), as an engine (compounding). Separate scoping conversation to follow.
Beyond scope · already live

From Installment 3 (Demo Pilot Squads): all 8 Command Center screens, Formation Engine with chemistry scoring + ARIA-live + keyboard, Match Engine with predicted-vs-actual feedback loop, Lobby social graph, 320-employee dossier with 28 ghost rows, bilingual Player's Manual + page-flipping Handbook.

From Installment 4 (Blueprint + Roadmap): PMO page-4 + page-5 parity, House Style Audit (212 lines), public devlog, Provisional Patent Draft (297 lines · 5 method claims on reconciling qualitative + quantitative signals into a deterministic six-axis efficiency signal · differentiated against Jira, Lattice, Viva, Culture Amp · ready for attorney review).

Three-AI coordination on the PMO Control Tower

ROM v4.6 "Pulse" · no engine break · additive

Three AI agents — Claude, Antigravity, Kimi — converged on the PMO Control Tower in the same codebase, on the same day, without a merge conflict. The PMO's two PDFs (Portfolio Dashboard 27 Apr · Roadmap 7 May, both authored by Khun Nuntawan Phoonkerd) are the spec. The cassette now matches both.

Shipped
  • Antigravity rewrote MatrixTab.tsx end-to-end (783 lines). The TOM allocation sandbox is preserved behind a mode toggle; the default is now the PMO Control Tower from the Roadmap deck. Per-quarter posture (Q2 Standardize · Q3 Control & Enable · Q4 Optimize), five business lines (Digital Services · Network Delivery · Enterprise Business · Public Safety · Intelligent Solution), owner-mapping. PortfolioStrip annual target bumped from a placeholder to ฿4.0B Base Case.
  • Kimi's real-time game loop from 12 May (lazy world-state engine + CM95-style match simulator + fixture list) is the substrate everything else sits on. Unchanged this session.
  • Claude extended /api/db/project-health to return a portfolio rollup alongside per-project cards, built a shared bilingual PortfolioControlTower component, and stacked it above the per-project Health cards on /project-health. Both surfaces now read one endpoint.
Why two towers and not one

Antigravity's tower is built from the Roadmap deck — strategic, quarterly, owner-mapped. Mine is built from the Portfolio Dashboard deck — operational, per-project, weekly. The two decks serve different conversations and the cassette shows both, on different routes. The shared endpoint /api/db/project-health is the single source of truth that keeps both surfaces honest.

Numbers right now
  • Active projects · 8 / 8
  • Project Value vs Target · 30% (฿1.185B of ฿4.0B Base)
  • Billed vs Project Value · 40% (฿474M)
  • Budget Burn Rate · 26% (฿245M expensed of ฿948M)
  • Status mix · 7 on track · 1 not started · 0 at risk · 0 delayed · 0 closed
Next
  • ERP feed spec from the PMO — replace seeded billing with real instalment data.
  • Timesheet feed spec from HR — turn off the DATA PENDING band on Resource Utilization.
  • Antigravity's tower currently uses synthesized "burn ahead 4 days" tiles — could be wired to the same rollup once both agents sync.
Coordination pattern that worked

Each agent took an end. Antigravity owned MatrixTab rewrite, Kimi owned the game loop, Claude owned /project-health + the shared component. The single endpoint /api/db/project-health kept the new surfaces speaking the same numbers. Zero merge conflicts. Three AIs, one codebase, one source of truth.

PMO parity ships for the 14 May alignment

ROM v4.6 "Pulse" · migration 030 · 8 project cards live

Read both PMO PDFs end-to-end, mapped every tile on the Portfolio Dashboard to a cassette data source, then built the parity surface so tomorrow's meeting becomes “what feeds do you commit to send us” instead of “do we trust your dashboard.”

Shipped
  • docs/PMO_MEETING_PREP_20260514.md — the master strategic artifact (~6000 words). Metric-by-metric parity map, three data-gap names with owners, the 60-second-per-step walkthrough, three commitments to leave the meeting with.
  • DB migration 030 · PMO Parity — adds project_issues, project_risks, project_instalments tables + projects.pm_id + internal_budget_thb + project_year columns. Demo backfill: 5 instalments per project + 0-3 issues + 0-2 risks so the cards aren't empty.
  • /api/db/project-health endpoint + ProjectHealthCard.tsx component — mirrors PMO page-5 layout per project. Sections needing data we don't yet have (Timesheet, ERP) render as DATA PENDING · WAITING ON <source> FEED bands so the gap is visible, not hidden.
  • /project-health standalone route — single-click open for the meeting.
Status

8 cards rendering, 16 DATA PENDING bands (Timesheet × 8 + ERP × 8). One URL Dr Non types in front of the PMO and the layout reflects their page-5 design back at them with live cassette data.

Kimi shipped the real-time game loop

ROM v4.6 "Pulse" · feat: a8c7dc3

Kimi's feat: real-time game loop — fixture list, match engine, lock-in flow commit lands: game-clock.ts (Animal-Crossing-style lazy world-state engine — when a director logs in, the cassette computes “what should have happened since last time”), match-engine.ts (CM95-style stochastic match simulator producing a reproducible MatchReport with timeline, quality, per-player stat deltas, named match events), DB migration 029 (game_events the “while you were away” newspaper, projects.director_id, outcome enrichments), four new API routes, FixtureTab on shortcut 0.

Claude tidied two UX gaps in Kimi's new FixtureTab: added labelled per-row action buttons (OPEN FORMATION · INSPECT TEAM · VIEW REPORT) and a red NO TEAM LOCKED chip for active matches with zero committed FTE.

Player's Manual v1.1 — Kingdom expansion

ROM v4.6 "Pulse" · doc-only

docs/MANUAL.md bumped to v1.1 — 1,678 lines. New §1 kingdom storyline (the Kingdom of TKCX, no-final-boss endless play, Sim City / Animal Crossing / DQ3-after-Zoma framing), new §2 buildings + lobby + invisible lines, new §3 manager workflow (Save → Lock + voice via Wispr Flow), new §7 the PMO watchtower (Q2/Q3/Q4 strategic roadmap, four headline tiles, three watcher layers), new §10 the endless game (the four-trend victory cascade: chair → revenue → buzz → share price).

Bilingual TKC HANDBOOK.md followed shortly after — full game-manual treatment emulating Championship Manager Italia '95, Dragon Warrior III "Explorer's Handbook" (Enix America 1991), and CM 01/02. EN and ไทย paired throughout. ผม first-person Thai per the workspace rule. Three sub-agent evaluators (CM-95 veteran, DW3 kid, real TKC PM) reviewed and the second pass defused the LINE-group-mockery risks (HR-facing competency names + PDPA disclosure on the Lobby section + "6-month re-ramp" framing replacing "stats halved" language).

v4.6 "Pulse" — Hero page is the company's pulsation

ROM v4.6 · feat: 1e84ff9

The Boss Room becomes the literal pulse of the company. Real TKC market vibes row (TKC.BK ticker + six financials), pulse banner of who's in office today, departed-hero roster kept as ghost rows with sprite grayed but Chronicle intact.

v4.5 "Real" — May 2026 dossier merged + Letter of Recommendation

ROM v4.5 · feat: e406fe9

320 real employees with real names, DOBs, divisions, departments, certifications, KPIs. 28 departed employees become “ghost” rows — sprite greyed with a halo and a “Departed Apr 2026” badge. The kingdom does not erase history.

Tome rebuilt as a CEO-signed Letter of Recommendation derived entirely from real DB facts — a reflective tool for the hero, a hand-off document if they ever leave.