Files
animation/docs/animations/AUDIT.md
T
jeremy e08ad2f3e9 docs(animations): naming conventions, wiring audit, unwired catalogue + claude-desktop context brief
NAMING.md/AUDIT.md/UNWIRED.md are the conventions-doc pivot after the
mass-rename was killed; committing so the bridge repo tree is clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 16:07:41 -07:00

14 KiB
Raw Blame History

Animation Audit — 2026-07-24

Working audit for the animation naming-system project. Captures the current-state inventory, what the game actually implements, what Ozan removed during his recent animation work, and the open scope decisions. This is the evidence base for the plan at ~/.claude/plans/i-want-to-audit-enchanted-squid.md.

Status: audit findings recorded. Decision (Ozan, 2026-07-24): do NOT implement a mass-renaming system. Pivot to document the existing conventions + catalogue provenance/ status; keep vendor names, name new files to conform. See docs/animations/NAMING.md for the conventions. Nothing renamed. The rename-scope questions in §6 are now moot (resolved: no rename); the registry catalogue in §6 still proceeds.


1. Goal

Audit and revise the animation naming system across the two repos. Five deliverables:

  1. Create a naming system for all animations.
  2. Figure out which animations Ozan removed ("Kevin" clips) during his last animation work, and document the full list of animations the game needs.
  3. Rename current animations per the new naming system.
  4. Document the system.
  5. The animation list must store, per clip: where it came from, when it was created, how it was created, and whether it is approved / work-in-progress / not-started.

Decisions locked (Jeremy, 2026-07-24)

  • Rename every animation in the game per the new system; the registry stores each clip's old/original name. (Scope of "in the game" narrowed by the §3 finding — see the open question in §6.)
  • Registry is machine-readable YAML + a generated Markdown view.
  • Coverage = all avatar skeletal clips (locomotion, tools/work, combat, swim, dance, boat, emotes/social). Animals out of scope.
  • Naming docs + registry live in the animation repo under docs/animations/, with pointers from ariki-game docs.

Registry fields required

canonical name · old name(s) · category · source/origin · creation date · creation method · status (approved | wip | not_started) · notes.


2. Where the packs live

All game-loaded animation packs are under assets/quaternius/ in ariki-game (/Users/jeremykashkett/Tinqs/local.repo/ariki-game).

Group Path Files Clips What it is
UAL vendor assets/quaternius/anim/ UAL1.glb, UAL2.glb (+ _RM twins, Mannequin_F) 254 unique (508 w/ RM) Purchased Quaternius packs — the game's loco + work source of truth
Kevin assets/quaternius/kevin/ 12 GLBs (kevin_{male,female}_{combat,idles,misc,movement,social,work}.glb) 1,307 (male/female mirror → ~650 unique) Kevin Iglesias retargets; game uses "gap-only"
msrig (stale) assets/quaternius/msrig/ 18 GLBs (Kevin packs + UAL_Standard + a few Mixamo) 1,399 Superseded MixamoSkin retargets — flagged stale in the 2026-07-23 audit
Mixamo assets/quaternius/mixamo/ 4 GLBs (run_to_dive, walking, northern_soul, ual_loco) 11 One-off Mixamo clips
dancegen assets/quaternius/dancegen/ 10 GLBs (war/fertility/taming + _pp, nd_01, canoedismount1, hakadance1_static) 11 Our authored iClone-mocap dances + boat one-off
anim-combined assets/quaternius/anim-combined/ Run_Punch.glb 1 Baked composite (run legs + punch upper body)

Animation-repo side (/Users/jeremykashkett/Tinqs/local.repo/animation) holds the pipeline staging/source, not what the game loads:

  • exchange/ — incoming FBX, converted GLB, pingpong loops, outgoing props
  • archive/ — retired takes (never deleted, per policy)
  • .agents/wiki/dances/REGISTRY.md — existing partial naming system (dances + boat actions)
  • tools/ — all Blender-based (cc_retarget.py, rename_clip.py, loop_qc.py, pingpong_bake.py, …)

Dance JSONs that tell the game which clip to play: ariki-game/assets/dances/*.json.


3. Full clip census (2026-07-24)

Read directly from each GLB's glTF JSON chunk (pure-stdlib parser, no Blender).

Pack Files Clips
anim/ (UAL1 120, UAL1_RM 120, UAL2 134, UAL2_RM 134, Mannequin_F 0) 5 508
kevin/ 12 1,307
msrig/ 18 1,399
mixamo/ (ual_loco 8, + 3 one-offs) 4 11
dancegen/ 10 11
anim-combined/ 1 1
GRAND TOTAL 50 3,237

Per-file Kevin breakdown (male mirrors female): combat 286, movement 157, work 72, social 68, misc 55, idles 1516. Most Kevin clips are irrelevant to this game — Rifle_Aim*, ThrowGrenade*, ThrowBoomerang*, Bow*, Casting*/magic.


