| 項目 | 內容 |
|---|---|
| 緣由 | FR-047 全站終驗完成後,把散在各頁 §12 的「已知坑」全站彙整成一份清單(508 條,分類 + 可修徽章)。本棒接手處理這整份清單——逐類 / 逐條跟 user 討論「修 / 不修 / 怎麼修」。user 指定第一個處理的桶=授權守門(SEC),其餘類別接續。 |
| branch | fix/v1.8.0-bugs(user 已建好的 bugfix branch,目前 = main 頂點)。在這個 branch 上工作,不要切 branch;branch 不對就停下問 user。 |
| 接手前必讀 | 本檔全文 → 坑清單 docs/analysis/2026-07-07-spec-known-pits-inventory.md(全檔,尤其檔頭「性質提醒」+分類表) → 專案根 CLAUDE.md 的「權限檢查」與「DDD 層級規範」段 |
| 這棒要幹嘛 | 處理整份 508 條坑清單(不只 SEC):跟 user 一起把每類 / 每條定調成「可修 bug / 刻意設計只告知 / 文件澄清」,可修的排優先級 + 規劃解法。先讀現況、別自己先分類或開修——分類方式與解法由 user 跟你討論後才定。 |
FR-047 spec 手冊逐頁 code-read 期間,把每頁掃到的邊界情況 / 缺口 / 技術債記進各頁 §12「已知坑」(當時政策:只記錄不修)。全站累積後,散在 67 頁 + 8 個 _overview,難以總覽。終驗收尾時 user 要求彙整成一份總表,好做「總整理、分類分析、看怎麼解決」。
於是產出 docs/analysis/2026-07-07-spec-known-pits-inventory.md:508 條坑,每條標 群/頁#N id、頁功能、第一版 keyword 粗分類、可修性啟發式徽章。
本棒的任務=把這 508 條「處理掉」——但「處理」不等於「全修」。§12 混了三種東西:
所以「怎麼解決」=先跟 user 把每條定調(①/②/③),把①挑出來排序 + 規劃。這是跨模組決策,不是機械全補。
本棒在大圖的位置:坑清單處理的第 0 步——理解現況、跟 user 定分類與範圍、從 SEC 開始。
先做「授權守門(SEC)」(見下方 SEC 段),再依 user 意願接續其餘類別。每一類都先跟 user 討論再動手,不要自作主張把整份 508 條一次分完 / 開修。
分類表(清單檔內,primary 單標,sum=508):
| 主類別 | 條數 | 啟發式「可修」 | 順序 |
|---|---|---|---|
| 🔴 SEC 安全/授權守門 | 67 | 38 | ① 本棒先做 |
| SCHEMA 表名/欄位/命名 drift | 60 | 11 | 待 user 排 |
| UX FE/顯示/i18n/時區 | 47 | 4 | 待 user 排 |
| ECODE error code 型別/碼 | 39 | 7 | 待 user 排 |
| STATE 狀態機/前置條件 | 33 | 4 | 待 user 排 |
| REPLACE full-replace/cascade/trigger | 33 | 4 | 待 user 排 |
| DEAD 死碼/預留/vestigial | 25 | 13 | 待 user 排 |
| 其他(多為行為告知) | 204 | 26 | 待 user 排 |
註:分類是 keyword 第一版粗分,會犯錯(primary 單標犧牲細節、204 條沒被 keyword 抓到)。真正定調待人工。可修徽章(🔧/📗/❓)也是啟發式,逐條要人看。
共同 root pattern:大量「寫入 / 狀態轉換」API 端點只有 @jwt_required(),沒有 BE 角色 / 能力守門,全靠 FE 隱藏入口或 canEdit 擋——任何已登入者知道 path + uid、繞過 FE 就能執行本該限 manager / auditor / admin 的操作。違反 CLAUDE.md「寫入 API 必須有角色權限檢查(manager / auditor)」「權限檢查在 service 層透過 domain service」。
grep -nE "\SEC`" docs/analysis/2026-07-07-spec-known-pits-inventory.md`(每條下一行是內文)。evidence/cloud-integrations#4 trigger_init_project_folders docstring 明載「避免 is_admin 誤擋專案 manager」);user-log#4 api_logs 無 tenant_id、不受 RLS)。system-admin/user-log#1——GET /log/api-logs/export 的 @jwt_required() 被註解掉(SEC-001),未登入者知道 URL 即可下載全部 api_logs,已有 regression test。這條幾乎確定要優先修。user 說:「先不用分析,你只要跟他說現況就好,我會跟他討論狀況。」 所以整份清單(含 SEC):
@jwt_required;service 層透過 domain service;GRC_403xxx)fix/v1.8.0-bugs,不切)cd ~/Projects/Billows/Audit-Manager/compliance-manager-be
git branch --show-current # 應為 fix/v1.8.0-bugs;不對停下問 user
git status --short # 應乾淨(untracked docs/specs/v1.8.0/html.zip = user 的,別動別 commit)
git log --oneline -3 # 頂點應為本交接 commit
# BE 出錯先看 log:tail -200 log/app.log | grep -A30 -i 'Traceback\|ERROR'fix/v1.8.0-bugs);push 永遠等 user 明示;commit 顯式 git add 檔名、禁 -am。GRC_403xxx(如 GRC_403002 / GRC_NOT_MANAGER;平台層 GRC_NOT_PLATFORM_ADMIN / 403060)。log/app.log。writing-feature-specs skill,收尾時做、等 user 令)。量產期已在 Notion「[GuidantAI] Issue 任務清單」開過幾條 SEC / bug case(notion-search 搜「守門 / 僅 JWT / 無角色 / 密碼政策 / TOTP / GITLAB / MAIL_SEND_FAILED」)。要 spin 成 case 前先搜、有相符就 update 別重開。座標見 docs/claude/notion-issue-tracker.md;作業人員 Claude 做的填「小弟」。
e7fc9230(坑清單)+ 本交接 commit 還在本地(origin/main 停在 f707bf1d)。要 push 到 main、還是留在 fix/v1.8.0-bugs 隨處理工作一起走,等 user 定。jedi@192.168.50.189:/var/www/html/docs/specs/v1.8.0/,但該目錄 root:root、jedi 需 sudo 密碼——待 user 一次性 sudo chown -R jedi:jedi 後才能 rsync。task_c5e7ff0b(BE code cleanup,樣板 SSP 靠 template_ssp_id 非 is_template 欄),與本棒無關。請接手 FR-047 全站已知坑處理。先讀 docs/features/FR-047-2607-feature-spec-handbook/handoff/2026-07-07-known-pits-remediation-handoff.md
全文 + 坑清單 docs/analysis/2026-07-07-spec-known-pits-inventory.md(尤其檔頭性質提醒 + 分類表)+ CLAUDE.md 權限/DDD 規範,
答完冷接自檢 5 題。branch 是 fix/v1.8.0-bugs、不要切。第一個處理的桶是「授權守門(SEC)」。
【重要】先讀現況、別自己分類或開修——分類方式與解法我會跟你討論後才定。讀完跟我對話。