fix(判据): 探针三值 + 发布候选标签 —— 顺带查出探针从写下那天起一次都没跑成过
pi 的两条"真实的洞",都落了,而且第一条当场抓到实证。 1. **探针三值**(可用 / 不可用 / 拿不准→红):`RESULT static=5 probe=ok|unknown` 把"欠账余额"和"探针是否健康"拆成两个数字。 **换完第一次运行就报 probe=unknown** —— 一查:探针调的是 `execFileSync`, 而这个文件 import 的是 `spawnSync`,**名字根本没定义**。也就是说 **探针从写下的那天起一次都没跑成过**,旧的两值设计把 `ReferenceError` 和"没有设备"一起吞掉、统一报成"设备不可用":机制在、闸门从没开过, 而它看起来完全健康。这正是 pi 描述的"恒不开闸",只是比预想更彻底。 现在:命令在但跑不成 → unknown → 红;所有候选都不存在(本机没装 hdc)→ 可判的 "没有设备工具" → false,避免没装 SDK 的机器天天假红。 附 `--probe-selftest`(只跑分类器,不跑套件)+ 变异验证(把 unknown 当"不成立"→ 红)。 2. **releaseCandidate = !gitDirty**(从展示升成标签):BUILD_INFO 现在自报 `releaseCandidate`,发布脚本在脏树时会打印"这个包不是发布候选"。 判据 `build-stamp` 断言"标签与 gitDirty 必须一致"。 **实证**:本轮我打的包正是这种情况 —— `gitDirty: true`(含着 gui-lab 未提交的 NarrowStack/index.css),`releaseCandidate: false`,日志里明确说了"不是发布候选"。 3. 附带:`criteria-hygiene` 加一条"用到 `code/prose/bytes` 就必须真的 import"。 理由是同一形状我这轮在三个文件里各犯过一次(最后一次是 `execFileSync`/`spawnSync`), 而它表现为"判据红了"(ReferenceError 抛在判据自己身上),看起来像判据失败、 不像判据写错。这条至少把最常写错的那几个名字变成明确的红。
This commit is contained in:
@ -95,6 +95,18 @@ export function writeBuildInfo(root = ELECTRON_DIR, buildCmd = process.env.npm_l
|
||||
buildCmd,
|
||||
builtAt: new Date().toISOString(),
|
||||
// 说明这份文件是什么、谁在比它(读到此文件的人不用去翻代码)
|
||||
/*
|
||||
* **标签**,不是展示(pi 2026-09-14 §1)。
|
||||
*
|
||||
* 共享树上永远有人在写别的文件,所以"脏树"是常态 —— 拿它当红会让门禁天天假红。
|
||||
* 但"从脏树打出来的包"和"从干净树打出来的包"**在门禁上必须可区分**:
|
||||
* 前者含别人的半成品,只能自用,不能给人装。所以给一个是/否:
|
||||
*
|
||||
* releaseCandidate = !gitDirty
|
||||
*
|
||||
* 部署路径可以据此拒绝安装(判据见 build-stamp 的"脏树产物不得自称发布候选")。
|
||||
*/
|
||||
releaseCandidate: !st.gitDirty,
|
||||
note: '构建自证:test/build-stamp.test.mjs 用 srcHash/gitRev 精确比对,不是比时间戳'
|
||||
};
|
||||
const out = join(root, 'dist', 'BUILD_INFO.json');
|
||||
|
||||
@ -39,6 +39,11 @@ bash -c "$PACK_CMD"
|
||||
# 产物自报来源:把 BUILD_INFO 打进日志(pi 提的"一个包要自带它对应哪个源码状态")。
|
||||
# 出问题时先看这几行:包是在哪个提交、哪份源码指纹上构建的,以及当时树干不干净。
|
||||
if [[ -f dist/BUILD_INFO.json ]]; then
|
||||
# "脏树打的包"必须**看得见**(pi §1):共享树上脏是常态,所以不做成红,
|
||||
# 但要在日志里明说这个包不是发布候选(含别人未提交的半成品时不能给人装)。
|
||||
if grep -q '"releaseCandidate": *false' dist/BUILD_INFO.json 2>/dev/null; then
|
||||
echo "[release] ⚠ 这个包不是发布候选(releaseCandidate=false):构建时工作树是脏的。"
|
||||
fi
|
||||
echo "[release] 产物来源:$(cat dist/BUILD_INFO.json | tr -d '\n' | sed 's/ */ /g')"
|
||||
else
|
||||
echo "[release] 警告:dist/BUILD_INFO.json 不存在 —— 构建没走 npm run build?(判据会红)" >&2
|
||||
|
||||
Reference in New Issue
Block a user