與條件等待:6 個(gè)測(cè)試故障一次修完的完整路徑)
Superpowers 并行代理分發(fā)與條件等待6 個(gè)測(cè)試故障一次修完的完整路徑【免費(fèi)下載鏈接】superpowersAn agentic skills framework software development methodology that works.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/su/superpowersSuperpowers 是面向 AI 編碼代理的技能框架與軟件開發(fā)方法論。本文深入拆解它的兩個(gè)高級(jí)能力——并行代理分發(fā)與條件等待瞄準(zhǔn)兩個(gè)高頻痛點(diǎn)多測(cè)試文件失敗時(shí)串行排查慢、時(shí)序猜測(cè)導(dǎo)致測(cè)試時(shí)紅時(shí)綠。 先踩坑再修路6 個(gè)紅著測(cè)試散在 3 個(gè)文件里一次大重構(gòu)之后全量測(cè)試跑出來(lái) 6 個(gè)用例掛了散在 3 個(gè)文件里agent-tool-abort.test.ts3 個(gè)失敗全是時(shí)序問(wèn)題batch-completion-behavior.test.ts2 個(gè)失敗工具調(diào)用沒執(zhí)行tool-approval-race-conditions.test.ts1 個(gè)失敗執(zhí)行計(jì)數(shù)返回 0逐個(gè)排查的代價(jià)不只是6 個(gè)問(wèn)題每個(gè)文件都要花時(shí)間重新建立上下文時(shí)序類 bug 更是惡心——本地看著正常CI 上變紅再跑一次又綠根因很難鎖定。 拆開看并行代理分發(fā)怎么干活并行代理分發(fā)的核心是三步數(shù)據(jù)流可以一句話說(shuō)清按故障域拆輸入3 個(gè)測(cè)試文件對(duì)應(yīng) 3 個(gè)互不相關(guān)的子系統(tǒng)——abort、批量完成、競(jìng)態(tài)條件沒有共享狀態(tài)查任何一個(gè)都不需要另外兩個(gè)的上下文。并行派發(fā)在同一個(gè)響應(yīng)里一次性派出 3 個(gè)子代理每個(gè)代理只拿到文件范圍、明確目標(biāo)和約束條件不繼承主會(huì)話的歷史。同一響應(yīng)里的多次派發(fā)并行執(zhí)行一個(gè)響應(yīng)派發(fā)一個(gè)就是串行——這是整個(gè)機(jī)制最關(guān)鍵的一處細(xì)節(jié)。整合輸出每個(gè)代理返回發(fā)現(xiàn)了什么、改了什么的摘要主代理核對(duì)沒有兩個(gè)代理動(dòng)過(guò)同一處代碼再跑全量測(cè)試驗(yàn)證。什么時(shí)候用3 個(gè)以上測(cè)試文件因不同原因失敗、彼此沒有共享狀態(tài)、代理不會(huì)碰同一文件。什么時(shí)候別用失敗之間相互關(guān)聯(lián)修好一個(gè)可能連帶修好另一個(gè)或必須先看懂整個(gè)系統(tǒng)狀態(tài)那就先串行排查。決策樹和代理提示詞模板都在 skills/dispatching-parallel-agents/SKILL.md 里。條件等待解決的是另一半問(wèn)題——時(shí)序。它的數(shù)據(jù)流同樣簡(jiǎn)單輸入一個(gè)判斷函數(shù)比如事件列表里出現(xiàn) DONE 事件處理端每 10ms 輪詢一次重新求值滿足立即返回撞上 5000ms 超時(shí)還沒滿足就拋一個(gè)帶清晰描述的錯(cuò)誤。項(xiàng)目附帶 3 個(gè)現(xiàn)成封裝waitForEvent等某類事件、waitForEventCount等某類事件湊夠 N 個(gè)、waitForEventMatch按自定義謂詞等。兩種寫法的對(duì)比非常直觀// 改前猜時(shí)序 await new Promise(r setTimeout(r, 50)); // 改后等真實(shí)條件 await waitFor(() getResult() ! undefined);什么時(shí)候用測(cè)試?yán)镉腥我?sleep、或本地綠 CI 紅的用例。什么時(shí)候別用被測(cè)對(duì)象本身就是計(jì)時(shí)行為比如防抖間隔那時(shí)應(yīng)先等觸發(fā)條件再按已知周期加一段有注釋說(shuō)明的固定延時(shí)。 跟著走一遍從一輪報(bào)錯(cuò)到全綠以 2025-10-03 的一次真實(shí)會(huì)話為線索。大重構(gòu)后 6 個(gè)失敗散在 3 個(gè)文件里先看到報(bào)錯(cuò)按域拆分abort、批量完成、競(jìng)態(tài)條件是三個(gè)獨(dú)立子系統(tǒng)判斷可以拆 3 路并行。隨后在同一響應(yīng)里派出 3 個(gè)子代理每個(gè)只帶上測(cè)試文件路徑、失敗用例名和別動(dòng)其他代碼的約束。三個(gè)代理幾乎同時(shí)返回修復(fù)路徑各不一樣Agent 1: 把任意 setTimeout 換成事件式等待 Agent 2: 發(fā)現(xiàn) threadId 放錯(cuò)了事件結(jié)構(gòu)的字段 Agent 3: 給異步工具執(zhí)行補(bǔ)了完成等待最后主代理依次讀完 3 份摘要確認(rèn)沒有同文件改動(dòng)跑全量測(cè)試——全綠。 數(shù)據(jù)說(shuō)話條件等待替代 setTimeout 之后指標(biāo)修復(fù)前修復(fù)后通過(guò)率3 個(gè)文件共 15 個(gè)不穩(wěn)定測(cè)試60%100%測(cè)試套件執(zhí)行時(shí)間基準(zhǔn)快 40%6 個(gè)故障逐個(gè)串行排查3 個(gè)代理并行同時(shí)返回競(jìng)態(tài)條件CI/高負(fù)載下頻繁紅消除以上數(shù)據(jù)來(lái)自 2025-10-03 調(diào)試會(huì)話的記錄見 skills/systematic-debugging/condition-based-waiting.md。?? 避坑清單并行分發(fā)與條件等待的 5 個(gè)坑任務(wù)派太寬給代理把所有測(cè)試修好它會(huì)在全局里打轉(zhuǎn)。范圍收窄到一個(gè)文件報(bào)錯(cuò)信息和用例名直接貼進(jìn)去。有共享狀態(tài)還硬派兩個(gè)代理改同一文件回來(lái)就是沖突。派發(fā)前先確認(rèn)故障域獨(dú)立不獨(dú)立就先串行。輪詢太快或沒超時(shí)1ms 輪詢燒 CPU忘記超時(shí)則條件不滿足時(shí)測(cè)試永久掛起。輪詢間隔定 10ms超時(shí)和錯(cuò)誤信息必給。等之前緩存了數(shù)據(jù)循環(huán)前把事件列表讀進(jìn)局部變量輪詢查到的是舊快照永遠(yuǎn)為假。getter 要在輪詢循環(huán)里現(xiàn)查??考哟蟪瑫r(shí)掩蓋問(wèn)題50ms 改 500ms 只是把競(jìng)態(tài)藏起來(lái)負(fù)載上來(lái)還會(huì)紅。先修真實(shí)原因而不是抬超時(shí)。并行代理分發(fā)只對(duì)真正獨(dú)立的故障才劃算問(wèn)題彼此關(guān)聯(lián)時(shí)拆并行只是串行的換皮。條件等待也是一筆交易用 10ms 輪詢的間隔換穩(wěn)定性。如果手頭正好有測(cè)試多文件失敗、或時(shí)紅時(shí)綠的場(chǎng)景可以試試拆成獨(dú)立的并行任務(wù)再把 sleep 換成條件判斷?!久赓M(fèi)下載鏈接】superpowersAn agentic skills framework software development methodology that works.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/su/superpowers創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考