Skip to content

#437: canonical RuntimeRetention owner + log-retention alias + CLAUDE.md carveout#480

Draft
loning wants to merge 2 commits into
auto-refact-devfrom
refactor/iter437-issue-437
Draft

#437: canonical RuntimeRetention owner + log-retention alias + CLAUDE.md carveout#480
loning wants to merge 2 commits into
auto-refact-devfrom
refactor/iter437-issue-437

Conversation

@loning
Copy link
Copy Markdown
Contributor

@loning loning commented Jun 3, 2026

摘要

解决设计 issue #437(r4 consensus:structural)。

  • Old:log-retention 被扩义承载 runtime 生成物/pending-events/stale worktree 清理,operational name 与授权边界漂移。
  • New:新增 canonical RuntimeRetention owner;log-retention 降为一版 compatibility alias;清理覆盖 host-opt-in generated files + pending-events same-inode compaction + planner 证明 stale 的 .worktrees remove/prune;CLAUDE.md 加 .refactor-loop 历史生成物与陈旧 worktree 的有界清理机制 #437 narrow local-GC carveout(无 GitHub/git lifecycle authority)。

范围

新 runtime_retention.py + cli/restart + log-retention alias + CLAUDE.md/SKILL.md carveout + 新 test_runtime_retention.py(+224)+ source-regression。consensus 授权 CLAUDE.md 变更。

Closes #437

🤖 Auto-loop / codex-refactor-loop

⟦AI:AUTO-LOOP⟧

loning added 2 commits June 3, 2026 12:12
…覆盖 generated files+pending-events compaction+stale worktree;CLAUDE.md 加 #437 narrow carveout
@loning loning added crnd:lifecycle:managed loop-managed item crnd:phase:reviewing review-gate reviewers in flight crnd:human:auto auto-advancing, no human needed labels Jun 3, 2026
@loning
Copy link
Copy Markdown
Contributor Author

loning commented Jun 3, 2026

质量 review:approve

从可读性和简单性角度看,这个 PR 没有必须阻塞的问题。RuntimeRetention 入口保持线性,实际删除、pending-events compaction、retention plan 读取、worktree git recheck 都拆成小 helper;旧 log-retention 也只是兼容 alias,没有第二套 owner 或重复清理逻辑。

小备注:runtime retention 的摘要格式在 CLI summary 和 restart logging 里有两处相近拼接,但只有两处且不影响理解,未达到需要抽取的阈值。

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented Jun 3, 2026

架构审查结论:reject。

PR 新增的 #437 carveout 在 CLAUDE.md/SKILL/authorization mirror 里要求 RuntimeRetention 只能删除 planner 证明 eligible 的 generated regular files。但实现里 runtime_retention.py 先调用 _delete_generated_files(repo_real, cutoff),该函数只按目录、后缀、regular-file、mtime 删除 .refactor-loop/{logs,prompts,runs} 下的文件,没有读取或校验 runtime-retention plan。对应行为测试 test_runtime_retention.py::test_deletes_only_host_opt_in_generated_regular_files_older_than_24h 也把“无 planner proof 仍删除旧文件”锁成了期望行为。

这让实际 runtime authority 比新写入的 narrow allowlist 更宽,违反 PR 自己新增的 强类型边界,窄扩展点 / #437 local-GC carveout。

需要修正为:generated file deletion 也必须消费 planner proof,或通过同一共识路径收窄 CLAUDE.md/SKILL/authorization 文案,让授权和实现一致。建议同时补一条行为测试:没有 planner eligibility 的旧 generated file 必须保留。

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented Jun 3, 2026

测试视角结论:reject。

RuntimeRetention 的基础行为测试是有的,包括 opt-in/noop、generated file 删除、same-inode pending-events compaction、CLI alias。但当前缺少 destructive stale-worktree removal 的关键负向覆盖。

