结果 让 Thinloop 的现有确定性验证在 GitHub Pull Request 上自动运行,并让 main 只能接收通过该必需检查的变更。
用户问题 仓库已有完整本地检查,但 GitHub 当前没有 workflow、required check 或 main 保护,QuickDev 的“等待必需 CI”契约因此没有服务器端执行面。
产品追溯 权威来源:当前对话确认的改进范围 已确认版本:2026-08-30 需求:不适用 项目协调 范围内 新增最小 GitHub Actions 测试 workflow; 运行 177 项测试、三组评测定义校验、Knowledge dry-run、README 图一致性、插件/版本一致性和可在 CI 安全运行的插件 validate; 通过 GitHub 规则让 workflow 成为 main 的必需检查; 记录首次真实 PR 检查证据。 范围外 自动发布; 真实模型 full eval; 依赖外部桌面应用的安装验证; 弱化任何现有仓库保护。 已确认决策 使用 Ubuntu runner 和仓库现有 Node 无依赖测试路径; 只加入稳定、无密钥、无桌面依赖的检查; 保护规则在 workflow 已存在且检查名确定后启用; Claude 插件结构使用仓库已有真实验证版本 @anthropic-ai/claude-code@2.1.197,在 CI 中按精确版本临时执行,不写入仓库依赖; 受控失败通过同一 Pull Request 上的临时失败测试提交观察远端 check FAIL,随后 revert 并要求最终 head PASS;最终差异不保留失败探针; 独立验收发生在合并前;A5 验证最终 head 已通过必需检查且具备合并资格,实际合并与远端 main 复核属于交付账和关闭门。 方案确认 失败与边界场景 第三方插件 CLI 无法稳定安装时,保留已有结构测试而不伪造 validate;本次远端实际验证已通过; GitHub 账户权限不支持 required check 时保持 Issue 开放并记录 API 证据; 保护启用后不得通过管理员绕过来完成普通合并; 受控失败只允许改变任务分支历史,不得把失败探针留在最终差异中;本次最终差异已确认不包含探针; 默认浅克隆无法解析固定历史评测提交 3141d81;已使用 fetch-depth: 0 修复并由契约测试锁定。 验收条件 验证衔接点 GitHub Actions check run; GitHub ruleset/branch protection API; 本地运行与 workflow 相同的命令集合。 实施方案 新增 .github/workflows/ci.yml,使用固定 workflow/check 名 Thinloop CI 与 job ID verify,在 Pull Request 和 main push 上运行;只授予 contents: read,设置 Node.js 22 和 10 分钟超时。 workflow 分步执行仓库测试、三组评测定义校验、Knowledge dry-run、README 图 --check,并使用精确版本 Claude Code CLI 执行 plugin validate . --strict。 新增确定性 workflow 契约测试,锁定触发器、检查名、Node 版本、权限、超时、完整 Git 历史、官方 action 主版本、全部命令与精确插件 CLI 版本,防止后续静默删减 CI 覆盖。 更新验证文档,使本地复现命令与 workflow 一致,并明确真实模型评测和桌面安装验证不属于 CI。 PR 创建后追加临时失败测试提交,保存远端失败 check 证据,再 revert 探针并要求最终 head 通过;父 Execute 负责独立验收、合并、required check 设置和清理。 实施任务 验证 A1 PASS:PR 建立 Thinloop 最小 CI 检查 #78 在 head 16d460e9d442ed9eba727b3b994a3bd702319e09 自动运行稳定命名的 Thinloop CI;最终 run 33300406802 为 success。 A2 PASS:run 33300406802 逐步通过 177 项仓库测试、三组评测定义、Knowledge dry-run、README 图检查和 Claude plugin strict validate;最终 head 本地运行相同命令也全部退出码 0。 A3 PASS:临时探针提交 d0adceba63eeda7a52b04d57287cee2863ac5591 的 run 33300381400 为 failure,日志明确记录 Issue #76 controlled CI failure probe 与 Process completed with exit code 1;revert 16d460e 后最终 run 恢复为 success。 A4 PASS:GitHub branch protection 已启用 strict: true 的必需检查 Thinloop CI,enforce_admins.enabled: true,并禁止 force push 与删除 main。 A5 PASS:保护规则生效后,PR 建立 Thinloop 最小 CI 检查 #78 仍为 OPEN、MERGEABLE、mergeStateStatus: CLEAN,最终 head 的必需 Thinloop CI 为 SUCCESS。 完成审计 验收闭合 A1:PASS,远端 Pull Request check 已观察。 A2:PASS,远端所有目标步骤和本地同命令均通过。 A3:PASS,远端受控失败与恢复路径均已观察。 A4:PASS,远端 main 保护 API 已观察。 A5:PASS,main 保护生效后的 PR 合并资格和必需检查均已观察。 实施账目 T1:DONE,新增最小 workflow。 T2:DONE,新增 2 项 workflow 契约测试并更新验证文档。 T3:DONE,最终 head 本地 177/177 tests 及全部 CI 同命令通过,git diff --check origin/main...HEAD 通过。 T4:DONE,已提交、推送并创建 PR 建立 Thinloop 最小 CI 检查 #78 ;受控失败和最终恢复证据已写入 PR。 T5:DONE,全新上下文验收 PASS,PR 已合并,远端 main、push CI 和通道资源清理均已复核。 页面验收 交付状态 分支与提交:chore/76-ci-main-gate / 16d460e9d442ed9eba727b3b994a3bd702319e09 拉取请求:建立 Thinloop 最小 CI 检查 #78 ,MERGED,merge commit 029019b019c9459cfc2661ca524ebc7b75e19c19 精确差异:.github/workflows/ci.yml、tests/ci-workflow.test.mjs、docs/verification.md;3 个文件,110 行新增;没有失败探针或无关文件 必需检查:Thinloop CI 在最终 head 为 SUCCESS 阻塞性评审:无 独立验收:第二个全新上下文验收者返回 PASS;A1-A5 均有直接证据 合并版本:远端与本地 main 均为 029019b019c9459cfc2661ca524ebc7b75e19c19;main push run 33300884397 SUCCESS 清理状态 清理所有者:Execute main 同步:PASS,本地 main、origin/main 与 PR merge commit 均为 029019b019c9459cfc2661ca524ebc7b75e19c19 任务工作树:/Users/carver/workspace/mindcarver/.worktrees/thinloop-76,已删除并经 git worktree list 复核不存在 本地任务分支:chore/76-ci-main-gate,已删除并复核不存在 远端任务分支:chore/76-ci-main-gate,已删除并经 git ls-remote --heads 复核不存在 连续性状态:不适用 未知项
结果
让 Thinloop 的现有确定性验证在 GitHub Pull Request 上自动运行,并让
main只能接收通过该必需检查的变更。用户问题
仓库已有完整本地检查,但 GitHub 当前没有 workflow、required check 或 main 保护,QuickDev 的“等待必需 CI”契约因此没有服务器端执行面。
产品追溯
项目协调
ci-main-gate范围内
main的必需检查;范围外
已确认决策
@anthropic-ai/claude-code@2.1.197,在 CI 中按精确版本临时执行,不写入仓库依赖;FAIL,随后 revert 并要求最终 headPASS;最终差异不保留失败探针;main复核属于交付账和关闭门。方案确认
失败与边界场景
3141d81;已使用fetch-depth: 0修复并由契约测试锁定。验收条件
main规则要求 A1 的检查通过后才能合并。main复核保留在交付状态。验证衔接点
实施方案
.github/workflows/ci.yml,使用固定 workflow/check 名Thinloop CI与 job IDverify,在 Pull Request 和mainpush 上运行;只授予contents: read,设置 Node.js 22 和 10 分钟超时。--check,并使用精确版本 Claude Code CLI 执行plugin validate . --strict。实施任务
Refs #76的 PR,完成远端受控失败与恢复通过证据。main复核与通道清理。验证
16d460e9d442ed9eba727b3b994a3bd702319e09自动运行稳定命名的Thinloop CI;最终 run 33300406802 为success。33300406802逐步通过 177 项仓库测试、三组评测定义、Knowledge dry-run、README 图检查和 Claude plugin strict validate;最终 head 本地运行相同命令也全部退出码 0。d0adceba63eeda7a52b04d57287cee2863ac5591的 run 33300381400 为failure,日志明确记录Issue #76 controlled CI failure probe与Process completed with exit code 1;revert16d460e后最终 run 恢复为success。strict: true的必需检查Thinloop CI,enforce_admins.enabled: true,并禁止 force push 与删除 main。OPEN、MERGEABLE、mergeStateStatus: CLEAN,最终 head 的必需Thinloop CI为SUCCESS。完成审计
验收闭合
实施账目
git diff --check origin/main...HEAD通过。PASS,PR 已合并,远端 main、push CI 和通道资源清理均已复核。页面验收
交付状态
chore/76-ci-main-gate/16d460e9d442ed9eba727b3b994a3bd702319e09029019b019c9459cfc2661ca524ebc7b75e19c19.github/workflows/ci.yml、tests/ci-workflow.test.mjs、docs/verification.md;3 个文件,110 行新增;没有失败探针或无关文件Thinloop CI在最终 head 为SUCCESSPASS;A1-A5 均有直接证据029019b019c9459cfc2661ca524ebc7b75e19c19;main push run 33300884397SUCCESS清理状态
main、origin/main与 PR merge commit 均为029019b019c9459cfc2661ca524ebc7b75e19c19/Users/carver/workspace/mindcarver/.worktrees/thinloop-76,已删除并经git worktree list复核不存在chore/76-ci-main-gate,已删除并复核不存在chore/76-ci-main-gate,已删除并经git ls-remote --heads复核不存在未知项