2026-05-24 11:14:05 +08:00
2026-05-03 10:12:42 +08:00
2026-05-24 11:14:05 +08:00
2026-05-24 11:14:05 +08:00
2026-05-04 17:36:36 +08:00
2026-05-04 17:36:36 +08:00
2026-05-04 17:36:36 +08:00
2026-05-24 10:38:17 +08:00
2026-05-04 17:36:36 +08:00
2026-05-24 11:14:05 +08:00
2026-05-12 11:03:46 +08:00

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 輔助補上舊系統對照。

不提供 planrundiffverifygostatus。這些舊骨架已移除,避免把尚未完成的自動化流程誤認成可用功能。

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

確認 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 目前使用:

  • prototypeHTML prototype 與 prototype/*.md domain guide 來源。
  • backendDocsbackend 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 也會是空陣列。

frontendbackendoutputplan 等欄位不會被 doctorscan 使用,不需要為本 MVP 加入設定檔。

Doctor

node packages/html-transform/src/cli.js doctor

檢查項目:

  • prototype directory
  • package-local vite
  • playwright-cli
  • pnpm

Scan

node packages/html-transform/src/cli.js scan

scan 會自動:

  • 用 Vite static server 提供 prototype。
  • playwright-cli 開啟每個 HTML。
  • 等待 networkidle,再等待 500ms。
  • 截取 desktop 1440 x 900 full-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 文件。它會包含:

  • endpoints
  • schemas
  • fieldRules
  • errorContract

.spec.json 會包含:

  • pageContract:頁面文字、欄位、表格、actions、layout evidence 與 Vuetify checklist。
  • captureArtifactsscreenshot、DOM summary、accessibility tree 與 capture metadata 的可追溯路徑。
  • browserEvidence:瀏覽器 resource failure 與 console warning/error。
  • 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,會列入 candidateScenariosuncoveredEvidence,避免 evidence 被靜默漏掉。

.ht/app-map.json 是跨頁面的應用結構推論。通用 prompt 應先讀它,再決定每個 prototype 是 authlegacy-shell-referencefeature-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.htmlscan 會把匹配結果寫進 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 新增 apiContractprototypeGuidemaintenanceContract
  • .ht/app-map.json route 新增 pageKindcapabilitiesprimaryEntityapiCount
  • .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
S
Description
No description provided
Readme 344 KiB
Languages
JavaScript 100%