From 8c6437b4cf7d4b61817dbba26d7848dbd4e7d482 Mon Sep 17 00:00:00 2001 From: a-baran-orhan Date: Thu, 16 Jul 2026 20:14:22 +0300 Subject: [PATCH] Remove em dashes from UI copy --- packages/posecode-language/src/hover.ts | 2 +- packages/posecode-language/src/vocab.ts | 6 +++--- playground/index.html | 2 +- playground/play.html | 2 +- playground/public/spec.html | 2 +- spec/SPEC.md | 2 +- video/cut2/index.tsx | 6 +++--- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/posecode-language/src/hover.ts b/packages/posecode-language/src/hover.ts index 7872f0a..3f175ff 100644 --- a/packages/posecode-language/src/hover.ts +++ b/packages/posecode-language/src/hover.ts @@ -74,7 +74,7 @@ export function getHover( if (KINDS.includes(token)) return md(`Movement kind **${token}**.`); if (POSES.includes(token)) return md(`Start pose **${token}**.`); if ((MODES as readonly string[]).includes(token)) { - return md(`**${token}** — ${KEYWORD_DOCS[token] ?? "timing mode"}`); + return md(`**${token}**: ${KEYWORD_DOCS[token] ?? "timing mode"}`); } return null; } diff --git a/packages/posecode-language/src/vocab.ts b/packages/posecode-language/src/vocab.ts index 9094ae2..febb4c5 100644 --- a/packages/posecode-language/src/vocab.ts +++ b/packages/posecode-language/src/vocab.ts @@ -46,9 +46,9 @@ export const KEYWORD_DOCS: Record = { step: 'A movement phase: `step "" :` where mode is flow | settle | drive | snap | linear.', flow: "Timing mode: pass through this pose with continuous velocity (flowing motion).", settle: "Timing mode: decelerate to a genuine rest at this pose (a deliberate pause).", - drive: "Timing mode: accelerate from rest — the concentric effort of a rep.", - snap: "Timing mode: fast, near-immediate arrival — an accent.", - linear: "Timing mode: constant velocity — intentionally mechanical.", + drive: "Timing mode: accelerate from rest, like the concentric effort of a rep.", + snap: "Timing mode: fast, near-immediate arrival with an accent.", + linear: "Timing mode: constant velocity; intentionally mechanical.", repeat: "How many times the movement loops.", "ground-lock": "Keeps grouped, per-side, or axial contacts on the floor: `feet`, `foot_left` (also `left foot`), `hands`, `forearms`, or `back` for supine work. Planted feet auto-level unless intentionally plantarflexed.", reach: diff --git a/playground/index.html b/playground/index.html index 81d6f00..f6ff92d 100644 --- a/playground/index.html +++ b/playground/index.html @@ -152,7 +152,7 @@

Turn readable instructions into precise 3D movement. Build exercises, - stretches, dance phrases, and rehab routines—then edit every beat live in + stretches, dance phrases, and rehab routines, then edit every beat live in the browser.

diff --git a/playground/play.html b/playground/play.html index 4ac9bea..a22c112 100644 --- a/playground/play.html +++ b/playground/play.html @@ -112,7 +112,7 @@
- Make something move. Pick a movement or edit the instructions—the + Make something move. Pick a movement or edit the instructions; the figure updates as you type. diff --git a/playground/public/spec.html b/playground/public/spec.html index 8f140e3..4d25e91 100644 --- a/playground/public/spec.html +++ b/playground/public/spec.html @@ -215,7 +215,7 @@

5. Rendering model

  1. Reach-IK: a reach: line drives an effector (`hand_left|hand_right|

foot_left|foot_right, or the groups hands/feet for both sides) to a world target via Cyclic Coordinate Descent (CCD) over the arm/leg chain. A target is a body landmark bone (e.g. ankle_left), the keyword floor, or a prop anchor (bar, seat, wall`). The solve is ROM-constrained: each iteration clamps every chain joint into its §4 Range-of-Motion limits (expressed as a per-axis box in the bone's local Euler frame), so a reach toward an unsafe or unreachable target settles on the closest *healthy* pose; solved angles obey the same hard limits as authored ones.

  1. Props: prop chair|wall|bar|box|dip-bars adds a scene object at a
-

fixed default placement (chair/wall behind, bar overhead, box in front, dip bars either side); its named anchors (seat, wall, bar, box, bars) become reach/pin targets. Props are solid: each prop declares blocking faces (the wall's surface, the chair's backrest and seat edge, the box's near face) and a contact pass removes any body overlap — either by translating the whole figure out along the face normal (a wall-sit slides down the wall's *surface*, feet walking forward, instead of the torso hinging through the slab) or by bending the offending limb's hip clear, ROM-clamped like every other solve. Limbs pinned, gripped, or reached to a prop anchor are that phase's declared support and are exempt (a foot standing on the box top is not "inside" the box).

+

fixed default placement (chair/wall behind, bar overhead, box in front, dip bars either side); its named anchors (seat, wall, bar, box, bars) become reach/pin targets. Props are solid: each prop declares blocking faces (the wall's surface, the chair's backrest and seat edge, the box's near face) and a contact pass removes any body overlap: either by translating the whole figure out along the face normal (a wall-sit slides down the wall's *surface*, feet walking forward, instead of the torso hinging through the slab) or by bending the offending limb's hip clear, ROM-clamped like every other solve. Limbs pinned, gripped, or reached to a prop anchor are that phase's declared support and are exempt (a foot standing on the box top is not "inside" the box).

  1. Pins: pin: <effector> <anchor> translates the whole figure so the

effector sits on the anchor (effectors accept the same hands/feet groups as reach: pin: hands bar pins both). Where ground-lock keeps a foot on the floor and reach moves a limb to a target, a pin moves the body while the contact stays put, so the figure hangs from a bar, pulls up toward it, rises onto a box, or lowers into a dip as the joints work. Symmetric bar contacts resolve to side-specific anchors automatically (bar.left / bar.right, bars.left / bars.right). Contact post-processing also keeps floor-contacting soles level and gives bar-contacting wrists a stable overhand orientation; existing Posecode syntax remains unchanged.

  1. Spatial choreography: turn: <deg> rotates the figure's facing (yaw
diff --git a/spec/SPEC.md b/spec/SPEC.md index a35e85a..3f13320 100644 --- a/spec/SPEC.md +++ b/spec/SPEC.md @@ -168,7 +168,7 @@ research §5.1 normative tables. Selected ceilings (degrees): dip bars either side); its named anchors (`seat`, `wall`, `bar`, `box`, `bars`) become reach/pin targets. Props are **solid**: each prop declares blocking faces (the wall's surface, the chair's backrest and seat edge, - the box's near face) and a contact pass removes any body overlap — either + the box's near face) and a contact pass removes any body overlap: either by translating the whole figure out along the face normal (a wall-sit slides down the wall's *surface*, feet walking forward, instead of the torso hinging through the slab) or by bending the offending limb's hip diff --git a/video/cut2/index.tsx b/video/cut2/index.tsx index 3d4b874..b174b57 100644 --- a/video/cut2/index.tsx +++ b/video/cut2/index.tsx @@ -197,7 +197,7 @@ const Result = () => {
- It renders — safe, 60fps. + It renders safely at 60fps. ; }; @@ -212,7 +212,7 @@ const Mcp = () => { ]; return
- +
{entries.map(([a,b], i) =>
{a} 1 ? C.lime : C.muted}}>{b}
)}
@@ -336,7 +336,7 @@ const VerticalCut2 = () => {
60 FPS
} {beat === 4 &&
-
$ npx posecode-mcp
● connected
→ authoring_guide
→ validate_posecode safe ✓
→ render_posecode ready ✓
+
$ npx posecode-mcp
● connected
→ authoring_guide
→ validate_posecode safe ✓
→ render_posecode ready ✓
} {beat === 5 &&
<script
src="https://unpkg.com/
posecode-embed/dist/
posecode-embed.js"
></script>
<posecode-player
src="/movements/
squat.posecode"
></posecode-player>