{
  "petCount": 50,
  "frameCount": 3547,
  "geometryPassed": true,
  "pets": [
    {
      "petId": "212th-airborne-trooper",
      "sha256": "6bbd6df22b7fb6ba10498f6c9486dc5991d4956223a5f19ef25a95ed12ed6631",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "6bbd6df22b7fb6ba10498f6c9486dc5991d4956223a5f19ef25a95ed12ed6631",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "67ba3398b189cbbf91be9f6006cb5c26a079cd05fb8cb2a25c421d5fd1442f02",
            "status": "needs-repair",
            "notes": "Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "9174346315bf32d5c5db0c73089e962ce3a64767840f9666314fdcf280b06fe8",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "9174346315bf32d5c5db0c73089e962ce3a64767840f9666314fdcf280b06fe8",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/212th-airborne-trooper/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "212th-clone-trooper",
      "sha256": "6a4835978cdcb603453f4cd5d9dcc6ddea4d460ee64a3e3a558dc9f38fa4e5f3",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "6a4835978cdcb603453f4cd5d9dcc6ddea4d460ee64a3e3a558dc9f38fa4e5f3",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "1d3a2e826c546d4375928e0e12f3cb8cd9c2325c778786ccf961654501a91704",
            "status": "needs-repair",
            "notes": "Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "836aec066764365034d79cffcf3939eb62ae444eaf137c5485c0187999a81195",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "836aec066764365034d79cffcf3939eb62ae444eaf137c5485c0187999a81195",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/212th-clone-trooper/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "501st-clone-trooper",
      "sha256": "f50f66315bd3029d76c0ca43f9bbe611e6d26630b5c5a5167f85ed9d5bcac47c",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "f50f66315bd3029d76c0ca43f9bbe611e6d26630b5c5a5167f85ed9d5bcac47c",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "bd5c246fca2846bc7301ddfd9f3ba7dc0ba124c0b34bed4fa1294296bdc31d8c",
            "status": "needs-repair",
            "notes": "Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "3bfdc4de5292eb816c8cfb04cdcec1a71ea21280bc92037a1a0136a533d759c7",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "3bfdc4de5292eb816c8cfb04cdcec1a71ea21280bc92037a1a0136a533d759c7",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/501st-clone-trooper/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "aang",
      "sha256": "c1392a5140500167c129c016cdde75a6b13990101ba0a1df9ca532d0a6bf8e81",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Working 4\u21925: area changes 1.38\u00d7"
      ],
      "visualReview": {
        "sha256": "c1392a5140500167c129c016cdde75a6b13990101ba0a1df9ca532d0a6bf8e81",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "c1392a5140500167c129c016cdde75a6b13990101ba0a1df9ca532d0a6bf8e81",
            "status": "needs-review",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Jump poses, particularly frames 1 and 5, use a much smaller character than idle. Preserve intentional gliding locomotion; do not impose a walking gait."
          },
          {
            "sha256": "807d82bf7ee18d7740c10878b523def41fcd84609933187828cbd31b2373a7be",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Only the listed rows are approved. Untouched states are not newly approved. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Jump poses, particularly frames 1 and 5, use a much smaller character than idle. Preserve intentional gliding locomotion; do not impose a walking gait."
          },
          {
            "sha256": "807d82bf7ee18d7740c10878b523def41fcd84609933187828cbd31b2373a7be",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Jump poses, particularly frames 1 and 5, use a much smaller character than idle. Preserve intentional gliding locomotion; do not impose a walking gait.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/aang/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2
              ],
              "report": "/qa/aang/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "agamemnon",
      "sha256": "33b868ab81353620e469fb8ea18dc84880ff61a0dc9c576f4a24ba7ce896aa4c",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Failed 4\u21925: area changes 1.45\u00d7"
      ],
      "visualReview": {
        "sha256": "33b868ab81353620e469fb8ea18dc84880ff61a0dc9c576f4a24ba7ce896aa4c",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "33b868ab81353620e469fb8ea18dc84880ff61a0dc9c576f4a24ba7ce896aa4c",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run volume varies around frames 3/7 versus 5/8. Failed frames 5\u20136 enlarge the head substantially. Rebuild these poses around a locked head/body model."
          },
          {
            "sha256": "87095e3b08a39251b5a52f48cea903337327960bb622945a0138fa832f745e0d",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed using locked character parts and fixed-length joints. Other states remain unchanged and still require separate sign-off. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run volume varies around frames 3/7 versus 5/8. Failed frames 5\u20136 enlarge the head substantially. Rebuild these poses around a locked head/body model."
          },
          {
            "sha256": "87095e3b08a39251b5a52f48cea903337327960bb622945a0138fa832f745e0d",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Run volume varies around frames 3/7 versus 5/8. Failed frames 5\u20136 enlarge the head substantially. Rebuild these poses around a locked head/body model.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/agamemnon/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/agamemnon/cycle-repair/rig1/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "alex",
      "sha256": "b91e8a1ea04a6ec66335d5941564201ae10716a94ed8fffecfb8f6dc87df4edd",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "b91e8a1ea04a6ec66335d5941564201ae10716a94ed8fffecfb8f6dc87df4edd",
        "status": "original-art-restored",
        "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
        "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [8]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "7f14cf65982c861d669ccfe1e8170b69557d005f0201ac257f2ab27397bc7f46",
            "status": "needs-repair",
            "notes": "Failed frames 4\u20136 enlarge the head; working frames 1/6 shrink the body to accommodate the raised tool. Review frames 3\u20134 also change head scale. Keep tool clearance without resizing the character."
          },
          {
            "sha256": "af84ea57133280cf84af1bcaf65bfd23713e936a2bc426656758a84e5fccddef",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Approval covers both runs, failure, working and review only. Other states are unchanged and not newly approved. Historical findings (only repaired-row findings superseded): Failed frames 4\u20136 enlarge the head; working frames 1/6 shrink the body to accommodate the raised tool. Review frames 3\u20134 also change head scale. Keep tool clearance without resizing the character."
          },
          {
            "sha256": "af84ea57133280cf84af1bcaf65bfd23713e936a2bc426656758a84e5fccddef",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5,
                7,
                8
              ],
              "report": "/qa/alex/cycle-repair/rig7/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "92cb13de36a120f52f84535a321f12dbcfb5557bc4fbd4e3fce5e61647941f41",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "7da0e2f07e2c438a85e91596b9fbd3ec140625ab636a1bc646f0bf7d21275a2c",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "7da0e2f07e2c438a85e91596b9fbd3ec140625ab636a1bc646f0bf7d21275a2c",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "6c3f78c552abd18eeafed1d6a324ed02c4751d6a22121db56f5082f10c2f45fe",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "6c3f78c552abd18eeafed1d6a324ed02c4751d6a22121db56f5082f10c2f45fe",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Updated waiting/working using original character-specific source poses, removing replacement models or avoiding undersized action poses. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "b91e8a1ea04a6ec66335d5941564201ae10716a94ed8fffecfb8f6dc87df4edd",
            "status": "original-art-restored",
            "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
            "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [8]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "aloy",
      "sha256": "7e3ccd41521e57e420ec297ee5880c0e04e147185b9df624e51774c516c36368",
      "spriteVersion": 1,
      "frameCount": 57,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Frame 2:4: asymmetric alpha center 10.5px",
        "Frame 3:4: asymmetric alpha center 10.5px",
        "Failed 3\u21924: area changes 1.47\u00d7",
        "Failed 6\u21927: area changes 1.46\u00d7"
      ],
      "visualReview": {
        "sha256": "7e3ccd41521e57e420ec297ee5880c0e04e147185b9df624e51774c516c36368",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "7e3ccd41521e57e420ec297ee5880c0e04e147185b9df624e51774c516c36368",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): The existing selected run order is preserved. Head/body volume still varies between run poses; jump frame 4 and failed frames 3/6 need source-proportion review. Reordering alone cannot repair this."
          },
          {
            "sha256": "000b915f4807bb86864981a53adf217ecfeb54cb2d843de6775dd714babfa6d0",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): The existing selected run order is preserved. Head/body volume still varies between run poses; jump frame 4 and failed frames 3/6 need source-proportion review. Reordering alone cannot repair this."
          },
          {
            "sha256": "000b915f4807bb86864981a53adf217ecfeb54cb2d843de6775dd714babfa6d0",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "The existing selected run order is preserved. Head/body volume still varies between run poses; jump frame 4 and failed frames 3/6 need source-proportion review. Reordering alone cannot repair this.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/aloy/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/aloy/cycle-repair/rig7/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "capyboba",
      "sha256": "6047f303a6411dd0ca049e6d371056235fad55c9c82daa54bf1dbf7b653a0863",
      "spriteVersion": 1,
      "frameCount": 57,
      "palette": 60,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "6047f303a6411dd0ca049e6d371056235fad55c9c82daa54bf1dbf7b653a0863",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "6047f303a6411dd0ca049e6d371056235fad55c9c82daa54bf1dbf7b653a0863",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): The cup/body appears smaller in the running state than idle; jump frames 2\u20133 change its volume. Treat the cup as a locked shape rather than fitting each pose independently."
          },
          {
            "sha256": "bef1330645a16665503203f3d0f1dee687c9b046dc14ba30e4c4f977297eb15d",
            "status": "partially-repaired",
            "notes": "September 29: both hopping directions rebuilt with one fixed-size cup and two small paws, matching the neutral body scale. No biped gait imposed. Other rows and prior jump repair unchanged; those states still need separate temporal sign-off. Historical findings (run-size finding superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): The cup/body appears smaller in the running state than idle; jump frames 2\u20133 change its volume. Treat the cup as a locked shape rather than fitting each pose independently."
          },
          {
            "sha256": "bef1330645a16665503203f3d0f1dee687c9b046dc14ba30e4c4f977297eb15d",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "The cup/body appears smaller in the running state than idle; jump frames 2\u20133 change its volume. Treat the cup as a locked shape rather than fitting each pose independently.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/capyboba/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2
              ],
              "report": "/qa/capyboba/cycle-repair/rig1/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "cherno-alpha",
      "sha256": "ccb80cd4c7fdf0486c6f0e1e1626099182eec7a175bb78a4af67e243321bb33c",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Look 4\u21925: area changes 1.38\u00d7",
        "Look 12\u219213: area changes 1.43\u00d7",
        "Look 13\u219214: area changes 1.39\u00d7"
      ],
      "visualReview": {
        "sha256": "ccb80cd4c7fdf0486c6f0e1e1626099182eec7a175bb78a4af67e243321bb33c",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "ccb80cd4c7fdf0486c6f0e1e1626099182eec7a175bb78a4af67e243321bb33c",
            "status": "needs-review",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): The jump sequence shrinks the tower and body compared with standing poses. Keep the robot's construction scale through the jump; silhouette width can legitimately change when turning."
          },
          {
            "sha256": "9e7bf2a3099483169f7188f88d17328d2adef2621c7059a610d306441f6abce2",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Approval covers both runs and failure only. Other states are unchanged and not newly approved. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): The jump sequence shrinks the tower and body compared with standing poses. Keep the robot's construction scale through the jump; silhouette width can legitimately change when turning."
          },
          {
            "sha256": "9e7bf2a3099483169f7188f88d17328d2adef2621c7059a610d306441f6abce2",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "The jump sequence shrinks the tower and body compared with standing poses. Keep the robot's construction scale through the jump; silhouette width can legitimately change when turning.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/cherno-alpha/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/cherno-alpha/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "clone-trooper",
      "sha256": "f89fc1f385f951bf373e61b7516c122bf5ea75de0a944953bca4390ae232f923",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "f89fc1f385f951bf373e61b7516c122bf5ea75de0a944953bca4390ae232f923",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "3fbb01bdb5ad9a16863f9472f73c8254b8fa387beab3c2d097890529f8c8ad09",
            "status": "needs-repair",
            "notes": "Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "9cabfcac0257ad8a680c2eceb3945b4f63136fe603ebd3675ec7ab584f9a2d90",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "9cabfcac0257ad8a680c2eceb3945b4f63136fe603ebd3675ec7ab584f9a2d90",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/clone-trooper/cycle-repair/rig4/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "commander-gree",
      "sha256": "8f5c4eb6542fa753f1fc1fe865dfc7b295510a63356ed7e1f7f808fbfecf2472",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 62,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "8f5c4eb6542fa753f1fc1fe865dfc7b295510a63356ed7e1f7f808fbfecf2472",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "32bd2cfe54b87e41bd97b27d64775f3a0d8142bbd9847537e109e799fcee84f0",
            "status": "needs-repair",
            "notes": "Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "369a8e292f1b07667ebd16f13118f1adcee4eeca7d4b77f2ec380fd82cee326a",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "369a8e292f1b07667ebd16f13118f1adcee4eeca7d4b77f2ec380fd82cee326a",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/commander-gree/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "cute-cat",
      "sha256": "462bf6193fd9f8e83ebabaaf92e6835e7e29a1ab6e8f511ea70091ece6bbbbdf",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "462bf6193fd9f8e83ebabaaf92e6835e7e29a1ab6e8f511ea70091ece6bbbbdf",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "120271fb9113331ac75a0b2124d8e4a5b8c02cbf3ba59c84285028440c3237f2",
            "status": "no-obvious-scale-defect",
            "notes": "No obvious character-scale discontinuity in the fixed-scale contact sheet. Crouching and stretching read as intentional pose changes. This is not a full real-time motion or direction-semantic approval."
          },
          {
            "sha256": "5146ef8d89a5b3af78c75f1e13e17e6092c113b08391fc392a10e48bb9ca5ad8",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Only the listed rows are approved. Untouched states are not newly approved. Historical findings (only repaired-row findings superseded): No obvious character-scale discontinuity in the fixed-scale contact sheet. Crouching and stretching read as intentional pose changes. This is not a full real-time motion or direction-semantic approval."
          },
          {
            "sha256": "5146ef8d89a5b3af78c75f1e13e17e6092c113b08391fc392a10e48bb9ca5ad8",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2
              ],
              "report": "/qa/cute-cat/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "gipsy-danger",
      "sha256": "48701f725bdf7f884d4ae884deb41a5c760747a4266af0700f4f89413aa56f32",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Failed 3\u21924: area changes 1.35\u00d7"
      ],
      "visualReview": {
        "sha256": "48701f725bdf7f884d4ae884deb41a5c760747a4266af0700f4f89413aa56f32",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "87c0418d4ba93604dc955e0a260ccf03885934478d1205fe6408439ff7ce7e4b",
            "status": "needs-review",
            "notes": "Idle and running are comparatively consistent. Check the narrower look poses against the same torso reference before approval; foreshortening and crouching should not be mistaken for an automatic scale failure."
          },
          {
            "sha256": "5f7375b53d59a71160325b8c50f3e2ab55f5f3837d7929f87edd683d0a1de313",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Approval covers both runs and failure only. Other states are unchanged and not newly approved. Historical findings (only repaired-row findings superseded): Idle and running are comparatively consistent. Check the narrower look poses against the same torso reference before approval; foreshortening and crouching should not be mistaken for an automatic scale failure."
          },
          {
            "sha256": "5f7375b53d59a71160325b8c50f3e2ab55f5f3837d7929f87edd683d0a1de313",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/gipsy-danger/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "grace",
      "sha256": "20431725c23c9aca7ec82b7235174a4eb9f3dc37f1b0ca78ea5bf733015ac1f0",
      "spriteVersion": 1,
      "frameCount": 57,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "20431725c23c9aca7ec82b7235174a4eb9f3dc37f1b0ca78ea5bf733015ac1f0",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "20431725c23c9aca7ec82b7235174a4eb9f3dc37f1b0ca78ea5bf733015ac1f0",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Running helmet proportions vary around frames 2/8; jump frames 3\u20134 appear smaller than 1/5. Failed entry versus seated poses also needs locked helmet/body scale."
          },
          {
            "sha256": "91f796ec9d2490e2f2b8e31f2a2afbd45be616367c35b0e4bb23b4ce06fda80f",
            "status": "partially-repaired",
            "notes": "September 29: Reviewed fixed-size helmet/body, articulated runs and restrained crouch recovery. Both directions preserve the same model and passed native-timing playback. Other states remain unapproved by this scoped pass. Historical findings (only repaired rows superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Running helmet proportions vary around frames 2/8; jump frames 3\u20134 appear smaller than 1/5. Failed entry versus seated poses also needs locked helmet/body scale."
          },
          {
            "sha256": "91f796ec9d2490e2f2b8e31f2a2afbd45be616367c35b0e4bb23b4ce06fda80f",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Running helmet proportions vary around frames 2/8; jump frames 3\u20134 appear smaller than 1/5. Failed entry versus seated poses also needs locked helmet/body scale.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/grace/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/grace/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "green-mm",
      "sha256": "19e0ab29ffe200d2ccbf8c4f36b27e20a43142a90606723d4063798637a7b71e",
      "spriteVersion": 1,
      "frameCount": 57,
      "palette": 60,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Run right 8\u21921: area changes 1.44\u00d7",
        "Run left 8\u21921: area changes 1.44\u00d7"
      ],
      "visualReview": {
        "sha256": "19e0ab29ffe200d2ccbf8c4f36b27e20a43142a90606723d4063798637a7b71e",
        "status": "original-art-restored",
        "actionRepair": "/qa/character-actions-20260930/repairs.json",
        "notes": "Updated waiting/working using original character-specific source poses, removing replacement models or avoiding undersized action poses. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "b1f7a2d7a8872d464675d477a8b0d9e697a13b9ece1a00e976fae06e5dea8bfa",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): The green body expands in run frames 4/8 relative to surrounding frames, producing a likely loop pop. Preserve body diameter while changing the arms and legs."
          },
          {
            "sha256": "e8493f9024fca185f132609e4a688f40ca2375de3a9dab1263c520e70d0376f5",
            "status": "partially-repaired",
            "notes": "September 29: Reviewed fixed-size candy body and alternating near/far leg cycle. Both directions passed native-timing playback; other rows unchanged. Other states remain unapproved by this scoped pass. Historical findings (only repaired rows superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): The green body expands in run frames 4/8 relative to surrounding frames, producing a likely loop pop. Preserve body diameter while changing the arms and legs."
          },
          {
            "sha256": "e8493f9024fca185f132609e4a688f40ca2375de3a9dab1263c520e70d0376f5",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "The green body expands in run frames 4/8 relative to surrounding frames, producing a likely loop pop. Preserve body diameter while changing the arms and legs.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/green-mm/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2
              ],
              "report": "/qa/green-mm/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "b1f7a2d7a8872d464675d477a8b0d9e697a13b9ece1a00e976fae06e5dea8bfa",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "19e0ab29ffe200d2ccbf8c4f36b27e20a43142a90606723d4063798637a7b71e",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "19e0ab29ffe200d2ccbf8c4f36b27e20a43142a90606723d4063798637a7b71e",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "hopper",
      "sha256": "4d0ceb0f071ebc02cbbe9c505e8cd16f2ba0285c6ac228e3bacb6f1ee6c41f4d",
      "spriteVersion": 1,
      "frameCount": 57,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Run right 3\u21924: area changes 1.37\u00d7",
        "Run right 8\u21921: area changes 1.50\u00d7",
        "Run left 3\u21924: area changes 1.37\u00d7",
        "Run left 8\u21921: area changes 1.50\u00d7",
        "Frame 6:4: asymmetric alpha center 12.3px"
      ],
      "visualReview": {
        "sha256": "4d0ceb0f071ebc02cbbe9c505e8cd16f2ba0285c6ac228e3bacb6f1ee6c41f4d",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "4d0ceb0f071ebc02cbbe9c505e8cd16f2ba0285c6ac228e3bacb6f1ee6c41f4d",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run frames 4/8 become much smaller than 2/6, including the keyboard prop. Lock both character and prop size; deliberate compact overall stature is not itself a defect."
          },
          {
            "sha256": "a281f030fc9ee632a6c4565a7f696c78dfd26e020ae832eb90d218a0a347bd71",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Only the listed rows are approved. Untouched states are not newly approved. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run frames 4/8 become much smaller than 2/6, including the keyboard prop. Lock both character and prop size; deliberate compact overall stature is not itself a defect."
          },
          {
            "sha256": "a281f030fc9ee632a6c4565a7f696c78dfd26e020ae832eb90d218a0a347bd71",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Run frames 4/8 become much smaller than 2/6, including the keyboard prop. Lock both character and prop size; deliberate compact overall stature is not itself a defect.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/hopper/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/hopper/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "invincible",
      "sha256": "a7c23cbc0bc0cf1e121f8a810be61e17bb0bd6877afe71432a607c1936677489",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "a7c23cbc0bc0cf1e121f8a810be61e17bb0bd6877afe71432a607c1936677489",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "a7c23cbc0bc0cf1e121f8a810be61e17bb0bd6877afe71432a607c1936677489",
            "status": "needs-review",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Flight poses are more consistent than the chibi variant. Jump entry/exit and failed frame 5 need head/body scale review against idle. Flight should retain its intentional non-walking motion."
          },
          {
            "sha256": "04474f6ea514233c22a3d5425e2247928fc5a38904d87e2e88c56ae91995cae1",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Only the listed rows are approved. Untouched states are not newly approved. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Flight poses are more consistent than the chibi variant. Jump entry/exit and failed frame 5 need head/body scale review against idle. Flight should retain its intentional non-walking motion."
          },
          {
            "sha256": "04474f6ea514233c22a3d5425e2247928fc5a38904d87e2e88c56ae91995cae1",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Flight poses are more consistent than the chibi variant. Jump entry/exit and failed frame 5 need head/body scale review against idle. Flight should retain its intentional non-walking motion.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/invincible/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/invincible/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "invincible-chibi",
      "sha256": "7fb44bade7fe735884f69f5a49070e8cad8b4c047ac471f3be88978e07c3d870",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Run right 3\u21924: area changes 2.16\u00d7",
        "Run right 5\u21926: area changes 1.59\u00d7",
        "Run left 3\u21924: area changes 2.16\u00d7",
        "Run left 5\u21926: area changes 1.59\u00d7"
      ],
      "visualReview": {
        "sha256": "7fb44bade7fe735884f69f5a49070e8cad8b4c047ac471f3be88978e07c3d870",
        "status": "original-art-restored",
        "actionRepair": "/qa/character-actions-20260930/repairs.json",
        "notes": "Updated waiting/working using original character-specific source poses, removing replacement models or avoiding undersized action poses. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "7fb44bade7fe735884f69f5a49070e8cad8b4c047ac471f3be88978e07c3d870",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Flight frames 3/6/7 use markedly different head/body volume from stretched frames 4/5. Jump crouches also change head size. These need a shared-model redraw, not a silhouette-fit resize."
          },
          {
            "sha256": "8d68533b9bee45e659a462d0a9ad7f7bad5386f308e0c22f5f3b09d549db8c20",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Only the listed rows are approved. Untouched states are not newly approved. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Flight frames 3/6/7 use markedly different head/body volume from stretched frames 4/5. Jump crouches also change head size. These need a shared-model redraw, not a silhouette-fit resize."
          },
          {
            "sha256": "8d68533b9bee45e659a462d0a9ad7f7bad5386f308e0c22f5f3b09d549db8c20",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Flight frames 3/6/7 use markedly different head/body volume from stretched frames 4/5. Jump crouches also change head size. These need a shared-model redraw, not a silhouette-fit resize.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/invincible-chibi/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5,
                7
              ],
              "report": "/qa/invincible-chibi/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "84481b9386a2e8c7997145fa0c0ffd28172cf13db07af71516c0edc025810c0d",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "7fb44bade7fe735884f69f5a49070e8cad8b4c047ac471f3be88978e07c3d870",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "7fb44bade7fe735884f69f5a49070e8cad8b4c047ac471f3be88978e07c3d870",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "7fb44bade7fe735884f69f5a49070e8cad8b4c047ac471f3be88978e07c3d870",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "kashyyyk-scout-trooper",
      "sha256": "f7d10557bfde3064b98b6a03bed7d0a79e5a776d94dc741923020cad02a87679",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 63,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "f7d10557bfde3064b98b6a03bed7d0a79e5a776d94dc741923020cad02a87679",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "ab5630b2354a9ed80a646a40afab040e716d104aa9a6139d96817f3875882bdd",
            "status": "needs-repair",
            "notes": "Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "6d1294a50d051e46e61fea21ff77abc438db4fb7c3210f55ba6d803ad0913930",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "6d1294a50d051e46e61fea21ff77abc438db4fb7c3210f55ba6d803ad0913930",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/kashyyyk-scout-trooper/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "keyleth",
      "sha256": "877aa8d6b784618a4380aa512919c5bff293db32a92eb223f618e1f069e49171",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "877aa8d6b784618a4380aa512919c5bff293db32a92eb223f618e1f069e49171",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "877aa8d6b784618a4380aa512919c5bff293db32a92eb223f618e1f069e49171",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run heads appear larger than idle; jump frames 1/3/5 alternate in proportion with 2/4. Keep head and costume construction consistent while preserving actual crouch height."
          },
          {
            "sha256": "051cb9144679b111c6df1499925a072cef863a4d2ce2796059819c96d901efee",
            "status": "partially-repaired",
            "notes": "September 29: both run directions rebuilt and reviewed using locked character parts and fixed-length joints. Other states remain unchanged and still require separate sign-off. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run heads appear larger than idle; jump frames 1/3/5 alternate in proportion with 2/4. Keep head and costume construction consistent while preserving actual crouch height."
          },
          {
            "sha256": "051cb9144679b111c6df1499925a072cef863a4d2ce2796059819c96d901efee",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Run heads appear larger than idle; jump frames 1/3/5 alternate in proportion with 2/4. Keep head and costume construction consistent while preserving actual crouch height.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/keyleth/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2
              ],
              "report": "/qa/keyleth/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "korra",
      "sha256": "c776421f8a0e9adf69683a2eb761672e71281b8edfaa58e86841625a37d84df1",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Failed 2\u21923: area changes 1.89\u00d7",
        "Failed 3\u21924: area changes 1.53\u00d7",
        "Failed 6\u21927: area changes 1.53\u00d7",
        "Failed 7\u21928: area changes 1.89\u00d7"
      ],
      "visualReview": {
        "sha256": "c776421f8a0e9adf69683a2eb761672e71281b8edfaa58e86841625a37d84df1",
        "status": "original-art-restored",
        "actionRepair": "/qa/character-actions-20260930/repairs.json",
        "notes": "Updated waiting/working using original character-specific source poses, removing replacement models or avoiding undersized action poses. Run/failure recovery preserved. Korra waiting uses original standing, blink and check-in poses, not the smaller waiting model. Original action pose limitations remain; no blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "1123aff6fa6236cc95b90d4605ad8988fe53735e00e61075964ee10ec67f79ef",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Jump frames 1/3/5 enlarge the character relative to 2/4. Waiting is visibly thinner/smaller, and failed poses change proportions. Separate elemental effects from character measurements."
          },
          {
            "sha256": "456c22a44da9ddb7fead034b146625cd9afd93fe2cb85edb073366f9ebb1cc2e",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed using locked character parts and fixed-length joints. Other states remain unchanged and still require separate sign-off. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Jump frames 1/3/5 enlarge the character relative to 2/4. Waiting is visibly thinner/smaller, and failed poses change proportions. Separate elemental effects from character measurements."
          },
          {
            "sha256": "fdd8578d91189d0de6334f2e15faeda3eaf9591ebb1eced542ee6e020faee5ef",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Rows 6 and 7 receive new gestures; rows 1, 2 and 5 are replayed and reconfirmed pixel-identical. Other rows are unchanged and are not newly approved. Historical findings (only repaired-row findings superseded): September 29: both run directions and failure recovery rebuilt and reviewed using locked character parts and fixed-length joints. Other states remain unchanged and still require separate sign-off. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Jump frames 1/3/5 enlarge the character relative to 2/4. Waiting is visibly thinner/smaller, and failed poses change proportions. Separate elemental effects from character measurements."
          },
          {
            "sha256": "fdd8578d91189d0de6334f2e15faeda3eaf9591ebb1eced542ee6e020faee5ef",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Jump frames 1/3/5 enlarge the character relative to 2/4. Waiting is visibly thinner/smaller, and failed poses change proportions. Separate elemental effects from character measurements.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/korra/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5,
                6,
                7
              ],
              "report": "/qa/korra/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "9263cdfa3b5e34673c41a406c88e71d889adbd1605ecd1428383266f7a34cb12",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "c776421f8a0e9adf69683a2eb761672e71281b8edfaa58e86841625a37d84df1",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Korra waiting uses original standing, blink and check-in poses, not the smaller waiting model. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "c776421f8a0e9adf69683a2eb761672e71281b8edfaa58e86841625a37d84df1",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Korra waiting uses original standing, blink and check-in poses, not the smaller waiting model. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "c776421f8a0e9adf69683a2eb761672e71281b8edfaa58e86841625a37d84df1",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Korra waiting uses original standing, blink and check-in poses, not the smaller waiting model. Original action pose limitations remain; no blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "kratos",
      "sha256": "1f6b5afa2a77184b24d433f8cd96b1ffed1d7f15e93cb99c45791e5066ac8d00",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Failed 3\u21924: area changes 1.38\u00d7",
        "Failed 7\u21928: area changes 1.65\u00d7"
      ],
      "visualReview": {
        "sha256": "1f6b5afa2a77184b24d433f8cd96b1ffed1d7f15e93cb99c45791e5066ac8d00",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "1f6b5afa2a77184b24d433f8cd96b1ffed1d7f15e93cb99c45791e5066ac8d00",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): The selected run order (1,8,7,6,5,4,2,3 relative to the pre-reorder source) is preserved. Jump and seated failed frames 4\u20137 visibly enlarge the head/body relative to idle. Source anatomy, not playback size, remains the issue."
          },
          {
            "sha256": "0944024a514596977b61531b109a7b49f10b253f5fcc4b6a81064049d651c47f",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): The selected run order (1,8,7,6,5,4,2,3 relative to the pre-reorder source) is preserved. Jump and seated failed frames 4\u20137 visibly enlarge the head/body relative to idle. Source anatomy, not playback size, remains the issue."
          },
          {
            "sha256": "0944024a514596977b61531b109a7b49f10b253f5fcc4b6a81064049d651c47f",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "The selected run order (1,8,7,6,5,4,2,3 relative to the pre-reorder source) is preserved. Jump and seated failed frames 4\u20137 visibly enlarge the head/body relative to idle. Source anatomy, not playback size, remains the issue.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/kratos/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/kratos/cycle-repair/rig12/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "maryanne",
      "sha256": "c3ec632d41cdef1e1787a940f1732e9e8dbbc0ba9affee43a11f88a18e8c9f7d",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Failed 5\u21926: area changes 1.39\u00d7"
      ],
      "visualReview": {
        "sha256": "c3ec632d41cdef1e1787a940f1732e9e8dbbc0ba9affee43a11f88a18e8c9f7d",
        "status": "original-art-restored",
        "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
        "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [4]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "e6907f54e1f6fc5addef85a8dc9259cd9712db4f11e3596869d321da56623194",
            "status": "needs-repair",
            "notes": "Most standing and look poses retain a recognizable model. Seated failed frames 4\u20136 enlarge the head/hair significantly. Compare head construction independently of asymmetric hair mass."
          },
          {
            "sha256": "998e9a302ac140e37e297be0a3681b43bf0997a51479c7bc03316749c2afd447",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed using locked character parts and fixed-length joints. Other states remain unchanged and still require separate sign-off. Historical findings (only repaired-row findings superseded): Most standing and look poses retain a recognizable model. Seated failed frames 4\u20136 enlarge the head/hair significantly. Compare head construction independently of asymmetric hair mass."
          },
          {
            "sha256": "6a2fc719fbe6ce9ca2d1145356943842288e67b2fdfa0faf44a5e561a208e55f",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Only jump receives new motion. Both runs and failure are reconfirmed pixel-identical; all other rows and the neutral look anchor are untouched. Historical findings (only repaired-row findings superseded): September 29: both run directions and failure recovery rebuilt and reviewed using locked character parts and fixed-length joints. Other states remain unchanged and still require separate sign-off. Historical findings (only repaired-row findings superseded): Most standing and look poses retain a recognizable model. Seated failed frames 4\u20136 enlarge the head/hair significantly. Compare head construction independently of asymmetric hair mass."
          },
          {
            "sha256": "6a2fc719fbe6ce9ca2d1145356943842288e67b2fdfa0faf44a5e561a208e55f",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                4,
                5
              ],
              "report": "/qa/maryanne/cycle-repair/rig4/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "a1a4a8c781c6c8f89531c22c2a2648a92fe8a238cc6b69e24f36a28b3baf2d87",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "c3ec632d41cdef1e1787a940f1732e9e8dbbc0ba9affee43a11f88a18e8c9f7d",
            "status": "original-art-restored",
            "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
            "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [4]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "mira",
      "sha256": "d09283bf3deeaa8c718b3fc9893f91d380dc69dea1a2b7771e905cff14ffdbd3",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Run right 5\u21926: area changes 1.78\u00d7",
        "Run left 5\u21926: area changes 1.78\u00d7"
      ],
      "visualReview": {
        "sha256": "d09283bf3deeaa8c718b3fc9893f91d380dc69dea1a2b7771e905cff14ffdbd3",
        "status": "original-art-restored",
        "actionRepair": "/qa/character-actions-20260930/repairs.json",
        "notes": "Updated waiting/working using original character-specific source poses, removing replacement models or avoiding undersized action poses. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "9374e53fa0a592cf90bb6932dce7731e9a5d61a199ca73fe542fe576c78f95bc",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run frames 6\u20137 shrink compared with frame 5; the working row uses a much smaller character. Review poses lose substantial costume color/detail. Requires source-model and costume repair."
          },
          {
            "sha256": "f63e670cdc47d8543f0f40af339b17740fb1dde43979859bfc21bef36ca019b3",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Approval covers both runs, failure recovery and waiting only. All other states, including any prior jump repair, are preserved and not newly approved. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run frames 6\u20137 shrink compared with frame 5; the working row uses a much smaller character. Review poses lose substantial costume color/detail. Requires source-model and costume repair."
          },
          {
            "sha256": "f63e670cdc47d8543f0f40af339b17740fb1dde43979859bfc21bef36ca019b3",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Run frames 6\u20137 shrink compared with frame 5; the working row uses a much smaller character. Review poses lose substantial costume color/detail. Requires source-model and costume repair.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/mira/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5,
                6
              ],
              "report": "/qa/mira/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "85ee3f5ee1dd61c8691595855d3c3f892394135db7471d55b057d45a4a4a5d3c",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "6433d9c9691b3254bde3522fef8a5fb9cc4315b787aaf4a72a8158790e58ad59",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "d09283bf3deeaa8c718b3fc9893f91d380dc69dea1a2b7771e905cff14ffdbd3",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "d09283bf3deeaa8c718b3fc9893f91d380dc69dea1a2b7771e905cff14ffdbd3",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "mizu",
      "sha256": "bb3c1e38d82c8967e8cf43ff4ecdcda16134f22acf956a2a7e654f0ab868ae94",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Failed 2\u21923: area changes 1.58\u00d7",
        "Failed 6\u21927: area changes 1.47\u00d7"
      ],
      "visualReview": {
        "sha256": "bb3c1e38d82c8967e8cf43ff4ecdcda16134f22acf956a2a7e654f0ab868ae94",
        "status": "original-art-restored",
        "actionRepair": "/qa/character-actions-20260930/repairs.json",
        "notes": "Updated waiting/working using original character-specific source poses, removing replacement models or avoiding undersized action poses. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "12f66d204d2f8d28b7761b94aa1458104f5f01d5b935d81824e19d0dd9e0663c",
            "status": "needs-repair",
            "notes": "Failed frames 3\u20136 enlarge the hat/head/cape relative to the entry poses. Jump proportions also need comparison with the standing model; do not use hat width alone as body size."
          },
          {
            "sha256": "eb3d667ab6ca7b053297631cc133777f3c2513c5d1c67102eaf0e7d1dc5a2232",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Approval covers both runs, failure recovery and working only. All other states, including any prior jump repair, are preserved and not newly approved. Historical findings (only repaired-row findings superseded): Failed frames 3\u20136 enlarge the hat/head/cape relative to the entry poses. Jump proportions also need comparison with the standing model; do not use hat width alone as body size."
          },
          {
            "sha256": "eb3d667ab6ca7b053297631cc133777f3c2513c5d1c67102eaf0e7d1dc5a2232",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5,
                7
              ],
              "report": "/qa/mizu/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "6aa9a7bb99afaa21569f81e019b2ddab8417f7f2aafbc3ecccc313ae292686be",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "bb3c1e38d82c8967e8cf43ff4ecdcda16134f22acf956a2a7e654f0ab868ae94",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "bb3c1e38d82c8967e8cf43ff4ecdcda16134f22acf956a2a7e654f0ab868ae94",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "bb3c1e38d82c8967e8cf43ff4ecdcda16134f22acf956a2a7e654f0ab868ae94",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "mr-monopoly",
      "sha256": "84d39e4bcea0718f810328b6cbacde5513e11159ce172ca7d9ba9b6ca71a107d",
      "spriteVersion": 1,
      "frameCount": 57,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Failed 6\u21927: area changes 1.46\u00d7",
        "Frame 9:3: asymmetric alpha center 10.5px"
      ],
      "visualReview": {
        "sha256": "84d39e4bcea0718f810328b6cbacde5513e11159ce172ca7d9ba9b6ca71a107d",
        "status": "original-art-restored",
        "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
        "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [8]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "859c40bf96ef7b69368cd6c65196e4fd5f77ccf4ef014b5fcc31adc2cc3c58e0",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run frame 8 shrinks relative to frame 6. Failed frames 3\u20136 enlarge the head compared with entry/exit. Lock the head and hat scale through seated poses."
          },
          {
            "sha256": "5b334911937b34b3382385c8d15c0930c8f35e958dbd0c3db61498a9c0b68b72",
            "status": "partially-repaired",
            "notes": "September 29: Reviewed fixed-size runs and crouch recovery; phone review uniformly recentered without changing its art or relative movement. Both directions and all changed states passed native-timing browser playback. Other states remain unapproved by this scoped pass. Historical findings (only repaired rows superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run frame 8 shrinks relative to frame 6. Failed frames 3\u20136 enlarge the head compared with entry/exit. Lock the head and hat scale through seated poses."
          },
          {
            "sha256": "5b334911937b34b3382385c8d15c0930c8f35e958dbd0c3db61498a9c0b68b72",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Run frame 8 shrinks relative to frame 6. Failed frames 3\u20136 enlarge the head compared with entry/exit. Lock the head and hat scale through seated poses.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/mr-monopoly/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5,
                8
              ],
              "report": "/qa/mr-monopoly/cycle-repair/rig4/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "aa973cc72bb95087f69c60077a341f95523976f8702d8039f8de30ca7d9d9503",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "84d39e4bcea0718f810328b6cbacde5513e11159ce172ca7d9ba9b6ca71a107d",
            "status": "original-art-restored",
            "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
            "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [8]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "nezha",
      "sha256": "da7cac62544fe7f9e3b070acbd4aa6d209b7518925532118417b4f17dc085a53",
      "spriteVersion": 1,
      "frameCount": 57,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Run right 1\u21922: area changes 1.50\u00d7",
        "Run right 5\u21926: area changes 1.36\u00d7",
        "Run left 1\u21922: area changes 1.50\u00d7",
        "Run left 5\u21926: area changes 1.36\u00d7",
        "Frame 4:4: asymmetric alpha center 12.0px",
        "Failed 3\u21924: area changes 1.59\u00d7",
        "Failed 4\u21925: area changes 1.42\u00d7",
        "Frame 8:5: asymmetric alpha center 11.0px"
      ],
      "visualReview": {
        "sha256": "da7cac62544fe7f9e3b070acbd4aa6d209b7518925532118417b4f17dc085a53",
        "status": "original-art-restored",
        "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
        "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [3]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "da7cac62544fe7f9e3b070acbd4aa6d209b7518925532118417b4f17dc085a53",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run frame 2 enlarges the head relative to frame 1. Jump frames 1/5 differ in scale from 2/4. Preserve expressive motion but rebuild around fixed head/body proportions."
          },
          {
            "sha256": "7a16bd54020f313ad1bb6cb631077b4d64279a599216dac59f400be8fc0a5be4",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Approval covers both runs, wave, failure and working only. Jump, idle, waiting and review are unchanged and not newly approved. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run frame 2 enlarges the head relative to frame 1. Jump frames 1/5 differ in scale from 2/4. Preserve expressive motion but rebuild around fixed head/body proportions."
          },
          {
            "sha256": "7a16bd54020f313ad1bb6cb631077b4d64279a599216dac59f400be8fc0a5be4",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Run frame 2 enlarges the head relative to frame 1. Jump frames 1/5 differ in scale from 2/4. Preserve expressive motion but rebuild around fixed head/body proportions.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/nezha/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                3,
                5,
                7
              ],
              "report": "/qa/nezha/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "9f480eda2dde111375f8917957b6c97c5b68b4427de78cef625381eb7368642d",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "9f16c98ddeb8ed9f3ab262e137acf8c0fde97ee01e1e914f9c19d7a6fad475b4",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "9f16c98ddeb8ed9f3ab262e137acf8c0fde97ee01e1e914f9c19d7a6fad475b4",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "9f16c98ddeb8ed9f3ab262e137acf8c0fde97ee01e1e914f9c19d7a6fad475b4",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "9f16c98ddeb8ed9f3ab262e137acf8c0fde97ee01e1e914f9c19d7a6fad475b4",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Updated waiting/working using original character-specific source poses, removing replacement models or avoiding undersized action poses. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "da7cac62544fe7f9e3b070acbd4aa6d209b7518925532118417b4f17dc085a53",
            "status": "original-art-restored",
            "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
            "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [3]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "omni-man",
      "sha256": "796b7a4ea96adec3df288b7d4a8b5f76ea8307c185fdbfca6a54b0d0fbbfe930",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Run left 8\u21921: area changes 1.61\u00d7"
      ],
      "visualReview": {
        "sha256": "796b7a4ea96adec3df288b7d4a8b5f76ea8307c185fdbfca6a54b0d0fbbfe930",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "4aaac2c49658930b79412b1d8ed349de9282a22ae821679ca19d0cc3a8bf92ce",
            "status": "needs-repair",
            "notes": "Left-flight frames 2/6/8 are larger and proportionally different from nearby poses and the corresponding right-flight row. Review directional source consistency before any mirror repair; cape motion alone is not a scale defect."
          },
          {
            "sha256": "15cd87f3b011149ace0f488326292070764b2b15f698892448966518e87a7fd1",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Only the listed rows are approved. Untouched states are not newly approved. Historical findings (only repaired-row findings superseded): Left-flight frames 2/6/8 are larger and proportionally different from nearby poses and the corresponding right-flight row. Review directional source consistency before any mirror repair; cape motion alone is not a scale defect."
          },
          {
            "sha256": "15cd87f3b011149ace0f488326292070764b2b15f698892448966518e87a7fd1",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2
              ],
              "report": "/qa/omni-man/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "optimus-prime",
      "sha256": "82ee4baffe8da7eaa56aee2f9f3a499375328060d7411e6c17e2d6e8bfc5e177",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "82ee4baffe8da7eaa56aee2f9f3a499375328060d7411e6c17e2d6e8bfc5e177",
        "status": "original-art-restored",
        "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
        "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [8]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "82ee4baffe8da7eaa56aee2f9f3a499375328060d7411e6c17e2d6e8bfc5e177",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Robot-to-truck transformation during locomotion is intentional and must not be normalized away. Jump and failed robot poses change chest/head proportions relative to idle and need a locked robot reference."
          },
          {
            "sha256": "dbba0f69dc92184a13ce238df4a40cb58602358dd53efb21b694d615aa13d30c",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Only the listed rows are approved. Untouched states are not newly approved. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Robot-to-truck transformation during locomotion is intentional and must not be normalized away. Jump and failed robot poses change chest/head proportions relative to idle and need a locked robot reference."
          },
          {
            "sha256": "dbba0f69dc92184a13ce238df4a40cb58602358dd53efb21b694d615aa13d30c",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Robot-to-truck transformation during locomotion is intentional and must not be normalized away. Jump and failed robot poses change chest/head proportions relative to idle and need a locked robot reference.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/optimus-prime/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5,
                6,
                7,
                8
              ],
              "report": "/qa/optimus-prime/cycle-repair/rig5/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "2ccecd703551ecdf9f0043e6b188636954278fbbc46ef5b72a375a5ecb57be33",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "e6074492fd6a8d8fa94fbf33781ee1eef0fc8836fecb5aaa1a27bad947a5fc08",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "e6074492fd6a8d8fa94fbf33781ee1eef0fc8836fecb5aaa1a27bad947a5fc08",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "e6074492fd6a8d8fa94fbf33781ee1eef0fc8836fecb5aaa1a27bad947a5fc08",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "e6074492fd6a8d8fa94fbf33781ee1eef0fc8836fecb5aaa1a27bad947a5fc08",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Updated waiting/working using original character-specific source poses, removing replacement models or avoiding undersized action poses. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "82ee4baffe8da7eaa56aee2f9f3a499375328060d7411e6c17e2d6e8bfc5e177",
            "status": "original-art-restored",
            "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
            "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [8]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "paul-atreides",
      "sha256": "df4c8309341f422d98e5005ac40094b498964b8b5f8e8b87eced435735624b65",
      "spriteVersion": 1,
      "frameCount": 57,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Frame 2:8: asymmetric alpha center 10.5px",
        "Run right 5\u21926: area changes 1.57\u00d7",
        "Run right 6\u21927: area changes 1.41\u00d7",
        "Frame 3:8: asymmetric alpha center 10.5px",
        "Run left 5\u21926: area changes 1.57\u00d7",
        "Run left 6\u21927: area changes 1.41\u00d7",
        "Failed 2\u21923: area changes 1.36\u00d7",
        "Failed 3\u21924: area changes 1.37\u00d7",
        "Failed 5\u21926: area changes 1.40\u00d7"
      ],
      "visualReview": {
        "sha256": "df4c8309341f422d98e5005ac40094b498964b8b5f8e8b87eced435735624b65",
        "status": "original-art-restored",
        "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
        "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [4]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "9c23a3759551db845f1cab4262e67b07653e3ab60f60faf4e9714d1e0c7e045c",
            "status": "needs-repair",
            "notes": "Run frames 6/8 shrink; failed entry/exit are smaller than the seated middle poses. Repair head/body proportions at source rather than equalizing pose height."
          },
          {
            "sha256": "6e5a1c9114ee17fd4b908b67e383617d26922f0ae3d6372494e30d3033e6f0b4",
            "status": "partially-repaired",
            "notes": "September 29: both runs, jump and failure recovery rebuilt and reviewed on one fixed-size model and joint rig. Other states unchanged and awaiting separate sign-off. Historical findings (only repaired-row findings superseded): Run frames 6/8 shrink; failed entry/exit are smaller than the seated middle poses. Repair head/body proportions at source rather than equalizing pose height."
          },
          {
            "sha256": "6e5a1c9114ee17fd4b908b67e383617d26922f0ae3d6372494e30d3033e6f0b4",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                4,
                5
              ],
              "report": "/qa/paul-atreides/cycle-repair/rig1/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "26dd2c2bbb203e2fdd8748b173992b1c55bfe3a42096a63dfbbb4d7e505bf93d",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "df4c8309341f422d98e5005ac40094b498964b8b5f8e8b87eced435735624b65",
            "status": "original-art-restored",
            "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
            "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [4]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "percy",
      "sha256": "d3eb32a964d753ae21c807ab8f069cb6dc29e6d74ff8d3fd05c14f142de64ce2",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "d3eb32a964d753ae21c807ab8f069cb6dc29e6d74ff8d3fd05c14f142de64ce2",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "a412dc601deb7f4a97503a04d7bccaddf5be4fbe1558537639fc766a4f72b6b8",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Jump frame 1 and failed frames 6\u20138 enlarge the head/body relative to standing poses. Preserve crouch compression without enlarging anatomy."
          },
          {
            "sha256": "af4a9fed4ee7f0965bc6d37435148dd4b82ef67a9b35bc87d4ce7b0f664c23f9",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed using locked character parts and fixed-length joints. Other states remain unchanged and still require separate sign-off. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Jump frame 1 and failed frames 6\u20138 enlarge the head/body relative to standing poses. Preserve crouch compression without enlarging anatomy."
          },
          {
            "sha256": "af4a9fed4ee7f0965bc6d37435148dd4b82ef67a9b35bc87d4ce7b0f664c23f9",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Jump frame 1 and failed frames 6\u20138 enlarge the head/body relative to standing poses. Preserve crouch compression without enlarging anatomy.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/percy/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/percy/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "princeton-tiger",
      "sha256": "f69e7172694b2d79a2a69f58d7bb3bb31a1d8cf491912418e9a0e67d56513532",
      "spriteVersion": 1,
      "frameCount": 57,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Frame 2:2: asymmetric alpha center 17.0px",
        "Frame 2:6: asymmetric alpha center 17.0px",
        "Frame 3:2: asymmetric alpha center 17.0px",
        "Frame 3:6: asymmetric alpha center 17.0px",
        "Frame 5:2: asymmetric alpha center 10.3px"
      ],
      "visualReview": {
        "sha256": "f69e7172694b2d79a2a69f58d7bb3bb31a1d8cf491912418e9a0e67d56513532",
        "status": "original-art-restored",
        "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
        "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [4]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "e90754f0d2d48719854478016a4f3b4acc62a2a1aabc8ffeb8dfdb346ff35d54",
            "status": "needs-repair",
            "notes": "Right-run frames 5\u20136 turn the face left; the counterpart inherits this direction change. Head size also varies around frames 2/8. Needs direction and anatomy review, not blind cyclic reordering."
          },
          {
            "sha256": "33ab1659fa4204020f248ae16c8f4fcb00a597aace409839ee64d7f9428264b7",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Approval covers both runs, failure and jump only. Other states are unchanged and not newly approved. Historical findings (only repaired-row findings superseded): Right-run frames 5\u20136 turn the face left; the counterpart inherits this direction change. Head size also varies around frames 2/8. Needs direction and anatomy review, not blind cyclic reordering."
          },
          {
            "sha256": "33ab1659fa4204020f248ae16c8f4fcb00a597aace409839ee64d7f9428264b7",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                4,
                5
              ],
              "report": "/qa/princeton-tiger/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "44ecfba8abd3da62ef38fbb58fc08f9b215e7710783f703a84acde2f271bf521",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "f69e7172694b2d79a2a69f58d7bb3bb31a1d8cf491912418e9a0e67d56513532",
            "status": "original-art-restored",
            "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
            "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [4]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "rocky",
      "sha256": "47e7c2d59de23432eab99f95aac6202d7df3a6ed25c353b00eff56a88f4e880b",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Run right 6\u21927: area changes 1.65\u00d7",
        "Run right 7\u21928: area changes 1.59\u00d7",
        "Run left 6\u21927: area changes 1.65\u00d7",
        "Run left 7\u21928: area changes 1.59\u00d7"
      ],
      "visualReview": {
        "sha256": "47e7c2d59de23432eab99f95aac6202d7df3a6ed25c353b00eff56a88f4e880b",
        "status": "original-art-restored",
        "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
        "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [0, 4]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "d3251d492f02582689f884ca06154ab21ec7e81c8015a5bf215d851f38320dbe",
            "status": "needs-repair",
            "notes": "Run frame 7 shrinks the torso between larger neighboring poses. Lock the central body volume while articulating the limbs."
          },
          {
            "sha256": "e4ceb4d163d29df5a25bb3aec315a18842c1b5d3b8b9b2b8fb0aeec5297bffae",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Only the listed rows are approved. Untouched states are not newly approved. Historical findings (only repaired-row findings superseded): Run frame 7 shrinks the torso between larger neighboring poses. Lock the central body volume while articulating the limbs."
          },
          {
            "sha256": "fcd6703d2f8d6c0c1900b8cae3bf2fd67df3a989a2c60ed72587335318bedf4f",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Only idle and jump receive new motion. Both runs and failure are reconfirmed pixel-identical; all other rows and the neutral look anchor are untouched. Historical findings (only repaired-row findings superseded): September 29 scoped repair: Only the listed rows are approved. Untouched states are not newly approved. Historical findings (only repaired-row findings superseded): Run frame 7 shrinks the torso between larger neighboring poses. Lock the central body volume while articulating the limbs."
          },
          {
            "sha256": "fcd6703d2f8d6c0c1900b8cae3bf2fd67df3a989a2c60ed72587335318bedf4f",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                0,
                1,
                2,
                4,
                5
              ],
              "report": "/qa/rocky/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "7483280d6306831c83c65e547786a6f39e90aed10b85271cf2fb17588f677ddd",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "47e7c2d59de23432eab99f95aac6202d7df3a6ed25c353b00eff56a88f4e880b",
            "status": "original-art-restored",
            "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
            "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [0, 4]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "rumi",
      "sha256": "f0fda1cb5a7075aabdd2a4957cf585011bfe09438768e7fc659b77e311eb0b32",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Run right 5\u21926: area changes 1.45\u00d7",
        "Run right 7\u21928: area changes 1.36\u00d7",
        "Run left 5\u21926: area changes 1.45\u00d7",
        "Run left 7\u21928: area changes 1.36\u00d7",
        "Failed 5\u21926: area changes 1.43\u00d7"
      ],
      "visualReview": {
        "sha256": "f0fda1cb5a7075aabdd2a4957cf585011bfe09438768e7fc659b77e311eb0b32",
        "status": "original-art-restored",
        "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
        "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [4]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "f3f0d9d1c46911f22338383f27a712eee67a2f60c6240782c9508cdb90570c84",
            "status": "needs-repair",
            "notes": "Run frames 6\u20137 shrink relative to 5/8; failed middle poses enlarge the body. Review poses lose normal costume rendering. Needs source-model and costume repair."
          },
          {
            "sha256": "c5abc3adba67edaf6b93ed511951e90ac95bf8fff77e5a2beaa8e2e24d985cf6",
            "status": "partially-repaired",
            "notes": "September 29: both runs, jump and failure recovery rebuilt and reviewed on one fixed-size model and joint rig. Other states unchanged and awaiting separate sign-off. Historical findings (only repaired-row findings superseded): Run frames 6\u20137 shrink relative to 5/8; failed middle poses enlarge the body. Review poses lose normal costume rendering. Needs source-model and costume repair."
          },
          {
            "sha256": "c5abc3adba67edaf6b93ed511951e90ac95bf8fff77e5a2beaa8e2e24d985cf6",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                4,
                5
              ],
              "report": "/qa/rumi/cycle-repair/rig3/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "8784f8978d4b3687beaa34a393bbbbfa7a790255b46fde6fa06e1f8c8c1922e1",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "f0fda1cb5a7075aabdd2a4957cf585011bfe09438768e7fc659b77e311eb0b32",
            "status": "original-art-restored",
            "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
            "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [4]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "seal",
      "sha256": "b7745f905f8cbe3275d36c42e631898e8b92f9d3a03fe784620614ac4df999e6",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 63,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "b7745f905f8cbe3275d36c42e631898e8b92f9d3a03fe784620614ac4df999e6",
        "status": "approved",
        "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
        "cycleReview": {
          "status": "approved-unchanged",
          "date": "2026-09-29",
          "rows": [
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8
          ],
          "report": "/qa/cycle-review/unchanged-reviews.json"
        },
        "cycleHistory": [
          {
            "sha256": "b7745f905f8cbe3275d36c42e631898e8b92f9d3a03fe784620614ac4df999e6",
            "status": "temporal-cycles-approved",
            "notes": "September 29: all nine temporal animation states reviewed at fixed scale and normal playback speed through at least two seams each; original seal wriggle, flippers, gestures and squash/recovery retained unchanged. Pointer-look poses are not covered by this approval: their apparent foreshortening/scale still needs separate inspection. Native Codex has not been restarted."
          }
        ],
        "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
      }
    },
    {
      "petId": "sharkkitty-calico",
      "sha256": "4d236a2e207511645cb1788fe2b9b240dc25c1aa3d278fe8ee6205d170f15b58",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "4d236a2e207511645cb1788fe2b9b240dc25c1aa3d278fe8ee6205d170f15b58",
        "status": "approved",
        "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
        "cycleHistory": [
          {
            "sha256": "14ff6463bce0ce80afb2cc17220ce1b84464d0280fd9a7416e0999615c57dcf8",
            "status": "needs-repair",
            "notes": "Left-run frame 7 contains detached-looking body fragments and changes volume. Compare it against the corresponding intact right-run pose before repairing the directional row; preserve the three coat variants."
          },
          {
            "sha256": "4d236a2e207511645cb1788fe2b9b240dc25c1aa3d278fe8ee6205d170f15b58",
            "status": "partially-repaired",
            "notes": "September 29: damaged left-facing slither replaced by an exact mirror of the intact right-facing cycle. Browser chronology, fixed-scale review and variant geometry passed. Other states unchanged and still require separate sign-off. Historical findings (left-run findings superseded): Left-run frame 7 contains detached-looking body fragments and changes volume. Compare it against the corresponding intact right-run pose before repairing the directional row; preserve the three coat variants."
          }
        ],
        "cycleReview": {
          "status": "repaired",
          "date": "2026-09-29",
          "rows": [
            2
          ],
          "report": "/qa/sharkkitty-calico/cycle-repair/mirror1/visual-review.json"
        },
        "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
      }
    },
    {
      "petId": "sharkkitty-gray",
      "sha256": "6bd23404fd8cd44f613a8b7df888227b5e510cd9ea9e9aba1adfd9ed709aadef",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "6bd23404fd8cd44f613a8b7df888227b5e510cd9ea9e9aba1adfd9ed709aadef",
        "status": "approved",
        "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
        "cycleHistory": [
          {
            "sha256": "1cd2521e1e391789c8ef6eb3443ba8fa6dcca5036350f5a3755d3cfa9700e599",
            "status": "needs-repair",
            "notes": "Left-run frame 7 contains detached-looking body fragments and changes volume. Compare it against the corresponding intact right-run pose before repairing the directional row; preserve the three coat variants."
          },
          {
            "sha256": "6bd23404fd8cd44f613a8b7df888227b5e510cd9ea9e9aba1adfd9ed709aadef",
            "status": "partially-repaired",
            "notes": "September 29: damaged left-facing slither replaced by an exact mirror of the intact right-facing cycle. Browser chronology, fixed-scale review and variant geometry passed. Other states unchanged and still require separate sign-off. Historical findings (left-run findings superseded): Left-run frame 7 contains detached-looking body fragments and changes volume. Compare it against the corresponding intact right-run pose before repairing the directional row; preserve the three coat variants."
          }
        ],
        "cycleReview": {
          "status": "repaired",
          "date": "2026-09-29",
          "rows": [
            2
          ],
          "report": "/qa/sharkkitty-gray/cycle-repair/mirror1/visual-review.json"
        },
        "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
      }
    },
    {
      "petId": "sharkkitty-tuxedo",
      "sha256": "b05418869e4ff26e71d913552f8b1427f7fee5e90f866d53764180247eaa83bd",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "b05418869e4ff26e71d913552f8b1427f7fee5e90f866d53764180247eaa83bd",
        "status": "approved",
        "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
        "cycleHistory": [
          {
            "sha256": "a3754b1fc15f6005496c483dbe600605eab89d5d133d5e97d11de5158e35a7d8",
            "status": "needs-repair",
            "notes": "Left-run frame 7 contains detached-looking body fragments and changes volume. Compare it against the corresponding intact right-run pose before repairing the directional row; preserve the three coat variants."
          },
          {
            "sha256": "b05418869e4ff26e71d913552f8b1427f7fee5e90f866d53764180247eaa83bd",
            "status": "partially-repaired",
            "notes": "September 29: damaged left-facing slither replaced by an exact mirror of the intact right-facing cycle. Browser chronology, fixed-scale review and variant geometry passed. Other states unchanged and still require separate sign-off. Historical findings (left-run findings superseded): Left-run frame 7 contains detached-looking body fragments and changes volume. Compare it against the corresponding intact right-run pose before repairing the directional row; preserve the three coat variants."
          }
        ],
        "cycleReview": {
          "status": "repaired",
          "date": "2026-09-29",
          "rows": [
            2
          ],
          "report": "/qa/sharkkitty-tuxedo/cycle-repair/mirror1/visual-review.json"
        },
        "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
      }
    },
    {
      "petId": "shock-trooper",
      "sha256": "597b1c60995ab0a5f7e661b6f58250578302588ae0f160df0e76af67ed9ae164",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "597b1c60995ab0a5f7e661b6f58250578302588ae0f160df0e76af67ed9ae164",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "f06912e9b3d1235da7b2a314c50e4479c5d063c5b3012d0d428674a36d4e03a6",
            "status": "needs-repair",
            "notes": "Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "2c25532900e5b9b123d67892098b1174aa85ec3fd9ee96d85816b04babfd06da",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Helmet scale is fairly stable through idle and locomotion, but failed frame 8 has an enlarged helmet/body compared with the opening pose. Review the shared family source and preserve matching variant geometry."
          },
          {
            "sha256": "2c25532900e5b9b123d67892098b1174aa85ec3fd9ee96d85816b04babfd06da",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/shock-trooper/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "space-marine",
      "sha256": "5e03f042c164031cea6cf4f9efde028d724c62b0a7f26fb2c84670967a7c3d53",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Look 2\u21923: duplicate frame",
        "Look 3\u21924: duplicate frame",
        "Look 10\u219211: duplicate frame",
        "Look 11\u219212: duplicate frame",
        "Look 14\u219215: duplicate frame",
        "Look 15\u219216: duplicate frame"
      ],
      "visualReview": {
        "sha256": "5e03f042c164031cea6cf4f9efde028d724c62b0a7f26fb2c84670967a7c3d53",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "19ba7d7e26a0bde8dab8bb387f9e4ddaf0a865d1da3afd2519c022cd4f078b04",
            "status": "needs-repair",
            "notes": "Idle and running are relatively consistent. Seated failed frames 4\u20138 enlarge the helmet/armor, particularly frame 8. Several look directions repeat exactly. Repair the base model before propagating changes to all six color variants."
          },
          {
            "sha256": "686511ff6b3698504ce5f26a4edd4ef37f243596dc70a262b7a2633843e47bf2",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Idle and running are relatively consistent. Seated failed frames 4\u20138 enlarge the helmet/armor, particularly frame 8. Several look directions repeat exactly. Repair the base model before propagating changes to all six color variants."
          },
          {
            "sha256": "686511ff6b3698504ce5f26a4edd4ef37f243596dc70a262b7a2633843e47bf2",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/space-marine/cycle-repair/rig5/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "space-marine-blood-angels",
      "sha256": "647039656285164e573b8e25683d968884af7275fe3d7e61175d3f696aa5f7d3",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 63,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Look 2\u21923: duplicate frame",
        "Look 3\u21924: duplicate frame",
        "Look 10\u219211: duplicate frame",
        "Look 11\u219212: duplicate frame",
        "Look 14\u219215: duplicate frame",
        "Look 15\u219216: duplicate frame"
      ],
      "visualReview": {
        "sha256": "647039656285164e573b8e25683d968884af7275fe3d7e61175d3f696aa5f7d3",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "de91f46060f8f8ca1d1fe01ab3b82f9d360030eb1c0fb51886bab5e2de02fa1b",
            "status": "needs-repair",
            "notes": "Idle and running are relatively consistent. Seated failed frames 4\u20138 enlarge the helmet/armor, particularly frame 8. Several look directions repeat exactly. Repair the base model before propagating changes to all six color variants."
          },
          {
            "sha256": "66b8d2d8d8fbc6ef27c5e5c567b57bd30ad495178d7f7c33605e446136a3c81a",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Idle and running are relatively consistent. Seated failed frames 4\u20138 enlarge the helmet/armor, particularly frame 8. Several look directions repeat exactly. Repair the base model before propagating changes to all six color variants."
          },
          {
            "sha256": "66b8d2d8d8fbc6ef27c5e5c567b57bd30ad495178d7f7c33605e446136a3c81a",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/space-marine-blood-angels/cycle-repair/rig1/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "space-marine-dark-angels",
      "sha256": "28197562b2ca581643a47d510c0640c4acc914dd941a1826a27ae4ee99f858eb",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 63,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Look 2\u21923: duplicate frame",
        "Look 3\u21924: duplicate frame",
        "Look 10\u219211: duplicate frame",
        "Look 11\u219212: duplicate frame",
        "Look 14\u219215: duplicate frame",
        "Look 15\u219216: duplicate frame"
      ],
      "visualReview": {
        "sha256": "28197562b2ca581643a47d510c0640c4acc914dd941a1826a27ae4ee99f858eb",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "249e430710bb660a2f4a3fc79d5534daa4d005c5933823798256791e4f82ad82",
            "status": "needs-repair",
            "notes": "Idle and running are relatively consistent. Seated failed frames 4\u20138 enlarge the helmet/armor, particularly frame 8. Several look directions repeat exactly. Repair the base model before propagating changes to all six color variants."
          },
          {
            "sha256": "f7d900c354308550225928e274da7208a8b85e820020a6d53a396fc9515af858",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Idle and running are relatively consistent. Seated failed frames 4\u20138 enlarge the helmet/armor, particularly frame 8. Several look directions repeat exactly. Repair the base model before propagating changes to all six color variants."
          },
          {
            "sha256": "f7d900c354308550225928e274da7208a8b85e820020a6d53a396fc9515af858",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/space-marine-dark-angels/cycle-repair/rig1/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "space-marine-imperial-fists",
      "sha256": "05ba3242d139c2a2b00a90dfcb52a3c51e378f5a05c334e28bc9879d6f621089",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 63,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Look 2\u21923: duplicate frame",
        "Look 3\u21924: duplicate frame",
        "Look 10\u219211: duplicate frame",
        "Look 11\u219212: duplicate frame",
        "Look 14\u219215: duplicate frame",
        "Look 15\u219216: duplicate frame"
      ],
      "visualReview": {
        "sha256": "05ba3242d139c2a2b00a90dfcb52a3c51e378f5a05c334e28bc9879d6f621089",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "b87bfcd9be971a1c586446dad6506b68d6146f29fd4adf0d21ee20db3541a3b1",
            "status": "needs-repair",
            "notes": "Idle and running are relatively consistent. Seated failed frames 4\u20138 enlarge the helmet/armor, particularly frame 8. Several look directions repeat exactly. Repair the base model before propagating changes to all six color variants."
          },
          {
            "sha256": "dabe8e4ab657b986e34f288d96e30e46089855da1f58474e9da8426399c39af4",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Idle and running are relatively consistent. Seated failed frames 4\u20138 enlarge the helmet/armor, particularly frame 8. Several look directions repeat exactly. Repair the base model before propagating changes to all six color variants."
          },
          {
            "sha256": "dabe8e4ab657b986e34f288d96e30e46089855da1f58474e9da8426399c39af4",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/space-marine-imperial-fists/cycle-repair/rig1/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "space-marine-salamanders",
      "sha256": "928be9a7b0d7e8320e10534c4ee85189dac53e0c6d9895a06dad263efe90c07a",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 63,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Look 2\u21923: duplicate frame",
        "Look 3\u21924: duplicate frame",
        "Look 10\u219211: duplicate frame",
        "Look 11\u219212: duplicate frame",
        "Look 14\u219215: duplicate frame",
        "Look 15\u219216: duplicate frame"
      ],
      "visualReview": {
        "sha256": "928be9a7b0d7e8320e10534c4ee85189dac53e0c6d9895a06dad263efe90c07a",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "76ec0c840b22915ce516a8ae04feeb37abeea59bd52fdaf764a19eb5b15b7312",
            "status": "needs-repair",
            "notes": "Idle and running are relatively consistent. Seated failed frames 4\u20138 enlarge the helmet/armor, particularly frame 8. Several look directions repeat exactly. Repair the base model before propagating changes to all six color variants."
          },
          {
            "sha256": "8d2a6cb78df27929c84bc2f1fe7fd890970b7b043626feaa5605d7623b20d5c8",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Idle and running are relatively consistent. Seated failed frames 4\u20138 enlarge the helmet/armor, particularly frame 8. Several look directions repeat exactly. Repair the base model before propagating changes to all six color variants."
          },
          {
            "sha256": "8d2a6cb78df27929c84bc2f1fe7fd890970b7b043626feaa5605d7623b20d5c8",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/space-marine-salamanders/cycle-repair/rig1/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "space-marine-space-wolves",
      "sha256": "686dab8d93fd80109fb56c69dffbe701b0cd650bb2afb6d523020601081dd0dd",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 63,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Look 2\u21923: duplicate frame",
        "Look 3\u21924: duplicate frame",
        "Look 10\u219211: duplicate frame",
        "Look 11\u219212: duplicate frame",
        "Look 14\u219215: duplicate frame",
        "Look 15\u219216: duplicate frame"
      ],
      "visualReview": {
        "sha256": "686dab8d93fd80109fb56c69dffbe701b0cd650bb2afb6d523020601081dd0dd",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "79dbf2cde10bceec5f369259e1824a7ce882e80c5ab27a290777051c6ad8221f",
            "status": "needs-repair",
            "notes": "Idle and running are relatively consistent. Seated failed frames 4\u20138 enlarge the helmet/armor, particularly frame 8. Several look directions repeat exactly. Repair the base model before propagating changes to all six color variants."
          },
          {
            "sha256": "e0ec2857055747d991f81b9f97945d052ac988cf0654e0b21478f019624dda84",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed on a fixed articulated model. Original identity, palette and all other rows preserved. Remaining states still require full playback sign-off. Historical findings (run/failure findings superseded): Idle and running are relatively consistent. Seated failed frames 4\u20138 enlarge the helmet/armor, particularly frame 8. Several look directions repeat exactly. Repair the base model before propagating changes to all six color variants."
          },
          {
            "sha256": "e0ec2857055747d991f81b9f97945d052ac988cf0654e0b21478f019624dda84",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/space-marine-space-wolves/cycle-repair/rig1/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "steve",
      "sha256": "ef5bb22b9d9b2a4d7fe95c5fcc273c4050f289e7a3a4cfa149ebf9d06adf929d",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Run left 3\u21924: area changes 1.46\u00d7",
        "Run left 4\u21925: area changes 1.44\u00d7",
        "Jump 4\u21925: area changes 1.35\u00d7"
      ],
      "visualReview": {
        "sha256": "ef5bb22b9d9b2a4d7fe95c5fcc273c4050f289e7a3a4cfa149ebf9d06adf929d",
        "status": "original-art-restored",
        "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
        "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [8]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "a6ac7db581bc3edc718ff1dd2e01478591d1b50af2e7cc298a7d687f35a16c43",
            "status": "needs-repair",
            "notes": "Left-run frames 4/8 are bulkier than neighboring poses. Failed seated poses enlarge the head; working 1/6 are smaller than 2\u20135 and review 3/4 enlarge the head. Multiple state-scale corrections remain."
          },
          {
            "sha256": "b684fc888b0d32eb7fb0366126e59ba9f0b6d23999cda91557205fb2b80d0458",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Approval covers both runs, failure, working and review only. Other states are unchanged and not newly approved. Historical findings (only repaired-row findings superseded): Left-run frames 4/8 are bulkier than neighboring poses. Failed seated poses enlarge the head; working 1/6 are smaller than 2\u20135 and review 3/4 enlarge the head. Multiple state-scale corrections remain."
          },
          {
            "sha256": "b684fc888b0d32eb7fb0366126e59ba9f0b6d23999cda91557205fb2b80d0458",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5,
                7,
                8
              ],
              "report": "/qa/steve/cycle-repair/rig7/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "62f7102f004a47a61d32b02208a4dc4f7fadd10e576e69517282fb0bb52e96fa",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "2f211934524f221ff7af0636a41eb5ea9488094bfc9686694900b4704593fbf6",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "2f211934524f221ff7af0636a41eb5ea9488094bfc9686694900b4704593fbf6",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "ababc82f2993e0689a5adea5db3eb5d44f4a40d784b5f2c1734c28783d5e9b9c",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "ababc82f2993e0689a5adea5db3eb5d44f4a40d784b5f2c1734c28783d5e9b9c",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Updated waiting/working using original character-specific source poses, removing replacement models or avoiding undersized action poses. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "ef5bb22b9d9b2a4d7fe95c5fcc273c4050f289e7a3a4cfa149ebf9d06adf929d",
            "status": "original-art-restored",
            "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
            "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [8]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "sun-wukong",
      "sha256": "132e87ea55c824b9249e4eb259f4fe22458f96c3a2df29fb4ab3878995b0dc75",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Failed 4\u21925: area changes 1.36\u00d7",
        "Failed 5\u21926: area changes 1.62\u00d7",
        "Look 6\u21927: duplicate frame",
        "Look 10\u219211: duplicate frame"
      ],
      "visualReview": {
        "sha256": "132e87ea55c824b9249e4eb259f4fe22458f96c3a2df29fb4ab3878995b0dc75",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "132e87ea55c824b9249e4eb259f4fe22458f96c3a2df29fb4ab3878995b0dc75",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Running uses a larger head than idle; failed frame 5 is oversized. Repeated look directions also need inspection. Preserve staff extent without changing character scale."
          },
          {
            "sha256": "3649dd8dc0445b571ca324c9c8d39475405bde191ddd77b8c809781f9272edc2",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Approval covers both runs, failure only. Other states are unchanged and not newly approved. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Running uses a larger head than idle; failed frame 5 is oversized. Repeated look directions also need inspection. Preserve staff extent without changing character scale."
          },
          {
            "sha256": "3649dd8dc0445b571ca324c9c8d39475405bde191ddd77b8c809781f9272edc2",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Running uses a larger head than idle; failed frame 5 is oversized. Repeated look directions also need inspection. Preserve staff extent without changing character scale.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/sun-wukong/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/sun-wukong/cycle-repair/rig4/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "t95e5",
      "sha256": "e744d496ee9c3982fb84b4192b4eb0101fb572c08ca66728eecea02429ac99ce",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "e744d496ee9c3982fb84b4192b4eb0101fb572c08ca66728eecea02429ac99ce",
        "status": "original-art-restored",
        "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
        "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [8]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "705009aebff302d51019899359ab1752242fb665798fea90eb1f17ff1f0a8cbf",
            "status": "needs-review",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): The tank hull appears smaller in working/jump/look states than idle. Compare the hull independently of turret orientation. Tracked motion is intentional; humanoid leg-cycle checks do not apply."
          },
          {
            "sha256": "81692f937ccad146661d951df64ed9afe840ea1931e4c3e7fcc9a204eff92c05",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Only the listed rows are approved. Untouched states are not newly approved. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): The tank hull appears smaller in working/jump/look states than idle. Compare the hull independently of turret orientation. Tracked motion is intentional; humanoid leg-cycle checks do not apply."
          },
          {
            "sha256": "81692f937ccad146661d951df64ed9afe840ea1931e4c3e7fcc9a204eff92c05",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "The tank hull appears smaller in working/jump/look states than idle. Compare the hull independently of turret orientation. Tracked motion is intentional; humanoid leg-cycle checks do not apply.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/t95e5/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                8
              ],
              "report": "/qa/t95e5/cycle-repair/rig4/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "9d3673125137229c90a2a98552497dbb59b204fe373422ce5a1b2df5da2646f2",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "09762200307cf16a38d70105dd77a4f31cafba3a1d3de4f43ee70c89a29ccaa7",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "09762200307cf16a38d70105dd77a4f31cafba3a1d3de4f43ee70c89a29ccaa7",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "09762200307cf16a38d70105dd77a4f31cafba3a1d3de4f43ee70c89a29ccaa7",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Updated waiting/working using original character-specific source poses, removing replacement models or avoiding undersized action poses. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "e744d496ee9c3982fb84b4192b4eb0101fb572c08ca66728eecea02429ac99ce",
            "status": "original-art-restored",
            "remainingRecovery": "/qa/source-cycles-20261001/repairs.json",
            "notes": "Removed every remaining replacement-model cycle. Original character pixels and frame order restored in rows [8]. All other cycles and pointer anchors preserved. Whole-library source regression inventory covers 450 cycles; source provenance is not a blanket motion approval."
          }
        ]
      }
    },
    {
      "petId": "vex",
      "sha256": "8b63d4f789428518328c9f36c2f06827631e3abf6d160955d5b7ef7f7e4f32d1",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [],
      "visualReview": {
        "sha256": "8b63d4f789428518328c9f36c2f06827631e3abf6d160955d5b7ef7f7e4f32d1",
        "status": "original-art-restored",
        "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
        "cycleHistory": [
          {
            "sha256": "8b63d4f789428518328c9f36c2f06827631e3abf6d160955d5b7ef7f7e4f32d1",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Jump entry/exit and failed frames 4\u20135 shrink the head/body instead of only changing posture. Preserve the model through airborne and crouched states."
          },
          {
            "sha256": "ec6d317f21f1f50093361203229fac5086082aaa1658c5b6c919bd3b83ec808b",
            "status": "partially-repaired",
            "notes": "September 29: both run directions and failure recovery rebuilt and reviewed using locked character parts and fixed-length joints. Other states remain unchanged and still require separate sign-off. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Jump entry/exit and failed frames 4\u20135 shrink the head/body instead of only changing posture. Preserve the model through airborne and crouched states."
          },
          {
            "sha256": "ec6d317f21f1f50093361203229fac5086082aaa1658c5b6c919bd3b83ec808b",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Jump entry/exit and failed frames 4\u20135 shrink the head/body instead of only changing posture. Preserve the model through airborne and crouched states.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/vex/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5
              ],
              "report": "/qa/vex/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          }
        ],
        "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
      }
    },
    {
      "petId": "zoey",
      "sha256": "c6ebff845f3809d87de25b729e01a10152e31aad2ee862fe92dc31496ab064d2",
      "spriteVersion": 2,
      "frameCount": 74,
      "palette": 64,
      "geometryPassed": true,
      "failures": [],
      "reviewSignals": [
        "Run right 6\u21927: area changes 1.55\u00d7",
        "Run right 7\u21928: area changes 1.58\u00d7",
        "Run right 8\u21921: area changes 1.52\u00d7",
        "Run left 6\u21927: area changes 1.55\u00d7",
        "Run left 7\u21928: area changes 1.58\u00d7",
        "Run left 8\u21921: area changes 1.52\u00d7",
        "Failed 2\u21923: area changes 1.53\u00d7",
        "Failed 3\u21924: area changes 1.49\u00d7",
        "Failed 7\u21928: area changes 1.60\u00d7",
        "Working 1\u21922: area changes 1.35\u00d7"
      ],
      "visualReview": {
        "sha256": "c6ebff845f3809d87de25b729e01a10152e31aad2ee862fe92dc31496ab064d2",
        "status": "original-art-restored",
        "actionRepair": "/qa/character-actions-20260930/repairs.json",
        "notes": "Updated waiting/working using original character-specific source poses, removing replacement models or avoiding undersized action poses. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval.",
        "cycleHistory": [
          {
            "sha256": "6bb7543ffb8e0c663a12c7f1e59095ec2e491700e6cfbce832bf67bea06ca379",
            "status": "needs-repair",
            "notes": "Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run frames 6/8 shrink around frame 7; working frames 1/6 shrink relative to frame 4. Review poses lose costume fill/detail. Needs anatomy and costume consistency repair."
          },
          {
            "sha256": "7435dc44ee2130208ddaca0a51ada334b1d4d8e175110ac42bb4d69d2e8be454",
            "status": "partially-repaired",
            "notes": "September 29 scoped repair: Approval covers both runs, failure recovery and working only. All other states, including any prior jump repair, are preserved and not newly approved. Historical findings (only repaired-row findings superseded): Jump repaired on September 28: locked-model sequence, shared scale, stable anatomy and a connected jump arc. Only the five jump frames changed. Historical audit (jump findings below are superseded; other-state findings remain open): Run frames 6/8 shrink around frame 7; working frames 1/6 shrink relative to frame 4. Review poses lose costume fill/detail. Needs anatomy and costume consistency repair."
          },
          {
            "sha256": "7435dc44ee2130208ddaca0a51ada334b1d4d8e175110ac42bb4d69d2e8be454",
            "status": "approved",
            "notes": "All nine temporal states and available pointer-look directions reviewed at fixed scale; native-timing browser playback passed two seams for every state. Historical findings are retained in cycleHistory. Native Codex restart remains unverified.",
            "previousNotes": "Run frames 6/8 shrink around frame 7; working frames 1/6 shrink relative to frame 4. Review poses lose costume fill/detail. Needs anatomy and costume consistency repair.",
            "jumpReview": {
              "status": "repaired",
              "date": "2026-09-28",
              "report": "/qa/zoey/jump-repair/jump-audit.json"
            },
            "cycleReview": {
              "status": "repaired",
              "date": "2026-09-29",
              "rows": [
                1,
                2,
                5,
                7
              ],
              "report": "/qa/zoey/cycle-repair/rig2/visual-review.json"
            },
            "fullLibraryReview": "/qa/cycle-review/final-20260929/visual-review.json"
          },
          {
            "sha256": "16541d7bffe233608b714da6cbd039fc3a30d29a734919f821ee93a2c90170b2",
            "status": "original-art-restored",
            "notes": "September 30: rejected the replacement run/failure models. Restored original source pixels in rows 1, 2 and 5, with source-pose recovery where recorded. No redraw or rescale. Other states unchanged. Original source-art limitations remain; the prior blanket motion approval is withdrawn.",
            "restoration": "/qa/cycle-review/restoration-20260930/restoration.json"
          },
          {
            "sha256": "c6ebff845f3809d87de25b729e01a10152e31aad2ee862fe92dc31496ab064d2",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "c6ebff845f3809d87de25b729e01a10152e31aad2ee862fe92dc31496ab064d2",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          },
          {
            "sha256": "c6ebff845f3809d87de25b729e01a10152e31aad2ee862fe92dc31496ab064d2",
            "status": "original-art-restored",
            "actionRepair": "/qa/character-actions-20260930/repairs.json",
            "notes": "Restored original character-specific waiting/working source poses after the replacement-model regression. Run/failure recovery preserved. Original action pose limitations remain; no blanket motion approval."
          }
        ]
      }
    }
  ]
}
