Skip to content

Unblock the nightly Official TCK run (SLIMRPC re-vendor) and fix two intermittent server tests - #147

Merged
tomtom215 merged 2 commits into
mainfrom
claude/clever-curie-wbfxzc
Sep 30, 2026
Merged

tomtom215 merged 2 commits into
mainfrom
claude/clever-curie-wbfxzc

Conversation

@tomtom215

Copy link
Copy Markdown
Owner

What this changes

Two independent commits.

f51c776 — SLIMRPC spec re-vendor; the binding does not change. Upstream a2aproject/experimental-cpb-slimrpc merged its collaborative-task work to main on 2026-09-29 as 1328426 (its PR #5). That added three documents to main and changed both vendored ones, so check_slimrpc_spec.sh failed the scheduled Official TCK run (36666242899). That step comes before "Start the SUT", so the official suite and the baseline gate were skipped: main has had no full official conformance result since the upstream merge.

  • All five upstream documents are now vendored.
  • Everything the merge added to the two implemented documents is A2A 1.1: SendLiveMessage, its multicast form (new §8), and the slimrpc-context-map key used only on that call. The newest a2aproject/A2A tag is v1.0.1, so the binding stays on the A2A 1.0 surface. The spec itself requires implementations targeting an older A2A version to use that version's methods. The eleven 1.0 rows are unchanged.
  • The three new documents are byte-identical to branch tip 36b03a7, which was already triaged as not followed. Only "never reached main" stopped being true.
  • The reasoning is in spec/slimrpc_v1/README.md. The binding README, the book chapter and an e2e doc comment now say "A2A 1.0 surface". The three triage entries in KNOWN_BRANCH_SPECS are removed, since a file on main can never match one.
  • Corrected along the way: spec/slimrpc_v1/README.md said the StreamRequest vocabulary is absent from both vendored specs. Both now name StreamRequest, but only as the request type of SendLiveMessage.

baa8ec8 — two intermittent tests in a2a-protocol-server, each failing because of the test. These are the failures on #145 (Windows) and #146 (macOS). Neither PR's diff could have caused them.

  • the_rps_unit_is_multiplied_by_the_window: the 121st request was admitted. The limiter's windows are fixed and aligned to the wall clock, so a boundary inside the loop resets the count, as it should. This test and the 1-second-window tenant test now use refused_within_one_window, which discards an attempt that straddles a boundary and retries it.
  • concurrent_claims_of_one_key_produce_exactly_one_winner: 0 winners, which only a pre-existing claim can produce. The database path was a2a-idem-{pid}, and it was removed while the store still held the file open. Windows refuses that, and the error was discarded, so a later test process with the same PID found the key already claimed. This test and a_migrated_store_can_take_an_artifact_append now use a per-run directory and drop the store first.

How it was verified

  • ./scripts/check_slimrpc_spec.sh: exit 1 before; after, "5 file(s) on upstream main, all vendored and matching; 4 branch-only spec(s), all triaged".
  • check_method_denominator.py --slimrpc-spec spec/slimrpc_v1/slimrpc.md: 2 sources agree on the same 11 methods.
  • Both test failures were reproduced first, with scratch tests that are not committed:
    • A database left behind with the key already claimed gives claimed=0 replays=16, exactly the CI signature.
    • A run forced across a 1-second boundary admits the over-limit request under the old logic. The helper discards that attempt and gets a refusal on the retry.
  • cargo test -p a2a-protocol-server --lib passes with default features (1,021 tests), --features sqlite (1,183) and --all-features (1,374 passed, 2 ignored).
  • cargo fmt --all -- --check, and rustfmt --edition 2024 --check on the binding's tests/e2e.rs.
  • cargo clippy -p a2a-protocol-server --all-features --all-targets -D warnings.
  • The static-job scripts from ci.yml (7 shell, 18 Python) and check_book_code.sh all pass.
  • scripts/check_dco.sh: both commits carry a matching sign-off.

Checklist

  • Every commit is signed off (git commit -s) by a human git author
  • SPDX header on every new file: the three new files in spec/slimrpc_v1/ are verbatim upstream copies and carry none, like the two already vendored
  • No file exceeds 500 lines (check_file_lengths.sh passes)
  • cargo fmt --all passes
  • cargo clippy --workspace --all-targets -- -D warnings: run for a2a-protocol-server with all features and all targets, not the whole workspace; CI runs the rest
  • cargo test --workspace: run for a2a-protocol-server --lib under three feature sets, not the whole workspace
  • cargo doc --workspace --no-deps: not run; no doc comments on public items changed
  • New public types/functions have doc comments (none added)
  • New code has tests (the changes are tests)
  • cargo mutants: not run; only test code and documents changed, so there is no production line to mutate
  • CHANGELOG.md updated ([Unreleased] → ### Internal)
  • ADR not needed

🤖 Generated with Claude Code

https://claude.ai/code/session_01CmrtmTtr47ip388nrSaduU


Generated by Claude Code

tomtom215 and others added 2 commits September 30, 2026 12:36
…nchanged

Upstream experimental-cpb-slimrpc merged its collaborative-task work to
main as 1328426 (its PR #5). That added a2a-collaborative-task.md,
a2a-shared-task.md and slimrpc-collaborative-task.md to main and changed
both vendored files, so check_slimrpc_spec.sh failed the nightly Official
TCK run before the official suite could start.

All five documents are now vendored. The binding does not follow: what
the merge added to slimrpc.md and slimrpc-multicast.md is A2A 1.1
(SendLiveMessage, its multicast form in a new section 8, and the
slimrpc-context-map key it uses), and no A2A 1.1 has been released. The
eleven A2A 1.0 rows are unchanged. The three new documents are
byte-identical to branch tip 36b03a7, which was already triaged as not
followed; only "never reached main" stopped being true. The decision and
its reasons are in spec/slimrpc_v1/README.md.

The three triage entries are removed from KNOWN_BRANCH_SPECS: section 3
skips files main carries, so they could never match again. The binding
README, the book chapter and one e2e doc comment now say "the A2A 1.0
surface" where they said complete against main.

check_slimrpc_spec.sh: 5 files on main, all vendored and matching; 4
branch-only specs, all triaged. check_method_denominator.py with
--slimrpc-spec: 2 sources agree on the same 11 methods.

Signed-off-by: Tom F. <tomf@tomtomtech.net>
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CmrtmTtr47ip388nrSaduU
…s' own

the_rps_unit_is_multiplied_by_the_window failed on macOS with its 121st
request admitted. The limiter counts in fixed windows aligned to the
wall clock (window.rs: now_secs / window_secs), so a boundary inside the
loop resets the count and the request is correctly admitted. It and
the_tenant_limit_applies_across_distinct_callers (a 1s window) now run
through refused_within_one_window, which discards an attempt that starts
and ends in different windows and retries it. A rollover can only admit
more, so the admissions asserted inside an attempt hold either way.

concurrent_claims_of_one_key_produce_exactly_one_winner failed on
Windows with 0 winners, which only a pre-existing claim can produce. Its
database lived at a2a-idem-{pid} and was removed while the store still
held it open, which Windows refuses (the error was discarded), so a
later test process with the same PID found the key claimed. It and
a_migrated_store_can_take_an_artifact_append now use a per-run directory
(pid plus nanoseconds) and drop the store before removing it.

Both reproduced with scratch tests before the fix (not committed): a
leftover database gives claimed=0 replays=16, the CI signature; a run
forced across a 1s boundary admits the over-limit request under the old
logic, and the helper discards it and is refused on the retry.

Signed-off-by: Tom F. <tomf@tomtomtech.net>
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CmrtmTtr47ip388nrSaduU
@tomtom215
tomtom215 merged commit d4f32eb into main Sep 30, 2026
92 checks passed
@tomtom215 tomtom215 mentioned this pull request Sep 30, 2026
8 of 12 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant