FFFFFF.F..FFFF.FFFF [100%] =================================== FAILURES =================================== _ test_M1_recorded_and_pushed_once_without_task_mutation_or_github_read[execution_server0] _ f = async def test_M1_recorded_and_pushed_once_without_task_mutation_or_github_read(f): roles = await _org(f, responsible="Worker01") await _published(f) asked = len(GITHUB.asked) await _follow(f) > assert (await _event_types(f)).count("task_ci_passed") == 1, "green publication must push task_ci_passed" E AssertionError: green publication must push task_ci_passed E assert 0 == 1 E + where 0 = ('task_ci_passed') E + where = ['task_started', 'task_completed'].count tests/test_merge_ready.py:138: AssertionError ------------------------------ Captured log setup ------------------------------ WARNING heyaira.client_source:client_source.py:165 client_source_unattributed: a proxied request carried no public client address _____ test_M2a_coordinator_is_loaded_by_mcp_and_bridge[execution_server0] ______ f = async def test_M2a_coordinator_is_loaded_by_mcp_and_bridge(f): roles = await _org(f, coordinator="DevOps") await _green(f) > assert len(await _ready_entries(f)) == 1, "green publication must record readiness" E AssertionError: green publication must record readiness E assert 0 == 1 E + where 0 = len([]) tests/test_merge_ready.py:165: AssertionError _________ test_M2b_owner_is_loaded_by_both_readers[execution_server0] __________ f = async def test_M2b_owner_is_loaded_by_both_readers(f): roles = await _org(f, owner="Synthetic owner") await _green(f) for organization in ((await _org_of(f))["organization"], (await _page(f, status="done"))[0]["organization"]): > assert organization["next_actor"]["assignment_id"] == str(roles["owner"]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E TypeError: 'NoneType' object is not subscriptable tests/test_merge_ready.py:177: TypeError ________ test_M2c_no_assignment_falls_back_to_owner[execution_server0] _________ f = async def test_M2c_no_assignment_falls_back_to_owner(f): await _green(f) result = await _org_of(f) > assert result["workflow"]["merge_waiting"]["recipient"] is None ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E KeyError: 'merge_waiting' tests/test_merge_ready.py:183: KeyError _ test_M2d_ended_responsible_falls_back_to_coordinator_at_read_time[execution_server0] _ f = async def test_M2d_ended_responsible_falls_back_to_coordinator_at_read_time(f): roles = await _org(f, responsible="Worker01", coordinator="DevOps") await _green(f) await f.pool.execute("UPDATE project_role_assignments SET ends_at=now()-interval '1 minute',starts_at=now()-interval '1 hour' WHERE id=$1", roles["executor"]) result = await _org_of(f) > assert result["workflow"]["merge_waiting"]["recipient"]["id"] == str(roles["coordinator"]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E KeyError: 'merge_waiting' tests/test_merge_ready.py:194: KeyError _ test_M2e_override_and_waiting_reason_agree_on_all_three_bridge_paths[execution_server0] _ f = async def test_M2e_override_and_waiting_reason_agree_on_all_three_bridge_paths(f): roles = await _org(f, responsible="Worker01", coordinator="DevOps", owner="Override") await _green(f) await f.pool.execute("UPDATE tasks SET next_actor_override_assignment_id=$2,waiting_reason='Synthetic custom reason' WHERE id=$1", f.task_id, roles["owner"]) result = await _org_of(f) selected = await _page(f, assignment_id=str(roles["owner"])) > assert [t["id"] for t in selected] == [str(f.task_id)] E AssertionError: assert [] == ['c9233f79-aa...048802b4f811'] E E Right contains one more item: 'c9233f79-aaf4-439c-bb73-048802b4f811' E Use -v to get more diff tests/test_merge_ready.py:205: AssertionError _ test_M3_restart_snapshot_filters_readiness_before_its_limit[execution_server0] _ f = async def test_M3_restart_snapshot_filters_readiness_before_its_limit(f): await _org(f, responsible="Worker01") await _green(f) snapshot = await _snapshot(f) > assert "merge_waiting" in snapshot, "restarted session must expose merge_waiting" E AssertionError: restarted session must expose merge_waiting E assert 'merge_waiting' in {'project': {'id': 'c4f1c02d-8e30-4d08-bbce-8780bd6abc90', 'name': 'Synthetic execution', 'slug': 'task-version-5b92ff...lse}, 'decisions': {'in_force': [], 'attention': [], 'outside_index': 0, 'truncated': False, ...}, 'memories': [], ...} tests/test_merge_ready.py:231: AssertionError _ test_M5_readiness_disappears_when_direct_ci_reaction_knows_merged[execution_server0] _ f = async def test_M5_readiness_disappears_when_direct_ci_reaction_knows_merged(f): await _merged_from_run(f) result = await _org_of(f) > assert result["organization"]["stage"] == "done" and result["workflow"]["merge_waiting"] is None ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E KeyError: 'merge_waiting' tests/test_merge_ready.py:275: KeyError _ test_M6a_newest_failure_removes_readiness_and_follow_up_corrects[execution_server0] _ f = async def test_M6a_newest_failure_removes_readiness_and_follow_up_corrects(f): await _green(f) await _webhook(f, FAILED_RERUN) result = await _org_of(f) > assert "merge_waiting" in result["workflow"], "task_get must expose readiness, including null" E AssertionError: task_get must expose readiness, including null E assert 'merge_waiting' in {'task_id': '2ca3f5c6-8423-485a-a6f9-c52be0b96da0', 'id': 'c4174f36-bec0-4e68-9704-f9c7ec6e8690', 'revision': 1, 'phase': 'done', ...} tests/test_merge_ready.py:283: AssertionError _ test_M6b_cancelled_then_passing_rerun_restores_without_second_push[execution_server0] _ f = async def test_M6b_cancelled_then_passing_rerun_restores_without_second_push(f): await _green(f) await _webhook(f, CANCELLED_RERUN) result = await _org_of(f) > assert result["workflow"]["merge_waiting"] is None and result["organization"]["stage"] == "done" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E KeyError: 'merge_waiting' tests/test_merge_ready.py:297: KeyError _ test_M7_all_workflows_must_conclude_and_incomplete_pages_never_record[execution_server0] _ f = async def test_M7_all_workflows_must_conclude_and_incomplete_pages_never_record(f): await _published(f) lint = {**PASSED, "id": 1401, "workflow_id": 2, "name": "Lint", "status": "in_progress", "conclusion": None} f.runs.runs = [PASSED, lint] await _follow(f) assert (await _polls(f))["ci_poll_after"] is not None and (await _polls(f))["ci_polls"] == 1 assert not await _ready_entries(f) and not await _passed_events(f) f.runs.runs = [PASSED, {**lint, "status": "completed", "conclusion": "success", "updated_at": "2026-10-05T10:30:00Z"}] await _follow(f) entries = await _ready_entries(f) > assert len(entries) == 1, "all completed green workflows must record readiness" E AssertionError: all completed green workflows must record readiness E assert 0 == 1 E + where 0 = len([]) tests/test_merge_ready.py:315: AssertionError _ test_M8_infrastructure_uses_last_poll_then_passing_rerun_restores[execution_server0] _ f = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x10d423500> async def test_M8_infrastructure_uses_last_poll_then_passing_rerun_restores(f, monkeypatch): await _green(f) failed = {**FAILED_RERUN, "run_attempt": 2} calls = [] async def jobs(**kw): calls.append((kw["run_id"], kw["attempt"])) return [dict(id=7, name="shard", conclusion="failure", steps=[dict(name="Initialize containers", conclusion="failure")])], True monkeypatch.setattr(GITHUB, "list_run_attempt_jobs", jobs, raising=False) await _webhook(f, failed) assert (await _polls(f))["ci_polls"] == workflow.CI_POLLS - 1 await _follow(f) classification = await f.pool.fetchrow("SELECT * FROM task_workflow_ci_classifications WHERE workflow_id=$1", UUID((await f.get())["id"])) assert classification["kind"] == "infrastructure" and classification["run_id"] == 1400 assert classification["updated_at"] == "2026-10-05T10:30:00+00:00" and calls == [(1400, 2)] w = await f.get() assert w["work_count"] == 1 and len(_stages(w, "ci_unfinished")) == 1 assert (await _polls(f))["ci_poll_after"] is None and (await _event_types(f)).count("task_checks_unfinished") == 1 result = await _org_of(f) > assert result["organization"]["stage"] == "done" and result["workflow"]["merge_waiting"] is None ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E KeyError: 'merge_waiting' tests/test_merge_ready.py:345: KeyError __ test_M9_corrected_candidate_has_its_own_entry_and_push[execution_server0] ___ f = async def test_M9_corrected_candidate_has_its_own_entry_and_push(f): await _green(f) await _webhook(f, FAILED_RERUN) await _follow(f) assert (await f.get())["phase"] == "queued" worker, done = await f.ready() criteria = [dict(criterion_id=c["id"], outcome="pass", evidence_path="evidence/tests.txt", feedback="Synthetic correction") for c in f.criteria] await f.event(worker, {**done, "result_commit": CORRECTED, "criterion_results": criteria}) verify, finish = await f.ready() await f.event(verify, {**finish, "result_commit": CORRECTED, "verdict": await f.verdict(verify)}) GITHUB.answer = _open(CORRECTED) assert (await _publish(f, worker, CORRECTED)).status_code == 200 f.runs.runs = [{**PASSED, "head_sha": CORRECTED, "id": 1500}] await _follow(f) events = await _passed_events(f) > assert len(events) == 2, "each corrected candidate must get its own ready push" E AssertionError: each corrected candidate must get its own ready push E assert 0 == 2 E + where 0 = len([]) tests/test_merge_ready.py:367: AssertionError _______ test_M10_two_supervisors_record_and_push_once[execution_server0] _______ f = async def test_M10_two_supervisors_record_and_push_once(f): await _published(f) f.runs.delay = 0.2 await _due(f) await asyncio.gather(workflow.follow_ci(f.pool, GITHUB), workflow.follow_ci(f.pool, GITHUB)) > assert len(await _ready_entries(f)) == len(await _passed_events(f)) == 1 E assert 0 == 1 E + where 0 = len([]) tests/test_merge_ready.py:379: AssertionError ________ test_M11_readiness_expires_after_seven_days[execution_server0] ________ f = async def test_M11_readiness_expires_after_seven_days(f): await _green(f) await f.pool.execute("""UPDATE task_workflow_events SET created_at=created_at-interval '8 days' WHERE workflow_id=$1 AND stage='ready_to_merge'""", UUID((await f.get())["id"])) result = await _org_of(f) > assert result["workflow"]["merge_waiting"] is None and result["organization"]["stage"] == "done" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E KeyError: 'merge_waiting' tests/test_merge_ready.py:388: KeyError =========================== short test summary info ============================ FAILED tests/test_merge_ready.py::test_M1_recorded_and_pushed_once_without_task_mutation_or_github_read[execution_server0] FAILED tests/test_merge_ready.py::test_M2a_coordinator_is_loaded_by_mcp_and_bridge[execution_server0] FAILED tests/test_merge_ready.py::test_M2b_owner_is_loaded_by_both_readers[execution_server0] FAILED tests/test_merge_ready.py::test_M2c_no_assignment_falls_back_to_owner[execution_server0] FAILED tests/test_merge_ready.py::test_M2d_ended_responsible_falls_back_to_coordinator_at_read_time[execution_server0] FAILED tests/test_merge_ready.py::test_M2e_override_and_waiting_reason_agree_on_all_three_bridge_paths[execution_server0] FAILED tests/test_merge_ready.py::test_M3_restart_snapshot_filters_readiness_before_its_limit[execution_server0] FAILED tests/test_merge_ready.py::test_M5_readiness_disappears_when_direct_ci_reaction_knows_merged[execution_server0] FAILED tests/test_merge_ready.py::test_M6a_newest_failure_removes_readiness_and_follow_up_corrects[execution_server0] FAILED tests/test_merge_ready.py::test_M6b_cancelled_then_passing_rerun_restores_without_second_push[execution_server0] FAILED tests/test_merge_ready.py::test_M7_all_workflows_must_conclude_and_incomplete_pages_never_record[execution_server0] FAILED tests/test_merge_ready.py::test_M8_infrastructure_uses_last_poll_then_passing_rerun_restores[execution_server0] FAILED tests/test_merge_ready.py::test_M9_corrected_candidate_has_its_own_entry_and_push[execution_server0] FAILED tests/test_merge_ready.py::test_M10_two_supervisors_record_and_push_once[execution_server0] FAILED tests/test_merge_ready.py::test_M11_readiness_expires_after_seven_days[execution_server0] 15 failed, 4 passed in 21.29s