fix(session): session create does not persist session for subsequent list
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
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
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>
This commit was merged in pull request #1216.
This commit is contained in:
@@ -1,14 +1,12 @@
|
||||
@tdd_expected_fail @tdd_issue @tdd_issue_1141
|
||||
Feature: TDD Bug #1141 — session create does not persist for session list
|
||||
@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 persistence bug is captured and will be caught by a regression test
|
||||
So that the session CRUD lifecycle works end-to-end
|
||||
|
||||
The bug: `agents session create` succeeds (exit code 0) but the created
|
||||
session does not appear when `agents session list` is invoked immediately
|
||||
after. This test captures bug #1141 and intentionally keeps
|
||||
`@tdd_expected_fail` so CI passes while the bug remains unfixed.
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user