/SKILL.md
Layered deterministic ECS and rollback architecture governance framework for Phaser 4.
npx skillsauth add jl-velasco/phaser-4-skill phaser4-professional-frameworkInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This repository serves as the official registry for the Phaser 4 Professional Architecture Framework.
This is NOT a tutorial set. It is an uncompromising, production-grade architectural blueprint designed specifically for senior engineers and enterprise studios.
The framework is strictly positioned as:
This SKILL.md file acts as a monolithic skill encapsulating the Phaser 4 Professional Architecture Framework. The framework internally defines rigid, non-overlapping professional capability layers.
phaser4-advanced-netcode layer strictly assumes and depends upon the foundational mastery of the phaser4-ecs-architecture layer.This framework enforces strict layered contracts. You must understand the absolute hierarchy of dependencies:
phaser4-gamedev (philosophy layer)phaser4-ecs-architecture (deterministic simulation core)phaser4-advanced-netcode (distributed synchronization extension)Architectural Law: Activating or applying Layer 2 without strictly implementing Layer 1 violates the architectural contract.
When an Artificial Intelligence Agent (like an LLM or coding assistant) consumes this repository to architect a system, it must strictly adhere to the following enforcement protocols:
Skill Contract of every requested layer to ensure compatibility.To successfully architect and deploy an enterprise Phaser 4 application, you must adopt the framework in the following sequence:
phaser4-gamedev
↓
phaser4-ecs-architecture
↓
phaser4-advanced-netcode (optional)
Why this sequence is non-negotiable:
phaser4-gamedev).phaser4-ecs-architecture).phaser4-advanced-netcode).The architecture framework will continuously expand to cover the entire production lifecycle. Upcoming enterprise modules include:
phaser4-production-ops: Strategies for static asset hashing, Webpack/Vite bundle splitting, and deployment environment hardening.phaser4-ci-cd-pipeline: Automated deterministic verification testing and CI/CD pipelines via Vitest and Playwright headless browsers.phaser4-observability-suite: Implementing remote telemetry for live ECS performance budgeting, leak detection, and crash isolation reporting.phaser4-headless-server-mode: Stripping the WebGL/WebGPU renderers to run the exact authoritative ECS simulation loop natively in Node.js or Bun.| Layer Name | Level | Determinism | Multiplayer | Headless Safe | Requires Fixed Timestep |
|------------|-------|-------------|-------------|---------------|-------------------------|
| phaser4-gamedev | 0 | None | No | No | No |
| phaser4-ecs-architecture | 1 | Local (Level 1) | No | Yes | Yes |
| phaser4-advanced-netcode | 2 | Network-Safe (Level 2) | Yes | Yes | Yes |
All capability values are derived directly from the structured metadata blocks of each layer. This matrix is strictly informational. The metadata block remains the single authoritative source of truth.
Within this highly rigid architecture, agents and engineers must observe the following strict precedence:
This document is a single, monolithic skill. However, it enforces strict internal separation of concerns through architectural layers.
metadata_schema: phaser4-skill-schema@1 skill_id: phaser4-gamedev framework_version: 1.0.0 contract_version: 1.0.0 enforcement_level: strict compatibility_mode: isolated layer: 0 provides:
Welcome to the professional ecosystem for Phaser 4. This gateway defines the overarching philosophy required to build scalable, high-performance HTML5 games using modern architectural patterns.
Phaser 4 represents a fundamental paradigm shift from its predecessor. It discards heavy Object-Oriented patterns in favor of a strictly decoupled Entity-Component-System (ECS) core powered by Data-Oriented Design (DOD).
In this new era:
class Player extends Sprite inheritance trees.To master this architecture without overwhelming complexity, the professional curriculum is split into two specialized, non-overlapping domains.
You must internally resolve and apply the necessary architectural layers for your project's scope:
For all enterprise-grade games emphasizing deterministic simulation, heavy testability, and rigid maintainability. (Installation happens once at the repository level. This layer is resolved internally via metadata.) Provides: System Orchestration, Intent Components, Purity Contracts, and Domain-Driven Design patterns.
For engineers building realtime authoritative servers requiring lockstep or GGPO-style rollback. (Installation happens once at the repository level. This layer is resolved internally via metadata.) Provides: Rollback loops, Snapshot/Input ring buffers, Clock Discipline, and Server Reconciliation. (Requires the core architecture skill as a prerequisite).
By compartmentalizing these concepts, you can architect local-only or turn-based games with pristine ECS mechanics, completely avoiding the immense cognitive overhead of rollback synchronization until explicitly required by your domain.
This layer MUST REFUSE to guide or generate architecture in the following scenarios:
class Hero extends Character extends Phaser.Sprite).The following scenarios indicate a fundamental architectural misconfiguration and trigger immediate failure:
contract_version.enforcement_level fields invalidates framework certification.metadata_schema: phaser4-skill-schema@1 skill_id: phaser4-ecs-architecture framework_version: 1.0.0 contract_version: 1.0.0 enforcement_level: strict compatibility_mode: isolated layer: 1 provides:
phaser4-gamedev (conceptual)phaser4-gamedev(This module explicitly provides Level 1 guarantees).
Learn to build incredibly fast, data-oriented 2D browser games using Phaser 4's new Entity-Component-System (ECS) architecture, TypeScript-first approach, and WebGL/WebGPU rendering.
This layer is designed for:
By the end of this layer, you will be able to:
To get the most out of Phaser 4's typing system, this layer assumes the following tsconfig.json compiler options:
"strict": true"noImplicitAny": true"exactOptionalPropertyTypes": trueany – Always define explicit interfaces for your components and systems.Professional Phaser 4 projects must enforce consistency and architectural constraints automatically.
Recommended rules:
anyExample ESLint philosophy:
{
"rules": {
"@typescript-eslint/no-explicit-any": "error",
"@typescript-eslint/explicit-function-return-type": "warn",
"import/no-cycle": "error",
"max-lines-per-function": ["warn", 60]
}
}
Architecture is enforced by tooling, not discipline alone.
We recommend strictly separating concerns to keep your game testable and scalable:
This layer is intentionally opinionated. Follow these rules:
The ECS store is the sole source of truth for the game domain. External mutation (UI callbacks, input events) must encode intents and enqueue them for the System pipeline. All adapters (Renderer, Audio, UI) strictly derive state from the ECS on a read-only basis.
If your game breaks when Phaser is removed from your domain folder, your architecture is wrong.
If you are coming from Phaser 3, you must undergo a mental paradigm shift. The framework is no longer a God-object that controls your game design.
this.add, this.physics, this.tweens all tightly coupled to the Scene instance.Phaser.GameObjects.Sprite to add business logic (update() methods inside view classes).class Enemy extends Character extends Sprite).Phaser 4 games do not rely on a monolithic new Phaser.Game(config) object in the same way Phaser 3 did. Instead, you compose the game loop and renderer manually, giving you fine-grained control.
// src/main.ts
import { Game } from '@phaserjs/phaser/Game';
import { Scene } from '@phaserjs/phaser/Scene';
import { WebGLRenderer } from '@phaserjs/phaser/renderer/webgl1/WebGLRenderer';
class MainScene extends Scene {
// Scene implementation...
}
// Initialize the Game
const game = new Game({
width: 800,
height: 600,
renderer: WebGLRenderer,
parent: 'game-container',
scenes: [MainScene]
});
Phaser 4 represents a major architectural shift. Instead of classic Object-Oriented inheritance (class Player extends Phaser.GameObjects.Sprite), Phaser 4 utilizes an Entity-Component-System (ECS) core.
Position { x, y }, Velocity { x, y }).(Note: This guide assumes ergonomic, sparse Map-based component stores typical in JS/TS. However, ultra high-performance engines eventually migrate toward dense, indexed Structure of Arrays (SoA) memory layouts, trading developer ergonomics for raw CPU cache performance.)
Because of ECS, you shouldn't rely on massive classes with methods for everything (e.g. sprite.setAlpha(0.5)). Instead, you use modular functions that mutate the component data of the entity.
Avoid bringing Phaser 3 mental models into Phaser 4.
❌ Wrong (OOP inheritance mindset)
class Player extends Sprite {
attack() {
this.setVelocityX(100);
}
}
✅ Correct (Data-Oriented ECS mindset)
// Component
interface Position {
x: number;
y: number;
}
interface Velocity {
x: number;
y: number;
}
// System
function MovementSystem(entities: Entity[]) {
// deterministic processing of data
}
Entities are not behavior containers. Behavior lives in Systems.
The lifecycle of a component within the ECS goes: Created → Active → Marked for Removal → Purged.
You must never dynamically delete a component or entity mid-iteration during a System's hot loop, as this shuffles underlying arrays and corrupts active iterators. Always defer destruction by tagging entities with a PendingDestroy component, and purge them safely at the frame boundary via a dedicated cleanup system.
An entity is mathematically just an integer ID. A controlled ID allocator should manage acquisition and recycling. Never reuse an ID within the exact same frame it was destroyed to avoid stale reference resolution during deferred execution.
Unlike Phaser 3, where Scenes were heavy managers of systems (this.add, this.physics), Phaser 4 Scenes are lightweight. They act structurally to group entities and manage lifecycle events.
Architectural Principle: Do not put game logic inside your Scene classes.
import { Scene } from '@phaserjs/phaser/Scene';
import { On } from '@phaserjs/phaser/events/On';
export class GameScene extends Scene {
constructor() {
super();
// Listen to lifecycle events
On(this, 'start', () => this.start());
On(this, 'update', (delta: number, time: number) => this.update(delta, time));
}
start() {
// Initialization and object creation
}
update(delta: number, time: number) {
// Delegate loop logic to ECS Systems here
}
}
In Phaser 4, what you previously knew as a Sprite is internally handled as an Entity with various Components (Transform, Texture, etc.).
You construct objects and explicitly add them to the Display List of the scene using AddChild. This cleanly separates rendering from domain logic.
import { Sprite } from '@phaserjs/phaser/gameobjects/sprite/Sprite';
import { Text } from '@phaserjs/phaser/gameobjects/text/Text';
import { AddChild } from '@phaserjs/phaser/display/AddChild';
import { SetPosition } from '@phaserjs/phaser/components/transform/SetPosition';
// 1. Create the Object (Entity instantiation)
const player = new Sprite(100, 100, 'player-texture');
const scoreText = new Text(10, 10, 'Score: 0', { font: '16px Arial', fill: '#FFF' });
// 2. Modify component data via modular functions
SetPosition(scoreText, 20, 20);
// 3. Add to the Scene's Display List for rendering
AddChild(this, player);
AddChild(this, scoreText);
Phaser 4 features a unified input system. Pointer events handle both mouse clicks and touch automatically.
import { Keyboard } from '@phaserjs/phaser/input/keyboard/Keyboard';
import { SetInteractive } from '@phaserjs/phaser/input/SetInteractive';
import { On } from '@phaserjs/phaser/events/On';
// -- Keyboard --
const keyboard = new Keyboard();
On(keyboard, 'keydown-SPACE', () => console.log('Jump!'));
// -- Pointer (Mouse/Touch) --
// Interactive objects must be explicitly enabled for input.
SetInteractive(player);
On(player, 'pointerdown', (pointer) => {
console.log(`Player clicked at ${pointer.x}, ${pointer.y}`);
});
Physics bodies are attached to entities as Components, and processed by Physics Systems. Phaser 4 supports two primary physics engines:
// Example concept for adding physics to an entity in a modular way
import { AddArcadeBody } from '@phaserjs/phaser/physics/arcade/AddArcadeBody';
// Assuming 'player' is an entity/sprite
AddArcadeBody(player, { isStatic: false });
Assets are loaded asynchronously within a preload method of a Scene or a dedicated "Boot Scene".
import { ImageFile } from '@phaserjs/phaser/loader/files/ImageFile';
import { SpriteSheetFile } from '@phaserjs/phaser/loader/files/SpriteSheetFile';
import { AudioFile } from '@phaserjs/phaser/loader/files/AudioFile';
export class PreloadScene extends Scene {
async preload() {
// Use Promise.all() for parallel, modular loading
await Promise.all([
ImageFile('background', 'assets/bg.png').load(),
SpriteSheetFile('hero', 'assets/hero.png', { frameWidth: 32, frameHeight: 32 }).load(),
AudioFile('jumpSound', 'assets/jump.mp3').load()
]);
}
}
For a scalable, enterprise-grade game, use Vite or Webpack and adhere to this strict module structure:
/public
/assets <-- All static images, sounds, tilemaps
index.html <-- Entry point holding the `<div id="game-container">`
/src
/core <-- Bootstrap and configurations
/components <-- Custom ECS Components (Interfaces/Data only)
/systems <-- Custom ECS Systems (Pure logic/Functions)
/scenes <-- Lightweight lifecycle managers
/entities <-- Prefabs and Entity instantiators
/domain <-- Specific game rules and utilities
main.ts <-- Initializes the Game instance
Advanced Phaser 4 architecture separates game rules from rendering completely.
Example domain rule:
// domain/CombatRules.ts
export function calculateDamage(
baseDamage: number,
defense: number
): number {
return Math.max(baseDamage - defense, 0);
}
This file:
Game engines are infrastructure. Rules are domain.
Professional game architecture must be testable.
What we test:
What we do NOT test:
Example Vitest test:
import { describe, it, expect } from 'vitest'
import { calculateDamage } from '../domain/CombatRules'
describe('CombatRules', () => {
it('never returns negative damage', () => {
expect(calculateDamage(5, 10)).toBe(0)
})
})
If your game logic cannot be unit tested, it is tightly coupled to the engine.
ECS architecture enables deterministic simulation. To ensure predictability across simulation ticks:
Systems must operate under a strict mathematical purity contract:
window.performance.now(), Math.random()).To decouple render iterations (FPS) from simulation logic, you must implement an accumulator pattern with a fixed simulation step (e.g., 16.66ms for 60Hz).
accumulator += deltaTime;
while (accumulator >= fixedStep) {
simulateGameTick(fixedStep);
accumulator -= fixedStep;
}
This loop guarantees stable simulation windows and prevents physics divergence.
Phaser 4 is fast because of ECS. To maximize performance, adhere to Data-Oriented Design (DOD):
new or {}) inside hot updating loops. Per-frame heap memory allocations trigger Garbage Collection micro-stutters.Before deploying an enterprise game, enforce specific production constraints:
Each System invocation should be wrapped in guarded execution (e.g., Error Boundaries). One failing System must not corrupt the authoritative ECS state. Implement strict crash containment so the engine can recover or halt gracefully without dragging down the main simulation loop.
console.log. Abstract logging into an Infrastructure service that sends telemetry to a backend in prod, and writes to console in dev.Promise.catch on ImageFile loaders. Provide fallback textures ("pink squares") so a missing sub-asset doesn't halt the entire game bootstrap..js or .png files.This is how a true professional structures a feature using pure ECS in Phaser 4.
// ECS/Components.ts
export interface Position {
x: number;
y: number;
}
export interface Velocity {
x: number;
y: number;
}
// ECS/MovementSystem.ts
import { Position, Velocity } from './Components';
export function MovementSystem(
positions: Map<number, Position>,
velocities: Map<number, Velocity>,
deltaMs: number
) {
const deltaSec = deltaMs / 1000;
for (const [entityId, pos] of positions) {
const vel = velocities.get(entityId);
if (vel) {
pos.x += vel.x * deltaSec;
pos.y += vel.y * deltaSec;
}
}
}
// tests/MovementSystem.test.ts
import { describe, it, expect } from 'vitest';
import { MovementSystem } from '../ECS/MovementSystem';
describe('MovementSystem', () => {
it('updates position deterministically based on velocity and delta', () => {
const posMap = new Map([[1, { x: 0, y: 0 }]]);
const velMap = new Map([[1, { x: 100, y: 0 }]]);
// Advance exactly 0.5 seconds (500ms)
MovementSystem(posMap, velMap, 500);
expect(posMap.get(1)?.x).toBe(50); // 100 * 0.5
});
});
// Infrastructure/RenderSyncSystem.ts
import { Sprite } from '@phaserjs/phaser/gameobjects/sprite/Sprite';
import { SetPosition } from '@phaserjs/phaser/components/transform/SetPosition';
import { Position } from '../ECS/Components';
export function RenderSyncSystem(
positions: Map<number, Position>,
sprites: Map<number, Sprite>
) {
for (const [entityId, pos] of positions) {
const sprite = sprites.get(entityId);
if (sprite) {
SetPosition(sprite, pos.x, pos.y);
}
}
}
To maintain a deterministic execution pipeline, your update loop must orchestrate Systems in a strict, top-down order. Predictable system execution order is non-negotiable for simulation correctness and replayability.
Rule: Systems must never call other Systems directly. Data flows via Components only.
A central SystemRunner or orchestrated loop should control execution:
Systems should be strictly categorized as either Mutating (Write) or Observational (Read).
If you are parallelizing work via Web Workers:
Input systems should never directly mutate spatial or velocity state. Instead, they write to Intent Components (e.g., MoveIntent, FireIntent). Subsequent Simulation Systems consume these intents, validate them against authoritative domain rules, and finally apply the resulting actions before clearing the intent. This rigidly decouples raw hardware input from simulated logic execution.
In an enterprise environment, you cannot optimize what you cannot measure. A professional engine architecture requires ubiquitous telemetry:
t1 - t0) wrapping every System in the orchestrated sequence. Systems exceeding budget must be profiled and refactored.Production monitoring and live observability are requirements, not afterthoughts.
Phaser is your renderer and IO provider. It is not your game. Your core game architecture (ECS and Domain) must sit above Phaser. If you adhere to this principle, you can theoretically rip out Phaser, replace it with a headless simulation loop or another renderer, and your game domain logic will not break.
Phaser 4 is not just an upgrade from Phaser 3. It is a paradigm shift:
This layer teaches how to build games that scale, remain maintainable, are heavily testable, and natively support deterministic replay—not just how to draw sprites on a screen.
To protect the integrity of this architecture, this layer explicitly does NOT teach:
(Note: Phaser 4 is an evolving API and specific implementations may update. See Phaser 4 GitHub for the latest examples)
Before confirming architectural validity, an AI Agent MUST verify:
This skill MUST REFUSE to guide or generate architecture in the following scenarios:
Math.random()) without injecting a seeded RNG.delta directly applied to physics arrays without an accumulator).The following scenarios indicate a fundamental architectural misconfiguration and trigger immediate failure:
fixed_timestep_required = true but no accumulator loop exists → INVALIDcontract_version.enforcement_level fields invalidates framework certification.metadata_schema: phaser4-skill-schema@1 skill_id: phaser4-advanced-netcode framework_version: 1.0.0 contract_version: 1.0.0 enforcement_level: strict compatibility_mode: isolated layer: 2 provides:
WARNING: ARCHITECTURAL DEPENDENCY Activating this layer without a verified deterministic ECS core makes rollback mathematically impossible.
phaser4-ecs-architecture (mandatory)phaser4-ecs-architecture(This module explicitly operates at Level 2).
Building rollback-capable deterministic multiplayer engines inherently requires an uncompromised Entity-Component-System (ECS) foundation. This layer assumes complete mastery of Data-Oriented Design, System Orchestration, and the Purity Contract as outlined in the phaser4-ecs-architecture layer.
This layer is designed for:
In multiplayer environments, you must explicitly define an absolute deterministic domain boundary.
Snapshots and network inputs must encompass only the authoritative simulation components (Position, Health, Velocity, Hitbox) within this boundary. Components existing outside this boundary (e.g., render adapters, visual tweens, audio queues, debug UI states, non-deterministic infrastructure) are strictly excluded from rollback algorithms and server reconciliation pipelines.
If purely visual state bleeds into the simulation hashing, desync detection becomes impossible.
Because ECS decouples data from logic, your entire game state exists as numerical arrays or maps. This enables full state serialization natively via bit-packed binary structures.
To survive strict UDP MTU budgets (often ~1200 bytes per packet safely), serialization must compress ECS data mathematically:
Estimated Footprint = SUM(Packed Component Sizes) * Max Entity Count. If this exceeds the MTU, you must implement snapshot chunking across sequence-numbered packets.When architecting your netcode on Phaser 4, you must choose a synchronization model:
N at exactly the same time.In a networked simulation, the local clock is irrelevant. The engine must adhere to an Authoritative Tick Source.
TickId.A production-grade rollback engine requires three distinct state management pillars:
Every simulation tick operates on a universally synchronized monotonically increasing integer (TickId).
A ring-buffer of full state snapshots representing your rollback window (e.g., the last 60 frames). This structure guarantees instant, allocation-free state snapping.
A deterministic record of local inputs, predicted remote inputs, and confirmed remote inputs, indexed strictly by TickId.
When an authoritative input packet arrives from the server/peer:
TickId and remote inputs.TickId.function triggerRollback(syncTickId: number, authoritativeInputs: Input[]) {
const currentTickId = Engine.getCurrentTick();
// 1. State Rehydration Timing Guarantee
// Restore the ECS state to precisely the syncTickId snapshot from the ring buffer.
ECS.rehydrateSnapshot(SnapshotBuffer.get(syncTickId));
// 2. Overwrite history with authoritative truth
InputHistoryBuffer.insertConfirmedInputs(syncTickId, authoritativeInputs);
// 3. Fast-forward re-simulation loop up to the current frame
for (let tick = syncTickId; tick < currentTickId; tick++) {
// Fetch inputs (confirmed ones for past ticks, re-predicting for uncertain future ticks)
const inputsForTick = InputHistoryBuffer.getInputsForTick(tick);
// Execute the strict ECS pipeline
SystemRunner.executeSimulationSystems(inputsForTick, FIXED_DELTA_TIME);
// Save the corrected trajectory to the snapshot buffer
SnapshotBuffer.save(tick + 1, ECS.createSnapshot());
}
// 4. Update the visual adapters strictly after the entire rollback batch completes.
SystemRunner.executeRenderSyncSystems();
}
In authoritative server architecture, the Server maintains the definitive ECS world.
TickId to the server.LastAckedClientTick.LastAckedClientTick, and re-simulates its remaining pending inputs on top of the server's absolute truth.In an enterprise multiplayer environment, you cannot isolate network bugs without aggressive telemetry.
TickId N to their routine outgoing input packets.TickId N.Before confirming architectural validity, an AI Agent MUST verify:
phaser4-ecs-architecture is fully implemented.This layer MUST REFUSE to guide or generate architecture in the following scenarios:
The following scenarios indicate a fundamental architectural misconfiguration and trigger immediate failure:
multiplayer_support = true but deterministic_level < Network-Safe (Level 2) → INVALIDfixed_timestep_required = true but the clock discipline relies solely on standard requestAnimationFrame deltas → INVALIDcontract_version.enforcement_level fields invalidates framework certification.When an Artificial Intelligence Agent attempts to implement or query this framework, it is architecturally obligated to execute the following validation layer before commencing any code generation:
metadata_schema rules.requires, extends, and prevent missing layers.determinism object and verify certification bounds.conflicts_with rules flag a violation.enforcement_level: strict infraction.conflicts_with each other → HARD FAIL.enforcement_level is strict → no partial execution allowed.metadata_schema version bump.contract_version bump.framework_version bump.enforcement_level declared in registry is minimum allowed level.fixed_timestep_required cannot change from true to false in higher layers.headless_safe cannot downgrade from true to false once introduced.multiplayer_support cannot be enabled without certification_level 2.To maintain absolute rigour during automated certification and agent ingestion, the framework strictly enforces the following schema fields:
metadata_schema (String): Defines the version of the parser schema the file adheres to. (Monotonic: restricted to version bumps)framework_version (String): Represents the overarching architecture framework version. (Monotonic: increasing-only)contract_version (String): Designates the strict API behavioral guarantee level. (Monotonic: increasing-only)enforcement_level (Enum): The severity of parsing strictness (e.g., strict). (Monotonic: immutable, forbidden to override downwards from registry)compatibility_mode (Enum): Defines how the skill interconnects (e.g., isolated, layered-registry). (Monotonic: restricted by layer rules)layer (Integer): The hierarchical dependency level of the layer. (Monotonic: increasing-only, overridden per layer)provides (List): The architectural capabilities the layer introduces. (Monotonic: unrestricted additions)requires (List): The foundational layers necessary to operate. (Monotonic: unrestricted)extends (List): The layers from which conceptual guarantees are inherited. (Monotonic: unrestricted)conflicts_with (List): Explicit declarations of architectural incompatibilities. (Monotonic: unrestricted expansions)determinism.certification_level (Integer): 0, 1, or 2 denoting simulation correctness. (Monotonic: increasing-only, forbidden to downgrade across layers)determinism.fixed_timestep_required (Boolean): Whether the accumulator loop is mandated. (Monotonic: increasing-only, forbidden to override from true to false)headless_safe (Boolean): Whether the codebase logic can execute without DOM/Renderers. (Monotonic: increasing-only, forbidden to override from true to false)multiplayer_support (Boolean): Whether the logic is safe for network synchronization. (Monotonic: strictly tied to certification level 2)When an AI Agent resolves the capabilities of multiple requested internal layers, the semantic contract operates as follows:
requires → Hard dependency: The agent must verify the specified layer is applied. It cannot apply the current layer without it.extends → Semantic extension: Inherits the conceptual and behavioral guarantees of the specified layer without redefining them.provides → Additive capability only: The layer grants new operational scope, but does not mutate or weaken the guarantees of lower layers.conflicts_with → Hard fail: If the agent detects an applied layer or user intent matching this list, it must immediately abort.compatibility_mode → Defines the parsing expectation. Registry modes dictate global policies, whereas isolated modes dictate self-contained validations.Important Registry Rules:
enforcement_level declared in the central registry is the absolute minimum allowed level for the entire project.development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.
development
End-to-end Parallels smoke, upgrade, and rerun workflow for OpenClaw across macOS, Windows, and Linux guests. Use when Codex needs to run, rerun, debug, or interpret VM-based install, onboarding, gateway smoke tests, latest-release-to-main upgrade checks, fresh snapshot retests, or optional Discord roundtrip verification under Parallels.