feat: release 2.2.0 with PC-only tests and execution reliability fixes

Unify task scheduling and queue state, fix Android input and observation recovery, preserve screenshot paths, and match final review criteria accurately. Add collapsible copyable results and publish the complete 2.1.0 upgrade notes. Validation: 3189 backend tests, 326 frontend tests, 24 client tests, production build and quality gates.
This commit is contained in:
chenmingxuan committed 2026-10-27 01:13:41 +08:00
1 parent fac4ccb760
commit be6e8c2abd
79 files changed
+2263 -277

No files matched your search

+12 -6
View File
@@ -28,7 +28,7 @@ from artemis.graph.state import State
from artemis.mcp.action_names import to_canonical_call
from artemis.mcp.action_session import ActionSession
from artemis.utils.logger import get_logger
from artemis.utils.input_state import verify_input
from artemis.utils.input_state import expected_input_state, verify_input
logger = get_logger(__name__)
@@ -98,7 +98,12 @@ async def exec_action(
return False, f"MCP call failed: {e}"
action_item.update(execution="completed" if res.ok else "unknown", side_effect="possible")
if tool_name == "input_text" and res.ok:
expected = (
expected_input_state(wire_args["text"], wire_args["clear_exist"])
if tool_name == "input_text"
else None
)
if expected is not None and res.ok:
try:
elements = await session.ui_hierarchy()
from artemis.utils.visualization import format_minimal_list_with_elements
@@ -109,10 +114,11 @@ async def exec_action(
verification = "unknown"
action_item["input_verification"] = verification
action_item["input_verification_note"] = (
"Value presence confirmed in fresh editable node; not business validation."
if verification == "present"
else "Input dispatched; real value is not confirmed. Observe before submitting; do not blindly retype."
f"Expected input state '{expected}' confirmed in fresh editable node; not business validation."
if verification == expected
else f"Input dispatched; expected '{expected}', observed '{verification}'. "
"Observe before submitting; do not blindly retype."
)
if verification != "present":
if verification != expected:
return False, action_item["input_verification_note"]
return (True, "") if res.ok else (False, res.message)