v0.7.9 — the Crab comes alive
The Crab's load states now move like distinct actions instead of rigid variations of one sprite. Every cycle has readable anticipation, action, hold and recovery while keeping the tiny menu-bar silhouette intact.
Changed
- Sleep breathes in place. The feet stay planted, the face and crown move together, and the Zs drift across the loop.
- Permission waits on purpose. Only the watch claw rises, the watch hand advances, and the Crab looks from the watch back to the screen.
- The cigar scene has a complete gesture. The cigar-side claw lifts, the ember reacts and smoke travels upward before the pose settles.
- High load has real escalation. Overheating pants and sweats; fire alternates its flailing claws beneath changing flame heights.
- The original twenty-frame run stays untouched for the normal two-to-three-session load.
Fixed
- The head and claws stay attached. Squash-and-stretch grows from the connected shell instead of moving a rectangular layer, both claw hinges retain their roots, and every non-walking cycle keeps all four feet planted.
- Loops close cleanly. Each mood includes readable holds and returns to its resting body pose before restarting.
Verified with 139 Python tests, 30 Node tests, the complete Swift model suite, direct lossless runtime-frame inspection, and a universal arm64 + x86_64 app build.
The DMG is not notarized because the project does not yet have a Developer ID certificate. On first launch, right-click the app and choose Open, or allow it in System Settings > Privacy & Security. The plugin channel and the in-app source update are unaffected.