Skip to content

.maigo/ Artifacts Reference

.maigo/ 全貌型錄:這個目錄底下有哪些檔、各自的正典(code + skill)是誰、 生命週期多長。找不到某個 .maigo/ 檔案該歸哪一類時,先查這頁;機器判斷 邏輯(哪個檔案屬於哪一類)由 scripts/maigo_dir_catalog.py 執行,不是散文 自己判斷——見 /maigo:doctor 的「.maigo/ 型錄」段。

帶識別碼命名的產物

所有 kind 全部由 scripts/artifact_path.py 的 _KNOWN_KINDS 單一正典定義, resolve_for_write() 負責一般產物的歸屬檢查(最終 review 報告用下述 publisher)——同一路徑撞到不同主題時回 status: conflict,呼叫端必須先問使用者再決定要不要用建議的候選路徑, 不擅自覆寫。分兩種形狀:

plan(扁平,<kind>-<id>.md)

種類 檔名規則 誰寫的 正典來源 生命週期
plan .maigo/plan-<id>.md 🩵 Tomori scripts/artifact_path.py + artifact-ownership 單次任務的實作計畫,任務結束後仍留存供追溯

review / issue(巢狀,<group>/<id>/<stem>.md)——按 PR/issue 分資料夾

同一顆 PR 的 review / review-rubric / review-draft / pr-comments 收進同一個 .maigo/review/<id>/ 目錄;同一條 issue 的 triage-rubric 收進 .maigo/issue/<id>/;conflict 後綴(第 2 個 attempt 起)落在檔名層 (rubric-2.md),不落在目錄層。

種類 檔名規則 誰寫的 正典來源 生命週期
review-rubric .maigo/review/<id>/rubric.md 🩵 Tomori scripts/artifact_path.py + artifact-ownership 對照基準,review 全程比對用;review 結束後留存
review .maigo/review/<id>/review.md orchestrator(/maigo:review) scripts/review_report.py(重用 artifact_path 命名) 同 source 只留最新完整 report;內含 TOC、原作者(--author)、最後 review 時間、reviewed commit 與本地已看完標記
review-draft .maigo/review/<id>/draft.md orchestrator(/maigo:review §4.5) 同上 待貼上 GitHub 的 review body 草稿;board_state.py 的 待送出 next_action 永遠指向這個路徑
pr-comments .maigo/review/<id>/pr-comments.md orchestrator(/maigo:address-comments) 同上 PR 既有 review comment 的抓取與分類結果
triage-rubric .maigo/issue/<id>/rubric.md 🩵 Tomori 同上 issue triage 的對照基準

review_report.py publish 先原子寫入最新 review.md,才清理同目錄 review-N.md 與 .maigo/review-<id>.md 中可確認同 source 的舊報告;未知歸屬、較新的 timestamp、 草稿、rubric、手寫檔與其他 PR 保留。歸屬看 metadata 的 source 或舊 report 明確 PR URL, 不因為檔名相似就刪。清理結果回傳給 caller,同步修正 board 細節檔的報告連結。

review_report.py acknowledge 記「使用者已看完這版」,不送 GitHub、不改最後 review 時間;使用者在 board 把 👀 行勾成 [x],下次 /maigo:board 刷新就會呼叫它(--reviewed 等同勾上)。 新 head/作者留言讓 board 重新排入待看(👀 行自動取消勾);新 report 清除上一輪確認。

分目錄前的扁平檔(flat_exists:,只可讀)

巢狀佈局採用前寫下的 <kind>-<id>.md(例:review-rubric-42.md)——resolve_for_write() 發現這種檔案存在時,Resolution.flat_path 會填值(CLI 印 flat_exists: 那行), 只供讀取退路,永遠不當寫入目標;Write / Edit 寫進這個形狀會被 hooks/legacy_artifact_path_check.py 擋下。既有的這類檔案可用 scripts/migrate_legacy_artifacts.py (先 dry-run 看清單,使用者同意後 --apply)搬進巢狀佈局,順手把 .maigo/i/*.md 的 ## 筆記 段裡指到舊檔名的連結改成新相對路徑。--apply 中途中斷時,重跑同一 條指令即可:它照第一次寫下的搬移對應表續跑,不重新規劃。

Work Board(board.md + i/<slug>.md)

種類 檔名規則 誰寫的 正典來源 生命週期
Work Board 索引 .maigo/board.md orchestrator(/maigo:board / /maigo:review) scripts/board_state.py + work-board skill 跨 session 常駐,不隨單次任務結束而收檔
Work Board 細節檔 .maigo/i/<slug>.md 同上 同上 跟著對應 issue/PR 的追蹤狀態走;沒有索引行引用的孤兒細節檔視為 dd(使用者刪了那一行),見 work-board skill §3a

board 這條線是全 repo 最佳實踐——code 定正典(board_state.py)、skill 鏡射 人讀版本(work-board)、test 守一致(tests/test_board_state.py),三方鎖住, 本頁不重寫它的行文法,只在型錄裡佔一個位置。board 的內部狀態(排除紀錄、快照)放在 .maigo/_internal/board/,對帳、discovery 與排除規則見 work-board skill §3a。

_internal/:只給機器讀

.maigo/_internal/ 底下的所有內容都只給機器讀,使用者在 .maigo/ 根目錄只會看到給人讀的檔案。 型錄(maigo_dir_catalog)與 /maigo:doctor 永遠不列這個目錄。目前只有 board 使用, 由 scripts/board_sync.py 自行建立與寫入:

檔案 用途
_internal/board/dropped.jsonl 排除紀錄:每行一個 drop / revive 事件,只 append;dd 掉的項目之後不會被 discovery 補回,除非重新被指名
_internal/board/snapshot.json 上次刷新結束時 board 上的項目與勾選狀態,用來偵測 dd 與 [x] 變化
_internal/board/backup/<UTC ts>/ refresh --apply 寫回前複製的 board.md 與細節檔,只留最新 10 份;寫入失敗時用來還原

非 markdown 機器狀態檔

一行帶過,內部用,非 agent 面向格式:session-head.json(session 開始時的 HEAD SHA)、token-usage.jsonl(token usage metadata)、 test-failures.jsonl / soyo-must-fix.jsonl(retry / failure log)、 __titles.json(內部快取)、migrate-legacy-artifacts.manifest.json (scripts/migrate_legacy_artifacts.py --apply 的搬移對應表,只在一次 apply 沒跑完時留存,重跑時照它續跑,跑完即刪)。這些檔日後可能搬進 _internal/。

舊固定檔名與未登記檔案

升級前留下的舊固定檔名(.maigo/plan.md 這類,legacy_fixed_name)、分目錄前的 扁平檔(flat_identifier,見上一節)與不屬於上述任何種類的未登記檔案 (unregistered),一律只列不刪——正典邏輯見 scripts/maigo_dir_catalog.py (六類:nested / identifier_named / flat_identifier / legacy_fixed_name / registered_non_artifact / unregistered),人讀報告見 /maigo:doctor。要不要清由使用者自己決定,這份型錄與 doctor 報告都不建議刪除哪一個。

兩個字面上像 review kind 產物、但不是的檔名——categorize() 特別排除, 不會被搬移或擋下:review-batch-state.md(本 repo 找不到 producer,型錄列為 unregistered)、review-board.md(舊版 Work Board 檔名, commands/board.md 仍會偵測並遷移它,型錄列為 registered_non_artifact)。