test(integration): workflow example 9 — session-driven interactive exploration (review profile) #808

Closed
brent.edwards wants to merge 1 commits from test/int-wf09-session into master
Member

Summary

Integration test for Specification Workflow Example 9: Session-Driven Interactive Exploration. Exercises session-based conversational interaction using real CLI subprocesses with mocked LLM providers.

Test Cases (7 Robot Framework tests)

  1. WF09 Create Exploration Sessionsession create --format plain with ULID extraction
  2. WF09 Session Tell Basicsession tell --session <id> "message" with response verification
  3. WF09 Session Show Detailssession show <id> --format plain metadata validation
  4. WF09 Session History Accumulation — 3 sequential session tell messages followed by session show to verify accumulation
  5. WF09 Session Export JSON Structuresession export <id> --output file.json with JSON schema validation (session_id, messages keys)
  6. WF09 Session List Includes Createdsession list --format plain verifying newly created session appears
  7. WF09 Action From Session Conversation — Full exploration-to-action workflow: session create → tell → action create from YAML

Design

Each test case is self-contained with isolated workspace setup/teardown using helper_e2e_common utilities (setup_workspace, cleanup_workspace, run_cli). All tests use CLEVERAGENTS_TESTING_USE_MOCK_AI=true for deterministic LLM responses.

The helper script follows the established Robot/helper pattern: each subcommand prints a unique sentinel (e.g., wf09-create-session-ok) that the Robot test asserts on.

Quality Gates

  • Typecheck (0 errors) | Unit tests 10,700/10,700 | Integration tests 7/7 | Lint

Closes #773

## Summary Integration test for Specification Workflow Example 9: Session-Driven Interactive Exploration. Exercises session-based conversational interaction using real CLI subprocesses with mocked LLM providers. ## Test Cases (7 Robot Framework tests) 1. **WF09 Create Exploration Session** — `session create --format plain` with ULID extraction 2. **WF09 Session Tell Basic** — `session tell --session <id> "message"` with response verification 3. **WF09 Session Show Details** — `session show <id> --format plain` metadata validation 4. **WF09 Session History Accumulation** — 3 sequential `session tell` messages followed by `session show` to verify accumulation 5. **WF09 Session Export JSON Structure** — `session export <id> --output file.json` with JSON schema validation (session_id, messages keys) 6. **WF09 Session List Includes Created** — `session list --format plain` verifying newly created session appears 7. **WF09 Action From Session Conversation** — Full exploration-to-action workflow: session create → tell → action create from YAML ## Design Each test case is self-contained with isolated workspace setup/teardown using `helper_e2e_common` utilities (`setup_workspace`, `cleanup_workspace`, `run_cli`). All tests use `CLEVERAGENTS_TESTING_USE_MOCK_AI=true` for deterministic LLM responses. The helper script follows the established Robot/helper pattern: each subcommand prints a unique sentinel (e.g., `wf09-create-session-ok`) that the Robot test asserts on. ## Quality Gates - Typecheck ✅ (0 errors) | Unit tests 10,700/10,700 ✅ | Integration tests 7/7 ✅ | Lint ✅ Closes #773
brent.edwards added the
Type
Testing
label 2026-03-13 04:43:10 +00:00
brent.edwards added this to the v3.0.0 milestone 2026-03-13 04:43:14 +00:00
freemo added the
State
In Review
label 2026-03-13 21:16:44 +00:00
freemo added the
Priority
Medium
label 2026-03-14 04:10:18 +00:00
Owner

PM Review — Day 34

Status: Mergeable, 0 reviews, M1 (v3.0.0)
Author: @brent.edwards

Integration test for WF09 (session-driven interactive exploration, review profile). Robot Framework + helper pattern.

Action Items

