ContractSpec docs

OSS-first docs

These docs teach the open system first: contracts, generated surfaces, runtimes, governance, and incremental adoption. Studio shows up as the operating layer on top, not as the source of truth.

Escalate a review to a higher tier

Escalate a review to a target tier; emits an audit event and (optionally) a governance notification via the outbox.

field.key.label
Escalate a review to a higher tier
field.version.label
field.type.label
field.title.label
Escalate a review to a higher tier
field.description.label

Escalate a review to a target tier; emits an audit event and (optionally) a governance notification via the outbox.

field.tags.label
review,escalate,mutation,governance,audit
field.owners.label
field.stability.label
public

PRIMARY cross-domain seam (SEAMS §3.6, S-06). On successful escalation, the handler emits two ordered outbox messages alongside the review's own state change:

1.

`audit.event.append { eventKind: 'review.escalated', retentionClass: 'regulatory', payload: { reviewId, fromStatus, toTier, escalationReason, decidedBy, decidedAt } }`. `auditEventId` is returned in the output for traceability.

2.

If `notifyOwners === true`, `governance.notification.dispatch { policyRefs: subject.policyRefs[], escalationContext: { reviewId, tier, auditEventId } }`. `governanceNotificationId` is returned in the output (optional field).

Per SEAMS §1.4 transactional outbox: state change + outbox row commit atomically; downstream callees are idempotent on `(reviewId, escalation-version)` so replays are safe.

Capability: `review.escalate` (+ implicit `review.act`). Per SEAMS §1.5, missing capability returns `FORBIDDEN`. Idempotency: required.

Tier vocabulary (`'tier-1' | 'tier-2' | 'admin'`) aligns with `lib.identity-rbac` role tiers (DOMAIN_NOTES §9 Q1; coordinated with W5).