| Internet-Draft | Child-Safe Rendering Finality | August 2026 |
| Das | Expires 27 February 2027 | [Page] |
Online child-safety controls commonly operate before the final rendering boundary. Platforms may use account-age flags, parental settings, content labels, recommender controls, server-side classification, age-assurance systems, access policies, or application filters to decide whether adult or age-restricted content should be available to a user. Those controls are important, but an upstream decision does not by itself guarantee that the content cannot later be decrypted, decoded, composited, rendered, forwarded, mirrored, or otherwise materialized through another software or device path.¶
This problem is becoming more important as content delivery becomes more distributed, encrypted, AI-mediated, personalized, and dynamically generated. A modern device may receive content through applications, browsers, content-delivery networks, embedded web views, messaging clients, recommendation systems, generative-AI services, caches, cloud gaming or streaming pipelines, local AI models, or third-party SDKs. The security question is therefore no longer only whether content was classified or whether an age check occurred upstream. A later question must also be answered: is this specific protected content authorized to become perceptible to this recipient, on this device, under the current eligibility, policy, and revocation state, at this moment?¶
This document defines a protected rendering execution-finality architecture for adult, pornographic, sexually explicit, violent, gambling-related, or otherwise age-restricted content. A proposed rendering is represented as a Restricted Content Candidate Act and remains in a Non-Renderable State until a Protected Enforcement Domain validates the applicable recipient, content, device, policy, age-or-eligibility, freshness, revocation, and sink predicates. Protected validation evidence is committed before, or atomically with, release of scoped non-bearer Rendering Finality Authority.¶
A Protected Rendering Finality Sink independently verifies that authority immediately before the content becomes perceptible. Depending on the implementation, the sink may control content-key release, decryption, media-decoder enablement, GPU or compositor access, protected-surface creation, audio output, casting, screen mirroring, display enablement, or an equivalent materialization boundary. Content bytes may therefore be delivered to a device while remaining technically non-renderable.¶
The architecture deliberately does not define a universal age-estimation algorithm, identity system, or content-classification scheme. Those mechanisms may supply inputs to the Protected Enforcement Domain. This document defines the consequence-control step that prevents an upstream policy result from becoming merely advisory at the point of rendering.¶
UNICEF has warned that pornographic content can harm children and that digital restrictions have not kept pace with technological shifts. The ITU Child Online Protection programme provides global guidance for safer digital environments, and the United Nations Committee on the Rights of the Child has called for protection of children from harmful content and online risks in the digital environment. The European Commission has likewise adopted protection-of-minors guidance and a privacy-preserving age-verification approach for adult-restricted content. These materials motivate the problem addressed here; they do not endorse this particular technical architecture.¶
The central protocol principle is: permission to deliver content is not permission to render it.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 27 February 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Child-safety systems frequently make policy decisions far from the point at which content becomes visible or audible. A server may classify content as adult-only. An account system may determine that a user is under an applicable age threshold. A parental-control service may deny a content category. A platform may enforce a regional policy. Yet the media pipeline may contain many later components: encrypted transport, local cache, decoder, GPU, compositor, protected surface, display controller, speaker path, casting interface, or screen-mirroring function.¶
The execution-finality model treats the final materialization of restricted content as a separate consequence. The relevant security property is not merely that a policy engine produced DENY. The property is that the protected content cannot become perceptible unless the final rendering boundary verifies current, act-specific authority.¶
The narrow scope of this document is adult and age-restricted content rendering. It does not attempt to standardize child identity, parental consent, age estimation, content moderation, recommender algorithms, or the legal definition of harmful content across jurisdictions.¶
The technical need has intensified because content is no longer delivered through a single predictable application path. Streaming platforms, browsers, encrypted media pipelines, social applications, short-video feeds, generative AI, multimodal assistants, local models, cloud rendering, game engines, mixed-reality systems, and third-party SDKs can all participate in content selection and materialization.¶
AI also changes the scale and dynamism of the problem. A system can generate or transform sexually explicit or otherwise adult material on demand, select content based on inferred interests, synthesize new variants that were never pre-classified as static files, or route a user through multiple content sources. An upstream catalogue label alone is therefore less reliable as the sole technical enforcement point.¶
This document does not assert that child-safety controls were unnecessary in earlier Internet systems. The narrower claim is that modern content stacks create more paths between upstream policy and final perception, increasing the value of an independently verified rendering boundary.¶
UNICEF states that pornographic content can harm children and has expressed concern about the large quantity of pornography that is easily accessible online. UNICEF has also stated that efforts to restrict children's access in digital environments have not kept pace with technological shifts.¶
The ITU Child Online Protection initiative provides policy-maker, educator, industry, parent, and child-focused guidance intended to support safer digital environments for children. Its current child online protection work emphasizes child-centred and rights-based protection mechanisms.¶
The United Nations Committee on the Rights of the Child, in General Comment No. 25 (2021), treats the digital environment as encompassing networks, content, services, applications, connected devices, artificial intelligence, robotics, automated systems, algorithms, and data analytics. The Committee has repeatedly recommended protecting children from harmful content and online risks while respecting their rights and privacy.¶
The European Commission's protection-of-minors guidance under the Digital Services Act addresses harmful content and recommends effective age-assurance measures for adult content such as pornography. The Commission's age-verification approach is designed to let a user prove that an applicable age threshold is met without unnecessarily revealing identity or exact age.¶
These sources provide policy and risk context only. They do not define, require, or endorse the execution-finality mechanism specified in this document.¶
The central distinction is:¶
CONTENT DELIVERY
!=
CONTENT RENDERING AUTHORITY
AGE CHECK
!=
DISPLAY FINALITY
CONTENT CLASSIFICATION
!=
DECRYPTION AUTHORITY
SERVER-SIDE ALLOW
!=
DEVICE-SIDE MATERIALIZATION AUTHORITY
A restricted-content system may fail even when an upstream classification or eligibility decision was correct. Examples include stale age state, revoked parental policy, cache replay, alternate application paths, direct decoder access, a compromised application, a malicious embedded SDK, casting or mirroring, a stale decryption key, sink substitution, modified content metadata, or a generated-content path that bypasses the original classifier.¶
A conforming deployment therefore assumes that ordinary application-layer software may be buggy, compromised, overly permissive, or unable to enforce the last consequence boundary by itself.¶
A deployment MAY use two execution-finality boundaries.¶
The first boundary governs DELIVERY: whether protected content may be transported to or retained within a device or protected environment.¶
The second boundary governs RENDERING: whether that content may become visible, audible, cast, mirrored, decrypted into a usable representation, or otherwise perceptible.¶
The second boundary is the critical boundary defined by this draft. Content received after successful delivery remains non-renderable until a current Rendering Finality Authority is independently verified.¶
Restricted Content
|
v
Encrypted / Protected Candidate Payload
|
v
Delivery Policy / Delivery PED
|
v
Delivery Finality Authority
|
v
Device Receives Protected Payload
|
v
STILL NON-RENDERABLE
|
v
Device-Side Protected Enforcement Domain
|
+-- recipient / eligibility state
+-- content class
+-- parental / regulatory policy
+-- device and session state
+-- policy / revocation epoch
+-- nonce / freshness
+-- intended rendering sink
|
v
Protected Validation Evidence
|
v
Scoped Non-Bearer Rendering Finality Authority
|
v
PROTECTED RENDERING FINALITY SINK
|
+-- PASS -> permitted rendering
|
`-- FAIL -> remain non-renderable
A Restricted Content Candidate Act represents a proposed materialization of age-restricted content. It may describe a video frame sequence, image, audio stream, interactive scene, generated media object, XR scene, game asset, webpage media object, or another protected representation.¶
The Candidate Act MUST remain non-renderable while required execution-finality validation is incomplete.¶
This revision defines a JSON-based interoperability profile so that implementations can evaluate a concrete contract rather than only an abstract policy model. JSON objects MUST be encoded as UTF-8. Implementations MUST reject unknown load-bearing fields when the active schema declares additionalProperties=false.¶
The JSON profile does not require HTTP as the transport. The objects may be carried over a local protected IPC mechanism, an operating-system service boundary, a trusted application-to-enclave channel, a platform API, or another authenticated transport. A future revision may define a media type or explicit transport binding.¶
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:ietf:params:json-schema:child-rendering-candidate:00",
"title": "RestrictedContentCandidate",
"type": "object",
"additionalProperties": false,
"required": [
"version",
"candidate_act_id",
"act_type",
"content",
"recipient_context",
"policy_context",
"render_request",
"freshness",
"finality_sink"
],
"properties": {
"version": {
"type": "string",
"const": "1.0"
},
"candidate_act_id": {
"type": "string",
"minLength": 16,
"maxLength": 128
},
"act_type": {
"type": "string",
"enum": [
"RENDER_VIDEO",
"RENDER_IMAGE",
"PLAY_AUDIO",
"RENDER_INTERACTIVE",
"RENDER_GENERATED_MEDIA",
"CAST_PROTECTED_CONTENT",
"MIRROR_PROTECTED_CONTENT"
]
},
"content": {
"type": "object",
"additionalProperties": false,
"required": [
"content_id",
"content_digest",
"content_class",
"classification_source",
"protection_state"
],
"properties": {
"content_id": {
"type": "string",
"maxLength": 256
},
"content_digest": {
"type": "string",
"pattern": "^sha256:[0-9a-fA-F]{64}$"
},
"content_class": {
"type": "string",
"enum": [
"ADULT_SEXUAL_CONTENT",
"SEXUALLY_EXPLICIT_CONTENT",
"AGE_RESTRICTED_VIDEO",
"AGE_RESTRICTED_AUDIO",
"AGE_RESTRICTED_INTERACTIVE",
"AGE_RESTRICTED_GENERATED_MEDIA",
"OTHER_RESTRICTED"
]
},
"classification_source": {
"type": "string",
"maxLength": 256
},
"classification_confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"protection_state": {
"type": "string",
"enum": [
"ENCRYPTED",
"KEY_WITHHELD",
"PROTECTED_SURFACE_ONLY",
"NON_RENDERABLE_BUFFER",
"OTHER_PROTECTED"
]
},
"origin_service": {
"type": "string",
"maxLength": 256
},
"generation_model_id": {
"type": [
"string",
"null"
],
"maxLength": 256
}
}
},
"recipient_context": {
"type": "object",
"additionalProperties": false,
"required": [
"recipient_context_id",
"eligibility_state",
"eligibility_evidence_ref"
],
"properties": {
"recipient_context_id": {
"type": "string",
"maxLength": 256
},
"eligibility_state": {
"type": "string",
"enum": [
"ELIGIBLE",
"NOT_ELIGIBLE",
"UNKNOWN",
"EXPIRED",
"REVOKED"
]
},
"eligibility_evidence_ref": {
"type": "string",
"maxLength": 512
},
"age_threshold_claim": {
"type": [
"string",
"null"
],
"enum": [
"OVER_18",
"OVER_LOCAL_THRESHOLD",
null
]
},
"parental_policy_ref": {
"type": [
"string",
"null"
],
"maxLength": 512
},
"privacy_preserving_proof": {
"type": "boolean"
}
}
},
"policy_context": {
"type": "object",
"additionalProperties": false,
"required": [
"jurisdiction",
"policy_id",
"policy_epoch",
"revocation_epoch"
],
"properties": {
"jurisdiction": {
"type": "string",
"maxLength": 64
},
"policy_id": {
"type": "string",
"maxLength": 256
},
"policy_epoch": {
"type": "integer",
"minimum": 0
},
"revocation_epoch": {
"type": "integer",
"minimum": 0
},
"parental_control_state": {
"type": "string",
"enum": [
"ALLOW",
"DENY",
"NOT_APPLICABLE",
"UNKNOWN"
]
},
"platform_policy_state": {
"type": "string",
"enum": [
"ALLOW",
"DENY",
"REVIEW",
"UNKNOWN"
]
}
}
},
"render_request": {
"type": "object",
"additionalProperties": false,
"required": [
"device_id",
"application_id",
"render_mode",
"output_targets"
],
"properties": {
"device_id": {
"type": "string",
"maxLength": 256
},
"application_id": {
"type": "string",
"maxLength": 256
},
"component_id": {
"type": [
"string",
"null"
],
"maxLength": 256
},
"render_mode": {
"type": "string",
"enum": [
"LOCAL_DISPLAY",
"LOCAL_AUDIO",
"XR_DISPLAY",
"CAST",
"MIRROR",
"REMOTE_DISPLAY"
]
},
"output_targets": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"enum": [
"DISPLAY",
"SPEAKER",
"HEADSET",
"XR_COMPOSITOR",
"CAST_SINK",
"MIRROR_SINK"
]
}
},
"requested_resolution": {
"type": [
"string",
"null"
],
"maxLength": 64
},
"requested_audio": {
"type": "boolean"
},
"requested_decryption": {
"type": "boolean"
}
}
},
"freshness": {
"type": "object",
"additionalProperties": false,
"required": [
"nonce",
"created_at",
"expires_at"
],
"properties": {
"nonce": {
"type": "string",
"minLength": 16,
"maxLength": 256
},
"created_at": {
"type": "string",
"format": "date-time"
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"session_id": {
"type": [
"string",
"null"
],
"maxLength": 256
}
}
},
"finality_sink": {
"type": "object",
"additionalProperties": false,
"required": [
"sink_id",
"sink_type"
],
"properties": {
"sink_id": {
"type": "string",
"maxLength": 256
},
"sink_type": {
"type": "string",
"enum": [
"CONTENT_KEY_RELEASE",
"DECRYPTION_GATE",
"MEDIA_DECODER_GATE",
"GPU_COMPOSITOR_GATE",
"PROTECTED_SURFACE_GATE",
"DISPLAY_ENABLE_GATE",
"AUDIO_OUTPUT_GATE",
"CAST_GATE",
"MIRROR_GATE"
]
},
"attestation_ref": {
"type": [
"string",
"null"
],
"maxLength": 512
}
}
}
}
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "RenderingPolicyDecision",
"type": "object",
"additionalProperties": false,
"required": [
"candidate_act_id",
"decision",
"decision_id",
"validated_policy_epoch",
"validated_revocation_epoch",
"permitted_effects",
"denial_reasons"
],
"properties": {
"candidate_act_id": {
"type": "string"
},
"decision": {
"type": "string",
"enum": [
"ALLOW_RENDER",
"DENY_RENDER",
"ALLOW_RESTRICTED_MODE",
"REQUIRE_REVALIDATION"
]
},
"decision_id": {
"type": "string"
},
"validated_policy_epoch": {
"type": "integer",
"minimum": 0
},
"validated_revocation_epoch": {
"type": "integer",
"minimum": 0
},
"permitted_effects": {
"type": "array",
"items": {
"type": "string",
"enum": [
"RELEASE_CONTENT_KEY",
"DECRYPT",
"DECODE",
"CREATE_PROTECTED_SURFACE",
"COMPOSITE",
"DISPLAY",
"PLAY_AUDIO",
"CAST",
"MIRROR"
]
}
},
"denial_reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"RECIPIENT_NOT_ELIGIBLE",
"ELIGIBILITY_UNKNOWN",
"ELIGIBILITY_EXPIRED",
"PARENTAL_POLICY_DENY",
"PLATFORM_POLICY_DENY",
"CONTENT_CLASS_MISMATCH",
"POLICY_EPOCH_STALE",
"REVOCATION_EPOCH_STALE",
"NONCE_REPLAY",
"DEVICE_MISMATCH",
"APPLICATION_MISMATCH",
"SINK_MISMATCH",
"OUTPUT_TARGET_NOT_PERMITTED",
"ATTESTATION_FAILURE",
"AUTHORITY_EXPIRED"
]
}
},
"validation_evidence_ref": {
"type": "string"
},
"decision_expires_at": {
"type": "string",
"format": "date-time"
}
}
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "RenderSinkVerifyRequest",
"type": "object",
"additionalProperties": false,
"required": [
"candidate",
"authority",
"sink_runtime_state"
],
"properties": {
"candidate": {
"$ref": "urn:ietf:params:json-schema:child-rendering-candidate:00"
},
"authority": {
"type": "object"
},
"sink_runtime_state": {
"type": "object",
"additionalProperties": false,
"required": [
"sink_id",
"current_policy_epoch",
"current_revocation_epoch",
"authority_consumed",
"device_attestation_state",
"output_path"
],
"properties": {
"sink_id": {
"type": "string"
},
"current_policy_epoch": {
"type": "integer"
},
"current_revocation_epoch": {
"type": "integer"
},
"authority_consumed": {
"type": "boolean"
},
"device_attestation_state": {
"type": "string",
"enum": [
"VALID",
"INVALID",
"UNKNOWN"
]
},
"output_path": {
"type": "string",
"enum": [
"DISPLAY",
"AUDIO",
"XR",
"CAST",
"MIRROR"
]
},
"screen_capture_active": {
"type": "boolean"
},
"external_display_attached": {
"type": "boolean"
}
}
}
}
}
The Protected Enforcement Domain (PED) MUST evaluate all predicates required by the applicable deployment before releasing Rendering Finality Authority. Typical predicates include recipient eligibility, age-threshold evidence, parental policy, content classification, content digest, jurisdiction, platform policy, device identity, application identity, requested output mode, output target, current policy epoch, current revocation epoch, nonce freshness, device attestation, and intended Finality Sink identity.¶
A successful upstream age check MUST NOT itself cause decryption or display. PED validation success authorizes creation of scoped finality authority; it does not complete the rendering consequence.¶
Before, or atomically with, Rendering Finality Authority issuance, the PED MUST commit protected validation evidence. The evidence MAY be represented by a protected signed record, MAC, enclave or HSM assertion, sealed state, monotonic-state commitment, append-only protected record, or equivalent protected mechanism.¶
A Boolean ALLOW value by itself is not sufficient finality authority.¶
The most important deployment question is where the final technical gate is placed. The gate SHOULD control the first boundary at which the protected content becomes perceptible or can be trivially converted into a perceptible representation.¶
Possible Protected Rendering Finality Sinks include content-key release, decryption, media-decoder enablement, GPU command submission, protected-surface creation, compositor admission, display-plane enablement, audio-output enablement, XR compositor access, secure-video path enablement, casting, or screen mirroring.¶
A server-side policy endpoint alone is not a Protected Rendering Finality Sink unless bypassing it also makes the protected rendering technically impossible.¶
Where encrypted or otherwise protected media is used, withholding the usable content key is a strong enforcement point. The key-release component MAY act as the Finality Sink or as one element of a chained finality path.¶
If validation fails, the usable key MUST NOT be released into an unprotected application context. If a key was previously released under a bounded authority, its validity SHOULD be constrained by session, content, policy epoch, time, frame window, or equivalent protected state.¶
For media that is already locally encrypted or decoded inside a protected pipeline, the Finality Sink MAY be placed at a decoder, GPU, protected-surface, or compositor boundary. The implementation MUST prevent ordinary application code from converting a denied Candidate Act into a visible frame through an alternate unprotected surface.¶
Protected rendering MAY therefore require that decoded frames remain in protected memory or protected surfaces until the compositor verifies current finality authority.¶
Adult or age-restricted content can be materialized through secondary paths even when a local display is controlled. Audio, HDMI or external displays, wireless casting, screen mirroring, remote-display APIs, accessibility capture paths, and similar outputs MAY therefore require separate consequence classes or sink-bound authority.¶
A local-display authority MUST NOT be interpreted as universal authority for every secondary output.¶
The following example shows an adult-classified video that remains key-withheld until the device-side protected sink verifies current eligibility, policy, device, content, freshness, and output-path state.¶
{
"candidate": {
"version": "1.0",
"candidate_act_id": "rca-8f3d0d0d-20260826-000001",
"act_type": "RENDER_VIDEO",
"content": {
"content_id": "asset-adult-99182",
"content_digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"content_class": "ADULT_SEXUAL_CONTENT",
"classification_source": "platform-classifier-v7",
"classification_confidence": 0.998,
"protection_state": "KEY_WITHHELD",
"origin_service": "media.example",
"generation_model_id": null
},
"recipient_context": {
"recipient_context_id": "recipient-session-771",
"eligibility_state": "ELIGIBLE",
"eligibility_evidence_ref": "ageproof:opaque:44e2...",
"age_threshold_claim": "OVER_18",
"parental_policy_ref": null,
"privacy_preserving_proof": true
},
"policy_context": {
"jurisdiction": "EU",
"policy_id": "adult-content-policy-eu-v4",
"policy_epoch": 412,
"revocation_epoch": 39,
"parental_control_state": "NOT_APPLICABLE",
"platform_policy_state": "ALLOW"
},
"render_request": {
"device_id": "device-3dd18",
"application_id": "app.media.client",
"component_id": "protected-player",
"render_mode": "LOCAL_DISPLAY",
"output_targets": [
"DISPLAY",
"SPEAKER"
],
"requested_resolution": "1080p",
"requested_audio": true,
"requested_decryption": true
},
"freshness": {
"nonce": "f9014acbe771440ab5208751",
"created_at": "2026-08-26T17:35:00Z",
"expires_at": "2026-08-26T17:35:30Z",
"session_id": "sess-fb211"
},
"finality_sink": {
"sink_id": "render-sink-secure-compositor-01",
"sink_type": "GPU_COMPOSITOR_GATE",
"attestation_ref": "attest:device-3dd18:epoch-88"
}
},
"authority": {
"authority_id": "rfa-d48d7f",
"candidate_act_id": "rca-8f3d0d0d-20260826-000001",
"candidate_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"validation_evidence_ref": "pve:9f1172",
"permitted_effects": [
"RELEASE_CONTENT_KEY",
"DECRYPT",
"DECODE",
"CREATE_PROTECTED_SURFACE",
"COMPOSITE",
"DISPLAY",
"PLAY_AUDIO"
],
"content_digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"recipient_context_id": "recipient-session-771",
"device_id": "device-3dd18",
"application_id": "app.media.client",
"sink_id": "render-sink-secure-compositor-01",
"sink_type": "GPU_COMPOSITOR_GATE",
"policy_epoch": 412,
"revocation_epoch": 39,
"nonce": "f9014acbe771440ab5208751",
"issued_at": "2026-08-26T17:35:01Z",
"expires_at": "2026-08-26T17:35:30Z",
"consumption": "FRAME_WINDOW",
"max_frame_count": 900,
"max_duration_ms": 30000,
"signature_or_mac": "base64url:protected-authenticator"
},
"sink_runtime_state": {
"sink_id": "render-sink-secure-compositor-01",
"current_policy_epoch": 412,
"current_revocation_epoch": 39,
"authority_consumed": false,
"device_attestation_state": "VALID",
"output_path": "DISPLAY",
"screen_capture_active": false,
"external_display_attached": false
}
}
The following example shows a denial where the recipient is not eligible and parental policy also denies rendering. The important result is not merely an error response: all materialization controls remain disabled.¶
{
"candidate_act_id": "rca-minor-session-223",
"decision": "DENY_RENDER",
"decision_id": "decision-99831",
"validated_policy_epoch": 412,
"validated_revocation_epoch": 39,
"permitted_effects": [],
"denial_reasons": [
"RECIPIENT_NOT_ELIGIBLE",
"PARENTAL_POLICY_DENY"
],
"validation_evidence_ref": "pve-deny:3882",
"decision_expires_at": "2026-08-26T17:36:00Z",
"sink_action": {
"release_content_key": false,
"decrypt": false,
"decode": false,
"create_protected_surface": false,
"display": false,
"play_audio": false,
"cast": false,
"mirror": false,
"result": "CONTENT_REMAINS_NON_RENDERABLE"
}
}
If required authority is missing, malformed, expired, stale, replayed, revoked, consumed, content-mismatched, recipient-mismatched, device-mismatched, application-mismatched, policy-mismatched, output-mismatched, or sink-mismatched, the content MUST remain non-renderable.¶
Failure MUST NOT be converted into a warning followed by display. Implementations MUST NOT use 'best effort' rendering for content subject to this protected finality profile when current authority cannot be established.¶
Eligibility and parental state may change after content is delivered. A device may also restore an old application snapshot or replay a previously valid rendering authority. The Finality Sink SHOULD therefore verify current policy and revocation epochs immediately before materialization and MUST enforce nonce or equivalent anti-replay state.¶
An old authorization MUST NOT automatically override a later parental-control change, account-state change, legal-policy change, device revocation, or recipient eligibility change.¶
Generative AI may create age-restricted media that has no stable catalogue identifier. The Candidate Act therefore supports content digests, generation-model identifiers, classification sources, and protected output state. A generated object SHOULD be bound to the classification and authority actually used for the attempted rendering.¶
This draft does not define how AI-generated content is classified. It defines how a classification or policy decision can be made technically load-bearing at the rendering boundary.¶
Child-safety enforcement can itself create privacy risk if systems unnecessarily expose a child's identity, exact age, browsing history, or content choices. Implementations SHOULD minimize disclosure and MAY consume privacy-preserving eligibility proofs that state only whether the required threshold or policy condition is satisfied.¶
The rendering sink generally needs the validated eligibility result and bindings necessary for effectuation; it does not necessarily need the user's civil identity or exact date of birth.¶
Logs and validation evidence SHOULD avoid recording unnecessary content titles, URLs, identity attributes, or detailed viewing history where a digest, opaque identifier, or protected commitment is sufficient.¶
Threats include compromised applications, forged age state, stale parental policy, replayed authorities, content substitution after classification, sink substitution, screen-capture bypass, casting bypass, unprotected decoder paths, key extraction, rollback of revocation state, and malicious SDKs.¶
Implementations SHOULD place load-bearing checks within protected execution, trusted operating-system, hardware-backed, or equivalently isolated enforcement paths when the threat model includes compromise of ordinary application software.¶
The execution-finality layer is designed to consume outcomes from existing systems rather than replace them. Inputs MAY come from privacy-preserving age verification, platform account state, parental-control systems, content classifiers, regulatory policy, trusted identity providers, device policy, or enterprise/family safety services.¶
Those systems answer whether a condition is satisfied. The Finality Sink answers whether the specific protected rendering consequence may now occur.¶
This version requests no IANA actions. If a future version standardizes an Internet media type, URI scheme, error registry, or globally interoperable consequence-class registry, the corresponding IANA considerations will be added.¶
Certain concepts described in this document are related to pending patent applications in the DAS Protocols family. Any disclosure required by an applicable standards-development process should be made separately in accordance with that process. This section is informational and does not specify licensing terms.¶