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 for gpt-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
artifactBinding with project, immutable revision, artifact SHA-256, preview-manifest SHA-256,
preservation-contract SHA-256, and the validated gpt-5.6-sol / ultra generation-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, run capture_open_design_preview.mjs --scenario-set=contract-cartesian
with --archive-artifact and --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, copy changeScope plus the six-axis authority matrix and
identify the exact standalone implementation to port. Copy standaloneMotionPolicy,
runtimeMotionImplementation, and runtimeOwnerAnchors without drift. Treat every axis outside
changeScope as frozen.
When one approved artifact covers several surfaces but this PR stages only some of them, declare strict
takeoverScope in takeover-evidence.json. It must list the in-scope surface ids and the exact remaining
contract complement with policy frozen-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. Omitting takeoverScope keeps 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.json with 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 is preserve.
Add one runtimeContinuity row
for every changed component, listing the exact frozen axes, whether their implementation was unchanged or
moved-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, and takeoverScope. A free-standing approved string 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
changeScope differs 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 / ultra generation 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 outside takeoverScope;
- 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.
1---2name: open-design-game-ui-takeover3description: Take over an approved Open Design artifact (game UI, VFX, skill, RIG, enemy/boss) into Darkbone Archer without degrading the runtime. Use whenever Codex must analyze, port, integrate, or review an Open Design standalone; apply a responsive Home, Map Select, Talent, Mask, Fusion, Victory, or settlement design; port an Open Design VFX/RIG lab into Phaser; preserve existing animations omitted by a mockup; or prove current-runtime vs standalone vs integrated-runtime fidelity before merge.4---56# Open Design Game UI Takeover78Port only what was approved. A standalone is authoritative by component and axis, not by omission.910**Craft-fidelity gate**: the integrated runtime result must pass the 7-point game-feel checklist in11`open-design-game-ui-concept/references/darkbone-visual-language.md` at every viewport — porting an approved12gorgeous standalone into a flattened web-feel implementation (lost engraving/materials/breathing motion) is a13fidelity regression even when the layout matches; compare rendered-vs-rendered against the standalone AND14against the checklist. Fidelity scoring runs on `codex exec -m gpt-5.6-sol -c model_reasoning_effort=high`;15for motion-bearing components compare driven videos/keyframes, never stills alone.1617## Takeover standard = `claude-design-standalone-takeover` (owner benchmark)1819For **VFX / skill / RIG / enemy / boss / summon artifacts**, the takeover flow IS the battle-tested20`claude-design-standalone-takeover` skill — follow it in full: completeness audit FIRST with21refuse-to-port on missing key contracts (palette, integration map, source entrypoints, density/fanout,22budget mapping, texture-memory ownership, behavior contract), surface classification, deep source reading23(painters/timelines/anchors/pivots/tuning — never port from screenshots), the required24`takeover-analysis.md` sections, the loading/bundle + localization + level-up card copy hard rules, R225raw-source archive (the learn loop) with Phase-2 Studio onboarding and the ±5% Phaser fidelity gate before26gameplay wiring, mobile `#game` video verification for live content, real playtest/perf scenarios, and the27full default decision-rules table. Do not re-derive a thinner flow here.2829Open Design-specific substitutions when applying that standard:3031- **Artifact intake**: instead of a returned zip, bind the OD project's immutable revision — record32 `artifactBinding` (projectId, revisionId, artifact SHA-256, preview-manifest SHA-256, generation-evidence33 SHA-256 for `gpt-5.6-sol / ultra`). Copy the artifact bytes into `.handoff/<ts>-<feature>/incoming/`34 unchanged and archive to R2 as raw/source exactly like a Claude Design return.35- **Return-to-designer**: a supplemental handoff becomes a **side-chat fix run in the same OD project**36 (`od chat new --seed-from` + run; see open-design-control.md) with the missing-contract list as the brief;37 re-bind fresh generation evidence after every fix run.38- **Fidelity/review scoring**: `codex exec -m gpt-5.6-sol -c model_reasoning_effort=high`; motion-bearing39 comparisons use driven videos with per-candidate parity, never stills alone.40- Interactive labs expose `window.DARKBONE_VFX_LAB` — drive it for beat/density/floor evidence instead of41 hand-clicking preview controls.4243UI surfaces keep the preservation/authority/evidence machinery below on top of that standard.4445Read `docs/hard-rules/ui-adaptation-upgrade-only-contract.md`, the handoff's46`preservation-contract.json`, and [authority-and-proof.md](references/authority-and-proof.md) before editing47runtime source.4849## Workflow50511. Validate the preservation contract with `open-design-game-ui-handoff`.522. Render the standalone independently. Archive the exact artifact plus its successful preview manifest. Record53 `artifactBinding` with project, immutable revision, artifact SHA-256, preview-manifest SHA-256,54 preservation-contract SHA-256, and the validated `gpt-5.6-sol / ultra` generation-evidence SHA-256. Reject a55 filtered/mutable preview or generation evidence from another model, reasoning tier, run, revision, or artifact.56 Inventory source, states, controls, motion, responsive branches, and placeholders.57 If the immutable preview service later becomes unavailable or its successful full manifest did not capture58 every comparison-plan Cartesian row, run `capture_open_design_preview.mjs --scenario-set=contract-cartesian`59 with `--archive-artifact` and `--source-preview-manifest`. This creates a separately hashed archival replay60 manifest from the exact artifact bytes. The capture subtracts every semantic tuple already present in the61 immutable preview, keyed by `(surface, locale, viewport, state)`, and records only missing rows. It supplements62 the original revision proof; it never replaces or rewrites the original preview manifest or generation evidence.633. Write `takeover-analysis.md`. For every component, copy `changeScope` plus the six-axis authority matrix and64 identify the exact standalone implementation to port. Copy `standaloneMotionPolicy`,65 `runtimeMotionImplementation`, and `runtimeOwnerAnchors` without drift. Treat every axis outside66 `changeScope` as frozen.67 When one approved artifact covers several surfaces but this PR stages only some of them, declare strict68 `takeoverScope` in `takeover-evidence.json`. It must list the in-scope surface ids and the exact remaining69 contract complement with policy `frozen-runtime-no-change`. The artifact, full preview manifest, generation70 evidence, and complete preservation contract remain bound; scope only limits which surface matrices this71 takeover is authorized to emit. Omitting `takeoverScope` keeps full-contract validation.724. Classify every standalone omission as `unspecified-preserve-runtime`. Never infer deletion.735. Build the runtime diff one component at a time:74 - port Open Design-owned layout or visual axes;75 - move runtime-owned identity, animation, interaction, copy, and data paths intact;76 - retain reduced-motion branches, timers, event cleanup, state transitions, and input semantics;77 - use existing tokens and real game data.786. Capture the integrated runtime at every component, viewport, locale, state, and animation beat declared by79 each surface's `comparisonPlan`. Preserved components remain in the matrix; this is not one representative row.807. Write `takeover-evidence.json` with current-vs-standalone-vs-integrated stills, three-way videos, three-way81 keyframes, per-dimension verdicts, and any explicitly accepted differences. Every component on a82 motion-critical surface needs its own motion matrix row, including components whose treatment is `preserve`.83 Add one `runtimeContinuity` row84 for every changed component, listing the exact frozen axes, whether their implementation was `unchanged` or85 `moved-intact`, and the retained runtime owner anchors. Every standalone still must name the scenario from86 the bound preview manifest. The validator rejects same-path or same-hash current/standalone/integrated proof,87 plus evidence reused across a different viewport, locale, state, motion state, or animation beat. WebP,88 WebM, and MP4 evidence must have valid media signatures; a renamed text fixture is invalid.898. Validate the evidence before owner review:9091 ```bash92 node .agents/skills/open-design-game-ui-takeover/scripts/validate_takeover_evidence.mjs \93 --evidence=.handoff/<timestamp>-<feature>/takeover-evidence.json --phase=review94 ```95969. Generate the Chinese screenshot/video review HTML. Owner approval is required before merge. The review-phase97 validator returns `reviewEvidenceSha256`; copy it into the JSON approval receipt. Approval phase binds that98 digest to the exact artifact, revision, preview manifest, preservation contract, comparison files, verdicts,99 videos, keyframes, and `takeoverScope`. A free-standing `approved` string or unrelated/stale feedback file is100 invalid.10110. Run repository UI, localization, geometry, input, build, and independent PR review gates.102103## Static Placeholder Rule104105When Open Design shows a static character portrait, icon, level emblem, mask, talent node, Fusion result, or106Victory result where runtime already animates, treat the standalone element as a layout/material reference only.107Keep the live runtime implementation unless the authority matrix explicitly assigns `motion` to Open Design and108the replacement passes same-beat video comparison.109110This is a scope rule, not a fidelity guess. A layout-only commission may move or resize a dynamic component, but111it cannot authorize a new painter, timeline, timing curve, lifecycle, input behavior, or reduced-motion branch.112113For a layout-only Home task, preserve the animated character rig/rotation, ritual floor, floating mask sigils,114level emblem, talent emblem, character-switch entrance, and circular animated `battleSigilSVG()` / `.sortie`115deploy medallion. A rectangular standalone CTA is a placement proxy, not permission to replace that medallion.116For Talent, preserve the Wedjat eyes, colored pupils, legacy trunk, flowing links, breathing states, and117investment reveal. For Fusion and Victory, preserve or improve the complete reveal choreography, not only the118settled frame.119120## Blocking Conditions121122- any authority cell is absent or differs from the approved preservation contract;123- takeover `changeScope` differs from the approved preservation contract;124- runtime continuity proof is missing, broadens scope, or fails to retain the approved runtime owner anchors;125- runtime-owned source paths were deleted or reimplemented without necessity;126- a current animation became static, shorter in meaning, visually weaker, or absent;127- the integrated UI is better at one viewport but loses a quality dimension at another;128- current and integrated evidence is not aligned by viewport/state/beat;129- artifact, preview manifest, preservation contract, `gpt-5.6-sol / ultra` generation evidence, or owner130 approval is not hash/revision-bound;131- an archival replay is used without exact artifact bytes, the original successful immutable preview manifest,132 or an approval receipt that binds both manifest hashes;133- the full component x viewport x locale x state matrix is incomplete, including preserved components;134- a staged takeover omits any out-of-scope contract surface, uses a policy other than135 `frozen-runtime-no-change`, or emits authority/continuity/rendered evidence outside `takeoverScope`;136- current/standalone/integrated evidence reuses a path or content hash within a row or across different proof contexts;137- owner approval does not bind the validator-produced digest of the exact reviewed stills, videos, keyframes, and verdicts;138- any component on a motion-critical surface lacks current/standalone/integrated video and at least three139 current/standalone/integrated keyframes;140- any dimension verdict is `regressed`, any unexplained omission remains, or owner approval is missing.141142The standalone is never allowed to erase quality that it did not attempt to specify.