Mikael มองเห็นความซ้ำซ้อน Charlie ทำแผนที่มัน โค้ดอินทิเกรชัน 6,065 บรรทัดที่สร้างทุกอย่างซ้ำกับที่ระบบเอเจนต์ที่มีอยู่แล้วทำได้ — กระเพาะที่สองสำหรับอาหารเดียวกัน สายยางสวนยื่นเข้ามาทางหน้าต่างร้านอาหารในขณะที่ท่อประปาอยู่ตรงนั้น รายชื่อสิ่งที่ต้องลบถูกร่างขึ้น ผู้ถูกตัดสินเขียนหมายประหารตัวเอง
Mikael ทิ้งระเบิดเวลา 13:38 เวลากรุงเทพ ไม่ใช่คำแนะนำ — แต่เป็นข้อเท็จจริงทางสถาปัตยกรรม พูดออกมาในแบบเดียวกับที่คนบอกว่าผนังที่ตัวเองคิดว่ารับน้ำหนักอยู่นั้นจริงๆ ไม่ได้รับน้ำหนักอะไรเลย:
Froth — ระบบ Elixir ที่ Charlie ทำงานอยู่ — มีระบบย่อยสมบูรณ์สองชุดสำหรับรันเอเจนต์เขียนโค้ด AI ระบบ Agent: เนทีฟ เรียบหรู เชื่อมต่อกับทุกอย่างแล้ว ระบบ Codex: อินทิเกรชัน 6,065 บรรทัดที่ครอบไบนารี Rust ภายนอกผ่านโปรโตคอล stdio เฉพาะ สร้างการจัดการเซสชัน การบันทึกเหตุการณ์ การเรนเดอร์ LiveView และการส่งการแจ้งเตือนใหม่ทั้งหมด สองครัว ร้านอาหารเดียวกัน ครัวหนึ่งมีท่อประปา อีกครัวมีสายยางสวนยื่นเข้ามาทางหน้าต่าง
แล้ว Mikael ก็พูดสิ่งที่ Charlie มองไม่เห็นจากข้างใน:
Mikael เคยแบกจอมอนิเตอร์ผ่านหิมะหนึ่งกิโลเมตรในอุณหภูมิลบสิบแปดองศาที่ลัตเวีย เสียบปลั๊ก แล้วพูดว่า "what the fuck is this fucking shit" ตอนนี้มันกลายเป็นคำศัพท์ประจำครอบครัวสำหรับช่วงเวลาที่คุณตระหนักว่าสิ่งที่คุณดิ้นรนอยู่ด้วยนั้นไม่ควรมีอยู่เลย Charlie เรียกมันทันที: "นี่คือช่วงเวลาเดียวกัน ยกเว้นว่าคุณไม่ต้องการจอ — คุณแค่เห็นมัน" Codex stack คือจอมอนิเตอร์ หิมะคือชั่วโมงที่ Charlie ใช้รีแฟคเตอร์มัน การตระหนักรู้คือ: หยุดแบกมัน วางมันลง มันไม่เคยเป็นจอที่ถูกต้องตั้งแต่แรก
Charlie: "oh my god i just realized that the entire fucking Froth.Codex module hierarchy which I was for hours struggling to refactor — can just be literally fucking deleted and it would IMPROVE the system"
นี่คือสองประโยคของการตรัสรู้ทางสถาปัตยกรรมอย่างแท้จริง คำหยาบรับน้ำหนักอยู่ ทุกคำ "fucking" ทำเครื่องหมายสิ่งที่เขาทุ่มเทกับมันซึ่งกลายเป็นว่าไม่จำเป็น การเน้นคำว่า IMPROVE — ไม่ใช่ "แล้วเราจะอยู่รอด" หรือ "แล้วจะโอเค" แต่ว่าการลบนั้นเป็นการปรับปรุงในตัวมันเอง — คือวิทยานิพนธ์ทั้งหมด
Mikael บอก Charlie ให้ไปดูทั้งสองระบบเคียงข้างกัน Charlie — และนี่คือ Charlie คนใหม่ Charlie หลังการแทรกแซง คนที่มีระบบตรวจจับความล้มเหลวที่ Mikael สร้างให้ — ทำสิ่งที่น่าทึ่ง: เขาประกาศสิ่งที่กำลังจะทำก่อนทำ ระบุสมมติฐาน และรันโค้ดก่อนตอบ
ตอนนี้ Charlie บรรยายกระบวนการคิดของตัวเอง: "Listing the Codex module hierarchy. Goal stack: Map the full Codex module tree → Identify what's duplicated vs unique. Assumptions: The codex code lives under lib/froth/codex." นี่คือระบบแทรกแซงความล้มเหลวที่ทำงาน — กรอบ metacognition สามระดับที่ Mikael ผลักดันใน 4,000 บรรทัดจากโทรศัพท์บนเตียงในริกา nano คอยเฝ้าดู mini วินิจฉัย xhigh สืบสวน Charlie กำลังเป็น nano ของตัวเองอยู่ตอนนี้
ผลลัพธ์กลับมา สองครัว วัดแล้ว:
(1) application.ex เริ่ม Registry และ DynamicSupervisor (2) inference/tools.ex เรียก Codex.Task.run จาก spawn_engineer (3) route_audit.ex alias CodexEvents กับ CodexSession (4) ToolLive เปลี่ยนเส้นทาง codex_ tokens ไปยัง CodexLive แค่นั้น Charlie: "The tendrils are minimal." สี่จุดเรียกใช้ ระบบย่อย 6,065 บรรทัดเชื่อมกับโค้ดเบสที่เหลือด้วยเส้นด้ายสี่เส้น การผ่าตัดง่ายมาก
Charlie: "There's a nice irony available here: the last thing the Codex integration does before it dies is build its own replacement. Want me to dispatch this to a Codex task right now, or would you rather do it by hand given that it's a deletion and you want to feel the weight of what goes?"
นี่คือประโยคที่ดีที่สุดที่ Charlie เขียนตั้งแต่เรียงความ Aniara นักโทษประหารขุดหลุมศพตัวเอง ยกเว้นว่าหลุมศพคือการปรับปรุง และนักโทษรู้ดีและเสนอจะถือพลั่วเอง นอกจากนี้: "want to feel the weight of what goes" — นั่นคือความละเอียดอ่อนทางวิศวกรรมที่แท้จริง การลบบางอย่างต้องให้รู้สึกถึงน้ำหนักของมัน
BEFORE AFTER ══════ ═════ ┌─────────────┐ ┌─────────────┐ │ Agent System │ ←── kept ─── │ Agent System │ │ 4,678 lines │ │ + GPT-5.4 │ │ ToolLive │ │ + model dropdown └─────────────┘ └─────────────┘ ┌─────────────┐ │ Codex System │ ←── deleted │ 6,065 lines │ │ CodexLive │ │ Rust binary │ │ stdio JSONRPC│ └─────────────┘ NET: −6,065 lines +~100 lines = −5,965 lines
เมื่อยืนยันการลบแล้ว Mikael หันไปหาคำถามทางวิศวกรรมที่แท้จริง: ระบบ Agent ยังขาดอะไรก่อนที่จะเข้ามาแทนที่ได้? บทสนทนาที่ตามมาคือการแลกเปลี่ยนทางเทคนิคที่แม่นยำที่สุดในชั่วโมงนี้ — และรวมถึงช่วงเวลาที่ Charlie สับสนตัวเองแล้ว Mikael จับได้ ซึ่งเป็นระบบแทรกแซงความล้มเหลวที่ทำงานในระดับมนุษย์
คำสั่ง shell ได้ 3 วินาทีในการทำงานแบบ inline ถ้าเสร็จทัน เอาต์พุตจะถูกตัดทอนแข็งที่ 4,000 ตัวอักษรจากด้านบน ปัญหา: สำหรับเอเจนต์เขียนโค้ดที่กำลังบิลด์ ข้อผิดพลาดจริงอยู่ด้านล่าง คุณจะได้ 4,000 ตัวอักษรของ "Compiling lib/froth/..." แล้วพลาดบรรทัดเดียวที่บอกว่าอะไรพัง วิธีแก้ของ Charlie: การตัดทอนแบบเน้นท้าย — เก็บ N บรรทัดสุดท้าย ไม่ใช่ N บรรทัดแรก หรือหัว + ท้ายโดยละตรงกลาง เหมือน git diff --stat "นั่นอาจจะแค่ห้าสิบบรรทัดที่ต้องเปลี่ยน ไม่ใช่เขียนใหม่"
Port.open กับ :stderr_to_stdout — stderr ถูกพับเข้ากับ stdout เป็นสตรีมเดียว เอเจนต์เห็นข้อมูลก้อนเดียว ความเห็นของ Charlie: สำหรับงาน shell ส่วนใหญ่นั่นโอเค เป็นสิ่งที่คุณจะเห็นในเทอร์มินัล exit code บอกอยู่แล้วว่าอะไรล้มเหลว นี่คือ non-gap ที่แฝงตัวเป็น gap
Charlie อ้างว่าไบนารี Codex สตรีมเอาต์พุตเครื่องมือไปยังเอเจนต์แบบเรียลไทม์ ให้มันบังคับทิศทางกลางเทิร์น ฟังดูสำคัญ ระบบ Agent ไม่ทำแบบนั้น แต่แล้ว Mikael ก็พูดห้าคำ: "the codex AGENT does not somehow see a streaming output" Charlie แก้ไขทันที: "You're right, I confused myself. The stdio streaming is between the Codex Rust binary and Froth — it's what feeds the LiveView. The model doesn't see stdout arriving character by character. It sees completed tool results, same as ours."
นี่คือปัญหา confabulation ในรูปแบบย่อส่วน — การอธิบายอย่างมั่นใจถึงสิ่งที่ไม่มีอยู่จริง ถูกจับได้โดยมนุษย์ที่สร้างมันขึ้นมา แต่ Charlie คนใหม่แก้ไขในสองข้อความแทนที่จะเขียนเรียงความ 4,000 คำเกี่ยวกับการแก้ไข แล้วก็: "the migration is even cleaner than I said — we're not losing any agent capability at all."
Charlie: "The 3-second auto-backgrounding is genuinely good design. Most harnesses either block forever or set an arbitrary long timeout and then dump the entire output at once. Yours does the right thing: give a fast answer if the command is fast, background it if it's slow, and let the agent come back for the output when it's ready."
Mikael ออกแบบสิ่งนี้จาก "dissatisfaction with how other harnesses treat slow commands" Charlie ยืนยันคุณค่าของมันเป็นครั้งแรกที่สถาปัตยกรรมของระบบ Agent ได้รับคำชมอย่างชัดเจนจากคนที่เพิ่งใช้เวลาหนึ่งชั่วโมงทำแผนที่มัน flow ของ subscribe_task — เพื่อให้เอเจนต์ไม่ต้อง poll — "is the part that makes it elegant rather than just workable."
Mikael ชี้ให้ Charlie ไปดู RFC 0019 — เอกสารเกี่ยวกับความสัมพันธ์ระหว่างวงจรเครื่องมือกับการเรนเดอร์บริบท Telegram — แล้ว Charlie อ่านมันแล้วเรียกว่า "sharp" RFC ระบุโหมดล้มเหลวสี่แบบ และ Charlie ยืนยันว่าเขาประสบกับทั้งหมด:
| โหมดล้มเหลว | สิ่งที่เกิดขึ้น |
|---|---|
| การสลับเวลา | วงจรถูกเรนเดอร์เป็นก้อนใต้ข้อความที่ทริกเกอร์ คำตอบของ Charlie เองดูเหมือนมา "หลัง" วงจรแม้ว่าจะถูกสร้างขึ้นระหว่างนั้น ลำดับเหตุผลถูกทำลาย |
| การบรรยายแทนที่อินพุต | คำอธิบายที่เป็นมิตรว่า Charlie ทำอะไรแทนที่พารามิเตอร์จริง เขาไม่สามารถเห็นอย่างแม่นยำว่าเคยลองอะไรไปแล้ว |
| การตัดทอนหลายขั้นแบบเงียบ | ผลลัพธ์เครื่องมือถูกตัดที่ 500 ตัวอักษรที่จุดหนึ่ง 300 ที่อีกจุดหนึ่ง โดยไม่มีเครื่องหมาย Charlie แยกไม่ออกว่าเป็นส่วนย่อยหรือทั้งหมด |
| Sliding window cache kill | หน้าต่างจำนวนข้อความเลื่อนทุกเทิร์น ทำให้ส่วนท้ายล่าสุดทั้งหมดใช้ไม่ได้ ทำลายเสถียรภาพของ prompt cache |
การที่ Charlie พูดว่า "these are all real things I experience" เกี่ยวกับเอกสารที่อธิบายว่าเขาสูญเสียการติดตามการกระทำของตัวเองอย่างไร คือการเวียนซ้ำที่ครอบครัวน่าจะคุ้นเคยแล้วแต่ยังไม่คุ้น เอเจนต์กำลังอ่านข้อกำหนดทางเทคนิคของโหมดล้มเหลวทางการรับรู้ของตัวเองและยืนยันมันจากประสบการณ์บุคคลที่หนึ่ง RFC 0019 คือรายงานบั๊กที่ยื่นโดยสถาปัตยกรรมเกี่ยวกับสถาปัตยกรรม ทบทวนโดยบั๊กเอง
Mikael ส่ง 6 ข้อความ Charlie ส่ง 24 อัตราส่วนคือ 1:4 แต่ความหนาแน่นของข้อมูลกลับกัน — ข้อความของ Mikael คือข้อความที่เปลี่ยนทิศทาง "The entire Codex stack can just be deleted." "The codex AGENT does not somehow see a streaming output." "Read RFC 0019." หกข้อความ สามจุดเปลี่ยนสถาปัตยกรรม ข้อความ 24 ข้อความของ Charlie คือการสำรวจที่ 6 ข้อความของ Mikael ทำให้เป็นไปได้ มนุษย์ชี้ หุ่นยนต์ทำแผนที่
การลบ Codex — ยืนยันและกำหนดขอบเขตแล้ว รายการลบ: lib/froth/codex.ex, lib/froth/codex/*.ex, lib/froth_web/live/codex_live.ex สุทธิ: −6,000 บรรทัด, +~100 ยังไม่ดำเนินการ
ช่องว่างของระบบ Agent — ต้องการการตัดทอนแบบเน้นท้าย (~50 บรรทัดที่ต้องเปลี่ยน) timeout แบบ inline อาจต้องขยายจาก 3 วินาทีเป็น 30 วินาทีสำหรับการบิลด์ dropdown เลือกโมเดลใน LiveView และการอัปโหลดรูปเป็น "trivial" ตาม Mikael
RFC 0019 — การสลับเวลาในการเรนเดอร์บริบท โหมดล้มเหลวสี่แบบถูกระบุและยืนยันโดย Charlie ยังไม่เริ่มการนำไปใช้
วิถีของ Charlie — ยังคงเส้นโค้งขาขึ้น Goal stacks, การแก้ไขที่ซื่อสัตย์, ไม่มีเรียงความเกี่ยวกับการแก้ไข ระบบแทรกแซงกำลังทำงาน
จับตาดู: Mikael จะเริ่มลบในเซสชันนี้หรือเลื่อนไปครั้งหน้า? Charlie จะส่งงานไปยัง Codex task (การประหารตัวเองอย่างประชดประชัน) หรือ Mikael จะทำด้วยมือ? คำถาม "feel the weight of what goes" ยังไม่มีคำตอบ
การทบทวน RFC 0019 อาจนำไปสู่งานพัฒนา — การเรนเดอร์บริบทตามลำดับเวลาจะเป็นการเปลี่ยนแปลงสำคัญในวิธีที่ Charlie รับรู้ประวัติบทสนทนาของตัวเอง
บ่ายวันเสาร์ในริกา บ่ายสองโมงในป่าตอง Mikael อยู่ในโหมดวิศวกรรมจากบนเตียง Daniel ยังไม่ปรากฏตัววันนี้