9.6 KiB
HTML Transform
HTML Transform 是 prototype evidence 工具。現行 MVP 只做兩件事:
doctor:檢查執行scan需要的前置條件。scan:讀取 HTML prototype、prototype guide 與 backend API docs,產生瀏覽器證據、頁面級 UI Contract 與 implementation contract。app-map.json:推論每個 prototype 的頁面角色、layout 使用策略、API 對應、維護頁建議範本,並用prototype/*.md的人工 domain guide 輔助補上舊系統對照。
不提供 plan、run、diff、verify、go、status。這些舊骨架已移除,避免把尚未完成的自動化流程誤認成可用功能。
MVP 範圍
scan 會執行:
Stage 1 Capture
Stage 3-lite Page Contract
Stage 4-lite Contract Validation
API Catalog
Maintenance Contract
Stage 2 decomposition 不執行。現有 prototype 主要是後台系統頁面,重點是表單、查詢條件、表格、actions 與資訊架構;切 region screenshot 對 MVP 價值不高。
目前沒有 Codex slash command。也就是說,在 repo 根目錄輸入 /scan 不會自動執行本工具。
指令
在 packages/html-transform 目錄內:
node src/cli.js doctor
node src/cli.js scan
在 repo 根目錄:
node packages/html-transform/src/cli.js doctor
node packages/html-transform/src/cli.js scan
若要在根目錄用簡短指令,建議由根目錄 package.json 包一層:
{
"scripts": {
"scan": "node packages/html-transform/src/cli.js doctor && node packages/html-transform/src/cli.js scan"
}
}
之後即可執行:
pnpm scan
前置需求
需要 Node.js 20 以上。
node --version
pnpm --version
安裝相依套件:
pnpm install
確認 playwright-cli 可用:
pnpm --filter html-transform exec playwright-cli --version
若環境還沒有 Chromium:
pnpm --filter html-transform exec playwright-cli install-browser chromium
設定檔
設定檔不是工具執行的絕對必要條件;沒有設定檔時,工具會使用內建預設並讀取:
packages/prototype/
本 repo 的 HTML prototype 位於根目錄 ./prototype,不是 ./packages/prototype。因此從 repo 根目錄執行 node packages/html-transform/src/cli.js scan 時,需要根目錄 ht.config.mjs 覆寫 prototype 路徑。
本 repo 根目錄目前使用最小設定:
export default {
prototype: "./prototype",
};
scan 目前使用:
prototype:HTML prototype 與prototype/*.mddomain guide 來源。backendDocs:backend API markdown / OpenAPI JSON/YAML docs 來源,預設./apps/backend。
本 repo 的 backendDocs 使用預設值即可。若其他專案的 backend docs 不在 ./apps/backend,可明確指定:
export default {
prototype: "./prototype",
backendDocs: "./docs/backend",
};
若要同時讀取多個 backend docs 來源,或混用 markdown 與 OpenAPI JSON/YAML,可使用陣列:
export default {
prototype: "./prototype",
backendDocs: ["./apps/backend", "./docs/openapi"],
};
若只有 prototype、沒有 backend docs,可只指定 prototype:
export default {
prototype: "./prototype",
};
若 backendDocs 目錄不存在或沒有 markdown/OpenAPI 文件,scan 仍會完成,只是 .ht/api-catalog.json 會沒有 endpoints,頁面 spec 的 apiContract.endpoints 也會是空陣列。
frontend、backend、output、plan 等欄位不會被 doctor 或 scan 使用,不需要為本 MVP 加入設定檔。
Doctor
node packages/html-transform/src/cli.js doctor
檢查項目:
prototypedirectory- package-local
vite playwright-clipnpm
Scan
node packages/html-transform/src/cli.js scan
scan 會自動:
- 用 Vite static server 提供 prototype。
- 用
playwright-cli開啟每個 HTML。 - 等待
networkidle,再等待 500ms。 - 截取 desktop
1440 x 900full-page screenshot。 - 產生 DOM summary。
- 產生 accessibility snapshot。
- 記錄 resource failure 與 console error/warning。
- 建立頁面級
pageContract。 - 驗證 contract 與 DOM evidence 是否明顯衝突。
- 讀取
prototype/*.md的對照表與 checklist,擷取 prototype 檔、舊 JSP、舊 PB、對應 Vue view、功能描述與人工 checklist。 - 讀取
prototype/*.md的 legacy flow code block,產出可對照每個 prototype 的flowRefs,避免 prompt 需要硬編特定 domain 的 JSP 流程知識。 - 讀取 backend API markdown docs,建立 endpoint catalog、schema 摘要、欄位規則與錯誤格式。
- 依 prototype evidence、guide 與 API catalog 建立
apiContract。 - 依頁面 evidence 建立
maintenanceContract,推論頁面型態、操作能力、row action 啟用條件與 checklist 衍生的 business rules。 - 產出
.ht/app-map.json,供通用 prompt 判斷 auth、legacy shell、feature page、layout 策略、API 對應與舊系統對照。
產物
每個 HTML 的 capture artifact:
.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
每個 HTML 的 contract artifact:
.ht/api-catalog.json
.ht/app-map.json
.ht/spec/{page}.spec.json
.ht/spec/{page}.validation.json
.ht/spec/{page}.ui-contract.md
.ht/spec/{page}.bdd.md
.ht/api-catalog.json 是跨頁面的 backend API catalog,來源是 backendDocs 目錄下的 markdown 文件。它會包含:
endpointsschemasfieldRuleserrorContract
.spec.json 會包含:
pageContract:頁面文字、欄位、表格、actions、layout evidence 與 Vuetify checklist。apiContract:與該頁匹配的 API endpoints、用途分類、rejected candidates 與錯誤格式。prototypeGuide:該 prototype 對應的人工 guide、舊 JSP/PB、target view 與 checklist。prototypeGuide.flowRefs:從 guide 的 legacy flow code block 比對出的相關流程節點,包含 menu、task、nodeType、JSP、PB、動作與原始流程行。maintenanceContract:頁面型態、capabilities、data model、row actions、business rules 與 warnings。bddContract:以頁面 evidence 產生的 Gherkin 草稿、scenario evidence trace 與人工 review warnings。regions:目前仍保留,目的是相容既有資料形狀;不要把它視為 Stage 2 decomposition。
.bdd.md 是 BDD 起始模版,會依 pageKind 產生 auth、query、maintenance、application、print 或 generic scenario。每個 scenario 會保留欄位、actions、tables、API endpoints、prototype checklist 與 legacy flow refs,供人工 review 後再轉成可執行測試。若 scan 看見錯誤流程、必填驗證、狀態限制、API error format 或尚未被 scenario 使用的 checklist/action/API,會列入 candidateScenarios 或 uncoveredEvidence,避免 evidence 被靜默漏掉。
.ht/app-map.json 是跨頁面的應用結構推論。通用 prompt 應先讀它,再決定每個 prototype 是 auth、legacy-shell-reference、feature-page 或其他角色。MVP 固定策略是 template layout/style 優先,prototype 只提供內容與功能證據。
route 也會包含 implementation hints,例如:
{
"prototype": "venue/applications-list.html",
"kind": "feature-page",
"pageKind": "maintenance",
"primaryEntity": "ApplicationsList",
"capabilities": ["back", "search", "edit", "delete", "print"],
"apiCount": 8
}
若 prototype/*.md 內有 markdown table 對照 prototype HTML,例如 venue/query-room.html,scan 會把匹配結果寫進 route:
{
"prototype": "venue/query-room.html",
"guide": {
"source": "venue.md",
"legacyJsp": "zte_pro/zte451_02.jsp + zte451_02_1.jsp",
"legacyPb": "n_zte451.of_zte451_02 / of_zte451_02_1",
"targetView": "RoomQueryView.vue",
"description": null,
"checklist": []
},
"evidence": {
"prototypeGuide": "venue.md",
"apiCount": 2
},
"guide": {
"flowRefs": [
{
"tasks": ["場地查詢"],
"matchedKeys": ["zte451_02.jsp", "zte451_02_1.jsp"],
"nodes": [
{
"task": "場地查詢",
"nodeType": "query",
"jsp": ["zte451_02.jsp"],
"pb": ["of_zte451_02"]
}
]
}
]
}
}
這些 guide 欄位輔助 route、舊系統對照與 checklist 理解;HTML capture、DOM summary、UI contract 與 screenshot 仍是畫面內容的主要 evidence。API catalog 與 apiContract 則用來降低 endpoint、DTO 與欄位規則的猜測。
使用方式是否改變
CLI 使用方式沒有改,仍然是:
node packages/html-transform/src/cli.js doctor
node packages/html-transform/src/cli.js scan
有改變的是 scan 的輸入與輸出:
- 新增可選輸入:
backendDocs,預設./apps/backend。 - 新增輸出:
.ht/api-catalog.json。 .ht/spec/{page}.spec.json新增apiContract、prototypeGuide、maintenanceContract。.ht/app-map.jsonroute 新增pageKind、capabilities、primaryEntity、apiCount。.ui-contract.md會顯示 page kind、capabilities、prototype checklist 與 API endpoints。
因此既有 doctor / scan 指令不用改;但使用 .ht 產物的 prompt 或下游工具,應改讀新增欄位。
驗證
修改本 package 後至少執行:
pnpm --filter html-transform typecheck
pnpm --filter html-transform test
node packages/html-transform/src/cli.js doctor
node packages/html-transform/src/cli.js scan