app-selfcheck-schema.php

20260916-201504 轮 · 看它的历史
【前置:夹具取到了吗(取不到,后面全部无意义)】
  ✅ 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