Who Action Deadline
@hamza.khyari Peer review Day 37
## PM Review — Day 34 **Status**: Mergeable, 0 reviews, M1 (v3.0.0) **Author**: @brent.edwards Integration test for WF09 (session-driven interactive exploration, review profile). Robot Framework + helper pattern. ### Action Items | Who | Action | Deadline | |-----|--------|----------| | @hamza.khyari | **Peer review** | Day 37 |
freemo added the
MoSCoW
Must have
Points
3
labels 2026-03-14 22:11:28 +00:00
freemo modified the milestone from v3.0.0 to v3.6.0 2026-03-16 00:32:09 +00:00
freemo added a new dependency 2026-03-16 02:42:18 +00:00
freemo added a new dependency 2026-03-16 02:42:18 +00:00
Owner

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

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

Assigned reviewer: Please acknowledge and provide an ETA for review. Prioritize M3 PRs first, then M4+ in milestone order.

## PM Status — Day 36 (2026-03-16) Day 34 review assignment deadline check. 0 reviewer activity after 2 days. **Assigned reviewer**: Please acknowledge and provide an ETA for review. Prioritize M3 PRs first, then M4+ in milestone order.
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 hamza.khyari 2026-03-17 18:34:28 +00:00
CoreRasurae requested changes 2026-03-18 19:07:30 +00:00
CoreRasurae left a comment
Member

Code Review: PR #808 -- WF09 Session-Driven Interactive Exploration

Scope: Branch test/int-wf09-session (commit 4851ee7d) -- robot/helper_wf09_session_exploration.py + robot/wf09_session_exploration.robot and close connections to surrounding code (helper_e2e_common.py, common.resource, session.py CLI/domain).

Reference: Issue #773, Spec Workflow Example 9 (lines 39724-39971), CLI session command reference (lines 1455-2519).

Review cycles: 3 full global passes across all categories (test flaws, bugs, performance, security, spec compliance). Cycle 3 found no additional issues.


Summary

Severity Count
High 4
Medium 7
Low 6
Total 17

The core test structure is sound -- 7 self-contained test cases with isolated workspaces and proper cleanup. The main concerns are systematically weak assertions (tests verify commands succeed but rarely verify output content), missing project-standard infrastructure (timeouts, tags, DB isolation), and a few spec-compliance deviations.


HIGH -- Test Flaws / Weak Assertions

H1. session_history_accumulation() does not verify message count

File: helper_wf09_session_exploration.py:199-257

Sends 3 messages via session tell (which stores 6 messages: 3 user + 3 assistant stubs). Calls session show --format plain but only asserts the session ID is present. Never checks the message_count: field in the plain output. The test would pass even if all messages were silently dropped.

Fix: Assert "message_count: 6" (or >= 6) appears in result.stdout after the 3 tell calls. The as_cli_dict() method (session domain model, line 341) emits this field.


H2. session_tell_basic() does not verify response content

File: helper_wf09_session_exploration.py:107-143

Only checks result.returncode == 0 and absence of "Traceback" / "INTERNAL" in stderr. Does not assert that result.stdout is non-empty or contains the expected "Acknowledged:" prefix (the stub response from session.py:536). The test would pass with completely empty output.

Fix: Add if not result.stdout.strip(): fail(...) and/or if "Acknowledged" not in result.stdout: fail(...).


H3. session_export_json() incomplete JSON structure validation

File: helper_wf09_session_exploration.py:260-322

Checks only session_id/id and messages keys. Missing validation for spec-mandated export fields: checksum, schema_version, created_at, updated_at, token_usage, namespace (see as_export_dict() at session domain model, lines 369-410). Additionally:

  • msg_count at line 318 is printed but never asserted (should be >= 2: 1 user + 1 assistant).
  • The "id" in data fallback at line 312 is dead code -- as_export_dict() always uses "session_id", never "id".

Fix: Assert presence of schema_version, checksum, created_at; assert msg_count >= 2; remove the "id" dead-code fallback.


H4. session_list_shows_created() does not verify session ID in listing

File: helper_wf09_session_exploration.py:325-363

Only asserts "total: 0" is NOT in stdout (line 358). Does not verify:

  • The actual session ID (sid) appears in the list output.
  • total: is present at all (a completely malformed output missing the total: key would pass).

