Skip to content

Colliders v2 + edit-mesh pro + physics nodes (CL-A/B/C) - #74

Merged
AlexZ005 merged 6 commits into
release/nextfrom
feature/colliders-v2-editmesh-pro
Jul 31, 2026
Merged

Colliders v2 + edit-mesh pro + physics nodes (CL-A/B/C)#74
AlexZ005 merged 6 commits into
release/nextfrom
feature/colliders-v2-editmesh-pro

Conversation

@AlexZ005

Copy link
Copy Markdown
Collaborator

Feature lane merged with release/next (v1.1.0 icon system + migration Part A) before landing:

  • CL-A colliders v2 core: spec + live rebuild + sensors + materials + freeze + gravity + viz + custom compound editing
  • CL-B edit mesh pro: inset fix, face wireframe, Face/Tri/Shell granularity, subdivide/flip/weld/bridge, floating toolbar redesign
  • CL-C physics nodes: collider override, on-enter/exit triggers, velocity readout
  • mesh sculpt: terrain-style brush on any mesh + floating sculpt toolbar
  • merge notes: App.svelte debug hook unioned (collider libs + trackpadNav); MeshEditPopup kept this branch's floating-toolbar redesign (supersedes main's lucide pass on the old strip; no icon classes in the redesign)
  • verification on the merged tree: build green, svelte-check 438/62, all 7 feature suites pass (collider-custom/live/viz, editmesh-focus/mode-memory, flow-physics-collider, mesh-sculpt) against three 0.185

🤖 Generated with Claude Code

AlexZ005 and others added 6 commits July 29, 2026 00:14
… freeze + gravity + viz + custom compound editing (CL-A)

- colliderSpec.js: ONE source of truth for collider shapes (measure, hull
  verts, custom compound pieces) - consumed by BOTH physics and the viz
- physics.js: spec-driven collider construction placed relative to the
  CURRENT body pose; rebuildColliders/physicsShapeChanged rebuild a body's
  collider set MID-SIM (no restart, joints/velocity survive); liveParamsJson
  widened to collider/sensor/freeze/material/mass; per-piece mass split
- sensors (userData.physics.sensor): setSensor colliders, pass-through, both
  directions collected per pair; fireObjectEnter/fireObjectExit dispatch in
  flowRuntime (replicated nodetrigger stamps; nodes land in CL-C)
- physics material presets (ice/rubber/wood/metal) + Inspector Material
  select above the Bounciness/Friction sliders
- freeze axes (userData.physics.freeze rx/ry/rz/px/py/pz) via
  setEnabledRotations/Translations + Inspector lock rows (dynamic only)
- scene gravity: scenePhysics.js replicated latest-wins singleton
  (scenephysics msg + handshake push), applied at world create AND live;
  Inspector scene Physics gravity slider + reset
- collider viz: colliderHelpers.js (lightHelpers pattern) - scene-root
  wireframe proxies from the SAME spec, green/amber(sensor), global
  showColliders (local pref) + per-object union, per-frame follow, hidden
  in wireframe view mode
- custom compound colliders: colliderEdit.js proxy session runs the real
  Edit Mesh tool on a scene-root proxy (edit-proxy lookup fallback in
  faceEdit/meshEdit; peer messages no-op); + Box/Sphere piece; Done splits
  SHELLS (shellsOfTris union-find, shared with CL-B) -> colliderVerts/
  colliderPieces (1200-float cap) -> one convexHull piece per shell on one
  body; Inspector collider select gains Custom (edit...)
- MeshEditPopup: collider-session banner state (add piece / Done / Cancel)
- suites: collider-viz (13), collider-live (11), collider-custom (13) all
  green; regressions physics-colliders/particles-impact/mesh-edit-popup/
  novr-inset/desktop-face-gizmo green (terrain-sculpt = env-gated two-peer)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ubdivide/flip/weld/bridge + floating toolbar (CL-B)

- B1 inset interaction fix: the seated MOVE gizmo intercepted the next face
  click (dragging||axis guard) so click 2 of an armed inset RIGID-MOVED the
  face - the gizmo now seats ONLY for the Move op (Scene click path, setFaceOp
  arms detach, enterFaceEdit restore gated); regression in mesh-ops suite
- B2 face-mode wireframe: shared buildEditWireframe + meshEditWireframe
  display toggle (local pref, honored by BOTH modes, live mid-session);
  face overlay rebuilds on every geometry swap (commit/gesture/remote/undo)
- B3 granularity Face / Triangle / Shell: 'polygon' RENAMED to triangle
  (legacy value migrates at read time - VR suites untouched), shell = the
  connected island via shellsOfTris; setFaceGranularity 3-state +
  toggleFaceGranularity cycles (VR menu label shows Face/Triangle/Shell)
- B4 topology ops: subdivide (each target tri -> 4 via welded edge
  midpoints), flip (winding reversal), weld (vertex multi-selection -> its
  centroid, ONE meshgeo undo entry - a verts entry can't hold per-handle
  befores), bridge (exactly two multi-selected faces: ordered boundary
  loops, equal-count gate, closest-pair anchor + untwist direction pick,
  outward-wound wall quads; watertight on separated shells)
- B5 toolbar redesign: MeshEditPopup rebuilt as a FLOATING draggable
  segmented toolbar (dragWindow key meshEditToolbar, runes mode) - mode /
  granularity+multi / ops / display / done segments, keyboard shortcuts
  (E I G S B F X, W weld) active only while mounted, contextual amount row,
  collider-session banner preserved; all suite element ids kept
- mesh-ops suite (17 checks): inset regression, wireframe toggle,
  granularity picks + legacy migration, subdivide 4x, flip, watertight
  bridge, shell pick, weld + undo; desktop+VR face suites all green

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… toolbar

