【拆解】控制台标识改 Kratos Yang + readme 重写为功能说明 #34

Closed
opened 2026-10-28 09:57:58 +00:00 by laoyang · 3 comments
Owner

用户一次性提了三件事,拆解如下。

拆成两件独立可验收的事

  1. 前端控制台标识 —— Kratos v3.1.8 硬编码,要改成 Kratos Yang + 当前版本号。可单独验收(看控制台输出)。
  2. readme 整体重写 —— 从 57 节版本日志改为功能介绍与用法。可单独验收(看页面内容)。

第三件不建单

控制台那条 hm.js [Violation] Permissions policy violation: unload 来自百度统计的第三方脚本,主题代码无法干预,线上也没有 Permissions-Policy 响应头。只作说明,不单独立项。

用户原话要点

  • 「Kratos v3.1.8,这个是哪里打印出来的,应该换成:Kratos Yang,然后加上当前的版本号。如果修改太麻烦,就直接把这个删除。」
  • 「readme需要全部重写。主要介绍功能,用法等,不要写什么更新机制啥的。」

关于第 1 件:改起来不麻烦(版本号在 PHP 侧已有 THEME_VERSION),所以按"换成 Kratos Yang + 版本号"做,不删除。

用户一次性提了三件事,拆解如下。 ## 拆成两件独立可验收的事 1. **前端控制台标识** —— `Kratos v3.1.8` 硬编码,要改成 `Kratos Yang` + 当前版本号。可单独验收(看控制台输出)。 2. **readme 整体重写** —— 从 57 节版本日志改为功能介绍与用法。可单独验收(看页面内容)。 ## 第三件不建单 控制台那条 `hm.js [Violation] Permissions policy violation: unload` 来自**百度统计的第三方脚本**,主题代码无法干预,线上也没有 `Permissions-Policy` 响应头。只作说明,不单独立项。 ## 用户原话要点 - 「Kratos v3.1.8,这个是哪里打印出来的,应该换成:Kratos Yang,然后加上当前的版本号。如果修改太麻烦,就直接把这个删除。」 - 「readme需要全部重写。主要介绍功能,用法等,不要写什么更新机制啥的。」 关于第 1 件:改起来不麻烦(版本号在 PHP 侧已有 `THEME_VERSION`),所以按"换成 Kratos Yang + 版本号"做,不删除。
Author
Owner

4.2.0 交付汇总

本次拆成两张子单,均已完成并部署:

单号 内容 状态
#35 控制台标识 Kratos v3.1.8 → Kratos Yang v4.2.0 已交付
#36 readme.html 整体重写(57 节版本日志 → 17 节功能与用法) 已交付

关于第三条「hm.js 的 Permissions policy violation」

同一段粘贴里还有一条:

hm.js?192a62f2ae923a591128f92554cc80e0:2 [Violation]
Permissions policy violation: unload is not allowed in this document.

查证结论:不是主题的问题,本次不改,也不建单。

三步确认:

  1. curl -I https://yangyq.net/ —— 响应里没有 Permissions-Policy 响应头,所以不是我们发的策略。
  2. 仓库全量搜 Permissions-Policy|feature-policy|unload —— 只有 jQuery 内部的字符串命中。
  3. hm.js 是百度统计的脚本(hm.baidu.com),它自己注册了 unload 事件监听。

Chrome 正在按计划收掉 unload 事件,对第三方脚本上的 unload 监听会报这条 Violation。主题既没有能力也没有必要去改别人的脚本。