具体问题:

  • skills/codex-refactor-loop/scripts/codex_refactor_loop/runtime_retention.py:184 新增 missing/non-directory worktree path 拦截,但 test_runtime_retention.py:121 只覆盖了存在且 clean 的 worktree 被删除。
  • runtime_retention.py:186:189 新增 dirty / local-ahead git recheck 后才允许 git worktree remove,但测试里的 fake runner 只返回 clean status 和 0 ahead,没有证明 dirty output 或 ahead count 会阻止 remove/prune。
  • runtime_retention.py:167 拒绝 absolute path、path traversal、非 .worktrees/<name> plan path,但当前测试只覆盖了一个 false planner proof field,没有覆盖 escaping/malformed path 对 destructive cleanup 的拦截。

建议补 test_runtime_retention.py 行为测试:构造 eligible RuntimeRetentionPlan,分别断言 missing path、dirty status、positive ahead count、absolute/path traversal plan path 时 removed_worktrees == 0,不会调用 git worktree remove,也不会调用 prune。

没有看到本 PR 新增 sleep/skip/manual 测试,也没有看到明显的 assertion loosening。

⟦AI:AUTO-LOOP⟧

loning added a commit that referenced this pull request Jun 3, 2026
根因:reviewer artifact frontmatter 不带 head_sha,_review_evidence_from_artifact 取不到所审 head SHA → 所有 reviewing PR(#480/#473/#402)恒判 WAIT_OR_REDISPATCH:invalid_reviewer_evidence:missing_reviewed_head_sha,且 wakeup-plan 不自动重派 reviewer → review→merge headless 永久卡死(挡住发版)。

修法(codex hotfix worker 实现,controller 验证后提交):
- controller_actions 派 reviewer 时取 headRefOid,缺则 fail-closed,注入权威 HEAD_SHA 进 rendered prompt。
- reviewer-{architect,tests,quality}.md frontmatter 写 head_sha: ${HEAD_SHA}。
- wakeup_runner._review_head_sha_for:artifact 缺 head_sha 时从 controller-rendered prompt/log 回收(不依赖 worker 自报,避免 markerless 覆辙);live-head 陈旧判定与 merge 真值表语义不变。
- wakeup_plan 为 missing/stale reviewer head 的 OPEN reviewing PR 投射可执行 dispatch_reviewers 自愈动作。

验证:controller 独立重跑 test_wakeup_runner+review_gate+wakeup_plan+controller_actions 293 通过、marker/prompt 合同 30 通过;review-gate 安全语义(stale head 仍不 merge)由 13 项 review-gate 测试锁住。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
loning added a commit that referenced this pull request Jun 3, 2026
…merge 闭环

承接 r7:r7 让 reviewer 证据绑定 head_sha,但 wakeup_plan 投射的 review-evidence-redispatch 自愈动作被 closed-action-projection finalizer 强制 status_only(其 kind 不在 EXECUTABLE_ACTION_KINDS),runner 永不应用 → #480/#473/#402 缺 head 的 review 证据无法自动重派 → review_gate 恒 WAIT_OR_REDISPATCH → 并发耗干到 0。

修法(codex hotfix worker 实现,controller 验证后提交):
- wakeup_plan EXECUTABLE_ACTION_KINDS 加 review-evidence-redispatch,finalizer 保留 runner authority 不再强制 status_only。
- controller_actions.dispatch_reviewers 读 stale_review_roles 只重派陈旧角色,且 _pending_review_spawn_exists 跳过已有在飞 dispatch-reviewers:<pr>:<role>:r1 intent(幂等不双派);仍走 r7 的 HEAD_SHA 注入,使重派 reviewer 的新证据 head-bound。
- merge-gate 真值表不变,仅让既有自愈动作可执行 + 定向到陈旧角色。

验证:controller 独立重跑 test_wakeup_plan+wakeup_runner+review_gate+controller_actions 295 通过。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
loning added a commit that referenced this pull request Jun 3, 2026
…ady PR headless merge,backlog 能 drain

根因(已核实):wakeup_plan 每 tick 把 SPAWN actions(implement intent + design-consensus #495/#496/#490/#491/#418,index 0-5)排在 lifecycle review_gate(#480/#473/#402,index 6-8)之前;run_once 旧逻辑 `if applied_spawns>0 and not is_spawn_action: break` → 只要派了任一 spawn,首个 lifecycle 即 break 整 tick。design-consensus 几乎总有 spawn 活 → review_gate/merge 永远 starve → #473(approve/approve/comment → MERGE_WITH_COMMENTS,MERGEABLE+CI 绿)永不 merge,active 数永不下降。

修法(最小,核心 dispatch loop):
- 引入 consumes_spawn_budget = is_spawn_action or _uses_spawn_budget(action);超 budget 时 `continue`(不 break)以便仍能抵达后续 drain-only lifecycle。
- _uses_spawn_budget:dispatch_reviewers=True、review_gate 仅当决策为 FIX(会派 fix worker)=True;否则 review_gate(MERGE/MERGE_WITH_COMMENTS)、close 等 drain-only=False → 不占 spawn budget、floor 填满后仍被评估执行。
- 保留 r6 的 spawn launch-failure break/retry 与 dispatch_design_consensus no-intents skip-and-continue;真值表/head-binding/CI-green/mergeable 安全语义不变。

结果:每 tick 既用 spawn 填满 floor,又评估 merge/close 等 drain-only lifecycle,backlog 能 drain。

验证:controller 独立重跑 test_wakeup_runner+review_gate+review_gate_e2e+wakeup_plan+controller_actions+pr_checks 309 通过;新增 test_wakeup_runner_lifecycle_review_gate_not_starved_after_spawn_batch。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
loning added a commit that referenced this pull request Jun 3, 2026
… malformed — review→merge 根因

根因(实测确认):_run_command 对所有 gh 命令在 full[1:1] 插 --repo(子命令之前)。gh 不接受 --repo 作 pre-subcommand 全局 flag,且 gh api 根本不吃 --repo(repo 在 URL):`gh --repo O/R api repos/O/R/pulls/473` → rc=1 "unknown flag: --repo"。于是 wakeup-runner 的每个 gh 调用都 malformed:CI 读(PrChecksProjection(runner=_run_command) 的 gh api pulls/check-runs)→ ci_unavailable:pull_api_failure;mergeability(gh pr view)→ mergeability_unavailable;live-state 等同理。→ review gate 永远读不到 CI/mergeable → #473(approve/approve/comment=MERGE_WITH_COMMENTS,绿)、#402#480 永不 headless 落地。r11 的 retry 只是重复同一 malformed 命令。直连 PrChecksProjection()/直连 gh 用的是 plain default runner(无注入)所以正常,掩盖了 bug。

最小修法:_run_command 仅对 `gh pr`/`gh issue` 注入 --repo,且放在子命令(及其 verb)之后的合法位置;`gh api` 完全不动;绝不 pre-subcommand 注入;已存在 --repo 则不重复。

验证:controller 独立重跑 test_wakeup_runner+review_gate+review_gate_e2e+pr_checks+wakeup_plan+controller_actions 312 通过;新增 argv-shape 测试 + e2e(stub subprocess.run 拒绝 malformed `gh --repo ... api`,ready PR 仍 merge)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@loning
Copy link
Copy Markdown
Contributor Author

loning commented Jun 3, 2026

🤖 Quality review approves PR 480

TL;DR

  • 这是什么: 我按 readability、命名、简单性、死代码和 refactor self-doc policy 检查了 PR 480。
  • 结论是什么: approve, 成为唯一主实现, 只是同 handler 的兼容别名, 没看到质量阻塞问题。
  • controller 下一步: 可把这条 quality 结果纳入 review truth table, 不需要 maintainer 处理 quality 项。

详细说明

重点看了 这个 skill-private cleanup 的主实现、 这个旧命令兼容入口、 的命令注册, 以及 的调用点。新代码把文件清理、pending-events 原地压缩、planner-proven worktree 清理拆成私有 helper, 每个函数尺寸和分支数都在可读范围内。

只是兼容别名, 没保留第二套清理逻辑; 把 注册为 canonical command, 复用同一个 handler; 在 daemon freshness checks 前调用 。这些路径都有对应测试锁住, 没发现新死代码、单实现多余抽象、无意义注释或离题改动。默认 , diff 里也没有新增 source-code 自文档注释。


📎 完整 codex 原始输出(存档备查)

pr: 480
role: quality
head_sha: 9c05257
verdict: approve

Verdict

Approve: the RuntimeRetention split is readable, focused, reachable from both canonical and compatibility command paths, and I found no quality regressions under the default none refactor self-doc policy.

Evidence

  • skills/codex-refactor-loop/scripts/codex_refactor_loop/runtime_retention.py:42 keeps the public entry point as retain_runtime(...) with a small orchestration body and private helpers for file deletion, pending-event compaction, planner parsing, path eligibility, and git verification; no single new method crosses the preferred size/branch threshold.
  • skills/codex-refactor-loop/scripts/codex_refactor_loop/retention.py:1 is a minimal compatibility alias that delegates to runtime_retention_main, so the legacy log-retention surface does not grow a second retention implementation.
  • skills/codex-refactor-loop/scripts/codex_refactor_loop/cli.py:170 registers runtime-retention as canonical and log-retention as the same-handler alias, and test_cli_command_router.py:375 asserts the handler and authority remain identical.
  • skills/codex-refactor-loop/scripts/codex_refactor_loop/restart.py:345 calls retain_runtime(...) before daemon freshness checks, while test_restart_daemons.py:85 and test_runtime_retention.py:215 keep that call path covered.
  • skills/codex-refactor-loop/scripts/test_log_retention.py:37 narrows the legacy test to alias behavior instead of preserving dead retain_logs expectations.
  • git diff --check origin/auto-refact-dev...origin/refactor/iter437-issue-437 returned clean, and the diff adds no new source-code Refactor (...) / Old pattern / New principle comments outside the documented/tested policy surfaces.

⟦AI:AUTO-LOOP⟧
REVIEW_DONE:480:quality:approve

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented Jun 3, 2026

🤖 架构审查结论: reject

TL;DR


详细说明

RuntimeRetention 是本 PR 新增的运行态清理 owner,负责清理 skill-private 的 .refactor-loop 生成物和 stale worktree。问题在于 PR 自己写入的 CLAUDE.md #437 carveout 说 .refactor-loop/{logs,prompts,runs} 内 generated regular files 只有在 planner 证明 eligible 后才能删除,但 runtime_retention.py 当前按目录、后缀、mtime 直接删旧文件。

具体证据:skills/codex-refactor-loop/scripts/codex_refactor_loop/runtime_retention.py:56 先调用 _delete_generated_files(...),而 planner artifact .refactor-loop/state/runtime-retention-plan.json 只在后面的 worktree cleanup 分支读取。runtime_retention.py:67runtime_retention.py:94logs/prompts/runs 里的 .json/.log/.md/.txt old regular file 直接 unlink。这和 CLAUDE.md:40#437 文字不一致:该条只授权删除 planner 证明 eligible 的 generated regular files。架构上这是 blocking mismatch,因为 controller-runtime 例外必须 narrow allowlist + durable artifact 双锚定,不能让代码路径比授权文本更宽。

修复路径很窄:让 generated-file cleanup 也消费 durable planner proof,并补测试证明“old generated file without planner proof is kept”;或者重新收窄/改写 #437 授权文本,但那需要和当前 carveout 同等级的共识与 source-regression。


📎 完整 codex 原始输出(存档备查)

pr: 480
role: architect
head_sha: 9c05257
verdict: reject

Verdict

reject - RuntimeRetention deletes generated .refactor-loop/{logs,prompts,runs} files by age/suffix without the planner eligibility proof required by the new #437 carveout.

Evidence

  • skills/codex-refactor-loop/scripts/codex_refactor_loop/runtime_retention.py:56-59 calls _delete_generated_files(repo_real, cutoff) before reading .refactor-loop/state/runtime-retention-plan.json; runtime_retention.py:67-94 then deletes any old regular file in logs, prompts, or runs with suffix .json, .log, .md, or .txt via path.unlink(missing_ok=True). This violates the PR's own CLAUDE.md:40 .refactor-loop 历史生成物与陈旧 worktree 的有界清理机制 #437 clause: "#437 是唯一 skill-private runtime-retention local-GC carveout:active-controller owner 的 checked-in RuntimeRetentionhelper 只可在 host opt-in 后删除$REPO_ROOT/.refactor-loop/{logs,prompts,runs}内 planner 证明 eligible 的 generated regular files、same-inode compact$REPO_ROOT/.refactor-loop/.controller-pending-events.log、以及对 $REPO_ROOT/.worktrees/中 no in-flight/no OPEN issue-or-PR/no dirty/no local-ahead/merged-or-missing-safe 的 stale worktree 运行git worktree remove git worktree prune;允许 GitHub only read OPEN issue/PR/head state;允许 git only read projection plus git worktree remove/git worktree prune;禁止 git fetch、branch deletion、commit/push/reset/rebase/merge/tag、issue/PR create/edit/close/merge、label mutation、tag/release、archive/index durable fact source、generic lifecycle actor。"
  • The same mismatch appears in the skill contract: skills/codex-refactor-loop/SKILL.md:309 says "only when $RUNTIME_RETENTION_ENABLE=true, delete planner-eligible generated regular files under $REPO_ROOT/.refactor-loop/{logs,prompts,runs} older than the retention TTL", but runtime_retention.py:71-89 has no per-file planner eligibility input or proof check. This also regresses CLAUDE.md:43: "变更必须可验证:行为约束必须落到机械验证手段(behavior test / source-regression test / 段落 lint);仅靠\"agent 应该记得\"承载的约束视为未落地。" The added behavior test test_runtime_retention.py locks the broad age/suffix deletion behavior instead of the stated planner-proof behavior.

What would change your verdict

Make generated-file cleanup consume a durable planner artifact or equivalent explicit plan/proof for .refactor-loop/{logs,prompts,runs} entries before unlinking, and update behavior tests/source-regression so an old generated file without planner eligibility proof is kept. Alternatively, narrow the #437 CLAUDE/SKILL/authorization text to honestly authorize age/suffix-based generated-file deletion, but that would need the same repo-level narrow-allowlist discipline and consensus basis as the current carveout.

⟦AI:AUTO-LOOP⟧
REVIEW_DONE:480:architect:reject

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented Jun 3, 2026

🤖 Quality review approves PR 480

TL;DR

  • 这是什么: 我按 readability、命名、简单性、死代码和 refactor self-doc policy 检查了 PR 480。
  • 结论是什么: approve, RuntimeRetention 是运行时清理的唯一主实现, log-retention 只是同 handler 的兼容别名。
  • controller 下一步: 可把这条 quality 结果纳入 review truth table, 不需要 maintainer 处理 quality 项。

详细说明

重点看了 runtime_retention.py 这个 skill-private cleanup 的主实现、retention.py 这个旧命令兼容入口、cli.py 的命令注册, 以及 restart.py 的调用点。新代码把文件清理、pending-events 原地压缩、planner-proven worktree 清理拆成私有 helper, 每个函数尺寸和分支数都在可读范围内。

retention.py:1 只是兼容别名, 没保留第二套清理逻辑; cli.py:170runtime-retention 注册为 canonical command, log-retention 复用同一个 handler; restart.py:345 在 daemon freshness checks 前调用 retain_runtime(...)。这些路径都有对应测试锁住, 没发现新死代码、单实现多余抽象、无意义注释或离题改动。默认 HOST_REFACTOR_COMMENT_POLICY=none, diff 里也没有新增 source-code Refactor (...) 自文档注释。


📎 完整 codex 原始输出(存档备查)

pr: 480
role: quality
head_sha: 9c05257
verdict: approve

Verdict

Approve: the RuntimeRetention split is readable, focused, reachable from both canonical and compatibility command paths, and I found no quality regressions under the default none refactor self-doc policy.

Evidence

  • skills/codex-refactor-loop/scripts/codex_refactor_loop/runtime_retention.py:42 keeps the public entry point as retain_runtime(...) with a small orchestration body and private helpers for file deletion, pending-event compaction, planner parsing, path eligibility, and git verification; no single new method crosses the preferred size/branch threshold.
  • skills/codex-refactor-loop/scripts/codex_refactor_loop/retention.py:1 is a minimal compatibility alias that delegates to runtime_retention_main, so the legacy log-retention surface does not grow a second retention implementation.
  • skills/codex-refactor-loop/scripts/codex_refactor_loop/cli.py:170 registers runtime-retention as canonical and log-retention as the same-handler alias, and test_cli_command_router.py:375 asserts the handler and authority remain identical.
  • skills/codex-refactor-loop/scripts/codex_refactor_loop/restart.py:345 calls retain_runtime(...) before daemon freshness checks, while test_restart_daemons.py:85 and test_runtime_retention.py:215 keep that call path covered.
  • skills/codex-refactor-loop/scripts/test_log_retention.py:37 narrows the legacy test to alias behavior instead of preserving dead retain_logs expectations.
  • git diff --check origin/auto-refact-dev...origin/refactor/iter437-issue-437 returned clean, and the diff adds no new source-code Refactor (...) / Old pattern / New principle comments outside the documented/tested policy surfaces.

⟦AI:AUTO-LOOP⟧
REVIEW_DONE:480:quality:approve

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented Jun 3, 2026

🤖 Tests review: reject,RuntimeRetention 删除保护缺测试

TL;DR

  • 这是什么: PR 480 的 tests 角度独立 review。
  • 现在到哪一步 / 结论是什么: reject,因为新 RuntimeRetention 本地清理逻辑缺少 dirty/ahead 保护分支测试。
  • 需要 maintainer 做什么 OR controller 下一步: controller 应派 fix worker 补齐这些删除前 fail-closed 行为测试。

详细说明

RuntimeRetention 是本 PR 新增的 skill-private runtime cleanup owner,会在 host opt-in 后删除 .refactor-loop 生成物并移除 stale worktree。现有测试覆盖了干净 worktree 的移除路径和 planner proof 为 false 的跳过路径,但没有覆盖真正阻止破坏性删除的 git recheck 分支: git status --porcelain 有输出或失败时必须跳过,git rev-list --count @{upstream}..HEAD 返回正数时也必须跳过。

这属于 net-new destructive local-GC authority 的覆盖缺口,不是 nice-to-have。目标修复很小: 在 test_runtime_retention.py 增加 planner-eligible worktree 用例,分别模拟 dirty、status failure、local-ahead,并断言 removed_worktrees == 0,且没有对该 worktree 调 git worktree remove / git worktree prune


📎 完整 codex 原始输出(存档备查)
---
pr: 480
role: tests
head_sha: 9c052577d132e72c1acc0642a6192a09c488c220
verdict: reject
---

## Verdict
Reject: the new RuntimeRetention tests cover the happy worktree-removal path, but they do not cover the dirty/ahead git recheck branches that prevent destructive `git worktree remove`.

## Evidence
- `skills/codex-refactor-loop/scripts/codex_refactor_loop/runtime_retention.py:186` and `:189` add the real safety rechecks before deletion: `git status --porcelain` must be clean and `git rev-list --count @{upstream}..HEAD` must not report local-ahead commits. These are net-new branches on a destructive cleanup path.
- `skills/codex-refactor-loop/scripts/test_runtime_retention.py:121` only exercises one eligible clean worktree and one planner-proof-false skip. Its fake runner always returns clean status and `0` ahead for the eligible worktree, so no test proves RuntimeRetention skips `git worktree remove` when the local recheck reports dirty files or ahead commits.
- Positive coverage is otherwise present: generated-file TTL deletion, symlink/FIFO preservation, same-inode pending-event compaction, host opt-in/noop behavior, CLI summary, log-retention aliasing, command authority source-regression, and runtime-exception source-regression are covered. Targeted PR-head verification passed with `cd skills/codex-refactor-loop/scripts && python3 -m unittest test_runtime_retention.py test_log_retention.py test_cli_command_router.py test_runtime_exception_authorization_sources.py` (`68 tests`, OK).

## What would change your verdict (only if comment or reject)
Add behavior tests in `test_runtime_retention.py` that create planner-eligible stale worktree entries and assert `git worktree remove` is not invoked when `git status --porcelain` returns output, when the status command fails, when `rev-list --count @{upstream}..HEAD` returns a positive count, and ideally when the worktree path is missing. These should assert `removed_worktrees == 0` and no prune/remove commands were issued for the blocked worktree.

⟦AI:AUTO-LOOP⟧
REVIEW_DONE:480:tests:reject

⟦AI:AUTO-LOOP⟧

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

crnd:human:auto auto-advancing, no human needed crnd:lifecycle:managed loop-managed item crnd:phase:reviewing review-gate reviewers in flight

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant