Files
html-transform/PRD.md
T
skytek_xinliang 65b72b82cb feat: renew mvp
2026-05-04 17:36:36 +08:00

191 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Product Requirement Document
## HTML Transform
| 欄位 | 內容 |
|------|------|
| 版本 | v0.3 |
| 日期 | 2026-05-04 |
| 狀態 | MVP |
---
## 1. 背景與目標
HTML Transform 是 prototype evidence 工具。它的目標不是完整自動化前端生成,而是把 HTML prototype 轉成可 review、可追溯、可交給 coding agent 實作的前置證據。
目前 MVP 只保留有實際價值的功能:
- 檢查 `scan` 前置條件。
- 用真實瀏覽器擷取 prototype evidence。
- 推論跨頁面的 App Structure Map。
- 產生頁面級 UI Contract。
- 驗證 UI Contract 與 DOM evidence 是否明顯衝突。
不保留未完成的 pipeline 骨架。`plan``run``diff``verify``go``status` 已不屬於目前產品面。
---
## 2. CLI Scope
| 指令 | 說明 |
|------|------|
| `ht doctor` | 檢查 `scan` 所需環境 |
| `ht scan` | 產生 browser evidence、page contract、validation report |
沒有 Codex slash command。根目錄輸入 `/scan` 不會自動執行本工具。
---
## 3. 設定檔
MVP 只使用 `prototype`
```js
export default {
prototype: './prototype'
}
```
本 repo 的根目錄設定檔可以保留其他欄位給外部工作流參考,但 `packages/html-transform` 不會執行 frontend/backend/output 相關流程。
---
## 4. Stage 1Capture
目的:取得 prototype 的瀏覽器真相,避免只看 HTML source 或讓 agent 腦補畫面。
需求:
| ID | 說明 |
|----|------|
| F1-1 | 對每個 `.html` 檔案截取 desktop `1440 x 900` full-page screenshot |
| F1-2 | 使用本地 Vite static server,不使用 `file://` |
| F1-3 | 截圖前等待 `networkidle`,再等待 500ms |
| F1-4 | 以 HTML SHA-256 hash 作為 cache key,未變更時跳過重新截圖 |
| F1-5 | 截圖寫入 `.ht/cache/prototype/{page}/desktop-default.png` |
| F1-6 | 產出 `dom-summary.json``accessibility-tree.json` |
| F1-7 | 產出 `capture-metadata.json`,記錄 resource failure 與 console error/warning |
| F1-8 | 產出 `.ht/app-map.json`,推論頁面角色與 layout 策略 |
產出:
```text
.ht/cache/prototype/{page}/desktop-default.png
.ht/cache/prototype/{page}/dom-summary.json
.ht/cache/prototype/{page}/accessibility-tree.json
.ht/cache/prototype/{page}/capture-metadata.json
.ht/app-map.json
```
---
## 5. Stage 2Decompose
MVP 不執行。
不做的項目:
- 不呼叫 vision agent 切主要區域。
- 不產生 `decomposition.json`
- 不用 Playwright `clip` 截取 table/form/main 等局部圖。
- 不建立 region-first extraction pipeline。
---
## 6. Stage 3-litePage Contract
目的:從 Stage 1 evidence 與 HTML source 產生頁面級 UI Contract。
需求:
| ID | 說明 |
|----|------|
| F3-1 | 每個 HTML 產出一份 `pageContract` |
| F3-2 | `pageContract` 以整頁為單位,不以 region screenshot 為單位 |
| F3-3 | 記錄 source、screenshot、title、sections、forms、tables、actions、textSamples |
| F3-4 | 建議 Vuetify components 必須來自 MVP 白名單 |
| F3-5 | forms 記錄 labels、fields、required 狀態與 actions |
| F3-6 | tables 記錄 headers 與少量 sample rows |
| F3-7 | 不確定或 evidence 對不上時保留 warnings |
產出:
```text
.ht/spec/{page}.spec.json
.ht/spec/{page}.ui-contract.md
```
`.spec.json` 目前仍保留 `regions` 欄位作為相容層,但它不是 MVP 的主要設計中心。
---
## 6.1 App Structure Map
目的:讓通用 prompt 不必靠人工說明,就能知道每個 prototype 應如何放進前端 app。
產出:
```text
.ht/app-map.json
```
每個 route 應包含:
| 欄位 | 說明 |
|------|------|
| `prototype` | prototype 相對路徑 |
| `kind` | `auth``auth-support``legacy-shell-reference``prototype-navigation``feature-page``reference` |
| `module` | 由資料夾推論的功能模組 |
| `targetRole` | 對前端實作的角色提示 |
| `layout` | `template-auth``template-app``ignore` |
| `usePrototypeStyle` | MVP 固定為 `false` |
| `usePrototypeContent` | 是否採用 prototype 的內容資訊架構 |
| `routeHint` | 可用的路由建議,無正式頁面時為 `null` |
推論規則:
- password input 或登入/忘記密碼文字:`auth`
- `portal/app-layout.html``portal/menu-pane.html``portal/index.html` 或含登出/隱藏選單:`legacy-shell-reference`
- 非 portal 且有 table/form/action`feature-page`
- module index 若像 prototype 導覽頁:`prototype-navigation`
- layout 與 login style 來源固定為 `preparation/skt-vuetify-templates`
---
## 7. Stage 4-liteValidate Contract
目的:確認 UI Contract 與 browser evidence 沒有明顯衝突。
需求:
| ID | 說明 |
|----|------|
| F4-1 | 驗證 `textSamples` 是否可在 DOM summary 找到 |
| F4-2 | 驗證 actions 是否可在 DOM summary 找到 |
| F4-3 | 驗證 form labels 是否可在 DOM summary 找到 |
| F4-4 | 驗證建議 Vuetify components 是否在白名單內 |
| F4-5 | 產出 `ValidationReport`,包含 warnings、nullFieldCount、nullFieldRatio、requiresHumanReview |
產出:
```text
.ht/spec/{page}.validation.json
```
---
## 8. 非目標
MVP 不追求:
- tablet/mobile 多 viewport capture。
- region decomposition。
- 每個 region 獨立 vision extraction。
- TaskList 產生。
- 自動寫入 frontend/output。
- visual similarity scoring。
- flow smoke test。
- 全自動 coding agent invocation。
這些能力只有在實際需求明確出現後才新增。