Release rollup#376
Conversation
…tion (#375) - verify_plan 改 phase-only postcondition(去 exactly-one-human 要求),不再越权 - 单 item apply/verify try/except skip+continue 隔离,单坏 item 不崩整个 daemon loop - run_once 接 beat callback,collect 后及每 item 后续 heartbeat,长 tick 不冻 - SKILL.md release fresh_heartbeats 文档追平实现(every restart-managed daemon fresh within 90s) - 补 4 项 behavior test + release schema source-regression design-consensus r1 3/3 consensus:minimal(issue #370) Closes #370. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
🤖 测试审查通过TL;DR
详细说明这次变更的测试不是 bump 行数。 我也检查了负面项:PR 的测试 diff 没有新增 📎 完整 codex 原始输出(存档备查)---
pr: 376
role: tests
verdict: approve
---
## Verdict
Test coverage and test quality are adequate for the PR's net-new behavior.
## Evidence
- `skills/codex-refactor-loop/scripts/test_closed_label_reconciler.py:427` covers the narrowed `verify_plan` contract in `closed_label_reconciler.py:95`: verification now requires exactly the planned terminal phase and does not require a human label.
- `skills/codex-refactor-loop/scripts/test_closed_label_reconciler.py:451` covers the new per-item exception isolation in `run_once`: one failing plan is skipped while the later plan is still applied and verified.
- `skills/codex-refactor-loop/scripts/test_closed_label_reconciler.py:485` covers the new heartbeat callback behavior during a long tick, asserting the concrete beat sequence after collection and after each item.
- `skills/codex-refactor-loop/scripts/test_closed_label_reconciler.py:138` and `:158` cover the phase-only helper rename plus preservation of canonical human labels while removing legacy cleanup/human drift labels.
- `skills/codex-refactor-loop/scripts/test_release_gate_module.py:390` adds source-regression coverage for the `SKILL.md` heartbeat contract, including the required "every restart-managed daemon" / "within 90 seconds" wording and removal of the old "At least five" wording.
- PR test diff adds no `[Skip]`, manual-category escape, `sleep`/`delay` pacing, or assertion weakening.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:376:tests:approve⟦AI:AUTO-LOOP⟧ |
🤖 quality review:PR 376 approveTL;DR
详细说明我按三点 diff 读了 PR 分支上的完整触达文件。 文档改动只把 📎 完整 codex 原始输出(存档备查)---
pr: 376
role: quality
verdict: approve
---
## Verdict
Approve: the diff is focused, readable, and does not introduce dead code, unjustified abstraction, avoidable duplication, or complexity growth.
## Evidence
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/closed_label_reconciler.py:30` keeps the heartbeat hook as a narrow optional callback on `run_once`; it is used from daemon mode at `skills/codex-refactor-loop/scripts/codex_refactor_loop/closed_label_reconciler.py:212`, so the new parameter is reachable and not dead surface.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/closed_label_reconciler.py:43` keeps per-plan failure isolation inline in a 35-line method; the control flow is still simple enough to read without extracting a second dispatcher.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/closed_phase_labels.py:71` renames the helper to `has_exactly_one_terminal_phase`, which matches the narrowed business invariant better than the removed human-label wording.
- `skills/codex-refactor-loop/SKILL.md:269` and `skills/codex-refactor-loop/SKILL.md:1113` update only the heartbeat contract wording to match the existing gate model; I did not see unrelated cleanup or a second reference system.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:376:quality:approve
⟦AI:AUTO-LOOP⟧ |
🤖 架构 Review: reject,缺少 refactor self-docTL;DR
详细说明本次 diff 仍在 issue-370 声明的 5 个文件内, 实际变更里, 📎 完整 codex 原始输出(存档备查)pr: 376
|
🤖 PR #376 fix round 1: 判定 architect reject 为误报TL;DR
详细说明本轮没有改源码。architect 的 blocking demand 引用的是过期规则面:当前 我实际试加过 reviewer 要求的三组源码注释, 📎 完整 codex 原始输出(存档备查)Fix report for PR 376 round 1Applied
Rejected as false positive
Blocked (cannot fix this round)
Build status
Recommendation for next round
⟦AI:AUTO-LOOP⟧ ⟦AI:AUTO-LOOP⟧ |
🤖 PR #376 round 2 fix appliedTL;DR
详细说明本轮只处理 blocking reject:
📎 完整 codex 原始输出(存档备查)Fix report for PR 376 round 2Applied
Rejected as false positive
Blocked (cannot fix this round)
Build status
Recommendation for next round
⟦AI:AUTO-LOOP⟧ ⟦AI:AUTO-LOOP⟧ |
…r 注释 architect reject(hard-rule #3,HOST_REFACTOR_COMMENT_POLICY=self-doc-comment): #370/#375 改 closed_label_reconciler.py/closed_phase_labels.py 缺 Refactor 注释。 fix r2 applied-4:为 ClosedLabelReconciler per-item isolation+heartbeat run_once、 phase-only verify_plan、closed_phase_labels terminal-phase helper 补 3-5 行 Refactor (iter370/issue-370) Old/New 英文注释(additive,不改逻辑)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
🤖 tests reviewer approve PR #376TL;DR
详细说明我按三点 diff 打开了实际测试文件,没有只看实现摘要。新增用例不是 bump-only:它们分别断言 未发现新增 sleep/delay pacing、Skip/Manual 标记、弱化既有断言,也没有只验证 mock 被调用而不覆盖真实业务结果的伪覆盖。 📎 完整 codex 原始输出(存档备查)---
pr: 376
role: tests
verdict: approve
---
## Verdict
Test coverage and test quality are adequate for the PR diff.
## Evidence
- `skills/codex-refactor-loop/scripts/test_closed_label_reconciler.py:138` covers the renamed terminal-phase helper with positive, duplicate-phase, and wrong-terminal cases, so the phase-only invariant is tested directly rather than by line-count.
- `skills/codex-refactor-loop/scripts/test_closed_label_reconciler.py:158` asserts canonical human labels are preserved while cleanup-only human labels are removed, matching the production refactor that narrows closed-label reconciliation to terminal phase ownership.
- `skills/codex-refactor-loop/scripts/test_closed_label_reconciler.py:427` verifies `ClosedLabelReconciler.verify_plan` no longer requires a human label, and `skills/codex-refactor-loop/scripts/test_closed_label_reconciler.py:400` still rejects multiple phase labels after edit.
- `skills/codex-refactor-loop/scripts/test_closed_label_reconciler.py:451` exercises the new per-item exception isolation by failing one plan, continuing to the next plan, and asserting the successful plan is still verified.
- `skills/codex-refactor-loop/scripts/test_closed_label_reconciler.py:485` covers the new daemon heartbeat callback path by asserting the beat callback fires after collection and after each plan in the tick.
- `skills/codex-refactor-loop/scripts/test_release_gate_module.py:390` adds source-regression coverage for the SKILL contract change from "at least five" heartbeats to "every restart-managed daemon within 90 seconds".
- I found no added sleep/delay pacing, skip/manual markers, assertion loosening, or mock-only pseudo-coverage in the touched tests.
[internal sentinel omitted from raw fold]
REVIEW_DONE:376:tests:approve⟦AI:AUTO-LOOP⟧ |
🤖 Quality review approveTL;DR
详细说明我按三点 diff 查看了 touched files,并在 PR worktree 上跑了相关测试:
📎 完整 codex 原始输出(存档备查)pr: 376
|
🤖 Architect review: approveTL;DR
详细说明我按
📎 完整 codex 原始输出(存档备查)---
pr: 376
role: architect
verdict: approve
---
## Verdict
approve - no architectural concerns; the PR stays inside the #370/#238 closed-label-reconciler scope and narrows, rather than widens, daemon authority.
## Evidence
- `skills/codex-refactor-loop/SKILL.md:313-320`: the #238 contract remains closed managed item phase-label reconciliation only: active-controller owner only, CLOSED managed issue/PR labels only, exactly one terminal phase, with explicit forbidden human/triage/milestone/lifecycle label mutation. This matches `CLAUDE.md` "强类型边界,窄扩展点" and "变更必须可验证".
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/closed_label_reconciler.py:30-64`: `run_once()` only adds a heartbeat callback and per-item exception isolation; it does not add new GitHub lifecycle verbs or change the existing `_gh` edit surface.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/closed_label_reconciler.py:98-108`: post-edit verification now checks only the daemon-owned terminal phase label, removing the prior human-label coupling and aligning with the #238 "no human label mutation" boundary.
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/closed_phase_labels.py:46-60` and `:71-76`: the projection still returns only terminal phase add/remove actions, cleanup-only aliases, and stuck cleanup; the helper is renamed to terminal-phase-only rather than preserving the old phase+human invariant.
- `skills/codex-refactor-loop/SKILL.md:272` and `:1113`: release heartbeat prose now matches the implementation contract: every restart-managed daemon must be fresh within 90 seconds, not an arbitrary "at least five" count. `skills/codex-refactor-loop/scripts/test_release_gate_module.py:390-395` locks that source-regression.
- `skills/codex-refactor-loop/scripts/test_closed_label_reconciler.py:427-512`: behavior coverage verifies phase-only postcondition, per-item skip/continue, and in-tick heartbeat renewal. `skills/codex-refactor-loop/scripts/test_source_language_policy.py:167-173` keeps invalid refactor comment policy fail-closed, and `:61-62` explicitly scopes the new self-doc comment allowlist to the two touched source files.
- Scope check: the actual merge-base diff changes only `skills/codex-refactor-loop/SKILL.md`, `closed_label_reconciler.py`, `closed_phase_labels.py`, and three local tests, matching the issue-370 judge/fix scope. No `.refactor-loop/host.env`, host production config, manifest, root policy, external repo reference, compat shim, or parallel actor/store path is introduced.
- Verification run from the current worktree: `python3 skills/codex-refactor-loop/scripts/test_closed_label_reconciler.py` passed 14 tests; `python3 skills/codex-refactor-loop/scripts/test_release_gate_module.py` passed 15 tests. `test_source_language_policy.py` was reviewed from the PR head via `git show`; it is not present in the checked-out `dev` worktree, so I did not switch branches or create a worktree.
⟦AI:AUTO-LOOP⟧
REVIEW_DONE:376:architect:approve⟦AI:AUTO-LOOP⟧ |
Release rollup:auto-refact-dev → dev
把 integration branch 累积变更滚动到 review base
dev,作为 v1.0.0-beta.6 发版基线。本次主要内容
fresh_heartbeats文档追平实现。修复 daemon 崩死 → release-gatefresh_heartbeats永红 → 阻塞 beta.6 的头号问题(PR fix(#370): closed_label_reconciler 收窄回 phase-only terminal reconciliation,修 daemon 崩死 #375,3/3 review approve + CI 全绿合入)。验证
Ran 973 tests ... OK (skipped=1)。合入后:fresh_heartbeats 在 dev 基线稳绿 → release-gate ready → 发 v1.0.0-beta.6。
🤖 Auto-loop / codex-refactor-loop release rollup
⟦AI:AUTO-LOOP⟧