Skip to content

fix(gate): 门禁硬化三批——P0 三修 / 工具链误判收口 / java 默认检查等级 - #37

Closed
loong10k wants to merge 8 commits into
mainfrom
feat/p0-routing-timeout-openspec-v0.6.10
Closed

loong10k wants to merge 8 commits into
mainfrom
feat/p0-routing-timeout-openspec-v0.6.10

Conversation

@loong10k

@loong10k loong10k commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

摘要

三个 OpenSpec change 的硬化批次,全部来自四 SDK 12 分支生产就绪与 hermes/easydoc 实测撞锁:

1. P0 三项硬化(2026-09-22-p0-routing-openspec-skipgate)

  • timeout 路由:TimeoutExpired 与 exit 124 都路由 skipped(Maven 冷缓存超时不再误报阻塞),默认 120→300 秒
  • OpenSpec validate 集成:仓根有 openspec/config.yaml 且 CLI 可用则跑 strict validate
  • 静默跳过修复:resolve_project_roots 空结果时 cwd 兜底扫 git 仓,仍无则 exit 2 + 明确报错

2. 工具链不兼容归 UNVERIFIED + 逃生门收口(2026-09-22-gate-toolchain-unverified)

  • 判定语义:Maven POM 4.1.0 / release version 不支持 / invalid target / UnsupportedClassVersionError / SC1071 全部归 UNVERIFIED——工具链不兼容 ≠ 代码违规
  • zsh 剔除 + 缓存键 scope 维度 + Agent 工作目录排除
  • 逃生门三形态 + 全审计:repo config(读取失败留痕)/ git -c codeguard.skipGate=true(inline-skipGate)/ 链内 set→commit→unset(chain-skipGate,修复文档绕过首用必败);commit -m 消息文本里的豁免短语不再静默关掉门禁

3. java 默认检查等级 + ruff 基线(2026-09-23-java-gate-default-level)

  • 默认等级不含测试执行:Maven 追加 -DskipTests(测试代码仍编译)、Gradle 追加 -x test——大仓全量测试普遍超门禁 300s 超时预算,跑满只剩 UNVERIFIED;测试执行交 CI 或 codeguard.json java.commands 显式声明(既有权威覆盖)
  • ruff 版本基线钉扎:项目无自有 ruff 配置时注入默认规则集以 CI 基线(ruff==0.16.8)为准,判定不随机器漂移
  • README en + zh-CN parity 对齐;languages.json 与 docs/LANGUAGES.md 可复现同步

测试

  • unittest discover:221 通过——无 ruff 环境 3 skipped(skipUnless(ruff) 工具缺失守卫);ruff==0.16.8 下 221 全过 0 skipped
  • tests/run_all.py:141/141
  • ruff check 全绿;validate_languages_json 11 规则通过;README en/zh 版本与链接 parity 通过

对应 delta

hook-protocol / language-gate-commands / verdict-integrity(gate-toolchain-unverified + java-gate-default-level)+ gate-trigger-policy(p0-routing-openspec-skipgate)

P0 三项修复覆盖本会话在四 SDK 12 分支生产就绪中实测的三次撞锁:

- P0#1 _run_one timeout 路由:同时处理 TimeoutExpired 与 subprocess
  exit 124 都路由为 skipped 而非 failures(旧行为把 Maven install 冷缓存
  >2 分钟误报为阻塞);user_config 默认 lint_timeout_seconds 120→300
- P0#2 OpenSpec validate 集成:run_gate 末尾若仓根 openspec/config.yaml
  存在且 openspec CLI 可用则跑 strict validate;CLI 缺失路由 skipped
- P0#3 静默跳过漏报修复:resolve_project_roots=[] 时 cwd 一层子目录兜底扫
  git 仓(monorepo 模式);找不到则 exit 2 + stderr 明确错误信息
  (旧行为 exit 0 静默放过)

测试:tests/test_p0_routing_openspec_skipgate.py 新增 8 个用例;
全套 tests/run_all.py 141/141 全过。
- gate_lib._openspec_validate 引用了不在作用域的 cfg(openspec 项目且
  CLI 已装时必然 NameError)→ 改为显式 timeout_seconds 参数(默认 300),
  调用方 _run_gate_uncached 从 cfg 取 lint_timeout_seconds 传入
