用户要求「readme 需要全部重写。主要介绍功能,用法等,不要写什么更新机制啥的」。
我在 #36 里理解错了对象 —— 改成了线上后台详情页那份 readme.html (details_url 指向的),而用户指的是代码库根目录的 README.md。 本单是纠正后的真实需求。
readme.html
details_url
README.md
读完 128 行原文,问题不只是"写了更新机制",还有好几处说法已经和代码不符:
# 主题自动更新
## 发布新版本的顺序
## 换域名 / 退役旧域名
## ⚠️ 自动升级会覆盖主题目录
逐条对着代码核过:
关于主题
inc/theme-dogecloud.php
g_cos
版权信息
g_flag
index.php:41
single.php:122
dynamic_sidebar('sidebar_tool')
yang_hot_posts()
七条里只有三条半还成立。 而且这种"相对上游做了啥"的写法本身就不可持续。
原文:「这些代码库都和源库保持一致和同步,在任何平台上关注都可以。」
实测各镜像 style.css 的 Version::
style.css
Version:
源库 code.yangyq.net 4.2.0 ✅ gitlab.com/dryangyq 3.2.0 ❌ 落后 124 个小版本 raw.githubusercontent 取不到(需鉴权/路径不同) gitee 取不到 code.aliyun.com 已停服(HTTP 000)
⇒ 阿里云 Code 那条是死链(平台早已下线);"保持一致和同步"不成立。
主题现有 24 个 inc 模块、后台 16 个设置分组、2 个短代码、4 个自建挂件, README 一条都没介绍。新人打开仓库页看不到这主题能干什么。
以功能介绍 + 用法为主体重写 README.md:
update.json
download_url
md5
PUC
theme-update
[TOC]
[Archives]
[0-9]+\.[0-9]+\.[0-9]+
details_url 指向的线上 readme.html 我已改成 17 节功能说明(#36 已关)。 用户表示没要过它。待用户定:保留 / 回滚成旧的 57 节日志(旧版备份在 readme.html.keep-202610281821*)。
readme.html.keep-202610281821*
#33 是百度统计面板(后台功能开发),本单是仓库 README.md 文档重写,两者可独立验收、无代码交集。且本单是对 #36 对象理解错误的纠正:#36 改的是线上 details_url 指向的 readme.html,用户真正要的是代码库根目录 README.md。
ba12451
README.md 从 127 行「fork 说明 + 相对上游改了啥 + 发布流程」重写成 499 行「功能与用法」。
正文「二、七条已严重过期」里我把 「移动端增加侧边栏……在文章页面仍然没有侧边栏」列为 ❌ 已证伪。
那个判断是我自己错的。 我当时只 grep 了 PHP 里有没有 dynamic_sidebar(), 看到 single.php:122 有,就下结论说旧 README 过期了。实际真相是两层:
dynamic_sidebar()
single.php:121
d-none d-lg-block
index.php:40
d-lg-block
所以「移动端只有首页有侧栏、文章页没有」到今天依然成立,旧 README 那条没错。
而且我还漏了一层:文章页侧栏另受「文章配置 → 页面布局」g_article_widgets 控制,选单栏时整段 HTML 直接不输出。
g_article_widgets
⇒ 新 README 按实况写清了这两层,没有把它当成过期说法删掉。 这条错判记进 pitfalls:只看代码里"有没有输出"就断言旧文档过期, 不看控制可见性的 class 与条件 —— 会把正确的旧文档改错。
widget_posts
pages/
Template Name
get_template_part()
require
「主要修改的地方」七条整段删除——逐条核完只有三条半成立,而且"相对上游做了啥"这种写法本身不可持续。
主题自动更新 / update.json 格式 / 发布新版本的顺序 / 自动升级会覆盖主题目录 / 换域名·退役旧域名 五章删除。判据实测这些词 0 次。
主题自动更新
update.json 格式
发布新版本的顺序
自动升级会覆盖主题目录
换域名·退役旧域名
顺带查清一件事:PUC 的 details_url 是必填字段(Theme/Update.php:63 $required = array('version','details_url'))。用户点「查看版本详情」弹出的是 远程那份,不是包内 README.md。所以 #36 那份 readme.html 不是多余的东西, 它撑起了那个按钮。
Theme/Update.php:63
$required = array('version','details_url')
真实键名 + 真实默认值(读 std)+ 几处方向容易记反的开关:
std
g_gutenberg
toc_float
a_highlight_line_numbers
g_animate
g_gravatar
a_lightbox_enable
a_highlight_enable
stat_track_enable
toc_inline
g_thumbnail
另外纠正了两处流传的误解:
cn.gravatar.com
gravatar.loli.net
#35 刚立了「版本号只留一份真源」,README 再抄一份 4.2.0 等于自打脸。 改成指向 style.css 的 Version:。判据里有一条专门盯这个,注入 4.2.0 会变红。
4.2.0
_readme37_check.py
_readme37_falsify.py
_readme37_meta.py
README 里全部 7 个外链逐个 curl 验证可达(上游我原本写的 kratos.design 连不通,已改成实测 200 的 github.com/seatonjiang/kratos)。
curl
kratos.design
github.com/seatonjiang/kratos
三处根因同一个:判「某个词出现过」冒充「判结构」。
[TOC ... toggle="0" ...]
^\| \
'20 套' in src
### 三、顶部导航
####
b-a>1
同时删掉两条我自己写的恒真判据(... or True、if False else)—— 恒真的判据等于没有判据,还长得像验证过了。
... or True
if False else
反证脚本崩溃时把注入留在了 README 里,而我没发现:
finally
TypeError: not enough arguments for format string
write(注入版)
write(ORIG)
ORIG = open(README).read()
rc=1
⇒ 现在反证脚本的还原在 finally 里,且结尾硬断言「文件字节级回到起点」 +「判据仍全绿」,两者任一不成立就非零退出。meta 里也加了结构检查盯这件事。
另外两个小坑:反证脚本硬编码 TOTAL = 14 而实际只有 13 组, 输出「注入 14 组,抓到 14」看着完美、其实是虚报; meta 脚本里用字面量匹配含反斜杠的锚点,多写一层就 0 命中, 而 0 命中会让那组"看起来跑过了"——改成按行前缀定位整行。
TOTAL = 14
README.md 在发布包内(4.2.0 的包里是旧版)。但这是纯文档改动, 重新发版会逼所有装了 4.2.0 的站点强制升级一次,只为换个 README—— 不值当,下次有代码改动时自然带上。线上主题目录里那份旧 README 不影响任何功能 (「查看版本详情」走的是远程 details_url,见上)。
工单先不关,等用户看过 README 内容确认。
三层判据已归位到 _tooling/yang_theme_test/(_readme37_check.py / _readme37_falsify.py / _readme37_meta.py)。
_tooling/yang_theme_test/
归位后第一次复跑,正向判据从 45/0 变成 44/1,红的是双向对照那条:
[FAIL] 旧 README 至少被判出 5 条问题(实测 0)
不是 README 出了问题,是判据自己把参照物绑在了会移动的东西上: 原来写 git show HEAD:README.md 取"旧版靶子"。 我一提交 ba12451,HEAD 就变成新版了 ⇒ 拿新版当旧版对照,必然"命中 0 条"。
git show HEAD:README.md
这条判据从"有区分力"当场变成恒红,而且红得像是"真抓到了问题" —— 踩的是 pitfalls #433(判据恒红比恒绿危险)。
修法:参照物钉死,不指向任何会被我自己的提交改动的东西。
BASELINE_OLD = .../_readme37_baseline_old.md # 重写前的旧版,从 ba12451^ 导出后固定存放 def old_text(): if os.path.isfile(BASELINE_OLD): return io.open(BASELINE_OLD).read() return git show ba12451^:README.md # 退回也按固定 commit,不跟 HEAD 走
改后从 _tooling 复跑:45/0,旧版命中 15 条,反证 13/13,meta 10/10 全绿。
_tooling
⇒ 通用一条:任何"和上一版对比"的判据,靶子必须是钉死的快照或固定 commit, 绝不能用 HEAD / 当前工作树——否则判据的命运取决于我什么时候提交。
用户确认可以关闭。
交付内容:README.md 从 127 行(fork 说明 + 相对上游改了啥 + 发布流程)重写为 499 行功能与用法说明,commit ba12451 已推 main。
更新机制五章按要求删除;旧的「主要修改」七条逐条核对,只有三条半成立,整段废弃;实测纠正了「最新文章优先」(实为热点文章)、「各库保持同步」(gitlab 镜像停在 3.2.0)、阿里云 Code 死链三处过期说法。主体是后台 16 个分组逐项对照代码写的真实键名与默认值。版本号不写死,指向 style.css。
判据三层:正向 45/0(同一套跑旧 README 命中 15 条,有区分力)· 反证 13/13 · 反证的反证 10/10。
遗留项由 #38 接手(自动标签算法效果不佳)。线上 readme.html 是否回滚待用户另行决定。
No dependencies set.
The note is not visible to the blocked user.
现象
用户要求「readme 需要全部重写。主要介绍功能,用法等,不要写什么更新机制啥的」。
我在 #36 里理解错了对象 —— 改成了线上后台详情页那份
readme.html(
details_url指向的),而用户指的是代码库根目录的README.md。本单是纠正后的真实需求。
当前 README.md 的问题
读完 128 行原文,问题不只是"写了更新机制",还有好几处说法已经和代码不符:
一、整章内容是发布流程,不该出现在面向使用者的文档里
# 主题自动更新(update.json 格式、发布目录)## 发布新版本的顺序(打包 → 传 zip → 改 update.json)## 换域名 / 退役旧域名## ⚠️ 自动升级会覆盖主题目录(WP 升级机制原理)二、"主要修改的地方"七条已严重过期
逐条对着代码核过:
关于主题全库 0 处)inc/theme-dogecloud.php还在被 require(靠g_cos恒假变死代码)版权信息仍在(页脚版权,另一回事)g_flag)index.php:41和single.php:122都有dynamic_sidebar('sidebar_tool')yang_hot_posts()七条里只有三条半还成立。 而且这种"相对上游做了啥"的写法本身就不可持续。
三、"代码同步"那句是假的(实测)
原文:「这些代码库都和源库保持一致和同步,在任何平台上关注都可以。」
实测各镜像
style.css的Version::⇒ 阿里云 Code 那条是死链(平台早已下线);"保持一致和同步"不成立。
四、缺失
主题现有 24 个 inc 模块、后台 16 个设置分组、2 个短代码、4 个自建挂件,
README 一条都没介绍。新人打开仓库页看不到这主题能干什么。
要求
以功能介绍 + 用法为主体重写
README.md:后台 16 个分组都有什么、已知冲突与注意事项。
README 再写死 4.2.0 等于自打脸)—— 指向
style.css头部。验收标准
update.json/download_url/md5/PUC/theme-update/ 打包发布顺序。[TOC]与[Archives]两个短代码的用法与实际参数一致。「各库保持一致和同步」。
[0-9]+\.[0-9]+\.[0-9]+出现次数 ≤ 1,且只允许在"见 style.css"这类指引语境)。关于 #36 那份 readme.html
details_url指向的线上readme.html我已改成 17 节功能说明(#36 已关)。用户表示没要过它。待用户定:保留 / 回滚成旧的 57 节日志(旧版备份在
readme.html.keep-202610281821*)。为什么单独建单
#33 是百度统计面板(后台功能开发),本单是仓库 README.md 文档重写,两者可独立验收、无代码交集。且本单是对 #36 对象理解错误的纠正:#36 改的是线上 details_url 指向的 readme.html,用户真正要的是代码库根目录 README.md。
已交付(commit
ba12451,已推 main)README.md从 127 行「fork 说明 + 相对上游改了啥 + 发布流程」重写成 499 行「功能与用法」。关于我在这个单子的正文里写错的一条(必须先纠正)
正文「二、七条已严重过期」里我把
「移动端增加侧边栏……在文章页面仍然没有侧边栏」列为 ❌ 已证伪。
那个判断是我自己错的。 我当时只 grep 了 PHP 里有没有
dynamic_sidebar(),看到
single.php:122有,就下结论说旧 README 过期了。实际真相是两层:single.php:121侧栏容器的 class 是d-none d-lg-block⇒ 小屏(<992px)CSS 隐藏index.php:40是d-lg-block⇒ 小屏仍显示所以「移动端只有首页有侧栏、文章页没有」到今天依然成立,旧 README 那条没错。
而且我还漏了一层:文章页侧栏另受「文章配置 → 页面布局」
g_article_widgets控制,选单栏时整段 HTML 直接不输出。
⇒ 新 README 按实况写清了这两层,没有把它当成过期说法删掉。
这条错判记进 pitfalls:只看代码里"有没有输出"就断言旧文档过期,
不看控制可见性的 class 与条件 —— 会把正确的旧文档改错。
另外几处确实过期,已按代码改掉
widget_posts内部换成yang_hot_posts())style.css还是 3.2.0,源库 4.2.0pages/四个文件(原文未提,我差点写错)Template Name头,不是可选页面模板,而是get_template_part()/require引入的片段「主要修改的地方」七条整段删除——逐条核完只有三条半成立,而且"相对上游做了啥"这种写法本身不可持续。
更新机制:按要求全删
主题自动更新/update.json 格式/发布新版本的顺序/自动升级会覆盖主题目录/换域名·退役旧域名五章删除。判据实测这些词 0 次。顺带查清一件事:PUC 的
details_url是必填字段(Theme/Update.php:63$required = array('version','details_url'))。用户点「查看版本详情」弹出的是远程那份,不是包内 README.md。所以 #36 那份
readme.html不是多余的东西,它撑起了那个按钮。
新增主体:后台 16 个分组逐项对照代码
真实键名 + 真实默认值(读
std)+ 几处方向容易记反的开关:g_gutenberg默认关,勾选才是启用区块编辑器(不是"关掉 Gutenberg")toc_float、a_highlight_line_numbers、g_animate、g_gravatar默认关a_lightbox_enable、a_highlight_enable、stat_track_enable、toc_inline、g_thumbnail默认开另外纠正了两处流传的误解:
cn.gravatar.com(无条件),勾选后换成gravatar.loli.net。是"换哪个镜像"。(xorshift + hashSeed,逐步截断到 int32)以与 DiceBear 官方预览页逐字节一致。
版本号不写死
#35 刚立了「版本号只留一份真源」,README 再抄一份
4.2.0等于自打脸。改成指向
style.css的Version:。判据里有一条专门盯这个,注入4.2.0会变红。验证:判据三层
_readme37_check.py_readme37_falsify.py_readme37_meta.pyREADME 里全部 7 个外链逐个
curl验证可达(上游我原本写的kratos.design连不通,已改成实测 200 的github.com/seatonjiang/kratos)。写反证时暴露出判据自身三次「没牙齿」
三处根因同一个:判「某个词出现过」冒充「判结构」。
[TOC]参数表一行[TOC ... toggle="0" ...]自带所有参数名,窗口搜索恒命中^\| \toggle` \|` 表格那一行在不在'20 套' in src仍为真### 三、顶部导航降级####b-a>1,差 1 不算跳;反向 4→3 还合法同时删掉两条我自己写的恒真判据(
... or True、if False else)——恒真的判据等于没有判据,还长得像验证过了。
本轮最危险的一次事故(已进 pitfalls)
反证脚本崩溃时把注入留在了 README 里,而我没发现:
finally)。TypeError: not enough arguments for format string崩了—— 但
write(注入版)已经执行,write(ORIG)没执行。ORIG = open(README).read()读到的就是被污染的文件。后果不是"少跑一组"这么轻:
update.json/「打包」字样的污染版备份成了"全绿基线"它报了
rc=1,才追出污染。⇒ 现在反证脚本的还原在
finally里,且结尾硬断言「文件字节级回到起点」+「判据仍全绿」,两者任一不成立就非零退出。meta 里也加了结构检查盯这件事。
另外两个小坑:反证脚本硬编码
TOTAL = 14而实际只有 13 组,输出「注入 14 组,抓到 14」看着完美、其实是虚报;
meta 脚本里用字面量匹配含反斜杠的锚点,多写一层就 0 命中,
而 0 命中会让那组"看起来跑过了"——改成按行前缀定位整行。
部署决定:不重新发包
README.md 在发布包内(4.2.0 的包里是旧版)。但这是纯文档改动,
重新发版会逼所有装了 4.2.0 的站点强制升级一次,只为换个 README——
不值当,下次有代码改动时自然带上。线上主题目录里那份旧 README 不影响任何功能
(「查看版本详情」走的是远程
details_url,见上)。工单先不关,等用户看过 README 内容确认。
补充:判据脚本归位时发现「对照靶子」绑错了,顺手修掉
三层判据已归位到
_tooling/yang_theme_test/(_readme37_check.py/_readme37_falsify.py/_readme37_meta.py)。归位后第一次复跑,正向判据从 45/0 变成 44/1,红的是双向对照那条:
不是 README 出了问题,是判据自己把参照物绑在了会移动的东西上:
原来写
git show HEAD:README.md取"旧版靶子"。我一提交
ba12451,HEAD 就变成新版了 ⇒ 拿新版当旧版对照,必然"命中 0 条"。这条判据从"有区分力"当场变成恒红,而且红得像是"真抓到了问题" ——
踩的是 pitfalls #433(判据恒红比恒绿危险)。
修法:参照物钉死,不指向任何会被我自己的提交改动的东西。
改后从
_tooling复跑:45/0,旧版命中 15 条,反证 13/13,meta 10/10 全绿。⇒ 通用一条:任何"和上一版对比"的判据,靶子必须是钉死的快照或固定 commit,
绝不能用 HEAD / 当前工作树——否则判据的命运取决于我什么时候提交。
用户确认可以关闭。
交付内容:README.md 从 127 行(fork 说明 + 相对上游改了啥 + 发布流程)重写为 499 行功能与用法说明,commit
ba12451已推 main。更新机制五章按要求删除;旧的「主要修改」七条逐条核对,只有三条半成立,整段废弃;实测纠正了「最新文章优先」(实为热点文章)、「各库保持同步」(gitlab 镜像停在 3.2.0)、阿里云 Code 死链三处过期说法。主体是后台 16 个分组逐项对照代码写的真实键名与默认值。版本号不写死,指向 style.css。
判据三层:正向 45/0(同一套跑旧 README 命中 15 条,有区分力)· 反证 13/13 · 反证的反证 10/10。
遗留项由 #38 接手(自动标签算法效果不佳)。线上 readme.html 是否回滚待用户另行决定。