发布信息

  • 版本:4.2.0
  • 包:kratos_yang-4.2.0.zip,4.64 MB,md5 044493c31e7ea14850de7adbb6520e51
  • 位置:站点根 theme-update/(不是主题目录下)
  • update.json 已指向 4.2.0,PUC 实测 INSTALLED=4.1.1 / NEW=4.2.0 / HAS_UPDATE=YES
  • 提交:c058ecc(带 #35),已推送 main

判据总览

层 脚本 结果
#35 正向 _console421_check.py 23 / 0
#35 反证 _console421_falsify.py 6/6
#35 反证的反证 _console421_meta_falsify.py 5/5
#36 正向 _readme421_check.py 24 / 0(旧版 17/7,有区分力)
#36 反证 _readme421_falsify.py 7/7
#36 反证的反证 _readme421_meta_falsify.py 4/4
PHP 语法 php -l 全量 98 文件 / 0 失败
打包自检 _mkzip420.py 40 / 0
线上运行时 _live_console_check.js 10 / 0
## 4.2.0 交付汇总 本次拆成两张子单,均已完成并部署: | 单号 | 内容 | 状态 | |---|---|---| | #35 | 控制台标识 `Kratos v3.1.8` → `Kratos Yang v4.2.0` | 已交付 | | #36 | `readme.html` 整体重写(57 节版本日志 → 17 节功能与用法) | 已交付 | ### 关于第三条「hm.js 的 Permissions policy violation」 同一段粘贴里还有一条: ``` hm.js?192a62f2ae923a591128f92554cc80e0:2 [Violation] Permissions policy violation: unload is not allowed in this document. ``` 查证结论:**不是主题的问题,本次不改,也不建单。** 三步确认: 1. `curl -I https://yangyq.net/` —— 响应里**没有** `Permissions-Policy` 响应头,所以不是我们发的策略。 2. 仓库全量搜 `Permissions-Policy|feature-policy|unload` —— 只有 jQuery 内部的字符串命中。 3. `hm.js` 是**百度统计**的脚本(`hm.baidu.com`),它自己注册了 `unload` 事件监听。 Chrome 正在按计划收掉 `unload` 事件,对第三方脚本上的 `unload` 监听会报这条 Violation。主题既没有能力也没有必要去改别人的脚本。 ### 发布信息 - 版本:`4.2.0` - 包:`kratos_yang-4.2.0.zip`,4.64 MB,md5 `044493c31e7ea14850de7adbb6520e51` - 位置:站点根 `theme-update/`(**不是**主题目录下) - `update.json` 已指向 4.2.0,PUC 实测 `INSTALLED=4.1.1 / NEW=4.2.0 / HAS_UPDATE=YES` - 提交:`c058ecc`(带 `#35`),已推送 main ### 判据总览 | 层 | 脚本 | 结果 | |---|---|---| | #35 正向 | `_console421_check.py` | 23 / 0 | | #35 反证 | `_console421_falsify.py` | 6/6 | | #35 反证的反证 | `_console421_meta_falsify.py` | 5/5 | | #36 正向 | `_readme421_check.py` | 24 / 0(旧版 17/7,有区分力) | | #36 反证 | `_readme421_falsify.py` | 7/7 | | #36 反证的反证 | `_readme421_meta_falsify.py` | 4/4 | | PHP 语法 | `php -l` 全量 | 98 文件 / 0 失败 | | 打包自检 | `_mkzip420.py` | 40 / 0 | | 线上运行时 | `_live_console_check.js` | 10 / 0 |
Author
Owner

4.2.0 升级后验收(用户已在后台点升级)

线上终态

theme/style.css        Version: 4.2.0
theme 文件数           239(与包内一致,无丢失)
assets/js/kratos.min.js  Kratos Yang(旧串 Kratos v3 已清零)
inc/theme-core.php:103   'version' => THEME_VERSION
PUC  INSTALLED=4.2.0 / getUpdate()=null(不再提示更新)
transient update_themes  空
theme-update/ ACL        user:theme:rwx + default:user:theme:rwx(升级后**未失效**)
主题目录属主             www:www(升级后自动归还,符合预期)

用户控制台实测(#35 的最终验收)

kratos.min.js?ver=4.2.0:1   Kratos Yang v4.2.0
https://code.yangyq.net/laoyang/wordpress-kratos-yang

✅ 用户报的 Kratos v3.1.8 已消失,改为 Kratos Yang v4.2.0。
✅ 版本号来自 style.css 单一真源,注入链路 style.css → THEME_VERSION → wp_localize_script → window.kratos.version → console.log 全通。

readme 线上验收(#36)

HTTP 200 / 18548 字节
逐版标题 <b>V[0-9]                    0 个
更新机制词(update.json/md5/PUC)        0 个
章节数(一、二、…)                    17 节
Markdown 星号残留                      0 个
script/link/iframe/img 标签            0 个

关于新出现的那条 ViewTransition 报错 —— 已彻查,不是主题问题

(index):1 Uncaught (in promise) InvalidStateError: Transition was aborted
because of invalid state. ViewTransition opt-in disabled

结论:不改代码。

证据一:本次改动不涉及

git diff HEAD~1 只有 4 文件 28 行(kratos.js 删副本、min.js 同步一句 console.log、
theme-core.php 加 $data['version']、style.css 升版本)。零 CSS 动画、零页面过渡。

证据二:主题与插件里没有 View Transition 代码

服务器本地全量 grep(不是公网抓 —— cdn.yangyq.net 有防盗链,curl 一律 403,
拿 403 的空响应去 grep 会得出"0 命中"的假结论,这个坑我先踩了一次):

grep -rl "startViewTransition"  themes/kratos_yang/ plugins/  → 0 个
grep -rl "@view-transition"     ...                          → 0 个
grep -rl "view-transition-name" ...                          → 1 个
     assets/hljs/highlight.min.js   ← highlight.js 的 CSS 属性名词表,是字符串数组不是 API 调用

证据三:报错位置在主题脚本之前

用户日志顺序是 (index):1 在前、kratos.min.js:1 在后。
(index) = 文档本身(内联脚本 / 浏览器内部),不是外部 js。
而 kratos.min.js 由 wp_footer 输出,且 theme_autoload() 整包在 if (!is_admin()) 内
—— 所以后台根本不加载主题脚本,这条错误时序上不可能由主题产生。

为什么会突然出现:不是升级引起的,是 Chrome 153+(用户本机 156.0.8078.48) 变了行为。
Blink 在 dom_view_transition.cc 里给这条消息加了 reason 后缀:

Chrome 消息
≤152 Transition was aborted because of invalid state
153+ ... invalid state. **ViewTransition opt-in disabled**

React 官方踩了同一个坑(react#37669):他们按消息精确相等来吞这条错误,
Chrome 153 加后缀后匹配失效,生产环境从 0 涨到每周约 240 次。结论相同:这是浏览器行为变更。

这条错误的语义:跨文档 View Transition 要求两页都 opt-in
(@view-transition { navigation: auto })。本站两页都没 opt-in(WP 7.1.3 核心也没注入),
所以只要有任何脚本在导航时尝试 transition 并挂了 .ready handler,就会打出这行。
它不影响功能、渲染、SEO。

复现尝试:四个场景全部无异常(用户真实 Chrome 156 做对照)

场景 结果
首页加载 + 滚动到底 + 悬停链接触发 prefetch 无异常
站内连续导航 4 次 无异常
从 example.com 导航进入 无异常
两页强制加 opt-in 后导航(对照组) 无异常

为什么不"顺手修掉":在主题里加 @view-transition { navigation: auto }
等于主动开启跨文档过渡动画 —— 这是功能变更不是修 bug,而且本站是固定侧栏 + 主内容区结构,
页面过渡极易出现元素跳动,风险大于收益。要真正消掉它得删掉"正在尝试 transition"的那行代码,
而那行不在我们仓库里。

同一条粘贴里的 hm.js 警告(百度统计 unload)同理,见上一条评论。

## 4.2.0 升级后验收(用户已在后台点升级) ### 线上终态 ``` theme/style.css Version: 4.2.0 theme 文件数 239(与包内一致,无丢失) assets/js/kratos.min.js Kratos Yang(旧串 Kratos v3 已清零) inc/theme-core.php:103 'version' => THEME_VERSION PUC INSTALLED=4.2.0 / getUpdate()=null(不再提示更新) transient update_themes 空 theme-update/ ACL user:theme:rwx + default:user:theme:rwx(升级后**未失效**) 主题目录属主 www:www(升级后自动归还,符合预期) ``` ### 用户控制台实测(#35 的最终验收) ``` kratos.min.js?ver=4.2.0:1 Kratos Yang v4.2.0 https://code.yangyq.net/laoyang/wordpress-kratos-yang ``` ✅ 用户报的 `Kratos v3.1.8` 已消失,改为 `Kratos Yang v4.2.0`。 ✅ 版本号来自 `style.css` 单一真源,注入链路 `style.css → THEME_VERSION → wp_localize_script → window.kratos.version → console.log` 全通。 ### readme 线上验收(#36) ``` HTTP 200 / 18548 字节 逐版标题 <b>V[0-9] 0 个 更新机制词(update.json/md5/PUC) 0 个 章节数(一、二、…) 17 节 Markdown 星号残留 0 个 script/link/iframe/img 标签 0 个 ``` ### 关于新出现的那条 ViewTransition 报错 —— 已彻查,不是主题问题 ``` (index):1 Uncaught (in promise) InvalidStateError: Transition was aborted because of invalid state. ViewTransition opt-in disabled ``` **结论:不改代码。** **证据一:本次改动不涉及** `git diff HEAD~1` 只有 4 文件 28 行(kratos.js 删副本、min.js 同步一句 console.log、 theme-core.php 加 `$data['version']`、style.css 升版本)。零 CSS 动画、零页面过渡。 **证据二:主题与插件里没有 View Transition 代码** 服务器本地全量 grep(**不是**公网抓 —— `cdn.yangyq.net` 有防盗链,curl 一律 403, 拿 403 的空响应去 grep 会得出"0 命中"的假结论,这个坑我先踩了一次): ``` grep -rl "startViewTransition" themes/kratos_yang/ plugins/ → 0 个 grep -rl "@view-transition" ... → 0 个 grep -rl "view-transition-name" ... → 1 个 assets/hljs/highlight.min.js ← highlight.js 的 CSS 属性名词表,是字符串数组不是 API 调用 ``` **证据三:报错位置在主题脚本之前** 用户日志顺序是 `(index):1` 在前、`kratos.min.js:1` 在后。 `(index)` = 文档本身(内联脚本 / 浏览器内部),不是外部 js。 而 `kratos.min.js` 由 `wp_footer` 输出,且 `theme_autoload()` 整包在 `if (!is_admin())` 内 —— 所以后台根本不加载主题脚本,这条错误时序上不可能由主题产生。 **为什么会突然出现**:不是升级引起的,是 **Chrome 153+(用户本机 156.0.8078.48)** 变了行为。 Blink 在 `dom_view_transition.cc` 里给这条消息加了 reason 后缀: | Chrome | 消息 | |---|---| | ≤152 | `Transition was aborted because of invalid state` | | 153+ | `... invalid state. **ViewTransition opt-in disabled**` | React 官方踩了同一个坑(react#37669):他们按消息**精确相等**来吞这条错误, Chrome 153 加后缀后匹配失效,生产环境从 0 涨到每周约 240 次。结论相同:这是浏览器行为变更。 **这条错误的语义**:跨文档 View Transition 要求**两页都 opt-in** (`@view-transition { navigation: auto }`)。本站两页都没 opt-in(WP 7.1.3 核心也没注入), 所以只要有任何脚本在导航时尝试 transition 并挂了 `.ready` handler,就会打出这行。 它不影响功能、渲染、SEO。 **复现尝试:四个场景全部无异常**(用户真实 Chrome 156 做对照) | 场景 | 结果 | |---|---| | 首页加载 + 滚动到底 + 悬停链接触发 prefetch | 无异常 | | 站内连续导航 4 次 | 无异常 | | 从 example.com 导航进入 | 无异常 | | 两页强制加 opt-in 后导航(对照组) | 无异常 | **为什么不"顺手修掉"**:在主题里加 `@view-transition { navigation: auto }` 等于**主动开启**跨文档过渡动画 —— 这是功能变更不是修 bug,而且本站是固定侧栏 + 主内容区结构, 页面过渡极易出现元素跳动,风险大于收益。要真正消掉它得删掉"正在尝试 transition"的那行代码, 而那行不在我们仓库里。 同一条粘贴里的 hm.js 警告(百度统计 unload)同理,见上一条评论。
Author
Owner

主单收尾

两张子单均已交付、上线、用户实测通过:

单号 内容 状态
#35 控制台 Kratos v3.1.8 → Kratos Yang v4.2.0 ✅ 已关闭
#36 readme.html 57 节版本日志 → 17 节功能与用法 ✅ 已关闭

用户升级后控制台实测:

kratos.min.js?ver=4.2.0:1   Kratos Yang v4.2.0
https://code.yangyq.net/laoyang/wordpress-kratos-yang

交付物

  • 版本 4.2.0,包 kratos_yang-4.2.0.zip(4.64MB,md5 044493c31e7ea14850de7adbb6520e51)
  • 提交 c058ecc,已推 main
  • update.json 指向 4.2.0;升级后 PUC getUpdate()=null,不再提示更新
  • theme-update/ ACL 升级后未失效(user:theme:rwx + default ACL 都在),无需重设

两条控制台噪音的归属(都不改)

报错 归属 处理
hm.js [Violation] Permissions policy violation: unload 百度统计第三方脚本;线上无 Permissions-Policy 响应头 不改,主题无法干预
(index):1 InvalidStateError ... ViewTransition opt-in disabled Chrome 153+ 行为变更(消息加了 reason 后缀);主题/插件里 startViewTransition 与 @view-transition 均为 0 处 不改,详见上一条评论

第二条尤其值得记一笔:本机 Chrome 是 156.0.8078.48,Chrome 153(2026-09-08 stable)起
Blink 给这条消息加了 reason 后缀,导致所有按精确字符串相等来吞这条错误的框架/脚本
(React 官方 react#37669 就是)突然吞不住了。不是升级引起的,是浏览器改了措辞。

四个场景(首页+滚动+prefetch、站内导航 4 次、跨站进入、强制 opt-in 对照)用真实 Chrome 156
全部无法复现,进一步说明它取决于用户在特定时刻的导航状态,而非页面内容。

关闭主单。

## 主单收尾 两张子单均已交付、上线、用户实测通过: | 单号 | 内容 | 状态 | |---|---|---| | #35 | 控制台 `Kratos v3.1.8` → `Kratos Yang v4.2.0` | ✅ 已关闭 | | #36 | `readme.html` 57 节版本日志 → 17 节功能与用法 | ✅ 已关闭 | 用户升级后控制台实测: ``` kratos.min.js?ver=4.2.0:1 Kratos Yang v4.2.0 https://code.yangyq.net/laoyang/wordpress-kratos-yang ``` ### 交付物 - 版本 `4.2.0`,包 `kratos_yang-4.2.0.zip`(4.64MB,md5 `044493c31e7ea14850de7adbb6520e51`) - 提交 `c058ecc`,已推 main - `update.json` 指向 4.2.0;升级后 PUC `getUpdate()=null`,不再提示更新 - `theme-update/` ACL 升级后**未失效**(`user:theme:rwx` + default ACL 都在),无需重设 ### 两条控制台噪音的归属(都不改) | 报错 | 归属 | 处理 | |---|---|---| | `hm.js [Violation] Permissions policy violation: unload` | 百度统计第三方脚本;线上无 `Permissions-Policy` 响应头 | 不改,主题无法干预 | | `(index):1 InvalidStateError ... ViewTransition opt-in disabled` | Chrome 153+ 行为变更(消息加了 reason 后缀);主题/插件里 `startViewTransition` 与 `@view-transition` 均为 0 处 | 不改,详见上一条评论 | 第二条尤其值得记一笔:本机 Chrome 是 156.0.8078.48,Chrome 153(2026-09-08 stable)起 Blink 给这条消息加了 reason 后缀,导致所有按**精确字符串相等**来吞这条错误的框架/脚本 (React 官方 react#37669 就是)突然吞不住了。不是升级引起的,是浏览器改了措辞。 四个场景(首页+滚动+prefetch、站内导航 4 次、跨站进入、强制 opt-in 对照)用真实 Chrome 156 全部无法复现,进一步说明它取决于用户在特定时刻的导航状态,而非页面内容。 关闭主单。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: laoyang/wordpress-kratos-yang#34