Skip to content

uiux: 收口讀取失敗、窄視窗設定與欄位操作語意(最新 main 實測盤點) #298

Open

Description

@guan4tou2

2026-10-24 最新核對

#437 已合入 main 375f2ee3,包含讀取失敗狀態、窄視窗/放大布局、欄位可及性與草稿等修正,見 T025–T032、T063。下方舊程式位置是原始缺陷證據,不能一律當成目前仍未修。

本單仍追蹤 T009 的完整設定/狀態/平台驗收。T072:成功重試後殘留的保存失敗 toast 已在本機分支修正,通過真實唯讀檔案及原生重試;尚未提交/push/合入 main,不勾完成、不另開重複 issue。完整矩陣與平台限制沿 #317。


2026-10-13 範圍與狀態更新:依 #317 先完成安裝/設定,暫緩時間軸改版。 #309 已合入 ListField labels/草稿提示/過時文案修正,#310 已合入專案與搜尋讀取狀態修正;以下相關缺陷描述保留作修正前依據,不是仍未實作。剩餘重點為修正後實際操作驗收,以及會阻擋設定流程的窄視窗/縮放。純視覺美化與非紀錄必要的進階閱讀優化延後,不因此要求另一套設計系統。

基線與驗證界線

main e479028cf61cf0578a6ec55ac3bf2ca1e283bb53,2026-10-12。使用 uiux-validation 流程與專案既有 Playwright Electron API;macOS、隔離 HOME、最新 source build。實際操作首次建立、profile 匯入、Settings ▸ Scope、縮窗與縮放。profile 的兩項端到端缺陷另列 #297。

本次沒有完成 Windows/Kali 安裝、真實 shell hook、HTTPS CA、流量擷取、匯出端到端或全 App accessibility 稽核;不把此次結果當作 release 驗收。

待改善項目

P1:索引查詢失敗被當成完整索引(程式確認)

SearchPanel.tsx:255 的 castIndexStatus rejection 被吞掉,註解為 older main process / fully indexed。初始 pending=0,因此沒有未完成提示。這與未發版、不保留舊契約的決策矛盾,也使輸出查無結果看似權威。
建議:ready / pending / unknown / failed 分開,提供重試;結果仍可閱讀,但索引狀態無法確認時明示查找可能不完整。distinctAgentTypes 失敗也應與「沒有類型」分開。

P2:專案清單失敗看起來像首次使用(程式確認)

ProjectPicker.tsx:49 將 list rejection 吞掉,projects 初值 []。使用者無法區分正在載入、沒有專案與讀取失敗。
建議:三種狀態與重試,保留已知清單;錯誤不得暗示證據遺失。

P2:縮窗/放大時設定內容讓位給兩層導覽(畫面確認)

在實際 Electron 將主視窗設為 800×600、zoomFactor=1.5,頁面回報有效 viewport 533×400;Settings 類別導覽與主側欄佔去可視區,Scope 編輯內容不在可見畫面,標題列右側動作亦被裁切。document.scrollWidth=533 不能當作沒有問題的證據。
Settings.tsx:235 類別導覽固定 212px 且 shrink-0。
建議:在有效 viewport 變窄時自動收合主側欄,設定類別改可展開選單,維持內容欄與返回入口;標題列次要動作收進更多選單。沿用既有 tokens / Button / Modal,不換設計系統。
這是 macOS 小視窗+縮放情境,不宣稱已驗證手機或 Windows DPI。

P2:Scope 清單欄位未與可見 label 連結(程式確認)

SettingsShared.tsx:178 的 label 沒有 htmlFor,input / textarea 沒有對應 id / aria-labelledby。沿用同檔既有 Field 的 useId 模式,將錯誤與提示接 aria-describedby / aria-invalid。

P3:操作語意與文案

  • 設定頁實際仍顯示「變更任務/操作員 ID 需重開專案」;應對照現行唯讀/設定契約移除失效描述。
  • 多行清單輸入需按 + 或 Ctrl/Cmd+Enter 才加入;「自動儲存」不要讓使用者誤以為未加入的草稿也已保存。補上提交提示與草稿狀態,不另做一套儲存流程。
  • 新建卡片只有名稱是現行測試刻意維持的設計,不建議為過時 README 再放一組 scope 表單。建立後以未設定提示導向唯一的 Scope 設定入口。

驗收清單

  • 專案清單 loading / empty / rejected / retry 各自有可辨識呈現。
  • castIndexStatus 與 facets API rejection 故障注入,不宣稱已完整索引或確定沒有類型。
  • 1280×800、800×600,100% / 150% / 200%:記錄實際 viewport,設定內容、返回與主要動作可到達;縮放不改資料。
  • 鍵盤可進入 Scope 欄位、加入與刪除項目、讀到錯誤;label 有穩定 accessible name。
  • 草稿、加入清單、saving、saved、failed 狀態語意一致。
  • 空/載入/錯誤案例使用現有元件,避免每頁另一套樣式。