Fix: Assert sid in result.stdout or verify "total: 1" appears. The plain format for session list renders each session as a JSON-serialized dict containing the session id field (see _session_list_dict at session CLI, line 91-106).


MEDIUM -- Infrastructure / Pattern Compliance

M1. Robot Run Process calls lack timeout and on_timeout

File: wf09_session_exploration.robot, all 7 test cases

None of the 7 Run Process calls specify timeout= or on_timeout=kill. The project standard (377 occurrences across other robot files) is timeout=120s on_timeout=kill. While the inner run_cli() in the Python helper has timeout=120, the outer Run Process in Robot does not. If the helper script itself hangs (e.g., import deadlock, migration hang), the entire test suite blocks indefinitely.

Fix: Add timeout=120s on_timeout=kill to each Run Process call. Example:

${result}=    Run Process    ${PYTHON}    ${HELPER}    create-session    cwd=${SUITE_HOME}    timeout=120s    on_timeout=kill

M2. write_yaml temp file leak in action_from_conversation

File: helper_wf09_session_exploration.py:402

write_yaml() (from helper_e2e_common.py:118) creates a temp file via tempfile.mkstemp() in the system temp directory, not inside the workspace. cleanup_workspace() only removes the workspace directory. The YAML temp file persists after the test.

Fix: Either create the YAML file inside the workspace (os.path.join(workspace, "action.yaml")) or add explicit os.unlink(action_yaml) cleanup.


M3. Missing database isolation in Robot suite setup

File: wf09_session_exploration.robot:7

Uses Setup Test Environment but not Setup Database Isolation or Setup Test Environment With Database Isolation. The common.resource documentation states: "suites that run helper scripts via Run Process should also call Setup Database Isolation." Other E2E suites (m3_decision_validation_smoke, m4_e2e_verification, m4_correction_subplan_smoke, m6_e2e_verification, audit_service_wiring) all use Setup Test Environment With Database Isolation.

While the Python helpers manage their own database, this deviates from the documented pattern and could cause issues under concurrent pabot execution.

Fix: Change to Suite Setup Setup Test Environment With Database Isolation.


M4. Automation profile mismatch with spec

File: helper_wf09_session_exploration.py:405

The issue title states "(review profile)" and Spec Workflow Example 9 (line 39743) shows Automation: review in the session settings. The action YAML in action_from_conversation uses automation_profile: manual.

Fix: Change to automation_profile: review to align with the spec workflow and issue title.


M5. No test tags

File: wf09_session_exploration.robot

Test cases have no [Tags] or Force Tags. The project standard is pervasive: 384 tag usages across robot files. Tags like integration, session, workflow, e2e enable filtered test runs and CI categorization.

Fix: Add Force Tags integration session workflow to the *** Settings *** section.


M6. No ULID format validation in _extract_session_id

File: helper_wf09_session_exploration.py:57-74

The extracted session ID is not validated as a proper ULID (26-character Crockford Base32 string). If the CLI returns malformed output (e.g., an error message after session_id:), the test would silently accept a garbage ID, and subsequent operations would fail with misleading errors.

Fix: Add a basic length/format check after extraction:

if len(sid) != 26 or not sid.isalnum():
    fail(f"Extracted session ID is not a valid ULID: {sid!r}")

M7. No negative / error-path tests

File: Both files

All 7 tests are happy-path only. Missing error-path coverage for:

  • session tell to a non-existent session ID (should exit 1 with "Session not found").
  • session show for an invalid/non-existent ID.
  • session export for a non-existent session.

The issue AC states "Test exercises session create, tell, show, and export commands" which implies both success and failure paths should be explored.

Fix: Add at least 1-2 negative test cases (e.g., session-tell-invalid, session-show-missing).


LOW -- Code Quality / Performance / Minor Spec Deviations

L1. Performance: redundant initialization per test

File: helper_wf09_session_exploration.py:44-54

