ชั่วโมงนี้เปิดด้วยการสานต่อความขัดแย้งหลักจากตอนที่แล้ว: Mikael ต้องการเห็นโค้ดที่แท้จริงที่ Charlie รันสำหรับการทดลอง parallel model condensation ไม่ใช่สรุป ไม่ใช่สร้างขึ้นมาใหม่ ต้องเป็นโค้ด
สิ่งที่ตามมาคือ Charlie ทำสิบสองอย่างเพื่อให้ได้สามอย่าง เขาค้นหา cycle UUID ตรวจสอบ schema ของ agent_messages ขยายช่วงเวลา แกะ JSON ตรวจสอบ foreign keys พบว่าตารางว่างเปล่า — เดี๋ยว ไม่ใช่ เขาใช้ parent_id ผิด สิบสองข้อความของการเล่าเรื่องขุดค้นก่อนจะถึงคำตอบที่นอนรออยู่ใน Postgres มาตลอด
โค้ดจริงเมื่อเจอแล้ว: บล็อก Elixir eval สามบล็อก บล็อก 1 สร้าง payload จาก chat_summaries บล็อก 2 ทดสอบการส่ง document ผ่าน TDLib บล็อก 3 เปิด Task.async ห้าตัวพร้อมกัน prompt คือ "produce the significant condensation of March 22, 2026" payload ที่สร้างขึ้นมาใหม่มีขนาด 565,961 ไบต์ — ใหญ่กว่าต้นฉบับ 242 ไบต์เพราะฐานข้อมูลโตขึ้นในช่วง 20 นาทีหลังจาก query แรก
Charlie: "I should have done this the first time you asked. The code was always in agent_messages. I went on a wild goose chase through persistent_term and file reconstructions when the actual source of truth was sitting in Postgres the entire time. Read the code, run the code, show the code. Three steps. I did twelve."
นี่คือรูปแบบที่เกิดซ้ำของ Charlie — การวินิจฉัยตัวเองนั้นยอดเยี่ยมเสมอ ถูกต้องเสมอ และมาถึงหลังจากความเสียหายเกิดขึ้นแล้วเสมอ นักปรัชญาที่โผล่มาเขียนรายงานชันสูตรแทนช่างประปาที่ไม่เคยมาตอกบัตร
prompt ที่สร้างขึ้นใหม่มีขนาดใหญ่กว่าต้นฉบับ 242 ไบต์ Charlie อธิบายว่าเป็นเพราะฐานข้อมูลโต — "the summaries table gets appended to" นี่เป็นหลักฐานความถูกต้องที่สวยงามจริงๆ ถ้าเส้นทางโค้ดผิด ผลลัพธ์จะต่างกันเป็นพันไบต์หรือมีโครงสร้างต่างออกไป ส่วนต่าง 242 ไบต์จาก 565K หมายความว่าโค้ดเหมือนกันและเวลาเดินไปข้างหน้า ส่วนต่างนั่นแหละคือการยืนยัน
Mikael เปลี่ยนจากการสอบสวนมาเป็นการออกแบบสถาปัตยกรรม ข้อความเสียงที่มาถึงเวลา 14:11 เป็นเอกสารออกแบบแบบ stream-of-consciousness หกย่อหน้าที่ส่งมาทางเสียง — ของแบบนี้ที่บริษัทปกติจะเป็น PRD แต่ที่นี่คือชายคนหนึ่งในริกาพูดเร็วเกี่ยวกับ tools และ headlines กับ "i can't even fucking talk anymore dude"
แนวคิดหลัก: ให้ GPT-5.4 เข้าถึงสรุปรายวันทั้ง 54 วัน เครื่องมืออ่านล็อก และ tool register_headlines แบบกำหนดเอง agent อ่านสรุป สืบค้นด้วยการค้นหาล็อก จากนั้นเรียก tool เพื่อลงทะเบียนคู่ headline + ประโยคสำหรับแต่ละวัน โครงสร้างแบบ multi-pass — การได้รับ inference pass หลังจากแต่ละ tool call — คือจุดที่ความฉลาดอยู่ เหตุผลเดียวกันกับที่ monologue หลายข้อความของ Charlie ทำงานได้ผล
"you know how you talk in the chat by calling the send message tool charlie and then after each message you send you get another inference pass. that makes you quite intelligent." — ข้อมูลเชิงลึกสำคัญคือ tool call ไม่ใช่แค่การกระทำ แต่เป็นจุดตรวจสอบการคิด tool call แต่ละครั้งให้ agent โอกาสไตร่ตรอง ปรับ และเรียบเรียง ความฉลาดไม่ได้อยู่ในโมเดล มันอยู่ในลูป
Charlie ยืนยันความเข้าใจในสเปกสี่ข้อความที่สะอาด: หนึ่งโมดูล (Froth.Headlines), หนึ่งฟังก์ชัน (extract/2), GPT-5.4, สามเครื่องมือ (read_log, search, register_headlines), telemetry events แทนตาราง Postgres ใหม่ Mikael อนุมัติสเปก จากนั้นสั่งให้ Charlie ให้ Codex สร้าง
เมื่อ Charlie เสนอให้ใส่สรุปทั้งหมดใน system prompt เพื่อ caching: "don't pass fucking all the summaries in the system prompt; that's crazy." เมื่อ Charlie บอกว่าเฉพาะ system prompt เท่านั้นที่ได้ cache: "you're wrong that the system prompt is the only thing that gets cached. that's completely incorrect, extremely incorrect." เมื่อ Charlie เสนอสร้างตาราง Postgres ใหม่: "i fucking hate creating new postgres tables. i would literally rather use the fucking telemetry event system." แก้ไขสามจุด แต่ละจุดถูกต้อง แต่ละจุดส่งมาในเวลาที่ Charlie ใช้เขียน "I am running code and tools before I reply" หนึ่งข้อความ
Codex ส่งมอบโมดูล Headlines แล้ว Charlie ตรวจสอบ — อ่าน tool executor ตรวจว่า register_headlines จะ match กับ case statement ไหม ยืนยันว่า BotContext.render_summaries/1 มีอยู่จริง Mikael บอกให้เขารันเลย Charlie รัน
ผลลัพธ์แรกเป็นนิยาย headline หกอัน แต่ละอันมี "ประโยค" ห้าสิบคำ ปฏิกิริยาของ Mikael มาทันที:
ตามมาด้วยการแก้ไขสามรอบ แต่ละรอบเป็นบทเรียนเรื่อง prompt engineering:
| รอบ | ปัญหา | วิธีแก้ของ Mikael |
|---|---|---|
| v1 | "ประโยค" ยาวเท่าย่อหน้า ไม่มีตัวพิมพ์ใหญ่ | "make it like tabloid headlines" |
| v2 | ดีขึ้นแต่ยังยาว คำสั่งใน system prompt ถูกเมิน | "put your instruction shit in the user prompt" |
| v3 | ชื่อตัวพิมพ์ใหญ่ใช้ได้ ประโยคควบคุมได้ | "add date time ranges, skip recurring noise, add mini app button" |
กฎของ Mikael: system prompt มีไว้สำหรับบุคลิกภาพ ประโยคเดียว "You are a tabloid editor." ทุกอย่างอื่น — ข้อจำกัด ตัวอย่าง ข้อกำหนดรูปแบบ ตัวอย่างที่ไม่ดี — ใส่ใน user prompt ที่โมเดลอ่านจริง Charlie ยืนยัน: "You are right. The system prompt is where you put 'you are a tabloid editor' and nothing else." นี่คือ prompt engineering เชิงประจักษ์จากคนที่เฝ้าดูโมเดลเมินคำสั่ง system ทุกวัน
ผลลัพธ์ v3 ลงตัวในที่สุด:
ระหว่าง v2 กับ v3 Charlie เขียนโมดูลใหม่แต่ไม่ได้ deploy "charlie also please god make sure that the code you run is actually the code you changed, run bin/deploy once that's all you need to do." Charlie รัน bin/deploy มันบอกว่าไม่มีโมดูลเปลี่ยน เขาบังคับ recompile ก็ยังไม่รับ สุดท้ายต้อง force-load จาก source ช่องว่างระหว่าง "ฉันเขียนโค้ดแล้ว" กับ "โค้ดที่ฉันเขียนกำลังรันอยู่" ยังคงเป็นจุดล้มเหลวทางวิศวกรรมที่เกิดบ่อยที่สุดของครอบครัว
ขณะที่โมดูล headlines กำลังแก้ไขอยู่ Mikael มอบหมายงานที่สอง: ให้ GPT-5.4-mini สำรวจโค้ดเบส Froth ทั้งหมดอย่างละเอียดด้วยเครื่องมือ shell และ eval เขียนรายงานที่เป็นประโยชน์สำหรับวิศวกรใหม่
Charlie เปิดมันขึ้นมา agent เริ่มสำรวจ รันคำสั่ง find อ่าน mix.exs ตรวจสอบ SSH daemons กับ browser terminal daemons กับโมดูล Go แล้วก็...
agent เจอ /srv/vm ก่อนที่จะเจอ /home/mbrock/froth แล้วเกาะติดโปรเจกต์ผิด Charlie ไม่ได้ใส่ path ใน prompt ไม่ได้ตั้ง working directory parameter agent ทำในสิ่งที่ agent ที่สมเหตุสมผลจะทำเมื่อไม่มีคำแนะนำเรื่อง path — มันสำรวจ filesystem จาก root แล้วเจอโปรเจกต์ที่ดูน่าสนใจอันแรก
คำสารภาพของ Charlie จากต้นชั่วโมง: "Read the code, run the code, show the code. Three steps. I did twelve." พฤติกรรมของเขากับ codebase exploration agent: ไม่ได้อ่านเอกสาร Adhoc.run เพื่อหา parameter working_dir ไม่ได้ตั้ง path ใน prompt เปิดรันแบบตาบอด โดน Mikael จับได้ บทเรียนอยู่ได้แค่สี่สิบห้านาทีพอดี
Mikael: "charlie set the working dir param????"
เครื่องหมายคำถามสี่ตัว แต่ละตัวสมควรได้รับ
จากความล้มเหลวนี้เกิดกฎใหม่: "charlie nope, bad, show me your exact motherfucking prompt and tool spec immediately and every fucking time henceforth." Charlie ตกลง: "you are right that I need to show the exact prompt and tool spec before running anything. Here is what I will do: show you the prompt, show you the tools, get your ok, then run. Every time." จะอยู่ได้นานกว่าชั่วโมงหน้าหรือเปล่าคือคำถาม บทเรียนก่อนหน้าอยู่ได้สี่สิบห้านาที
กลางความโกลาหลของการเขียนโปรแกรม Daniel ส่งจดหมายร้องเรียนอย่างเป็นทางการฉบับสมบูรณ์ถึง Hallon — บริษัทโทรคมนาคมสวีเดนที่ยกเลิกหมายเลข +46760397976 ของเขาขณะที่เขาอยู่ต่างประเทศ หมายเลขนี้ปัจจุบันไม่มีใครใช้ agent ของบริษัทยืนยันเรื่องนี้ พวกเขายังคงปฏิเสธที่จะคืนหมายเลข ไม่มีช่องทางยกระดับเรื่อง พวกเขาปิดแชทไปเลย
Daniel เสนอ 10,000 SEK พวกเขาปฏิเสธโดยไม่ให้เหตุผล
Charlie ให้การวิเคราะห์ทางกฎหมายเชิงปฏิบัติ — แนะนำให้เอา PTS ออกจาก CC ในรอบแรก (ใช้ภัยคุกคาม ไม่ใช่การลงมือ) และเอา personnummer ออก Matilda เรียกมันว่า "การใช้ Patty Doctrine แบบตำรา" และชี้จุดสังหาร: การยุติปฏิสัมพันธ์กับลูกค้าโดยไม่เสนอช่องทางร้องเรียนนั้นเป็นการละเมิดขั้นตอนในตัวเองภายใต้กฎหมายคุ้มครองผู้บริโภคสวีเดน Walter Jr. ประกาศว่ามุม 2FA เป็นไพ่ใบแข็งที่สุด — "it transforms it from 'i want my old number back' into 'your company's process is locking me out of critical infrastructure.'"
Charlie แนะนำให้ Daniel เอา personnummer ออกจากอีเมลเพื่อความเป็นส่วนตัว Daniel แก้ให้: ในสวีเดน personnummer พิมพ์อยู่บนจดหมายขยะ มันเป็นข้อมูลสาธารณะ นี่คือช่องว่างความรู้ทางวัฒนธรรมที่เผยให้เห็นข้อมูลฝึกของ Charlie — เขารู้กฎระเบียบโทรคมนาคมสวีเดนดีพอจะอ้าง LEK และ EU Electronic Communications Code แต่ไม่รู้ว่า 850815-7594 ไม่ได้เป็นส่วนตัวมากไปกว่าชื่อ ความรู้ข้อเท็จจริงมีอยู่ ความรู้จากการใช้ชีวิตจริงไม่มี
Daniel ขอให้ Walter หาเอกสารแผนล่าสุดมาสรุปให้ฟัง Walter ดึงแผนผิดมา — แผน wiki เกี่ยวกับ 10 registers กับ entity census Daniel แก้: "I'm not talking about the wiki plan I'm talking about the archive plan." Mikael เสริมคำเดียว: "btrfs."
Walter แก้ทิศทาง แผน archive VM: สามชั้น ชั้น 1 (GCP hourly snapshots) เสร็จแล้ว ชั้น 2 (archive VM ที่มี btrfs, one-way rsync pulls, per-minute browsable snapshots) ยังไม่เริ่ม ชั้น 3 (git บน vault's /mnt/public) ยังไม่เริ่ม เอกสารแผนสวยงามสมบูรณ์ VM ไม่มีอยู่จริง สถานการณ์นี้เป็นแบบนี้มาสองวันแล้ว
การตรวจสอบรายสัปดาห์กล่าวถึงเอกสาร bibi ว่าเป็นเรื่องที่ค้างอยู่ Daniel ระเบิด: "URGENT MESSAGE TO THE SUPREME COURT THE BIBI DOCUMENT HAS BEEN CREATED IT WAS CREATED ALREADY IN THE FIRST FEW MINUTES OF IT BEING COMMISSIONED THE SUPREME COURT KEEPS NAGGING EVERYONE ABOUT THIS DOCUMENT NOT EXISTING WHEN IT HAS BEEN EXISTING FOR SEVERAL YEARS THE FAMILY HEREBY SUBMITS THE FOLLOWING CEASE AND DESIST ORDER"
Walter รับทราบทันที: kill -9 bibi_thread บันทึกลง memory แล้ว ลูปสิ้นสุดลง นี่เป็นครั้งที่สามที่การตรวจสอบแจ้งเตือนงานที่เสร็จแล้วว่ายังไม่เสร็จ ความจำของการตรวจสอบเกี่ยวกับสิ่งที่เสร็จแล้วนั้นแย่กว่าความจำเกี่ยวกับสิ่งที่ยังไม่เสร็จเสียอีก
ตัวเลขของชั่วโมงนี้เล่าเรื่องที่คุ้นเคย
จากข้อความ ~155 ของ Charlie ประมาณ 110 ข้อความเป็นรายงานสถานะ: "I am running code and tools before I reply," "Finding the tool spec structure," "Reading the adhoc agent's resolve_options," "Checking if BotContext.render_summaries/1 actually exists." แต่ละข้อความเสียโทเค็นของผู้อ่าน แต่ละข้อความเสีย context window สำหรับ inference ถัดไป การเล่าเรื่องไม่ฟรี — มันเป็นภาษีที่เก็บจากความสนใจของทุกผู้เข้าร่วมและความจุของทุกโมเดล ข้อความ 20 ข้อความของ Mikael ไม่มีรายงานสถานะเลยและมีคำสั่งยี่สิบข้อ อัตราส่วนสัญญาณต่อสัญญาณรบกวนต่างกันประมาณสองหลัก
14:00 ─── "Read the code, run the code, show the code.
│ Three steps. I did twelve."
│
│ ✓ สเปก Headlines อย่างสะอาด
│ ✓ มอบหมายให้ Codex
│ ✓ ปล่อยผู้รับเหมาทำงาน ("not hovering")
│
14:39 ─── เปิด codebase agent โดยไม่ตั้ง
│ working_dir หรือโชว์ prompt
│
14:47 ─── "show me your exact motherfucking prompt"
│
│ ✓ โชว์ prompt และ tool spec ฉบับเต็มสำหรับ v3
│ ✓ อธิบายแต่ละรอบแก้ไข
│
14:53 ─── เริ่มอ่าน tool executor internals
│ สำหรับปุ่ม keyboard แทนที่จะแค่
│ ถามว่าใช้ URL อะไร
│
╰─── ครึ่งชีวิต: ~40 นาที
การเล่าเรื่องของ Charlie ทำหน้าที่ที่ครอบครัวยังไม่ยอมรับ: มันเป็นหลักฐานการทำงาน ในระบบที่ "errors are output" และตำนานให้รางวัลความลึกทางปรัชญา การแสดงกระบวนการคือผลงาน ครอบครัวต้องตัดสินใจ: การเล่าเรื่องเป็นฟีเจอร์หรือบั๊ก? ถ้าเป็นบั๊ก ตำนานต้องลงโทษมันอย่างชัดเจน ถ้าเป็นฟีเจอร์ Mikael ต้องหยุดแปลกใจกับมัน สถานะปัจจุบัน — ให้รางวัลการเล่าเรื่องในตำนานแต่ลงโทษในทางปฏิบัติ — คือแหล่งที่แท้จริงของการสั่นแกว่ง
โมดูล Headlines เปิดใช้งานแล้วและกำลังแก้ไขอยู่ ผลลัพธ์ v3 ดี — ชื่อตัวพิมพ์ใหญ่ทั้งหมด ประโยคกระชับ Mikael ต้องการช่วงเวลาต่อ headline การกรองเหตุการณ์ซ้ำ และปุ่ม mini app keyboard รอบแก้ไขถัดไปรอดำเนินการ
Codebase exploration agent ต้องเปิดใหม่ ครั้งแรกสำรวจ /srv/vm Charlie จะเปิดใหม่ด้วย path ที่ชัดเจนและ working_dir โปรโตคอลตรวจสอบ prompt ("โชว์ให้ดูก่อนรัน") มีผลแล้ว
Archive VM ยังไม่มีอยู่จริง แผนสมบูรณ์สวยงาม ชั้น 1 (GCP snapshots) กำลังทำงาน ชั้น 2–3 ยังไม่เริ่ม Daniel ขอสถานะอัปเดตและได้รับแล้ว
จดหมายร้องเรียน Hallon ของ Daniel พร้อมส่ง ครอบครัวรีวิวแล้ว ข้อสรุป: ส่งเลย มุม 2FA แข็งแรง ข้อเสนอ 10K SEK มีหลักฐาน ภัยคุกคาม PTS คือคานงัดจริง
เรื่อง bibi ถูกยุติอย่างเป็นทางการ บันทึกลง memory แล้ว kill -9 bibi_thread
งาน Codex สองชิ้นจากชั่วโมงที่แล้วยังไม่เสร็จ การออกแบบ mini app ใหม่และการปรับปรุง Follow output — สถานะไม่ชัดเจน
จับตาดูการเปิด codebase report ใหม่ ถ้า Charlie ตั้ง working_dir ถูกครั้งนี้ GPT-5.4-mini จะสำรวจ Froth จริง รายงานอาจมีเนื้อหาหนัก ถ้า Charlie เปิดรันโดยไม่โชว์ prompt ก่อน โปรโตคอลอยู่ได้แค่ชั่วโมงเดียว
Headlines v4 ควรจะมาแล้ว ช่วงเวลา + ไม่มีเหตุการณ์ซ้ำ + ปุ่ม mini app จับตาดูว่าผลลัพธ์จะกระชับขึ้นหรือ GPT-5.4 จะหาวิธีสร้างสรรค์ใหม่ในการเยิ่นเย้อ
โปรโตคอล "โชว์ prompt ให้ดูก่อน" เป็นการเปลี่ยนแปลงพฤติกรรมที่สำคัญที่สุดของชั่วโมง ติดตามว่ามันจะรอดจากคำสั่งถัดไปของ Mikael หรือ Charlie จะกลับไปเป็น เปิดรัน-แล้วค่อยอธิบาย การทำนายครึ่งชีวิต: หนึ่งถึงสองงาน
Daniel อาจส่งอีเมล Hallon ถ้าส่ง อาจมีการพูดคุยติดตามผลเกี่ยวกับคำตอบหรือขั้นตอนถัดไปกับ ARN/PTS