Architectural Invariant Design: Compose Multiplatform Metal/Vulkan 8.33ms Frame Budget & Recomposition Guardrail
Compose Multiplatform Metal/Vulkan 8.33ms Frame Budget & Recomposition Guardrail defines an industrial-grade behavioral standard for mobile engineering. Enforces deterministic microtask thresholds and zero-allocation rendering paths across Kotlin Multiplatform Compose UI trees targeting Skiko (Metal on iOS, Vulkan on Android). Guarantees consistent 120Hz frame pacing (8.33ms budget) by eliminating recomposition loops, layout-pass allocations, and un-deferred state reads on mobile render pipelines. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.
Hazard Analysis: What Breaks Without This Rule
The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:
| Failure Mode | AI Symptom (The Anti-Pattern) | Severity | Production Impact & Remedy |
|---|---|---|---|
| AI Hallucination & Deprecation Drift | Reading Unstable State in Composition Passes and Allocating Canvas Objects Inside Skiko Render Loops | Critical | Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production. Enforce explicit behavioral system directives across all AI coding assistants in your repository. |
| Silent Architecture Inconsistency | AI assistants produce mixed paradigms across files, creating fragmented codebase conventions. | Medium | Increases cognitive load during code reviews and leads to maintenance debt across engineering teams. Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails. |
Step-by-Step Production Directives
Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:
Engineers MUST defer dynamic observable state reads directly to the Draw or Layout phase using Modifier.graphicsLayer { ... }, Modifier.drawWithCache { ... }, or Modifier.offset { ... } rather than accessing state directly in the Composable body.
Engineers MUST defer dynamic observable state reads directly to the Draw or Layout phase using Modifier.graphicsLayer { ... }, Modifier.drawWithCache { ... }, or Modifier.offset { ... } rather than accessing state directly in the Composable body.
Engineers MUST annotate cross-module UI models and domain transfer objects with @Immutable or @Stable, or wrap unstable multiplatform primitives (such as standard Kotlin collections) into kotlinx.collections.immutable persistent structures.
Engineers MUST annotate cross-module UI models and domain transfer objects with @Immutable or @Stable, or wrap unstable multiplatform primitives (such as standard Kotlin collections) into kotlinx.collections.immutable persistent structures.
Engineers MUST NOT instantiate paint objects, paths, shaders, or create memory allocations inside DrawScope, Canvas, or Skiko render loops
Engineers MUST NOT instantiate paint objects, paths, shaders, or create memory allocations inside DrawScope, Canvas, or Skiko render loops; all graphics primitives MUST be retained across frames via remember { Path() } or drawWithCache { ... }.
Derived calculations involving multiple reactive states MUST be wrapped inside derivedStateOf with structural mutation boundaries to prevent cascading re-executions across the compositional subtree.
Derived calculations involving multiple reactive states MUST be wrapped inside derivedStateOf with structural mutation boundaries to prevent cascading re-executions across the compositional subtree.
Components NEVER execute blocking operations, synchronous disk/keychain access, or complex sequence processing inside Composable execution scopes
Components NEVER execute blocking operations, synchronous disk/keychain access, or complex sequence processing inside Composable execution scopes; background offloading via produceState or LaunchedEffect(Dispatchers.Default) is mandatory.
Frequently Asked Technical Questions
Common questions developers face when configuring AI coding assistants for this stack:
Q:Why is Compose Multiplatform Metal/Vulkan 8.33ms Frame Budget & Recomposition Guardrail critical for AI coding assistants?
Enforces deterministic microtask thresholds and zero-allocation rendering paths across Kotlin Multiplatform Compose UI trees targeting Skiko (Metal on iOS, Vulkan on Android). Guarantees consistent 120Hz frame pacing (8.33ms budget) by eliminating recomposition loops, layout-pass allocations, and un-deferred state reads on mobile render pipelines. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.
Q:How does adopting this rule prevent AI hallucinations?
This rule explicitly declares what the AI must avoid (Reading Unstable State in Composition Passes and Allocating Canvas Objects Inside Skiko Render Loops) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.
Q:Which AI coding environments are supported?
This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).
Q:Can I combine this rule with other technology stacks?
Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.