4. What the game actually implements (~90100 clips)

Traced through PlayerController.SetupAnimations() (ariki-game/src/Viewer/PlayerController.cs:779) — the authoritative clip→game-key mapping — plus the dance system's ClipCatalog auto-discovery of dancegen/.

Only 9 pack files are loaded at all. Of ~3,237 clips on disk, ~90100 are wired.

Pack (loaded) Clips wired On disk What's used
anim/UAL1.glb ~41 120 idle/walk/jog/sprint 8-dir, crouch 8-dir, jumps, turns, drink/sit, sword, interact
anim/UAL2.glb ~30 134 chop/mine/fish/farm/carry/eat/sleep, 8-dir walk, shield set, running jump, 180 turns
kevin_*_movement.glb 10 157 full directional swim set (loaded after UAL to override stock swim)
kevin_*_combat.glb 3 286 ThrowWeapon01_R, ThrowSpear02_R, ThrowBall01_R
kevin_*_work.glb 1 72 skin (SkinningGround01_R_Loop)
kevin_*_social.glb 1 68 pray (Reverence01_Loop)
anim-combined/Run_Punch.glb 1 1 run_punch composite
mixamo/ (3 files) 3 11 walking, run_to_dive, northern_soul (→ dance_soul)
dancegen/ ~10 11 war/fertility/taming dances + _pp loops, nd_01 + _pp, canoe clips

Packs with ZERO clips implemented: all of msrig/ (1,399, superseded), kevin_*_idles and kevin_*_misc (0 wired), the _RM root-motion UAL twins (never loaded — game loads non-RM only), mixamo/ual_loco.glb.

Takeaway: ~97% of on-disk clips are unused vendor-library bulk buried inside purchased multi-clip GLBs. The implemented ~90 are what map cleanly to a naming system and are worth physically renaming; the rest are candidates you could pull from later.

Sample of implemented clip → game-key mapping (UAL, from SetupAnimations)

UAL1 clip → key: Idle_Loop→idle, Walk_Loop→walk, Jog_Fwd_Loop→run, Sprint_Loop→sprint, Dance_Loop→dance/dance2/dance3 (one source, 3 keys), Sword_Attack→weapon_attack, Fixing_Kneeling→hammer, Spell_Simple_Shoot→throw, GroundSit_Idle_Loop→sit, 8-dir jog/crouch, Turn90_L/R. UAL2 clip → key: TreeChopping_Loop→chop, Mining_Loop→mine, Fish_Cast_Idle_Loop→fish, Farm_Harvest→gathering, Farm_PlantSeed→farm, Consume→eat, IdleToLay→sleep, Walk_*_Loop→walk_* (8-dir), shield set, NinjaJump_*→running_jump_*.

Kevin gap clips (game-key = same or mapped): swim set Swim01_*→swim* / SwimIdle01→swim_idle, SkinningGround01_R_Loop→skin, Reverence01_Loop→pray, three throw clips kept as-is.


5. Kevin-removal forensics (what Ozan removed)

During Ozan's recent animation work (2026-07-22/23), two relevant removals in ariki-game:

5a. Loose Kevin + Synty FBXs deleted — commit f5ee3a7d0 (2026-07-22)

chore(anims): drop unused Unity/Synty FBXs and dead import-time retarget

Deleted animation FBXs (each with its .import sidecar):

  • Kevin (assets/animations/kevin/): Archer@CombatIdle01/02, Archer@Death01/02, Archer@Idle01/02, Archer@Run01, Archer@TakeDamage01, Throwing@BigAxe, Villager@Gathering01/02/03, Villager@Skinning0113 clips
  • Synty BasicMotions (assets/animations/basic-motions/): @Idle01, @Run01, @Sprint01, @Walk01 — 4 clips
  • Also dropped: Unity-format UAL/mannequin/base-character FBX exports (the Godot pipeline uses the Godot/GLB exports, so these were redundant format duplicates).

Important nuance: these were the loose per-clip FBX form of Kevin content. The Kevin category GLB packs (assets/quaternius/kevin/kevin_*_*.glb, 1,307 clips) survive and still contain equivalent content — e.g. the deleted Villager@Skinning01 corresponds to SkinningGround01_R_Loop still present in kevin_*_work.glb (and still wired as skin). So most of these are superseded, not truly lost. Each needs a clip-level cross-check in Phase 1 to classify truly gone vs still available in a pack / covered by a UAL clip (e.g. Villager@Gathering ↔ UAL2 Farm_Harvest; Archer combat ↔ kevin_*_combat.glb).

5b. UAL Standard packs removed — commit 2292174dc (2026-07-23)

feat(anims+character): canonicalize UAL packs under anim/, land QuatSkin body work + tool kit

