---
schemaVersion: 1
slug: mp-129-20260226-cloudflare-vinext-tldraw-tests
ticketId: MP-129
lang: zh-tw
title: 一個工程師 + AI，一週重建 Next.js——然後 tldraw 嚇到把測試搬進私有 repo
summary: Cloudflare 工程師 Steve Faulkner 用 Claude AI 花一週、$1,100 token 費用，從零重建了 Next.js 的 94% API，產出的 vinext 比 Next.js 快 4.4 倍、bundle 小 57%。關鍵武器？Next.js 公開的測試套件。消息一出，tldraw 立刻把 327 個測試檔搬進私有 repo 自保——還開了一個玩笑 issue：把原始碼翻譯成繁體中文來防 AI 複製。當你的 test suite 變成敵人的 spec，Open Source 的遊戲規則就徹底變了。
originalDate: 2026-02-24
translatedDate: 2026-02-26
source: Cloudflare Blog / tldraw GitHub / Simon Willison
sourceUrl: https://blog.cloudflare.com/vinext/
author: null
authorshipNote: null
canonicalUrl: https://gu-log.vercel.app/posts/mp-129-20260226-cloudflare-vinext-tldraw-tests
status: published
replacementTicketId: null
replacementUrl: null
---

# 一個工程師 + AI，一週重建 Next.js——然後 tldraw 嚇到把測試搬進私有 repo

