Open Design Game UI Takeover
Port only what was approved. A standalone is authoritative by component and axis, not by omission.
Craft-fidelity gate: the integrated runtime result must pass the 7-point game-feel checklist in
open-design-game-ui-concept/references/darkbone-visual-language.md at every viewport — porting an approved
gorgeous standalone into a flattened web-feel implementation (lost engraving/materials/breathing motion) is a
fidelity regression even when the layout matches; compare rendered-vs-rendered against the standalone AND
against the checklist. Fidelity scoring runs on codex exec -m gpt-5.6-sol -c model_reasoning_effort=high;
for motion-bearing components compare driven videos/keyframes, never stills alone.
Takeover standard = claude-design-standalone-takeover (owner benchmark)
For VFX / skill / RIG / enemy / boss / summon artifacts, the takeover flow IS the battle-tested
claude-design-standalone-takeover skill — follow it in full: completeness audit FIRST with
refuse-to-port on missing key contracts (palette, integration map, source entrypoints, density/fanout,
budget mapping, texture-memory ownership, behavior contract), surface classification, deep source reading
(painters/timelines/anchors/pivots/tuning — never port from screenshots), the required
takeover-analysis.md sections, the loading/bundle + localization + level-up card copy hard rules, R2
raw-source archive (the learn loop) with Phase-2 Studio onboarding and the ±5% Phaser fidelity gate before
gameplay wiring, mobile #game video verification for live content, real playtest/perf scenarios, and the
full default decision-rules table. Do not re-derive a thinner flow here.
Open Design-specific substitutions when applying that standard:
- Artifact intake: instead of a returned zip, bind the OD project's immutable revision — record
artifactBinding(projectId, revisionId, artifact SHA-256, preview-manifest SHA-256, generation-evidence SHA-256 forgpt-5.6-sol / ultra). Copy the artifact bytes into.handoff/<ts>-<feature>/incoming/unchanged and archive to R2 as raw/source exactly like a Claude Design return. - Return-to-designer: a supplemental handoff becomes a side-chat fix run in the same OD project
(
od chat new --seed-from+ run; see open-design-control.md) with the missing-contract list as the brief; re-bind fresh generation evidence after every fix run. - Fidelity/review scoring:
codex exec -m gpt-5.6-sol -c model_reasoning_effort=high; motion-bearing comparisons use driven videos with per-candidate parity, never stills alone. - Interactive labs expose
window.DARKBONE_VFX_LAB— drive it for beat/density/floor evidence instead of hand-clicking preview controls.
UI surfaces keep the preservation/authority/evidence machinery below on top of that standard.
Read docs/hard-rules/ui-adaptation-upgrade-only-contract.md, the handoff's
preservation-contract.json, and authority-and-proof.md before editing
runtime source.
Workflow
-
Validate the preservation contract with
open-design-game-ui-handoff. -
Render the standalone independently. Archive the exact artifact plus its successful preview manifest. Record
artifactBindingwith project, immutable revision, artifact SHA-256, preview-manifest SHA-256, preservation-contract SHA-256, and the validatedgpt-5.6-sol / ultrageneration-evidence SHA-256. Reject a filtered/mutable preview or generation evidence from another model, reasoning tier, run, revision, or artifact. Inventory source, states, controls, motion, responsive branches, and placeholders. If the immutable preview service later becomes unavailable or its successful full manifest did not capture every comparison-plan Cartesian row, runcapture_open_design_preview.mjs --scenario-set=contract-cartesianwith--archive-artifactand--source-preview-manifest. This creates a separately hashed archival replay manifest from the exact artifact bytes. The capture subtracts every semantic tuple already present in the immutable preview, keyed by(surface, locale, viewport, state), and records only missing rows. It supplements the original revision proof; it never replaces or rewrites the original preview manifest or generation evidence. -
Write
takeover-analysis.md. For every component, copychangeScopeplus the six-axis authority matrix and identify the exact standalone implementation to port. CopystandaloneMotionPolicy,runtimeMotionImplementation, andruntimeOwnerAnchorswithout drift. Treat every axis outsidechangeScopeas frozen. When one approved artifact covers several surfaces but this PR stages only some of them, declare stricttakeoverScopeintakeover-evidence.json. It must list the in-scope surface ids and the exact remaining contract complement with policyfrozen-runtime-no-change. The artifact, full preview manifest, generation evidence, and complete preservation contract remain bound; scope only limits which surface matrices this takeover is authorized to emit. OmittingtakeoverScopekeeps full-contract validation. -
Classify every standalone omission as
unspecified-preserve-runtime. Never infer deletion. -
Build the runtime diff one component at a time:
- port Open Design-owned layout or visual axes;
- move runtime-owned identity, animation, interaction, copy, and data paths intact;
- retain reduced-motion branches, timers, event cleanup, state transitions, and input semantics;
- use existing tokens and real game data.
-
Capture the integrated runtime at every component, viewport, locale, state, and animation beat declared by each surface's
comparisonPlan. Preserved components remain in the matrix; this is not one representative row. -
Write
takeover-evidence.jsonwith current-vs-standalone-vs-integrated stills, three-way videos, three-way keyframes, per-dimension verdicts, and any explicitly accepted differences. Every component on a motion-critical surface needs its own motion matrix row, including components whose treatment ispreserve. Add oneruntimeContinuityrow for every changed component, listing the exact frozen axes, whether their implementation wasunchangedormoved-intact, and the retained runtime owner anchors. Every standalone still must name the scenario from the bound preview manifest. The validator rejects same-path or same-hash current/standalone/integrated proof, plus evidence reused across a different viewport, locale, state, motion state, or animation beat. WebP, WebM, and MP4 evidence must have valid media signatures; a renamed text fixture is invalid. -
Validate the evidence before owner review:
node .agents/skills/open-design-game-ui-takeover/scripts/validate_takeover_evidence.mjs \ --evidence=.handoff/<timestamp>-<feature>/takeover-evidence.json --phase=review -
Generate the Chinese screenshot/video review HTML. Owner approval is required before merge. The review-phase validator returns
reviewEvidenceSha256; copy it into the JSON approval receipt. Approval phase binds that digest to the exact artifact, revision, preview manifest, preservation contract, comparison files, verdicts, videos, keyframes, andtakeoverScope. A free-standingapprovedstring or unrelated/stale feedback file is invalid. -
Run repository UI, localization, geometry, input, build, and independent PR review gates.
Static Placeholder Rule
When Open Design shows a static character portrait, icon, level emblem, mask, talent node, Fusion result, or
Victory result where runtime already animates, treat the standalone element as a layout/material reference only.
Keep the live runtime implementation unless the authority matrix explicitly assigns motion to Open Design and
the replacement passes same-beat video comparison.
This is a scope rule, not a fidelity guess. A layout-only commission may move or resize a dynamic component, but it cannot authorize a new painter, timeline, timing curve, lifecycle, input behavior, or reduced-motion branch.
For a layout-only Home task, preserve the animated character rig/rotation, ritual floor, floating mask sigils,
level emblem, talent emblem, character-switch entrance, and circular animated battleSigilSVG() / .sortie
deploy medallion. A rectangular standalone CTA is a placement proxy, not permission to replace that medallion.
For Talent, preserve the Wedjat eyes, colored pupils, legacy trunk, flowing links, breathing states, and
investment reveal. For Fusion and Victory, preserve or improve the complete reveal choreography, not only the
settled frame.
Blocking Conditions
- any authority cell is absent or differs from the approved preservation contract;
- takeover
changeScopediffers from the approved preservation contract; - runtime continuity proof is missing, broadens scope, or fails to retain the approved runtime owner anchors;
- runtime-owned source paths were deleted or reimplemented without necessity;
- a current animation became static, shorter in meaning, visually weaker, or absent;
- the integrated UI is better at one viewport but loses a quality dimension at another;
- current and integrated evidence is not aligned by viewport/state/beat;
- artifact, preview manifest, preservation contract,
gpt-5.6-sol / ultrageneration evidence, or owner approval is not hash/revision-bound; - an archival replay is used without exact artifact bytes, the original successful immutable preview manifest, or an approval receipt that binds both manifest hashes;
- the full component x viewport x locale x state matrix is incomplete, including preserved components;
- a staged takeover omits any out-of-scope contract surface, uses a policy other than
frozen-runtime-no-change, or emits authority/continuity/rendered evidence outsidetakeoverScope; - current/standalone/integrated evidence reuses a path or content hash within a row or across different proof contexts;
- owner approval does not bind the validator-produced digest of the exact reviewed stills, videos, keyframes, and verdicts;
- any component on a motion-critical surface lacks current/standalone/integrated video and at least three current/standalone/integrated keyframes;
- any dimension verdict is
regressed, any unexplained omission remains, or owner approval is missing.
The standalone is never allowed to erase quality that it did not attempt to specify.