Removed the older UAL Standard clip GLBs (UAL1_Standard.glb, UAL2_Standard.glb, etc.) in favor of UAL1 Pro (120 clips) + UAL2 Source (134 clips) under anim/. This is a supersession/upgrade, not a loss — the Pro/Source packs are complete supersets. (Stale UAL*_Standard.glb copies still linger inside msrig/.)

5c. Animation-repo archive

Retired dance takes are already tracked in .agents/wiki/dances/REGISTRY.md and physically in animation/archive/ (alohaOG, firedance1, hakaOG, hakadance2, haka_mocap) — never deleted.

Git authors for context: Ozan Bozkurt is by far the dominant author of animation commits; "Kevin" refers to the Kevin Iglesias vendor animation packs, not a team member.


6. Open scope decisions (BLOCKING — need Jeremy)

The §3/§4 findings changed the picture after the "rename everything" decision was made, so these need an explicit call before any renaming:

  1. Rename scope. Given ~90 clips are implemented and ~3,000+ are unused vendor bulk:

    • (A, recommended) Physically rename only the ~90 implemented clips + all our authored content; catalogue everything else in the registry with a canonical ID + old-name mapping but leave vendor names in the GLBs. Keeps the vendor re-download/upgrade path clean.
    • (B) Rename the whole functional set the game might ever wire (few hundred), leaving only clearly-irrelevant vendor clips (rifles, magic) untouched.
    • (C) Literally rename all 3,237 — max consistency, breaks vendor upgrade path, huge effort for near-zero value on unused clips.
  2. msrig/ (1,399 stale clips). Recommended: archive it (never delete), mark superseded in the registry, don't rename — but confirm with Ozan first since code still has msrig fallback paths (PlayerController.cs, test beds). Alternatives: catalogue-in-place, or rename-too.


7. Key technical constraints (for the rename phase)

  • One skeleton: Quaternius 65-bone UE-named rig. Renaming a clip name inside a GLB is metadata-only and safe for the rig. The risk is entirely in references.
  • Reference sites to migrate (ariki-game): PlayerController.SetupAnimations() (the clip→game-key arrays — #1 silent-failure spot), PlayerAnimGraphBuilder.cs, CharacterAnimDriver.Resolve() (already has alias fallback — useful during migration), ToolActionResolver.cs, ThrowActionCatalog.cs, AnimationClipProfile.cs + data/animation-clip-profile.json, ClipCatalog.cs (dance bed, discovers packs by basename), assets/dances/*.json, docs.
  • Multi-clip GLBs: rename_clip.py assumes one action per armature; UAL/Kevin packs have many. The batch rename tool must handle multi-action GLBs.
  • Godot sidecars: after any asset rename, regenerate .import via bash tools/game.sh import.
  • Vendor originals are archived unmodified in tinqs/ariki-assets; renames must be applied by a re-runnable rename-map script so a future pack update re-canonicalizes in one pass.
  • Existing gates to reuse: tools/rig_pose_gate.py (rest-pose delta vs UAL1 ref), ariki-game/tools/anim_qc.py (post-ingest seam/stutter), animation-repo tools/loop_qc.py (pre-commit loop gate), locomotion + dance test beds (launch only after asking Jeremy).
  • Repo etiquette: tinqs push / tinqs pull (raw git pull hangs on LFS), explicit-path staging, report commit hashes, archive-never-delete, clip numbers never reused.

8. Existing naming precedent (to generalize)

From animation/.agents/wiki/dances/REGISTRY.md (currently dances + boat only):

  • snake_case matching the game's item-id convention (e.g. war_dance_01); clip name baked in GLB is PascalCase (WarDance01).
  • Provisional stage: new takes get nd_## (never a content name), renamed to a dance code only when Jeremy adopts them for a ceremony.
  • Loop-pair rule: every adopted dance ships base + ping-pong _pp variant, must pass loop_qc.py.
  • Suffixes seen in use: _loop, _idle, _pp, directional (_fwd/_bwd/_l/_r), _rm.
  • Archive, never delete; numbers never reused.

Game-side keys already in use (lowercase snake_case): idle, walk, run, sprint, swim, swim_idle, chop, mine, fish, gathering, farm, skin, pray, crouch_*, turn90_l, etc. The new naming system should reconcile the canonical clip IDs with these existing game keys.


9. Next steps

  1. Resolve §6 scope decisions (blocking).
  2. Phase 0 — draft docs/animations/NAMING.md (naming spec) + Jeremy approval gate.
  3. Phase 1 — full clip inventory JSON + docs/animations/REMOVALS.md (clip-level removal cross-check).
  4. Phase 2 — docs/animations/registry.yaml + render/check tools.
  5. Phase 3 — staged, gated rename execution.
  6. Phase 4 — documentation + maintenance protocol.

Full plan: ~/.claude/plans/i-want-to-audit-enchanted-squid.md.