拆分建議

本 issue 作 UI 收口追蹤,實作拆成「讀取狀態」、「窄視窗」、「欄位可及性與文案」三個小變更;不要綁在大型擷取引擎 PR。優先處理 #297 與索引真實性,其餘可分批。關聯 #295、#296。

Activity

  1. added 2 commits that reference this issue on Oct 12, 2026
  2. guan4tou2 commented on Oct 13, 2026

    @guan4tou2
    OwnerAuthor

    狀態更新(main 含 #318、#322)。保持開啟,因為還有未做的項目;其中狀態列斷行另開 issue 追蹤。

    已在真實 app 驗證(#322,e2e/ui-closeout.spec.ts,9 個測試;主程序的 IPC handler 直接丟錯來模擬故障):

    • 專案清單:empty、failed(說「列表讀取失敗、專案仍在磁碟」並顯示錯誤)、retry 是三種不同畫面。loading 是瞬間狀態,留給單元測試。
    • casts:status 與 events:distinctAgentTypes rejection:搜尋顯示「無法確認索引」並說明沒找到不代表沒有,沒有宣稱已完整索引;事件類型篩選的提示獨立,各有重試。
    • 1280×800、800×600 × 100/150/200% 縮放(webContents.setZoomFactor):Scope 的 Targets 欄位在視窗內、寬度超過 200px、沒被蓋住,標題列動作沒被切掉。最小有效 viewport 為 400×300。
    • 只用鍵盤可進入 Scope 欄位、加入與刪除;欄位有 accessible name;被拒絕的項目標記 invalid 並由 role="alert" 說明。
    • 草稿狀態:未加入的文字顯示「尚未儲存」、以 aria-describedby 連到欄位,且確認不在已存的設定裡。

    驗證有效性:把失敗的索引改成 ready 會讓搜尋測試失敗;關掉窄視窗版面,800×600 在 150%/200% 時欄位只剩 145px/15px,矩陣測試失敗。

    未做:

  3. guan4tou2 commented on Oct 16, 2026

    @guan4tou2
    OwnerAuthor

    基準:2026-10-16,遠端 main 與正式 v0.18.3 同為 c50286526c0d4a3e0dbae74b7d1f32e49bd3b70b。本輪使用公開 DMG 的隔離安裝副本、隔離 HOME/專案及 Playwright Electron 操作。沒有修改個人 profile 或系統 CA。Windows/Kali/WSL 本輪未重新實機驗收。

    v0.18.3 操作覆驗:首次設定仍應納入窄視窗收口

    正式包在 1280×800 可操作;另以 800×600、Electron zoom 150%/200% 聚焦、重新載入並等待重繪後核對。

    zoom 實際 viewport 右側驗證欄寬 驗證欄可視高度
    150% 533×400 約 324px 約 177px
    200% 400×300 324px 約 77px

    FirstRunView仍固定水平排內建終端與 w-[360px] shrink-0 驗證欄(body zoom 0.9)。在 200% 時驗證欄幾乎佔滿可用寬度,主要內容需要在很短的內層區域捲動;首次設定負擔大。這是 Mac 桌面縮窗/縮放測試,不是手機或 Windows DPI 已驗收,也不宣稱所有按鈕都完全不能點。

    建議延用現有 useNarrowViewport/設計 tokens,在窄 viewport 改上下排列或單一來源展開,將主要驗證/繼續動作保持可到達;主側欄與狀態列的剩餘收口延用 #323,不另開一套導覽。

    把 Capture setup 的「接入終端 → 真實輸出 → HTTPS 主驗收 → 繼續工作」加入原 #298 視窗矩陣,驗證鍵盤與捲動後能真正完成操作,不只檢查 document.scrollWidth。這輪沒有改產品或測試套件。

  4. guan4tou2 commented on Oct 22, 2026

    @guan4tou2
    OwnerAuthor

    2026-10-22:設定操作語意整合的具體補充

    基準:遠端 main 0d79823b+候選 2b21b690。既有設定搜尋、窄視窗導覽、清單草稿、保存/失敗/重試與專案綁定已完成的部分保留,不因本次收斂重寫。

    同一套輸入/保存/失敗語意

    • 數字欄位先保留編輯中草稿,完成輸入時驗證,只有有效值才套用與保存。現有 BrowserPanel.tsx 的 port 每鍵立即 parse/clamp,輸入第一個 6 便被改成 1024;不要把「自動儲存」做成難以輸入。
    • 已加入清單、未提交草稿、正在保存、保存失敗與實際成功語意保持一致;無效文字不悄悄改成預設值,也不使用另一顆全頁儲存按鈕補救。
    • 本機動作(安裝/卸載整合、App 更新偏好)與本專案設定,在操作旁說明真正範圍;共用頁尾不要暗示所有動作都是專案 YAML 自動保存。
    • 同一處保留錯誤、輸入與重試;讀取失敗不得當「沒有來源」或「正常閒置」。

    程式確認的來源狀態接線缺口

    ExternalCaptureGroup.tsx:44 只保留 state/lastEventAt,未帶入 health 的 running;後面卻用 l.running === true 判斷「正在接收」與「停用但仍在接收」。因此這個設定區塊無法正確呈現這兩種結果;不表示整個 Dashboard 同樣有缺陷。

    • 保留既有 health 的真實 running 資料,設定/健康度讀同一事實,不用最近有事件重新猜另一套 running。
    • hooks.detect/capture.health rejection 不能被空 catch 隱藏;顯示未知/讀取失敗並可重試,保留最後已知值但標示其時效。
    • 以 running=true、停用但仍送入、停止/閒置、失敗/恢復驗證 UI;不只驗畫面能開啟。

    本輪為程式與流程分析,未新增完整原生驗收;候選的 Mac 設定 EACCES/重試/快速切頁已另留 Spec 062 紀錄,不把子步驟成功算成整個 #298 完成。

  5. guan4tou2 commented on Oct 22, 2026

    @guan4tou2
    OwnerAuthor

    2026-10-22 小項目實作進度(本機,尚未 commit/push)

    依使用者「先把比較簡單的做完」,在 codex/recording-export-workflow 基準 2b21b690 完成:

    • 受管 HTTP 埠號保留編輯草稿,blur/Enter 驗證 1024–65535 後才套用;無效值留在欄位並連結錯誤提示,不改上次有效設定。只有受管瀏覽器 URL 跟隨有效埠號,自訂 upstream 不動。
    • ExternalCaptureGroup 直接讀既有 health.running,修正「執行中」與「停用但仍接收」漏接。來源清單/health 讀取錯誤明示並可重試;保留已知來源但不把舊狀態顯示成目前狀態,沿用既有 useReadState。
    • 初次讀取、失敗、未知、停止與最後已知結果分開;相關訊息有繁中/英文,搜尋索引已更新。

    驗證:8 files/103 tests PASS,3 Electron journeys PASS(繁中/英文 800×600 的草稿、驗證、實際保存/重開;來源真實 IPC rejection/retry;既有受管代理流程)。另在 Mac 原生 source build 逐步操作:6661→草稿6→Tab錯誤→7777 Enter保存並讀磁碟→恢復6661,正常退出。沒有把 IPC fixture 當成真實 tcpdump 生產者或安裝包驗收。

    typecheck、architecture、i18n、Spec Kit、build、diff checks PASS。Spec 062 T021–T023 留有 RED→GREEN 與收斂紀錄;T009 完整矩陣及本 issue 其他工作仍開放。這些變更尚未進遠端/main/安裝包;沒有把本 issue 關閉。

  6. guan4tou2 commented on Oct 22, 2026

    @guan4tou2
    OwnerAuthor

    2026-10-22:修正已推送,完整驗收仍開啟

    6cb738e2 已推送至 codex/recording-export-workflow:

    • HTTP port 保留輸入草稿,blur/Enter 驗證;錯誤留在原欄位、不覆蓋上次有效設定,自有瀏覽器代理只跟隨有效保存。
    • 外部來源保留 producer 的 running;未知/讀取失敗與停止分開,提供 retry,不把錯誤當空清單。
    • 重複建立專案受同步 guard 保護,失敗可重試;外掛頁使用可用欄寬,其他表單保留 900px 上限。

    相關測試及 Mac 原生子步驟已記錄於 verification。最終設定 Electron 4 passed,涵蓋 1600×900/800×600、中英文草稿與持久化、IPC 失敗/重試及 AI 明確啟用。

    本單與 #435 承接 Spec 062 T009/M06–M08 的完整設定/專案切換驗收;仍未完成,不以這輪子步驟關單。母單 #317 已補所有 T008–T013 的對照。

  7. added
    priority:P2Workflow consistency and usability
    type:acceptanceVerification of implemented behaviour
    area:uiuxOperator interface and recovery
    on Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:uiuxOperator interface and recoverypriority:P2Workflow consistency and usabilitytype:acceptanceVerification of implemented behaviour

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions