Files
cleveragents-core/output.xml
T
freemo 39b080d457 Fix Robot Framework syntax issues in WF16 devcontainer test
- Fix Set Suite Variable and Set Test Variable keyword calls
- Fix Run Keyword And Ignore Error spacing and argument separation
- WF16 now has 0 syntax failures
2026-04-08 10:51:06 +00:00

534 lines
22 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.1 (Python 3.13.3 on linux)" generated="2026-04-07T03:32:36.199092" rpa="false" schemaversion="5">
<suite id="s1" name="Wf16 Devcontainer" source="/app/robot/e2e/wf16_devcontainer.robot">
<kw name="WF16 Suite Setup" type="SETUP">
<kw name="E2E Suite Setup" owner="common_e2e">
<kw name="Log" owner="BuiltIn">
<arg>Setting up E2E test environment</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.271256" elapsed="0.000215"/>
</kw>
<kw name="Replace String" owner="String">
<var>${safe_suite}</var>
<arg>${SUITE NAME}</arg>
<arg>${SPACE}</arg>
<arg>_</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.271600" elapsed="0.000105"/>
</kw>
<kw name="Replace String" owner="String">
<var>${safe_suite}</var>
<arg>${safe_suite}</arg>
<arg>.</arg>
<arg>_</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.271812" elapsed="0.000089"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${safe_suite}</var>
<arg>${safe_suite}</arg>
<arg>[^A-Za-z0-9_-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.271997" elapsed="0.000079"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${home}</var>
<arg>${E2E_TEMP_ROOT}${/}${safe_suite}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.272165" elapsed="0.000154"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Remove Directory" owner="OperatingSystem">
<arg>${home}</arg>
<arg>recursive=True</arg>
<doc>Removes the directory pointed to by the given ``path``.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.272723" elapsed="0.000076"/>
</kw>
<var>${rm_status}</var>
<var>${rm_msg}</var>
<arg>Remove Directory</arg>
<arg>${home}</arg>
<arg>recursive=True</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-07T03:32:36.272420" elapsed="0.000413"/>
</kw>
<if>
<branch type="IF" condition="'${rm_status}' == 'FAIL'">
<kw name="Log" owner="BuiltIn">
<arg>Could not remove previous suite home ${home}: ${rm_msg}</arg>
<arg>WARN</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.273051" elapsed="0.000202"/>
</kw>
<status status="PASS" start="2026-04-07T03:32:36.272929" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-04-07T03:32:36.272900" elapsed="0.000418"/>
</if>
<kw name="Create Directory" owner="OperatingSystem">
<arg>${home}</arg>
<doc>Creates the specified directory.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.273400" elapsed="0.000048"/>
</kw>
<kw name="Set Environment Variable" owner="OperatingSystem">
<arg>CLEVERAGENTS_HOME</arg>
<arg>${home}</arg>
<doc>Sets an environment variable to a specified value.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.273527" elapsed="0.000055"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${SUITE_HOME}</arg>
<arg>${home}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.273675" elapsed="0.000161"/>
</kw>
<kw name="Set Environment Variable" owner="OperatingSystem">
<arg>CLEVERAGENTS_AUTO_APPLY_MIGRATIONS</arg>
<arg>true</arg>
<doc>Sets an environment variable to a specified value.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.273917" elapsed="0.000072"/>
</kw>
<kw name="Remove Environment Variable" owner="OperatingSystem">
<arg>CLEVERAGENTS_TESTING_USE_MOCK_AI</arg>
<doc>Deletes the specified environment variable.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.274070" elapsed="0.000045"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${python_exec}</var>
<arg>sys.executable</arg>
<arg>sys</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.274196" elapsed="0.000170"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${PYTHON}</arg>
<arg>${python_exec}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.274459" elapsed="0.000153"/>
</kw>
<kw name="Run CleverAgents Command" owner="common_e2e">
<kw name="Run Process" owner="Process">
<var>${result}</var>
<arg>${PYTHON}</arg>
<arg>-m</arg>
<arg>cleveragents</arg>
<arg>@{args}</arg>
<arg>cwd=${cwd}</arg>
<arg>timeout=${timeout}</arg>
<arg>on_timeout=kill</arg>
<arg>env:CLEVERAGENTS_HOME=${SUITE_HOME}</arg>
<arg>env:CLEVERAGENTS_AUTO_APPLY_MIGRATIONS=true</arg>
<arg>env:NO_COLOR=1</arg>
<doc>Runs a process and waits for it to complete.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.274947" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>STDOUT: ${result.stdout}</arg>
<arg>level=DEBUG</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.275355" elapsed="0.000204"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>STDERR: ${result.stderr}</arg>
<arg>level=DEBUG</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.275649" elapsed="0.000188"/>
</kw>
<if>
<branch type="IF" condition="'${expected_rc}' != 'None'">
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${result.rc}</arg>
<arg>${expected_rc}</arg>
<arg>CleverAgents command failed with rc=${result.rc}. Check DEBUG-level log entries above.</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.276004" elapsed="0.000180"/>
</kw>
<status status="PASS" start="2026-04-07T03:32:36.275912" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-04-07T03:32:36.275894" elapsed="0.000358"/>
</if>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-07T03:32:36.276295" elapsed="0.000022"/>
</return>
<var>${init}</var>
<arg>init</arg>
<arg>e2e_test</arg>
<arg>--yes</arg>
<arg>--force</arg>
<arg>--path</arg>
<arg>${SUITE_HOME}</arg>
<doc>Run a CleverAgents CLI command and return the result.</doc>
<status status="PASS" start="2026-04-07T03:32:36.274801" elapsed="0.001556"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${init.rc}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.276448" elapsed="0.000151"/>
</kw>
<kw name="Directory Should Exist" owner="OperatingSystem">
<arg>${SUITE_HOME}${/}.cleveragents</arg>
<doc>Fails unless the given path points to an existing directory.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.276687" elapsed="0.000047"/>
</kw>
<kw name="File Should Exist" owner="OperatingSystem">
<arg>${SUITE_HOME}${/}.cleveragents${/}db.sqlite</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.276810" elapsed="0.000045"/>
</kw>
<doc>Set up the E2E test environment with per-suite isolation.</doc>
<status status="PASS" start="2026-04-07T03:32:36.270805" elapsed="0.006087"/>
</kw>
<kw name="Run CleverAgents Command" owner="common_e2e">
<kw name="Run Process" owner="Process">
<var>${result}</var>
<arg>${PYTHON}</arg>
<arg>-m</arg>
<arg>cleveragents</arg>
<arg>@{args}</arg>
<arg>cwd=${cwd}</arg>
<arg>timeout=${timeout}</arg>
<arg>on_timeout=kill</arg>
<arg>env:CLEVERAGENTS_HOME=${SUITE_HOME}</arg>
<arg>env:CLEVERAGENTS_AUTO_APPLY_MIGRATIONS=true</arg>
<arg>env:NO_COLOR=1</arg>
<doc>Runs a process and waits for it to complete.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.277184" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>STDOUT: ${result.stdout}</arg>
<arg>level=DEBUG</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.277576" elapsed="0.000186"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>STDERR: ${result.stderr}</arg>
<arg>level=DEBUG</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.277907" elapsed="0.000182"/>
</kw>
<if>
<branch type="IF" condition="'${expected_rc}' != 'None'">
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${result.rc}</arg>
<arg>${expected_rc}</arg>
<arg>CleverAgents command failed with rc=${result.rc}. Check DEBUG-level log entries above.</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.278234" elapsed="0.000169"/>
</kw>
<status status="PASS" start="2026-04-07T03:32:36.278156" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-04-07T03:32:36.278139" elapsed="0.000325"/>
</if>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-07T03:32:36.278497" elapsed="0.000014"/>
</return>
<var>${init}</var>
<arg>init --force --yes</arg>
<doc>Run a CleverAgents CLI command and return the result.</doc>
<status status="PASS" start="2026-04-07T03:32:36.277062" elapsed="0.001483"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${init.rc}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.278624" elapsed="0.000151"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${suffix}</var>
<arg>__import__('uuid').uuid4().hex[:12]</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.278863" elapsed="0.000160"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${RUN_SUFFIX}</arg>
<arg>${suffix}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.279117" elapsed="0.000152"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${ACTION_NAME}</arg>
<arg>${ACTION_PREFIX}-${suffix}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.279359" elapsed="0.000153"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${RESOURCE_NAME}</arg>
<arg>${RESOURCE_PREFIX}-${suffix}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.279601" elapsed="0.000156"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${PROJECT_NAME}</arg>
<arg>${PROJECT_PREFIX}-${suffix}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.279845" elapsed="0.000155"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${has_openai}</var>
<arg>bool(__import__('os').environ.get('OPENAI_API_KEY', ''))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.280112" elapsed="0.000160"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${has_anthropic}</var>
<arg>bool(__import__('os').environ.get('ANTHROPIC_API_KEY', ''))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.280415" elapsed="0.000225"/>
</kw>
<if>
<branch type="IF" condition="${has_openai}">
<kw name="Set Variable" owner="BuiltIn">
<var>${actor}</var>
<arg>openai/gpt-4o-mini</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.280903" elapsed="0.000216"/>
</kw>
<status status="PASS" start="2026-04-07T03:32:36.280763" elapsed="0.000395"/>
</branch>
<branch type="ELSE IF" condition="${has_anthropic}">
<kw name="Set Variable" owner="BuiltIn">
<var>${actor}</var>
<arg>anthropic/claude-sonnet-4-20250514</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.281294" elapsed="0.000163"/>
</kw>
<status status="PASS" start="2026-04-07T03:32:36.281187" elapsed="0.000306"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${actor}</var>
<arg>openai/gpt-4o-mini</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.281613" elapsed="0.000168"/>
</kw>
<status status="PASS" start="2026-04-07T03:32:36.281518" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-04-07T03:32:36.280737" elapsed="0.001102"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${SELECTED_ACTOR}</arg>
<arg>${actor}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.281938" elapsed="0.000178"/>
</kw>
<tag>tdd_issue tdd_issue_4188 tdd_expected_fail</tag>
<doc>E2E Suite Setup plus database initialisation, unique suffix
generation, and dynamic actor selection for WF16 tests.</doc>
<status status="PASS" start="2026-04-07T03:32:36.270458" elapsed="0.011707"/>
</kw>
<test id="s1-t1" name="WF16 Devcontainer Driven Development Supervised Profile" line="120">
<kw name="Skip If No LLM Keys" owner="common_e2e">
<kw name="Evaluate" owner="BuiltIn">
<var>${has_keys}</var>
<arg>bool(__import__('os').environ.get('ANTHROPIC_API_KEY', '')) or bool(__import__('os').environ.get('OPENAI_API_KEY', ''))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.283361" elapsed="0.000163"/>
</kw>
<if>
<branch type="IF" condition="not ${has_keys}">
<kw name="Skip" owner="BuiltIn">
<arg>No LLM API keys available (ANTHROPIC_API_KEY / OPENAI_API_KEY). Skipping E2E test.</arg>
<doc>Skips the rest of the current test.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.283680" elapsed="0.000140"/>
</kw>
<status status="PASS" start="2026-04-07T03:32:36.283603" elapsed="0.000248"/>
</branch>
<status status="PASS" start="2026-04-07T03:32:36.283584" elapsed="0.000292"/>
</if>
<doc>Skip the current test if no LLM API keys are available.</doc>
<status status="PASS" start="2026-04-07T03:32:36.283184" elapsed="0.000722"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${ac_checks_missing}</var>
<arg>[]</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.283999" elapsed="0.000143"/>
</kw>
<kw name="Set Test Variable" owner="BuiltIn">
<arg>${WF16_PLAN_ID}</arg>
<arg>${EMPTY}</arg>
<doc>Makes a variable available everywhere within the scope of the current test.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.284237" elapsed="0.000152"/>
</kw>
<kw name="WF16 Test Teardown" type="TEARDOWN">
<kw name="Get Variable Value" owner="BuiltIn">
<var>${plan_id}</var>
<arg>${WF16_PLAN_ID}</arg>
<arg>${EMPTY}</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.284857" elapsed="0.000166"/>
</kw>
<if>
<branch type="IF" condition="'${plan_id}' != ''">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run CleverAgents Command" owner="common_e2e">
<kw name="Run Process" owner="Process">
<var>${result}</var>
<arg>${PYTHON}</arg>
<arg>-m</arg>
<arg>cleveragents</arg>
<arg>@{args}</arg>
<arg>cwd=${cwd}</arg>
<arg>timeout=${timeout}</arg>
<arg>on_timeout=kill</arg>
<arg>env:CLEVERAGENTS_HOME=${SUITE_HOME}</arg>
<arg>env:CLEVERAGENTS_AUTO_APPLY_MIGRATIONS=true</arg>
<arg>env:NO_COLOR=1</arg>
<doc>Runs a process and waits for it to complete.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.285772" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>STDOUT: ${result.stdout}</arg>
<arg>level=DEBUG</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.286203" elapsed="0.000189"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>STDERR: ${result.stderr}</arg>
<arg>level=DEBUG</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.286479" elapsed="0.000181"/>
</kw>
<if>
<branch type="IF" condition="'${expected_rc}' != 'None'">
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${result.rc}</arg>
<arg>${expected_rc}</arg>
<arg>CleverAgents command failed with rc=${result.rc}. Check DEBUG-level log entries above.</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.286886" elapsed="0.000184"/>
</kw>
<status status="PASS" start="2026-04-07T03:32:36.286806" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-04-07T03:32:36.286790" elapsed="0.000344"/>
</if>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-07T03:32:36.287170" elapsed="0.000016"/>
</return>
<arg>plan status ${plan_id} --format json</arg>
<arg>expected_rc=None</arg>
<arg>timeout=30s</arg>
<doc>Run a CleverAgents CLI command and return the result.</doc>
<status status="PASS" start="2026-04-07T03:32:36.285516" elapsed="0.001704"/>
</kw>
<var>${status}</var>
<var>${result}</var>
<arg>Run CleverAgents Command</arg>
<arg>plan status ${plan_id} --format json</arg>
<arg>expected_rc=None</arg>
<arg>timeout=30s</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-07T03:32:36.285185" elapsed="0.002066"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<kw name="Log" owner="BuiltIn">
<arg>Teardown plan status: ${result.stdout}</arg>
<arg>WARN</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.287407" elapsed="0.000534"/>
</kw>
<status status="PASS" start="2026-04-07T03:32:36.287318" elapsed="0.000670"/>
</branch>
<status status="PASS" start="2026-04-07T03:32:36.287304" elapsed="0.000710"/>
</if>
<status status="PASS" start="2026-04-07T03:32:36.285098" elapsed="0.002939"/>
</branch>
<status status="PASS" start="2026-04-07T03:32:36.285083" elapsed="0.002974"/>
</if>
<doc>Log diagnostic context on failure for debugging.
Captures plan status when a plan ID is available.</doc>
<status status="PASS" start="2026-04-07T03:32:36.284664" elapsed="0.003423"/>
</kw>
<doc>Supervised-profile workflow exercising devcontainer-specific
behaviors: auto-detection during resource registration,
lazy container build during execution, tool invocation
routing to the container workspace, and apply writing
changes back to the host filesystem via bind mount.
Devcontainer-specific assertions are enforced via
explicit AC checks. Missing AC indicators are collected
and reported as explicit test failures.
Tagged ``tdd_expected_fail`` because devcontainer features
are not yet fully wired; the listener inverts the failure
to a CI pass until all AC indicators are present.</doc>
<tag>E2E</tag>
<tag>tdd_issue tdd_issue_4188 tdd_expected_fail tdd_issue_1208</tag>
<timeout value="35 minutes"/>
<status status="PASS" start="2026-04-07T03:32:36.282340" elapsed="0.005787"/>
</test>
<kw name="E2E Suite Teardown" owner="common_e2e" type="TEARDOWN">
<kw name="Log" owner="BuiltIn">
<arg>Cleaning up E2E test environment</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.288763" elapsed="0.000155"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Remove Directory" owner="OperatingSystem">
<arg>${SUITE_HOME}</arg>
<arg>recursive=True</arg>
<doc>Removes the directory pointed to by the given ``path``.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.289253" elapsed="0.000074"/>
</kw>
<arg>Remove Directory</arg>
<arg>${SUITE_HOME}</arg>
<arg>recursive=True</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-07T03:32:36.289020" elapsed="0.000341"/>
</kw>
<kw name="Remove Environment Variable" owner="OperatingSystem">
<arg>CLEVERAGENTS_HOME</arg>
<doc>Deletes the specified environment variable.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.289440" elapsed="0.000046"/>
</kw>
<kw name="Remove Environment Variable" owner="OperatingSystem">
<arg>CLEVERAGENTS_AUTO_APPLY_MIGRATIONS</arg>
<doc>Deletes the specified environment variable.</doc>
<status status="NOT RUN" start="2026-04-07T03:32:36.289560" elapsed="0.000044"/>
</kw>
<doc>Clean up the E2E test environment.</doc>
<status status="PASS" start="2026-04-07T03:32:36.288652" elapsed="0.000989"/>
</kw>
<doc>E2E test for Workflow Example 16: Devcontainer-Driven Development
(supervised automation profile).
Exercises the devcontainer-specific plan lifecycle:
devcontainer auto-detection during resource registration,
lazy container build during plan execution, tool invocation
routing to the container workspace, and apply writing changes
back to the host filesystem via bind mount.
**Devcontainer-specific assertions** are strict and contribute
to AC validation. If one or more AC indicators are missing,
the test records each unmet AC and fails explicitly rather
than skipping or passing silently.
The test is tagged ``tdd_expected_fail`` because devcontainer
features are not yet fully wired. The
``tdd_expected_fail_listener`` inverts the failure to a pass
in CI until all AC indicators are present.
Zero mocking — real CLI, real LLM API keys.</doc>
<status status="PASS" start="2026-04-07T03:32:36.200211" elapsed="0.089456"/>
</suite>
<statistics>
<total>
<stat pass="1" fail="0" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="1" fail="0" skip="0">E2E</stat>
<stat pass="1" fail="0" skip="0">tdd_issue tdd_issue_4188 tdd_expected_fail tdd_issue_1208</stat>
</tag>
<suite>
<stat name="Wf16 Devcontainer" id="s1" pass="1" fail="0" skip="0">Wf16 Devcontainer</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>