a2a-rails 0.2.0.rc2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -2
- data/README.md +8 -7
- data/lib/a2a/rails/engine.rb +9 -0
- data/lib/a2a/rails/version.rb +1 -1
- data/lib/generators/a2a/rails/templates/create_a2a_rails_tasks.rb.tt +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 447c947dcb0231daa7d00a4c0de158ca737795fcae5f529d71a0ed8d87f9ee3f
|
|
4
|
+
data.tar.gz: bc9fa7e1884a169d45857a9febea788630d9917022e8919819357b4e57914d35
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6209ff98b146525320999d3d44e086053e6d767e1a20328436ff34908af222c87912c2e1b78745ce3b646499f1eb33c4e245d4b883fcc169870a1233604e4c10
|
|
7
|
+
data.tar.gz: b0b74efa6e45bf7fe84ac63e1d5b2e68cc27386177f1fab728f0ea0582186adb55c7c3c379504b66b05997cc7600cb9e30056143df7311b8af2c591a8b73957d
|
data/CHANGELOG.md
CHANGED
|
@@ -4,9 +4,33 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
-
## [0.2.0
|
|
7
|
+
## [0.2.0] - 2026-10-08 (stable candidate source; NOT published)
|
|
8
8
|
|
|
9
|
-
>
|
|
9
|
+
> **Step 26-4 release preparation only.** Version `0.2.0` has been selected for an exact, source-built candidate. No `v0.2.0` Git tag, GitHub Release, or RubyGems push has been authorized. The published `0.2.0.rc2` pre-release is immutable and **does not include the subsequent fixes** below.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- A2A v1.0 **Task and optional direct Message** responses; explicit output File Parts through `FileArtifact.bytes` and `.url`.
|
|
14
|
+
- **Opt-in ActiveRecordStore** with owner-scoped persistent Tasks, PostgreSQL locking, signed pagination cursors, generated migration, retention, bounded pruning, resource guards and maintenance statistics. **MemoryStore remains the default**.
|
|
15
|
+
- **Opt-in ActiveJob async Task execution** with global / Agent / Skill configuration; durable Store + operated durable queue required for reliable multi-process use. Default processing stays synchronous; direct Message execution stays synchronous.
|
|
16
|
+
- Host-owned HTTP Bearer authentication and corresponding Agent Card advertisement, fail-closed production endpoint behavior, principal-scoped Task operations, bounded request parsing and safer error handling. **The Gem does not implement the host's identity provider or business authorization.**
|
|
17
|
+
- Source-built **installed-artifact** Rails 8.0/8.1 + PostgreSQL 16 production-host checks, realistic signed-token **test fixture** for negative authentication/tenant isolation, and Solid Queue/Sidekiq worker SIGKILL and duplicate delivery smoke. See [Step 26 release gates](docs/release/v0.2.0-stable-readiness.md).
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- **Issue #65:** configure the Rails/Zeitwerk `a2a` basename as `A2A` in the Engine without mutating global ActiveSupport inflections, preventing production eager-load errors in clean Rails 8.0/8.1 applications.
|
|
22
|
+
- Generate the ActiveRecord Task Store migration class from the host's ActiveSupport inflections, so both standard `CreateA2aRailsTasks` and host-configured acronym `CreateA2ARailsTasks` cases migrate without fixture patches.
|
|
23
|
+
|
|
24
|
+
### Changed / upgrade notes
|
|
25
|
+
|
|
26
|
+
- **Potential v0.1.0 breaking change:** non-development/test environments fail closed without a configured trusted `authenticate_request` hook and matching Bearer Agent Card metadata; tasks are isolated by authenticated principal. See [upgrade guide](docs/release/upgrading-v0.1.0-to-v0.2.md).
|
|
27
|
+
- Reject oversized/malformed/unsupported HTTP input earlier; only verified non-secret principal IDs may drive Task ownership.
|
|
28
|
+
- No general-purpose automatic Handler retries, forceful in-flight cancellation, or exactly-once external side effects. A Task committed just before enqueue can remain SUBMITTED; a crashed worker can leave an ambiguous WORKING Task. Business idempotency and reconciliation are **host responsibilities**.
|
|
29
|
+
- Ruby **>= 3.3**, Rails **>= 8.0, < 8.2**, A2A protocol **v1.0**, `agent2agent ~> 2.0.0`. No universal production certification; per-deployment security [Issue #11](https://github.com/cuichangquan/a2a-rails/issues/11) remains open.
|
|
30
|
+
|
|
31
|
+
## [0.2.0.rc2] - 2026-10-08 (published pre-release; historical artifact)
|
|
32
|
+
|
|
33
|
+
> Published as the **rc2 pre-release** on RubyGems after separate approval in Step 25. Verified published artifact SHA256: `d65fdd65003987ece96f0a90a4cf28563929be99d26658deeb275fca30c5d694`. Later Step 26 fixes (including #65) are **not** in that immutable rc2 Gem.
|
|
10
34
|
|
|
11
35
|
### Added
|
|
12
36
|
|
data/README.md
CHANGED
|
@@ -5,14 +5,15 @@
|
|
|
5
5
|
|
|
6
6
|
Rails-native integration for exposing Rails applications as A2A v1.0 agents.
|
|
7
7
|
|
|
8
|
-
> **
|
|
8
|
+
> **Release status (2026-10-08):** RubyGems has published **`0.1.0`** and the **`0.2.0.rc2` pre-release**. The current source is being verified as an **unpublished `0.2.0` stable candidate** (Step 26-4). In particular, the Rails/Zeitwerk and migration-generator fixes after rc2 are only in the newer source-built candidate. **No stable `0.2.0` tag, GitHub Release, or RubyGems publication has been authorized.**
|
|
9
9
|
|
|
10
10
|
- RubyGems: https://rubygems.org/gems/a2a-rails
|
|
11
|
-
-
|
|
11
|
+
- Published pre-release: https://github.com/cuichangquan/a2a-rails/releases/tag/v0.2.0-rc.2 (stable `0.2.0` not yet released)
|
|
12
|
+
- Previous stable release: https://github.com/cuichangquan/a2a-rails/releases/tag/v0.1.0
|
|
12
13
|
- Changelog: [CHANGELOG.md](CHANGELOG.md)
|
|
13
14
|
- Release record: [docs/release/v0.1.0-record.md](docs/release/v0.1.0-record.md)
|
|
14
15
|
- **Release readiness:** [current release/deployment checklist](docs/release/security-hardening-release-checklist.md) · [v0.1.0 → proposed v0.2 upgrade guide](docs/release/upgrading-v0.1.0-to-v0.2.md). The old rc1 record is historical evidence only.
|
|
15
|
-
- **Roadmap / 次にやること:** [ROADMAP.md](ROADMAP.md) — Step
|
|
16
|
+
- **Roadmap / 次にやること:** [ROADMAP.md](ROADMAP.md) — [Step 26 / Issue #62](https://github.com/cuichangquan/a2a-rails/issues/62) tracks the `0.2.0` stable candidate and release gates; [production Issue #11](https://github.com/cuichangquan/a2a-rails/issues/11) remains open. See [stable-readiness record](docs/release/v0.2.0-stable-readiness.md).
|
|
16
17
|
- **Official A2A TCK results:** [Pinned JSON-RPC MUST report and reproduction](docs/testing/official-a2a-tck.md) — after Step 17-4: **63 passed / 1 failed / 171 skipped / 30 deselected** (pytest). The remaining `CORE-SEND-003` mismatch is tracked [upstream in #202](https://github.com/a2aproject/a2a-tck/issues/202). The TCK workflow is informational, **not** an A2A conformance certificate.
|
|
17
18
|
|
|
18
19
|
- [A2Aの全体像(日本語・A4 1枚PDF)](docs/guides/a2a-protocol-overview-ja.pdf) — 登場人物・依頼の流れ・主要用語・MCPとの違いをまとめた学習資料。
|
|
@@ -67,7 +68,7 @@ v0.1 is intentionally **server-first** and **non-streaming**.
|
|
|
67
68
|
- A2A protocol version `1.0`
|
|
68
69
|
- `agent2agent ~> 2.0.0`
|
|
69
70
|
|
|
70
|
-
The v0.1.0
|
|
71
|
+
The original v0.1.0 baseline was verified against:
|
|
71
72
|
|
|
72
73
|
- Ruby 3.3 / 3.4 / 4.0
|
|
73
74
|
- Rails 8.0 / 8.1
|
|
@@ -273,13 +274,13 @@ The Rails Engine is mounted automatically.
|
|
|
273
274
|
|
|
274
275
|
The unreleased `main` branch includes a host-provided `config.authenticate_request` callback for `POST /a2a`, plus per-principal Task ownership checks. Without an authenticator, production and other non-development/test environments fail closed; the local development/test Quick Start remains available. See [Authentication guide](docs/guides/authentication.md).
|
|
275
276
|
|
|
276
|
-
> **Important:** These protections are **
|
|
277
|
+
> **Important:** These protections are **absent from RubyGems 0.1.0** but included in the published `0.2.0.rc2` pre-release; the stable candidate has additional fixes. Neither pre-release nor stable source automatically makes a deployed endpoint production-secure. Distributed rate limits, business authorization and the deployment review remain tracked in [Issue #11](https://github.com/cuichangquan/a2a-rails/issues/11).
|
|
277
278
|
|
|
278
279
|
### Step 16-4 request hardening (merged on main; unreleased)
|
|
279
280
|
|
|
280
281
|
The unreleased main branch adds a bounded JSON-RPC body (`config.max_request_bytes`, default 1 MiB), Content-Type validation, stricter parameter checks, a pagination snapshot cap, and reduced exception logging. See [Request Hardening Guide](docs/guides/request-hardening.md).
|
|
281
282
|
|
|
282
|
-
Rate limiting, application-specific authorization and production deployment safeguards remain the host's responsibility or future work. Step 16-5 adds explicit A2A Agent Card Bearer authentication advertisement on unreleased `main`; it must match the host verifier. **These improvements are not included in the published v0.1.0 Gem.**
|
|
283
|
+
Rate limiting, application-specific authorization and production deployment safeguards remain the host's responsibility or future work. Step 16-5 adds explicit A2A Agent Card Bearer authentication advertisement on unreleased `main`; it must match the host verifier. **These improvements are not included in the published v0.1.0 Gem; see the later rc2 pre-release and current stable candidate.**
|
|
283
284
|
|
|
284
285
|
### Production deployment review (Step 16-6)
|
|
285
286
|
|
|
@@ -492,7 +493,7 @@ See [docs/release/v0.1.0-record.md](docs/release/v0.1.0-record.md) for the compl
|
|
|
492
493
|
- [Final Ruby/Rails regression CI](https://github.com/cuichangquan/a2a-rails/actions/runs/37576849516) — **13/13 PASS**.
|
|
493
494
|
- [Interop test code, reproduction and limitations](docs/testing/cross-language-interop.md).
|
|
494
495
|
|
|
495
|
-
This
|
|
496
|
+
This evidence applies to the later source/pre-release line, not RubyGems v0.1.0; these tests do not certify full A2A interoperability or public-production safety.
|
|
496
497
|
|
|
497
498
|
## Test Strategy
|
|
498
499
|
|
data/lib/a2a/rails/engine.rb
CHANGED
|
@@ -14,6 +14,15 @@ module A2A
|
|
|
14
14
|
class Engine < ::Rails::Engine
|
|
15
15
|
isolate_namespace A2A::Rails
|
|
16
16
|
|
|
17
|
+
# The Gem's app/controllers/a2a/... files define A2A, not A2a.
|
|
18
|
+
# Override only the exact Zeitwerk basename, rather than mutating the
|
|
19
|
+
# host's global ActiveSupport inflections (used by migrations).
|
|
20
|
+
initializer "a2a-rails.zeitwerk_inflection" do
|
|
21
|
+
::Rails.autoloaders.each do |loader|
|
|
22
|
+
loader.inflector.inflect("a2a" => "A2A")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
17
26
|
initializer "a2a-rails.mount_engine" do |app|
|
|
18
27
|
app.routes.append do
|
|
19
28
|
mount A2A::Rails::Engine => "/"
|
data/lib/a2a/rails/version.rb
CHANGED