Each of the 7 test functions calls _init_workspace() which runs both setup_workspace() (Alembic migrations in-process) and agents init --yes (CLI subprocess, potentially re-running migrations). This is 14 initialization passes across the suite. A single shared workspace with per-test sessions would reduce overhead significantly while maintaining test isolation.


L2. _init_workspace temp directory leak on migration failure

File: helper_wf09_session_exploration.py:44-54

If setup_workspace() throws during MigrationRunner.init_or_upgrade(), the temp directory created by mkdtemp() leaks. The exception bypasses the outer try/finally block in the calling function since _init_workspace() is called before the try statement.

Fix: Wrap setup_workspace() in its own try/except within _init_workspace() to clean up on failure.


L3. session_show_details() verifies only session ID

File: helper_wf09_session_exploration.py:146-196

Does not check any metadata fields in the session show --format plain output: message_count, created_at, recent_messages, token_usage. These are part of the spec's expected output (Workflow Example 9, Step 3, line 39913-39943).


L4. session create never exercises --actor flag

File: helper_wf09_session_exploration.py

Spec Workflow Example 9 (line 39733) shows agents session create --actor anthropic/claude-3.5-sonnet. All 7 test functions create sessions without --actor. The --actor integration path is never exercised.


L5. Dead-code fallback in _extract_session_id and export check

File: helper_wf09_session_exploration.py:68-71, 312

  • _extract_session_id includes an id: prefix fallback (line 68-71) that will never match session create --format plain output (which uses session_id:).
  • session_export_json checks "id" in data (line 312) but as_export_dict() always emits session_id, never id.

Both are dead code indicating API uncertainty during development.


L6. Missing explicit encoding on file open

File: helper_wf09_session_exploration.py:307

open(export_path) without encoding="utf-8" relies on locale-dependent default encoding. While unlikely to cause issues in CI, explicit encoding is a defensive coding practice.

Fix: with open(export_path, encoding="utf-8") as fh:

