# 策展 · X (Twitter) 🔥🔥🔥

> 作者：Larsen Cundric (@larsencc) · 平台：X (Twitter) · 日期：2026-05-06

> 原始來源：https://x.com/larsencc/status/2051742650525716896

## 中文摘要

Browser Use首位工程師自曝4,000次commit全錯，暴露單人開發速推帶來的連串災難。

作者於2025年4月加入Browser Use，作為首位工程師，在一年內貢獻超過4,000次commit，建置支撐數百萬Agent運行的雲端基礎設施，卻犯下無數速推失誤，從金錢損失到使用者流失，皆因未花5分鐘緩下來驗證而起。

**早期部署災難（2025年4-6月）**  
首度部署即失敗：Lambda置於無NAT閘道的私有子網路，且資料庫安全群組未包含Lambda，兩個無關問題同時發生，因無staging環境而未及早攔截。  
作者硬編`us-west-1`至Lambda log ARNs、SNS policies及ALB certificates，儘管實際運行於`us-east-2`，導致Lambda無法寫入日誌，花費尷尬時長逐字檢查ARN才發現，三次commit修復staging與production，數月後SSM ARNs重蹈覆轍。  
浪費3小時、六次commit試圖在Lambda容器內安裝Chromium，搞系統依賴、手動安裝、多種Playwright模式，後醒悟透過CDP連線遠端瀏覽器，根本無需本地瀏覽器。

**計費漏洞連環爆（2025年7-8月）**  
「claim free credits」端點直接給使用者$10，`free_credits_claimed`布林值雖設為`True`，卻未事先檢查，一個`if`語句修復，1分鐘後第二commit改無聲返回以防雙擊按鈕。  
信用扣除用`asyncio.Lock`以使用者ID為鍵的Python字典，單程序有效但跨pod無效，不同pod並發請求雙重扣款不知情；改用`SELECT ... FOR UPDATE`，卻在大規模時每筆計費事件獨佔鎖定同一使用者列，後端卡住等待。無適當帳冊，僅依賴使用者模型的就地信用欄位，導致並發爭搶。  
其他問題：信用轉換用`round()`，`round(0.4)`為0，低於半信用LLM呼叫全免費；Stripe webhook於`customer.subscription.created`給予月信用，Stripe在付款成功前即發送，使用者註冊獲信用後可不付款，每個皆單行修復，卻未出貨前攔截。

**8月19日三重相同bug**  
當天三個`UnboundLocalError`修復，同樣模式：變數定義於`try`區塊，`except`區塊引用，若`try`失敗前未賦值則不存在，三個不同檔案同病，讓人懷疑還有多少隱患。  
同日資料庫存無時區戳記（naive timestamps），程式碼用`datetime.now(timezone.utc)`，Python拒比對naive與aware datetime，導致訂閱檢查崩潰阻付費用戶、任務篩選壞API，用`.replace(tzinfo=None)`駭客修復，真解為1個月後62檔案重構，此類bug出現三次才根治。  
該週：從字串常數重構為enum，唯忘更新傳給LLM SDKs的函數，Anthropic、Azure、Google、Groq全收Python enum物件而非字串，所有Agent運行壞掉，錯誤訊息無用。

**無人索求的功能災作（2025年8-10月）**  
花一下午建Lambda GIF生成器作Agent運行預覽，另一下午戰記憶體：批次處理、截圖上限、ImageMagick限制、垃圾回收，棄ImageMagick改ffmpeg，2小時四commit，1週後刪602行基礎設施，無人需要也無人察覺移除。  
建獨立計費服務，首日排隊類型錯、記憶體分配錯、逾時錯，仍推production，6週後換Autumn移除；途中除錯S3存取時將AWS憑證log至stdout，生產環境log存2天才察覺。  
最驕傲commit訊息：「Remove the fucking hamster」。

**重構全毀（2025年11-12月）**  
12月底移`main.py`至`app/`清理結構，壞ECS（uvicorn target錯）、Docker（COPY路徑錯）、config（循環匯入）。  
後續12+修復commit，五個於12月29日午夜：加`__init__.py`、改uvicorn target、最終放棄還原；發現config抽取壞SSM參數注入，因pydantic-settings於建構時snapshot `os.environ`，後注入太遲，亦還原。  
重構壞部署管線，為觸發測試部署：註解Stripe依賴、推、驗證、還原，五commit如「Test a fucked deployment」及「Test a fucked deployment again」。  
該期：設WAF速率限制立即擋自家Stripe webhook，YC hackathon前全移除，數週未復原。

**配置地獄（2026年1月）**  
改config載入從`extra='allow'`至`extra='ignore'`、移除獨立config類，次日加密壞（加密config類不存在），44分後auth壞，30分後payments壞，一改三服務倒，兩天修復，各服務config模式各壞各樣。  
Stripe強3D Secure後，auto-recharge無backoff無上限，重試即重收費；修復為需使用者動作時停用flag，加每小時idempotency key雙防，本不該無此出貨。  
細微bug：Lambda handler用`asyncio.run()`，冷啟動OK，暖啟動event loop已關，每async client黏死loop，僅真流量顯現。

**記憶體洩漏馬拉松（2026年2月）**  
2月18日七commit追記憶體洩漏：每LLM呼叫新生httpx client，各配連接池永不關；逐做gateway singleton、預建provider實例、billing client singleton、快取HTTP client、試注入有界httpx至Google SDK（SDK不支援而還原）、最終清錯誤回應內部細節。  
每修揭下洩：`ssl.create_default_context()`耗~1.8s CPU，每請求新生client負載下擋event loop，整日學到HTTP client應singleton。  
Agent微VM間query暫停，喚醒時TCP socket死但HTTP client不知；首修用不存在API壞沙盒、次用對API但monotonic clock暫停凍結，計時器視0秒過死連接似活、最終每query毀重建client，花數日裝聰明前蠻力勝。  
7月DB連接bug復燃：不同端點同模式，持DB連接發HTTP致pool耗盡，此為前端工程師寫後端碼，審查未擋，因數月前「已修」而不察。

**規模危機（2026年3月）**  
最大事件自作孽：負載測試Unikraft裸機殺死生產機，45分停機搶救，Agent沙盒機全沒，因未思限界指向生產。  
另一大事件：第三方Agent SDK內同步HTTP呼叫，從async handler呼叫，其API慢時event loop凍，整平台壞，4分內262 gateway timeouts；APM誤示網路問題，因全HTTP同時慢，但event loop凍無一完成。21呼叫點僅1處已修，註解「offload sync SDK call to thread to avoid blocking event loop」，卻未全推。

**核心教訓**  
錯誤落數模式：假設而非檢查——SDK async、keepalive計時器耐VM暫停、`round()`適計費，全生產破壞皆驚。  
未測全徑即出貨：Stripe SDK、S3事件處理器、後端重構、config遷移，腦中OK部署壞，生產逐commit修。  
選巧解勝簡解：keepalive計時器vs重建client、singleflight with `asyncio.shield()` vs per-follower futures，巧解總需多修。  
未完工：21呼叫點僅1 sync-to-async修、DB連接審計未做，半修給假自信。  
建無人要物：GIF生成、獨立計費服務、602行無用無惜基礎設施。  
速推真貌：搞砸、學、再搞、再學，循環不絕，但學得更快；快速成長因速適，非避錯。「demo運作」到「規模運作」間距約4,000 commit，多數如此。

## 標籤

Agent, 自動化, Deployment, 其他, Browser Use, AWS
