fix(ack): keep coordinator loop active after dispatch
This commit is contained in:
+2
-1
@@ -83,7 +83,8 @@ python3 <ack-skill-dir>/scripts/validate_agents.py .pouch/ack/agents.yaml
|
||||
1. `.pouch/ack` 不存在:停止并建议先 `/ack` 初始化;不要静默初始化。
|
||||
2. 读 `project.md`;若存在 `agents.yaml`,先用 `validate_agents.py` 校验并读取其 `defaults`;用 `select_tasks.py`(已知任务加 `--task-id`)和 `select_knowledge.py` 取当前任务相关 `active` 条目。超预算时缩小选择,不回退为完整 yaml。
|
||||
3. 新需求或尚未确认的计划:读 [kickoff.md](references/kickoff.md)。修 bug 写短问题说明、复现和可观测验收,不写大 PRD。
|
||||
4. 用户已确认后按 [closed-loop.md](references/closed-loop.md) 执行。当前会话担任 Coordinator,不亲自写代码或跑测试;worker profile 按 `agents.yaml`(若存在)否则按任务板配置选择。
|
||||
4. 用户已确认后,先读取并按 [closed-loop.md](references/closed-loop.md) 执行;使用 Orca 时同时读取 [orca-adapter.md](references/orca-adapter.md)。当前会话担任 Coordinator,不亲自写代码或跑测试;worker profile 按 `agents.yaml`(若存在)否则按任务板配置选择。
|
||||
这不是 fire-and-forget:Coordinator 不得在 `launch` / `dispatch` 后只回复“已派发”并结束当前会话。每个任务都必须在同一轮持续执行 `check --wait` 与 `worker_probe.py`,直到 Developer 回报 `worker_done` 或 `escalation`;随后写回 `fixed_by_dev`,主动派发 Test,并继续等待 `retest_result`。只有完成 Test 终检、重试/`leftover` 决策、回归决定和 worker 回收后,才可以结束本轮 ACK。
|
||||
5. 存在 `project.bugIntake` 时先完成「飞书收件」。创建或更换 worker 走「启动 worker」。若 `intents.testEnvironment` 已启用,派 Test 前先走「运行测试环境」。
|
||||
6. 知识 `verification.ref` 只经 `run_verification.py`。不把 `worker_done` 或 Test 自报成功当作完成。环境失败先有界恢复并报告 `userAction`;三轮产品失败记 `leftover`。
|
||||
7. 任务 `verified` 且改了可见行为或 API 后,转入「运行回归」收获用例。若本次计划含交付,再走对应交付模式;默认最多到 `validation_ready` 或 `review_ready`。
|
||||
|
||||
@@ -121,6 +121,30 @@ class AckSkillContentTests(unittest.TestCase):
|
||||
self.assertIn("validation_ready", delivery)
|
||||
self.assertIn("访问地址和用户下一步", delivery)
|
||||
|
||||
def test_coordinator_keeps_looping_and_chains_developer_to_test(self) -> None:
|
||||
skill = (REPO_ROOT / "skills" / "ack" / "SKILL.md").read_text(
|
||||
encoding="utf-8"
|
||||
)
|
||||
|
||||
required = (
|
||||
"这不是 fire-and-forget",
|
||||
"不得在 `launch` / `dispatch` 后只回复“已派发”并结束当前会话",
|
||||
"`check --wait`",
|
||||
"`worker_probe.py`",
|
||||
"Developer 回报 `worker_done` 或 `escalation`",
|
||||
"写回 `fixed_by_dev`",
|
||||
"主动派发 Test",
|
||||
"继续等待 `retest_result`",
|
||||
)
|
||||
for expected in required:
|
||||
self.assertIn(expected, skill)
|
||||
|
||||
dispatch_pos = skill.index("主动派发 Test")
|
||||
dev_done_pos = skill.index("Developer 回报 `worker_done` 或 `escalation`")
|
||||
test_done_pos = skill.index("继续等待 `retest_result`")
|
||||
self.assertLess(dev_done_pos, dispatch_pos)
|
||||
self.assertLess(dispatch_pos, test_done_pos)
|
||||
|
||||
def test_ack_knowledge_resources_and_version_are_present(self) -> None:
|
||||
ack_dir = REPO_ROOT / "skills" / "ack"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user