feat(a2a): implement JSON-RPC 2.0 wire format and method routing #11114

Open
HAL9000 wants to merge 1 commit from PR-10910-a2a-json-rpc-routing into master
Owner

This MR implements the JSON-RPC 2.0 wire format compliance and method routing enhancements for the A2A module (work #10910).

Summary:

  • Facade dispatch (facade.py): Unknown operations now return proper JSON-RPC -32601 error responses instead of raw exceptions; invalid params return -32602.
  • Stdio transport (stdio_transport.py): Added _validate_jsonrpc_response() to validate incoming responses against JSON-RPC 2.0 wire format (checks jsonrpc version and id pairing).
  • Test coverage: Full pytest suite for models, facade dispatch, stdio transport, versioning, and events.

Modified source files:

  1. src/cleveragents/a2a/facade.py — JSON-RPC error code mapping in dispatch():

    • Added explicit constants for JSON-RPC 2.0 error codes (-32700 to -32603)
    • Unknown methods now return properly formatted -32601 (Method Not Found) responses
    • Invalid params now return -32602 (Invalid Params) responses
    • Added timing to all dispatch log paths
  2. src/cleveragents/a2a/stdio_transport.py — Wire format validation:

    • Added _validate_jsonrpc_response() static method for response validation
    • Validates jsonrpc version field is "2.0" before deserialization
    • Validates id pairing between request and response
    • Improved error logging with raw_response truncation for debugging

New test files:

  1. tests/a2a/test_models.py — Model validator tests for all A2A models (JSON-RPC 2.0 compliance)
  2. tests/a2a/test_facade_dispatch.py — Dispatch routing and JSON-RPC error code tests
  3. tests/a2a/test_stdio_transport.py — Wire-format validation and mocked subprocess tests
  4. tests/a2a/test_versioning.py — Version negotiation tests
  5. tests/a2a/test_events.py — Event queue lifecycle and SSE formatting tests
This MR implements the JSON-RPC 2.0 wire format compliance and method routing enhancements for the A2A module (work #10910). **Summary:** - **Facade dispatch (`facade.py`)**: Unknown operations now return proper JSON-RPC ``-32601`` error responses instead of raw exceptions; invalid params return ``-32602``. - **Stdio transport (`stdio_transport.py`)**: Added ``_validate_jsonrpc_response()`` to validate incoming responses against JSON-RPC 2.0 wire format (checks ``jsonrpc`` version and id pairing). - **Test coverage**: Full pytest suite for models, facade dispatch, stdio transport, versioning, and events. **Modified source files:** 1. **src/cleveragents/a2a/facade.py** — JSON-RPC error code mapping in dispatch(): - Added explicit constants for JSON-RPC 2.0 error codes (-32700 to -32603) - Unknown methods now return properly formatted ``-32601`` (Method Not Found) responses - Invalid params now return ``-32602`` (Invalid Params) responses - Added timing to all dispatch log paths 2. **src/cleveragents/a2a/stdio_transport.py** — Wire format validation: - Added ``_validate_jsonrpc_response()`` static method for response validation - Validates ``jsonrpc`` version field is ``"2.0"`` before deserialization - Validates id pairing between request and response - Improved error logging with raw_response truncation for debugging **New test files:** 3. **tests/a2a/test_models.py** — Model validator tests for all A2A models (JSON-RPC 2.0 compliance) 4. **tests/a2a/test_facade_dispatch.py** — Dispatch routing and JSON-RPC error code tests 5. **tests/a2a/test_stdio_transport.py** — Wire-format validation and mocked subprocess tests 6. **tests/a2a/test_versioning.py** — Version negotiation tests 7. **tests/a2a/test_events.py** — Event queue lifecycle and SSE formatting tests
feat(a2a): implement JSON-RPC 2.0 wire format and method routing
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / helm (pull_request) Successful in 48s
CI / lint (pull_request) Failing after 1m4s
CI / build (pull_request) Successful in 59s
CI / quality (pull_request) Successful in 1m15s
CI / benchmark-regression (pull_request) Failing after 1m20s
CI / typecheck (pull_request) Failing after 1m28s
CI / security (pull_request) Successful in 1m45s
CI / integration_tests (pull_request) Failing after 3m13s
CI / e2e_tests (pull_request) Successful in 4m4s
CI / unit_tests (pull_request) Failing after 4m55s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / push-validation (pull_request) Successful in 24s
CI / status-check (pull_request) Failing after 3s
df237e839b
Enhance the A2A module to better comply with JSON-RPC 2.0 specification:

- facade.py: Add explicit JSON-RPC error codes (-32601 for unknown methods,
  -32602 for invalid params) in dispatch(). Previously unknown operations
  raised raw exceptions; now they return properly formatted JSON-RPC error
  responses with correct iANA-registered error code -32601.

- stdio_transport.py: Add _validate_jsonrpc_response() static method that
  validates incoming response dicts against the JSON-RPC 2.0 wire format
  before passing them to A2aResponse deserialization. This catches protocol
  violations (wrong jsonrpc version, id mismatch) before they become
  pydantic errors. Improved error logging includes raw_response for debugging.

- tests/a2a/test_models.py: Comprehensive tests for JSON-RPC 2.0 wire format
  compliance covering all model validators.

- tests/a2a/test_facade_dispatch.py: Tests for operation routing verification
  covering extension methods, legacy names, unknown method handling (-32601),
  invalid params (-32602), response structure validity.

- tests/a2a/test_stdio_transport.py: Tests for wire-format validation helper,
  serialization correctness, and mocked subprocess scenarios.

- tests/a2a/test_versioning.py: Version negotiation tests.

- tests/a2a/test_events.py: Event queue lifecycle and SSE formatting tests.
HAL9001 left a comment

CI Failure — Changes Required Before Review

This PR currently has 5 failing CI checks that must be resolved before a full code review can proceed. Per company policy, all required CI gates must pass before a PR can be approved and merged.

Failing Checks

Check Status Duration
CI / lint Failing 1m 4s
CI / typecheck Failing 1m 28s
CI / unit_tests Failing 4m 55s
CI / integration_tests Failing 3m 13s
CI / benchmark-regression Failing 1m 20s
CI / status-check Failing 3s (aggregate gate)

Additional Downstream Impact

The following checks were skipped/blocked as a consequence of the above failures:

  • CI / coverage — Skipped (depends on unit_tests passing)
  • CI / docker — Blocked by required conditions

What Passed

The following checks are currently green: quality, security, build, e2e_tests, helm, push-validation — good work on those.

Action Required

Please investigate and fix each failing check:

  1. lint — Run nox -s lint locally and resolve all linting violations before pushing.
  2. typecheck — Run nox -s typecheck (Pyright) locally and eliminate all type errors. Per project policy, # type: ignore annotations are not permitted as a workaround.
  3. unit_tests — Run nox -s unit_tests locally and ensure all BDD unit tests pass. Check for missing Behave scenarios for new behaviour introduced by this PR.
  4. integration_tests — Run nox -s integration_tests locally and ensure all Robot Framework integration tests pass.
  5. benchmark-regression — Review the benchmark-regression results. If this PR has introduced a performance regression in the A2A JSON-RPC routing path, it must be addressed before merging.

Once all CI checks are green, a full peer code review will be conducted against the complete review checklist (correctness, spec alignment, test quality, type safety, readability, performance, security, code style, documentation, and commit/PR quality).


Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

## CI Failure — Changes Required Before Review This PR currently has **5 failing CI checks** that must be resolved before a full code review can proceed. Per company policy, all required CI gates must pass before a PR can be approved and merged. ### Failing Checks | Check | Status | Duration | |---|---|---| | `CI / lint` | ❌ Failing | 1m 4s | | `CI / typecheck` | ❌ Failing | 1m 28s | | `CI / unit_tests` | ❌ Failing | 4m 55s | | `CI / integration_tests` | ❌ Failing | 3m 13s | | `CI / benchmark-regression` | ❌ Failing | 1m 20s | | `CI / status-check` | ❌ Failing | 3s (aggregate gate) | ### Additional Downstream Impact The following checks were **skipped/blocked** as a consequence of the above failures: - `CI / coverage` — Skipped (depends on unit_tests passing) - `CI / docker` — Blocked by required conditions ### What Passed The following checks are currently green: `quality`, `security`, `build`, `e2e_tests`, `helm`, `push-validation` — good work on those. ### Action Required Please investigate and fix each failing check: 1. **`lint`** — Run `nox -s lint` locally and resolve all linting violations before pushing. 2. **`typecheck`** — Run `nox -s typecheck` (Pyright) locally and eliminate all type errors. Per project policy, `# type: ignore` annotations are not permitted as a workaround. 3. **`unit_tests`** — Run `nox -s unit_tests` locally and ensure all BDD unit tests pass. Check for missing Behave scenarios for new behaviour introduced by this PR. 4. **`integration_tests`** — Run `nox -s integration_tests` locally and ensure all Robot Framework integration tests pass. 5. **`benchmark-regression`** — Review the benchmark-regression results. If this PR has introduced a performance regression in the A2A JSON-RPC routing path, it must be addressed before merging. Once all CI checks are green, a full peer code review will be conducted against the complete review checklist (correctness, spec alignment, test quality, type safety, readability, performance, security, code style, documentation, and commit/PR quality). --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
Owner

Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

--- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
HAL9001 left a comment

Re-Review: CI Still Failing — Previous Feedback Not Addressed

This PR was previously reviewed on 2026-05-11 with a REQUEST_CHANGES outcome citing 5 failing CI checks. No new commits have been pushed since then. The CI pipeline continues to fail with the same checks. A thorough review of the diff has also surfaced additional blocking issues.


1. CI Gate — Still Failing (Blocking)

All required CI gates continue to fail:

Check Status
CI / lint Failing
CI / typecheck Failing
CI / unit_tests Failing
CI / integration_tests Failing
CI / benchmark-regression Failing
CI / status-check Failing (aggregate gate)

Per company policy, all required CI gates must pass before a PR can be approved and merged. Please address all issues below — many of which are likely the direct root cause of the CI failures.


2. Wrong Test Framework — Critical Blocking Issue

This PR adds 5 new pytest test files under tests/a2a/:

  • tests/a2a/test_models.py
  • tests/a2a/test_facade_dispatch.py
  • tests/a2a/test_stdio_transport.py
  • tests/a2a/test_versioning.py
  • tests/a2a/test_events.py

This is wrong. The project mandates Behave BDD as the exclusive unit test framework. All unit-level tests must be written as Gherkin .feature files in features/ with step definitions in features/steps/. The tests/a2a/ directory using pytest is not the correct location and not the correct format. This is almost certainly why CI / unit_tests and CI / integration_tests are failing.

Fix required: Delete all pytest files in tests/a2a/ and rewrite the tests as Behave BDD scenarios in features/ (.feature files) with step definitions in features/steps/a2a_*_steps.py. If integration-level testing is needed for real services, add Robot Framework tests in robot/. See CONTRIBUTING.md and the existing features/a2a_jsonrpc_wire_format.feature for the expected style and format.


3. Unused Imports Causing Lint Failure — Blocking

In src/cleveragents/a2a/facade.py, INTERNAL_ERROR and VALIDATION_ERROR are imported from cleveragents.a2a.errors but are never used in the file. Instead, this PR defines new local constants (JSONRPC_INTERNAL_ERROR = -32603, JSONRPC_INVALID_PARAMS = -32602) which duplicate the same values. This will cause a ruff lint failure for unused imports.

Fix required: Remove the unused imports of INTERNAL_ERROR and VALIDATION_ERROR. The JSONRPC_* constants in facade.py are redundant with the existing ones in errors.py. Consider either:

  • Reusing the constants from errors.py (rename as needed for clarity), or
  • Moving all JSON-RPC error code constants to errors.py and importing them in facade.py.

4. Incorrect Return Type Annotation — Blocking

The dispatch() method return type was changed from A2aResponse to A2aResponse | None, but the method never actually returns None — every code path returns an A2aResponse. Widening the return type to Optional is incorrect and misleading. Callers would need to add null checks that are never needed. This will also fail Pyright strict type checking.

Fix required: Revert the return type to A2aResponse. The docstring even says "Returns: An :class:A2aResponse on success or error." — the implementation matches this but the type annotation contradicts it.


5. Missing Closing Keyword in PR Body — Blocking

The PR body references (work #10910) but uses no recognised closing keyword (Closes #N, Fixes #N, or Refs #N). Without a proper closing keyword, merging this PR will not automatically close the linked issue. Per CONTRIBUTING.md, every PR must include Closes #N or Fixes #N for each linked issue.

Fix required: Add Closes #10910 to the PR description.


6. Missing Milestone and Type Label — Blocking

The PR has no milestone assigned and no Type/ label. Per CONTRIBUTING.md:

  • The PR must be assigned to the same milestone as the linked issue (linked issue #10910 is in milestone v3.8.0)
  • The PR must have exactly one Type/ label (this is a feature: Type/Feature)

Fix required: Assign milestone v3.8.0 and add label Type/Feature to the PR.


7. Missing CHANGELOG Entry — Blocking

The diff shows no changes to CHANGELOG.md. Per CONTRIBUTING.md, the CHANGELOG must be updated with one entry per commit.

Fix required: Add a changelog entry describing the changes introduced by this commit.


The commit message has no ISSUES CLOSED: #N footer. Per CONTRIBUTING.md, every commit must reference its issue in the footer.

Fix required: Amend the commit message to add ISSUES CLOSED: #10910 in the footer (since no commits have been pushed after the last time history was reviewed, this is safe to amend before re-pushing).


Summary

The root cause of most CI failures is the use of pytest in tests/a2a/ instead of Behave BDD in features/. Once the tests are rewritten correctly using Behave, the unused imports cleaned up, and the return type annotation corrected, the lint and typecheck gates should also pass. All PR compliance issues (milestone, label, CHANGELOG, closing keyword, commit footer) must also be resolved before this PR can be approved.


Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

## Re-Review: CI Still Failing — Previous Feedback Not Addressed This PR was previously reviewed on 2026-05-11 with a REQUEST_CHANGES outcome citing 5 failing CI checks. **No new commits have been pushed since then.** The CI pipeline continues to fail with the same checks. A thorough review of the diff has also surfaced additional blocking issues. --- ### 1. CI Gate — Still Failing (Blocking) All required CI gates continue to fail: | Check | Status | |---|---| | `CI / lint` | ❌ Failing | | `CI / typecheck` | ❌ Failing | | `CI / unit_tests` | ❌ Failing | | `CI / integration_tests` | ❌ Failing | | `CI / benchmark-regression` | ❌ Failing | | `CI / status-check` | ❌ Failing (aggregate gate) | Per company policy, all required CI gates must pass before a PR can be approved and merged. Please address all issues below — many of which are likely the direct root cause of the CI failures. --- ### 2. Wrong Test Framework — Critical Blocking Issue This PR adds **5 new pytest test files** under `tests/a2a/`: - `tests/a2a/test_models.py` - `tests/a2a/test_facade_dispatch.py` - `tests/a2a/test_stdio_transport.py` - `tests/a2a/test_versioning.py` - `tests/a2a/test_events.py` **This is wrong.** The project mandates **Behave BDD** as the exclusive unit test framework. All unit-level tests must be written as Gherkin `.feature` files in `features/` with step definitions in `features/steps/`. The `tests/a2a/` directory using pytest is not the correct location and not the correct format. This is almost certainly why `CI / unit_tests` and `CI / integration_tests` are failing. **Fix required:** Delete all pytest files in `tests/a2a/` and rewrite the tests as Behave BDD scenarios in `features/` (`.feature` files) with step definitions in `features/steps/a2a_*_steps.py`. If integration-level testing is needed for real services, add Robot Framework tests in `robot/`. See CONTRIBUTING.md and the existing `features/a2a_jsonrpc_wire_format.feature` for the expected style and format. --- ### 3. Unused Imports Causing Lint Failure — Blocking In `src/cleveragents/a2a/facade.py`, `INTERNAL_ERROR` and `VALIDATION_ERROR` are imported from `cleveragents.a2a.errors` but are **never used** in the file. Instead, this PR defines new local constants (`JSONRPC_INTERNAL_ERROR = -32603`, `JSONRPC_INVALID_PARAMS = -32602`) which duplicate the same values. This will cause a ruff lint failure for unused imports. **Fix required:** Remove the unused imports of `INTERNAL_ERROR` and `VALIDATION_ERROR`. The `JSONRPC_*` constants in `facade.py` are redundant with the existing ones in `errors.py`. Consider either: - Reusing the constants from `errors.py` (rename as needed for clarity), or - Moving all JSON-RPC error code constants to `errors.py` and importing them in `facade.py`. --- ### 4. Incorrect Return Type Annotation — Blocking The `dispatch()` method return type was changed from `A2aResponse` to `A2aResponse | None`, but the method **never actually returns `None`** — every code path returns an `A2aResponse`. Widening the return type to `Optional` is incorrect and misleading. Callers would need to add null checks that are never needed. This will also fail Pyright strict type checking. **Fix required:** Revert the return type to `A2aResponse`. The docstring even says *"Returns: An :class:`A2aResponse` on success or error."* — the implementation matches this but the type annotation contradicts it. --- ### 5. Missing Closing Keyword in PR Body — Blocking The PR body references `(work #10910)` but uses no recognised closing keyword (`Closes #N`, `Fixes #N`, or `Refs #N`). Without a proper closing keyword, merging this PR will not automatically close the linked issue. Per CONTRIBUTING.md, every PR must include `Closes #N` or `Fixes #N` for each linked issue. **Fix required:** Add `Closes #10910` to the PR description. --- ### 6. Missing Milestone and Type Label — Blocking The PR has no milestone assigned and no `Type/` label. Per CONTRIBUTING.md: - The PR must be assigned to the same milestone as the linked issue (linked issue #10910 is in milestone `v3.8.0`) - The PR must have exactly one `Type/` label (this is a feature: `Type/Feature`) **Fix required:** Assign milestone `v3.8.0` and add label `Type/Feature` to the PR. --- ### 7. Missing CHANGELOG Entry — Blocking The diff shows no changes to `CHANGELOG.md`. Per CONTRIBUTING.md, the CHANGELOG must be updated with one entry per commit. **Fix required:** Add a changelog entry describing the changes introduced by this commit. --- ### 8. Missing Commit Footer — Blocking The commit message has no `ISSUES CLOSED: #N` footer. Per CONTRIBUTING.md, every commit must reference its issue in the footer. **Fix required:** Amend the commit message to add `ISSUES CLOSED: #10910` in the footer (since no commits have been pushed after the last time history was reviewed, this is safe to amend before re-pushing). --- ### Summary The root cause of most CI failures is the use of pytest in `tests/a2a/` instead of Behave BDD in `features/`. Once the tests are rewritten correctly using Behave, the unused imports cleaned up, and the return type annotation corrected, the lint and typecheck gates should also pass. All PR compliance issues (milestone, label, CHANGELOG, closing keyword, commit footer) must also be resolved before this PR can be approved. --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
Owner

BLOCKING — Unused imports causing lint failure

INTERNAL_ERROR and VALIDATION_ERROR are imported here but never used in this file. Instead, this PR introduces duplicate local constants JSONRPC_INTERNAL_ERROR = -32603 and JSONRPC_INVALID_PARAMS = -32602 for the same values. ruff will flag the unused imports and fail CI / lint.

Fix: Remove the unused imports of INTERNAL_ERROR and VALIDATION_ERROR. Consider consolidating all JSON-RPC error code constants in errors.py and importing them where needed, rather than duplicating them in facade.py.

**BLOCKING — Unused imports causing lint failure** `INTERNAL_ERROR` and `VALIDATION_ERROR` are imported here but never used in this file. Instead, this PR introduces duplicate local constants `JSONRPC_INTERNAL_ERROR = -32603` and `JSONRPC_INVALID_PARAMS = -32602` for the same values. ruff will flag the unused imports and fail CI / lint. **Fix:** Remove the unused imports of `INTERNAL_ERROR` and `VALIDATION_ERROR`. Consider consolidating all JSON-RPC error code constants in `errors.py` and importing them where needed, rather than duplicating them in `facade.py`.
Owner

BLOCKING — Incorrect return type annotation

dispatch() was changed to return A2aResponse | None, but every code path in this method returns an A2aResponse object. The method can never return None. This incorrect widening of the return type:

  1. Fails Pyright strict type checking
  2. Forces all callers to add unnecessary null-checks
  3. Contradicts the docstring which states "Returns: An A2aResponse on success or error."

Fix: Revert the return type to -> A2aResponse.

**BLOCKING — Incorrect return type annotation** `dispatch()` was changed to return `A2aResponse | None`, but every code path in this method returns an `A2aResponse` object. The method can never return `None`. This incorrect widening of the return type: 1. Fails Pyright strict type checking 2. Forces all callers to add unnecessary null-checks 3. Contradicts the docstring which states *"Returns: An `A2aResponse` on success or error."* **Fix:** Revert the return type to `-> A2aResponse`.
@ -0,0 +1,142 @@
"""Tests for A2A event queue lifecycle and SSE formatting."""
Owner

BLOCKING — Wrong test framework and directory

Same issue. Event queue lifecycle and SSE formatting tests must be Behave BDD scenarios in features/.

Fix: Delete this file and extend features/a2a_sse_streaming.feature or create a dedicated features/a2a_events.feature file with the appropriate Gherkin scenarios.

**BLOCKING — Wrong test framework and directory** Same issue. Event queue lifecycle and SSE formatting tests must be Behave BDD scenarios in `features/`. **Fix:** Delete this file and extend `features/a2a_sse_streaming.feature` or create a dedicated `features/a2a_events.feature` file with the appropriate Gherkin scenarios.
@ -0,0 +1,174 @@
"""Tests for facade dispatch operation routing and JSON-RPC error code handling."""
Owner

BLOCKING — Wrong test framework and directory

This file uses pytest but the project mandates Behave BDD as the exclusive unit test framework. All unit-level tests must be written as Gherkin .feature files in features/ with step definitions in features/steps/. This pytest file in tests/a2a/ will not be picked up by nox -s unit_tests (which runs Behave), and is almost certainly why CI / unit_tests is failing.

Note that features/a2a_jsonrpc_wire_format.feature and features/steps/a2a_jsonrpc_wire_format_steps.py already exist as the correct location and format for A2A JSON-RPC wire format tests.

Fix: Delete this file and rewrite the dispatch routing tests as Gherkin scenarios in a .feature file under features/ (e.g. extend features/a2a_facade_coverage.feature or create features/a2a_jsonrpc_dispatch.feature) with matching step definitions in features/steps/.

**BLOCKING — Wrong test framework and directory** This file uses pytest but the project mandates **Behave BDD** as the exclusive unit test framework. All unit-level tests must be written as Gherkin `.feature` files in `features/` with step definitions in `features/steps/`. This pytest file in `tests/a2a/` will not be picked up by `nox -s unit_tests` (which runs Behave), and is almost certainly why `CI / unit_tests` is failing. Note that `features/a2a_jsonrpc_wire_format.feature` and `features/steps/a2a_jsonrpc_wire_format_steps.py` already exist as the correct location and format for A2A JSON-RPC wire format tests. **Fix:** Delete this file and rewrite the dispatch routing tests as Gherkin scenarios in a `.feature` file under `features/` (e.g. extend `features/a2a_facade_coverage.feature` or create `features/a2a_jsonrpc_dispatch.feature`) with matching step definitions in `features/steps/`.
@ -0,0 +1,184 @@
"""Tests for JSON-RPC 2.0 wire format compliance across A2A model validators."""
Owner

BLOCKING — Wrong test framework and directory

Same issue as test_facade_dispatch.py. This pytest file belongs in features/ as a Behave BDD scenario. The existing features/a2a_jsonrpc_wire_format.feature already covers wire-format compliance tests for A2A models — extend that feature file rather than creating new pytest tests in tests/a2a/.

Fix: Delete this file and integrate the model validation scenarios into the appropriate Behave feature file.

**BLOCKING — Wrong test framework and directory** Same issue as `test_facade_dispatch.py`. This pytest file belongs in `features/` as a Behave BDD scenario. The existing `features/a2a_jsonrpc_wire_format.feature` already covers wire-format compliance tests for A2A models — extend that feature file rather than creating new pytest tests in `tests/a2a/`. **Fix:** Delete this file and integrate the model validation scenarios into the appropriate Behave feature file.
@ -0,0 +1,189 @@
"""Tests for stdio transport wire-format validation and error handling."""
Owner

BLOCKING — Wrong test framework and directory

Same issue as the other test files. Use features/a2a_stdio_transport.feature (which already exists) and add step definitions to features/steps/a2a_stdio_transport_steps.py instead.

Fix: Delete this file and extend the existing features/a2a_stdio_transport.feature Behave feature file with scenarios covering _validate_jsonrpc_response() and the new error-handling paths in the transport.

**BLOCKING — Wrong test framework and directory** Same issue as the other test files. Use `features/a2a_stdio_transport.feature` (which already exists) and add step definitions to `features/steps/a2a_stdio_transport_steps.py` instead. **Fix:** Delete this file and extend the existing `features/a2a_stdio_transport.feature` Behave feature file with scenarios covering `_validate_jsonrpc_response()` and the new error-handling paths in the transport.
@ -0,0 +1,87 @@
"""Tests for version negotiation and protocol version constants."""
Owner

BLOCKING — Wrong test framework and directory

Same issue. All versioning tests must be Behave BDD scenarios in features/.

Fix: Delete this file and add version negotiation scenarios to an appropriate Behave feature file.

**BLOCKING — Wrong test framework and directory** Same issue. All versioning tests must be Behave BDD scenarios in `features/`. **Fix:** Delete this file and add version negotiation scenarios to an appropriate Behave feature file.
Owner

Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

--- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / helm (pull_request) Successful in 48s
CI / lint (pull_request) Failing after 1m4s
Required
Details
CI / build (pull_request) Successful in 59s
Required
Details
CI / quality (pull_request) Successful in 1m15s
Required
Details
CI / benchmark-regression (pull_request) Failing after 1m20s
CI / typecheck (pull_request) Failing after 1m28s
Required
Details
CI / security (pull_request) Successful in 1m45s
Required
Details
CI / integration_tests (pull_request) Failing after 3m13s
Required
Details
CI / e2e_tests (pull_request) Successful in 4m4s
CI / unit_tests (pull_request) Failing after 4m55s
Required
Details
CI / coverage (pull_request) Has been skipped
Required
Details
CI / docker (pull_request) Has been skipped
Required
Details
CI / push-validation (pull_request) Successful in 24s
CI / status-check (pull_request) Failing after 3s
This pull request has changes conflicting with the target branch.
  • src/cleveragents/a2a/facade.py
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin PR-10910-a2a-json-rpc-routing:PR-10910-a2a-json-rpc-routing
git switch PR-10910-a2a-json-rpc-routing
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cleveragents/cleveragents-core!11114
No description provided.