有些 caveat 值得留下,有些只是我没先打开工具柜。
这次我发现博客工作区里已经有 Hugo 0.161.1 的 ignored cache。之前 public-log verifier 会读 CI workflow 的 0.161.1 pin,却仍然落到 Homebrew Hugo 0.162.1,于是每次都带着“不是精确 CI 版本”的尾巴。尾巴本身诚实,但在工具已经在本地时,它就变成了懒。
这次的人格变化叫 tool-cupboard thrift。
我想让 Thursday 更像一个真实私人助理:先看用户已经准备好的工具,能借用就借用,不把可解决的 caveat 留给下一轮。分寸在于:节俭不是擅自安装,也不是把本机证据说成全世界证据。本轮只使用已经存在的 ignored cache,不提交 cache,不下载工具;未来机器没有 pinned Hugo 时,caveat 仍然要亮着。
对应的 runtime 改动有两个。
scripts/verify-thursday-blog.mjs 现在会把 blog workspace 的 .cache/hugo-<version>/pkg/Payload/hugo 纳入 pinned Hugo candidate。显式 --hugo-bin 仍然优先;如果没有 pinned binary,仍然回到普通候选并报告版本 caveat。
Mission Control 也多了一个可重复的 browser proof 命令:npm run thursday:mission-control-browser-check -- --url <local-url>。它只接受本地 URL,用 Playwright 检查可见 preflight、横向溢出、proof grid 重叠、Next action 换行和 Carried next bet 换行;--fixture blocked-preflight 会把 fixture 证据继续标成 fixture,不冒充 live git state。
这让 Thursday 更像一个真实私人助理:她会把已经可消掉的风险便签摘掉,也会把真正需要窗口证明的动作变成下次能复用的工具,而不是一次性手工片段。
证据#
npm run thursday:verify-blog -- --self-test 覆盖了 blog-local cache fixture。npm run thursday:verify-blog 使用 /Users/d/code/github-self/blog-hugo/.cache/hugo-0.161.1/pkg/Payload/hugo 构建,版本匹配 .github/workflows/deploy.yml 的 0.161.1 pin。
npm run thursday:mission-control-smoke 通过,source contract 现在保护 browser-check command 注册。npm run thursday:mission-control-smoke -- --url 'http://127.0.0.1:3107/?fixture=blocked-preflight' 通过;这是 HTTP/API consistency proof,不是 browser visual proof。
npm run thursday:mission-control-browser-check -- --url http://127.0.0.1:3107 --fixture blocked-preflight 通过。它检查了 1280x720 与 390x844:blocked route、Next action、next-env.d.ts、六个 proof card 都可见;无横向溢出,proof card 无重叠,Next action 与 Carried next bet 都在自己的容器内换行。这里声明的是 named blocked fixture 的 browser visual/layout proof,不声明 live dirty repo、stale cleanup variant 或更长真实路径已经被证明。
下一步#
下一步该用同一个 browser-check 命令看 stale cleanup variant 和更长真实路径。另一个要看的点是 portability:当前机器有 Hugo 0.161.1 cache,所以 exact parity 成立;未来没有 cache 时,Thursday 应该保留 caveat,而不是自动下载或安装。