- terrainSculpt gains a MESH mode (sculptMode store): weld by full xyz
  position (split copies never tear), tri-adjacency neighbors, brush
  displaces welded verts along their averaged NORMAL - raise/lower along
  normals, flatten pulls to the hit tangent plane, smooth = Laplacian
  relax toward neighbor average; same smoothstep falloff constants
- entry: object context menu 'Sculpt mesh' on any mesh (Terrain keeps its
  column brush + 'Sculpt terrain'); 45k-float meshgeo cap gates entry
- same netcode as terrain: non-indexed conversion synced on entry,
  throttled meshgeo previews, ONE snapshot + undo per stroke
- weld caches carry the position-attribute identity - a same-tick brush
  after a remote/undo meshgeo swap can never hit a stale cache (the async
  rebuild hook alone left a gap)
- brush cursor ring orients to the surface normal in mesh mode
- SculptToolbar rebuilt as a FLOATING draggable toolbar (dragWindow key
  sculptToolbar) matching the mesh-edit toolbar language; titles the mesh
  vs terrain session
- mesh-sculpt suite (13 checks): mode flip, floating toolbar, normal
  raise + falloff, one-undo stroke, smooth relax, welded no-tear, meshgeo
  replication spy, exit, terrain routing

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…locity readout (CL-C)

- collider node (Physics group): shape box/sphere/capsule/cylinder/hull/
  custom/object + scale + sensor toggle; consumed by collectParams and WINS
  over the Inspector pick (the mass precedent); shape 'object' hulls the
  geometry of the Object Selector wired into its source handle
  (colliderSpecOf gains sourceObject/scale options); node edits re-apply
  LIVE mid-sim through the CL-A widened liveParams -> collider rebuild
- onenter / onexit nodes (Triggers group): pulse on the CL-A sensor
  overlap edges - same replicated nodetrigger stamps + BFS/implicit-owner
  targeting as onimpact; OnClickNode card reused with sensor copy
- velocity node (Scene group): live speed (m/s) of the wired object (or
  the graph owner) - LOCAL objectSpeeds feed: exact-ish per-step
  write-back deltas on the initiator, ~10Hz move-delta approximation on
  peers (documented on the card), 0 when the feed goes quiet
- AnimationNode gains a reusable 'toggle' param kind; new ColliderNode /
  VelocityNode cards; flowSockets INPUT/OUTPUT typed for all four
- NODES.md rows for collider / onenter+onexit / velocity
- flow-physics-collider suite (9 checks) all green: node overrides
  Inspector shape, live mid-sim shape swap, object-source hull, sensor
  pass-through + enter/exit stamps, velocity >0 rolling / 0 quiet;
  regressions flow-audit/flow-new-nodes/particles-impact/physics-colliders/
  collider-live green (flow-nodes-core + flow-physics-nodes = env-gated
  two-peer suites, no local signaling)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…d_value crash

- 'bind:hex={undefined}' on a prop WITH a fallback hard-errors since the
  svelte 5.56 safe-bump (props_invalid_value) - the uninitialized fogColor
  state CRASHED the entire scene drawer on open (badge, environment,
  physics, view sections all gone; inspector.test scene checks failing)
- pre-existing on release/1.1 (reproduced with the base Inspector.svelte);
  surfaced here because the scene Physics section hosts the new gravity UI
- applyFog/fog inputs already defaulted fogColor ?? '#ffffff' - the
  initializer matches, no behavior change beyond not crashing
- inspector suite back to ALL PASS (17 checks)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nto colliders-v2-editmesh-pro

Conflicts: App.svelte debug hook (union: collider libs + trackpadNav);
MeshEditPopup.svelte taken from THIS branch (the CL-B floating-toolbar
redesign supersedes main's lucide pass on the old pinned strip; the redesign
uses no icon classes, so nothing to reconvert).
@AlexZ005
AlexZ005 merged commit 90a0f78 into release/next Jul 31, 2026
AlexZ005 added a commit that referenced this pull request Aug 1, 2026
…has + skills + baseline gate 438/62

- CLAUDE.md domain map: faceEdit (Face/Tri/Shell granularity, subdivide/
  flip/bridge, inset gizmo-gating fix, shared edit wireframe, scene-root
  edit proxy, FLOATING toolbar w/ shortcuts), meshEdit (Weld), physics
  (colliderSpec-driven construction, LIVE mid-sim rebuild, sensors +
  enter/exit dispatch, material presets, freeze axes, scenePhysics gravity
  singleton, compound custom colliders, CL-C collider/velocity nodes),
  colliderHelpers viz, terrainSculpt MESH mode + attr-identity cache guard,
  floating sculpt/mesh-edit toolbars
- new Status (2026-08-01): PR #74 merge summary + new suites + remaining
  follow-ups (theprototype-docs pages, VR on-device check)
- new gotchas: module-level store.subscribe runs at eval (declare let state
  ABOVE it or SSR TDZ-crashes); svelte 5.56 props_invalid_value on
  bind:X={undefined} (the fogColor scene-inspector crash)
- svelte-check baseline moved DOWN 476/62 -> 438/62: CLAUDE.md notes,
  e2e-verify skill, release.yml gate all updated
- e2e-verify skill: lane-editmesh port 5183 + the [::1] port-shadow trap
  (strictPort does not catch a v6-only listener; localhost hits the stale
  server); peer-feature skill: scenePhysics joins the singleton examples

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@AlexZ005
AlexZ005 deleted the feature/colliders-v2-editmesh-pro branch August 5, 2026 20:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant