mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-08 10:56:15 -08:00
fix(docs): [SITE-ROUTES-01] track added HTML without replacing baseline
This commit is contained in:
1 parent
876fa4c328
commit
210484c443
12 files changed
+612
-11
No files matched your search
@@ -21,7 +21,14 @@ not a VitePress page. Keep both URL surfaces compatible.
|
||||
| `docs/public/style.css` | Documentation presentation | Copied into the built site |
|
||||
|
||||
Edit Markdown and public sources here. Do not edit the generated repository
|
||||
`docs/document/`. The current inventory contains 36 Markdown pages: 18 Chinese
|
||||
HTML directly. After adding a guide, rebuild the site, record its new HTML path
|
||||
in `refactor/baselines/demo-additions.json` with its owner task and either the known
|
||||
`introducedBy` commit or the pre-change HEAD as `introducedAfter` for a new page,
|
||||
and run `node refactor/scripts/demos.mjs --check`. Preserve the frozen BASE-04
|
||||
inventory. Also refresh and check the current site inventory; the two inventories
|
||||
serve different purposes. Neither path check replaces browser navigation tests.
|
||||
|
||||
The generated site lives in `docs/document/`. The current inventory contains 36 Markdown pages: 18 Chinese
|
||||
and 18 English. Danmuku, HLS, DASH, Audio Track and VTT Thumbnail have dedicated guides and navigation in both languages. Other plugins currently
|
||||
use their package README, architecture notes and linked editor examples;
|
||||
navigation links alone are not complete API documentation.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"note": "Append-only additions to BASE-04. This records path ownership, not browser acceptance; the original 29-example snapshot remains unchanged.",
|
||||
"note": "Append-only example and HTML additions to BASE-04. Records path ownership and introduction commits, not browser acceptance; the original 29-example/36-HTML snapshot stays unchanged.",
|
||||
"examples": [
|
||||
{
|
||||
"source": "docs/assets/example/asr.local.js",
|
||||
@@ -10,5 +10,79 @@
|
||||
"finalDemoOwner": "EX-03",
|
||||
"note": "Local audio capture demo with simulated subtitles; does not contact a recognition service. No menu link. Runtime evidence remains with the owning task."
|
||||
}
|
||||
],
|
||||
"pages": [
|
||||
{
|
||||
"source": "docs/document/en/plugin/audio-track.html",
|
||||
"route": "/document/en/plugin/audio-track.html",
|
||||
"introducedBy": "d3349e83f24fdea3fa55fdfa6254cb1587fc5a26",
|
||||
"owner": "SITE-AUDIO-01",
|
||||
"finalDemoOwner": "EX-03",
|
||||
"note": "Generated guide. Guide-specific browser evidence belongs to the owner; this entry does not complete full demo/release acceptance."
|
||||
},
|
||||
{
|
||||
"source": "docs/document/en/plugin/danmuku.html",
|
||||
"route": "/document/en/plugin/danmuku.html",
|
||||
"introducedBy": "ea3174daa28e698af3db2ff36aecf4ef2da54470",
|
||||
"owner": "SITE-DANMUKU-01",
|
||||
"finalDemoOwner": "EX-03",
|
||||
"note": "Generated guide. Guide-specific browser evidence belongs to the owner; this entry does not complete full demo/release acceptance."
|
||||
},
|
||||
{
|
||||
"source": "docs/document/en/plugin/dash-control.html",
|
||||
"route": "/document/en/plugin/dash-control.html",
|
||||
"introducedBy": "319dccb60593f6206418dc04b27b1170767fa716",
|
||||
"owner": "SITE-DASH-01",
|
||||
"finalDemoOwner": "EX-03",
|
||||
"note": "Generated guide. Guide-specific browser evidence belongs to the owner; this entry does not complete full demo/release acceptance."
|
||||
},
|
||||
{
|
||||
"source": "docs/document/en/plugin/hls-control.html",
|
||||
"route": "/document/en/plugin/hls-control.html",
|
||||
"introducedBy": "4ea0ba94ae51d14d353bc57a3222a8c19b11ac66",
|
||||
"owner": "SITE-HLS-01",
|
||||
"finalDemoOwner": "EX-03",
|
||||
"note": "Generated guide. Guide-specific browser evidence belongs to the owner; this entry does not complete full demo/release acceptance."
|
||||
},
|
||||
{
|
||||
"source": "docs/document/en/plugin/vtt-thumbnail.html",
|
||||
"route": "/document/en/plugin/vtt-thumbnail.html",
|
||||
"introducedBy": "9ba3c82f99e6bad0e858f6c2e1d8624dfb725c8c",
|
||||
"owner": "SITE-VTT-01",
|
||||
"finalDemoOwner": "EX-03",
|
||||
"note": "Generated guide. Guide-specific browser evidence belongs to the owner; this entry does not complete full demo/release acceptance."
|
||||
},
|
||||
{
|
||||
"source": "docs/document/plugin/audio-track.html",
|
||||
"route": "/document/plugin/audio-track.html",
|
||||
"introducedBy": "d3349e83f24fdea3fa55fdfa6254cb1587fc5a26",
|
||||
"owner": "SITE-AUDIO-01",
|
||||
"finalDemoOwner": "EX-03",
|
||||
"note": "Generated guide. Guide-specific browser evidence belongs to the owner; this entry does not complete full demo/release acceptance."
|
||||
},
|
||||
{
|
||||
"source": "docs/document/plugin/dash-control.html",
|
||||
"route": "/document/plugin/dash-control.html",
|
||||
"introducedBy": "319dccb60593f6206418dc04b27b1170767fa716",
|
||||
"owner": "SITE-DASH-01",
|
||||
"finalDemoOwner": "EX-03",
|
||||
"note": "Generated guide. Guide-specific browser evidence belongs to the owner; this entry does not complete full demo/release acceptance."
|
||||
},
|
||||
{
|
||||
"source": "docs/document/plugin/hls-control.html",
|
||||
"route": "/document/plugin/hls-control.html",
|
||||
"introducedBy": "4ea0ba94ae51d14d353bc57a3222a8c19b11ac66",
|
||||
"owner": "SITE-HLS-01",
|
||||
"finalDemoOwner": "EX-03",
|
||||
"note": "Generated guide. Guide-specific browser evidence belongs to the owner; this entry does not complete full demo/release acceptance."
|
||||
},
|
||||
{
|
||||
"source": "docs/document/plugin/vtt-thumbnail.html",
|
||||
"route": "/document/plugin/vtt-thumbnail.html",
|
||||
"introducedBy": "9ba3c82f99e6bad0e858f6c2e1d8624dfb725c8c",
|
||||
"owner": "SITE-VTT-01",
|
||||
"finalDemoOwner": "EX-03",
|
||||
"note": "Generated guide. Guide-specific browser evidence belongs to the owner; this entry does not complete full demo/release acceptance."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,335 @@
|
||||
{
|
||||
"task": "SITE-ROUTES-01",
|
||||
"baselineCommit": "876fa4c32882c8ae27ed15d1bc8507ae75d55eae",
|
||||
"environment": {
|
||||
"node": "24.21.0",
|
||||
"yarn": "1.22.22",
|
||||
"typescript": "5.9.3",
|
||||
"platform": "Windows"
|
||||
},
|
||||
"scope": "Full local ci:check on the existing installation, before failure and after route-ledger repair. No new installation, ci:build, coverage, browser matrix, remote job or release acceptance.",
|
||||
"before": {
|
||||
"exitCode": 1,
|
||||
"path": "refactor/.cache/ci-check-876fa4c3.log",
|
||||
"sha256": "b463f7d7c04cfc5b23ea2504a622300063c219ff384991a14b666f90081650bd",
|
||||
"tests": [
|
||||
2937,
|
||||
170,
|
||||
618
|
||||
],
|
||||
"passed": [
|
||||
2937,
|
||||
170,
|
||||
617
|
||||
],
|
||||
"failed": [
|
||||
0,
|
||||
0,
|
||||
1
|
||||
],
|
||||
"skipped": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"canceled": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"todo": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"durationsMs": [
|
||||
59471.0185,
|
||||
24736.7005,
|
||||
139417.8916
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"exitCode": 0,
|
||||
"path": "refactor/.cache/ci-check-site-routes-final.log",
|
||||
"sha256": "351243244c4415ebb1b6a1cafb0e7b5e7428e73c707faeb365afe33da431c592",
|
||||
"tests": [
|
||||
2937,
|
||||
170,
|
||||
619
|
||||
],
|
||||
"passed": [
|
||||
2937,
|
||||
170,
|
||||
619
|
||||
],
|
||||
"failed": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"skipped": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"canceled": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"todo": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"durationsMs": [
|
||||
48705.6332,
|
||||
24768.6579,
|
||||
159316.7625
|
||||
],
|
||||
"finalYarnSeconds": 476.52
|
||||
},
|
||||
"targetedBefore": {
|
||||
"path": "refactor/.cache/site-routes-before.log",
|
||||
"sha256": "06f1c24bd2ad95bd67236030d2bd08ebc35ae61aca2e52adae7386b014795fc4",
|
||||
"tests": [
|
||||
3
|
||||
],
|
||||
"passed": [
|
||||
0
|
||||
],
|
||||
"failed": [
|
||||
3
|
||||
],
|
||||
"skipped": [
|
||||
0
|
||||
],
|
||||
"canceled": [
|
||||
0
|
||||
],
|
||||
"todo": [
|
||||
0
|
||||
],
|
||||
"durationsMs": [
|
||||
127.1716
|
||||
]
|
||||
},
|
||||
"targetedAfter": {
|
||||
"path": "refactor/.cache/site-routes-after.log",
|
||||
"sha256": "931b7025249bb7e151c3ff9d04651a799e884b74c5fa1c8f5a993ebd1bed9d49",
|
||||
"tests": [
|
||||
3
|
||||
],
|
||||
"passed": [
|
||||
3
|
||||
],
|
||||
"failed": [
|
||||
0
|
||||
],
|
||||
"skipped": [
|
||||
0
|
||||
],
|
||||
"canceled": [
|
||||
0
|
||||
],
|
||||
"todo": [
|
||||
0
|
||||
],
|
||||
"durationsMs": [
|
||||
153.284
|
||||
]
|
||||
},
|
||||
"lint": {
|
||||
"path": "refactor/.cache/site-routes-lint.log",
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"path": "refactor/baselines/demo-inventory.json",
|
||||
"sha256": "ffbb50e14dc008819b3674802aa26fac5643ea78205103d25d268dece8bafb61"
|
||||
},
|
||||
{
|
||||
"path": "refactor/baselines/demo-additions.json",
|
||||
"sha256": "6c2027bd0a035704ac6c13790bc3e2719a9a621ca19f1509216b4868b1a289da"
|
||||
},
|
||||
{
|
||||
"path": "refactor/scripts/demos.mjs",
|
||||
"sha256": "4e63262e1b3a173148c775222e5f0494f270ca97bf216ae51754105c0d014053"
|
||||
},
|
||||
{
|
||||
"path": "refactor/scripts/demos.test.mjs",
|
||||
"sha256": "f0e549b9072b506ef65f2869a684b89d4130cf912b8a3583b125a785a49b305b"
|
||||
},
|
||||
{
|
||||
"path": "refactor/docs-browser-testing.md",
|
||||
"sha256": "d458d87bcc5f58930a14a4d189b9aff27f04dd8c614049874d76e9b725cc53b7"
|
||||
},
|
||||
{
|
||||
"path": "packages/artplayer-vitepress/README.md",
|
||||
"sha256": "8457b4d12991646648a925dc1cc1674895801ec8f03891450feca923aeb7413f"
|
||||
}
|
||||
],
|
||||
"historicalInventoryUnchanged": true,
|
||||
"introductions": [
|
||||
{
|
||||
"source": "docs/document/en/plugin/audio-track.html",
|
||||
"commit": "d3349e83f24fdea3fa55fdfa6254cb1587fc5a26",
|
||||
"parentContainsPath": false,
|
||||
"addedByCommit": true
|
||||
},
|
||||
{
|
||||
"source": "docs/document/en/plugin/danmuku.html",
|
||||
"commit": "ea3174daa28e698af3db2ff36aecf4ef2da54470",
|
||||
"parentContainsPath": false,
|
||||
"addedByCommit": true
|
||||
},
|
||||
{
|
||||
"source": "docs/document/en/plugin/dash-control.html",
|
||||
"commit": "319dccb60593f6206418dc04b27b1170767fa716",
|
||||
"parentContainsPath": false,
|
||||
"addedByCommit": true
|
||||
},
|
||||
{
|
||||
"source": "docs/document/en/plugin/hls-control.html",
|
||||
"commit": "4ea0ba94ae51d14d353bc57a3222a8c19b11ac66",
|
||||
"parentContainsPath": false,
|
||||
"addedByCommit": true
|
||||
},
|
||||
{
|
||||
"source": "docs/document/en/plugin/vtt-thumbnail.html",
|
||||
"commit": "9ba3c82f99e6bad0e858f6c2e1d8624dfb725c8c",
|
||||
"parentContainsPath": false,
|
||||
"addedByCommit": true
|
||||
},
|
||||
{
|
||||
"source": "docs/document/plugin/audio-track.html",
|
||||
"commit": "d3349e83f24fdea3fa55fdfa6254cb1587fc5a26",
|
||||
"parentContainsPath": false,
|
||||
"addedByCommit": true
|
||||
},
|
||||
{
|
||||
"source": "docs/document/plugin/dash-control.html",
|
||||
"commit": "319dccb60593f6206418dc04b27b1170767fa716",
|
||||
"parentContainsPath": false,
|
||||
"addedByCommit": true
|
||||
},
|
||||
{
|
||||
"source": "docs/document/plugin/hls-control.html",
|
||||
"commit": "4ea0ba94ae51d14d353bc57a3222a8c19b11ac66",
|
||||
"parentContainsPath": false,
|
||||
"addedByCommit": true
|
||||
},
|
||||
{
|
||||
"source": "docs/document/plugin/vtt-thumbnail.html",
|
||||
"commit": "9ba3c82f99e6bad0e858f6c2e1d8624dfb725c8c",
|
||||
"parentContainsPath": false,
|
||||
"addedByCommit": true
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"historicalExamples": 29,
|
||||
"addedExamples": 1,
|
||||
"historicalHtml": 36,
|
||||
"addedHtml": 9,
|
||||
"packages": 22
|
||||
},
|
||||
"checks": [
|
||||
"yarn check:toolchain --strict",
|
||||
"yarn check:commits --report",
|
||||
"yarn check:impact --report",
|
||||
"yarn check:ci",
|
||||
"yarn test:contracts",
|
||||
"yarn check:contracts --report",
|
||||
"yarn check:plan",
|
||||
"yarn check:release-ledger",
|
||||
"yarn typecheck:release",
|
||||
"yarn check:rollback-inventory",
|
||||
"yarn lint",
|
||||
"yarn typecheck:library",
|
||||
"yarn typecheck:scaffold",
|
||||
"yarn typecheck:docs-tools",
|
||||
"yarn check:docs-smoke",
|
||||
"yarn check:editor-types",
|
||||
"yarn check:llm",
|
||||
"yarn check:vconsole",
|
||||
"yarn check:console",
|
||||
"yarn check:site-notices",
|
||||
"yarn typecheck:site-assets",
|
||||
"yarn check:site-assets",
|
||||
"yarn check:types",
|
||||
"yarn typecheck",
|
||||
"yarn typecheck:react",
|
||||
"yarn lint:react",
|
||||
"yarn typecheck:vue",
|
||||
"yarn lint:vue",
|
||||
"yarn test"
|
||||
],
|
||||
"branchImpact": {
|
||||
"path": "refactor/.cache/ci-check-876fa4c3-branch-impact.json",
|
||||
"sha256": "3ef8de607e99b1438edb0ef2aaf3aa47b536803e4772b8fcea939c461e75b62a",
|
||||
"capturedBeforeFix": true,
|
||||
"range": "explicit-base",
|
||||
"head": "876fa4c32882c8ae27ed15d1bc8507ae75d55eae",
|
||||
"base": "40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f",
|
||||
"changedPaths": 3288,
|
||||
"affectedPackages": [
|
||||
"artplayer",
|
||||
"artplayer-plugin-ads",
|
||||
"artplayer-plugin-ambilight",
|
||||
"artplayer-plugin-asr",
|
||||
"artplayer-plugin-audio-track",
|
||||
"artplayer-plugin-auto-thumbnail",
|
||||
"artplayer-plugin-chapter",
|
||||
"artplayer-plugin-chromecast",
|
||||
"artplayer-plugin-danmuku",
|
||||
"artplayer-plugin-danmuku-mask",
|
||||
"artplayer-plugin-dash-control",
|
||||
"artplayer-plugin-document-pip",
|
||||
"artplayer-plugin-hls-control",
|
||||
"artplayer-plugin-jassub",
|
||||
"artplayer-plugin-multiple-subtitles",
|
||||
"artplayer-plugin-vast",
|
||||
"artplayer-plugin-vtt-thumbnail",
|
||||
"artplayer-proxy-canvas",
|
||||
"artplayer-proxy-mediabunny",
|
||||
"artplayer-tool-iframe",
|
||||
"artplayer-tool-thumbnail",
|
||||
"artplayer-vitepress"
|
||||
],
|
||||
"requiredCIJobs": [
|
||||
"browser-consumers",
|
||||
"browser-smoke",
|
||||
"checks",
|
||||
"coverage"
|
||||
],
|
||||
"reviewRequired": true,
|
||||
"unknownPathCount": 650,
|
||||
"installedConsumerGaps": [
|
||||
"artplayer-plugin-ads",
|
||||
"artplayer-plugin-ambilight",
|
||||
"artplayer-plugin-asr",
|
||||
"artplayer-plugin-audio-track",
|
||||
"artplayer-plugin-auto-thumbnail",
|
||||
"artplayer-plugin-chromecast",
|
||||
"artplayer-plugin-danmuku",
|
||||
"artplayer-plugin-danmuku-mask",
|
||||
"artplayer-plugin-dash-control",
|
||||
"artplayer-plugin-document-pip",
|
||||
"artplayer-plugin-hls-control",
|
||||
"artplayer-plugin-jassub",
|
||||
"artplayer-plugin-multiple-subtitles",
|
||||
"artplayer-plugin-vast",
|
||||
"artplayer-plugin-vtt-thumbnail",
|
||||
"artplayer-proxy-canvas",
|
||||
"artplayer-proxy-mediabunny",
|
||||
"artplayer-tool-iframe",
|
||||
"artplayer-tool-thumbnail"
|
||||
]
|
||||
},
|
||||
"limitations": [
|
||||
"Historical baseline tests deliberately reproduce old defects; passing them does not mean old artifacts are fixed.",
|
||||
"introducedBy/introducedAfter format is validated, but normal checker does not perform Git provenance verification; the nine current entries were verified separately.",
|
||||
"No runtime or generated site content changed; existing guide browser evidence remains with its original task.",
|
||||
"Full CI/CD, generic installed consumers, physical devices and publication remain pending."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
# SITE-ROUTES-01:新增 HTML 路径登记与完整本地 CI
|
||||
|
||||
基线 `876fa4c32882c8ae27ed15d1bc8507ae75d55eae`,本轮先在干净工作区运行完整
|
||||
`yarn ci:check`,再修复真实失败并完整重跑。
|
||||
|
||||
## 失败与修复
|
||||
|
||||
首轮运行时单元2937项、工程/文档170项通过,最后的历史基线618项中617通过、
|
||||
1失败。demos.test.mjs 检查发现当前45个HTML比BASE-04冻结的36个多了九个。
|
||||
SITE-DANMUKU/HLS/DASH/AUDIO/VTT的指南工作更新了当前site-inventory,却没有
|
||||
同步历史demo台账的增量;此前增量机制只支持JS示例。
|
||||
|
||||
保持demo-inventory.json的历史内容、指纹和36个路径完全不变,在demo-additions.json
|
||||
增加pages数组,登记EN Danmuku一页及HLS/DASH/Audio/VTT各两页。每条包含实际路径、
|
||||
路由、责任任务、EX-03最终责任和引入依据。逐一用Git核实九个introducedBy提交确实
|
||||
新增对应HTML,且其父提交不存在该路径;没有随意填一个能读取文件的后续commit。
|
||||
|
||||
校验将历史与增量合并后对照实际HTML集合,继续拒绝漏项和删除,额外拒绝重复路径、
|
||||
越界路径、错误route、未知task或最终责任、缺少/歧义的引入依据。不使用自动重拍
|
||||
快照、忽略新页面、只检查历史集合子集等方式消除失败。
|
||||
|
||||
新页面同次提交无法包含自己的未来Git哈希,因此新增记录也可用introducedAfter
|
||||
注明修改前HEAD,配合owner跟踪后续提交;与introducedBy二选一。该字段只是起点,
|
||||
不冒充实际引入commit。两种引用均检查40位哈希格式;日常校验不自动核实Git语义,
|
||||
登记时的人工/工具审查仍必要。本次九条全部使用已核实的introducedBy。
|
||||
|
||||
强化测试:已有增量负例先要求原数据验证通过,避免由于无关HTML漂移使全部
|
||||
assert.throws假通过。新增HTML用例覆盖正例、introducedAfter及八类无效元数据。
|
||||
改动前针对三个测试全失败,修改后三个测试全部通过。
|
||||
|
||||
维护方式写入docs-browser-testing.md与VitePress README;没有改播放器、插件、
|
||||
公开类型、页面内容、媒体或已验证浏览器交互,也没有新增依赖或重建站点。
|
||||
|
||||
## 完整验证
|
||||
|
||||
Node24.21.0 / Yarn Classic1.22.22 / TypeScript5.9.3 / Windows。
|
||||
最终完整ci:check退出0,用时476.52秒。
|
||||
|
||||
| 阶段 | 最终结果 |
|
||||
| --- | --- |
|
||||
| 运行时单元集合 | 2937 pass / 0 fail |
|
||||
| 工程与文档集合 | 170 pass / 0 fail |
|
||||
| 历史基线集合 | 619 pass / 0 fail |
|
||||
| 全部上述集合 | 无skip、cancel或todo;这些是执行次数,不声明互不重复的契约数量 |
|
||||
| 生产TS检查 | 416个文件;不把未迁移JS计入TS数量 |
|
||||
| 消费者类型 | TS5.9.3的node10-commonjs、nodenext-cjs、bundler-esm、nodenext-esm及TS4.3.5的node10-commonjs通过 |
|
||||
| React/Vue | 类型与lint通过 |
|
||||
| 其余串联检查 | 工具链、提交、影响映射、CI规则、契约、计划、发布台账、回退清单、lint、生成声明/编辑器/文档/许可产物等通过 |
|
||||
| 定向台账回归与lint | 3项通过、lint退出0 |
|
||||
|
||||
完整命令会在任一子命令失败时停止;保留首轮非零日志和最终日志,未删失败测试或
|
||||
放宽超时。最终运行期间没有修改测试与校验实现。完成状态和本记录在通过后登记,
|
||||
再执行最终计划/风险校验及提交审计。
|
||||
|
||||
另外从重构起点40fcda6到本轮基线做了明确Git范围的影响分析:3288路径、22包,
|
||||
四个必需CI作业全部保留,650个未分类路径保守触发全包审查。此分析是在修复前
|
||||
干净HEAD上取得;本地ci:check默认worktree报告为零变化,不能用它代表分支无影响。
|
||||
通用隔离Node/类型消费者仍只覆盖core/chapter,影响模型明确列出19个库包缺口。
|
||||
这些限制不因本地ci:check通过而消失。
|
||||
|
||||
本次不是新冻结安装,也没有执行ci:build、coverage、完整浏览器矩阵、实际新tarball
|
||||
消费或远端GitHub Actions。CI-01继续doing;设备/SDK/原生像素问题及三轮发布复盘
|
||||
仍按原任务处理,不能把本次检查当成完整CI/CD或npm发布准入完成。
|
||||
|
||||
完整输入哈希、阶段统计、Git引入核实及原/最终日志见
|
||||
[site-routes-validation.json](../baselines/site-routes-validation.json)。
|
||||
|
||||
## 状态与回退
|
||||
|
||||
SITE-ROUTES-01完成,SITE-04保留原依赖并追加该子任务;关闭SITE-HTML-INVENTORY-01。
|
||||
当前213 done / 21 doing / 43 todo,共277。没有改变版本、依赖或锁文件;没有push、
|
||||
部署或发布。回退该独立提交将恢复原校验器和增量文件,但九条文档路径仍存在,
|
||||
因此旧的HTML覆盖失败也会恢复;冻结的BASE-04快照始终不变。
|
||||
@@ -60,4 +60,16 @@ IFRAME-05 的 `yarn test:iframe-history` 使用8085的独立缓存页面及完
|
||||
|
||||
[完整路径台账](baselines/demo-inventory.json) 已覆盖 29 个示例、36 个 HTML 和 22 包,包括生成文档、独立 upscaler 与站点验证页面。源脚本/菜单参数与 editor prod/ts/code/log 规则已有记录;这些官方入口尚未运行,运行时实际存储值和网络来源仍待 EX-03 采集。
|
||||
|
||||
以上是冻结的 BASE-04 快照。新增页面和示例应写入
|
||||
[增量台账](baselines/demo-additions.json),不得重拍历史快照来消除覆盖失败。
|
||||
当前增量包含 asr.local 示例和九个生成文档 HTML,合计30示例、45 HTML。
|
||||
每个新增HTML登记 source、对应route、引入依据、责任task和finalDemoOwner。
|
||||
已提交页面用introducedBy记录实际引入commit;与页面同次提交的新记录用introducedAfter
|
||||
记录修改前的HEAD,配合owner任务追踪引入,避免要求提交包含自身未来的Git哈希。
|
||||
两字段只能选一项;introducedAfter只是起点,不代表实际引入commit已确定。
|
||||
运行 `node refactor/scripts/demos.mjs --check` 以及 `node --test refactor/scripts/demos.test.mjs`;
|
||||
校验保留所有历史路径,并拒绝未登记、重复、越界或缺少责任的新增页面。
|
||||
提交来源在登记时用Git核实;校验器检查提交ID格式,不把它当作已完成语义审查。
|
||||
各指南的实际浏览器结果保留在各自任务证据中;路径登记本身不新增浏览器通过结论。
|
||||
|
||||
独立发布包夹具的 DOM/CSS、Tab/热键、设置与网页全屏已在内置浏览器两次实测,见 [覆盖及问题](baselines/dom-coverage.md)。它没有运行 Monaco,不代表编辑器 Run 或官方 chapter demo 通过。thumbnail 无菜单示例依赖不在当前 workspace 的旧插件,已交 SITE-01/EX-03 核实。
|
||||
+7
-5
@@ -2,9 +2,9 @@
|
||||
|
||||
> 由 tasks.json 生成。请修改数据后运行 `node refactor/scripts/plan.mjs --write`,不要手改本表。
|
||||
|
||||
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 276 项,范围 22 个包及工作区/示例。
|
||||
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 277 项,范围 22 个包及工作区/示例。
|
||||
|
||||
状态:todo 43 / doing 21 / blocked 0 / done 212 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
状态:todo 43 / doing 21 / blocked 0 / done 213 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
|
||||
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
| artplayer-proxy-mediabunny | 1.2.0 | PKG-MB-01, PKG-MB-02, PKG-MB-03, PKG-MB-04, PKG-MB-05, PKG-MB-06, PKG-MB-07, PKG-MB-08, PKG-MB-09, PKG-MB-10 |
|
||||
| artplayer-tool-iframe | 1.1.0 | PKG-IFRAME-01, PKG-IFRAME-02, PKG-IFRAME-03, PKG-IFRAME-04, PKG-IFRAME-05, PKG-IFRAME-06 |
|
||||
| artplayer-tool-thumbnail | 4.4.0 | PKG-TOOL-THUMB-01, PKG-TOOL-THUMB-02, PKG-TOOL-THUMB-03, PKG-TOOL-THUMB-04, PKG-TOOL-THUMB-05, PKG-TOOL-THUMB-06, PKG-TOOL-THUMB-07 |
|
||||
| artplayer-vitepress | 1.1.0 | SITE-01, SITE-SMOKE-01, SITE-02, SITE-LOAD-01, SITE-AI-DOCS-01, SITE-BUILD-01, SITE-03, SITE-DANMUKU-01, SITE-HLS-01, SITE-DASH-01, SITE-04, SITE-05, SITE-06, SITE-07, SITE-VCONSOLE-01, ENG-LINT-02, SITE-CONSOLE-01, SITE-AUDIO-01, SITE-VTT-01 |
|
||||
| artplayer-vitepress | 1.1.0 | SITE-01, SITE-SMOKE-01, SITE-02, SITE-LOAD-01, SITE-AI-DOCS-01, SITE-BUILD-01, SITE-03, SITE-DANMUKU-01, SITE-HLS-01, SITE-DASH-01, SITE-04, SITE-05, SITE-06, SITE-07, SITE-VCONSOLE-01, ENG-LINT-02, SITE-CONSOLE-01, SITE-AUDIO-01, SITE-VTT-01, SITE-ROUTES-01 |
|
||||
|
||||
## 0 规划
|
||||
|
||||
@@ -409,7 +409,7 @@
|
||||
| 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 | done |
|
||||
| SITE-DANMUKU-01 | artplayer-vitepress, artplayer-plugin-danmuku<br>核对弹幕双语指南并补齐英文入口 | SITE-03, PKG-DANMUKU-07 | 按实现修正中文调用说明,新增英文完整选项/API/热力图/类型指南和导航;同步生成站点与LLM资料,新增双语示例浏览器验收 | 旧中文URL和标题保留;实际方法返回、加载语义、回调与points边界准确;双语页面、Run Code及示例实测,完整插件组合和设备验收不冒充完成 | L | 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, SITE-DANMUKU-01, SITE-HLS-01, SITE-DASH-01, SITE-AUDIO-01, SITE-VTT-01 | 已随实现更新的中文/英文 API、包内实现地图、旧 JS 示例及已知能力限制的全包核对 | 未把缺环境的能力写成已验证,静态核对不等待设备任务;最终 demo 仍由 EX-03 验收;按 SITE-01 声明成员/候选标题清单逐项语义核对,补齐缺失的双语插件说明和 Danmuku 英文入口 | M | todo |
|
||||
| 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, SITE-DANMUKU-01, SITE-HLS-01, SITE-DASH-01, SITE-AUDIO-01, SITE-VTT-01, SITE-ROUTES-01 | 已随实现更新的中文/英文 API、包内实现地图、旧 JS 示例及已知能力限制的全包核对 | 未把缺环境的能力写成已验证,静态核对不等待设备任务;最终 demo 仍由 EX-03 验收;按 SITE-01 声明成员/候选标题清单逐项语义核对,补齐缺失的双语插件说明和 Danmuku 英文入口 | M | todo |
|
||||
| SITE-05 | artplayer-vitepress<br>构建文档站和验证链接/示例 | SITE-04, EX-01, EX-02, SITE-07, SITE-VCONSOLE-01, SITE-CONSOLE-01 | VitePress 构建、链接与嵌入 demo 检查 | 文档构建、链接、嵌入路径与声明注入通过;真实完整 demo 保留 EX-03 独立门槛;核对 ENG-PM-01 登记的搜索 peer 范围和真实搜索行为 | M | todo |
|
||||
| SITE-06 | artplayer-vitepress<br>文档站交付验收 | SITE-05 | 维护指南和站点变更记录 | 未手改 generated 目录,旧 URL 可用、部署与检查分离 | M | todo |
|
||||
| SITE-07 | artplayer-vitepress, workspace<br>整理站点第三方资产与来源说明 | SITE-01 | Monaco/vConsole/console bundle/字体和样本的冻结来源、可复现构建或替代与站点 notices | 接续 SITE-01 的字节与换行差异证据;完整许可随实际分发,consoleLog/global/CSS/worker 与旧 URL 兼容;缺字体/媒体使用依据明确处置;资产变更后执行编辑器/移动/字幕/示例回归,不以来源指纹替代授权或运行证据 | H | doing |
|
||||
@@ -418,6 +418,7 @@
|
||||
| EX-03 | workspace<br>验证全部原生 demo 与外部播放集成 | EX-01, EX-02, PKG-CHAPTER-06, PKG-AMBILIGHT-06, PKG-AUDIO-06, PKG-AUTO-THUMB-06, PKG-VTT-THUMB-06, PKG-HLS-06, PKG-DASH-06, PKG-MULTI-SUB-06, PKG-JASSUB-06, PKG-MASK-06, PKG-ASR-06, PKG-ADS-06, PKG-VAST-06, PKG-CAST-06, PKG-DPIP-06, PKG-DANMUKU-09, PKG-CANVAS-06, PKG-MB-10, PKG-IFRAME-06, PKG-TOOL-THUMB-06 | 8082 全 demo、HLS/DASH/FLV/MPEGTS/WebTorrent 集成记录 | 旧 URL/参数/脚本加载保持;网络/SDK 限制明确,不静默跳过;覆盖编辑器重复 Run 和 ESM/i18n/mobile/iframe,记录实际候选脚本及状态隔离证据;依据 BASE-04 路径台账逐项消除 not-run,处理 BASE-DEMO-01 | H | todo |
|
||||
| SITE-VCONSOLE-01 | artplayer-vitepress, workspace<br>修复 vConsole 日志帧与延迟面板销毁竞态 | SITE-01 | 冻结上游 bundle 的可复现 TS 生命周期补丁、旧红新绿回归、来源及生成检查;销毁后虚拟列表布局续段停止 | 最后日志插件移除后取消 RAF 并隔离旧队列;延迟面板不得写入已销毁或替换插件;三引擎移动页与 UMD 入口通过,维护声明与原有许可缺口分别记录;原生 ResizeObserver 布局与挂起 timer 旧红新绿 | M | done |
|
||||
| SITE-CONSOLE-01 | artplayer-vitepress, workspace<br>迁移控制台自有 TS 源码并修复日志生命周期 | SITE-03 | 从冻结 console.js 恢复自有入口/视图的 TS 模块、受控第三方边界与可验证构建;修复滚动回调、多容器 hook 所有权和原生 Error 消息丢失 | 保留 consoleLog 返回组件、React/ReactDOM/Parcel 全局及 DOM/CSS/日志对象语义;旧版复现与候选正确行为分开验证;多容器、卸载/重挂、外部 hook、错误/滚动及真实编辑器组合通过;架构与生成文档同批更新,不以冻结 vendor 代替 SITE-07 许可闭环 | H | done |
|
||||
| SITE-ROUTES-01 | artplayer-vitepress, workspace<br>将新增文档HTML纳入保留历史的路径覆盖台账 | BASE-04, SITE-03 | 不覆盖BASE-04的HTML增量台账、准确路由/责任校验及完整CI证据 | 复现完整ci:check的路径覆盖失败;新页面必须显式登记,拒绝漏项/重复/错误路由/越界/缺任务和提交,保留旧页面保护及浏览器验收边界 | M | done |
|
||||
|
||||
## 6 文档和示例
|
||||
|
||||
@@ -532,7 +533,7 @@
|
||||
- ENG-09: [记录](changes/2026-09-12-ENG-09-integration.md) [记录](baselines/engineering-integration.json)
|
||||
- ENG-10: [记录](changes/2026-09-10-ENG-10-test-reliability.md) [记录](test-reliability.md)
|
||||
- ENG-11: [记录](build-analysis.md) [记录](baselines/bundle-attribution.json) [记录](changes/2026-09-11-ENG-11-build-analysis.md)
|
||||
- CI-01: [记录](ci-setup.md) [记录](changes/2026-09-13-CI-01-matrix-summary.md) [记录](baselines/ci-matrix-validation.json) [记录](changes/2026-09-13-CI-01-node-consumers.md) [记录](baselines/node-consumer-validation.json) [记录](changes/2026-09-14-CI-01-installed-full.md) [记录](baselines/ci-installed-full-validation.json) [记录](changes/2026-09-14-CI-01-source-chromium.md) [记录](baselines/ci-source-chromium-validation.json) [记录](changes/2026-09-15-CI-01-ads-installed.md) [记录](baselines/ci-ads-installed-validation.json) [记录](changes/2026-09-15-CI-01-subtitles-installed.md) [记录](baselines/ci-subtitles-installed-validation.json) [记录](changes/2026-09-15-CI-01-adaptive-installed.md) [记录](baselines/ci-adaptive-installed-validation.json) [记录](changes/2026-09-15-CI-01-asr-cast-installed.md) [记录](baselines/ci-asr-cast-installed-validation.json) [记录](changes/2026-09-15-CI-01-mediabunny-installed.md) [记录](baselines/ci-mediabunny-installed-validation.json) [记录](changes/2026-09-15-CI-01-jassub-installed.md) [记录](baselines/ci-jassub-installed-validation.json) [记录](changes/2026-09-15-CI-01-danmuku-installed.md) [记录](baselines/ci-danmuku-installed-validation.json) [记录](changes/2026-09-15-CI-01-browser-matrix.md) [记录](baselines/ci-browser-matrix-validation.json) [记录](changes/2026-09-15-CI-01-iframe-installed.md) [记录](baselines/ci-iframe-installed-validation.json) [记录](changes/2026-09-15-CI-01-vast-installed.md) [记录](baselines/ci-vast-installed-validation.json) [记录](changes/2026-09-15-CI-01-rendering-policy.md) [记录](baselines/ci-rendering-policy-validation.json)
|
||||
- CI-01: [记录](ci-setup.md) [记录](changes/2026-09-13-CI-01-matrix-summary.md) [记录](baselines/ci-matrix-validation.json) [记录](changes/2026-09-13-CI-01-node-consumers.md) [记录](baselines/node-consumer-validation.json) [记录](changes/2026-09-14-CI-01-installed-full.md) [记录](baselines/ci-installed-full-validation.json) [记录](changes/2026-09-14-CI-01-source-chromium.md) [记录](baselines/ci-source-chromium-validation.json) [记录](changes/2026-09-15-CI-01-ads-installed.md) [记录](baselines/ci-ads-installed-validation.json) [记录](changes/2026-09-15-CI-01-subtitles-installed.md) [记录](baselines/ci-subtitles-installed-validation.json) [记录](changes/2026-09-15-CI-01-adaptive-installed.md) [记录](baselines/ci-adaptive-installed-validation.json) [记录](changes/2026-09-15-CI-01-asr-cast-installed.md) [记录](baselines/ci-asr-cast-installed-validation.json) [记录](changes/2026-09-15-CI-01-mediabunny-installed.md) [记录](baselines/ci-mediabunny-installed-validation.json) [记录](changes/2026-09-15-CI-01-jassub-installed.md) [记录](baselines/ci-jassub-installed-validation.json) [记录](changes/2026-09-15-CI-01-danmuku-installed.md) [记录](baselines/ci-danmuku-installed-validation.json) [记录](changes/2026-09-15-CI-01-browser-matrix.md) [记录](baselines/ci-browser-matrix-validation.json) [记录](changes/2026-09-15-CI-01-iframe-installed.md) [记录](baselines/ci-iframe-installed-validation.json) [记录](changes/2026-09-15-CI-01-vast-installed.md) [记录](baselines/ci-vast-installed-validation.json) [记录](changes/2026-09-15-CI-01-rendering-policy.md) [记录](baselines/ci-rendering-policy-validation.json) [记录](changes/2026-09-15-SITE-ROUTES-01-html-inventory.md) [记录](baselines/site-routes-validation.json)
|
||||
- CI-02: [记录](changes/2026-09-14-CI-02-pages-artifact.md) [记录](baselines/pages-artifact-validation.json) [记录](pages-deployment.md)
|
||||
- PILOT-01: [记录](changes/2026-09-10-PILOT-01-chapter.md) [记录](baselines/pilot-validation.json)
|
||||
- CORE-01: [记录](changes/2026-09-10-CORE-01-typed-utils.md) [记录](baselines/core-utils-validation.json)
|
||||
@@ -728,3 +729,4 @@
|
||||
- SITE-AUDIO-01: [记录](changes/2026-09-15-SITE-AUDIO-01-guides.md) [记录](baselines/audio-docs-validation.json)
|
||||
- SITE-VTT-01: [记录](changes/2026-09-15-SITE-VTT-01-guides.md) [记录](baselines/vtt-docs-validation.json)
|
||||
- PKG-AUTO-THUMB-13: [记录](changes/2026-09-15-PKG-AUTO-THUMB-13-registration.md) [记录](baselines/auto-thumbnail-registration-validation.json)
|
||||
- SITE-ROUTES-01: [记录](changes/2026-09-15-SITE-ROUTES-01-html-inventory.md) [记录](baselines/site-routes-validation.json)
|
||||
@@ -1,5 +1,20 @@
|
||||
# 进度与证据
|
||||
|
||||
## SITE-ROUTES-01 路径增量台账及完整本地CI
|
||||
|
||||
完整ci:check复现最后基线集合1项失败:九个新增指南HTML没有进入历史demo路径台账。
|
||||
保留BASE-04快照,增加显式pages增量、任务/路由/提交依据校验和有效负例;实际Git
|
||||
逐一核实九个引入提交。未来同次提交的新页面可登记修改前HEAD,避免自引用哈希。
|
||||
|
||||
最终完整ci:check退出0,476.52秒:运行时2937、工程170、历史基线619通过;
|
||||
416生产TS、旧/新类型模式、React/Vue、lint及串联产物检查通过。三个定向台账
|
||||
测试通过。见[记录](changes/2026-09-15-SITE-ROUTES-01-html-inventory.md)和[证据](baselines/site-routes-validation.json)。
|
||||
|
||||
这是现有安装的本地检查,不是完整浏览器/coverage/构建/远端CI或发布验收。
|
||||
分支影响分析涉及22包,650未分类路径仍保守审查,通用安装消费者19包缺口保留。
|
||||
CI-01仍doing;213 done、21 doing、43 todo,共277,无推送/部署/发布。
|
||||
|
||||
|
||||
## PKG-AUTO-THUMB-13 阻止销毁后迟到注册
|
||||
|
||||
修复保留registrar在宿主销毁后仍新增三个监听器、迟到元数据创建隐藏视频的问题。
|
||||
|
||||
@@ -287,3 +287,4 @@
|
||||
| DASH-EXAMPLE-01 | resolved / 已复现 | DASH示例重复销毁SDK、无MSE仍注册插件且空语言回调抛错 | SITE-DASH-01, EX-03 |
|
||||
| CI-BROWSER-MODE-01 | resolved / 已复现 | Installed browser validation can inherit rendering substitutions and direct config loading bypasses launcher diagnostic policy | CI-01 |
|
||||
| AUTO-THUMB-REGISTRATION-01 | resolved / 已复现 | Delayed direct factory installation on a destroyed host retains subscriptions and can restart hidden decoding | PKG-AUTO-THUMB-13 |
|
||||
| SITE-HTML-INVENTORY-01 | resolved / 已复现 | New documentation HTML is missing from historical demo route coverage, failing the complete local CI check | SITE-ROUTES-01 |
|
||||
@@ -6754,6 +6754,25 @@
|
||||
"refactor/baselines/auto-thumbnail-registration-validation.json"
|
||||
],
|
||||
"resolutionRationale": "Two prechange Node failures and both real-core Chromium failures reproduce retained subscriptions and native video creation. Source193, main/legacy88 each and three-engine42 each pass after the entry guard; live/absent-flag hosts retain successful generation. Public types and first-frame/device gates remain unchanged."
|
||||
},
|
||||
{
|
||||
"id": "SITE-HTML-INVENTORY-01",
|
||||
"title": "New documentation HTML is missing from historical demo route coverage, failing the complete local CI check",
|
||||
"confirmation": "reproduced",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"SITE-ROUTES-01"
|
||||
],
|
||||
"evidence": [
|
||||
"refactor/changes/2026-09-15-SITE-ROUTES-01-html-inventory.md",
|
||||
"refactor/baselines/site-routes-validation.json"
|
||||
],
|
||||
"compatibleResolution": "Keep BASE-04 immutable and explicitly track introduced pages, route identity and task ownership; preserve omission and deletion checks.",
|
||||
"closureCriteria": "Old complete CI failure and final full local CI success with negative coverage tests; historical snapshot unchanged.",
|
||||
"resolutionEvidence": [
|
||||
"refactor/baselines/site-routes-validation.json"
|
||||
],
|
||||
"resolutionRationale": "Nine actual Git additions recorded. Three targeted tests pass with positive controls and invalid metadata cases. Full ci:check passes 2937 runtime, 170 engineering and 619 baseline invocations after the old 617/618 baseline failure; no runtime or browser-acceptance scope expansion."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -39,6 +39,16 @@ export function validateDemoInventory(inventory, additions = JSON.parse(read('re
|
||||
assert.equal(inventory.schemaVersion, 1)
|
||||
assert.equal(additions.schemaVersion, 1)
|
||||
const taskIds = new Set(JSON.parse(read('refactor/tasks.json')).tasks.map(task => task.id))
|
||||
const addedPages = additions.pages ?? []
|
||||
assert(Array.isArray(addedPages), 'Invalid added pages')
|
||||
for (const page of addedPages) {
|
||||
assert(/^docs\/(?:[a-z0-9][a-z0-9._-]*\/)*[a-z0-9][a-z0-9._-]*\.html$/.test(page.source), 'Invalid added HTML path')
|
||||
const references = ['introducedBy', 'introducedAfter'].filter(key => Object.hasOwn(page, key))
|
||||
assert.equal(references.length, 1, 'Page requires one introduction reference')
|
||||
assert(/^[a-f0-9]{40}$/.test(page[references[0]]), 'Missing page introduction commit')
|
||||
assert(taskIds.has(page.owner) && page.finalDemoOwner === 'EX-03', 'Missing added page owner')
|
||||
assert.equal(page.route, `/${page.source.slice(5)}`.replace(/index\.html$/, ''), 'Added page route does not match its HTML path')
|
||||
}
|
||||
for (const addition of additions.examples) {
|
||||
assert(/^docs\/assets\/example\/[a-z0-9.]+\.js$/.test(addition.source), 'Invalid added example path')
|
||||
assert(/^[a-f0-9]{40}$/.test(addition.introducedBy), 'Missing introduction commit')
|
||||
@@ -48,7 +58,9 @@ export function validateDemoInventory(inventory, additions = JSON.parse(read('re
|
||||
const sources = [...inventory.examples, ...additions.examples].map(item => item.source)
|
||||
assert.equal(new Set(sources).size, sources.length, 'Duplicate baseline/addition paths')
|
||||
assert.deepEqual(sources.sort(), fs.readdirSync(path.join(root, 'docs/assets/example')).filter(name => name.endsWith('.js')).map(name => `docs/assets/example/${name}`).sort(), 'Demo file coverage drift')
|
||||
assert.deepEqual(inventory.pages.map(item => item.source).sort(), htmlFiles(), 'HTML route coverage drift')
|
||||
const pages = [...inventory.pages, ...addedPages].map(item => item.source)
|
||||
assert.equal(new Set(pages).size, pages.length, 'Duplicate baseline/addition HTML paths')
|
||||
assert.deepEqual(pages.sort(), htmlFiles(), 'HTML route coverage drift')
|
||||
assert.deepEqual(inventory.examples.flatMap(item => item.menuLinks).sort(), menuLinks().sort(), 'Editor link coverage drift')
|
||||
assert.deepEqual(inventory.packages.map(item => item.name).sort(), JSON.parse(read('refactor/package-inventory.json')).packages.map(item => item.name).sort(), 'Package demo coverage drift')
|
||||
const names = new Set(inventory.examples.map(item => item.name))
|
||||
@@ -70,6 +82,6 @@ if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.me
|
||||
const inventory = JSON.parse(fs.readFileSync(filename, 'utf8'))
|
||||
validateDemoInventory(inventory)
|
||||
const additions = JSON.parse(read('refactor/baselines/demo-additions.json'))
|
||||
console.log(`Demo coverage: ${inventory.examples.length} historical + ${additions.examples.length} added examples, ${inventory.pages.length} HTML paths, ${inventory.packages.length} packages; no browser pass implied`)
|
||||
console.log(`Demo coverage: ${inventory.examples.length} historical + ${additions.examples.length} added examples, ${inventory.pages.length} historical + ${additions.pages?.length || 0} added HTML paths, ${inventory.packages.length} packages; no browser pass implied`)
|
||||
}
|
||||
}
|
||||
@@ -24,6 +24,7 @@ test('Demo inventory rejects missing files, routes and ecosystem packages', () =
|
||||
test('Demo additions require complete paths, specific routes and task ownership', () => {
|
||||
const inventory = JSON.parse(fs.readFileSync(path.join(refactorDir, 'baselines/demo-inventory.json'), 'utf8'))
|
||||
const additions = JSON.parse(fs.readFileSync(path.join(refactorDir, 'baselines/demo-additions.json'), 'utf8'))
|
||||
assert.doesNotThrow(() => validateDemoInventory(inventory, additions))
|
||||
for (const mutate of [
|
||||
value => value.examples.pop(),
|
||||
value => value.examples.push(value.examples[0]),
|
||||
@@ -37,3 +38,29 @@ test('Demo additions require complete paths, specific routes and task ownership'
|
||||
assert.throws(() => validateDemoInventory(inventory, changed))
|
||||
}
|
||||
})
|
||||
|
||||
test('Added HTML pages retain exact routes, unique paths and accountable introductions', () => {
|
||||
const inventory = JSON.parse(fs.readFileSync(path.join(refactorDir, 'baselines/demo-inventory.json'), 'utf8'))
|
||||
const additions = JSON.parse(fs.readFileSync(path.join(refactorDir, 'baselines/demo-additions.json'), 'utf8'))
|
||||
assert.doesNotThrow(() => validateDemoInventory(inventory, additions))
|
||||
const pending = structuredClone(additions)
|
||||
delete pending.pages[0].introducedBy
|
||||
pending.pages[0].introducedAfter = JSON.parse(fs.readFileSync(path.join(refactorDir, 'tasks.json'), 'utf8')).baselineCommit
|
||||
assert.doesNotThrow(() => validateDemoInventory(inventory, pending), 'A new page can record its pre-change baseline without requiring its own future commit hash')
|
||||
for (const [mutate, error] of [
|
||||
[value => value.pages.pop(), /HTML route coverage drift/],
|
||||
[value => value.pages.push(value.pages[0]), /Duplicate baseline\/addition HTML paths/],
|
||||
[value => value.pages[0].source = 'docs/document/../private.html', /Invalid added HTML path/],
|
||||
[value => value.pages[0].route += '?ignored=1', /Added page route does not match its HTML path/],
|
||||
[value => value.pages[0].owner = 'UNKNOWN-01', /Missing added page owner/],
|
||||
[value => value.pages[0].finalDemoOwner = 'SITE-01', /Missing added page owner/],
|
||||
[value => value.pages[0].introducedBy = '', /Missing page introduction commit/],
|
||||
[value => value.pages[0].introducedAfter = value.pages[0].introducedBy, /Page requires one introduction reference/],
|
||||
[value => delete value.pages[0].introducedBy, /Page requires one introduction reference/],
|
||||
[value => value.pages = false, /Invalid added pages/],
|
||||
]) {
|
||||
const changed = structuredClone(additions)
|
||||
mutate(changed)
|
||||
assert.throws(() => validateDemoInventory(inventory, changed), error)
|
||||
}
|
||||
})
|
||||
+26
-2
@@ -784,7 +784,9 @@
|
||||
"changes/2026-09-15-CI-01-vast-installed.md",
|
||||
"baselines/ci-vast-installed-validation.json",
|
||||
"changes/2026-09-15-CI-01-rendering-policy.md",
|
||||
"baselines/ci-rendering-policy-validation.json"
|
||||
"baselines/ci-rendering-policy-validation.json",
|
||||
"changes/2026-09-15-SITE-ROUTES-01-html-inventory.md",
|
||||
"baselines/site-routes-validation.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -4516,7 +4518,8 @@
|
||||
"SITE-HLS-01",
|
||||
"SITE-DASH-01",
|
||||
"SITE-AUDIO-01",
|
||||
"SITE-VTT-01"
|
||||
"SITE-VTT-01",
|
||||
"SITE-ROUTES-01"
|
||||
],
|
||||
"status": "todo",
|
||||
"risk": "M",
|
||||
@@ -5947,6 +5950,27 @@
|
||||
"changes/2026-09-15-PKG-AUTO-THUMB-13-registration.md",
|
||||
"baselines/auto-thumbnail-registration-validation.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "SITE-ROUTES-01",
|
||||
"phase": "6 文档与消费者",
|
||||
"title": "将新增文档HTML纳入保留历史的路径覆盖台账",
|
||||
"scope": [
|
||||
"artplayer-vitepress",
|
||||
"workspace"
|
||||
],
|
||||
"dependsOn": [
|
||||
"BASE-04",
|
||||
"SITE-03"
|
||||
],
|
||||
"status": "done",
|
||||
"risk": "M",
|
||||
"deliverable": "不覆盖BASE-04的HTML增量台账、准确路由/责任校验及完整CI证据",
|
||||
"acceptance": "复现完整ci:check的路径覆盖失败;新页面必须显式登记,拒绝漏项/重复/错误路由/越界/缺任务和提交,保留旧页面保护及浏览器验收边界",
|
||||
"evidence": [
|
||||
"changes/2026-09-15-SITE-ROUTES-01-html-inventory.md",
|
||||
"baselines/site-routes-validation.json"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user