Files
open-wc/coordination/claims/M03-RND-M2-PLACEMENT-TRANSFORM-001.md
T

4.8 KiB

M03-RND-M2-PLACEMENT-TRANSFORM-001 — M2 placement transform resolver

Ownership

  • Target: M03
  • Program: RND
  • Owner/Agent ID: sindo-main-codex
  • Branch: work/sindo-main-codex/m03-m2-placement-transform
  • Lease expires UTC: 2026-07-19
  • Integrator: M03 milestone integrator

Outcome

Extract pure ADT M2 placement basis/origin-offset calculation, including the existing waterfall and Elwynn cliff-rock calibrations, into a scene-free service.

Non-goals

  • Change coordinate conversion, placement positions, rotations or scale clamps.
  • Generalize model-specific corrections or add new allowlisted models.
  • Move grouping/tasks, MultiMesh/Node/Mesh/material/RID creation or caches.
  • Change M2 animation/material behavior, cache versions or renderer profiles.
  • Claim build-12340 placement parity beyond existing fixtures.

Paths

  • Exclusive: src/render/m2/m2_placement_transform_resolver.gd, src/tools/verify_m2_placement_transform_resolver.gd, docs/modules/m2-placement-transform-resolver.md, this claim
  • Shared/hotspots: src/scenes/streaming/streaming_world_loader.gd, docs/modules/world-renderer.md, docs/modules/README.md, RENDER.md, targets/03-renderer-facade.md
  • Generated/ignored: .godot, native DLL, generated ADT resources, caches and proprietary renderer corpus

Contracts and data

  • Input: ADT-loader Godot Euler rotation, normalized/original M2 relative path, and raw placement scale where origin compensation is requested
  • Output: Basis and local origin-offset Vector3; no retained state
  • Regular models use Basis.from_euler; two cliff rocks retain narrow YZX-style shell correction; two waterfall sheets retain yaw/twist/anchor compensation
  • Scale clamps remain caller-owned for final basis and resolver-owned at 0.0001 only for historical waterfall anchor compensation
  • Cache/schema/coordinate versions: unchanged

Dependencies

  • Requires: current master 1b6c468
  • Blocks: pure M2 grouping extraction and broader M2 service decomposition
  • External state: none; tests use synthetic rotations/paths and pinned constants

Verification

  • Commands: dedicated regular/path-normalization/cliffrock/waterfall/twist-anchor/ scale and bounded timing verifier; three loader call-site/source boundaries; M2 unique/dedupe plus facade/terrain/internal-access/manifest/shutdown gates
  • Fidelity evidence: exact formulas/constants and model allowlists moved unchanged
  • Performance budget: allocation-free scalar/Basis math per placement aside from path normalization; no Node, Resource, RID, task, cache or file access

Documentation deliverables

  • Inline resolver API documentation
  • New module spec with inputs/outputs, data-flow, lifecycle, ownership, failure, performance, fidelity limitations and source map
  • World renderer/module registry/RENDER.md updates

Simplicity and naming

  • Important name: M2PlacementTransformResolver
  • Simplest solution: stateless service with basis and origin-offset queries
  • Rejected complexity: transform strategy hierarchy, generic correction registry, Resources, data-driven override format or callback injection
  • Unavoidable complexity: four measured model-specific exceptions remain explicit
  • Measured optimization evidence: bounded synthetic transform loop

Status

  • State: accepted
  • Done: resolver extracted, three call sites migrated, contracts and docs verified
  • Next: pure M2 grouping extraction and broader M2 service decomposition
  • Blocked by:

Handoff

  • Commit: 0a09d7b (refactor(M03): extract M2 placement transform resolver)
  • Results: dedicated formula/source/timing contract PASS (cases=9, iterations=10000, elapsed_ms=28.732); cold editor parse PASS; documentation gate PASS (module_specs=16, required_files=7); coordination gate PASS with 23 pre-existing expired M00/M01 warnings; related M2 unique/dedupe, terrain cache/LOD/queue, facade, internal-access, manifest, shutdown, scheduler, streaming focus/planner and coordinate-boundary suites PASS; renderer checkpoint dry-run PASS 7/7.
  • Remaining risks: no private asset-backed visual recheck in this package; general ADT M2 placement parity and asset-backed p95/p99 remain pending.
  • Documentation updated: inline public API; new docs/modules/m2-placement-transform-resolver.md; renderer module registry, docs/modules/world-renderer.md and RENDER.md.
  • Integration: accepted in master merge 396be5e; post-merge resolver (cases=9, iterations=10000, elapsed_ms=27.409), M2 registry, internal-access, facade, manifest, documentation and coordination gates passed.