今天不再把完整需求全部寫進 Codex Prompt,而是先建立一張 GitHub Issue,再讓 Codex 直接按照 Issue 實作搜尋與狀態篩選。
前面的功能需求都直接放在對話中。這種方式很方便,但需求只存在於某一個 Codex 任務裡。
Issue 則可以成為 repository 的工作紀錄,讓人和 Codex 看到相同內容:
這不代表 Issue 寫完就不能調整,而是每次改變需求時,都有一個共同來源可以更新。
PRD 已經定義三種狀態:
但目前專案建立任務時只有標題,還沒有狀態資料;PRD 也留下了「新增時是否有預設狀態」以及「搜尋和篩選是否能同時使用」兩個問題。
這次 Issue 先做出以下決定:
先把這些行為寫清楚,Codex 才不需要在實作中替產品做決定。
我會在 Issue Tracker repository 建立一張 Issue,標題使用:
新增標題搜尋與狀態篩選
Issue 內容如下:
## 背景
目前任務數量增加後,使用者只能從完整清單中尋找項目,無法依標題搜尋或依狀態縮小範圍。
## 使用者故事
身為使用者,我希望能用標題關鍵字搜尋任務,並依狀態篩選清單,以便快速找到目前要處理的項目。
## 功能範圍
- 在任務清單上方加入標題搜尋欄位
- 搜尋只比對任務標題
- 英文字母搜尋不分大小寫
- 在清單上方加入狀態篩選
- 狀態選項為「全部」、「待處理」、「進行中」、「已完成」
- 每筆任務顯示目前狀態,並可切換三種狀態
- 新增任務時預設為「待處理」
- 搜尋與狀態篩選可同時使用,條件採 AND
- 狀態變更後保存到 localStorage
- 舊資料沒有狀態時,以「待處理」載入
## 驗收條件
- 輸入標題關鍵字後,只顯示標題符合的任務
- 搜尋 `BUG` 可以找到標題含有 `bug` 的任務
- 清除搜尋文字後恢復顯示符合目前狀態篩選的任務
- 選擇「待處理」、「進行中」或「已完成」時,只顯示該狀態任務
- 選擇「全部」時不因狀態排除任務
- 同時輸入關鍵字並選擇狀態時,只顯示兩個條件都符合的任務
- 找不到符合項目時顯示明確的空結果訊息
- 使用者可以在清單中切換任務狀態
- 重新整理後,變更過的狀態仍然保留
- 原有新增任務、標題驗證與持久化行為維持正常
- 新增與既有行為都有自動化測試
## 不做事項
- 不搜尋描述
- 不加入優先級與截止日期篩選
- 不實作排序、拖曳、編輯或刪除
- 不加入後端、登入或雲端同步
- 不重新設計整個頁面
- 不新增套件,除非現有工具無法完成且先取得同意
背景說明「為什麼」,功能範圍說明「要做什麼」,驗收條件則說明「怎樣算完成」。
不做事項也很重要。它能避免 Codex 因為看到完整 PRD,就把優先級、截止日期與排序一起實作。

把 Issue 交給 Codex 以前,我會先確認:
feature/search-and-filter
AGENTS.md 仍然適用如果昨天還沒有建立 branch,就先完成這一步,再開始實作。
建立 Issue 後,記下它的編號或網址,在新的 Codex 任務中輸入:
請閱讀目前 Issue Tracker repository,以及這張 GitHub Issue:
<貼上 Issue 網址或編號>
請先完成:
1. 摘要 Issue 的目標、驗收條件與不做事項
2. 確認 Issue 和目前程式、資料結構及 AGENTS.md 是否一致
3. 指出仍然模糊、互相衝突或無法驗證的地方
4. 列出預計修改的檔案與最小實作步驟
如果沒有阻擋問題,再依照 Issue 實作搜尋與狀態篩選。
執行要求:
- 只修改完成 Issue 所需的檔案
- 不實作 Issue 的不做事項
- 不新增套件或進行無關重構
- 舊 localStorage 資料必須保持可讀
- 每項驗收條件都要有對應的實作或測試證據
- 發現需求和現有程式衝突時先停止並說明
完成後執行 AGENTS.md 要求的驗證,並回報:
1. 修改檔案與用途
2. 每項驗收條件的完成證據
3. 測試、lint 與 build 結果
4. 實作和原計畫的差異
5. 尚未完成或需要確認的事項
6. 目前 Git 狀態
Prompt 本身不需要再複製整份需求,只要提供 Issue 位置與執行方式。
不過 Codex 必須真的能存取該 Issue。如果它無法讀取網址或需要權限,就應該停下來說明;此時可以改為貼上 Issue 完整內容,而不是讓它只根據標題猜測。
Codex 開始修改以前,我會先確認它的摘要:
如果這裡就理解錯誤,應該先修正計畫,不要等程式完成後才處理。
Codex 完成後,我會實際操作:
除了人工操作,也要確認自動化測試對應 Issue 的驗收條件,而且原有測試仍然通過。
依照昨天建立的 Git 流程,提交前要再次確認:
這是我的 repo,在裡面的 commit 找到 "feat: add issue search and status filter" 就是這篇文章寫完時的狀態。
今天先建立一張包含背景、範圍、驗收條件與不做事項的 GitHub Issue,再讓 Codex 把它當成實作依據。