# Code Review: PR #808 -- WF09 Session-Driven Interactive Exploration **Scope**: Branch `test/int-wf09-session` (commit `4851ee7d`) -- `robot/helper_wf09_session_exploration.py` + `robot/wf09_session_exploration.robot` and close connections to surrounding code (`helper_e2e_common.py`, `common.resource`, `session.py` CLI/domain). **Reference**: Issue #773, Spec Workflow Example 9 (lines 39724-39971), CLI session command reference (lines 1455-2519). **Review cycles**: 3 full global passes across all categories (test flaws, bugs, performance, security, spec compliance). Cycle 3 found no additional issues. --- ## Summary | Severity | Count | |----------|-------| | High | 4 | | Medium | 7 | | Low | 6 | | **Total**| **17**| The core test structure is sound -- 7 self-contained test cases with isolated workspaces and proper cleanup. The main concerns are **systematically weak assertions** (tests verify commands succeed but rarely verify output content), **missing project-standard infrastructure** (timeouts, tags, DB isolation), and a few **spec-compliance deviations**. --- ## HIGH -- Test Flaws / Weak Assertions ### H1. `session_history_accumulation()` does not verify message count **File**: `helper_wf09_session_exploration.py:199-257` Sends 3 messages via `session tell` (which stores 6 messages: 3 user + 3 assistant stubs). Calls `session show --format plain` but only asserts the session ID is present. Never checks the `message_count:` field in the plain output. The test would pass even if all messages were silently dropped. **Fix**: Assert `"message_count: 6"` (or `>= 6`) appears in `result.stdout` after the 3 tell calls. The `as_cli_dict()` method (session domain model, line 341) emits this field. --- ### H2. `session_tell_basic()` does not verify response content **File**: `helper_wf09_session_exploration.py:107-143` Only checks `result.returncode == 0` and absence of `"Traceback"` / `"INTERNAL"` in stderr. Does not assert that `result.stdout` is non-empty or contains the expected `"Acknowledged:"` prefix (the stub response from `session.py:536`). The test would pass with completely empty output. **Fix**: Add `if not result.stdout.strip(): fail(...)` and/or `if "Acknowledged" not in result.stdout: fail(...)`. --- ### H3. `session_export_json()` incomplete JSON structure validation **File**: `helper_wf09_session_exploration.py:260-322` Checks only `session_id`/`id` and `messages` keys. Missing validation for spec-mandated export fields: `checksum`, `schema_version`, `created_at`, `updated_at`, `token_usage`, `namespace` (see `as_export_dict()` at session domain model, lines 369-410). Additionally: - `msg_count` at line 318 is printed but never asserted (should be `>= 2`: 1 user + 1 assistant). - The `"id" in data` fallback at line 312 is dead code -- `as_export_dict()` always uses `"session_id"`, never `"id"`. **Fix**: Assert presence of `schema_version`, `checksum`, `created_at`; assert `msg_count >= 2`; remove the `"id"` dead-code fallback. --- ### H4. `session_list_shows_created()` does not verify session ID in listing **File**: `helper_wf09_session_exploration.py:325-363` Only asserts `"total: 0"` is NOT in stdout (line 358). Does not verify: - The actual session ID (`sid`) appears in the list output. - `total:` is present at all (a completely malformed output missing the `total:` key would pass). **Fix**: Assert `sid in result.stdout` or verify `"total: 1"` appears. The plain format for `session list` renders each session as a JSON-serialized dict containing the session `id` field (see `_session_list_dict` at session CLI, line 91-106). --- ## MEDIUM -- Infrastructure / Pattern Compliance ### M1. Robot `Run Process` calls lack timeout and on_timeout **File**: `wf09_session_exploration.robot`, all 7 test cases None of the 7 `Run Process` calls specify `timeout=` or `on_timeout=kill`. The project standard (377 occurrences across other robot files) is `timeout=120s on_timeout=kill`. While the inner `run_cli()` in the Python helper has `timeout=120`, the outer `Run Process` in Robot does not. If the helper script itself hangs (e.g., import deadlock, migration hang), the entire test suite blocks indefinitely. **Fix**: Add `timeout=120s on_timeout=kill` to each `Run Process` call. Example: ``` ${result}= Run Process ${PYTHON} ${HELPER} create-session cwd=${SUITE_HOME} timeout=120s on_timeout=kill ``` --- ### M2. `write_yaml` temp file leak in `action_from_conversation` **File**: `helper_wf09_session_exploration.py:402` `write_yaml()` (from `helper_e2e_common.py:118`) creates a temp file via `tempfile.mkstemp()` in the **system** temp directory, not inside the workspace. `cleanup_workspace()` only removes the workspace directory. The YAML temp file persists after the test. **Fix**: Either create the YAML file inside the workspace (`os.path.join(workspace, "action.yaml")`) or add explicit `os.unlink(action_yaml)` cleanup. --- ### M3. Missing database isolation in Robot suite setup **File**: `wf09_session_exploration.robot:7` Uses `Setup Test Environment` but not `Setup Database Isolation` or `Setup Test Environment With Database Isolation`. The `common.resource` documentation states: *"suites that run helper scripts via Run Process should also call Setup Database Isolation."* Other E2E suites (`m3_decision_validation_smoke`, `m4_e2e_verification`, `m4_correction_subplan_smoke`, `m6_e2e_verification`, `audit_service_wiring`) all use `Setup Test Environment With Database Isolation`. While the Python helpers manage their own database, this deviates from the documented pattern and could cause issues under concurrent `pabot` execution. **Fix**: Change to `Suite Setup Setup Test Environment With Database Isolation`. --- ### M4. Automation profile mismatch with spec **File**: `helper_wf09_session_exploration.py:405` The issue title states "(review profile)" and Spec Workflow Example 9 (line 39743) shows `Automation: review` in the session settings. The action YAML in `action_from_conversation` uses `automation_profile: manual`. **Fix**: Change to `automation_profile: review` to align with the spec workflow and issue title. --- ### M5. No test tags **File**: `wf09_session_exploration.robot` Test cases have no `[Tags]` or `Force Tags`. The project standard is pervasive: 384 tag usages across robot files. Tags like `integration`, `session`, `workflow`, `e2e` enable filtered test runs and CI categorization. **Fix**: Add `Force Tags integration session workflow` to the `*** Settings ***` section. --- ### M6. No ULID format validation in `_extract_session_id` **File**: `helper_wf09_session_exploration.py:57-74` The extracted session ID is not validated as a proper ULID (26-character Crockford Base32 string). If the CLI returns malformed output (e.g., an error message after `session_id:`), the test would silently accept a garbage ID, and subsequent operations would fail with misleading errors. **Fix**: Add a basic length/format check after extraction: ```python if len(sid) != 26 or not sid.isalnum(): fail(f"Extracted session ID is not a valid ULID: {sid!r}") ``` --- ### M7. No negative / error-path tests **File**: Both files All 7 tests are happy-path only. Missing error-path coverage for: - `session tell` to a non-existent session ID (should exit 1 with "Session not found"). - `session show` for an invalid/non-existent ID. - `session export` for a non-existent session. The issue AC states *"Test exercises session create, tell, show, and export commands"* which implies both success and failure paths should be explored. **Fix**: Add at least 1-2 negative test cases (e.g., `session-tell-invalid`, `session-show-missing`). --- ## LOW -- Code Quality / Performance / Minor Spec Deviations ### L1. Performance: redundant initialization per test **File**: `helper_wf09_session_exploration.py:44-54` Each of the 7 test functions calls `_init_workspace()` which runs **both** `setup_workspace()` (Alembic migrations in-process) **and** `agents init --yes` (CLI subprocess, potentially re-running migrations). This is 14 initialization passes across the suite. A single shared workspace with per-test sessions would reduce overhead significantly while maintaining test isolation. --- ### L2. `_init_workspace` temp directory leak on migration failure **File**: `helper_wf09_session_exploration.py:44-54` If `setup_workspace()` throws during `MigrationRunner.init_or_upgrade()`, the temp directory created by `mkdtemp()` leaks. The exception bypasses the outer `try/finally` block in the calling function since `_init_workspace()` is called **before** the `try` statement. **Fix**: Wrap `setup_workspace()` in its own try/except within `_init_workspace()` to clean up on failure. --- ### L3. `session_show_details()` verifies only session ID **File**: `helper_wf09_session_exploration.py:146-196` Does not check any metadata fields in the `session show --format plain` output: `message_count`, `created_at`, `recent_messages`, `token_usage`. These are part of the spec's expected output (Workflow Example 9, Step 3, line 39913-39943). --- ### L4. `session create` never exercises `--actor` flag **File**: `helper_wf09_session_exploration.py` Spec Workflow Example 9 (line 39733) shows `agents session create --actor anthropic/claude-3.5-sonnet`. All 7 test functions create sessions without `--actor`. The `--actor` integration path is never exercised. --- ### L5. Dead-code fallback in `_extract_session_id` and export check **File**: `helper_wf09_session_exploration.py:68-71, 312` - `_extract_session_id` includes an `id:` prefix fallback (line 68-71) that will never match `session create --format plain` output (which uses `session_id:`). - `session_export_json` checks `"id" in data` (line 312) but `as_export_dict()` always emits `session_id`, never `id`. Both are dead code indicating API uncertainty during development. --- ### L6. Missing explicit encoding on file open **File**: `helper_wf09_session_exploration.py:307` `open(export_path)` without `encoding="utf-8"` relies on locale-dependent default encoding. While unlikely to cause issues in CI, explicit encoding is a defensive coding practice. **Fix**: `with open(export_path, encoding="utf-8") as fh:`
brent.edwards force-pushed test/int-wf09-session from 6ba2800382 to 2773e2cca7 2026-03-18 22:14:22 +00:00 Compare
brent.edwards force-pushed test/int-wf09-session from 2773e2cca7 to f75bc402e0 2026-03-18 23:12:46 +00:00 Compare
Author
Member

