diff --git a/Cargo.lock b/Cargo.lock index cfdc1f28..87287069 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -87,8 +87,8 @@ dependencies = [ [[package]] name = "agql-auth" -version = "0.15.0" -source = "git+https://github.com/Dastari/agql-auth.git?rev=e841ffd382082ad7419be259fe957f949b956ff7#e841ffd382082ad7419be259fe957f949b956ff7" +version = "0.16.0" +source = "git+https://github.com/Dastari/agql-auth.git?rev=3bc38cd94794f1e868a9cc3a5551047b95a32105#3bc38cd94794f1e868a9cc3a5551047b95a32105" dependencies = [ "argon2", "async-graphql", @@ -3104,7 +3104,7 @@ dependencies = [ [[package]] name = "graphql-orm-ai" -version = "0.88.2" +version = "0.88.3" dependencies = [ "agql-auth", "async-graphql", diff --git a/Cargo.toml b/Cargo.toml index 98fa550e..9baf1727 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ license = "MIT" repository = "https://github.com/Dastari/graphql-orm" [workspace.dependencies] -agql-auth = { git = "https://github.com/Dastari/agql-auth.git", rev = "e841ffd382082ad7419be259fe957f949b956ff7", version = "0.15.0" } +agql-auth = { git = "https://github.com/Dastari/agql-auth.git", rev = "3bc38cd94794f1e868a9cc3a5551047b95a32105", version = "0.16.0" } arc-swap = "1.7" async-graphql = { version = "7", features = ["dataloader", "uuid"] } async-graphql-parser = "7" diff --git a/MIGRATION.md b/MIGRATION.md index 0beccbba..ab4e886b 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -1183,6 +1183,6 @@ access path. - No JWT, OIDC, cookie, wildcard, or application-specific scope logic was added to `graphql-orm`. - PostgreSQL RLS helper functions still use exact scope matching. -- The current `auth-agql` feature targets `agql-auth` 0.15.0 at revision - `e841ffd382082ad7419be259fe957f949b956ff7`; earlier release sections above +- The current `auth-agql` feature targets `agql-auth` 0.16.0 at revision + `3bc38cd94794f1e868a9cc3a5551047b95a32105`; earlier release sections above retain their historical pins. diff --git a/crates/graphql-orm-ai/CHANGELOG.md b/crates/graphql-orm-ai/CHANGELOG.md index c6ea55bf..55f8442d 100644 --- a/crates/graphql-orm-ai/CHANGELOG.md +++ b/crates/graphql-orm-ai/CHANGELOG.md @@ -18,6 +18,26 @@ checkpoint facts. For the current workspace baseline and active gates, use the [implementation status](docs/implementation-status.md) and the central [AI production-readiness plan](../../docs/plans/active/ai-production-readiness/README.md). +## [0.88.3] - 2026-08-22 + +Persistent schema module: **0.63.0** (unchanged from 0.88.2). + +### Changed + +- The workspace now resolves the exact external `agql-auth` 0.16.0 revision + `3bc38cd94794f1e868a9cc3a5551047b95a32105`. Hosts already using that + revision retain one `AuthPrincipal` and `ResolvedPrincipal` type universe + across their application and `graphql-orm-ai`. + +### Security + +- `agql-auth` 0.16's consumer-configured exact-only matcher requirements do + not grant AI resolver, tool, egress, retention, or provider authority. + Matcher policy remains owned by the host resource server. + +There is no schema, data, protected-payload, GraphQL SDL, backup or restore +migration in this release. + ## [0.88.2] - 2026-08-22 Persistent schema module: **0.63.0** (unchanged from 0.88.1). diff --git a/crates/graphql-orm-ai/Cargo.toml b/crates/graphql-orm-ai/Cargo.toml index 1bf07724..cc014606 100644 --- a/crates/graphql-orm-ai/Cargo.toml +++ b/crates/graphql-orm-ai/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "graphql-orm-ai" -version = "0.88.2" +version = "0.88.3" edition = "2024" authors = ["Toby Martin "] description = "Project-agnostic AI agent runtime for graphql-orm applications" diff --git a/crates/graphql-orm-ai/MIGRATION.md b/crates/graphql-orm-ai/MIGRATION.md index 95ab6fda..6537e0a6 100644 --- a/crates/graphql-orm-ai/MIGRATION.md +++ b/crates/graphql-orm-ai/MIGRATION.md @@ -19,6 +19,20 @@ they describe. For the current workspace baseline and active delivery gates, use [implementation status](docs/implementation-status.md) and the central [AI production-readiness plan](../../docs/plans/active/ai-production-readiness/README.md). +## 0.88.2 to 0.88.3: agql-auth 0.16 type-universe alignment + +Adopt `graphql-orm-ai` 0.88.3 from one reviewed full monorepo revision and +align every direct host dependency on `agql-auth` to version 0.16.0 at exact +revision `3bc38cd94794f1e868a9cc3a5551047b95a32105`. Mixing that revision with +the earlier 0.15 workspace pin creates distinct principal types and must not +be worked around with path overrides or duplicated conversion layers. + +The AI schema module remains **0.63.0**. There is no database, data, table, +column, index, constraint, backfill, GraphQL SDL, protected-payload, backup or +restore migration. Version 0.16 adds host-configured exact-only matcher +requirements; `graphql-orm-ai` does not choose or relax those resource-server +rules and requires no AI provider or coordinator API change. + ## 0.88.1 to 0.88.2: retained capability-session admission Adopt `graphql-orm-ai` 0.88.2 from one reviewed full monorepo revision. The AI diff --git a/crates/graphql-orm-ai/README.md b/crates/graphql-orm-ai/README.md index ac9245d1..d2307b12 100644 --- a/crates/graphql-orm-ai/README.md +++ b/crates/graphql-orm-ai/README.md @@ -3,7 +3,7 @@ title: "graphql-orm-ai" kind: reference status: active owner: graphql-orm-ai-maintainers -last_reviewed: 2026-08-16 +last_reviewed: 2026-08-22 review_by: 2027-02-01 supersedes: [] --- @@ -28,7 +28,7 @@ for AI, ORM, storage, backup, and tool-profile packages: ```toml [dependencies] -graphql-orm-ai = { git = "https://github.com/Dastari/graphql-orm.git", rev = "", version = "0.88.1", default-features = false, features = ["sqlite"] } +graphql-orm-ai = { git = "https://github.com/Dastari/graphql-orm.git", rev = "", version = "0.88.3", default-features = false, features = ["sqlite"] } ``` Exactly one persistence backend is required: `sqlite` (default), `postgres`, diff --git a/crates/graphql-orm-ai/docs/implementation-status.md b/crates/graphql-orm-ai/docs/implementation-status.md index bb23b1f0..5860d644 100644 --- a/crates/graphql-orm-ai/docs/implementation-status.md +++ b/crates/graphql-orm-ai/docs/implementation-status.md @@ -10,10 +10,10 @@ supersedes: [] # Implementation Status -`graphql-orm-ai` is at crate version `0.87.0` with AI schema module +`graphql-orm-ai` is at crate version `0.88.3` with AI schema module `0.63.0`. It uses workspace `graphql-orm` `0.23.0`, backend-neutral `graphql-orm-ai-tool-profiles` `0.9.0`, and external `agql-auth` -`0.15.0` at `e841ffd382082ad7419be259fe957f949b956ff7`. +`0.16.0` at `3bc38cd94794f1e868a9cc3a5551047b95a32105`. Completed stateless local-provider turns can carry a proof-bearing contained native-item refusal after authoritative usage settlement. Those runs close as diff --git a/crates/graphql-orm-backup/AGENTS.md b/crates/graphql-orm-backup/AGENTS.md index 43107853..3432bd8e 100644 --- a/crates/graphql-orm-backup/AGENTS.md +++ b/crates/graphql-orm-backup/AGENTS.md @@ -32,13 +32,13 @@ This crate is a reusable backup and restore companion for applications that use ## Current Agent Handoff - Current crate version is `0.7.1`. -- The optional ORM adapter resolves `graphql-orm` 0.22.1 from the workspace. +- The optional ORM adapter resolves `graphql-orm` 0.23.0 from the workspace. Internal packages use workspace path dependencies and the root `Cargo.lock`. Keep downstream applications on one reviewed monorepo revision so ORM, backup, and storage share the same canonical source/type universe. - `graphql-orm` owns its optional `agql-auth` integration and pins - `agql-auth` 0.15.0 at - `e841ffd382082ad7419be259fe957f949b956ff7`. This crate must not enable or + `agql-auth` 0.16.0 at + `3bc38cd94794f1e868a9cc3a5551047b95a32105`. This crate must not enable or depend directly on application authorization. - Applying and dry-run restore compare the manifest backend/schema hash with the target before target checks or writes. Preserve that fail-closed diff --git a/crates/graphql-orm-router/MIGRATION.md b/crates/graphql-orm-router/MIGRATION.md index 858efd15..754689ae 100644 --- a/crates/graphql-orm-router/MIGRATION.md +++ b/crates/graphql-orm-router/MIGRATION.md @@ -13,8 +13,8 @@ supersedes: [] ## 0.1.3 to 0.1.4 Replace the reviewed full-revision pin and rebuild the router. When a host -also depends directly on `agql-auth`, align it to version 0.15.0 at exact -revision `e841ffd382082ad7419be259fe957f949b956ff7` so Cargo resolves one auth +also depends directly on `agql-auth`, align it to version 0.16.0 at exact +revision `3bc38cd94794f1e868a9cc3a5551047b95a32105` so Cargo resolves one auth type universe. The `auth-agql` feature remains a validator and scope-matcher adapter only. It @@ -91,8 +91,8 @@ New access tokens should use the OAuth space-delimited `scope` claim. The legacy `scopes` array is accepted only with `acceptLegacyScopes: true`; a token containing conflicting forms is rejected. The optional `auth-agql` feature is a validation/matching adapter only and introduces no issuer responsibilities. -It resolves `agql-auth` 0.15.0 at exact revision -`e841ffd382082ad7419be259fe957f949b956ff7`; hosts with a direct dependency +It resolves `agql-auth` 0.16.0 at exact revision +`3bc38cd94794f1e868a9cc3a5551047b95a32105`; hosts with a direct dependency must use the same source and revision. Configure legacy acceptance directly with `agql_auth::AccessTokenValidatorBuilder::legacy_scope_claims` before wrapping the validator in `AgqlAuthenticationProvider::new`. diff --git a/crates/graphql-orm-storage/AGENTS.md b/crates/graphql-orm-storage/AGENTS.md index a506607c..000f01da 100644 --- a/crates/graphql-orm-storage/AGENTS.md +++ b/crates/graphql-orm-storage/AGENTS.md @@ -32,12 +32,12 @@ This crate is a reusable storage companion for applications that use `graphql-or ## Current Agent Handoff - Current crate version is `0.6.1`. -- The workspace resolves `graphql-orm` 0.22.1 and `graphql-orm-backup` 0.7.1 +- The workspace resolves `graphql-orm` 0.23.0 and `graphql-orm-backup` 0.7.1 through workspace path dependencies and one root `Cargo.lock`. Keep downstream companion packages on one reviewed monorepo revision. - `graphql-orm` owns the optional `agql-auth` integration, pinned at - `agql-auth` 0.15.0 revision - `e841ffd382082ad7419be259fe957f949b956ff7`; this crate does not depend on + `agql-auth` 0.16.0 revision + `3bc38cd94794f1e868a9cc3a5551047b95a32105`; this crate does not depend on application authorization. - The storage provider boundary is now the streaming `BlobStore` trait. - `ObjectStorage` extends `BlobStore`; custom providers must implement `BlobStore` first. diff --git a/crates/graphql-orm/tests/backend_coexistence_fixture.rs b/crates/graphql-orm/tests/backend_coexistence_fixture.rs index 56e8b0cb..53c58559 100644 --- a/crates/graphql-orm/tests/backend_coexistence_fixture.rs +++ b/crates/graphql-orm/tests/backend_coexistence_fixture.rs @@ -66,13 +66,13 @@ fn assert_direct_host_dependency_resolves_one_exact_agql_auth_universe() { .filter(|package| package["name"] == "agql-auth") .collect::>(); assert_eq!(agql_auth.len(), 1, "resolved metadata:\n{metadata}"); - assert_eq!(agql_auth[0]["version"], "0.15.0"); + assert_eq!(agql_auth[0]["version"], "0.16.0"); let source = agql_auth[0]["source"] .as_str() .expect("agql-auth source must be present"); assert!( - source.contains("rev=e841ffd382082ad7419be259fe957f949b956ff7") - && source.ends_with("#e841ffd382082ad7419be259fe957f949b956ff7"), + source.contains("rev=3bc38cd94794f1e868a9cc3a5551047b95a32105") + && source.ends_with("#3bc38cd94794f1e868a9cc3a5551047b95a32105"), "unexpected agql-auth source: {source}", ); } diff --git a/crates/graphql-orm/tests/fixtures/backend-coexistence/Cargo.lock b/crates/graphql-orm/tests/fixtures/backend-coexistence/Cargo.lock index f400a5e7..0927a116 100644 --- a/crates/graphql-orm/tests/fixtures/backend-coexistence/Cargo.lock +++ b/crates/graphql-orm/tests/fixtures/backend-coexistence/Cargo.lock @@ -10,8 +10,8 @@ checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" [[package]] name = "agql-auth" -version = "0.15.0" -source = "git+https://github.com/Dastari/agql-auth.git?rev=e841ffd382082ad7419be259fe957f949b956ff7#e841ffd382082ad7419be259fe957f949b956ff7" +version = "0.16.0" +source = "git+https://github.com/Dastari/agql-auth.git?rev=3bc38cd94794f1e868a9cc3a5551047b95a32105#3bc38cd94794f1e868a9cc3a5551047b95a32105" dependencies = [ "argon2", "async-graphql", @@ -1329,7 +1329,7 @@ dependencies = [ [[package]] name = "graphql-orm-ai" -version = "0.82.0" +version = "0.88.3" dependencies = [ "agql-auth", "async-graphql", @@ -1357,7 +1357,7 @@ dependencies = [ [[package]] name = "graphql-orm-ai-tool-profiles" -version = "0.6.0" +version = "0.9.0" dependencies = [ "async-graphql", "async-graphql-parser", @@ -3363,7 +3363,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.3", + "getrandom 0.3.4", "once_cell", "rustix", "windows-sys 0.61.2", diff --git a/crates/graphql-orm/tests/fixtures/backend-coexistence/auth-service/Cargo.toml b/crates/graphql-orm/tests/fixtures/backend-coexistence/auth-service/Cargo.toml index a990f2bb..63a48838 100644 --- a/crates/graphql-orm/tests/fixtures/backend-coexistence/auth-service/Cargo.toml +++ b/crates/graphql-orm/tests/fixtures/backend-coexistence/auth-service/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2024" [dependencies] -agql-auth = { git = "https://github.com/Dastari/agql-auth.git", rev = "e841ffd382082ad7419be259fe957f949b956ff7", version = "0.15.0" } +agql-auth = { git = "https://github.com/Dastari/agql-auth.git", rev = "3bc38cd94794f1e868a9cc3a5551047b95a32105", version = "0.16.0" } async-graphql = { version = "7", features = ["dataloader", "uuid"] } graphql-orm = { path = "../../../../", default-features = false, features = [ "sqlite", diff --git a/docs/plans/active/ai-production-readiness/README.md b/docs/plans/active/ai-production-readiness/README.md index f62b8685..1b5427bd 100644 --- a/docs/plans/active/ai-production-readiness/README.md +++ b/docs/plans/active/ai-production-readiness/README.md @@ -36,7 +36,7 @@ retention, or restore proofs remain closed. - `graphql-orm-backup` 0.7 snapshot, repository, verification, and restore orchestration. - `graphql-orm-storage` 0.6 streaming provider boundary. -- Exact external `agql-auth` 0.15 revision declared by the workspace. +- Exact external `agql-auth` 0.16 revision declared by the workspace. - Test-owned SQLite and disposable PostgreSQL infrastructure. ## Acceptance gates diff --git a/docs/reference/graphql-orm/agql-auth-bridge.md b/docs/reference/graphql-orm/agql-auth-bridge.md index a96ae698..90abd80b 100644 --- a/docs/reference/graphql-orm/agql-auth-bridge.md +++ b/docs/reference/graphql-orm/agql-auth-bridge.md @@ -20,9 +20,9 @@ graphql-orm = { git = "https://github.com/Dastari/graphql-orm.git", rev = "