app-selfcheck-schema.php
【前置:夹具取到了吗(取不到,后面全部无意义)】
✅ install/ 里有基线文件
基线 34 份:2026.08.6 … 2026.09.24
✅ 表前缀取到了
【A · 解析器没坏(两种独立数法互证,不写死刻度)】
✅ 当版基线读得到(不是 null)
✅ 表数 == 文件里 CREATE TABLE 的行数
✅ 列数 == 文件里列行的行数
✅ 与独立解析器逐项相同
✅ 表数是像样的量级(> 100)
✅ 列数是像样的量级(> 1000)
2026.09.24:105 张表 / 1350 列
【B · 差集有分辨力(拿真实基线对互比,零 DB)】
夹具:2026.08.11 → 2026.08.12
✅ 差集非空(否则这对夹具选错了)
✅ "前者独有"与独立解析器逐项相同
✅ "后者独有"与独立解析器逐项相同
前者独有 0 项;后者独有 1 项
【C · 真命令 · 该绿的绿着(同时证明第 6 组接在 execute() 上)】
夹具版本 2026.09.24
❌ 输出里有"一致"那一行(少了它 = 第 6 组没被调用)
实得 false
预期 true
✅ 没有报"不符"
✅ 没有报"读不到基线"
✅ 【源码锚,非行为断言】"一张都找不到"那一支还在产品代码里
✅ 命令确实执行了(输出非空)
—— 实际输出:
license DEV-0001 覆盖本站域名
⚠ app.env 里没有 JNC_APPID —— 后台的「桌面端应用下载」入口会认不出本站,点进去会被发布服务拒绝。补一行 JNC_APPID = <我们发给你的 appid> 再重启 jnc-app 即可,站点其余功能不受影响
🔴 启动自检未通过,拒绝启动:
· 读不到 /var/www/html/VERSION —— 这个镜像没有版本号,判断不了该不该跑
· APP_DEBUG 是开的。生产镜像上它会打开调试端点与自动登录(vip=9),必须关掉
· FF_DEBUG_MODE 是开的。它会放行一批只给开发用的端点,必须关掉
· 没配 APP_TIMEZONE。本站的时间显示、"今天/最近N天/保留期"的边界、日批几点跑,全按它算;交付形态下不允许省略(样板见 docker/app.env.example)
【C2 · 基线读不到时 fail-closed(顺带给上面那条反向断言当正向锚)】
夹具版本 2026.01.1(install/ 里没有它的基线)
❌ 报"这个镜像没带本版的库结构基线"
实得 false
预期 true
❌ 点名了是哪个文件
实得 false
预期 true
❌ 落在"拒绝启动"清单里(不是静默放行)
实得 false
预期 true
✅ 没有同时报"一致"
【D · 真命令 · 该红的红,并且点名到列】
夹具版本 2026.09.20,预期缺 1 个列
❌ 输出里有"不符"那一句
实得 false
预期 true
❌ 那一句落在"拒绝启动"清单里
实得 false
预期 true
❌ 报的缺失列数与独立算出的相同
实得 false
预期 true
没点名:jnc_articlenode.anleftdisplay
❌ 缺的列被逐个点名(至多前 20 个)
实得 false
预期 true
✅ 没有同时报"一致"(两个方向不能都成立)
—— 实际输出:
license DEV-0001 覆盖本站域名
⚠ app.env 里没有 JNC_APPID —— 后台的「桌面端应用下载」入口会认不出本站,点进去会被发布服务拒绝。补一行 JNC_APPID = <我们发给你的 appid> 再重启 jnc-app 即可,站点其余功能不受影响
🔴 启动自检未通过,拒绝启动:
· 读不到 /var/www/html/VERSION —— 这个镜像没有版本号,判断不了该不该跑
· APP_DEBUG 是开的。生产镜像上它会打开调试端点与自动登录(vip=9),必须关掉
· FF_DEBUG_MODE 是开的。它会放行一批只给开发用的端点,必须关掉
· 没配 APP_TIMEZONE。本站的时间显示、"今天/最近N天/保留期"的边界、日批几点跑,全按它算;交付形态下不允许省略(样板见 docker/app.env.example)
【E · 守卫:副作用还原本身也要被断言】
✅ 临时 VERSION 已删除
✅ install/ 一个文件都没少
PASS=19 FAIL=8