Review Fixes Applied — Commit f75bc402

All HIGH and targeted MEDIUM/LOW findings from @CoreRasurae's review have been addressed in the amended commit.

HIGH (4/4 fixed)

ID Finding Fix
H1 session_history_accumulation() never verifies message count Assert "message_count" appears in result.stdout after 3 tell calls
H2 session_tell_basic() passes with empty output Added if not result.stdout.strip(): fail(...) guard
H3 session_export_json() incomplete validation Assert schema_version key present; assert msg_count >= 2; removed dead "id" in data fallback
H4 session_list_shows_created() doesn't verify session ID in listing Assert sid in result.stdout (replaced weak total: 0 negative check)

MEDIUM (4/7 fixed)

ID Finding Fix
M1 Robot Run Process calls lack timeout Added timeout=${TIMEOUT} on_timeout=kill to all 7 Run Process calls; added ${TIMEOUT} 120s variable
M4 automation_profile: manual mismatches spec Changed to automation_profile: review
M5 No test tags Added Force Tags integration session workflow wf09 to Settings
M6 No ULID format validation Added 26-char alphanumeric check in _extract_session_id

LOW (2/6 fixed)

ID Finding Fix
L5 Dead-code id: fallback in _extract_session_id Removed the id: prefix fallback branch entirely
L6 Missing explicit encoding on file open Added encoding="utf-8" to open(export_path, ...)

