Back to Body Journal
SOURCE / PINNED RELEASE

Made of little things.

Body Journal

Release
e8049f8da4e2…
Author-recorded commit
61c04bf0e8aa…
License
LICENSE
Author’s source reference
nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-6c4554844c7

Archive hash verified: 4369d778da046a8b…. The source-to-build association is the author’s claim; it has not been independently rebuilt.

docs/finger-posing.md
# Individual finger posing

Extend the existing body journal with per-finger illustration controls on both
hands. Reuse the bundled skin rig, skeleton and muscle meshes. No new NAP domains,
requires, dependencies, network operations or assets are needed. Optional SDK
storage persists the state; without storage the controls work in memory.

Keep the white, off-black and red-orange interface. A Fingers button opens an
inline editor alongside the focused hand. Visibility is controlled separately by
the anatomy checkboxes; opening the editor does not reveal hidden parts. Choose hand and finger,
adjust three bend controls, reset the finger or open the hand. On compact screens
the heading and body presets yield space to this editor; short landscape frames
place it beside the model. Controls support touch and keyboard. Keep the existing
minimum-size notice and app-owned palette in both host themes.

Store bounded, normalized bends separately from limb Euler rotations: ten known
digit IDs, each with three values from zero to one. Omitted values mean the rig's
open rest pose. Older records remain readable. Save per observation and in the
working session even before a mark is added. Changing a body preset preserves
finger bends. Changing observations restores that observation's own hand pose.

Bend axes follow the rest palm frame and mirror between hands; thumb controls
drive its metacarpal and two phalanges. Values are illustration controls, not
measured clinical angles, mobility limits or inferred symptoms. This slice does
not implement spread, thumb opposition or contact/collision simulation.

Text summaries name the bent finger and joints. Image capture applies each
observation's full pose and restores the working pose afterward. Mesh topology
and painted triangle addresses remain stable. Verify independent joints, mirrored
curl direction, skin/bone/mark alignment, shape changes, legacy validation,
reload, evidence capture and responsive touch controls in the hosted preview.

## Implementation and asset correction

`finger-pose.ts` owns the bounded record and language; `finger-rig.ts` applies
the palm-relative rotations; `hand-controls.ts` owns the inline editor. Existing
scene, observation, session and image-capture paths carry these records. Session
state also preserves whether a new observation was being prepared. The body
preset buttons retain finger bends; older observations default to open hands.

The source exporter matched “middle phalanx” before the ring/little digit name.
Four middle segments therefore followed the middle finger. Fitting revision 4
corrects those drivers after the existing reduction step. Compared with the
previous committed asset, only those four structures' positions changed; all
238 structures retain their vertex counts, triangle counts and index arrays.
The skeleton remains `bp3d-skeleton-1`; source license and attribution are retained.

Hand regions now focus across skin, skeleton and muscles. The hand envelope sets
the camera framing so a long forearm tendon cannot pull the focus away from the
hand. Soft-tissue deformation and cut region borders remain approximate.

## Verification — 25 October 2026

- `pnpm verify`: 65 tests passed, plus type-check and single-file build.
- `pnpm test:conformance`: 5 passed, 0 failed, 5 skipped. No manifest event,
  emitted wire envelopes or lifecycle measurement was supplied to that runner.
- `soyli check`: passed, space-playback-6 / Chromium 153.0.8010.12.
  Source size: 34,239,281 bytes within the 40 MiB budget. HTML: 18,164,493 bytes;
  SHA-256 `3d2e58241af1b9d90528472b226303a9000337748c7919faade7a64357076bad`.
- `tests/fingers-smoke.mjs`: per-joint editing, per-finger and per-hand reset,
  working pose before marking, independent observations, preset preservation,
  actual SDK storage/reload, three hand layers, summary text, evidence images
  and restored working pose passed. No provider request was sent.
- Editor checked at actual 200×160, 320×560, 900×600 and 1600×1000 frame sizes
  in both explicit host themes. The harness removes the host iframe minimum
  height for the 160-pixel check. Inspected captures and evidence sheets in
  `.napplet-space/finger-checks/`. White/off-black/orange colors remain intact.
- Touch emulation passed at 390×844 and 844×390, including a real slider tap,
  reset and orientation change. Optional storage/config/theme absence retains
  functioning controls with session-only feedback. Physical phones and clinical
  range of motion have not been validated.
- Existing layer and app browser suites passed: all four layers, independent
  poses, painting, IK, connection/session persistence, responsive forms and
  missing-domain fallbacks. The app smoke test now checks the actual accent
  variable instead of an obsolete palette token.

No new preview process, external asset download, publication or deployment.
The existing user-owned preview remains at http://127.0.0.1:4173/ (PID 59819).
Stop its owning terminal with Ctrl+C when finished.

## Direct manipulation

Fingers now opens Pose mode. Small shaded balls mark wrist/ankle endpoints and,
in sufficiently close hand views, each fingertip. Focusing one hand filters out
opposite-hand handles. Drag in the fixed camera-facing plane or focus a ball and
use arrow keys (Shift for smaller steps). Bounded hinge IK moves only the selected
digit and updates the sliders; two seeds avoid the straight-chain singularity.
The approximate distal tip extension follows the existing three-joint finger rig.
Handles are DOM overlays and never enter AI image captures. Existing surface-drag
limb posing remains available. The working joint pose now persists independently
of observations. See [current verification](anatomy-controls-slice.md).