ReviewItem
No description
type ReviewItem {
campaign: ReviewItemCampaignRef
created_at: DateTimeISO
decided_at: DateTimeISO
effective_policy: JSON
entitlement: ReviewEntitlementRef
events: [ReviewEvent!]!
expires_at: DateTimeISO
grant: ReviewGrantRef
grant_id: ID!
grant_type: String
id: ID!
outcome: ReviewOutcome
policy_lineage: JSON
reapplication_risk: ReviewReapplicationRisk
remediation_completed_at: DateTimeISO
remediation_created_at: DateTimeISO
remediation_mode: ReviewRemediationMode!
remediation_operation_id: ID
remediation_status: ReviewRemediationStatus
resource: ReviewResourceRef
risk_level: Int
source_addressed: ReviewSourceAddressed
status: ReviewItemStatus!
steps: [ReviewStep!]!
subject: ReviewSubject
timing: JSON
timing_state: JSON
updated_at: DateTimeISO
}
Fields
ReviewItem.campaign ● ReviewItemCampaignRef object
The campaign this item belongs to (null for ad-hoc reviews). EUD grouping keys off this.
ReviewItem.created_at ● DateTimeISO scalar
ReviewItem.decided_at ● DateTimeISO scalar
ReviewItem.effective_policy ● JSON scalar
Admin-only: the compiled, immutable governance policy snapshotted onto this item (PolicyDefinition). Reviewers never receive this — they query myReviewItems (ReviewerTask), which carries no policy.
ReviewItem.entitlement ● ReviewEntitlementRef object
ReviewItem.events ● [ReviewEvent!]! non-null object
ReviewItem.expires_at ● DateTimeISO scalar
When the item's clock runs out (status → EXPIRED, outcome no_response). Set by the engine; re-extended on stage advance and by extendReviewItemDueDate. Null until the engine first processes the item.
ReviewItem.grant ● ReviewGrantRef object
ReviewItem.grant_id ● ID! non-null scalar
ReviewItem.grant_type ● String scalar
ReviewItem.id ● ID! non-null scalar
ReviewItem.outcome ● ReviewOutcome enum
ReviewItem.policy_lineage ● JSON scalar
Admin-only: per-field provenance of effective_policy (which stack level each field came from).
ReviewItem.reapplication_risk ● ReviewReapplicationRisk enum
The EFFECTIVE durable-vs-reapplicable classification: rows the engine backfill hasn't reached (persisted NULL) are classified on the fly from the access snapshot (effectiveReapplicationRisk), so admins never see null here.
ReviewItem.remediation_completed_at ● DateTimeISO scalar
When the remediation operation reached a terminal state (COMPLETED/FAILED).
ReviewItem.remediation_created_at ● DateTimeISO scalar
When the remediation operation was submitted to prov-svc.
ReviewItem.remediation_mode ● ReviewRemediationMode! non-null enum
The EFFECTIVE execution mode off the immutable access snapshot (access_snapshot.review_config.remediation_mode; absent → manual — the Phase 6 default). Admin-only like the other snapshot reads; the queue's DERIVED states ('awaiting operator' / 'held on source' / the disabled marker) are computed client-side from this + remediation_status + reapplication_risk/source_addressed.
ReviewItem.remediation_operation_id ● ID scalar
Admin-only: the prov-svc operation executing this item's revoke. Write-once linkage — null until the directive is submitted.
ReviewItem.remediation_status ● ReviewRemediationStatus enum
ReviewItem.resource ● ReviewResourceRef object
ReviewItem.risk_level ● Int scalar
ReviewItem.source_addressed ● ReviewSourceAddressed object
Write-once source-addressed evidence ({ at, by, note }) — null while unaddressed.
ReviewItem.status ● ReviewItemStatus! non-null enum
ReviewItem.steps ● [ReviewStep!]! non-null object
ReviewItem.subject ● ReviewSubject object
ReviewItem.timing ● JSON scalar
Admin-only (gated like effective_policy: reviewItem/reviewItems are admin review.item.read; reviewers query myReviewItems which carries no timing): the resolved ReviewTimingConfig snapshotted onto this item at creation. Mutable only via due-date extension — NOT covered by the H3 immutability trigger.
ReviewItem.timing_state ● JSON scalar
Admin-only (same gating as timing): derived clock state { reminders_sent: [{ step_id, kind, ordinal, at }], escalated: { mode, stage_order, at } | null, expired_disposition: String | null } — replayed from the item's REMINDER_SENT/ESCALATED/EXPIRED events, never from mutable counters.
ReviewItem.updated_at ● DateTimeISO scalar
Returned By
createReviewItem mutation ● extendReviewItemDueDate mutation ● markReviewItemSourceAddressed mutation ● remediateReviewItem mutation ● reviewItem query
Member Of
ReviewItemConnection object