Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 24 additions & 0 deletions crates/graphql-orm-ai/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,30 @@ 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.87.0] - 2026-08-22

Persistent schema module: **0.63.0** (unchanged from 0.86.0).

### Added

- `AiCodexAppServerTurnInput::retained_dynamic_tool_readiness_probe` lets a
reviewed host issue one startup probe against the exact bootstrap-bound,
complete retained dynamic-tool surface before advertising readiness.
- `AiCodexAppServerProtocolActor::dynamic_tool_readiness_response` can settle
only the probe's exact expected tool call with the fixed content-free result
`{"ready":true}`, allowing the host to finish and delete the test thread.

### Security

- The constructor only prepares validated input. It grants no provider,
process, tool-execution, egress or application authority, requires a
nonempty exact tool set and binds the retained bootstrap fingerprint. The
actor cannot use the fixed readiness response for an ordinary or different
tool call, and it cannot carry application content.

There is no schema, data, protected-payload, GraphQL SDL, backup or restore
migration in this release.

## [0.86.0] - 2026-08-22

Persistent schema module: **0.63.0** (unchanged from 0.85.0).
Expand Down
2 changes: 1 addition & 1 deletion crates/graphql-orm-ai/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "graphql-orm-ai"
version = "0.86.0"
version = "0.87.0"
edition = "2024"
authors = ["Toby Martin <toby@dastari.net>"]
description = "Project-agnostic AI agent runtime for graphql-orm applications"
Expand Down
20 changes: 20 additions & 0 deletions crates/graphql-orm-ai/MIGRATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,26 @@ 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.86.0 to 0.87.0: retained dynamic-tool readiness input

Adopt `graphql-orm-ai` 0.87.0 from one reviewed full monorepo revision. 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.

Hosts that readiness-test an installed Codex app-server may construct a
bootstrap-fingerprint-bound retained turn with
`AiCodexAppServerTurnInput::retained_dynamic_tool_readiness_probe`. Supply the
same complete dynamic-tool definitions and reasoning effort used to create the
empty retained thread, plus the exact tool ID that the model must select. The
constructor only validates input; it does not grant process, provider,
application-tool, egress or result authority. After the actor admits that
exact call, use `dynamic_tool_readiness_response` to return the sole fixed
`{"ready":true}` result, finish the turn and delete the thread. The actor
rejects this response on an ordinary turn or another tool, and the result
cannot contain application data. Keep the probe inside the reviewed host
sandbox.

## 0.85.0 to 0.86.0: metered stateless native-item refusal

Adopt `graphql-orm-ai` 0.86.0 and `graphql-orm-ai-tool-profiles` 0.9.0 from one
Expand Down
2 changes: 1 addition & 1 deletion crates/graphql-orm-ai/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 = "<reviewed-full-40-character-commit-sha>", version = "0.86.0", default-features = false, features = ["sqlite"] }
graphql-orm-ai = { git = "https://github.com/Dastari/graphql-orm.git", rev = "<reviewed-full-40-character-commit-sha>", version = "0.87.0", default-features = false, features = ["sqlite"] }
```

Exactly one persistence backend is required: `sqlite` (default), `postgres`,
Expand Down
2 changes: 1 addition & 1 deletion crates/graphql-orm-ai/docs/implementation-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ supersedes: []

# Implementation Status

`graphql-orm-ai` is at crate version `0.86.0` with AI schema module
`graphql-orm-ai` is at crate version `0.87.0` 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`.
Expand Down
9 changes: 9 additions & 0 deletions crates/graphql-orm-ai/src/provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2203,6 +2203,15 @@ impl std::fmt::Debug for ProviderDynamicToolResult {
}

impl ProviderDynamicToolResult {
#[cfg(feature = "provider-codex-app-server")]
pub(crate) fn readiness_probe(call_id: String, tool_id: String) -> Self {
Self {
call_id,
tool_id,
output: serde_json::json!({"ready": true}),
}
}

#[cfg(any(feature = "sqlite", feature = "postgres"))]
pub(crate) fn new(
call: &ProviderDynamicToolCall,
Expand Down
Loading