- failures.append 循环 → failures.extend(PERF402)
- 测试文件删除未用 import json、拆分 import ast, inspect(F401/I001)

验证:uvx ruff check hooks/ scripts/ tests/ 全过;tests/run_all.py 141/141
@loong10k loong10k closed this Sep 22, 2026
@loong10k loong10k reopened this Sep 22, 2026
对应 OpenSpec change 2026-09-22-gate-toolchain-unverified(verdict-integrity /
language-gate-commands / hook-protocol delta):

- verdict:Maven POM 4.1.0 / release version / invalid target /
  UnsupportedClassVersionError 归 UNVERIFIED(无法验证 ≠ 验证失败);
  SC1071 同理(ShellCheck 不支持 zsh 方言)
- zsh 目标面剔除:shell 全量 gate 剔除 *.zsh;delta 面明示「N 个 zsh 文件
  未验证」不静默丢弃
- 缓存键加 scope 维度:切断 UPS 软门禁(repo)与硬门禁(delta)60s TTL 互串
- 逃生门三形态 + 审计:repo config 读取失败留痕(skipGate-read-error)、
  git -c codeguard.skipGate=true(inline-skipGate)、链内
  git config codeguard.skipGate true && … && --unset(chain-skipGate,
  此前整链被拦首用必败);_git_seg_parts 子命令边界收紧——commit -m 消息
  文本里的豁免短语不再静默关掉门禁
- FULL_SCAN_EXCLUDES 增补 Agent 工作目录(.mimosa/.worktrees 等 7 个)
- 测试:test_gate_hardening_usage.py 19 用例;3 个 CLI/auto_fix 用例补
  skipUnless(ruff) 工具缺失守卫(无法验证 ≠ 验证失败)

验证:unittest discover 221 通过(无 ruff 3 skipped / ruff==0.16.8 shim 下
221 全过 0 skipped);run_all 141/141;ruff check 全绿;
validate_languages_json 11 规则通过
@loong10k loong10k closed this Sep 22, 2026
@loong10k loong10k reopened this Sep 22, 2026
@loong10k loong10k changed the title fix(gate): P0 三项硬化修复(timeout 路由 + OpenSpec validate + 静默跳过) fix(gate): P0 硬化三修 + 工具链误判收口(UNVERIFIED/zsh/逃生门三形态) Sep 22, 2026
对应 OpenSpec change 2026-09-23-java-gate-default-level(language-gate-commands delta):

- java_project.analyze:Maven 默认 argv 追加 -DskipTests(测试代码仍编译,
  仅跳过执行);Gradle 默认 argv 追加 -x test——大仓全量测试普遍超门禁
  300s 超时预算,跑满只剩 UNVERIFIED,门禁给不出真结论(P2-6 收口)
- languages.json java.lint 同步 + docs/LANGUAGES.md 重新生成(可复现)
- README(en + zh-CN parity 对齐):默认等级语义、codeguard.json
  java.commands 升级含测试完整 verify 的路径、ruff 版本基线(CI 钉扎
  ruff==0.16.8,项目无自有配置时注入默认规则集——P2-7 收口)

验证:unittest discover 221 通过(3 skipped=ruff 工具缺失守卫);
run_all 141/141;ruff 全绿;validate_languages_json 11 规则通过
@loong10k loong10k closed this Sep 22, 2026
@loong10k loong10k reopened this Sep 22, 2026
@loong10k loong10k changed the title fix(gate): P0 硬化三修 + 工具链误判收口(UNVERIFIED/zsh/逃生门三形态) fix(gate): 门禁硬化三批——P0 三修 / 工具链误判收口 / java 默认检查等级 Sep 22, 2026
…ne_stale_finding

verdict-integrity 原则("无基线证据绝不豁免")由 baseline_stale_finding 双跑基线落地,
本函数作为兜底接口仍返回 None:测试断言(test_verdict_integrity、test_session_fixes)
与 spec 一致。零行为变更,仅 docstring 诚实化避免后续读者误读。

详见 memory project-codeguard-plugin-optimization.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant