Skip to main content

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