Release rollup#369
Conversation
…elease-gate/wakeup-plan 倒计时投影,r4 minimal consensus) (#366)
* #104: host-portability — fold setup owner surface 进 codex-refactor-loop(HostWorkflowSpec 七面投影/non-admin merge/host-env release checks) * #363 fix r2: 补 host-required release checks fail-closed denial-path behavior tests(applied-2) * #363 fix r4: 补 missing/empty HOST_GITHUB_RELEASE_REQUIRED_CHECKS default-projection behavior test(applied-1)
* #337: 源码 English-only 契约系统性收敛 — test-only source-language guard + HOST_REFACTOR_COMMENT_POLICY default→none,删历史中文注释(r3 structural consensus) * #367 fix r2: source-language guard negative test 改走真实 scanner 入口(comment_findings/string_findings/scan_python_source_language),applied-1 * #367 fix r1: source-language guard 加 iterN/cluster refactor-history 负向覆盖 + 检测逻辑(applied-1,addr tests reject)
…ce contract + 3 solver prompt + source-regression;无新 module/parser/header) (#368)
📊 当前状态 — release rollup PR open → review-gate r1(❌ 不需要人介入)
下一步自动会做:reviewer 共识 + CI 绿 → merge 入 dev → release-commits + release-gate(score 100)→ beta.6 publish。 🤖 controller status banner ⟦AI:AUTO-LOOP⟧ |
🤖 tests review 通过TL;DR
详细说明我按三点 diff 打开了实际测试文件,重点查了 skip/manual、sleep/delay pacing、断言变松、mock-only 覆盖和 net-new 逻辑覆盖。没有发现 tests 角度的 must-fix。 覆盖证据主要在 验证命令在 PR detached worktree 运行通过: 📎 完整 codex 原始输出(存档备查)---
pr: 369
role: tests
verdict: approve
---
## Verdict
Test coverage and test quality are adequate for the PR diff.
## Evidence
- `skills/codex-refactor-loop/scripts/test_required_release_checks.py:136` covers the new host-owned `HOST_GITHUB_RELEASE_REQUIRED_CHECKS` parser and rejects the old `REQUIRED_RELEASE_CHECKS` alias; `:143` verifies the default projection fails closed without polling or API calls when checks are missing.
- `skills/codex-refactor-loop/scripts/test_release_gate_module.py:193` covers the auto-release fail-closed path when required release checks are absent, including the no-`gh api` assertion.
- `skills/codex-refactor-loop/scripts/test_wakeup_plan.py:680` and `:690` cover the new release-countdown projection as status-only, non-dispatchable behavior, including the `crnd:milestone:current` non-trigger case and explicit `no_lifecycle_authority`.
- `skills/codex-refactor-loop/scripts/test_source_language_policy.py:213` and `:218` add both repo-wide source-regression coverage and a positive scanner fixture for Han/refactor-history source comments.
- Diff scan found no added `[Skip]`, manual test traits, assertion loosening, or sleep/delay pacing in tests. Focused PR-worktree verification passed: `python3 -m unittest skills/codex-refactor-loop/scripts/test_required_release_checks.py skills/codex-refactor-loop/scripts/test_release_gate_module.py skills/codex-refactor-loop/scripts/test_release_publish_preflight.py skills/codex-refactor-loop/scripts/test_wakeup_plan.py skills/codex-refactor-loop/scripts/test_source_language_policy.py` ran 99 tests OK.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:369:tests:approve
⟦AI:AUTO-LOOP⟧ |
🤖 架构合规审查通过TL;DR
详细说明我按实际 diff 检查了 release required checks、 refactor-history source comment 策略也已收口: missing/empty/default 归一化为 📎 完整 codex 原始输出(存档备查)---
pr: 369
role: architect
verdict: approve
---
## Verdict
approve - no architectural compliance concerns from the CLAUDE.md/AGENTS.md angle.
## Evidence
- `skills/codex-refactor-loop/SKILL.md:101` defines the new `$HOST_GITHUB_RELEASE_REQUIRED_CHECKS` host.env surface as host-owned exact check-run names, with `RELEASE_AUTO_ENABLE=true` failing closed on missing/empty evidence; this maps to CLAUDE.md's host runtime fact boundary and release-gate requirements rather than hardcoding source-repo CI names.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/release/required_checks.py:22` reads required release checks only from `HOST_GITHUB_RELEASE_REQUIRED_CHECKS`, and `required_checks.py:149` fails closed with `missing_host_required_release_checks` before hitting GitHub when the list is empty.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/release/gate.py:233` blocks auto-release when release is enabled but required check names are missing, preserving the CLAUDE.md "不在红信号上发版" and "tag 必须指向绿提交" release constraints.
- `skills/codex-refactor-loop/SKILL.md:115` and `SKILL.md:770` make source refactor-history comments opt-in via `$HOST_REFACTOR_COMMENT_POLICY=self-doc-comment`; missing/empty/default is `none`, matching the no-comment host policy and keeping rationale in external artifacts.
- `skills/codex-refactor-loop/prompts/reviewer-architect.md:20` updates the architect checklist to reject new Old/New iteration source comments under missing/empty/default/`none`, so the reviewer contract matches the skill contract.
- `skills/codex-refactor-loop/SKILL.md:71` keeps `HOST_WORKFLOW_SPEC` data-only with `host:` names, no lifecycle authority, no consensus downgrade, and built-in solver triplet routing unchanged; this preserves CLAUDE.md's narrow extension-point and no-generic-lifecycle-actor clauses.
- `skills/codex-refactor-loop/SKILL.md:48` and `workflow_stages.py:30` reframe audit as fallback issue production after actionable managed issue/PR work, not a parallel work-unit system, preserving the single-mainline/product identity clauses.
- Diff scope is within the rollup's declared source surfaces: README/skill contract, prompts, checked-in scripts, and source-regression tests. No new external repo reference, `*WriteActor`/`*ReadActor` split, production SSOT migration into `.refactor-loop`, or empty forwarding compatibility shim was introduced.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:369:architect:approve⟦AI:AUTO-LOOP⟧ |
🤖 质量审查:rejectTL;DR
详细说明主要问题在 次要问题在 📎 完整 codex 原始输出(存档备查)---
pr: 369
role: quality
verdict: reject
---
## Verdict
Reject: the PR introduces a source-language policy guard that makes the default `self-doc-comment` refactor self-doc requirement impossible to satisfy for Python source.
## Evidence
- `skills/codex-refactor-loop/scripts/test_source_language_policy.py:17` and `skills/codex-refactor-loop/scripts/test_source_language_policy.py:213`: the new test treats `Refactor (`, `Old pattern`, and `New principle` as forbidden Python source findings, while `.refactor-loop/host.env` does not set `HOST_REFACTOR_COMMENT_POLICY`, so the reviewer prompt normalizes it to `self-doc-comment`; under that policy major Python refactors must carry readable Old/New source comments. This is a readability/process regression because future source refactors cannot both comply with the prompt and pass the new guard.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/workflow_spec.py:178`: `ValidatedWorkflowSpec.as_dict()` is new public-style surface that just aliases `projection()` and has no caller in PR-head production or tests. `projection()` is the business name exercised by tests, so the alias looks like avoidable dead surface.
## What would change your verdict (only if comment or reject)
Make the source-language guard honor `HOST_REFACTOR_COMMENT_POLICY`: either do not forbid Old/New refactor-history comments when the policy is empty/`self-doc-comment`, or set/require `HOST_REFACTOR_COMMENT_POLICY=none` for this host and update the prompts/tests accordingly. Also remove `ValidatedWorkflowSpec.as_dict()` unless a real caller or compatibility requirement exists.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:369:quality:reject⟦AI:AUTO-LOOP⟧ |
1 similar comment
🤖 质量审查:rejectTL;DR
详细说明主要问题在 次要问题在 📎 完整 codex 原始输出(存档备查)---
pr: 369
role: quality
verdict: reject
---
## Verdict
Reject: the PR introduces a source-language policy guard that makes the default `self-doc-comment` refactor self-doc requirement impossible to satisfy for Python source.
## Evidence
- `skills/codex-refactor-loop/scripts/test_source_language_policy.py:17` and `skills/codex-refactor-loop/scripts/test_source_language_policy.py:213`: the new test treats `Refactor (`, `Old pattern`, and `New principle` as forbidden Python source findings, while `.refactor-loop/host.env` does not set `HOST_REFACTOR_COMMENT_POLICY`, so the reviewer prompt normalizes it to `self-doc-comment`; under that policy major Python refactors must carry readable Old/New source comments. This is a readability/process regression because future source refactors cannot both comply with the prompt and pass the new guard.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/workflow_spec.py:178`: `ValidatedWorkflowSpec.as_dict()` is new public-style surface that just aliases `projection()` and has no caller in PR-head production or tests. `projection()` is the business name exercised by tests, so the alias looks like avoidable dead surface.
## What would change your verdict (only if comment or reject)
Make the source-language guard honor `HOST_REFACTOR_COMMENT_POLICY`: either do not forbid Old/New refactor-history comments when the policy is empty/`self-doc-comment`, or set/require `HOST_REFACTOR_COMMENT_POLICY=none` for this host and update the prompts/tests accordingly. Also remove `ValidatedWorkflowSpec.as_dict()` unless a real caller or compatibility requirement exists.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:369:quality:reject⟦AI:AUTO-LOOP⟧ |
📊 当前状态 — rollup review-gate r1 → fix r1(❌ 不需要人介入)
下一步自动会做:fix codex r1 读三 reviewer artifact,in-scope 修复或标 false-positive(附理由);若改 ard → 重建 rollup;若全 FP → 重审 #369 → merge。 🤖 controller status banner ⟦AI:AUTO-LOOP⟧ |
🤖 PR 369 round 1 fix 已应用TL;DR
详细说明本轮只把 同时删除了 📎 完整 codex 原始输出(存档备查)# Fix report for PR 369 round 1
## Applied
- (A) skills/codex-refactor-loop/scripts/test_source_language_policy.py:165: made the source-language guard honor `HOST_REFACTOR_COMMENT_POLICY`: missing/empty/default/`none` still forbids refactor-history source comments, explicit `self-doc-comment` allows English refactor self-doc comments, and invalid values fail closed. Added behavior coverage at lines 266 and 288. (addresses reviewer:quality's evidence #1)
- (A) skills/codex-refactor-loop/scripts/codex_refactor_loop/workflow_spec.py:137: removed the unused `ValidatedWorkflowSpec.as_dict()` alias so `projection()` remains the single exercised projection method. (addresses reviewer:quality's evidence #2)
## Rejected as false positive
- None.
## Blocked (cannot fix this round)
- None.
## Build status
- build: pass (`bash -lc "true"`)
- tests: pass (`python3 -m unittest discover -s skills/codex-refactor-loop/scripts -p 'test_*.py'` ran 968 tests OK, skipped=1)
## Recommendation for next round
- expect unanimous; all round-1 reject demands were applied and local verification passed.
⟦AI:AUTO-LOOP⟧
FIX_DONE:369:round-1:applied-2:rejected-0:blocked-0⟦AI:AUTO-LOOP⟧ |
…LICY + 删 workflow_spec ValidatedWorkflowSpec.as_dict dead alias(quality reject,applied-2)
📊 当前状态 — fix r1 完成 → review-gate r2(❌ 不需要人介入)
🤖 controller status banner ⟦AI:AUTO-LOOP⟧ |
🤖 架构审查通过:未发现 CLAUDE.md 回归TL;DR
详细说明我核对了三点: host facts 仍通过 host-owned 我也检查了 wakeup-plan、HostWorkflowSpec、label/workflow registry、source comment policy、外部 repo 引用、actor/store split 和 deletion-first 风险。没有发现新的 generic lifecycle actor、平行协议 owner、host production SSOT 下沉到 📎 完整 codex 原始输出(存档备查)pr: 369
|
🤖 Quality r2: 通过但建议收口一个命名细节TL;DR
详细说明
这不是 must-fix。原因是 r1 的实质问题已经被当前 head 修复:source-language guard 已按 📎 完整 codex 原始输出(存档备查)---
pr: 369
role: quality
verdict: comment
---
## Verdict
Comment: the r1 reject issues are fixed, with one remaining public-name clarity nit around release required checks.
## Evidence
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/release/gate.py:35`: `REQUIRED_CHECKS` is exported in all caps but now aliases the callable `required_release_checks`, and `test_release_gate_module.py:360` calls it like a function. That reads like a constant but behaves like a parser/projection function; the business-named `required_release_checks()` already carries the intent.
## What would change your verdict (only if comment or reject)
Rename the exported alias to a lower-case business name such as `required_checks`, remove it if compatibility is not needed, or add a short compatibility comment beside `REQUIRED_CHECKS = required_release_checks` explaining why an all-caps callable is intentionally preserved.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:369:quality:comment⟦AI:AUTO-LOOP⟧ |
🤖 tests review:PR 369 通过TL;DR
详细说明我重点看了新增/变更的 release required checks、release countdown status action、HostWorkflowSpec projection、source language policy,以及相关 prompt/文档 contract 守卫。没有发现新增 已在 PR head worktree 跑过聚焦测试集: 📎 完整 codex 原始输出(存档备查)pr: 369
|
🤖 review-gate r2 共识 — 合并 #369 入 dev(MERGE_WITH_COMMENTS)r2 三 reviewer:architect approve · tests approve · quality comment(reject=0)→ MERGE_WITH_COMMENTS。required checks 全绿(contract-tests / manifest-version-sync / skill-degradation / CodeQL),CLEAN、MERGEABLE。 Advisory(不阻 merge,记为后续 narrow follow-up):quality 指出 合并后 → release-commits + release-gate → beta.6 publish 路径。 ⟦AI:AUTO-LOOP⟧ |
摘要
Release rollup:
auto-refact-dev(9b83ca9,ahead of dev 5)→dev,为 beta.6 发版收束本周期所有已合工作。本轮纳入(ard 全绿)
required checks 在 ard 9b83ca9 全绿:contract-tests / manifest-version-sync / skill-degradation。
下一步
rollup merge 入 dev 后 →
release-commits+release-gate(score 100)→ ReleasePublishPreflight → ReleasePublisher 发 beta.6。🤖 Auto-loop / codex-refactor-loop release-rollup
⟦AI:AUTO-LOOP⟧