{
  "note": "Pre-development standards, ADR-027 and owner decisions 2026-10-05. Documentation contract only; engine acceptance remains future work. Accepted direction is distinct from proposed tuning, including owner-suggested reuse targets.",
  "status": "documented_not_implemented",
  "guide": "docs/process/GAME_DEV_GUIDE.md",
  "decision": "ADR-027",
  "ownerDirection": {
    "mannequinBeforeSkillAnimation": true,
    "multiAngleSelfReviewBeforeOwnerReview": true,
    "movementCancelsAttackPhases": [
      "windup",
      "active",
      "recovery"
    ],
    "includesSignaturesAndFinishers": true,
    "superarmourDoesNotBlockOwnMovementCancel": true,
    "richReadableVfxEverySkill": true,
    "completeEnvironmentDirection": true,
    "movementRequiresMana": true,
    "perSkillLocomotion": true,
    "comboResumesAfterMovement": true,
    "windupRefundPolicy": true,
    "optionalCloseViewLockOn": true,
    "enemyEngagementCoordinator": true,
    "optionalKoComboDisplayInFirstSlice": true,
    "lowEndHardwareBaseline": true,
    "specialBossMusicAllowed": true,
    "silkRollBlueClassification": true,
    "silkRollLegacyIconRevision": "green accepted illustration must be revised to blue during asset production; preserve originals"
  },
  "input": {
    "discretePriority": [
      "movement_skill",
      "explicit_action",
      "smart_chain_or_basic"
    ],
    "locomotion": "concurrently sampled, applied according to the current skill policy",
    "movementEligibility": [
      "alive",
      "off_cooldown",
      "sufficient_resources",
      "hard_control_allows",
      "destination_valid",
      "movement_not_already_in_progress"
    ],
    "invalidMovement": "do not cancel current action; give feedback; do not buffer a later movement",
    "validMovement": "cancel own attack immediately; clear older offensive buffer; do not wait for animation exit or server round trip",
    "resolvedHits": "remain authoritative; sequence numbers do not permit retroactive cancellation",
    "futureCastOwnedHits": "stop after accepted cancel; includes melee contacts and channel ticks",
    "releasedIndependentEntities": "continue their own server-defined lifetime; never duplicate on cancel or replay",
    "locomotionPolicies": [
      "free",
      "slowed",
      "committed",
      "skill_travel"
    ],
    "perSkillRequiredBeforeImplementation": [
      "locomotion_policy",
      "steering_window",
      "speed_curve",
      "cancel_windows",
      "damage_entity_ownership",
      "rationale",
      "mana_cost",
      "cooldown_s",
      "travel_duration_s",
      "hard_control_exceptions"
    ],
    "proposedTuning": {
      "proposed": true,
      "note": "Owner accepted the combo/refund direction and these starting memory/refund values; measure before final balance. Locomotion fractions and response/soak targets are project proposals, not AAA standards. Response is sampled input to presentation, not hardware-to-display latency.",
      "responsePresentationUpdatesMax": 1,
      "actionBufferMs": 150,
      "windupAttackCooldownRefundFraction": 0.5,
      "comboMemoryAfterMovementMs": 1000,
      "chargeMoveSpeedFraction": 0.5,
      "channelAimMoveSpeedFraction": 0.4,
      "randomInputSoakMinutes": 60
    },
    "movementCost": "Every movement gem consumes a positive mana cost once on accepted activation; cost and reuse are server-owned. Exact per-gem costs must be authored and profiled before implementation; no zero-cost fallback.",
    "hardControl": {
      "stun": "blocks movement",
      "sleep": "blocks movement",
      "knockdown": "blocks movement",
      "root": "blocks displacement unless this gem explicitly declares a root escape; blue color alone is not an escape",
      "superarmour": "does not block own movement cancel"
    },
    "reuse": "Cooldown starts at accepted activation. A fresh press is required; no recursive cancel of an in-progress movement, overlap, stored dodge, or duplicate mana charge. Readiness also requires previous travel to end.",
    "comboAfterMovement": "Resume the next eligible slot inside the memory window; otherwise restart. Never replay interrupted contacts or keep an older offensive queue. Requires fresh action or deliberate held-chain input after movement ends.",
    "attackRefund": "Before commit: no attack mana spent, partial attack cooldown refund. After commit: no attack refund; resolved outcomes stand. Movement pays its full own mana/cooldown in either case.",
    "movementReuseTargets": {
      "proposed": true,
      "note": "Owner suggested jump about 1 s and dash about 0.3 s. Apply to Cairn Vault and Reed Rush as starting reuse delays, not startup delays or a blanket rule for all gems. Mana, travel, range and sustained traversal must be balanced. Other gems require individual tuning; Silk Roll immunity must not become near-continuous.",
      "cooldownSByGem": {
        "cairn_vault": 1.0,
        "reed_rush": 0.3
      },
      "otherGemCooldowns": "author per gem before implementation; not inferred from dash target",
      "manaCosts": "positive per-gem values pending authored balance data"
    }
  },
  "animation": {
    "rigContract": "docs/production/ANIMATION.md#rig-contract",
    "require": [
      "versioned_rig",
      "rest_pose",
      "bind_matrices",
      "joint_axes",
      "socket_orientation",
      "humanoid_avatar_mapping",
      "planted_intervals",
      "transition_review"
    ],
    "views": [
      "front",
      "back",
      "left",
      "right",
      "front_left",
      "front_right",
      "back_left",
      "back_right"
    ],
    "poses": [
      "preparation",
      "contact",
      "follow_through",
      "recovery_end"
    ],
    "gameplayCameras": [
      "tactical",
      "close"
    ],
    "reviewItems": [
      "feet",
      "knees",
      "hips",
      "shoulders",
      "elbows",
      "hands",
      "head",
      "clipping",
      "unwanted_action"
    ],
    "reviewResults": [
      "pass",
      "fail",
      "not_applicable_with_reason"
    ],
    "jointLimits": "calibrated rig-specific swing/twist and reference poses; no generic clinical ROM table",
    "proposedTuning": {
      "proposed": true,
      "note": "Capture sampling and ground penetration are new starting values. Contact, foot-slide and grip tolerances repeat the existing animation planning contract; slide is measured only during marked plants.",
      "sideStripFrameStride": 3,
      "contactToleranceAuthoringFrames": 1,
      "plantedFootSlideMaxCmExclusive": 2,
      "handWeaponDriftMaxCmExclusive": 1,
      "groundPenetrationMaxCm": 1
    }
  },
  "vfx": {
    "standard": "semantic roles and measured cost, not minimum emitter or particle counts",
    "rolesBySkillType": {
      "basic_melee": [
        "motion",
        "material_contact",
        "end"
      ],
      "chain_attack": [
        "anticipation",
        "release_motion",
        "impact",
        "dissipation"
      ],
      "projectile": [
        "cast_cue",
        "directional_body",
        "impact",
        "end"
      ],
      "aoe_control": [
        "footprint",
        "cue_release",
        "impact",
        "expiry",
        "status_if_applied"
      ],
      "movement": [
        "immediate_startup_cue",
        "travel_direction",
        "landing_end"
      ],
      "buff_aura_heal": [
        "acknowledgment",
        "status",
        "expiry"
      ],
      "signature_finisher": [
        "applicable_base_roles",
        "distinct_anticipation",
        "distinct_contact",
        "distinct_aftermath"
      ]
    },
    "budgets": "docs/production/VFX.md; frame-wide Performance and NETCODE_1000 caps also apply; profile on reference devices",
    "telegraphsNeverCulled": true,
    "requiredReview": [
      "low_high",
      "both_cameras",
      "bright_dark_terrain",
      "crowd_plus_boss_telegraph",
      "grayscale",
      "reduced_flashes",
      "colorblind_palettes",
      "cancel_cleanup",
      "pool_return"
    ]
  },
  "environment": {
    "pipeline": "docs/production/ENVIRONMENT.md",
    "determinismInputs": [
      "world_data",
      "seed",
      "generator_version",
      "authored_overrides"
    ],
    "areaBrief": [
      "biome_story",
      "ground_palette",
      "hero_landmark",
      "roads_waypoints",
      "sightlines",
      "encounter_spaces",
      "escape_routes",
      "verticality",
      "lighting_fog",
      "material_sounds",
      "vegetation_wind",
      "wildlife",
      "ambient_accents",
      "streaming_boundaries",
      "asset_budgets",
      "capture_plan"
    ],
    "requiredEvidence": [
      "determinism_hashes",
      "road_spawn_bot_walks",
      "movement_gem_paths",
      "camera_obstruction_checks",
      "story_views",
      "flythrough",
      "streaming_metrics"
    ],
    "proposedTuning": {
      "proposed": true,
      "note": "Camp slope is a starting heuristic, not a global walkability limit; validate per encounter and movement gem.",
      "campSlopeMaxDeg": 15
    }
  },
  "controlTestIds": [
    "C1",
    "C2",
    "C3",
    "C4",
    "C5",
    "C6",
    "C7",
    "C8",
    "C9",
    "C10",
    "C11",
    "C12",
    "C13",
    "C14",
    "C15",
    "C16",
    "C17",
    "C18"
  ],
  "requiredInputDevices": [
    "keyboard_mouse",
    "gamepad",
    "touch"
  ],
  "gates": [
    "G0_contract_readiness",
    "G1_movement_foundation",
    "G2_one_polished_skill",
    "G3_battle_slice",
    "G4_scale_content"
  ],
  "camera": {
    "views": [
      "close",
      "tactical"
    ],
    "closeReference": "Dynasty Warriors / Metal Gear third person",
    "tacticalReference": "Silkroad / Path of Exile zoomed-out overview",
    "toggle": {
      "desktop": "V",
      "gamepad": "R3",
      "touch": "camera view control"
    },
    "r3OnlyTogglesView": true,
    "optionalCloseLockOn": "opt-in boss/elite framing; release/switch supported; separate remappable command, never R3; no movement or damage advantage",
    "rules": [
      "same authoritative outcomes",
      "same telegraphs and HUD",
      "preserve target/held input on switch",
      "camera collision and occluder fade in both views"
    ]
  },
  "battleSlice": {
    "accepted": [
      "combat_timeline_replays",
      "locomotion_strafe_pivot_blends",
      "camera_collision_optional_lock_on_offscreen_cues",
      "server_owned_role_difficulty_engagement_tokens",
      "enemy_roles_boss_punish_windows",
      "accessibility_training_arena",
      "combo_memory",
      "crowd_reaction_lod",
      "telemetry_structured_playtests",
      "optional_cosmetic_ko_combo_display"
    ],
    "engagementCoordinator": "Active crowds reposition, flank, telegraph or support. Tune simultaneous attackers by role, difficulty, encounter and visibility, with fairness in both views. No fixed universal cap; budgets and token release rules before implementation.",
    "display": "Optional local encounter KO/combo feedback; no extra damage, rewards, global scoreboard or gameplay timing changes.",
    "deferred": [
      "perfect_dodge_rewards",
      "hit_confirm_cancels",
      "gameplay_hazards",
      "destruction_breakables"
    ]
  },
  "hardware": "reference-devices.json; physical Low-tier validation required before declaring support",
  "audio": {
    "musicAllowed": [
      "town",
      "gm_room",
      "engaged_named_boss_encounter"
    ],
    "ordinaryOutdoorAreas": "quiet environment beds, landmark emitters and sparse accents; no ambient zone music",
    "bossPlayback": "encounter state, not individual hit events; start/end/reset/leash/leave/death/reconnect tested; warnings remain audible",
    "assetStatus": "new boss theme briefs only; no audio generation or listening approval implied"
  }
}
