Skip to content

[agency] Harden CLJS gaze agency around worker-safe target planning #6

Description

@meekmachine

Goal

Finish Gaze as a ClojureScript planner that owns gaze target/config state and emits scheduled eye/head snippets, while all sensor capture and Loom3 mutation stay host-side.

Current state

Polyester already has src-cljs/latticework/gaze.cljs, in-process exports, and worker client methods. It smooths normalized targets and emits stable eye/head tracking snippets. The remaining work is parity, lifecycle hardening, and making the worker boundary canonical.

This mirrors the Latticework research issue: meekmachine/Latticework#32.

Clojure-way direction

  • Main thread normalizes mouse/webcam/camera input into plain {x, y, z, t} target messages.
  • CLJS owns mode/config state, smoothing, coalescing, min-delta, return-to-neutral, and serializable snippet construction.
  • Worker outputs animation commands only; it must not call transitionContinuum, engine.transitionAU, or any Loom3/DOM API.
  • Keep API compatibility for setTarget, schedule, resetToNeutral, stop, and config updates.

Acceptance criteria

  • Gaze worker accepts plain target/config messages and emits serializable outputs for eye yaw, eye pitch, head yaw, head pitch, and head roll.
  • Output snippets preserve stable names and inherited first frames so gaze can mix with other animation snippets.
  • Return-to-neutral emits a real scheduled neutral target and clears active state.
  • No worker code references DOM, window, navigator, Three objects, or Loom3 engine APIs.
  • Add parity tests for smoothing, min-delta suppression, mirrored input, head-follow toggle, reset-to-neutral, and stop/remove outputs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions