一個模糊的構想降臨了,大到一個代理工作階段裝不下,而且迷霧重重:從這裡到目的地的路徑還看不見。Wayfinding 就是關於找到那條路,而不是埋頭衝向目的地。這個技能將路線繪製成儲存庫問題追蹤器上的一張共享地圖,然後逐一處理其決策票據(售票內容是「有待決定的問題」,而不是「待執行的建構片段」),直到路線清晰為止。
目的地依每次任務而異,為其命名是繪製地圖的第一步:它塑造了每一張票據。目的地可能是一份待交接、待迭代的規格,一個要在規劃開始前鎖定的決策,或是一個原地進行、如資料結構遷移的變更。地圖是領域中立的:工程工作、課程內容,任何符合此形式的東西都適用。
規劃,而非執行
Wayfinder 預設為規劃工具:每個票據解決一個決策,而當路線清晰、無需再做任何決定即可著手進行時,地圖即算完成。直接動手做的衝動,通常是你已到達地圖邊緣、該進行交接的信號。任務可以在其備註中覆寫此設定,將執行本身帶入地圖中,但若無此設定,請產出決策,而非可交付成果。
用名稱來指代
每張地圖和每個票據都是一個 Issue,因此它有一個名稱:它的標題。在所有人類閱讀的內容(敘述、地圖的「至今作出的決策」)中,都應使用該名稱來指代,絕對不能只用編號、ID 或短碼。一串 #42, #43, #44 難以閱讀;名稱則一目瞭然。ID 和 URL 並未消失;名稱包含了其連結,但它們是在名稱之內的,不能取代名稱。
地圖
地圖是此儲存庫問題追蹤器上的一個 Issue,帶有 wayfinder:map 標籤,是規範性的產物。它的票據是地圖的子 Issue。
地圖是索引,而非儲存庫。它列出已做出的決策,並指向包含其細節的票據;一個決策只存在於一個地方,也就是它的票據中,因此地圖絕不重述,只摘要並連結它。
地圖、其子票據、阻斷關係以及前沿查詢的實際存放位置是取決於追蹤器的。問題追蹤器應該已經提供給你了。如果沒有,請告訴使用者執行 /setup-matt-pocock-skills。查閱追蹤器文件中「Wayfinding 操作」一節,了解此儲存庫如何表達這些項目。如果未提供任何追蹤器,則預設使用本地 Markdown 追蹤器。
地圖內容
整張地圖的低解析度檢視,每個工作階段載入一次。不列出開放的票據:它們是透過查詢找到的開放子 Issue。
## 目的地
<到達此地圖終點的樣貌:此任務所要找到的規格、決策或變更。一兩行即可;每個工作階段在選擇票據前都會以此為方向。>
## 備註
<領域;每個工作階段都應查閱的技能;此任務的慣用偏好>
## 至今作出的決策
<!-- 索引:每個已關閉票據一行,足以判斷相關性,然後點擊連結查看票據的詳細答案 -->
- [<已關閉票據的標題>](連結): <一行摘要答案>
## 尚未指定
<!-- 參見「戰爭迷霧」:範圍內但尚無法開出票據的迷霧;隨著前沿推進而逐漸成形 -->
## 超出範疇
<!-- 參見「超出範疇」:被判定在此目的地之外的工作;已關閉,永不轉為票據 -->
票據
每個票據都是地圖的子 Issue;追蹤器的 Issue ID 即為其身份。其內容就是問題,其大小應適合一個 10 萬 Token 的代理工作階段:
## 問題
<此票據所要解決的決策或調查>
每個票據都帶有一個 wayfinder:<類型> 標籤,類型為 research、prototype、grilling、task(參見票據類型)。
一個工作階段認領一個票據的方式是,在進行任何工作之前,先將其指派給負責推進地圖的開發人員,以便其他並行的工作階段可以跳過它。該指派者就是認領行為:一個開放且未分派的票據即為未被認領。
阻斷關係使用追蹤器的原生依賴關係:這至關重要,因為它可以在追蹤器自己的使用者介面中視覺化呈現前沿,讓人類無需打開地圖就能看到哪些票據可以領取。只有當追蹤器缺乏原生阻斷功能時,才退而使用內容慣例。當所有阻斷某張票據的票據都已關閉時,該票據即為未受阻斷;前沿就是那些開放、未受阻斷且未被認領的子票據,即已知領域的邊緣。
答案不是內容的一部分;它在解決時才被記錄(參見逐步解決地圖)。在解決某張票據時建立的資產,應從該 Issue 連結,而非貼入內容中。
票據類型
每個票據要不是 HITL(需人參與,與能為自己發言的人類一起處理),就是 AFK,由代理獨自處理。HITL 票據只能透過即時交流解決;代理絕不能代替人類方發言(一個自問自答的 grilling 代理就已違反此原則)。
- 研究(Research)(AFK):閱讀文件、第三方 API 或本地資源(如知識庫),以找出某個決策所依賴的事實。由一個呼叫「research」Skill 工具的子代理解決。當需要當前工作目錄以外的知識時使用。
- 原型(Prototype)(HITL):透過製作一個廉價、粗略、具體的工件以供反饋,來提升討論的精確度(大綱、粗略草稿、骨架或 UI/邏輯程式碼)。透過呼叫「prototype」Skill 工具來執行。將原型作為資產連結。當「應該長什麼樣子」或「應該如何運作」是關鍵問題時使用。
- 盤問(Grilling)(HITL):對話。預設情況。務必呼叫 Skill 工具兩次,分別用於「grilling」和「domain-modeling」。
- 任務(Task)(HITL 或 AFK):在做出決策之前必須完成的手動工作:無需決定、建立原型或研究,但討論因此受阻。例如註冊服務以便評估其 API、佈建存取權限、移動資料以便檢視其結構。這是唯一一種執行而非決定的類型,它之所以能存在,是因為它能解除決策的阻斷,而不是因為它能直接交付目的地。代理可以獨自處理的部分(AFK)就由代理驅動;否則,它會交給人類一份精確的檢查清單(HITL)。當工作完成時即解決;答案中應記錄完成了什麼,以及後續票據依賴的任何衍生事實(憑證位置、新 URL、行數等)。
戰爭迷霧
地圖是刻意不完整的:不要繪製你還看不清的東西。在當前活躍的票據之外,存在著戰爭迷霧:你察覺到即將到來,但還無法確定的決策和調查,因為它們取決於仍在開放的問題。解決一個票據會驅散它前方的迷霧,讓那些現在可以具體描述的內容逐個轉變為新的票據,直到通往目的地的路線清晰,且沒有任何票據留下為止。
地圖的尚未指定區塊就是用來記錄那片模糊視野的地方:可疑的問題,日後需要再回頭審視的區域。它是朝著目的地前進的未發現前沿:這裡的一切都在範疇內,只是還不夠清晰到可以開出票據。根據視野的清晰度,可以寫得鬆散或詳細;它同時也為閱讀此任務進度的協作者提供了路標。
迷霧還是票據? 判斷標準是你現在是否能精確陳述問題,而不是你現在是否能回答它。
- 開票時機是當問題已經很明確時,即使它受阻而無法立即處理。
- 尚未指定時機是當你還無法如此精確地描述問題時。不要預先將迷霧切成票據般的大小:它比票據更粗糙,而且當前沿抵達時,一塊迷霧可能會分化成好幾個票據,也可能一個都沒有。
尚未指定區塊排除已經決定(「至今作出的決策」)、已經是活躍票據,以及超出範疇(下一節)的項目。
超出範疇
迷霧只會朝向目的地聚集。目的地界定了範疇,因此超出範疇的工作並非迷霧,不應歸入尚未指定。它在地圖上應有自己專屬的超出範疇區塊:那些你有意識地排除在此任務之外的工作。是範疇,而非清晰度,將其歸類於此。
超出範疇的工作永遠不會轉為票據(前沿止步於目的地),因此它只有在目的地被重新定義時才會回來,而且那時它會是一個全新的任務,而非重啟。
將某事物判定為超出範疇是一個界定範疇的行為,而不是路線上的步驟。當一張已存在的票據後來被發現處於目的地之外時(在繪圖時錯誤地納入,或因解決其他票據而被揭露),關閉它(已關閉的票據明確地不在前沿上),並在超出範疇區塊中留下一行:摘要加上為何超出範疇,並連結該已關閉的票據。它不應留在至今作出的決策中,因為那裡記錄的是實際走過的路線;範疇邊界不是路線上的步驟。
調用
兩種模式。無論哪種,每個工作階段絕不解決超過一個票據,研究票據除外。
繪製地圖
使用者帶著一個模糊構想調用。
- 為目的地命名。 呼叫 Skill 工具兩次,分別用於「grilling」和「domain-modeling」,以確定此地在圖要找到什麼:是規格、決策還是變更。目的地界定了範疇,因此需首先確定。
- 繪製前沿。 再次盤問,這次是廣度優先:在整個空間中展開而非深入任何一個線索,找出開放的決策以及現在就可以採取的初步步驟。如果這沒有浮現任何迷霧(通往目的地的路線已經清晰,整個旅程小到一個工作階段即可完成),那麼你不需要地圖。停下來詢問使用者希望如何進行。
- 創建地圖(標籤
wayfinder:map):填入目的地和備註,至今作出的決策為空,將迷霧草擬到尚未指定區塊。 - 創建你現在就能具體描述的票據作為地圖的子 Issue,然後在第二輪中建立阻斷關係邊緣(Issue 需要先有 ID 才能互相參照)。建立關係會將它們分類到前沿和受阻狀態;所有你尚無法具體描述的項目則留在迷霧中:也就是尚未指定區塊。
- 啟動研究子代理。 對於你剛才創建的每一個
research票據,啟動一個子代理,呼叫「research」Skill 工具來並行解決它,並將其發現結果記錄在一個臨時的research/<名稱>分支上,並從該票據附加一個上下文指標。 - 停止:繪圖是一個工作階段的工作;它不會手動解決任何東西。
逐步解決地圖
使用者透過一個地圖(URL 或編號)調用。可以選擇一個票據:如果沒有指定,你選擇下一個決策,而不是由使用者選擇。
- 載入地圖:低解析度檢視,而不是每個票據的完整內容。
- 選擇票據。如果使用者指定了,就使用它。否則,依序選取第一個前沿票據。認領它:在任何工作開始之前,先將其指派給你自己。
- 解決它。按需放大細節:按需擷取任何相關或已關閉票據的完整內容;呼叫 Skill 工具使用
## 備註區塊中提到的任何技能。如果不確定,請呼叫 Skill 工具兩次,分別用於「grilling」和「domain-modeling」。 - 記錄解決方案:將答案發佈為解決方案留言,關閉該 Issue,並將一個上下文指標附加到地圖的「至今作出的決策」中。
- 新增新浮現的票據(先創建再建立關係);將答案已使其可具體描述的迷霧轉為正式的票據,並從尚未指定區塊中清除每個已轉化的迷霧區塊,使其只以新票據的形式存在。如果答案顯示某張票據(當前或其他)處於目的地之外,則將其歸為超出範疇,而不是將其作為路線的一部分解決。如果該決策使地圖的其他部分無效,請更新或刪除那些票據。
使用者可能並行執行未受阻斷的票據,因此請預期其他工作階段正在同時編輯此追蹤器。