- scripts/nightly/plan.py: dependency-ordered plan from cleanup report + CURRENT + registry (integrate candidates -> active tasks -> cleanup-ready) - scripts/nightly/advance.py: orchestrator with reentry lock, daemon-health preflight, headless cursor-agent advancement under agentctl leases, queue-drain wait, env:dev rebuild + /health /ready on tip change, no-content-loss cleanup verification, daily report draft + archival - scripts/nightly-advance.sh: cron entrypoint - tests: 9 unit cases for plan builder
3.4 KiB
3.4 KiB
夜间自动推进任务(nightly-advance-automation-2026-09-28)
- status: in_progress
- owner: Cursor
- mutex: nightly-advance
- base_dev_sha:
650703c5c2 - write_scope: scripts/nightly/、scripts/nightly-advance.sh、scripts/tests/test_nightly_advance.py、.doc/ops/short-term/2026-09-28-nightly-advance-automation.md
- authorization_ref: 用户 2026-09-28 会话("每天晚上 3 点 10 分,推进项目.worktree 目录下的所有分支任务……"及后续清理语义修正);Agents Window 不可用后用户同意本地 cron 替代方案
用户目标
每日 03:10 自动推进 .worktrees/ 下所有活跃分支任务至彻底完成,合入 dev,验证无内容丢失后删除对应任务目录,更新 dev 服务至最新,产出每日夜间自动化报告。
用户裁决(AskQuestion 记录)
- 推进范围:所有活跃任务(不分 owner;Cursor/pi/Codex/Cline)。
- 清理语义(用户后续修正):任务彻底完成、合入 dev、删除目录不丢内容且不影响系统 → 删除目录与分支;删除被拒时保留 cleanup=pending 并报告原因,禁止
--force/-D。
方案
scripts/nightly/plan.py:读 cleanup report + CURRENT + registry,按依赖排序(integrate 候选 → 活跃任务 → 可清理项)。scripts/nightly/advance.py:编排器。预检(daemon 健康、互斥锁、冻结 dev tip)→ 计划 → cursor-agent 无头推进(写走agentctl with)→ daemon ff-only 合入 → dev tip 变化时env:dev租约 rebuild +/health/ready→ 清理验证+普通删除 → 报告草稿落 run 目录。scripts/nightly-advance.sh:cron 入口(PATH 注入,日志.tmp/nightly/entry-*.log)。- cron:
10 3 * * *(用户级 crontab,与现有 jev-service watchdog 同模式)。 - run 目录:
.tmp/nightly/<stamp>/(gitignored;data/root 属主不可写)。 - 每日报告:夜间最后一棒 cursor-agent 日报任务把 run 目录草稿正式化并归档
.doc/test-reports/(agentctl 租约提交),按 test-reports-standard 命名YYYY-MM-DD-nightly-advance-test-report.md。
硬边界
- 写操作一律
agentctl with;裸 git commit 被 pre-commit hook 拒绝。 - 合入只走
validate+queue enqueue(daemon--ff-only)。 - dev 服务更新走
with --resource env:dev+env-service.sh dev rebuild;不碰 all/test/main。 - 清理只用
agent-worktree.sh remove --delete-branch(普通删除);拒绝即保留 pending。 - 不 push(用户未要求);报告真实验证,无 stub 冒充。
验证
- 单元:
python3 -B -m unittest discover -s scripts/tests -p 'test_nightly_advance.py'(9 用例:CURRENT 解析、排序、phase 分类、registry 回退、CLI cap、自排除)。 - 真实链路:dry 模式(--skip-agent)端到端:预检锁、plan 13 项、清理拦截未合入分支、报告草稿落盘(run 20260928T063326Z)。
- 无头执行器冒烟:cursor-agent --print ask 模式回
NIGHTLY-OK;写探测PROBE-WRITE-OK。 - 本报告任务自身从 plan 排除(防递归)。
五态(收口时更新)
- review_state: pending
- integration_state: not_started
- deployment: not_required(工程工具变更,无需重建产品容器)
- cleanup: pending(本任务自身 worktree 由独立维护者复查后清理)
- remote_sync: not_requested