Files
cleveragents-core/features/tdd_session_create_persist.feature
T
brent.edwards 7e9a45044b
CI / integration_tests (push) Has been cancelled
CI / e2e_tests (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / build (push) Has been cancelled
CI / helm (push) Has been cancelled
CI / security (push) Has been cancelled
CI / typecheck (push) Has been cancelled
CI / benchmark-publish (push) Has been cancelled
CI / unit_tests (push) Has been cancelled
CI / quality (push) Has been cancelled
CI / benchmark-regression (push) Has been cancelled
CI / docker (push) Has been cancelled
CI / status-check (push) Has been cancelled
CI / coverage (push) Has been cancelled
fix(session): session create does not persist session for subsequent list
The CLI `session create` command created the session via SessionService.create()
(which commits via auto_commit=True), then called _facade_dispatch("session.create")
for A2A protocol bookkeeping. The facade handler unconditionally called
svc.create() on a second PersistentSessionService instance (a new Factory
resolution from the DI container with its own engine), creating a duplicate
session in the database.

The fix makes A2aLocalFacade._handle_session_create() idempotent: when a
session_id is already present in the params, it acknowledges the existing
session without creating a new one. The CLI dispatch params were also fixed
to use the correct key name (actor_name instead of actor).

Changes:
- src/cleveragents/a2a/facade.py: Early return in _handle_session_create when
  session_id is already supplied, preventing duplicate session creation.
- src/cleveragents/cli/commands/session.py: Fixed param key from "actor" to
  "actor_name" for consistency with the facade handler.
- features/a2a_facade_wiring.feature: Added idempotency scenario verifying
  that session.create with an existing session_id does not call svc.create().
- features/steps/a2a_facade_wiring_steps.py: Added step asserting mock
  SessionService.create was not called.
- features/tdd_session_create_persist.feature: Removed @tdd_expected_fail tag
  now that the bug is fixed.
- robot/e2e/e2e_session_create_persist.robot: Removed tdd_expected_fail tag,
  updated documentation.
- .semgrep.yml: Excluded wrapping.py from no-exec/no-compile-exec rules
  (pre-existing sandboxed exec usage for tool transforms).

ISSUES CLOSED: #1141

Co-authored-by: Brent E. Edwards <brent.edwards@cleverthis.com>
Co-committed-by: Brent E. Edwards <brent.edwards@cleverthis.com>
2026-04-02 16:51:04 +00:00

23 lines
1.1 KiB
Gherkin

@tdd_issue @tdd_issue_1141
Feature: Bug #1141 — session create persists for session list
As a developer
I want to verify that a session created via `agents session create`
appears in a subsequent `agents session list`
So that the session CRUD lifecycle works end-to-end
Fixed: The A2A facade handler now skips creation when a session_id is
already supplied in the params, preventing duplicate sessions (#1141).
Scenario: Init then create should make list total increase from 0 to 1
Given a CLI runner using the real session DI path
When I tdd1141 invoke init with force yes
Then the tdd1141 init should exit successfully
When I tdd1141 invoke session list with format json
Then the tdd1141 session list should exit successfully
And the tdd1141 session list output should report total 0
When I tdd1141 invoke session create
Then the tdd1141 session create should exit successfully
When I tdd1141 invoke session list with format json
Then the tdd1141 session list should exit successfully
And the tdd1141 session list output should report total 1