做了什麼
ldap_adapter.py 登入本體對、六個缺口未修)→ D17 三選一、D18 釘住推翻 CM-2239、D19 抽 jedi-ldap;§14 全量工作清單 37 項五階段含可砍性與最小可出貨組合。Login.vue;殼改側欄+頂欄+狀態列(四個環境訊號);總覽改儀表板(數字卡/狀態燈牆/疊柱/容量條);掃描頁改步驟條;身分來源獨立幕 8;未同步幕 7。commits:042fda5d9、998071b95、8e875d4a7、b3725ec04、741af922e、5c29e087b、07e264d65、cb6e290d4、b731e7c06、c15de726a、c3e28f19b、85a6c9e7a、本次交棒 commit。全在 BE repo feature/FR-139,未 push。
決策(決策者裁):D1~D19 全裁,見 STATE §2 與 discussion §9。殼與儀表板形狀、登入頁照主站。多因子明列不做。
推翻了什麼
_run_one 整包 check,已過。source_scans。教訓
feedback_rewalk_whole_case_before_design_verify_existing_mechanisms)。</div> 讓後面幕位移;改完要逐幕驗 div 配對與側欄座標。未完:PM 砍工項;互動雛形(決策者未選範圍);design.md;套件異動點頭;開卡。
做了什麼
決策:無新裁示。雛形照 D1~D19 畫。
推翻了什麼
教訓
發現待修:討論稿 §3.3 表格「升級強制補設、不設不起服務」與 D13「無人值守不強制」矛盾;雛形照 D13。
未完:決策者確認雛形;PM 砍工項;design.md;套件異動點頭;開卡。
決策者第一輪審雛形(同日):幕 2 總覽拿掉近 7 天、被拒絕等歷史數字(「只要當下」),狀態燈與 Agent 資訊分開(「燈裡混了資訊,那不是燈」);幕 4 這台的網路同樣拆成資訊+連線狀態,補「勾幾項跑幾項、會不會被當攻擊」說明;幕 7 身分來源改名「LDAP 設定」(「就是 LDAP 就叫 LDAP」)。決策者四問:手動掃描進不進歷史、本機執行與回傳的關係、檔案頁權限、安裝題目能否搬進 UI——前三題首腦查檔答覆,第四題盤出可搬清單等裁。教訓:狀態燈只能放「有沒有問題」,一盞一句原因;純資訊另開區塊、不上色。功能名用使用者認得的名詞(LDAP)不用抽象詞(身分來源)。
決策者第二輪(同日,「都照你建議的改」):噪音——不限制只勾一項,改成按開始前算總連線數(勾幾項加總)顯示噪音條,超過 10 次或含中高項目跳確認;埠上限 10→5、連線間隔 1 秒。文案——「本機手動」改「Agent 手動」。回傳——三狀態(已回傳附時間/待回傳/回傳失敗附原因),在線可「立即重試」、離線反灰等自動補傳,主系統端手動匯入列第二期。裁示兩項:檔案頁維持 FR-157 租戶層(離線操作者授權逐人勾、專案層另開 FR),授權頁與手冊加「Agent 檔案=看得到整台」一句;安裝題目只搬儲存設定進「服務與重啟」頁(CLI 留備援),重新註冊與升級留 CLI。教訓:決策者問「全勾不就一堆」是對的——首腦前一版只回答單項噪音,沒算總量;噪音要以「這次總共幾次連線」計,不是逐項標籤。
裁示併進討論稿(同日,決策者令):§9 加 D20~D22;§14 P1-2/P2-1/P2-4/P2-6/P2-7/P2-8/P4-5 對應補字,P2 卡數 12→13(儲存表單)、合計約 51;§5 加「噪音以總量計」段、埠上限 10→5;§4.2 回傳三狀態與立即重試;§3.3 升級那格對齊 D13(原矛盾消除)。順手清掉兩處「原本」。v4→v5。
互動雛形(同日,決策者令「老闆跟 PM 要看」):決策者要省額度但不用 subagent,切 Opus 由首腦主線做。做法:十二幕靜態畫面一個位元組都不改(建置後比對與已提交版完全相同),只在上面加一層互動 JS/CSS;按鈕依「所在幕+按鈕文字」委派,沒接的跳「雛形不做」提示。上方加「跟著走」四條流程。點擊測試 31 項全過、page error 0。
踩到的坑(點擊測試抓到、DOM 檢查抓不到的):
.scene[overview] a,連側欄連結一起吃掉,點側欄任何一項都跑去執行紀錄。改成只選 .content 裡文字含「執行紀錄」的那一個。design.md 落地(同日,PM 裁全做):決策者先改三條規範再寫——套件異動不必事前點頭改發版前統一確認;「不做義大利麵」入 CLAUDE.md/卡片範本/skill;「批=能同時跑的那一組」入 workshop.md/CLAUDE.md/skill。design 照 FR-157 結構:§3 D1~D22、§4 現況接入點 25 列、§5 七段、§6 拆卡表、§7 驗收 20 步。拆卡表先寫成 handoff/cards.py 跑斷言:第一版 42 張手排,程式抓到 7 組同批撞檔(routes.py blueprint、enroll.py observer、Shell.vue 選單、i18n、RemoteAgentManage.vue)。解法不是往後推批而是「登記型檔先佔位給 owner 卡」:P1-4 一次掛四支 blueprint、P1-3 一次掛三個 observer、P1-7a 一次寫全選單;P3-6b 併進 P3-4b。終版 41 張 9 批零撞檔。這個做法已寫進 big-feature-workflow skill Step 4。發現 evidence-agent 未登記在 workshop.toml(20 張卡派不出去),已加;Notion「Repo」選項要決策者加。教訓:拆卡表用程式驗比用眼睛排可靠,撞檔的解法是改結構(owner 先佔位)不是改順序。
開卡(同日,決策者令「建吧」):gen_notion_cards.py 從 cards.py 產 spec → notion_create_case.py 一次建 42 張連號 CM-3109~3150 → patch_workshop_fields.py 補五欄+母卡子卡清單。讀回驗證:41 張 母卡/Stage 全對、Repo 欄 agent/fe/jedi-packages/test 對、主 repo 空。踩到:母卡「子卡」relation 讀回只 25,查是 Notion relation 分頁(has_more: True)不是 PATCH 失敗——驗的時候要看子卡的 母卡 欄,不看母卡的 子卡 欄。Repo 欄:決策者問「沒有後端不是很詭異」,先加了 be 選項,查工作坊程式 repo_of 空=main、work_dir 對不在 [repos] 的名稱拒派,加了選了就派不出去,移掉並寫進 workshop.md;BE 卡在卡名標「BE」。規範:決策者授權 Notion 欄位與選項首腦自加(skill 與 tracker 已記)。交棒:STATE 任務總表 41 列為單一來源。
未完:決策者派批 1;下一棒首腦驗收。
做了什麼
feature/FR-139、無 FR-166 實作 commit、批 1 四張五欄齊)後待命。~/.claude、~/.claude-runner、~/.claude-runner2 三份各自獨立、只靠人工單向同步,runner2 有 7 支、runner 1 支從沒進 repo。依決策者令:①10 支彙整進 docs/claude/memory/(8 搬、2 合併);③工作坊規則「git status 有別人改動就停」加例外「docs/claude/memory/ 不算」(BE .claude/rules/workshop.md、agent-workshop 範本與 CLAUDE.md);再把 repo 395 支整份覆蓋到 runner、runner2 個人目錄(原目錄備份 memory.bak-20261026-221052)。symlink 方案決策者裁捨棄。.claude/rules/workshop.md,小弟 git status 會停 → 各自 commit。commits:BE 1f57b4d44(記憶彙整+規則例外)、7756d5b29(STATE 批 1 In progress)、1e54d10a2(FR-165 pin 還原)、本次交棒;agent-workshop c3bb5e0;evidence-agent ba3dd01、jedi-python-package 0f88a559(工作坊檔)+348adaa1(FR-165 進版)、test f297f6c。全未 push。
決策(決策者裁):記憶走「repo 一份+各帳號複製」不做 symlink;FR-165 兩支套件發版。
推翻了什麼
auto 模式且自開首腦 session(CM-3109-首腦)驗收,手動開的首腦收不到驗收指令。手動首腦的角色變成複核與總表維護。教訓
/api/status 的 dispatch_mode 與 planner,才知道驗收是誰做、要不要等人按。0,/re/ 語法,靜默不改;bump 版號用 python 或 sed -i '' '1,/re/s//…/',改完 grep 驗再往下。未完:§3 總表以 Notion 重刷;複核工作坊首腦驗過的卡;看合回衝突與額度;STATE §3b 第 4 點四件小事等決策者。
做了什麼
/api/status:paused、runner 0、首腦「CM-3109-首腦-2」standby、已驗 54;停在 CM-3164【要決策者決定】;批 14(CM-3160)未 approved。/api/status 的 stages+Notion 五欄重刷成 57 張 14 批(補進 CM-3151~3166 十六張補丁/P5 卡),批號改以工作坊實際排法為準。commits:BE 8a1f05b1e(STATE 重刷)、本次(複核結果+LOG)。未 push。
決策(待決策者):CM-3164 套件補兩欄小卡;Agent cap_add: NET_RAW 守衛紅沒卡;CM-3148 兩題;CM-3160 必做。
推翻了什麼
ws-CM-3109 都有 restart 接線(CM-3143/3144),這個缺口已消失,只剩兩題。教訓
.pth 把六支套件根目錄都放進 sys.path,jedi-ldap/tests/__init__.py 會遮住 jedi-remote-agent 自己的 tests(它沒有 __init__.py),直接 pytest 會 7 支 collection error;要在該套件目錄用隔離過的 sys.path 跑。這不是程式問題,但發版前把 jedi-remote-agent tests/ 補 __init__.py 或各套件 pytest 設 --import-mode=importlib 會省事。未完:四件待決(上);合回規劃(BE feature/FR-139 領先 ws 35 commit);8000 BE 仍跑舊程式。
做了什麼(依決策者發問順序)
MetricCard。CLOUD_WEB_URL(開發環境前後端分開時用)+主系統回程頁 /agent-console-return?agent=<uid>,登入(含兩階段)後自動簽票跳回;回程網址不由主控台帶(防 open redirect)。commits:evidence-agent 4c2b115~b123741、FE 21843ee4~aadb68b6、BE bfca2987b~b6136542b+本交棒、套件 8611b4a3、5e7b75ad、ec27f616。全部 push。
決策(決策者拍板)
推翻了什麼
PasswordPolicy 只要 12 碼+大小寫+數字。教訓
EventCode 是整數常數類別不是 Enum,EventCode(int) 拋 TypeError 被吞成 method=null;axios 攔截器「網址含 login 就不帶 token」讓 offline-login-policy 一律 401。新端點與新欄位一定要實打一次。nohup 起的 BE/Agent(踩兩次,第二次讓改名同步看起來失敗);重啟一律 (nohup … &) 起、不要包在等待迴圈裡。未完:延伸 10 張手測(STATE §3b 表);§3b 待決策者六項;jedi-remote-agent 發版;出貨基線重產。
做了什麼
commits(都在 feature/FR-139,未推):Agent 3b3ea04 49865a5 5c2347f 7b1b946;FE cc243c3a ec969546 78dc20ea 76f3dfbf fd375b59 1588e794 54a2a6b0 e961a8f7;BE 5522f819b。工作坊合回的另計(Agent a48207b~a181274、FE d356a1b8~432116a8、BE 2a9f399a5~a0d5377c0、套件 1040e044 783e9a5a)。
決策(決策者拍板)
推翻了什麼
not_listed。正確是用 AD 帳號反查名單。開登入類卡先問「使用者在主系統是填哪個帳號」,不要發明第二個要記的帳號(已記 memory)。?inline=1,runner 做成 /preview 子路由,首腦驗收先打錯 URL 以為沒做;以 runner 實作為準。notion_create_case.py),建到工作坊的任務清單、Case No 不是 CM;決策者授權後封存。CM 的卡一律用 BE repo scripts/notion_create_case.py,建完另外 PATCH 四欄。source_scans,另一個頁籤看得到;3180 做的是索引不是搬資料。教訓
summary.summary 一層、全部陣列參數合成字串把勾選陣列弄壞、?inline=1 打錯端點。每次都是截圖或 curl 抓到。set -e 或分兩個 Bash。--include,用 find … | xargs grep。until … sleep 3 的背景 Bash。未完:push → 123 升級;派 3188(進行中)、3189(進行中)、3190~3192;STATE §3b 待決策者 8 項。
做了什麼
GET /remote-agents/local-runs 16:43 起一直 500 AttributeError: page_agent_manual_scans。切回 path(pip install -e --no-deps,poetry install 被 lock 擋)、重啟 8000、實打 200/7 列。feature/FR-139 跑 ldap/local_auth/console_ops 四支測試 165 綠。3188/3189/3191 看狀態與 border-left(0)。hint_ldap 還是舊方向(填主系統帳號),首腦直接改中英兩句(FE 9bc68bc6),補「要先在主系統用 AD 登入過一次」。feature/FR-139(Agent 0acf7a5/FE 9bc68bc6/BE b5716a8d0/套件 783e9a5a)。git pull → poetry install → 新 dist-console(備份舊的)→ kill 核過的 PID 3018302 → 重起 PID 3313094 → 心跳 200、/console/runs 200、/console/nope 404、SQLite schema v5。commits:FE 9bc68bc6;BE 本棒只動 STATE/LOG(下一個 commit)。
決策(決策者拍板):授權 push 四 repo 並直接升 123 拿來測。
推翻了什麼
教訓
pip show 三支都 Editable,別只看自己剛切的那支;重裝會互相覆蓋。--http1.1,h2 協商會回 000 看起來像沒起來;8443 是 mTLS,主控台在 8444。未完:決策者在 123 測(先補名單);本機 Agent 8444 重啟;STATE §3b 待決策者 7 項(套件發版/檢測工具頁拆不拆/守衛測試 4 紅/https/通知管道/基線重產/密碼燈)。
做了什麼
ddb1f574):兩層表頭、文案改管理後台語氣、空狀態與工具列重排。v(FE 430f7fde)。8cd39617、d9d04048):拿 DB 全部 245 顆能力點對照中英翻譯檔,補 17 個資源名、12 個動作名、17 顆能力點標籤、22 條中文說明;英文說明 232 條整段沒有是既有缺口,沒做。推翻了什麼
教訓
/ops/vulndb/check,心跳 1 秒內出現、去抖與 401 正確。0ffacff);之後再推 FE/BE 並換 123 主控台為 11265753。9cdf880f1)。11265753):登入頁依分頁切換、設離線密碼三欄、改名、埠號。10bfdeae)。教訓:決策者說「本機」時要先問是哪台:本機 Agent(127.0.0.1:8444)與 123 是兩個獨立部署,換程式要各自重啟;這次 AD 登入失敗就是本機 Agent 還跑舊程式。
5b52ab17、3ece9011、6c722029)。原則:看到的人多半沒有主機權限,一律改「請聯絡負責這台 Agent 主機的系統管理員」;指令留在手冊。d7d1d54、3bb0a6d):根因是 _running() 把主系統派工的 targets 寫死 [],回應只有代碼。修法:派工登記時用 iter_targets(params) 記目標;local_runs.display_fields() 回 tool_name(工具目錄)與 target_names(清冊設備名,名稱等於 IP 的不算),總覽與執行紀錄共用;targets 維持純值。3bb0a6d+6c722029。推翻了什麼:密碼燈說明第一版寫「以本機管理員登入後到服務與重啟設定」,截圖驗證時發現是死路——密碼未設定就登不進 local-admin。改成聯絡管理員。
教訓:清冊的「名稱」欄常常就是 IP 本身,顯示名稱前要排除,否則畫面變「10.0.0.1(10.0.0.1)」。
http://10.8.0.6:5180 登入 → 停在登入頁、不簽票。aiChatStore.initSession() 用 crypto.randomUUID(),瀏覽器只在 https/localhost 提供;登入成功後呼叫它拋錯,被 Login.vue 外層 .catch 吞掉。不只 Agent 回程:任何人用 http+IP 開主系統都登不進。uuid 的 v4(FE 8e10ad8d),加測試+突變;headless 全流程走通。教訓:「登入成功卻停在原頁、沒有錯誤」先懷疑被 .catch 吞的例外;用 http+IP 測一次,安全環境才有的瀏覽器 API(crypto.randomUUID、navigator.clipboard、Service Worker)會在那裡現形。
683c25c3)。credential_handover 顯示「工具帳密轉移」(Agent 09fed37)。X-Frame-Options: SAMEORIGIN(jedi-file-upload 1.3.8,CM-2062),前端 5180 打 8000 跨埠被擋。正式版前端打相對路徑經 nginx 同來源,不受影響;2026-09-22 起開發機就壞。決策者選 A:Vite 開發代理 /api(FE f9efac75),各人 .env.development.local 改 VITE_API_URL=/api/1.0,不放寬資安標頭。5180 已依同參數重起。f9fc1af/0ccb44c、CM-3198 FE 9c0d778b):照主系統 preview_policy 加 sandbox;HTML 一律 iframe 直接載預覽網址、不轉 blob;頁面 frame-src 'self' blob:(PDF blob 預覽原本也被擋,一併修)。卡建成 In progress、作業人員首腦、不設 Stage,工作坊不派。我自己犯的錯:突變還原時對 console/reportPreview.js 用了 git checkout --,把同一檔我剛做的修改也還原掉(只影響我自己未 commit 的那一檔,已重新套用)。違反「禁 git checkout -- <檔>」;之後突變一律用 cp 備份還原。 教訓:headless 下 PrimeVue popup 選單點不開(四輪皆同),不要再耗時;改以元件單元測試+在頁面內直接嵌入目標網址實測。
做了什麼
44f2e5f7):自動資安檢查指出只靠 Agent 的 CSP;改成回應須帶 sandbox 才畫、iframe 自帶 sandbox=""(共用 FilePreviewPane 加 sandboxed 參數,預設 false,主站與 PDF 不受影響)。b7844b71,已 publish、已 push)。發版前測試:remote-agent 391、source-scan 203 綠;iam 824 綠+4 支 FR-155 既有紅燈。BE 改回釘版、取消 assume-unchanged(BE 060ff69c8),以正式版重啟 8000+worker,三支端點 200。commits:FE 44f2e5f7;套件 b7844b71;BE 060ff69c8 與 STATE/LOG 若干(BE 8 支未推)。
決策(決策者拍板):發版;私鑰要取回原本那份;複製按鈕在 http+IP 下失效「測試機的關係先不管」。
推翻了什麼
ssh-keygen -f /dev/stdin 讀法失敗的誤判,寫 600 暫存檔就推得出公鑰。教訓
poetry publish 遇已存在的版號會被拒、不會覆蓋。ssh-keygen -y | ssh-keygen -lf - 不印私鑰就能比對。未完:決策者 123 手測(STATE §3b 五項);BE 8 支待推;CM-3170~3198 待按 Done;出貨基線重產;STATE §3b 待決策者 9 項。
做了什麼
~/backup/guidant_ai_baseline_20261028_2235_before_FR166_regen.dump → 依 manifest 行序逐支套 188 基線庫(308→320)→ 三支產生器重產 → 02-schema - 行只有 CHECK 整行替換與尾逗號、04 新增 10 顆能力點與路由綁定、99 補登 12 支、gate (a) 綠。BE 4c927ece4。schema_migrations 補登記套件 011/012(物件早在,登記列漏)。hide-tool-plugin-manage-menu.sql 補進 manifest(seed,不蓋章)。2026-10-28-fr166-offline-permission-source-and-html-report-preview.md;SUMMARY 2026-10-28-FR-166-SUMMARY.md;memory 兩條;STATE 刷成收尾狀態。commits:BE 4c927ece4(基線)+收尾文件 commit。
決策(決策者拍板):手測通過、全案收尾、基線重產。
推翻了什麼
教訓
for f in $VAR 不按行拆:12 個檔名被當一個路徑,第一輪零套用但看起來像跑過;逐支套要 while read 並逐支確認登記列。未完:push BE 收尾 commit(等令);母卡 Done(決策者);STG/POC 上版(等令,前提 https);待決策者清單剩 7 項(STATE §3b)。
PM 六條回饋立為續作 FR-166.1(母卡 CM-3199,子卡 CM-3200~3216),兩邊母卡已互相 append 關聯;本案不重開。待裁第 1 項隨 FR-166.1 B3 定案翻回改名「Agent 工具帳密代設」。