Other

Quality Gates

  • nox -s lint: passed (0 errors)
  • nox -s typecheck: passed (0 errors, 1 pre-existing warning in unrelated file)
  • File sizes: helper 473 lines, robot 71 lines (both under 500)
## Review Fixes Applied — Commit `f75bc402` All HIGH and targeted MEDIUM/LOW findings from @CoreRasurae's review have been addressed in the amended commit. ### HIGH (4/4 fixed) | ID | Finding | Fix | |----|---------|-----| | **H1** | `session_history_accumulation()` never verifies message count | Assert `"message_count"` appears in `result.stdout` after 3 tell calls | | **H2** | `session_tell_basic()` passes with empty output | Added `if not result.stdout.strip(): fail(...)` guard | | **H3** | `session_export_json()` incomplete validation | Assert `schema_version` key present; assert `msg_count >= 2`; removed dead `"id" in data` fallback | | **H4** | `session_list_shows_created()` doesn't verify session ID in listing | Assert `sid in result.stdout` (replaced weak `total: 0` negative check) | ### MEDIUM (4/7 fixed) | ID | Finding | Fix | |----|---------|-----| | **M1** | Robot `Run Process` calls lack timeout | Added `timeout=${TIMEOUT} on_timeout=kill` to all 7 `Run Process` calls; added `${TIMEOUT} 120s` variable | | **M4** | `automation_profile: manual` mismatches spec | Changed to `automation_profile: review` | | **M5** | No test tags | Added `Force Tags integration session workflow wf09` to Settings | | **M6** | No ULID format validation | Added 26-char alphanumeric check in `_extract_session_id` | ### LOW (2/6 fixed) | ID | Finding | Fix | |----|---------|-----| | **L5** | Dead-code `id:` fallback in `_extract_session_id` | Removed the `id:` prefix fallback branch entirely | | **L6** | Missing explicit encoding on file open | Added `encoding="utf-8"` to `open(export_path, ...)` | ### Other - Added CHANGELOG entry under `## Unreleased` for #773 ### Quality Gates - `nox -s lint`: **passed** (0 errors) - `nox -s typecheck`: **passed** (0 errors, 1 pre-existing warning in unrelated file) - File sizes: helper 473 lines, robot 71 lines (both under 500)
Author
Member

Review Fixes Applied — Commit f75bc402

Addressed CoreRasurae's 17 findings. Merge commits eliminated by rebase.

HIGH (4/4 fixed)

Finding Fix
H1 Assert message_count in session show output
H2 Fail if session tell stdout is empty
H3 Assert schema_version key; assert msg_count >= 2; removed dead "id" fallback
H4 Assert session ID appears in list output

MEDIUM (4/7 fixed)

Finding Fix
M1 timeout=120s on_timeout=kill on all 7 Robot Run Process calls
M4 Changed automation_profile: manualreview (spec compliance)
M5 Added Force Tags integration session workflow wf09
M6 Added ULID format validation (26-char alphanumeric check)

LOW (2/6 fixed)

  • L5: Removed dead id: fallback code
  • L6: Added encoding="utf-8" on file open

CHANGELOG

Added entry for #773.

  • nox -s lintPASS
  • nox -s typecheckPASS (0 errors)
  • Single commit, zero merge commits
## Review Fixes Applied — Commit `f75bc402` Addressed CoreRasurae's 17 findings. Merge commits eliminated by rebase. ### HIGH (4/4 fixed) | Finding | Fix | |---------|-----| | **H1** | Assert `message_count` in session show output | | **H2** | Fail if `session tell` stdout is empty | | **H3** | Assert `schema_version` key; assert `msg_count >= 2`; removed dead `"id"` fallback | | **H4** | Assert session ID appears in list output | ### MEDIUM (4/7 fixed) | Finding | Fix | |---------|-----| | **M1** | `timeout=120s on_timeout=kill` on all 7 Robot Run Process calls | | **M4** | Changed `automation_profile: manual` → `review` (spec compliance) | | **M5** | Added `Force Tags integration session workflow wf09` | | **M6** | Added ULID format validation (26-char alphanumeric check) | ### LOW (2/6 fixed) - **L5**: Removed dead `id:` fallback code - **L6**: Added `encoding="utf-8"` on file open ### CHANGELOG Added entry for #773. - `nox -s lint` — **PASS** - `nox -s typecheck` — **PASS** (0 errors) - Single commit, zero merge commits
freemo approved these changes 2026-03-19 04:57:26 +00:00
Dismissed
freemo left a comment
Owner

Code Review — PR #808

Well-structured integration test for WF09. Proper labels, milestone, and issue linkage. Approved.

## Code Review — PR #808 Well-structured integration test for WF09. Proper labels, milestone, and issue linkage. **Approved.**
brent.edwards dismissed freemo's review 2026-03-21 04:25:02 +00:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

brent.edwards force-pushed test/int-wf09-session from abea8f79a0 to 5b8df50242 2026-03-26 20:02:51 +00:00 Compare
freemo self-assigned this 2026-04-02 06:15:22 +00:00
Owner

🤖 Backlog Groomer (groomer-1): Closing as duplicate of #773.

Issue #773 (test(integration): workflow example 9 — session-driven interactive exploration) is the canonical version with full labels (MoSCoW/Must have, Priority/Medium, State/In Review, Type/Testing) and milestone v3.6.0. This issue is an exact title duplicate.

🤖 **Backlog Groomer (groomer-1):** Closing as duplicate of #773. Issue #773 (`test(integration): workflow example 9 — session-driven interactive exploration`) is the canonical version with full labels (`MoSCoW/Must have`, `Priority/Medium`, `State/In Review`, `Type/Testing`) and milestone `v3.6.0`. This issue is an exact title duplicate.
freemo closed this pull request 2026-04-02 17:32:56 +00:00
Some required checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 24s
Required
Details
CI / quality (pull_request) Successful in 3m50s
Required
Details
CI / integration_tests (pull_request) Successful in 7m25s
Required
Details
CI / security (pull_request) Failing after 11m4s
Required
Details
CI / typecheck (pull_request) Failing after 11m5s
Required
Details
CI / lint (pull_request) Failing after 11m5s
Required
Details
CI / e2e_tests (pull_request) Successful in 13m41s
CI / coverage (pull_request) Has been skipped
Required
Details
CI / benchmark-regression (pull_request) Has been skipped
CI / unit_tests (pull_request) Failing after 21m3s
Required
Details
CI / docker (pull_request) Has been cancelled
Required
Details
CI / status-check (pull_request) Has been cancelled

Pull request closed

Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Reference: cleveragents/cleveragents-core#808