AiReviewWorkspace
The read root. Everything AI Review owns for one data room hangs off it.
A federated entity rather than a namespace container: it carries a key, it has a reference resolver, and another subgraph can contribute fields to it.
dataRoomId is the key because every review is room-scoped. A client cannot reach
a review, a cell or a selection verdict without naming a room, so the room
authorization check happens once, here, instead of on every field below.
type AiReviewWorkspace {
dataRoomId: ID!
dataRoom: DataRoom!
reviews(
first: Int
after: String
last: Int
before: String
): AiReviewsConnection
review(
id: ID!
): AiReview
validateSelection(
documentIds: [ID!]!
): [AiReviewSelectionVerdict!]!
templates: [AiReviewTemplate!]!
models: [AiReviewModel!]!
usage: AiReviewRoomUsage!
}
Fields
AiReviewWorkspace.dataRoomId ● ID! non-null scalar
AiReviewWorkspace.dataRoom ● DataRoom! non-null object
The live room, for name and permissions.
AiReviewWorkspace.reviews ● AiReviewsConnection object
The review list for this room. Paged; the router caps a page at 50.
AiReviewWorkspace.reviews.first ● Int scalar
Returns the first _n_ elements from the list.
AiReviewWorkspace.reviews.after ● String scalar
Returns the elements in the list that come after the specified cursor.
AiReviewWorkspace.reviews.last ● Int scalar
Returns the last _n_ elements from the list.
AiReviewWorkspace.reviews.before ● String scalar
Returns the elements in the list that come before the specified cursor.
AiReviewWorkspace.review ● AiReview object
One review with its fields, documents, cells and runs.
Null when the review does not belong to this workspace's room, which is the same answer as "does not exist": a caller must not learn that a review id is real by getting a different error for another room's review.
AiReviewWorkspace.review.id ● ID! non-null scalar
AiReviewWorkspace.validateSelection ● [AiReviewSelectionVerdict!]! non-null object
Validate selected documents before creating a review. Returns one verdict per document so the selection screen can show extractability before proceeding.
No dataRoomId argument: the workspace supplies it, which removes a mismatch the old root field had to validate.
AiReviewWorkspace.validateSelection.documentIds ● [ID!]! non-null scalar
AiReviewWorkspace.templates ● [AiReviewTemplate!]! non-null object
Built-in field sets for one-click draft seeding.
Configuration, not data. This resolver ignores dataRoomId: templates are global and identical in every room. They live here rather than on a flat root field so the read surface has exactly one entry point.
AiReviewWorkspace.models ● [AiReviewModel!]! non-null object
The picker's offer: Active and Deprecated only, never Archived. Ignores dataRoomId for the same reason getTemplates does - the catalog is configuration, identical in every room.
AiReviewWorkspace.usage ● AiReviewRoomUsage! non-null object
What the room has spent across every review in it, totalled and split per review. Same aggregate as AiReview.usage, one level up.
Returned By
aiReviewWorkspace query