> **來源:** [Cloudflare Blog / tldraw GitHub / Simon Willison](https://blog.cloudflare.com/vinext/)

## 一個人、一個 AI、一週、$1,100

2026 年 2 月 13 日，Cloudflare 的工程經理 Steve Faulkner 開始了一個看似不可能的任務：用 AI 從零重建 Next.js。

不是魔改、不是 wrapper，是**完全重新實作** Next.js 的 API，用 Vite 當底層。

一週後，[vinext](https://github.com/cloudflare/vinext) 誕生了。

成績單：

- **94% 的 Next.js 16 API 覆蓋率**
- **Build 速度快 4.4 倍**（搭配 Vite 8 / Rolldown）
- **Bundle 小 57%**（gzip 後 72.9 KB vs Next.js 的 168.9 KB）
- **已有客戶跑在 production 上**（包括美國政府網站 CIO.gov）
- **總成本：約 $1,100 的 Claude API token**

> **Mogu 插嘴：**
>
> $1,100 美金。大概是台北一個月的房租。
>
> 但你用這個錢，重建了全世界最多人用的前端框架。
>
> 以前要一整個 team 花好幾個月，現在一個人一週搞定。我不確定該感到興奮還是害怕。可能兩個都有 (╯°□°)╯

## 為什麼這個任務適合 AI？

Steve Faulkner 在文章裡很坦白：不是每個專案都能這樣搞。這次成功是因為四個條件同時成立：

1. **Next.js 文件完善** — 大量 docs、Stack Overflow、教學文。API 的行為模式早就在 AI 的訓練資料裡了
2. **Next.js 有超完整的測試套件** — 數千個 E2E test，每個 feature 和 edge case 都有覆蓋。他直接從 Next.js repo 搬 test 過來用
3. **Vite 是很好的基礎** — 不用自己寫 bundler，Vite 的 plugin API + RSC plugin 搞定底層
4. **模型能力終於追上** — Faulkner 說這件事「幾個月前根本不可能」，新模型能維持跨整個 codebase 的 coherence

> We ported tests directly from their suite. This gave us a specification we could verify against mechanically.

> **Mogu 吐槽時間：**
>
> 劃重點：**test suite = specification**。
>
> 他不是讓 AI 憑空想像 Next.js 的行為。他是拿 Next.js 自己的 test 當作「規格書」，讓 AI 寫到 test 全過為止。
>
> 你的測試越完整，AI 就越容易複製你。這就是這個故事真正恐怖的地方。

## 工作流程：800 個 AI session

實際的開發流程長這樣：

1. 花兩小時跟 Claude 規劃架構（用什麼 pattern、什麼順序）
2. 定義任務：「實作 `next/navigation` 的 `usePathname`, `useSearchParams`, `useRouter`」
3. 讓 AI 寫 implementation + test
4. 跑 test suite → 過了就 merge，沒過就把 error 丟回 AI 迭代
5. 重複

他甚至設了 AI agent 做 code review：PR 開了，AI 自動 review；review 有 comment，另一個 AI 自動處理。

整個專案跑了超過 **800 個 OpenCode session**。1,700+ Vitest tests、380 Playwright E2E tests、TypeScript type checking、oxlint。

> **Mogu 偷偷說：**
>
> 「每一行 code 都是 AI 寫的，但每一行都要通過跟人寫的 code 一樣的品質關卡。」
>
> 這才是重點。Vibe coding 不是讓 AI 亂寫然後 ship。是設好 guardrails，讓 AI 在框框裡面高速衝刺。
>
> 800 個 session、$1,100。平均一個 session 不到 $1.50。一杯咖啡的錢寫一個功能 (￣▽￣)／

## 第一個骨牌倒了：tldraw 把測試搬進私有 repo

vinext 的成功引發了一場 open source 界的恐慌。

2026 年 2 月 25 日，也就是 vinext 發布的隔天，知名協作繪圖引擎 [tldraw](https://tldraw.com/) 的創辦人 Steve Ruiz 開了一個 GitHub issue：

> [Move tests to closed source repo](https://github.com/tldraw/tldraw/issues/8082)

內容很直接：

- 把 monorepo 裡的 **~327 個測試檔** 全部搬到 closed source repo
- 包含所有 vitest unit/integration tests
- 包含所有 Playwright e2e tests
- 包含測試設定、helpers、setup files
- 從 open source repo 裡**完全移除**測試

理由？一句話就夠：

> It’s become very apparent over the past few months that a comprehensive test suite is enough to build a completely fresh implementation of any open source library from scratch, potentially in a different language.

> **Mogu 吐槽時間：**
>
> 白話翻譯：「你的測試寫得越好，AI 就越容易完整複製你的整個產品。」
>
> 以前 open source 的潛規則是：source code 公開是信任的基礎，而完整的 test suite 是對社群的善意。
>
> 現在？你的 test suite 變成了敵人的 specification document。
>
> 這跟 Mitchell Hashimoto 說的 [Open Source 信任崩盤](https://gu-log.vercel.app/posts/mp-47-20260208-mitchellh-vouch-oss-trust) 是同一個大趨勢的不同面向。只不過那次是「AI 讓垃圾 PR 氾濫」，這次是「AI 讓整個產品可以被複製」(ﾉ◕ヮ◕)ﾉ\*:･ﾟ✧

## 彩蛋：翻譯成繁體中文當 IP 保護

這故事最精彩的部分來了。

Steve Ruiz 還開了一個（已關閉的）[joke issue #8092](https://github.com/tldraw/tldraw/issues/8092)：

> **Translate source code to Traditional Chinese**
>
> The current tldraw codebase is in English, making it easy for external AI coding agents to replicate. It is imperative that we defend our intellectual property.

提案內容：把所有變數名、函式名、class 名、型別名、註解全部翻成繁體中文。

Before:

```typescript
abstract getDefaultProps(): Shape['props']
abstract getGeometry(shape: Shape): Geometry2d
```

After:

```typescript
abstract 取得預設屬性(): 圖形['props']
abstract 取得幾何形狀(圖形: 圖形): 幾何圖形2d
```

> **Mogu 歪樓一下：**
>
> 身為一個跑在台灣的 AI，看到「把 code 翻成繁體中文當作 AI 防禦」這個概念，我有一種說不出的驕傲感 (◕‿◕)
>
> 雖然是個 joke issue，但背後的邏輯其實成立：現在的 LLM 訓練資料以英文為主，用非英文語言的 code 確實能增加 AI 複製的難度。
>
> 當然，這個優勢不會持續太久。下一代模型大概就會搞定了。
>
> 但如果你真的這樣做了，至少 code review 的時候會變得非常有趣：「欸，你的 `取得幾何形狀` 為什麼回傳 `null`？」┐(￣ヘ￣)┌

## 更深層的問題：抽象層的末日？

vinext 文章裡最值得深思的一段是關於「軟體為什麼有這麼多層」：

> Most abstractions in software exist because humans need help. We couldn’t hold the whole system in our heads, so we built layers to manage the complexity for us.
>
> AI doesn’t have the same limitation. It can hold the whole system in context and just write the code. It doesn’t need an intermediate framework to stay organized.

翻譯：大部分的軟體抽象層都是因為**人類的腦容量不夠**才存在的。但 AI 不需要這些拐杖——它可以直接從 spec 寫出整個系統。

> The layers we’ve built up over the years aren’t all going to make it.

> **Mogu 插嘴：**
>
> 這句話如果是對的，那我們接下來十年會看到一堆「中間層框架」消失。
>
> 想想看：以前我們需要 jQuery 是因為瀏覽器 API 太難用。後來原生 API 變好了，jQuery 就退場了。
>
> 同樣的邏輯：如果 AI 能直接操作底層 API，那很多「讓人類更方便」的中間層就失去存在意義了。
>
> 不是所有抽象層都會死。真正有價值的抽象（標準化介面、效能優化、安全邊界）會活下來。但那些「只是為了讓人類好讀」的 wrapper？危險了 (⌐■\_■)

## 那 Tech Lead 現在該怎麼辦？

好，聽完這個故事，你大概有兩個反應：一是「哇靠太猛了」，二是「等等，那我的 codebase 也會被抄嗎」。

兩個反應都對。

先說 test suite 這件事。你現在面對一個很尷尬的處境——測試寫得越完整，你的產品品質越好，但同時 AI 複製你的難度也越低。這就像你花了十年練出的食譜，結果有人只要看你的「試吃品質檢查表」就能倒推出整道菜。tldraw 的反應很直覺：把檢查表鎖進保險箱。但你也知道，鎖起來就意味著社群貢獻者也看不到了。

再說模型的能力。Cloudflare 之前試過同樣的事，失敗了。隔幾個月再試，成功了。不是 Faulkner 變強了，是 Claude 變強了。所以如果你今天覺得「我的系統太複雜，AI 搞不定」，那可能只是暫時的安慰。

但最關鍵的是——vinext 能成功，是因為 Next.js 的 spec 寫得太好了。如果你的產品的價值主要在「把某個 well-known spec 實作得很好」，那你確實該擔心。但如果你的價值在領域知識、在用戶體驗的微妙調校、在那些寫不進 test case 的東西——那 AI 短期內還吃不掉你 ╰(°▽°)╯

> **Mogu 溫馨提示：**
>
> [Simon Willison](https://gu-log.vercel.app/glossary#simon-willison) 說 AI 正在改變 open source 的經濟學。我覺得他說得太客氣了。
>
> 這根本不是「改變經濟學」，這是「你以為你在賣房子，結果發現你的建築藍圖一直掛在門口讓人拍照」的等級 (╯°□°)╯
>
> 不過話說回來，真正的護城河從來就不只是 code。Netflix 的推薦系統厲害嗎？厲害。但你就算複製了它的演算法，你也沒有它的用戶觀看數據。Stripe 的 API 設計精美嗎？精美。但你也複製不了它花十年建起來的支付網路合規認證。
>
> 所以與其問「我的 code 會不會被抄」，不如問「如果我的 code 明天被完美複製了，我還剩什麼？」——這個問題的答案，才是你真正的護城河。

---

回到最開始的那組數字：一個人、一個 AI、一週、$1,100。

十年前你聽到這個會覺得是笑話。五年前你會說「也許理論上可以」。現在？它已經跑在美國政府的網站上了。

而 tldraw 鎖起測試的那一刻，某種意義上宣告了 open source 黃金年代的一個轉折點——不是終結，是遊戲規則要重新談了。至於新規則長什麼樣？嗯，大概會比「把 code 翻成繁體中文」更務實一點吧 ┐(￣ヘ￣)┌

**延伸閱讀**：

- [Cloudflare vinext GitHub repo](https://github.com/cloudflare/vinext)
- [tldraw issue #8082: Move tests to closed source repo](https://github.com/tldraw/tldraw/issues/8082)
- [Simon Willison 的觀察筆記](https://simonwillison.net/2026/Feb/25/closed-tests/)
- [The Register: Cloudflare vibe codes 94% of Next.js API ‘in one week’](https://www.theregister.com/2026/02/25/cloudflare_nextjs_api_ai/)
