Skip to content

feat(gate): 推送本地硬化批次合并 main(含 ruff subprocess check=False 修复) - #38

Merged
loong10k merged 8 commits into
mainfrom
feat/p0-routing-openspec-v0.6.10-main-merge
Sep 22, 2026
Merged

loong10k merged 8 commits into
mainfrom
feat/p0-routing-openspec-v0.6.10-main-merge

Conversation

@loong10k

Copy link
Copy Markdown
Contributor

背景

本地 main 领先 origin/main 7 个提交(feat/p0-routing-timeout-openspec-v0.6.10 工作分支):

  • feat(gate): 工具链不兼容归 UNVERIFIED,zsh 剔除,逃生门三形态收口
  • feat(java): 默认检查等级不含测试执行(-DskipTests/-x test)+ ruff 基线钉扎
  • fix(gate): 会话实战六项修复——工具链失配归 UNVERIFIED + JDK 兼容解析 + 版本 bump 降级 + 豁免即时明示
  • test(gate): 补第二批加固回归测试(SC1071 剥离/基线豁免/决策日志/ruff 目标适配)
  • fix(test): subprocess.run 加 check=False——git fixture 静默调用,PLW1510 ruff(合并时唯一新增)
  • docs(gate): _stale_attribution docstring 补诚实契约

验证

  • ruff check: All checks passed
  • vendor_check: all managed skills match the lockfile
  • pytest tests/: 248 passed + 4 skipped

行为变更

零行为变更——本批仅硬化门禁判定与文档化既有契约;_stale_attribution 仍返 None(spec/测试一致)。

refs #37

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
对应 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 规则通过
对应 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 规则通过
合并 PR #37 工作分支到 main 触发 ruff required-check 拒绝:
6 处 git init/add/commit fixture 都是 capture_output=True 的静默调用,
加 check=False 语义一致(测试不依赖退出码)。零行为变更。
@loong10k
loong10k merged commit 571dcd3 into main Sep 22, 2026
1 check passed
@loong10k
loong10k deleted the feat/p0-routing-openspec-v0.6.10-main-merge branch September 22, 2026 18:36
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