# FR-049.1 問卷顯示條件（目標側重構）— 收尾 SUMMARY（2026-07-18）

> 狀態：**四段鏈全收、user 手測通過、jedi-survey 0.0.27 已發 Nexus、pin 已還原**。
> 三 repo commits 全數落 `feature/v1.8.1-test-regression`，**未 push**（等 user 上版）。

## 為何做

FR-049（來源側 goto）四段完成後被 user 手測推翻模型——來源側四瑕疵（隱式副作用/漏網坑/零全局視圖/心智模型錯位）。FR-049.1 翻轉為目標側 `display_condition`（業界主流），趁未部署零遷移成本。實作期間 user 三輪手測又追加 7 個決策（7~13），最終形態=目標側資料模型 + 雙入口 UI（目標側顯示條件區＋來源側跳題精靈，同一份資料）。

## 行為差異（相對 FR-049 來源側）

- 規則掛目標（題目/題組本體 `display_condition` JSONB）非來源選項；null=恆顯示；未作答=顯示、已作答才比對 answers 集合。
- 來源題型 radio+dropdown（決策 8）；子題不吃自身條件、顯示跟隨母題（決策 9：僅 FE 隱藏入口、BE 能力保留）。
- Designer：條件 badge 全文化（「當 X＝『A』或『B』時顯示」）、來源題選項尾端反向提示、雙入口統一詞根；母題卡「+新增延伸題」（題號自動 AC-1-N）取代父題目下拉。
- 填答端：改答即時重算、選項尾端「＋將增加 N 題」；稽核端快照換新形狀 `[{target_type,target_uid,source_question_uid,answers}]`，舊 goto 快照/null 全可見 fallback。
- 與 jedi-common 翻譯 bug 零耦合（display_condition 不入 translatable_fields，讀寫走主表）——FR-049 goto 掛 options 依賴 bug 副作用的耦合已解除。

## Commits（三 repo，未 push）

**BE**（`feature/v1.8.1-test-regression`）：
- `af2afd1b` design 開案（前棒）/ `677db118` 決策7,8 / `a453114a` 決策9,10 / `d1d5a0c6` 決策9二修 / `2c5e4690` 決策11,12,13
- `4b985c9e` 段① serializer+migration / `68e5c580` 段② null-清除 / `d090e496` 段④ 快照抽取 / `6eccf7ce` FR-049 plan 實測歸檔
- （同支 branch 另有 `cd048f39` FR-050 開案、`7e754e0d` pin 0.0.27 還原）

**FE**：`cc03aae` 段② Designer 全套 / `6371cd7` 段③ 引擎+UX 11/12/13（另 `a36215f` 規劃頁效能修，非本案）

**jedi-survey**：`ec03f6e` 段① / `dbfa998` 段② dropdown / `5118f98` release 0.0.27

## 發版與部署狀態

- **jedi-survey 0.0.27 已發 Nexus**（whl+tar.gz）；主專案 pin `==0.0.27`、path 還原、symlink 已清（realpath 驗證）。
- **jedi repo git push 卡 gitlab.com 認證**（指揮官環境無憑證）——3 commits 在本地，user 需自行 push。
- **Migration**：`2026-07-18-fr0491-display-condition.sql`（兩表 display_condition 欄）+ `2026-07-18-fr049-flow-rules-snapshot.sql`（快照欄）**DEV 已套、STG/POC 未套**——隨下次部署必排。
- DEV 殘留 25 題舊 goto 鍵=inert 死鍵（新引擎不讀），不清理。

## 測試證據

- jedi-survey pytest 82 passed（display_condition 18+2 案）；BE 快照抽取 7 案；FE 引擎 15 案（throwaway）；user 四輪手測（段②×2/段③/段④）全過。
- **E2E 未做**——舊 goto 場景已止損，重派待辦（見 follow-up）。

## Follow-ups

1. ~~**E2E 重派**（最優先）~~ → **已收案，見下方「E2E 收尾（2026-07-19）」**。
2. **頁面 spec 更新**（收尾漏做項）：`docs/specs/v1.8.0/survey/survey-v2-designer.md` + `survey-v2-fill.md` 需反映 display_condition 模型（走 writing-feature-specs skill）。
3. jedi-common 翻譯 bug 修復批（issue 已開）——修復者必回歸跳題（耦合警告在 FR-049 plan §0-a-2）。
4. ~~STG 套兩支 migration~~ → **STG 已套（2026-07-19 上版時，含 perf-fk-indexes 共三支，對帳綠）；POC 未套**（隨 POC 部署日）；jedi repo push（仍待 user）。

## 補丁批增補（2026-07-18 夜間，上版前 user 手測揪出）

| 修正 | Commit | 說明 |
|---|---|---|
| snapshot 複製鏈漏 display_condition + uid 重映射 | jedi `e1d1df8` | 填寫走 snapshot 問卷、clone 未帶條件→跳題全失效；補複製+source_question_uid 重映射（懸空→null+warning）。**教訓：新欄位落地必 grep 全部 clone/copy 路徑** |
| 題數提示改靜態計數（決策 15） | FE `a006638` | what-if 動態 diff 在「未作答=顯示」語意下恆 0，改靜態反向索引 |
| 歷史紀錄清單存檔後不更新 | FE `0985858` | 既有 bug（v1.8.2 基準已在）：checkpoint 後與開 sidebar 補 loadHistories |
| 條件答案欄反面提示（決策 14 防呆） | FE `94a3373` | 三處答案 MultiSelect 加「未勾選的答案作答時將隱藏」即時提示 |
| **jedi-survey 0.0.28 發版** | jedi `0966ed5` / BE pin `f9ed30c1` | 0.0.27 含 snapshot 缺陷即廢，0.0.28 為上版版本；Nexus 已發、pin 已還原、symlink 已清 |

語意備忘（user 確認過的理解）：「未作答=顯示；答了才篩」——有條件的題在來源題未作答前照常顯示，作答且未命中才隱藏。

## E2E 收尾（2026-07-19）

**E2E 重派已交付並驗收完成**，test repo commit `902709c`（site-regression 套件）：

- `survey-v2-designer.feature` 新增 5 場景：顯示條件+badge 全文化、跳題精靈雙入口、來源題刪除防呆、子題嵌套+題號自動衍生、反面提示——取代舊 goto 模型 `@known-bug` 佔位場景。
- `survey-v2-fill.feature` 新增 8 場景：三分流（含未作答全可見）、新增選項無漏網、同組跳題+進度分母+改答保留、必填同源、靜態題數提示、歷史紀錄回歸、稽核快照不漂移、存量 fallback。
- `survey-factory.js` 擴充 `updateSurveyQuestion`/`updateSurveyPage` + `displayCondition` 建立參數，支援新場景的測試資料建置。

**指揮官親跑驗收**：designer **22/22**、fill **27/27**，皆連跑兩次全綠（default profile 排除 `@known-bug`）；全套件 dry-run 455 scenarios 零 undefined/ambiguous；STG 資料回收核實乾淨。

**`@known-bug` 場景確認產品缺口屬實**（`survey-v2-designer.feature:225` 子題編輯 dialog 無顯示條件區與跳題精靈區）：E2E 實跑追出根因——子題嵌套預覽區（`SurveyDesigner.vue` `question.subQuestions` v-for 區塊）完全沒掛 `@click`，`onOpenEditQuestion` 只被頂層題目卡呼叫，決策9「編輯既有子題時同樣隱藏顯示條件區」因此是死碼、UI 層無法觸發。

- **已修**：FE `e424020d`（子題補編輯入口，複用 `onOpenEditQuestion`；順帶修暗雷——`GET /survey` 的 `sub_questions` 序列化不帶 `pid`，原 `_pid`/`parentId` 判定在編輯既有子題時必為 false，決策9 隱藏邏輯不生效）+ `c668c1d`（子題工具列常駐化：上移/下移/編輯/複製/刪除 + 卡片式邊框 + 全頁 loading 反饋，user 直接督導三輪追加）。
- Notion case：`3a2346da-4cd0-8193-ab09-cb0df3c2c813`，**修正待驗證**。
- `@known-bug` tag **待 STG 部署後移除轉綠回歸**（尚未移除，因修正尚未跟 STG 環境對過）。
