Principle

GuardrailsProposed — not confirmed yet.

Eight rules nobody can change. Breaking one reads as broken, misunderstood or unsafe.A violation is corrected automatically and the user is told.

MUST guardrails

The IDs and check expressions are proposed. Thresholds such as cv 0.1 are set in the simulator.

gr.triggerTrigger and forbidProposedEvery behavior has a trigger and a forbid condition.
Check (proposed)trigger != null && forbid_when != null
gr.no_irregular_tremorNo irregular tremorProposedRepeats keep an even interval.
Check (proposed)cv(interval) <= 0.1
gr.amp_limitSize limitProposedROM 40% by default, 70% at most.
Check (proposed)amp_pct_rom <= 70
gr.one_meaningOne meaningProposedConfusable pairs differ in at least one of direction, start pose or timing.
Check (proposed)diff(axis, start_pose, timing) >= 1
gr.negative_two_channelsNegative = two channelsProposedNegative emotion uses 2+ channels including face or sound.
Check (proposed)valence<0 → channels>=2 && (face||sound)
gr.end_holdEnd holdProposedPointing, closing and other signals hold 0.3–0.5 s at the end point.
Check (proposed)hold_end_ms >= 300
gr.repeat_max_2Repeat twiceProposedTwo repeats at most, then back to rest.
Check (proposed)count(repeat) <= 2
gr.response_timeResponse timeProposedNo silence over 1 s; within 0.1 s for safety.
Check (proposed)idle_gap_ms <= 1000, safety_latency_ms <= 100

On violation

MUST is HARD: the generator fixes the motion itself and tells the user what changed.

CheckAfter generation
CorrectClamp · insert · cut · scale down
NotifyThe user sees what changed
Nobody can change a MUST — not the style, not the designer.

MUST and SHOULD

Auto-correctNotify
HARD
MUSTBreaking it reads as broken, misunderstood or unsafe. Nobody can change it.
DefaultRange
SOFT — warning outside the range
SHOULDA default and an allowed range. Style moves only inside the range; a designer may go outside with a warning.