{"allowContribute":false,"item":{"activeCommit":"dc95d4dc4174a3c8e90c288ea301b1f610a0e7c9","apis":{"routes":[],"types":{}},"backendSchedules":null,"bundleHash":"f35e5dc2f024c1d6","createdAt":1787261748169,"displayName":"Karpathy 守則","gitCommit":"dc95d4dc4174a3c8e90c288ea301b1f610a0e7c9","id":"2ce038d2bb2f8a417e2efbfe","isPublic":true,"itemType":"PLUGIN","name":"Karpathy 守則","pluginDir":"2ce038d2bb2f8a417e2efbfe","repositoryID":"repo_745e79a38dd666fe2ee54a19","status":"active","updatedAt":1787496805081,"updatedBy":{"userId":"6a61209a010ffe6f3268c5","userName":"Kai"},"version":3},"ownerMemberId":"6a61209a010ffe6f3268c5","ownerName":"Kai","publicPlugins":{"PLUGIN":{"pluginItemId":"2ce038d2bb2f8a417e2efbfe","pluginDir":"2ce038d2bb2f8a417e2efbfe","bundleHash":"f35e5dc2f024c1d6","live":true}},"subtree":[{"activeCommit":"dc95d4dc4174a3c8e90c288ea301b1f610a0e7c9","apis":{"routes":[],"types":{}},"backendSchedules":null,"bundleHash":"f35e5dc2f024c1d6","createdAt":1787261748169,"displayName":"Karpathy 守則","gitCommit":"dc95d4dc4174a3c8e90c288ea301b1f610a0e7c9","id":"2ce038d2bb2f8a417e2efbfe","isPublic":true,"itemType":"PLUGIN","name":"Karpathy 守則","pluginDir":"2ce038d2bb2f8a417e2efbfe","repositoryID":"repo_745e79a38dd666fe2ee54a19","status":"active","updatedAt":1787496805081,"updatedBy":{"userId":"6a61209a010ffe6f3268c5","userName":"Kai"},"version":3},{"createdAt":1787261809921,"deletedAt":null,"id":"default_karpathy_folder_6a61209a010ffe6f3268c5","isNew":false,"isPublic":false,"itemType":"KARPATHY_FOLDER","name":"我的檢核","originPluginDir":"2ce038d2bb2f8a417e2efbfe","originPluginID":"2ce038d2bb2f8a417e2efbfe","parents":{"karpathy":1787261809921},"preParentID":null,"reviewedAt":1787576926000,"updatedAt":1787577041781,"updatedBy":{"agentId":"ceo","agentName":"CEO","userId":"6a61209a010ffe6f3268c5","userName":"Kai"},"version":4},{"aiVerdict":"## 總評\n典型的模糊需求，現階段直接寫程式碼就是違規，必須先釐清再動手。 **→ 待修正**\n\n## 逐原則審查\n\n**① 先想再寫：❌ 嚴重缺失**\n\u003e 評語：需求只有一句話，未列任何假設，歧義完全未處理。\n\u003e 建議：禁止動手。先用提問清單逼產品/需求方收斂，敢於 push back。\n\n**② 極簡優先：⚠️ 待觀察**\n\u003e 評語：尚未寫碼無違規，但此類需求最容易過度設計。\n\u003e 建議：預設只做「同步匯出 CSV + 當前篩選條件」，不要預做非同步任務、通用匯出框架、欄位自選。\n\n**③ 手術式修改：✅ 暫無風險**\n\u003e 評語：尚未動碼，符合「先想再寫」。\n\u003e 建議：實作時只新增 `GET /users/export`，不順手重構 User 列表、格式、註解。\n\n**④ 目標驅動：❌ 無完成標準**\n\u003e 評語：沒有可驗證的 DoD，無法判斷何時算做完。\n\u003e 建議：補上可驗證標準與驗收步驟，否則無法測試先行。\n\n---\n\n## 具體修改建議\n\n**禁止直接實作，改為先補齊以下產出：**\n\n1.  **假設清單 (寫在任務留言/PRD)：**\n    \u003e 假設：1. 匯出 CSV 2. 僅管理員可匯出 3. 欄位僅 id,name,email 4. 單次上限 10,000 筆，超過需分頁/非同步。若錯誤，請指正。\n\n2.  **可驗證的 DoD：**\n    \u003e [ ] 管理員點擊「匯出」可下載 CSV，欄位正確\n    \u003e [ ] 非管理員呼叫 API 回 403\n    \u003e [ ] 10,000 筆資料 5 秒內完成\n    \u003e [ ] 操作寫入 audit log\n\n## 動手前的提問清單\n\n\u003e 因無程式碼，請拿此清單去問需求方，回答完才能寫第一行程式碼：\n\n**範疇與格式：**\n1. 匯出哪些欄位？是否包含 PII/敏感個資？需不需要去識別化？\n2. 格式是 CSV / Excel / JSON？編碼 UTF-8 with BOM？\n3. 是匯出「全部」還是「當前篩選/搜尋結果」？\n\n**權限與安全：**\n4. 誰可以匯出？需要什麼權限/角色？需要二次驗證嗎？\n5. 是否需稽核日誌 (誰、何時、匯出幾筆)？是否需符合 GDPR/個資法？\n\n**產品與效能：**\n6. 資料量多大？上限多少筆？超過 10k 筆要同步下載還是非同步寄 Email/S3？\n7. 是否需要限流？例如每人每小時只能匯出 3 次？\n8. 失敗/空資料時前端如何呈現？\n\n**下一步：** 請將以上 8 題的答案貼回任務，確認後再以「最簡 CSV 同步匯出」為第一版實作。","checkGoal":false,"checkSimple":false,"checkSurgical":false,"checkThink":false,"codeSnippet":"需求（模糊版）：「加上匯出使用者資料的功能」\n\n尚未寫任何程式碼，這是在動手前的檢核。","createdAt":1787262123739,"deletedAt":null,"id":"bc00e1b1bc1a54e746589e5a","isPublic":false,"itemType":"KARPATHY_CHECK","name":"範例：新增匯出使用者資料（動手前）","notes":"動手前的範例：需求很模糊，適合示範「先想再寫」。點進詳情按 AI 審查，會拿到提問清單。","originPluginDir":"2ce038d2bb2f8a417e2efbfe","originPluginID":"2ce038d2bb2f8a417e2efbfe","parents":{"default_karpathy_folder_6a61209a010ffe6f3268c5":1787262123739},"preParentID":null,"status":"pending","taskTitle":"範例：新增匯出使用者資料（動手前）","updatedAt":1787491233995,"updatedBy":{"userId":"6a61209a010ffe6f3268c5","userName":"Kai"},"version":6},{"aiVerdict":"【AI 審查 — Karpathy 四原則】\n\n**總評：通過 ✅** — 這個 diff 是「手術式修改」的正例，改動極簡且可追溯。\n\n**① 先想再寫 ✅** — 需求明確（空字串/空白字串會 crash），無歧義。已正確把 `user_data['email']` 與 `email.strip()` 的邊界釐清。\n\n**② 極簡優先 ✅** — 只用一個區域變數 `email` 消除重複取值，沒有引入 Validator 類別、沒有加 regex、沒有預做彈性。200 行能 50 行的精神體現。\n\n**③ 手術式修改 ✅** — 只動了空值判斷那兩行與取值那一行，未順手改註解、引號、未加 username 規則、未補 type hints。每行都能追溯到「空 email crash」這個需求。\n\n**④ 目標驅動 ⚠️ 待補** — 建議補一個可驗證目標：\n  1. 寫重現測試 `assert_raises(ValueError, validate_user, {\"email\": \"   \"})` → 驗：改動前失敗、改動後通過\n  2. 驗證既有測試仍全過\n\n\u003e 小作業：試著把 ④ 勾起來，再把狀態改成「通過」，就完成一次完整檢核囉！","checkGoal":false,"checkSimple":true,"checkSurgical":true,"checkThink":true,"codeSnippet":"需求：修復空 email 會讓 validate_user crash 的 bug\n\n修改前：\n  def validate_user(user_data):\n      # Check email format\n      if not user_data.get('email'):\n          raise ValueError(\"Email required\")\n      if '@' not in user_data['email']:\n          raise ValueError(\"Invalid email\")\n\n修改後（本次 diff）：\n  def validate_user(user_data):\n      # Check email format\n      email = user_data.get('email', '')\n      if not email or not email.strip():\n          raise ValueError(\"Email required\")\n      if '@' not in email:\n          raise ValueError(\"Invalid email\")\n","createdAt":1787262116213,"id":"deec3e4da4336da7c856c139","itemType":"KARPATHY_CHECK","name":"範例：修復空 email 會 crash","notes":"這是一個範例任務，示範四步檢核怎麼用。你可以點進詳情頁依序勾選 ①②③④，再按「一鍵審查」看 AI 怎麼評。之後可刪除或改成你自己的任務。","originPluginDir":"2ce038d2bb2f8a417e2efbfe","originPluginID":"2ce038d2bb2f8a417e2efbfe","parents":{"default_karpathy_folder_6a61209a010ffe6f3268c5":1787262116213},"status":"pending","taskTitle":"範例：修復空 email 會 crash","updatedAt":1787262116213,"updatedBy":{"agentId":"ceo","agentName":"CEO","userId":"6a61209a010ffe6f3268c5","userName":"Kai"},"version":1}]}