refactor(docs): [SITE-03] migrate desktop editor and integrate typed generation

This commit is contained in:
Harvey Zhao committed 2026-09-14 09:25:46 +08:00
1 parent a468cb2c39
commit 2f130c58f1
37 files changed
+1921 -305

No files matched your search

@@ -0,0 +1,169 @@
{
"task": "SITE-03",
"baseline": "a468cb2c39e626f7b4f737d0ca60334150deae2b",
"node": "v24.21.0",
"yarn": "1.22.22",
"logs": {
"unit": {
"file": "refactor/.cache/site-editor-tests-final.log",
"sha256": "d4189f4e94db6698546a3244198cc683526e18e1db9af7eb2c5cf6f328588681",
"exitCode": 0,
"pass": 5
},
"integration": {
"file": "refactor/.cache/site-editor-integration.log",
"sha256": "a704c43adbef4e0c626d605257da47d928ad3766e98ca803ae616450f39c2eae",
"exitCode": 0,
"pass": 21
},
"baseline": {
"file": "refactor/.cache/site-editor-test-baseline.log",
"sha256": "91e014ad170d1240cef8f52b1399e8239a78d09c036e0e360a32285974f71391",
"exitCode": 0,
"pass": 522
},
"ci": {
"file": "refactor/.cache/site-editor-test-ci.log",
"sha256": "5548f2543f5cf97b1264bd09f0fd40f9d01811c9cca5ce38ffab42628b116b5a",
"exitCode": 0,
"pass": 50
},
"lint": {
"file": "refactor/.cache/site-editor-lint.log",
"sha256": "1067b3ccb58d3adab1bf690433d1174eb224143338b9735ecf58461b0c67f818",
"exitCode": 0
},
"toolchain": {
"file": "refactor/.cache/site-editor-check-toolchain.log",
"sha256": "2afc9e0561f660653ca354105298d2a161162db823ee2b9d35bbdbd5557a2e27",
"exitCode": 0
},
"browserTypes": {
"file": "refactor/.cache/site-editor-browser-types.log",
"sha256": "e660a669a597da32a881a1b6fbc85700acf2b890f3dfb080037e08de1b0b5261",
"exitCode": 0
},
"toolTypes": {
"file": "refactor/.cache/site-editor-tool-types.log",
"sha256": "3423554fc39544b5338814ffda828bda8b71ccd5841a86be422892408819dfa0",
"exitCode": 0
},
"assets": {
"file": "refactor/.cache/site-editor-check-site-assets.log",
"sha256": "0d1fec774e30162af0e6ae5c7bcec5f8f859835f5a0c1ffebe7ccf77ddb0d81d",
"exitCode": 0
},
"declarations": {
"file": "refactor/.cache/site-editor-check-editor-types.log",
"sha256": "03b2fe8bf2c1b1d2641c39ed28348ad1b2079d644ec57e3c3e1eee8c35240073",
"exitCode": 0
},
"llm": {
"file": "refactor/.cache/site-editor-check-llm.log",
"sha256": "e1163bb3dbc38eb5ca3b0d497df6022d14d539452441d288d7a592898562141b",
"exitCode": 0
},
"frozenInstall": {
"file": "refactor/.cache/site-editor-frozen-install.log",
"sha256": "4d587ec6212d0b874a96da55ebe55670fbd4c9e41642d79459d2b3bae0d87c85",
"exitCode": 0
},
"generation": {
"file": "refactor/.cache/site-editor-build-types.log",
"sha256": "6a40248ab3422b04f84abed19b3178cb42acdef76f6a51fd5ca7badc27fd667e",
"exitCode": 0
},
"browser": {
"file": "refactor/.cache/site-editor-browser-accepted.log",
"sha256": "d98249aedb874269171f761dcb52444d2062c8e88ea784ef208abd2d077f7900",
"exitCode": 0
}
},
"dependency": {
"name": "monaco-editor",
"version": "0.30.1",
"category": "root devDependency; type-only",
"oldLockEntriesIdentical": true,
"vendorRuntimeUnchanged": true,
"frozenInstallIgnoredScripts": true
},
"browser": {
"file": "refactor/.cache/site-editor-browser-accepted/report.json",
"sha256": "294110ebf4005af8ed41c9be4197ca917309ed0329a1263cdfdde8e2df2cc421",
"stats": {
"startTime": "2026-09-14T01:16:27.513Z",
"duration": 31682.62,
"expected": 42,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"versions": {
"chromium": "153.0.8010.12",
"firefox": "155.0",
"webkit": "26.6"
},
"platform": "win32",
"note": "Actual local Monaco/player with controlled media; no manual Chrome session or physical-device acceptance"
},
"initialFailure": {
"file": "refactor/.cache/site-editor-browser-initial/report.json",
"sha256": "ba6291978c9143a67903fe4c292a82fe0b6afc3c8b7a47572b4c9a4540ac7860",
"stats": {
"startTime": "2026-09-14T01:03:18.570Z",
"duration": 38071.753,
"expected": 33,
"skipped": 0,
"unexpected": 3,
"flaky": 0
},
"causes": [
"Two Firefox Error display-string assertions; actual Error.message used in candidate tests",
"Real Monaco lazy language AMD race; await modules before starting dependencies"
]
},
"unchangedPaths": [
"packages/artplayer/src",
"packages/artplayer/public",
"packages/artplayer/types",
"docs/assets/ts",
"docs/assets/js/vs",
"docs/document",
"docs/llms.txt"
],
"fingerprints": {
"docs/assets/js/bootstrap.js": "a31b05dfda0ffd9011af4fd786d01fb4b81600d34741c944d1f0144c187e357d",
"packages/artplayer-vitepress/browser/bootstrap.ts": "134128a545375635a05fae4f1dc5707bcca389e7f2db27dcffb17692a1c728fa",
"packages/artplayer-vitepress/browser/editor-files.ts": "09e437a9f70ccc5c4f071cfe6f8a90e11085caa8c26e7707b26dc6d2075a97a4",
"packages/artplayer-vitepress/browser/editor-host.ts": "05673be0ca9aea7d890aa4cd84ab372b7d34407bd8ab674f2c0f619996586f03",
"packages/artplayer-vitepress/browser/editor-libraries.ts": "da64881b70b187dbc0006937c2bc3759b7aeafda860c1b5c631308ebcb2c15a7",
"packages/artplayer-vitepress/browser/editor-monaco.ts": "f51dd01c42a0652a830ae7257ba4432c5c970b91e1f5db585fbbe16d355e004d",
"packages/artplayer-vitepress/browser/editor-preferences.ts": "10806adf43737cf0b85de91d1ca4ed988c192ccc6786129f45792c1bc026bed0",
"packages/artplayer-vitepress/browser/editor-session.ts": "18ddc8161b1c2f0b1aab431625aaf448a222dddec9e01bb7cb741017772cac14",
"packages/artplayer-vitepress/browser/editor.ts": "e27f46bb84abc363a36a3239018168d7ec8d22fe8690cf835a2c354ce54443bd",
"test/browser/site-editor.spec.js": "be9a7fdc76a02861041510425fede36b461d8a72b1f47ee14657af91dc221f56",
"test/site-editor.test.js": "ccad4960d9540da9ecc3208727d4478469bc69d8f07edff121b7581ce2d14268",
"docs/assets/js/common.js": "4ccfc0bba7093a45621e2fe0c9b48cb6da0e6101a2b87a5a0f8785611d2d98fc",
"docs/index.html": "bffcef9ee12817d79d41babaa01ea80ba8d44b2aa866b63105f4a453a2722f28",
"package.json": "176aa0d3eb248b342470a6bda49ffa8f4be62c1f1fd7af58baad8268766dd061",
"packages/artplayer-vitepress/browser/README.md": "2280fc2f0e344de008347cc6421e099e45092f76f4b5b01468933552c1dd5a7f",
"packages/artplayer-vitepress/browser/editor-loader.ts": "7cfdc82726d164d450b21680d950ec3f508482f1ab743febee473855248568e1",
"packages/artplayer-vitepress/browser/loader.ts": "d5d5c079854f40025be6af457baba863ab8cd37af59c120e811b7f59e5c160b6",
"packages/artplayer-vitepress/browser/mobile.ts": "beba095b7fda9fb9aa2c5cd50437ea9e186fa76e700e6e79ee8e9eb67fd86d7d",
"packages/artplayer-vitepress/browser/navigation.ts": "1ad87a6bee717f9e62d28c5e6dc382c5c1b43c09c9f10c64e3ef0824f2fbdedc",
"packages/artplayer-vitepress/browser/tsconfig.json": "9a1331ca4b311d66df7aca6e5ff8a8e3647e338931e013ffc7df58aaee8f6a0c",
"scripts/build-site-assets.mjs": "14effc0e354b8ed2d8c6370861181958058b20cb5e9485b7910fef4346cfc5bb",
"scripts/build-ts.js": "153b487736ac9ece1d34bb5fb58c904eb886cb66ce1d7616a1d64a253d991518",
"scripts/documentation/corpus.ts": "f4a977ec9b68c86ffa71164f8fd1263fe5ec0081a38586716a096cdfb86d8005",
"scripts/editor-declarations/generate.ts": "633fc5c495e8146f79e820357a4a80d656eba8f375b383bb0b2d734fcb1d0e5a",
"yarn.lock": "c76ffff6d6098b911487517f231ce758cf1f233ee3b6af79ab6676bf90b869d6"
},
"limitations": [
"Synthetic non-persisted pagehide is not physical BFCache validation",
"Already executed user-script globals and in-flight Monaco worker RPC cannot be undone",
"Semantic TS diagnostics do not block classic-script execution",
"No full example/search/link/vendor-provenance/device/remote-CI/npm acceptance",
"Full baseline precedes final status/risk edits; those receive targeted final checks",
"Root lint retains one existing generated-declaration warning"
]
}
+40 -7
View File
@@ -17913,12 +17913,13 @@
{
"source": "docs/index.html",
"route": "/",
"sha256Lf": "f654fa04c8aea08bc718e96ce2a438f04cc91060b2bb9b2b86f4e1467258fd97",
"sha256Lf": "bffcef9ee12817d79d41babaa01ea80ba8d44b2aa866b63105f4a453a2722f28",
"kind": "demo-or-editor",
"scriptSources": [
"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662",
"./assets/js/console.js",
"./assets/js/loader.js"
"./assets/js/loader.js",
"./assets/js/bootstrap.js"
],
"status": "not-run",
"owner": "EX-03"
@@ -18102,7 +18103,7 @@
},
{
"file": "scripts/build-ts.js",
"sha256Lf": "1ff2d13f4247bba1818a187eb945a86969f4c4d60245ba5cac8fc0b2b8edd3ba"
"sha256Lf": "153b487736ac9ece1d34bb5fb58c904eb886cb66ce1d7616a1d64a253d991518"
},
{
"file": "scripts/editor-types.mjs",
@@ -18138,7 +18139,7 @@
},
{
"file": "docs/assets/js/common.js",
"sha256Lf": "c18f72dd5489bdee5b7bd0030c716eab08ac7ea7bd253353eaf406fb8ae2bc14"
"sha256Lf": "4ccfc0bba7093a45621e2fe0c9b48cb6da0e6101a2b87a5a0f8785611d2d98fc"
},
{
"file": "docs/assets/js/mobile.js",
@@ -18158,7 +18159,7 @@
},
{
"file": "scripts/build-site-assets.mjs",
"sha256Lf": "58c163e16efa901d227045b468f324ac79ad4ab2f8ab8716f10a8ede62091666"
"sha256Lf": "14effc0e354b8ed2d8c6370861181958058b20cb5e9485b7910fef4346cfc5bb"
},
{
"file": "scripts/docs-smoke/generator.ts",
@@ -18182,7 +18183,7 @@
},
{
"file": "scripts/editor-declarations/generate.ts",
"sha256Lf": "6cf6ee27b2032e9e3a4aef949f2b54ba7bf12e40bed473478f63eb82759c8e5a"
"sha256Lf": "633fc5c495e8146f79e820357a4a80d656eba8f375b383bb0b2d734fcb1d0e5a"
},
{
"file": "scripts/editor-declarations/plugin.ts",
@@ -18206,7 +18207,7 @@
},
{
"file": "scripts/documentation/corpus.ts",
"sha256Lf": "f916f63822b9e53a26d2017c0004a576c1fbdf0af0f839c296c8e3d2a14bb2c1"
"sha256Lf": "f4a977ec9b68c86ffa71164f8fd1263fe5ec0081a38586716a096cdfb86d8005"
},
{
"file": "scripts/documentation/files.ts",
@@ -18240,10 +18241,42 @@
"file": "packages/artplayer-vitepress/build/markdown.ts",
"sha256Lf": "6d639e25bab97c973940661e2aac6f1034ab53ab1c016310a571ab52392819da"
},
{
"file": "packages/artplayer-vitepress/browser/bootstrap.ts",
"sha256Lf": "134128a545375635a05fae4f1dc5707bcca389e7f2db27dcffb17692a1c728fa"
},
{
"file": "packages/artplayer-vitepress/browser/editor-files.ts",
"sha256Lf": "09e437a9f70ccc5c4f071cfe6f8a90e11085caa8c26e7707b26dc6d2075a97a4"
},
{
"file": "packages/artplayer-vitepress/browser/editor-host.ts",
"sha256Lf": "05673be0ca9aea7d890aa4cd84ab372b7d34407bd8ab674f2c0f619996586f03"
},
{
"file": "packages/artplayer-vitepress/browser/editor-libraries.ts",
"sha256Lf": "da64881b70b187dbc0006937c2bc3759b7aeafda860c1b5c631308ebcb2c15a7"
},
{
"file": "packages/artplayer-vitepress/browser/editor-loader.ts",
"sha256Lf": "7cfdc82726d164d450b21680d950ec3f508482f1ab743febee473855248568e1"
},
{
"file": "packages/artplayer-vitepress/browser/editor-monaco.ts",
"sha256Lf": "f51dd01c42a0652a830ae7257ba4432c5c970b91e1f5db585fbbe16d355e004d"
},
{
"file": "packages/artplayer-vitepress/browser/editor-preferences.ts",
"sha256Lf": "10806adf43737cf0b85de91d1ca4ed988c192ccc6786129f45792c1bc026bed0"
},
{
"file": "packages/artplayer-vitepress/browser/editor-session.ts",
"sha256Lf": "18ddc8161b1c2f0b1aab431625aaf448a222dddec9e01bb7cb741017772cac14"
},
{
"file": "packages/artplayer-vitepress/browser/editor.ts",
"sha256Lf": "e27f46bb84abc363a36a3239018168d7ec8d22fe8690cf835a2c354ce54443bd"
},
{
"file": "packages/artplayer-vitepress/browser/loader.ts",
"sha256Lf": "d5d5c079854f40025be6af457baba863ab8cd37af59c120e811b7f59e5c160b6"
@@ -0,0 +1,89 @@
# SITE-03: desktop editor and generation integration
Baseline: `a468cb2c39e626f7b4f737d0ca60334150deae2b` on
`codex/compatible-modernization`. This completes the remaining desktop portion
of SITE-03; SITE-LOAD-01, SITE-AI-DOCS-01 and SITE-BUILD-01 retain the evidence
for loaders/navigation, translation/LLM tools and i18n/VitePress builds.
## Implementation and ownership
The desktop editor now has strict TypeScript modules for HTML bootstrap, host
types, preferences, Monaco initialization/compilation, run sessions and file
imports. The entry binds existing controls and owns page listeners and cleanup.
The module map and maintenance commands live in
`packages/artplayer-vitepress/browser/README.md`.
`bootstrap.js` and `common.js` are generated from TS alongside the existing three
site assets. Declaration generation owns `browser/editor-libraries.ts`; the UI,
corpus and inventory consume that canonical list. Successful `build:ts` rebuilds
the assets. Read-only declaration and asset checks separately reject drift.
Generated code is checked against its source instead of being hand-linted/fixed.
Root development dependency `monaco-editor@0.30.1` supplies types matching the
existing browser vendor. Imports are type-only. Only one lock entry is added;
no vendor runtime upgrade or new consumer dependency is introduced. Frozen Yarn
installation used `--ignore-scripts`, and strict toolchain verification checks
Node 24.21.0, Yarn 1.22.22, 39 pinned tools and 1471 dependency selectors.
`test:site-editor` is also included in the normal Node test chain.
## Reproduced problems and behavior changes
- The frozen old editor evaluates TypeScript syntax as JavaScript. The candidate
uses the actual Monaco TS worker to emit JS before destroying/running a player.
Syntax failure leaves the current player intact. Semantic diagnostics remain
visible but do not become a new mandatory execution gate.
- The frozen FileReader helper cannot settle read errors. Candidate handlers
reject errors/aborts and remove listeners; imports run in file/batch order.
- The frozen inline bootstrap throws when storage is denied. Candidate defaults
still boot the editor; failed preference writes revert the checkbox and report
the failure rather than claiming persistence.
- Removing the old arbitrary one-second delay exposed a real WebKit AMD race:
Monaco's late language script saw `define` suspended by the example loader.
Initialization now awaits the actual language modules before enabling Run or
starting example dependencies. A controlled delayed-module browser test holds
this boundary explicitly.
## Compatibility and limits
Existing DOM classes, controls, `prod/ts/code/log` keys and string values, URL
encoding, example priority, Ctrl/Meta-S, classic JS execution, dependency caching,
Run cleanup and `window.art` remain. JS imports retain script semantics; classic
Run code has global access and function-local `var`. Accidental access to the old
editor's private eval closure is not a public API. Core/plugin runtime sources,
public declarations and distribution contents are outside this change.
Newer runs supersede delayed example/compile results. Non-persisted pagehide
aborts initialization/imports and releases owned models, imports, listeners and
players. Already executed user scripts cannot be undone, and in-flight Monaco
worker RPC has no cancellation promise. A synthetic pagehide verifies cleanup;
real BFCache eviction/restore and physical devices are not claimed.
## Verification and failure history
Exact results, browser versions and log fingerprints are in
`../baselines/site-editor-validation.json`. New Node tests retain frozen old
reproductions and cover run races, failure propagation, FileReader settlement,
storage and cancellation. The browser suite uses actual local Monaco and player
assets with controlled media; it covers emitted TS, repeat Run/Ctrl-S, imports,
preferences, failed declaration initialization and delayed AMD readiness.
The initial 36-case run had 33 passes and 3 failures. Two Firefox assertions
incorrectly inspected the display string of Error objects; they now inspect the
actual Error message. The third failure exposed the AMD race described above.
Initial and subsequent reports are retained separately. Final 42-case runs pass
on Chromium, Firefox and WebKit with no retry, skip or timeout widening.
Full baseline and CI regressions, strict browser/tool types, root lint and
read-only declaration/asset/LLM checks are recorded with their actual results.
The existing generated core-declaration lint warning is retained. Full site
search/link coverage, all examples, advertising SDK services, remote CI and npm
acceptance remain separate tasks; those are not inferred from editor tests.
## Handoff and rollback
Finish SITE-04/05/07 and EX-03 for documentation semantics, whole-site behavior,
vendor/assets provenance and all examples. Plugin compatibility and release
reviews remain open. Revert this task's commit as one unit (TS sources, generated
assets, declaration-list wiring, tests, dependency/lock and task records); do not
restore only generated common.js while retaining the new source list/HTML entry.
This task is committed locally only, without pushing or publishing.
+7
View File
@@ -134,3 +134,10 @@ Yarn Classic 可执行文件,不再调用 npm。入口仍由 `ci:build` 按原
新增 `test:site-build`,其测试进入 `test:node`;构建 TS 模块与 VitePress
稳定代码分组 ID hook 进入根 lint/docs-tools 类型检查。真实本地构建和三浏览器
页面验证见任务变更记录,远端工作流、Pages 与 npm 验收不因此完成。
## SITE-03 编辑器来源与检查
common.js/bootstrap.js 由 browser 下的 TS 生成,源代码进入 typecheck:site-assets
和根 lint,产物由 check:site-assets 比较;不再对生成 common.js 应用源码 lint。
build:ts 生成声明 URL 清单后重建站点浏览器产物,check:editor-types 保持只读。
新增 test:site-editor 并接入 test:node,新增真实 Monaco 交互测试走现有三引擎矩阵。
+3 -2
View File
@@ -4,7 +4,7 @@
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 243 项,范围 22 个包及工作区/示例。
状态:todo 59 / doing 15 / blocked 0 / done 169 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
状态:todo 58 / doing 15 / blocked 0 / done 170 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
@@ -386,7 +386,7 @@
| SITE-LOAD-01 | artplayer-vitepress, workspace<br>修复文档示例加载顺序与导航边界 | SITE-02 | 共享 TS loader、移动入口与 Run Code/语言路由,保留 URL 和使用方式 | 旧版复现 define 丢失和依赖乱序;真实浏览器验证成功/失败恢复、顺序、去重、编码/优先级及 localhost/127 路由和语言跳转;不以此替代 SITE-03 构建/翻译流程 | M | done |
| SITE-AI-DOCS-01 | artplayer-vitepress, workspace<br>重构可复现 LLM 文档与安全翻译草稿流程 | SITE-LOAD-01, SITE-02 | TS 离线文档聚合、显式远程翻译、草稿校验和可回退应用,保留命令与目标路径 | 默认不读密钥/调用网络;LLM 内容可复现并保留来源;旧翻译破坏性行为有复现;错误/限流/超时/结构损坏/过期/路径越界拒绝且英文文档不丢失;未执行付费翻译不计服务验收 | M | done |
| SITE-BUILD-01 | artplayer, artplayer-vitepress, workspace<br>重构 i18n 与文档构建的暂存、替换和 Yarn 编排 | SITE-AI-DOCS-01 | 严格 TS 构建模块、编译后替换产物与失败回退,固定 Yarn 子进程和旧构建入口 | 旧 i18n 删除后失败有复现;失败不改变既有产物;语言集合、UMD/ESM/历史别名兼容;文档子进程退出码准确并完成真实 VitePress 构建;不隐式翻译、不修改播放器 API | M | done |
| SITE-03 | artplayer-vitepress<br>整理 i18n/文档/LLM 生成流程 | SITE-02, SITE-LOAD-01, SITE-AI-DOCS-01, SITE-BUILD-01 | build-i18n/build-docs/build-llm/trans-docs 的任务边界和错误处理;桌面 common.js 自有 UI 的 TS 迁移与模块拆分 | 原命令兼容、生成可复现,翻译步骤不隐式运行远程服务;覆盖移动 loader 失败恢复 define、脚本依赖顺序、localhost/127.0.0.1 Run Code 目标和语言重定向;桌面剩余 UI 完成 TS 职责拆分并回归运行、导入与持久设置 | M | todo |
| SITE-03 | artplayer-vitepress<br>整理 i18n/文档/LLM 生成流程 | SITE-02, SITE-LOAD-01, SITE-AI-DOCS-01, SITE-BUILD-01 | build-i18n/build-docs/build-llm/trans-docs 的任务边界和错误处理;桌面 common.js 自有 UI 的 TS 迁移与模块拆分 | 原命令兼容、生成可复现,翻译步骤不隐式运行远程服务;覆盖移动 loader 失败恢复 define、脚本依赖顺序、localhost/127.0.0.1 Run Code 目标和语言重定向;桌面剩余 UI 完成 TS 职责拆分并回归运行、导入与持久设置 | M | done |
| SITE-04 | artplayer-vitepress<br>交叉核对逐包持续维护的文档 | CORE-21, SITE-03, PKG-CHAPTER-04, PKG-AMBILIGHT-04, PKG-AUDIO-04, PKG-AUTO-THUMB-04, PKG-VTT-THUMB-04, PKG-HLS-04, PKG-DASH-04, PKG-MULTI-SUB-04, PKG-JASSUB-04, PKG-MASK-04, PKG-ASR-04, PKG-ADS-04, PKG-VAST-04, PKG-CAST-04, PKG-DPIP-04, PKG-CANVAS-04, PKG-IFRAME-04, PKG-TOOL-THUMB-04, PKG-DANMUKU-06, PKG-MB-08 | 已随实现更新的中文/英文 API、包内实现地图、旧 JS 示例及已知能力限制的全包核对 | 未把缺环境的能力写成已验证,静态核对不等待设备任务;最终 demo 仍由 EX-03 验收;按 SITE-01 声明成员/候选标题清单逐项语义核对,补齐缺失的双语插件说明和 Danmuku 英文入口 | M | todo |
| SITE-05 | artplayer-vitepress<br>构建文档站和验证链接/示例 | SITE-04, EX-01, EX-02, SITE-07 | VitePress 构建、链接与嵌入 demo 检查 | 文档构建、链接、嵌入路径与声明注入通过;真实完整 demo 保留 EX-03 独立门槛;核对 ENG-PM-01 登记的搜索 peer 范围和真实搜索行为 | M | todo |
| SITE-06 | artplayer-vitepress<br>文档站交付验收 | SITE-05 | 维护指南和站点变更记录 | 未手改 generated 目录,旧 URL 可用、部署与检查分离 | M | todo |
@@ -615,6 +615,7 @@
- SITE-LOAD-01: [记录](changes/2026-09-14-SITE-LOAD-01-site-loading.md) [记录](baselines/site-loading-validation.json)
- SITE-AI-DOCS-01: [记录](changes/2026-09-14-SITE-AI-DOCS-01-documentation-pipeline.md) [记录](baselines/documentation-pipeline-validation.json)
- SITE-BUILD-01: [记录](changes/2026-09-14-SITE-BUILD-01-staged-builds.md) [记录](baselines/site-build-validation.json)
- SITE-03: [记录](changes/2026-09-14-SITE-03-desktop-editor.md) [记录](baselines/site-editor-validation.json)
- SITE-07: [记录](site-inventory.md) [记录](baselines/site-provenance.json)
- EX-01: [记录](changes/2026-09-14-EX-01-react-consumer.md) [记录](baselines/react-consumer-validation.json) [记录](scripts/react-consumer.mjs)
- EX-02: [记录](changes/2026-09-14-EX-02-vue-consumer.md) [记录](baselines/vue-consumer-validation.json) [记录](scripts/vue-consumer.mjs)
+16
View File
@@ -1,5 +1,21 @@
# 进度与证据
## SITE-03 桌面编辑器与生成流程完成
桌面自有 UI 拆为严格 TS 的 bootstrap、Monaco、运行会话、文件导入与设置模块;
common.js/bootstrap.js 由源码生成,编辑器声明列表移到生成的 TS 单一来源。
实际 TS worker 编译后运行,修复旧版原样 eval TS、文件读取错误不结算及存储
被拒时无法启动。三浏览器验证发现并修复 Monaco 语言模块与依赖 loader 的
AMD 竞态,保留初始失败。原 DOM、偏好键、URL、Run/Ctrl-S 与公共包 API 保留。
最终浏览器 42、目标集成 21、baseline 522、CI 50 全部通过;严格类型、工具链、
生成一致性、冻结安装和 lint 通过(1 条既有 warning)。只新增 Monaco0.30.1
开发类型依赖,既有锁条目、vendor、核心公开声明未变。合成 pagehide 不代替
真机 BFCache;完整示例/搜索/链接/设备与远端发布验收仍开放。
见[变更](changes/2026-09-14-SITE-03-desktop-editor.md)和
[证据](baselines/site-editor-validation.json)。当前 243 项:170 done、15 doing、
58 todo。下一步 SITE-04 中英文 API 语义核对;Auto Thumbnail/VAST 源码迁移和
全部插件最终验收仍开放。独立本地提交后审计,无推送或发布。
## SITE-BUILD-01 构建流程完成
i18n/VitePress 构建完成严格 TS 模块拆分,暂存后替换并保留失败恢复路径;
+2
View File
@@ -258,3 +258,5 @@
| SITE-TRANS-DATA-01 | resolved / 已复现 | Translation deletes English before requests and repairs valid fences destructively; exhausted rate limits return undefined | SITE-AI-DOCS-01 |
| SITE-I18N-DATA-01 | resolved / 已复现 | Language build deletes existing distribution before compilation succeeds | SITE-BUILD-01 |
| SITE-CODE-GROUP-01 | resolved / 已复现 | VitePress code-group random IDs make identical site inputs emit different output hashes | SITE-BUILD-01 |
| SITE-EDITOR-FAILURE-01 | resolved / 已复现 | Desktop editor evaluates raw TypeScript and cannot settle FileReader errors or boot with denied storage | SITE-03 |
| SITE-EDITOR-AMD-01 | resolved / 已复现 | Late Monaco language AMD initialization races with example dependency loading | SITE-03 |
+48
View File
@@ -5823,6 +5823,54 @@
"test/site-markdown.test.js"
],
"resolutionRationale": "Installed renderer reproduces random IDs; wrapper stabilizes page/group/tab identity and label associations. Consecutive full builds have equal tree fingerprints and three browser engines verify actual tab selection and visible blocks."
},
{
"id": "SITE-EDITOR-FAILURE-01",
"title": "Desktop editor evaluates raw TypeScript and cannot settle FileReader errors or boot with denied storage",
"confirmation": "reproduced",
"status": "resolved",
"owners": [
"SITE-03"
],
"evidence": [
"refactor/changes/2026-09-14-SITE-03-desktop-editor.md",
"refactor/baselines/site-editor-validation.json",
"test/site-editor.test.js",
"test/browser/site-editor.spec.js"
],
"compatibleResolution": "Keep existing UI selectors, preference keys, URL and player/plugin APIs; fix internal initialization, failure and TS execution behavior.",
"closureCriteria": "Retain old failure evidence and verify candidate actual editor interactions plus deterministic generation and strict types.",
"resolutionEvidence": [
"refactor/changes/2026-09-14-SITE-03-desktop-editor.md",
"refactor/baselines/site-editor-validation.json",
"test/site-editor.test.js",
"test/browser/site-editor.spec.js"
],
"resolutionRationale": "Frozen old-source reproductions and candidate Node/browser tests verify TS emit before execution, settled file errors and storage-denied fallback without changing player APIs."
},
{
"id": "SITE-EDITOR-AMD-01",
"title": "Late Monaco language AMD initialization races with example dependency loading",
"confirmation": "reproduced",
"status": "resolved",
"owners": [
"SITE-03"
],
"evidence": [
"refactor/changes/2026-09-14-SITE-03-desktop-editor.md",
"refactor/baselines/site-editor-validation.json",
"test/site-editor.test.js",
"test/browser/site-editor.spec.js"
],
"compatibleResolution": "Keep existing UI selectors, preference keys, URL and player/plugin APIs; fix internal initialization, failure and TS execution behavior.",
"closureCriteria": "Retain old failure evidence and verify candidate actual editor interactions plus deterministic generation and strict types.",
"resolutionEvidence": [
"refactor/changes/2026-09-14-SITE-03-desktop-editor.md",
"refactor/baselines/site-editor-validation.json",
"test/site-editor.test.js",
"test/browser/site-editor.spec.js"
],
"resolutionRationale": "Initial real WebKit failure retained; await JS/TS language modules before Run and example dependencies. Delayed-module regression passes on all three engines."
}
]
}
+1 -1
View File
@@ -77,7 +77,7 @@ export function captureSiteInventory() {
examples: demo.examples,
pages: demo.pages,
baselinePaths: { examplesAdded: demo.examples.filter(row => !historical.examples.some(old => old.source === row.source)).map(row => row.source), examplesRemoved: historical.examples.filter(row => !demo.examples.some(now => now.source === row.source)).map(row => row.source), htmlAdded: demo.pages.filter(row => !historical.pages.some(old => old.source === row.source)).map(row => row.source), htmlRemoved: historical.pages.filter(row => !demo.pages.some(now => now.source === row.source)).map(row => row.source) },
editorDeclarations: [...read('docs/assets/js/common.js').matchAll(/'\.\/assets\/ts\/([^']+\.d\.ts)'/g)].map(match => ({ file: `docs/assets/ts/${match[1]}`, exists: fs.existsSync(path.join(root, 'docs/assets/ts', match[1])), owner: 'SITE-02' })),
editorDeclarations: [...read('packages/artplayer-vitepress/browser/editor-libraries.ts').matchAll(/'\.\/assets\/ts\/([^']+\.d\.ts)'/g)].map(match => ({ file: `docs/assets/ts/${match[1]}`, exists: fs.existsSync(path.join(root, 'docs/assets/ts', match[1])), owner: 'SITE-02' })),
scripts: [...scriptFiles, 'scripts/build-site-assets.mjs', ...files('scripts/docs-smoke').filter(file => file.endsWith('.ts')), ...files('scripts/editor-declarations').filter(file => file.endsWith('.ts')), ...files('scripts/documentation').filter(file => file.endsWith('.ts')), ...files('scripts/site-build').filter(file => file.endsWith('.ts')), ...files('packages/artplayer-vitepress/build').filter(file => file.endsWith('.ts')), ...files('packages/artplayer-vitepress/browser').filter(file => file.endsWith('.ts'))].map(file => ({ file, sha256Lf: hash(read(file)) })),
generationCommands: Object.fromEntries(Object.entries(json('package.json').scripts).filter(([name]) => /^(?:build:(?:types|ts|test|i18n|docs|llm|all)|ci:build)$/.test(name))),
siteManifest: json('packages/artplayer-vitepress/package.json'),
+11 -7
View File
@@ -10,7 +10,8 @@ SITE-SMOKE-01 后续已将 build:test 拆为 TS 解析、生成和浏览器运
SITE-LOAD-01 后续修复并抽取共享 loader、移动入口和 Run Code/语言导航,TS
来源及生成规则见[浏览器模块](../packages/artplayer-vitepress/browser/README.md)。
保留本站点生成/翻译流程和桌面剩余 UI 给 SITE-03,完整内容/页面验收给 SITE-04/05。
SITE-AI-DOCS-01/SITE-BUILD-01 已落实生成、翻译草稿和暂存构建;SITE-03 完成
桌面 UI 的 TS 模块拆分、实际 TS emit 与资源管理。完整内容/页面验收仍给 SITE-04/05。
SITE-01 在 `d62ab13a35c756ea567c426d4fbe00d893dd7e2b` 后核对当前源码。
可重跑清单见 [site-inventory.json](baselines/site-inventory.json);它登记
@@ -57,24 +58,27 @@ SITE-01 在 `d62ab13a35c756ea567c426d4fbe00d893dd7e2b` 后核对当前源码。
`prod` 是 localStorage 键/勾选项,不是已实现的查询参数;只选择核心产物,
不会重写 libs 中的插件路径。`libs` URI 解码后按换行分隔,依扩展名加载 JS/CSS,
Promise.all 等待全部完成;这不保证列表中脚本按顺序执行。
当前 loader 串行加载并缓存成功 URL,失败允许重试,保留列表依赖顺序。
`example` 优先于 `code`;均不存在时桌面取 index.js,移动取 mobile.js。
桌面移动重定向保留 location.search。桌面 Run 先发送 `artplayer:example:cleanup`,
销毁已有实例再 eval;重启将 libs/code 写入 URL。不要把 TS 模式视为严格类型编译证明。
销毁已有实例后在独立经典函数作用域运行;重启将 libs/code 写入 URL。
TS 模式先通过实际 Monaco worker 发射 JavaScript,语法错误保留当前实例;
语义诊断可见但不作为 Run 的阻断条件,不等于发布级严格类型验收。
当前编辑器注入 22 个 d.ts(20 个生态包、核心、i18n),逐个 fetch 后 addExtraLib/createModel。
来源是核心 public 经 build:types/build:ts,以及各生态包 types 经 build:ts。
URL 列表生成在 browser/editor-libraries.ts,build:ts 同步生成 common.js。
仅存在性检查不证明请求成功或 Monaco 诊断有效,真实编辑器验收归 EX-03。
loadScript 暂时覆盖 window.define:桌面成功/失败均恢复,移动失败分支没有恢复;
重复运行和加载失败顺序需要 SITE-03 / EX-03 修复与回归。
loadScript 暂时覆盖 window.define 后在成功/失败/取消时恢复。桌面先等待 Monaco
实际语言模块就绪,避免其 AMD 加载与外部脚本的临时 define 覆盖竞态。
## 生成流程和分发
| 命令/脚本 | 输入 → 输出 | 当前边界/责任 |
| --- | --- | --- |
| build:types | 核心 public → types | 已有严格生成检查,不手改输出 |
| build:ts | 核心及插件声明 → assets/ts、common.js 的 libUris | 大部分语义转换,仍有字符串 fallback;SITE-02 |
| build:test | 中文 Run Code → docs/test/test.js | 排除 en/plugin/public/.vitepress;100ms done 只是 smoke,含生成时间戳;SITE-02 |
| build:ts | 核心及插件声明 → assets/ts、editor-libraries.ts、生成 UI | 两代编译器整组校验;保持原声明 URL 与选包命令 |
| build:test | 中文 Run Code → docs/test/test.js、examples.json | TS 解析生成;按真实 ready/error 清理,覆盖范围见 SITE-SMOKE-01 |
| build:i18n | 核心语言源 → dist/i18n、compiled/i18n | SITE-BUILD-01 暂存全套 UMD/ESM 后替换;保留内置语言/辅助排除 |
| build:docs | VitePress 源 → docs/document | SITE-BUILD-01 固定 Yarn 子进程、暂存构建、失败回退 |
| build:llm | 英文文档、实际编辑器声明、示例、声明 notices → docs/llms.txt + manifest | SITE-AI-DOCS-01 离线可复现;check:llm 只读检查 |
+5 -2
View File
@@ -4223,11 +4223,14 @@
"SITE-AI-DOCS-01",
"SITE-BUILD-01"
],
"status": "todo",
"status": "done",
"risk": "M",
"deliverable": "build-i18n/build-docs/build-llm/trans-docs 的任务边界和错误处理;桌面 common.js 自有 UI 的 TS 迁移与模块拆分",
"acceptance": "原命令兼容、生成可复现,翻译步骤不隐式运行远程服务;覆盖移动 loader 失败恢复 define、脚本依赖顺序、localhost/127.0.0.1 Run Code 目标和语言重定向;桌面剩余 UI 完成 TS 职责拆分并回归运行、导入与持久设置",
"evidence": []
"evidence": [
"changes/2026-09-14-SITE-03-desktop-editor.md",
"baselines/site-editor-validation.json"
]
},
{
"id": "SITE-04",
+5
View File
@@ -34,6 +34,11 @@ CORE-25 默认选项缺陷已修复并通过相同三 Node 与严格打包检查
## 验证记录
SITE-03 新增根开发依赖 `monaco-editor@0.30.1`,仅为桌面编辑器提供与既有
Monaco 浏览器资产匹配的精确 API 类型。只使用 type import,不替换 vendor
或加入播放器产物;root yarn.lock 仅增加该版本的一个条目。新增
`yarn test:site-editor` 验证编辑器状态/读取失败;浏览器检查仍使用原 assets/js/vs。
ENG-01 的 [npm 验证报告](baselines/toolchain-validation.json) 是切换前历史证据,不代表 Yarn 已验证。[Yarn 验证报告](baselines/yarn-validation.json) 记录最终干净冻结安装、20 项 Node 测试、21 库包 63 产物及文档站构建全部通过;63 产物 SHA-256 与 ENG-01 完全相同。保留的旧锁条目版本变化为零,9 个 workspace runtime 依赖解析与 npm 基线一致。搜索 peer 警告由 SITE-05 接续验证。
构建通过不代表运行时、类型、真实浏览器或 npm 发布验收已完成。Chrome 不可用时按 release-reviews.md 使用内置浏览器并注明实际环境。