From 7cf6f33130621439c11fbbf03f510927c1be5044 Mon Sep 17 00:00:00 2001 From: Harvey Zhao Date: Tue, 15 Sep 2026 05:30:05 +0800 Subject: [PATCH] chore: [ENG-LINT-02] restore clean repository lint --- docs/assets/ts/artplayer.d.ts | 2 +- packages/artplayer-plugin-vast/package.json | 8 +-- refactor/baselines/eng-lint02-validation.json | 53 +++++++++++++++++++ .../2026-09-15-ENG-LINT-02-clean-checks.md | 28 ++++++++++ refactor/plan.md | 14 ++--- refactor/progress.md | 7 +++ refactor/tasks.json | 26 ++++++++- scripts/editor-declarations/README.md | 3 ++ scripts/editor-declarations/core.ts | 2 +- 9 files changed, 130 insertions(+), 13 deletions(-) create mode 100644 refactor/baselines/eng-lint02-validation.json create mode 100644 refactor/changes/2026-09-15-ENG-LINT-02-clean-checks.md diff --git a/docs/assets/ts/artplayer.d.ts b/docs/assets/ts/artplayer.d.ts index f32f9af99..e07177abc 100644 --- a/docs/assets/ts/artplayer.d.ts +++ b/docs/assets/ts/artplayer.d.ts @@ -1,5 +1,5 @@ // Generated from packages/artplayer/public/artplayer.ts by yarn build:ts. Do not edit. -/* eslint-disable ts/no-redeclare, ts/no-namespace -- UMD constructor and named types share the global export. */ +/* eslint-disable ts/no-redeclare -- UMD constructor and named types share the global export. */ declare namespace ArtplayerDefinitions { export interface ComponentInput extends Omit { html?: string | HTMLElement | number diff --git a/packages/artplayer-plugin-vast/package.json b/packages/artplayer-plugin-vast/package.json index ad2830ec9..34d92277b 100644 --- a/packages/artplayer-plugin-vast/package.json +++ b/packages/artplayer-plugin-vast/package.json @@ -44,10 +44,6 @@ "types": "./types/artplayer-plugin-vast.d.ts", "legacy": "./dist/artplayer-plugin-vast.legacy.js", "browserslist": "last 1 Chrome version", - "dependencies": { - "@alugha/ima": "2.1.0", - "@glomex/vast-ima-player": "^1.21.2" - }, "typesVersions": { "*": { "legacy": [ @@ -57,5 +53,9 @@ "types/runtime.d.ts" ] } + }, + "dependencies": { + "@alugha/ima": "2.1.0", + "@glomex/vast-ima-player": "^1.21.2" } } diff --git a/refactor/baselines/eng-lint02-validation.json b/refactor/baselines/eng-lint02-validation.json new file mode 100644 index 000000000..d8c7bbc37 --- /dev/null +++ b/refactor/baselines/eng-lint02-validation.json @@ -0,0 +1,53 @@ +{ + "schemaVersion": 1, + "task": "ENG-LINT-02", + "baseCommit": "d2f4261aa719a21a8d0dbe042d4d22e307786093", + "node": "24.21.0", + "yarn": "1.22.22", + "commands": [ + { + "name": "build:ts", + "log": "refactor/.cache/eng-lint02-generate.log", + "exitCode": 0, + "seconds": 9.06, + "logSha256": "bc4340fb8a83101d1be97b55a78dda62617cbe4161eacc38c295e6acc1cb74c4" + }, + { + "name": "check:editor-types", + "log": "refactor/.cache/eng-lint02-editor-check.log", + "exitCode": 0, + "seconds": 9.47, + "logSha256": "210e8fd473d069331331141ec53515edd90f40fa995d402b090a68f3c4aee193" + }, + { + "name": "lint", + "log": "refactor/.cache/eng-lint02-lint.log", + "exitCode": 0, + "seconds": 13.1, + "errors": 0, + "warnings": 0, + "logSha256": "cccd079780223122fd33f320e6103514b5280db7e51496a020340c0542812900" + } + ], + "checks": [ + "strict docs-tools TypeScript", + "strict toolchain", + "risk register" + ], + "manifest": { + "path": "packages/artplayer-plugin-vast/package.json", + "deepEqual": true, + "allNestedKeyOrderingUnchanged": true, + "newSha256Lf": "5b19f43dc951e25c8aa6c3fb72161c0d52a11ce74b79fdec920f04b1cb7eb042" + }, + "declaration": { + "path": "docs/assets/ts/artplayer.d.ts", + "onlyLintCommentChanged": true, + "sha256Lf": "6b038ad9084766023baaa037e6abcd9edde2a3c40b8b9b1dfc5e45c20be7b7ba" + }, + "limits": [ + "Metadata bytes change; next VAST npm candidate must be repacked", + "No runtime behavior change, no additional browser playback run", + "No push or publication" + ] +} diff --git a/refactor/changes/2026-09-15-ENG-LINT-02-clean-checks.md b/refactor/changes/2026-09-15-ENG-LINT-02-clean-checks.md new file mode 100644 index 000000000..00658ebbb --- /dev/null +++ b/refactor/changes/2026-09-15-ENG-LINT-02-clean-checks.md @@ -0,0 +1,28 @@ +# ENG-LINT-02 恢复零错误、零警告的全仓 lint + +SITE-07 的扩大检查发现 VAST package.json 顶层 dependencies 排在 typesVersions +之前,违反既有排序规则;核心编辑器声明还保留一个不再需要的 no-namespace 禁用项。 +起点 d2f4261aa719a21a8d0dbe042d4d22e307786093,工作区干净且提交审计通过后独立修复。 + +只移动 VAST 顶层 dependencies 区块;其解析值深度相等,逐字段序列化也相等, +包括条件导出中具有语义的嵌套键顺序。版本、依赖、JS/类型入口及旧路径均不变。 +从 scripts/editor-declarations/core.ts 的生成模板删除无效禁用项,保留必要的 +no-redeclare。通过 yarn build:ts 重新生成,未手改生成文件。生成声明除这一行 +注释外逐字一致;其他生成输出没有实际 Git 差异。模块说明同步说明该注释边界。 + +Node 24.21.0 / Yarn 1.22.22 的实际检查: + +- build:ts 退出 0,24 个声明/清单输出同时经 TS 5.9.3 和 4.3.5 验证;随后生成 + 5 个站点浏览器资产、26 条英文路由,产物字节未改变。 +- check:editor-types 退出 0,24 个输出无漂移。 +- 全仓只读 lint 退出 0,零 error、零 warning,13.10 秒。 +- VAST 元数据深度相等及全部嵌套顺序保留、核心生成声明仅注释变化均已实际断言。 +- 严格 docs-tools 类型、工具链、计划/风险、Git diff 与提交审计按本批核验。 + +这是元数据排序和生成注释修复,不增加仅镜像格式的单元测试,不重复真实广告播放。 +VAST 下一次 tarball 字节和完整性值会变化,必须重新冻结候选;不能复用此前 tarball +来证明新候选分发。没有新依赖、锁文件、运行时或公共类型变化,也没有推送或发布。 +具体命令、日志和语义断言见[验证记录](../baselines/eng-lint02-validation.json)。 + +本任务单独完成并提交;SITE-07 及 VAST 的其他待验收步骤不因此标为完成。 +回退此提交会恢复原格式错误和警告;运行时代码无需回退。 diff --git a/refactor/plan.md b/refactor/plan.md index 0585d543e..d4dc94f8d 100644 --- a/refactor/plan.md +++ b/refactor/plan.md @@ -2,9 +2,9 @@ > 由 tasks.json 生成。请修改数据后运行 `node refactor/scripts/plan.mjs --write`,不要手改本表。 -基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 263 项,范围 22 个包及工作区/示例。 +基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 264 项,范围 22 个包及工作区/示例。 -状态:todo 44 / doing 22 / blocked 0 / done 197 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 +状态:todo 44 / doing 22 / blocked 0 / done 198 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。 @@ -14,7 +14,7 @@ | 包 | 基线版本 | 任务 | | --- | --- | --- | -| artplayer | 5.4.1 | CORE-01, CORE-02, CORE-03, CORE-04, CORE-05, CORE-06, CORE-07, CORE-08, CORE-09, CORE-10, CORE-11, CORE-12, CORE-13, CORE-14, CORE-15, CORE-16, CORE-17, CORE-18, CORE-19, CORE-20, CORE-21, CORE-23, CORE-22, CORE-24, SITE-BUILD-01, CORE-25, ENG-12, CORE-SUBTITLE-OFFSET-01, PKG-MULTI-SUB-09 | +| artplayer | 5.4.1 | CORE-01, CORE-02, CORE-03, CORE-04, CORE-05, CORE-06, CORE-07, CORE-08, CORE-09, CORE-10, CORE-11, CORE-12, CORE-13, CORE-14, CORE-15, CORE-16, CORE-17, CORE-18, CORE-19, CORE-20, CORE-21, CORE-23, CORE-22, CORE-24, SITE-BUILD-01, CORE-25, ENG-12, CORE-SUBTITLE-OFFSET-01, PKG-MULTI-SUB-09, ENG-LINT-02 | | artplayer-plugin-ads | 2.1.0 | PKG-ADS-01, PKG-ADS-02, PKG-ADS-03, PKG-ADS-04, PKG-ADS-05, PKG-ADS-06 | | artplayer-plugin-ambilight | 1.1.0 | PKG-AMBILIGHT-01, PKG-AMBILIGHT-02, PKG-AMBILIGHT-03, PKG-AMBILIGHT-04, PKG-AMBILIGHT-PROXY-01, PKG-AMBILIGHT-05, PKG-AMBILIGHT-06, PKG-FACTORY-01 | | artplayer-plugin-asr | 2.1.0 | PKG-ASR-01, PKG-ASR-02, PKG-ASR-03, PKG-ASR-04, PKG-ASR-05, PKG-ASR-06, PKG-ASR-07, PKG-ASR-08, PKG-ASR-09 | @@ -29,13 +29,13 @@ | artplayer-plugin-hls-control | 1.1.0 | PKG-HLS-01, PKG-HLS-02, PKG-HLS-03, PKG-HLS-04, PKG-HLS-SDK-01, PKG-HLS-05, PKG-HLS-06, PKG-HLS-PACK-01 | | artplayer-plugin-jassub | 1.1.0 | PKG-JASSUB-01, PKG-JASSUB-02, PKG-JASSUB-03, PKG-JASSUB-04, PKG-JASSUB-05, PKG-JASSUB-06, PKG-JASSUB-07, PKG-JASSUB-08, PKG-JASSUB-09, PKG-JASSUB-10 | | artplayer-plugin-multiple-subtitles | 1.2.0 | PKG-MULTI-SUB-01, PKG-MULTI-SUB-02, PKG-MULTI-SUB-03, PKG-MULTI-SUB-04, PKG-MULTI-SUB-07, PKG-MULTI-SUB-08, PKG-MULTI-SUB-05, PKG-MULTI-SUB-06, PKG-MULTI-SUB-09, PKG-MULTI-SUB-10, PKG-MULTI-SUB-11 | -| artplayer-plugin-vast | 1.2.0 | PKG-VAST-01, PKG-VAST-02, PKG-VAST-03, PKG-VAST-04, PKG-VAST-05, PKG-VAST-06, PKG-VAST-07 | +| artplayer-plugin-vast | 1.2.0 | PKG-VAST-01, PKG-VAST-02, PKG-VAST-03, PKG-VAST-04, PKG-VAST-05, PKG-VAST-06, PKG-VAST-07, ENG-LINT-02 | | artplayer-plugin-vtt-thumbnail | 1.1.0 | PKG-VTT-THUMB-01, PKG-VTT-THUMB-02, PKG-VTT-THUMB-03, PKG-VTT-THUMB-04, PKG-VTT-THUMB-05, PKG-VTT-THUMB-06 | | artplayer-proxy-canvas | 1.1.0 | PKG-AMBILIGHT-PROXY-01, PKG-CANVAS-01, PKG-CANVAS-02, PKG-CANVAS-03, PKG-CANVAS-04, PKG-CANVAS-05, PKG-CANVAS-06, PKG-FACTORY-01, PKG-CANVAS-SUBTITLE-01 | | 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 | -| 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-04, SITE-05, SITE-06, SITE-07, SITE-VCONSOLE-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-04, SITE-05, SITE-06, SITE-07, SITE-VCONSOLE-01, ENG-LINT-02 | ## 0 规划 @@ -435,7 +435,7 @@ | REL-04 | workspace
提前演练回退与主线修复同步 | REL-08, ENG-07 | 分包旧版本/tag/依赖回退方案与 master 差异 | 隔离包演练可回退,主线修复同步流程可执行;正式每批再核对其实际回退产物 | H | doing | | REL-05 | workspace
经授权发布候选并收集反馈 | REL-03, REL-04, REVIEW-03 | 候选 tag、完整产物 integrity、反馈与复现记录 | 实际发布授权/操作/版本可追溯;本计划不自动执行发布 | H | todo | | REL-06 | workspace
经授权分批正式发布 | REL-05 | 正式分包版本/tag/站点文档及兼容公告 | 候选验收通过,安装/浏览器复核和回退入口就绪;候选反馈修复须独立建任务并复验三轮受影响结论,正式内容与最终验证产物一致 | H | todo | -| REL-07 | workspace
关闭重构里程碑并维护后续队列 | REL-06, ENG-LINT-01 | 最终任务/设计/证据归档和维护指南 | 全范围任务有结论、无未解释兼容缺口;遗留项有明确后续责任 | L | todo | +| REL-07 | workspace
关闭重构里程碑并维护后续队列 | REL-06, ENG-LINT-01, ENG-LINT-02 | 最终任务/设计/证据归档和维护指南 | 全范围任务有结论、无未解释兼容缺口;遗留项有明确后续责任 | L | todo | ## 8.1 多轮复盘 @@ -463,6 +463,7 @@ | --- | --- | --- | --- | --- | --- | --- | | ENG-LINT-01 | artplayer-plugin-danmuku-mask, workspace
修复 Mask manifest 排序并恢复全仓 lint | PKG-MASK-04 | 仅调整 manifest 字段顺序,独立验证全仓只读 lint 与元数据语义不变 | 根 lint 通过;解析后的 manifest 深度相等;不改包版本、依赖或公开入口 | L | done | | ENG-13 | workspace
保证性能资源探针的最小观察时长 | ENG-08 | 性能页面按实测时钟补足既有350ms观察窗口,保留冻结基线和原校验门槛;时钟边界测试和实际安装包配对证据 | 349ms仍被拒绝;早到定时器补足观察、正常超时保留实际值;冻结计时样本逻辑未变,三浏览器实际350ms观察及资源校验通过 | M | done | +| ENG-LINT-02 | artplayer-plugin-vast, artplayer, artplayer-vitepress, workspace
修复 VAST 清单与生成声明的 lint 遗留 | PKG-VAST-04, SITE-02 | 仅整理 VAST 顶层元数据键顺序,并从声明生成源移除无效 lint 禁用项;保留入口与类型语义 | 全仓只读 lint 零错误零警告;VAST 元数据和嵌套条件键顺序不变;生成声明除注释外逐字一致,生成/只读检查通过 | L | done | ## 5 包组合:Danmuku / Mask @@ -691,3 +692,4 @@ - PKG-CANVAS-SUBTITLE-01: [记录](changes/2026-09-14-PKG-CANVAS-SUBTITLE-01-track.md) [记录](baselines/canvas-subtitles-validation.json) - PKG-DANMUKU-MASK-LOAD-01: [记录](changes/2026-09-14-PKG-DANMUKU-08-combined-load.md) [记录](baselines/danmuku-combined-load-validation.json) [记录](changes/2026-09-14-PKG-DANMUKU-MASK-LOAD-01-scheduling.md) [记录](baselines/danmuku-mask-load-validation.json) - PKG-HLS-PACK-01: [记录](changes/2026-09-15-PKG-HLS-PACK-01-config.md) [记录](baselines/hls-pack-config-validation.json) +- ENG-LINT-02: [记录](changes/2026-09-15-ENG-LINT-02-clean-checks.md) [记录](baselines/eng-lint02-validation.json) diff --git a/refactor/progress.md b/refactor/progress.md index a7af8b0a6..3aa759aea 100644 --- a/refactor/progress.md +++ b/refactor/progress.md @@ -1,5 +1,12 @@ # 进度与证据 +## ENG-LINT-02 全仓 lint 零错误、零警告 + +修正 VAST 顶层清单顺序,从生成源去掉无效 lint 禁用项并重新生成。元数据值与 +嵌套条件顺序不变,声明只改注释;24 个输出经过两版 TS 校验及只读复核,根 lint +零错误/警告。见[记录](changes/2026-09-15-ENG-LINT-02-clean-checks.md)。 +本修复单独完成:198/264 项;SITE-07 继续 console.js 来源与剩余站点资产工作。 + ## SITE-07 vConsole 精确重建与完整通知 固定源码/锁文件重建与 npm 3.15.0 逐字节一致;补齐 MIT 正文、署名及九个运行时 diff --git a/refactor/tasks.json b/refactor/tasks.json index 35ba65e6f..3928c3c4f 100644 --- a/refactor/tasks.json +++ b/refactor/tasks.json @@ -4952,7 +4952,8 @@ ], "dependsOn": [ "REL-06", - "ENG-LINT-01" + "ENG-LINT-01", + "ENG-LINT-02" ], "status": "todo", "risk": "L", @@ -5571,6 +5572,29 @@ "changes/2026-09-15-PKG-HLS-PACK-01-config.md", "baselines/hls-pack-config-validation.json" ] + }, + { + "id": "ENG-LINT-02", + "phase": "2 工程基础", + "title": "修复 VAST 清单与生成声明的 lint 遗留", + "scope": [ + "artplayer-plugin-vast", + "artplayer", + "artplayer-vitepress", + "workspace" + ], + "dependsOn": [ + "PKG-VAST-04", + "SITE-02" + ], + "status": "done", + "risk": "L", + "deliverable": "仅整理 VAST 顶层元数据键顺序,并从声明生成源移除无效 lint 禁用项;保留入口与类型语义", + "acceptance": "全仓只读 lint 零错误零警告;VAST 元数据和嵌套条件键顺序不变;生成声明除注释外逐字一致,生成/只读检查通过", + "evidence": [ + "changes/2026-09-15-ENG-LINT-02-clean-checks.md", + "baselines/eng-lint02-validation.json" + ] } ] } diff --git a/scripts/editor-declarations/README.md b/scripts/editor-declarations/README.md index 3af6eadab..5000f6ac6 100644 --- a/scripts/editor-declarations/README.md +++ b/scripts/editor-declarations/README.md @@ -21,6 +21,9 @@ without writing. Unknown/duplicate selections fail before generating or writing. Orchestration depends on conversion and validation; conversion does not write. Public package declarations remain the source of truth. Do not hand-edit `docs/assets/ts/*.d.ts`. +The core header suppresses only `ts/no-redeclare` for its global constructor/type +merge. Ambient namespaces are already allowed; adding `ts/no-namespace` there +creates an unused-disable warning in the generated output. The editor URL list is generated in `packages/artplayer-vitepress/browser/editor-libraries.ts`, then imported by the diff --git a/scripts/editor-declarations/core.ts b/scripts/editor-declarations/core.ts index b46896468..1e3a472a6 100644 --- a/scripts/editor-declarations/core.ts +++ b/scripts/editor-declarations/core.ts @@ -69,7 +69,7 @@ export function asGlobalDeclaration(code: string, globalName: string) { factory.createNamespaceExportDeclaration(factory.createIdentifier(globalName)), ] const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed }) - return `// Generated from packages/artplayer/public/artplayer.ts by yarn build:ts. Do not edit.\n/* eslint-disable ts/no-redeclare, ts/no-namespace -- UMD constructor and named types share the global export. */\n${printer.printFile(factory.updateSourceFile(source, statements))}` + return `// Generated from packages/artplayer/public/artplayer.ts by yarn build:ts. Do not edit.\n/* eslint-disable ts/no-redeclare -- UMD constructor and named types share the global export. */\n${printer.printFile(factory.updateSourceFile(source, statements))}` } export function generateCoreEditorDeclaration() {