Parse legacy flow blocks from prototype guides into flowRefs so prompts can rely on extracted evidence instead of hardcoded JSP flow knowledge. Refine API endpoint matching for special route roles and prototype types, and expand maintenance contracts with row action conditions and checklist-derived business rules. Update README docs to reflect the new contract fields and app-map output.feat: derive flow refs and refine maintenance contracts Parse legacy flow blocks from prototype guides into flowRefs so prompts can rely on extracted evidence instead of hardcoded JSP flow knowledge. Refine API endpoint matching for special route roles and prototype types, and expand maintenance contracts with row action conditions and checklist-derived business rules. Update README docs to reflect the new contract fields and app-map output.
8.9 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/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。regions:目前仍保留,目的是相容既有資料形狀;不要把它視為 Stage 2 decomposition。
.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