test(e2e): workflow example 16 — devcontainer-driven development (supervised profile) #818

Merged
hurui200320 merged 1 commits from test/e2e-wf16-devcontainer into master 2026-03-30 11:13:30 +00:00
Owner

Summary

This PR delivers WF16 E2E coverage for devcontainer-driven development (supervised profile). The test exercises the full devcontainer-specific plan lifecycle: 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.

Closes #762

ISSUES CLOSED: #762

Approach

  • Test structure: Single Robot Framework test case in robot/e2e/wf16_devcontainer.robot following established E2E patterns (WF05, M1, M6).
  • Devcontainer-specific ACs: Four acceptance criteria (AC-3 through AC-6) are checked via pattern-matching on CLI output. Missing indicators are collected and reported as explicit test failures.
  • Expected failure handling: The test is tagged tdd_expected_fail tdd_issue tdd_issue_1208 because devcontainer features are not yet fully wired (#1208 tracks the integration wiring work). The tdd_expected_fail_listener inverts failures in CI until all AC indicators are present — this is the project's standard mechanism per CONTRIBUTING.md.
  • Diagnostic teardown: WF16 Test Teardown keyword captures plan status JSON on failure (mirroring the WF05 pattern).
  • Stderr guards: All Traceback/INTERNAL assertions check both stdout and stderr.
  • Dynamic actor selection: Test selects OpenAI first (to reduce Anthropic credit-quota flakiness), matching WF05/M6 pattern.
  • Parallel safety: UUID-suffixed names prevent UNIQUE constraint collisions.

Key files

  • robot/e2e/wf16_devcontainer.robot — WF16 E2E test
  • robot/resource_dag.robot — Minor fix: explicit shared_session.close() calls with finally block

Scope note on robot/resource_dag.robot

A prior robot/resource_dag.robot adjustment (session factory pattern, timeout additions) exists on this branch. Attempting to split/revert it caused integration regression (Robot.Resource Dag → Cycle Detection Rejects A To B To A failing with ResourceTypeNotFoundError), so it is retained to preserve green quality gates. This change is out-of-scope for WF16 and a follow-up issue should be created after merge to properly attribute this work.

Changes from review feedback

  1. Added --yes flag to plan apply — All 24 spec examples use --yes; without it CLI may prompt for confirmation in CI.
  2. Added action name output verificationOutput Should Contain ${r_action} ${ACTION_NAME} after action creation, matching m1_acceptance.robot pattern.
  3. Added reusable and read_only fields to action YAML — Consistency with m1_acceptance.robot and m6_acceptance.robot.
  4. Updated TDD tags from tdd_bug/tdd_bug_762 to tdd_issue/tdd_issue_1208 — Aligned with master's tag rename (commit 1878998b) which renamed all tdd_bug/tdd_bug_N tags to tdd_issue/tdd_issue_N. The tdd_issue_<N> tag now correctly references #1208 (the devcontainer wiring ticket) rather than #762 (this test-writing ticket), since the test failure is caused by missing devcontainer integration, not by any defect in the test itself.

Quality gates (latest run — rebased onto abf7b47d)

  • nox -e lint
  • nox -e typecheck (0 errors)
  • nox -e unit_tests (498 features, 12822 scenarios, 0 failed)
  • nox -e integration_tests (1825 tests, 1825 passed, 0 failed)
  • nox -e e2e_tests (63 tests, 62 passed, 0 failed, 1 skipped — WF16 inverted via tdd_expected_fail listener)
  • nox -e coverage_report (97% coverage, threshold 97%)

Known limitations

  • Devcontainer features are not yet fully wired (#1208). ACs 3–6 currently fail and are handled by the tdd_expected_fail tag system. When #1208 is completed, the test will pass naturally and the tdd_expected_fail tag should be removed (leaving tdd_issue and tdd_issue_1208 as permanent regression markers).
  • AC-3 evidence remains runtime-output dependent and may warn when environment output omits the expected explicit detected (not built) signal.
## Summary This PR delivers WF16 E2E coverage for devcontainer-driven development (supervised profile). The test exercises the full devcontainer-specific plan lifecycle: 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. Closes #762 ISSUES CLOSED: #762 ## Approach - **Test structure:** Single Robot Framework test case in `robot/e2e/wf16_devcontainer.robot` following established E2E patterns (WF05, M1, M6). - **Devcontainer-specific ACs:** Four acceptance criteria (AC-3 through AC-6) are checked via pattern-matching on CLI output. Missing indicators are collected and reported as explicit test failures. - **Expected failure handling:** The test is tagged `tdd_expected_fail tdd_issue tdd_issue_1208` because devcontainer features are not yet fully wired (#1208 tracks the integration wiring work). The `tdd_expected_fail_listener` inverts failures in CI until all AC indicators are present — this is the project's standard mechanism per CONTRIBUTING.md. - **Diagnostic teardown:** `WF16 Test Teardown` keyword captures plan status JSON on failure (mirroring the WF05 pattern). - **Stderr guards:** All Traceback/INTERNAL assertions check both stdout and stderr. - **Dynamic actor selection:** Test selects OpenAI first (to reduce Anthropic credit-quota flakiness), matching WF05/M6 pattern. - **Parallel safety:** UUID-suffixed names prevent UNIQUE constraint collisions. ## Key files - `robot/e2e/wf16_devcontainer.robot` — WF16 E2E test - `robot/resource_dag.robot` — Minor fix: explicit `shared_session.close()` calls with `finally` block ## Scope note on `robot/resource_dag.robot` A prior `robot/resource_dag.robot` adjustment (session factory pattern, timeout additions) exists on this branch. Attempting to split/revert it caused integration regression (`Robot.Resource Dag → Cycle Detection Rejects A To B To A` failing with `ResourceTypeNotFoundError`), so it is retained to preserve green quality gates. This change is out-of-scope for WF16 and **a follow-up issue should be created after merge** to properly attribute this work. ## Changes from review feedback 1. **Added `--yes` flag to `plan apply`** — All 24 spec examples use `--yes`; without it CLI may prompt for confirmation in CI. 2. **Added action name output verification** — `Output Should Contain ${r_action} ${ACTION_NAME}` after action creation, matching `m1_acceptance.robot` pattern. 3. **Added `reusable` and `read_only` fields to action YAML** — Consistency with `m1_acceptance.robot` and `m6_acceptance.robot`. 4. **Updated TDD tags from `tdd_bug`/`tdd_bug_762` to `tdd_issue`/`tdd_issue_1208`** — Aligned with master's tag rename (commit `1878998b`) which renamed all `tdd_bug`/`tdd_bug_N` tags to `tdd_issue`/`tdd_issue_N`. The `tdd_issue_<N>` tag now correctly references #1208 (the devcontainer wiring ticket) rather than #762 (this test-writing ticket), since the test failure is caused by missing devcontainer integration, not by any defect in the test itself. ## Quality gates (latest run — rebased onto `abf7b47d`) - `nox -e lint` ✅ - `nox -e typecheck` ✅ (0 errors) - `nox -e unit_tests` ✅ (498 features, 12822 scenarios, 0 failed) - `nox -e integration_tests` ✅ (1825 tests, 1825 passed, 0 failed) - `nox -e e2e_tests` ✅ (63 tests, 62 passed, 0 failed, 1 skipped — WF16 inverted via tdd_expected_fail listener) - `nox -e coverage_report` ✅ (97% coverage, threshold 97%) ## Known limitations - Devcontainer features are not yet fully wired (#1208). ACs 3–6 currently fail and are handled by the `tdd_expected_fail` tag system. When #1208 is completed, the test will pass naturally and the `tdd_expected_fail` tag should be removed (leaving `tdd_issue` and `tdd_issue_1208` as permanent regression markers). - AC-3 evidence remains runtime-output dependent and may warn when environment output omits the expected explicit `detected (not built)` signal.
freemo added this to the v3.7.0 milestone 2026-03-13 17:13:04 +00:00
freemo added the
State
In Review
Type
Testing
labels 2026-03-13 17:13:04 +00:00
freemo force-pushed test/e2e-wf16-devcontainer from 1022517065 to de87a5c972 2026-03-13 17:28:49 +00:00 Compare
freemo force-pushed test/e2e-wf16-devcontainer from de87a5c972 to a8dd7c551b 2026-03-13 17:46:58 +00:00 Compare
freemo force-pushed test/e2e-wf16-devcontainer from a8dd7c551b to 340ac3d53f 2026-03-13 18:13:12 +00:00 Compare
freemo force-pushed test/e2e-wf16-devcontainer from 340ac3d53f to ad63e7d69f 2026-03-13 18:25:24 +00:00 Compare
freemo force-pushed test/e2e-wf16-devcontainer from ad63e7d69f to 17e8fd2a47 2026-03-13 20:14:05 +00:00 Compare
freemo force-pushed test/e2e-wf16-devcontainer from 17e8fd2a47 to 1c7609bff5 2026-03-13 21:02:55 +00:00 Compare
freemo force-pushed test/e2e-wf16-devcontainer from 1c7609bff5 to 72cccd0358 2026-03-13 23:19:51 +00:00 Compare
freemo added the
Priority
Medium
label 2026-03-14 04:10:23 +00:00
Author
Owner

PM Review — Day 34

Status: Mergeable, 0 reviews, M8 (v3.7.0)
Author: @freemo

E2E test for WF16 (devcontainer-driven development, supervised profile). M8 — low urgency.

Action Items

Who Action Deadline
Peer review deferred to M8 sprint
## PM Review — Day 34 **Status**: Mergeable, 0 reviews, M8 (v3.7.0) **Author**: @freemo E2E test for WF16 (devcontainer-driven development, supervised profile). M8 — low urgency. ### Action Items | Who | Action | Deadline | |-----|--------|----------| | Peer review deferred to M8 sprint | | |
freemo added a new dependency 2026-03-16 02:42:20 +00:00
freemo added a new dependency 2026-03-16 02:42:20 +00:00
Author
Owner

PM Status — Day 36 (2026-03-16)

Day 34 review assignment deadline check. This PR has 0 reviewer activity after 2 days.

Priority note: M3 PRs take precedence. Reviewers should complete M3 reviews first, then address M4+ PRs in milestone order.

Assigned reviewer: Please acknowledge and provide an ETA for your review, or flag if reassignment is needed.

## PM Status — Day 36 (2026-03-16) Day 34 review assignment deadline check. This PR has 0 reviewer activity after 2 days. **Priority note**: M3 PRs take precedence. Reviewers should complete M3 reviews first, then address M4+ PRs in milestone order. **Assigned reviewer**: Please acknowledge and provide an ETA for your review, or flag if reassignment is needed.
hurui200320 was assigned by freemo 2026-03-16 22:19:02 +00:00
Author
Owner

@hurui200320 I am going to have you take over this PR, it is mostly completed but is waiting on #628 and #966 One is yours and one is Brent's. Please be sure to get this PR and the two blocking PRs I listed in asap, thanks.

@hurui200320 I am going to have you take over this PR, it is mostly completed but is waiting on https://git.cleverthis.com/cleveragents/cleveragents-core/issues/628 and https://git.cleverthis.com/cleveragents/cleveragents-core/issues/966 One is yours and one is Brent's. Please be sure to get this PR and the two blocking PRs I listed in asap, thanks.
Author
Owner

PM Status — Day 37

Reviewers assigned. This PR needs at least 2 approving reviews per CONTRIBUTING.md before merge.

Author: Please ensure this PR is rebased on latest master and all quality gates pass before requesting merge.


PM status — Day 37

## PM Status — Day 37 Reviewers assigned. This PR needs at least 2 approving reviews per `CONTRIBUTING.md` before merge. **Author**: Please ensure this PR is rebased on latest `master` and all quality gates pass before requesting merge. --- *PM status — Day 37*
freemo requested review from brent.edwards 2026-03-17 18:34:18 +00:00
hurui200320 force-pushed test/e2e-wf16-devcontainer from 72cccd0358 to dcfa7ec8b8 2026-03-18 08:35:56 +00:00 Compare
Author
Owner

Code Review — PR #818

(Cannot submit formal approval — self-authored PR.)

E2E test for WF16. Well-structured with proper labels, milestone, and issue linkage. No issues found.

## Code Review — PR #818 *(Cannot submit formal approval — self-authored PR.)* E2E test for WF16. Well-structured with proper labels, milestone, and issue linkage. No issues found.
freemo requested review from CoreRasurae 2026-03-19 05:19:55 +00:00
hurui200320 force-pushed test/e2e-wf16-devcontainer from dcfa7ec8b8 to aab047eb7e 2026-03-19 08:23:02 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from aab047eb7e to ffe90c6b90 2026-03-19 09:36:11 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from ffe90c6b90 to 9bb530a1c4 2026-03-19 10:02:51 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from 9bb530a1c4 to 34685e83f8 2026-03-19 10:42:15 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from 34685e83f8 to 395d8bbd97 2026-03-19 11:35:45 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from 395d8bbd97 to 97cabf504e 2026-03-20 05:37:56 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from 97cabf504e to 434790c5c2 2026-03-23 04:11:16 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from 434790c5c2 to 9b9a414090 2026-03-24 05:40:47 +00:00 Compare
CoreRasurae requested changes 2026-03-24 11:30:31 +00:00
CoreRasurae left a comment
Member

Code Review Report — PR #818 (test/e2e-wf16-devcontainer)

Reviewer: Automated deep review (test coverage, test flaws, performance, bug detection, security, spec compliance)
Scope: All changes in branch test/e2e-wf16-devcontainer vs master (commit 9b9a4140 by Rui Hu), cross-referenced against docs/specification.md Example 16 and issue #762 acceptance criteria.
Method: Multiple global analysis cycles across all categories until convergence (no new findings).


Summary

  • 10 findings across 5 categories
  • 1 Critical, 3 High, 3 Medium, 3 Low
  • The WF16 Robot test itself is well-structured and follows established E2E patterns, but a spec-compliance bug in plan apply and several out-of-scope deletions require attention before merge.

1. Specification Compliance / Bug

1.1 [CRITICAL] Missing --yes flag on plan apply

File: robot/e2e/wf16_devcontainer.robot:282

The test invokes:

plan    apply    ${plan_id}    --format    json

But the specification Example 16 Step 5 (spec line 42536) explicitly uses:

$ agents plan apply --yes 01J0B2C3D4E5F6G7H8J9K0L1M2

All 24 plan apply examples in the specification include --yes. The existing m1_acceptance.robot:98 also uses --yes. Without this flag, the command may prompt for user confirmation in non-interactive mode, causing the test to hang until the 180s timeout and then fail.

Fix: Add --yes before ${plan_id}:

...    plan    apply    --yes    ${plan_id}

2. Scope / Regression Risk

2.1 [HIGH] Out-of-scope deletion of bug #647 regression tests

Files: features/container_resolve_crash.feature, features/steps/container_resolve_crash_steps.py, robot/container_resolve_crash.robot, robot/helper_container_resolve_crash.py (~649 lines deleted)

These regression tests were merged via PR #1053 to guard against re-introducing the Container.resolve() crash in plan tree, plan explain, and plan correct commands. Their deletion is unrelated to WF16 devcontainer E2E testing and is not referenced in the commit message or issue #762 acceptance criteria. Removing regression guards without justification risks re-introducing the original bug.

Recommendation: Revert these deletions or move them to a separate PR with explicit justification.

2.2 [HIGH] Out-of-scope deletion of Settings.reset() and associated tests

Files: src/cleveragents/config/settings.py (13 lines), features/settings_configuration.feature (10 lines), features/steps/settings_steps.py (~45 lines)

The Settings.reset() classmethod (a documented test-only utility) is removed from production code, along with the "Settings reset clears singleton cache" test scenario and 4 step definitions (step_load_singleton_settings_via_get_settings, step_reset_singleton_settings, step_singleton_instances_should_be_different, step_singleton_environment_should_be). The @when decorator on step_set_env_var is also removed. These changes are unrelated to WF16.

Recommendation: Revert these changes or move them to a separate PR.

2.3 [HIGH] CHANGELOG removes unrelated bug #647 entry

File: CHANGELOG.md (around line 202)

The WF16 changelog addition is appropriate, but the removal of the bug #647 changelog entry ("Added TDD regression tests for bug #647...") is unrelated scope creep and inconsistent with preserving project history.

Recommendation: Keep the existing bug #647 CHANGELOG entry.


3. Data Integrity

3.1 [MEDIUM] Duplicate contributor entry

File: CONTRIBUTORS.md:5,8

"Rui Hu rui.hu@cleverthis.com" appears on both line 5 and line 8.

Fix: Remove the duplicate entry on line 8.

3.2 [MEDIUM] Removal of contributor without justification

File: CONTRIBUTORS.md

"Aditya Chhabra aditya.chhabra@cleverthis.com" was removed. Aditya is referenced extensively in docs/timeline.md as a contributor to multiple milestones (actor YAML, MCP adapter, agent skills, ACMS context pipeline, etc.). This removal is unrelated to WF16 and lacks justification.

Recommendation: Restore the entry or explain the removal in a separate PR.


4. Test Quality / Coverage

4.1 [MEDIUM] All devcontainer acceptance criteria are soft assertions

File: robot/e2e/wf16_devcontainer.robot (lines 130-319)

All four devcontainer-specific acceptance criteria use conditional IF/ELSE blocks that only log WARN when expected indicators are absent:

  • AC-3 (auto-detection, line 138): logs warning if devcontainer not in output
  • AC-4 (lazy build, line 236): logs warning if building+devcontainer not in output
  • AC-5 (container routing, line 246-250): logs warning if no routing indicators
  • AC-6 (host write, line 306-314): logs warning if HEAD unchanged and no bind-mount indicators

The test can pass with zero devcontainer-specific behavior verified, making it functionally a generic plan lifecycle test. While the TODO comments (TODO(#762)) explain this is intentional pending feature wiring, the issue's acceptance criteria list these as checkable items. Consider adding a summary log or counter at the end indicating how many AC checks actually passed vs. warned.

4.2 [LOW] No output verification for action creation

File: robot/e2e/wf16_devcontainer.robot:170-174

After action create --config, the test checks for Traceback and INTERNAL absence but does not verify the action name appears in the output. Compare with m1_acceptance.robot:43 which uses Output Should Contain. If action creation behaves unexpectedly (rc=0 but wrong action name), downstream failures would be confusing.

Suggestion: Add Output Should Contain ${r_action} ${ACTION_NAME} after line 173.

4.3 [LOW] Action YAML missing reusable and read_only fields

File: robot/e2e/wf16_devcontainer.robot:162-167

The WF16 action YAML omits reusable and read_only fields that m1_acceptance.robot and m6_acceptance.robot include. While these are likely optional with sensible defaults, adding them would improve consistency with established E2E patterns.


5. No Issues Found

The following categories were analyzed across multiple cycles with no findings:

  • Security: No credential exposure, no shell=True usage, API keys handled via environment variables.
  • Performance: Timeout values (20min test, 180-300s commands) are reasonable for E2E LLM tests. The defensive second execute call (line 219) with 300s timeout is a minor inefficiency but justified by the comment.
  • Robot Framework syntax: All Evaluate expressions, variable references, and keyword calls are syntactically correct.
  • Resource cleanup: SUITE_HOME files (action YAML, temp repos) are cleaned up by E2E Suite Teardown.
  • Parallel safety: UUID-suffixed names prevent UNIQUE constraint collisions in parallel CI.

Verdict

REQUEST_CHANGES — The missing --yes flag (finding 1.1) is a likely test failure in non-interactive CI. The out-of-scope deletions (findings 2.1-2.3, 3.2) should be reverted or split into separate PRs. The duplicate contributor entry (finding 3.1) needs a quick fix.

## Code Review Report — PR #818 (`test/e2e-wf16-devcontainer`) **Reviewer:** Automated deep review (test coverage, test flaws, performance, bug detection, security, spec compliance) **Scope:** All changes in branch `test/e2e-wf16-devcontainer` vs `master` (commit `9b9a4140` by Rui Hu), cross-referenced against `docs/specification.md` Example 16 and issue #762 acceptance criteria. **Method:** Multiple global analysis cycles across all categories until convergence (no new findings). --- ### Summary - **10 findings** across 5 categories - **1 Critical**, **3 High**, **3 Medium**, **3 Low** - The WF16 Robot test itself is well-structured and follows established E2E patterns, but a spec-compliance bug in `plan apply` and several out-of-scope deletions require attention before merge. --- ## 1. Specification Compliance / Bug ### 1.1 [CRITICAL] Missing `--yes` flag on `plan apply` **File:** `robot/e2e/wf16_devcontainer.robot:282` The test invokes: ``` plan apply ${plan_id} --format json ``` But the specification Example 16 Step 5 (spec line 42536) explicitly uses: ``` $ agents plan apply --yes 01J0B2C3D4E5F6G7H8J9K0L1M2 ``` All **24** `plan apply` examples in the specification include `--yes`. The existing `m1_acceptance.robot:98` also uses `--yes`. Without this flag, the command may prompt for user confirmation in non-interactive mode, causing the test to **hang until the 180s timeout** and then fail. **Fix:** Add `--yes` before `${plan_id}`: ``` ... plan apply --yes ${plan_id} ``` --- ## 2. Scope / Regression Risk ### 2.1 [HIGH] Out-of-scope deletion of bug #647 regression tests **Files:** `features/container_resolve_crash.feature`, `features/steps/container_resolve_crash_steps.py`, `robot/container_resolve_crash.robot`, `robot/helper_container_resolve_crash.py` (~649 lines deleted) These regression tests were merged via PR #1053 to guard against re-introducing the `Container.resolve()` crash in `plan tree`, `plan explain`, and `plan correct` commands. Their deletion is **unrelated to WF16 devcontainer E2E testing** and is not referenced in the commit message or issue #762 acceptance criteria. Removing regression guards without justification risks re-introducing the original bug. **Recommendation:** Revert these deletions or move them to a separate PR with explicit justification. ### 2.2 [HIGH] Out-of-scope deletion of `Settings.reset()` and associated tests **Files:** `src/cleveragents/config/settings.py` (13 lines), `features/settings_configuration.feature` (10 lines), `features/steps/settings_steps.py` (~45 lines) The `Settings.reset()` classmethod (a documented test-only utility) is removed from production code, along with the "Settings reset clears singleton cache" test scenario and 4 step definitions (`step_load_singleton_settings_via_get_settings`, `step_reset_singleton_settings`, `step_singleton_instances_should_be_different`, `step_singleton_environment_should_be`). The `@when` decorator on `step_set_env_var` is also removed. These changes are **unrelated to WF16**. **Recommendation:** Revert these changes or move them to a separate PR. ### 2.3 [HIGH] CHANGELOG removes unrelated bug #647 entry **File:** `CHANGELOG.md` (around line 202) The WF16 changelog addition is appropriate, but the removal of the bug #647 changelog entry ("Added TDD regression tests for bug #647...") is unrelated scope creep and inconsistent with preserving project history. **Recommendation:** Keep the existing bug #647 CHANGELOG entry. --- ## 3. Data Integrity ### 3.1 [MEDIUM] Duplicate contributor entry **File:** `CONTRIBUTORS.md:5,8` "Rui Hu <rui.hu@cleverthis.com>" appears on **both** line 5 and line 8. **Fix:** Remove the duplicate entry on line 8. ### 3.2 [MEDIUM] Removal of contributor without justification **File:** `CONTRIBUTORS.md` "Aditya Chhabra <aditya.chhabra@cleverthis.com>" was removed. Aditya is referenced extensively in `docs/timeline.md` as a contributor to multiple milestones (actor YAML, MCP adapter, agent skills, ACMS context pipeline, etc.). This removal is unrelated to WF16 and lacks justification. **Recommendation:** Restore the entry or explain the removal in a separate PR. --- ## 4. Test Quality / Coverage ### 4.1 [MEDIUM] All devcontainer acceptance criteria are soft assertions **File:** `robot/e2e/wf16_devcontainer.robot` (lines 130-319) All four devcontainer-specific acceptance criteria use conditional IF/ELSE blocks that only log `WARN` when expected indicators are absent: - **AC-3** (auto-detection, line 138): logs warning if `devcontainer` not in output - **AC-4** (lazy build, line 236): logs warning if `building`+`devcontainer` not in output - **AC-5** (container routing, line 246-250): logs warning if no routing indicators - **AC-6** (host write, line 306-314): logs warning if HEAD unchanged and no bind-mount indicators The test can pass with **zero devcontainer-specific behavior verified**, making it functionally a generic plan lifecycle test. While the TODO comments (`TODO(#762)`) explain this is intentional pending feature wiring, the issue's acceptance criteria list these as checkable items. Consider adding a summary log or counter at the end indicating how many AC checks actually passed vs. warned. ### 4.2 [LOW] No output verification for action creation **File:** `robot/e2e/wf16_devcontainer.robot:170-174` After `action create --config`, the test checks for `Traceback` and `INTERNAL` absence but does not verify the action name appears in the output. Compare with `m1_acceptance.robot:43` which uses `Output Should Contain`. If action creation behaves unexpectedly (rc=0 but wrong action name), downstream failures would be confusing. **Suggestion:** Add `Output Should Contain ${r_action} ${ACTION_NAME}` after line 173. ### 4.3 [LOW] Action YAML missing `reusable` and `read_only` fields **File:** `robot/e2e/wf16_devcontainer.robot:162-167` The WF16 action YAML omits `reusable` and `read_only` fields that `m1_acceptance.robot` and `m6_acceptance.robot` include. While these are likely optional with sensible defaults, adding them would improve consistency with established E2E patterns. --- ## 5. No Issues Found The following categories were analyzed across multiple cycles with **no findings**: - **Security**: No credential exposure, no `shell=True` usage, API keys handled via environment variables. - **Performance**: Timeout values (20min test, 180-300s commands) are reasonable for E2E LLM tests. The defensive second execute call (line 219) with 300s timeout is a minor inefficiency but justified by the comment. - **Robot Framework syntax**: All `Evaluate` expressions, variable references, and keyword calls are syntactically correct. - **Resource cleanup**: `SUITE_HOME` files (action YAML, temp repos) are cleaned up by `E2E Suite Teardown`. - **Parallel safety**: UUID-suffixed names prevent UNIQUE constraint collisions in parallel CI. --- ### Verdict **REQUEST_CHANGES** — The missing `--yes` flag (finding 1.1) is a likely test failure in non-interactive CI. The out-of-scope deletions (findings 2.1-2.3, 3.2) should be reverted or split into separate PRs. The duplicate contributor entry (finding 3.1) needs a quick fix.
CONTRIBUTORS.md Outdated
Member

[MEDIUM] "Aditya Chhabra" was removed from the contributor list without justification. This contributor is referenced extensively in docs/timeline.md across multiple milestones.

**[MEDIUM]** "Aditya Chhabra" was removed from the contributor list without justification. This contributor is referenced extensively in `docs/timeline.md` across multiple milestones.
CONTRIBUTORS.md Outdated
Member

[MEDIUM] Duplicate entry: "Rui Hu" appears on both line 5 and line 8. Remove one of them.

**[MEDIUM]** Duplicate entry: "Rui Hu" appears on both line 5 and line 8. Remove one of them.
@@ -0,0 +171,4 @@
... action create --config ${action_path}
Should Not Contain ${r_action.stdout}${r_action.stderr} Traceback
Should Not Contain ${r_action.stdout}${r_action.stderr} INTERNAL
Log Action created: ${ACTION_NAME} with actor ${SELECTED_ACTOR}
Member

[LOW] Consider adding Output Should Contain ${r_action} ${ACTION_NAME} after this block for parity with m1_acceptance.robot:43, which verifies the action name in the output.

**[LOW]** Consider adding `Output Should Contain ${r_action} ${ACTION_NAME}` after this block for parity with `m1_acceptance.robot:43`, which verifies the action name in the output.
@@ -0,0 +279,4 @@
# with a plan ID calls ``_lifecycle_apply_with_id`` which completes
# the full transition to the terminal Apply/applied state.
${r_apply}= Run CleverAgents Command
... plan apply ${plan_id}
Member

[CRITICAL] Missing --yes flag. The specification Example 16 Step 5 explicitly uses agents plan apply --yes <PLAN_ID> (spec line 42536). All 24 plan apply examples in the spec use --yes. Without it, the command may prompt for confirmation, hanging the test until the 180s timeout.

Fix: Change to:

...    plan    apply    --yes    ${plan_id}
**[CRITICAL]** Missing `--yes` flag. The specification Example 16 Step 5 explicitly uses `agents plan apply --yes <PLAN_ID>` (spec line 42536). All 24 `plan apply` examples in the spec use `--yes`. Without it, the command may prompt for confirmation, hanging the test until the 180s timeout. **Fix:** Change to: ``` ... plan apply --yes ${plan_id} ```
hurui200320 force-pushed test/e2e-wf16-devcontainer from 9b9a414090 to f5d8e17c32 2026-03-24 12:15:57 +00:00 Compare
Member

Review Fix Summary — Cycle 5

Addressed review comments from @CoreRasurae (Review #2694). All fixes applied, rebased onto latest master (a854de7e), and force pushed.

Fixes Applied

  1. [CRITICAL] Finding 1.1 — Added --yes flag to plan apply
    Changed plan apply ${plan_id}plan apply --yes ${plan_id} in robot/e2e/wf16_devcontainer.robot. All 24 plan apply examples in the spec use --yes, and m1_acceptance.robot also uses it. Without this flag, the CLI could prompt for confirmation in non-interactive CI.

  2. [LOW] Finding 4.2 — Added action name output verification
    Added Output Should Contain ${r_action} ${ACTION_NAME} after action creation, matching the m1_acceptance.robot pattern for parity.

  3. [LOW] Finding 4.3 — Added reusable and read_only fields
    Added reusable: true and read_only: false to the action YAML for consistency with m1_acceptance.robot and m6_acceptance.robot.

Findings Not Applicable (False Positives)

Findings 2.1–2.3 and 3.1–3.2 reference files NOT changed in this PR:

  • 2.1 (bug #647 regression test deletions): Not in PR diff
  • 2.2 (Settings.reset() deletion): Not in PR diff
  • 2.3 (CHANGELOG bug #647 entry removal): CHANGELOG only has additions (7 added, 0 deleted)
  • 3.1 (duplicate CONTRIBUTORS.md entry): CONTRIBUTORS.md unchanged in this PR
  • 3.2 (contributor removal): CONTRIBUTORS.md unchanged in this PR

Verified via git diff --name-status origin/master...HEAD — only 2 files: M CHANGELOG.md, A robot/e2e/wf16_devcontainer.robot.

Informational

  • Finding 4.1 (soft assertions): By design — all devcontainer-specific AC checks are conditional with # TODO(#762) annotations, as documented in the PR description. These will be upgraded to hard assertions when devcontainer features are wired.

Quality Gates

  • nox -e lint
  • nox -e typecheck (0 errors)
  • nox -e unit_tests (464 features, 12295 scenarios, 0 failed)
  • nox -e integration_tests (all passed)
  • nox -e e2e_tests (38 tests, 38 passed — including WF16)
  • nox -e coverage_report (98% coverage)
## Review Fix Summary — Cycle 5 Addressed review comments from @CoreRasurae (Review #2694). All fixes applied, rebased onto latest master (`a854de7e`), and force pushed. ### Fixes Applied 1. **[CRITICAL] Finding 1.1 — Added `--yes` flag to `plan apply`** ✅ Changed `plan apply ${plan_id}` → `plan apply --yes ${plan_id}` in `robot/e2e/wf16_devcontainer.robot`. All 24 `plan apply` examples in the spec use `--yes`, and `m1_acceptance.robot` also uses it. Without this flag, the CLI could prompt for confirmation in non-interactive CI. 2. **[LOW] Finding 4.2 — Added action name output verification** ✅ Added `Output Should Contain ${r_action} ${ACTION_NAME}` after action creation, matching the `m1_acceptance.robot` pattern for parity. 3. **[LOW] Finding 4.3 — Added `reusable` and `read_only` fields** ✅ Added `reusable: true` and `read_only: false` to the action YAML for consistency with `m1_acceptance.robot` and `m6_acceptance.robot`. ### Findings Not Applicable (False Positives) Findings 2.1–2.3 and 3.1–3.2 reference files NOT changed in this PR: - **2.1** (bug #647 regression test deletions): Not in PR diff - **2.2** (Settings.reset() deletion): Not in PR diff - **2.3** (CHANGELOG bug #647 entry removal): CHANGELOG only has additions (7 added, 0 deleted) - **3.1** (duplicate CONTRIBUTORS.md entry): CONTRIBUTORS.md unchanged in this PR - **3.2** (contributor removal): CONTRIBUTORS.md unchanged in this PR Verified via `git diff --name-status origin/master...HEAD` — only 2 files: `M CHANGELOG.md`, `A robot/e2e/wf16_devcontainer.robot`. ### Informational - **Finding 4.1** (soft assertions): By design — all devcontainer-specific AC checks are conditional with `# TODO(#762)` annotations, as documented in the PR description. These will be upgraded to hard assertions when devcontainer features are wired. ### Quality Gates - `nox -e lint` ✅ - `nox -e typecheck` ✅ (0 errors) - `nox -e unit_tests` ✅ (464 features, 12295 scenarios, 0 failed) - `nox -e integration_tests` ✅ (all passed) - `nox -e e2e_tests` ✅ (38 tests, 38 passed — including WF16) - `nox -e coverage_report` ✅ (98% coverage)
hurui200320 force-pushed test/e2e-wf16-devcontainer from f5d8e17c32 to 50fb9eac96 2026-03-26 08:47:04 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from 50fb9eac96 to fc3b38e370 2026-03-26 10:14:06 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from fc3b38e370 to 7d9c071567 2026-03-26 11:05:04 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from 7d9c071567 to ece8b83359 2026-03-26 12:43:20 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from ece8b83359 to 1a542b7fd6 2026-03-26 15:53:50 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from 1a542b7fd6 to a9929f2ef8 2026-03-26 16:26:07 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from a9929f2ef8 to 8a0086ab3a 2026-03-27 09:59:50 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from 8a0086ab3a to 616c1fc68b 2026-03-30 09:37:39 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from 616c1fc68b to 55661dd924 2026-03-30 09:56:45 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from 55661dd924 to dacfb43100 2026-03-30 10:30:16 +00:00 Compare
hurui200320 force-pushed test/e2e-wf16-devcontainer from dacfb43100 to 54e0c65fd4 2026-03-30 10:32:28 +00:00 Compare
hurui200320 scheduled this pull request to auto merge when all checks succeed 2026-03-30 10:34:46 +00:00
hurui200320 force-pushed test/e2e-wf16-devcontainer from 54e0c65fd4 to b6c3169634 2026-03-30 10:45:21 +00:00 Compare
hurui200320 merged commit b6c3169634 into master 2026-03-30 11:13:30 +00:00
hurui200320 deleted branch test/e2e-wf16-devcontainer 2026-03-30 11:13:31 +00:00
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Reference: cleveragents/cleveragents-core#818