Skip to content

3D Library Module Contracts

easylogic edited this page Oct 9, 2026 · 165 revisions

Module contracts — specification revision 1

Parent: Product specification, #699. Source snapshot 19ccd0748e48f461fa6414c28c0c6dbc8b135111, 2026-10-08. This page states actual current public boundaries and explicitly planned extensions. Exact Issue receipts remain the evidence for each stage.

GPU

Scenario: render admitted native Surface packets with independent display poses; retain original packets while moving the camera and refusing unsafe candidates.

Current entry points include compileGpu, mountScene, mountMesh, mountMeshViewport and mountMeshScene. The own scene front end parses source to ranged AST, semantic scene data/IR and generated WebGL2 shaders. Its admitted primitive/source profiles are specified in GPU language and compiler pipeline; raw arbitrary GPU programs are not an implied API.

MeshSceneEntry = {packet,color,transform?}. Complete pose is {translationMm,rotationXYZW,scale}. Common options carry mmToSceneUnit, scene-unit translate, RGB background and optional camera. Absent transform uses the previous complete mesh lowering path. Pose formula:

p_scene = commonTranslate + mmToSceneUnit * (translationMm + R * (scale * p_nativeMm))
n_scene = normalize(R * (n_native / scale))

Current pose profile: finite translation ±10000 mm; scale [0.001,100]; quaternion XYZW components [-1,1], unit norm tolerance 1e-9, normalized only for computation. Packet0 allows at most 4096 vertices / 7938 triangles and preserves native UV/IDs/winding. Mesh scenes admit 1..4 distinct packets. Final Float32 positions are within ±1000 scene units. Frame limit is4096 per axis and4194304 pixels.

Valid: an actual original packet with opaque color:[0.2,0.6,0.9], identity quaternion and scale:[1,2,1]. Invalid: zero/negative scale, nonunit quaternion, unknown/accessor fields, collapsed Float32 triangles or an unsafe second entry. Validate the complete candidate before adopting it; old entries/options/bounds/pixels remain on refusal. entries/options/bounds are owned copies. Dispose only created GPU resources; context loss requires an explicit new mount.

#679 defines planned/current-author mountPrimitiveScene with discriminated surface and genuine native curve sample entries, explicit matching basis, one shared depth buffer and width1-device-pixel unlit lines. Its author build is not a completed browser/consumer checkpoint. #717 specifies configurable mesh lighting; current ambient/directional lighting is fixed. No configurable shadows/PBR/WebGPU support is inferred.

Acceptance: actual native packet -> public compiled GPU -> uploaded positions/normals/indices and visible frame; independent pose/bounds/depth observation, invalid-candidate retention and zero owned resources after disposal. #670, #665, GPU manual.

CAD

Scenario: compile own source, inspect/edit native coefficients or run a declared geometry/topology operation, then export or hand the result to a consumer without replacing source authority with a mesh.

compileCadModel(source,{sourceVersion:0|1|2}) returns the actual success Model/IR or structured ranged diagnostics. Model0 uses mm and contains Curve/Surface records. Curve degree/knots/controlPoints/weights and Surface U/V grid/degrees/knots/weights retain original parameter domains. Native profiles distinguish broad core admission from narrower operation profiles.

Example actual source0 input:

@model curve_part {
  version:0; length-unit:mm;
  @curve #profile {
    type:nurbs; degree:2; knots:[-2,-2,-2,7,7,7];
    control-points:[[0,0,0],[30,20,5],[60,0,0]];
    weights:[1,1.5,1];
  }
}

Native point/tangent queries use original parameters. Pole/weight edits, knot insertion, splits/regions and reversals are separately versioned/familied APIs; their supported limits and refusal rules must not be pooled into one unlimited kernel claim. Invalid: decreasing knots, nonfinite coefficients, nonpositive weights, stale/foreign qualified references or an operation beyond its actual capacity. Successful edits return copied owned native/source data. Rejection leaves caller inputs/prior accepted results intact. CPU data use caller ownership/GC; native data do not own renderer disposal.

The document/reference/migration/export product gaps are #712, #713, #714, #715. Wider Curve refinement/reversal does not alter old16-pole adaptive readers; #696 must define the new sampler/consumer version.

Acceptance: actual own source -> native operation -> saved source/native file -> independently reopened compiled API result; compare original IDs/domains/coefficients and requested changes, native derivative/uncertainty refusals and invalid input. General solidity/G1/G2/manufacturing accuracy requires separately defined evidence. CAD manual.

Loader / native interop

Scenario: load an actual native source0 model into neutral results or an explicitly chosen renderer target, preserving exact source/model identity and qualifying derived display buffers.

parseBaroCadSource(source,{sourceVersion:0,countU,countV,unitsPerMillimeter,curveDisplay?}) returns owned {source,model,diagnostics,surfaces,curves,unrenderedCurveIds}. Neutral URL loading uses the actual bounded/abortable transport. Default Curve IDs remain unrendered; curveDisplay explicitly enables native16-pole adaptive samples with original parameters. Existing target entries are optional, not transitive requirements of neutral imports.

Valid: source0 with a real admitted Surface, grid 2..17 per axis and unitsPerMillimeter:0.001. Invalid: unsupported source version, duplicate/foreign records, unsafe native sample/target setup, explicit abort or a format/version the adapter does not support. Original mm/authored XYZ is scaled once. Native UV is not normalized texture UV; target buffers and GLB are derived. Dispose only objects/materials/resources allocated by the adapter, not caller Engine/Scene/camera.

ID API and input → output Current stage and issue
LDR-01 ./native parseBaroCadSource(text, options) and loadBaroCadSource(url, options, transport?) → original source, native Model, Surface packets/meshes, Curve previews or unrendered Curve IDs. Source version 0 only. Prototype integrated #658, #666, #675.
LDR-02 ./three BaroCADLoader.parse/load/loadAsync/loadAbortable → actual Three Group/Mesh and optional Line objects alongside LDR-01 data. Prototype integrated #658, #666, #671.
LDR-03 ./babylon BaroCADBabylonLoader.parse/loadAsync/loadAbortable → actual Babylon meshes and optional Curve lines alongside LDR-01 data. Caller configures a right-handed Scene. Prototype integrated #663, #666, #671.
LDR-04 baroCadSourceToGLB and display encoders → bounded display GLB with Surface triangles and opt-in Curve line strips. A Three GLTFLoader may read this display asset; it does not read native @model text or restore editable NURBS. Prototype integrated #656, #685; integration receipt.
LDR-05 Qualified Curve hit association retains original Curve context separate from display segment IDs. Prototype integrated #682; integration receipt.
LDR-06 ./pixi3d native source0 Surface adapter, pinned to Pixi3D 2.5.0/PixiJS 7.2.4. It returns original Model/IDs, an owned Container3D root, {surfaceId, mesh} bindings and idempotent disposal. Curves remain unrendered; curveDisplay refuses. Prototype integrated at d57ba971d322fb55ab0422f8710427a24face915, #690 Integration browser/build receipt. No PixiJS v8 or npm publication claim.
LDR-07 ./model-set loadBaroCadModelSet reads 1–4 separate source0 HTTP(S) assets into qualified {aliasId, url, result} entries without renaming native Models or creating renderer objects. Version 0 manifest has explicit URL and parse options per entry, bounded byte progress, cancellation and atomic refusal. Prototype integrated at 9cc96b1da9f8eedc42599a40df9000e8cfa53611, #693 Integration HTTP/browser receipt. No renderer projection or assembly placement/constraint claim.
LDR-08 ./model-set prepareBaroCadModelSetDisplay(set) copies up to four total Surface PreviewPackets into unique alias-qualified display IDs with exact alias/model/Surface/URL bindings. Caller-owned placement does not change native source. Prototype integrated at b80d33eee5a01dd7ac48daed69bc1bd22e6fbaaa, #722 Integration WebGL2 receipt. No Viewer native-measurement or assembly claim.
LDR-09 Existing ./three loader consumes separate source0 Models generated by public CAD Surface region and U-axis reversal operations, retaining their original IDs/domains/source and caller-owned display placement. Native/example bb82be37, #694 local Loader Integration c9727015; #680 GPU consumer separately integrated.
LDR-10 Explicit wide Curve display option curveDisplay.version:1 in neutral and Three loaders consumes #696 sample DTO v1; legacy v0 remains 16-pole. Three Line parameters and display scale are derived from original source0. Prototype integrated at 9f610f47ffefc3d34b59c0f9ccf41c38b90d3908, #728 Integration compiled receipt. Babylon target is LDR-11; GPU #725 is separate.
LDR-11 Babylon LinesMesh consumer of LDR-10's same explicit v1 neutral sample, with source0/Curve ID/parameter metadata, right-handed caller Scene, one-time mm scale, approximate hit and owned disposal. Locally integrated at 26dece0c, #733 merged-head receipt, with separate headed WebGL2 native proof. GPU/Pixi remain separate.
LDR-12 Explicit v1 Curve display GLB LINE_STRIP export with original ID/parameter/interval metadata and optional untrusted exact source text; old v0 GLB remains byte-identical. Standard Three GLTFLoader reads derived display data. Locally integrated at 224cddaa, #735 merged-head receipt, with separate native headed WebGL2 proof. No editable NURBS recovery.
LDR-13 Optional ./document neutral parser/URL reader for CAD #712 direct-geometry document1. It returns copied authored document, exact embedded source0 assets, compiled native Models and asset-qualified body bindings. Separate 2 MiB file transport; no renderer projection. Native 217e1fd2, #740 compiled file/HTTP receipt; local Integration complete. Source0 Loader remains a separate API.
LDR-14 Additive ./model-set primitive display projection: qualified binding IDs for copied Surface packets and unchanged full native Curve v0/v1 samples across 1–4 total objects. Original IDs/records stay authoritative. Native a2207027, #743 source/HTTP/Three receipt; local Integration 1eba3805 complete. GPU #746 qualified scene v2 is separately integrated. The #722 Surface projection remains.
LDR-15 Neutral native-ID projection for GPU #746 v2: copied Surface packet or full Curve sample, original geometry ID, injectively GPU-safe caller alias as model ref (- → .), #743 provenance, no GPU dependency or chosen appearance. Native 3a377010, #755 source/HTTP/own-GPU receipt; local Integration 46c4817a complete. #743's display-renamed Surface packet is not direct GPU v2 input.
LDR-16 Neutral document1 selected-body projection for GPU v2: validated #740 result, 1–4 original-ID Curve/Surface entries, document/asset/body/revision/frame bindings and distinct asset-derived display refs. The host asserts the matching right-handed Y-up basis; document authored XYZ alone is not a Y-up certificate. Native ef94adad, #761 actual file/HTTP/WebGL2 receipt; local Integration d6d91477 complete. No CAD assembly or npm publication claim.
LDR-17 Optional Three document display: compose LDR-16 selected body bindings with existing source0 Three Mesh/Line results, 1–4 visible bodies, original asset/body/native IDs, caller basis/scale/pose and adapter-owned disposal. Native 2bdc426e, #778 file/HTTP/Three WebGL2 receipt; local Integration c11f15f8 complete.
LDR-18 Optional Babylon document display: LDR-16 selected body bindings plus existing source0 Babylon Mesh/LinesMesh results, 1–4 enabled bodies, caller right-handed Scene/basis/scale/pose and owned disposal. Native 0695bf00, #784 native proof, local Integration 1a5e39ba proof complete. No npm publication claim.
LDR-19 Optional selected-document display GLB: source-backed LDR-16 refs, 1–4 derived Surface TRIANGLES/Curve LINE_STRIP nodes, owned bytes and explicit source-to-node/loss report under 1 MiB. No embedded native source or implied exact NURBS recovery. Native ff2ab2eb, #786 file/HTTP/GLTFLoader/WebGL2 proof, bounded by CAD #715 CAN-07. Local Integration e56a9354 complete; #786 merged-head receipt.
LDR-20 Optional Pixi3D document Surface consumer: LDR-16 selected original-ID Surface refs plus pinned #690 Mesh3D source0 results, per-asset display nodes and owned disposal. Selected Curves and curveDisplay refuse. Native a427c7e3, #788 file/HTTP/Pixi WebGL2 proof. Local Integration 29fc06f1 complete after #786; #788 merged-head receipt; no PixiJS v8/Curve claim.
LDR-21 Public CAD Curve reversal, interval extraction and wide refinement results pass through existing neutral source0/sample-v1 and Three Line display paths. Native reports and source IDs stay authoritative; display vertices are sampled copies. Native 69316097, #792 actual saved-file/API/Three WebGL2 receipt. Local Integration 88314b5a complete; #792 merged-head receipt; no other target or npm claim.
LDR-22 Existing Babylon v1 LinesMesh loader reads the three actual #792 operation output sources in one caller right-handed Scene, with original operation source/results and sampled display data kept distinct. Native b959ef74, #795 actual NullEngine/HTTP/Babylon WebGL2 receipt. Local Integration 3aa3ac3f complete after #792; #795 merged-head receipt; #733 generic proof is separate.
LDR-23 Pinned Pixi3D/PixiJS native source0 adapter gains explicit sample-v1 Curve LINE_STRIP meshes and qualified native parameter bindings; existing Surface-only and document behavior remain separately scoped. Native be7e6f7b, #796 actual HTTP/Pixi WebGL2 receipt. Local Integration 5fe6abb8 complete; #796 merged-head receipt.
LDR-24 Existing pinned ./pixi3d-document composes selected source-backed Curve sample-v1 LINE_STRIP and Surface Mesh3D objects, with per-asset nodes and authored-body-order native provenance. Selected Curves require explicit v1; absent option keeps Surface-only behavior. Native 51a086a8 after integrated #796 5fe6abb8; #798 native file/HTTP/Pixi WebGL2 receipt. Local Integration 63e12364 complete; #798 merged-head receipt.
LDR-25 A fresh external ESM consumer installs local CAD and interop tarballs, resolves declared neutral/target exports and runs one short source0 target flow without workspace links. Optional peers remain optional for neutral import. #801 deferred packed-consumer check. Packed manifest and temporary install observed; no independent import/runtime claim. Publication and release remain separate.
LDR-26 Reuse the existing neutral document URL reader and selected-body Three constructor in one abortable target call; cancel after allocation releases staged Three resources. Host controls attachment and concurrent request selection. Native 14820102; #803 native HTTP/Three WebGL2 receipt. Local Integration 0a5a1546 complete; #803 merged-head receipt. Neutral #740 already had progress/abort; no new parser.
LDR-27 Reuse source0/sample-v1 and Three to display actual CAD #804 edited wide Curve output beside its same-ID original with separate owned sources and host display poses. Native f73dd879; #810 native receipt. Local Integration 3649427f complete with merged-head Three WebGL2 receipt; built on completed #804 local Integration 579b09ae (#804 merged-head native receipt). No new parser or native ID rewrite.
LDR-28 Reuse existing source0/sample-v1 and Three to display the actual CAD #839 wide Curve reversal result alongside its original. Validate native owned parameter/coefficient lineage; keep screen Lines and host transforms separate. CAD #839 local Integration 7cbb66ec complete. Native Loader 296de91b (#841 native receipt); local Integration b68df95c merged-head Three WebGL2 receipt complete. No target API or publication claim.
LDR-29 Reuse public CAD's same-basis three-section loft and existing Loader source0/sample-v1/Three path for one operation-produced Surface with three original Curves; native interpolation and derived display stay separate. CAD #847 local Integration 615a0b30 complete. Native Loader bc94e603 (#855 native receipt); local Integration a825def4 merged-head WebGL2 receipt complete.
LDR-30 Reuse the accepted LDR-29 input and Three target to display an actual public CAD edited-middle loft rebuild beside its original without overwriting source ownership. Native Loader 0616f3eb on integrated LDR-29 parent a825def4; #854 native receipt. Local Integration e49e0328 and merged-head Three/WebGL2 receipt complete: one middle Z edit, exact saved source0, two source-owned Surface+three-Curve groups, distinct pixels, five refusals and owned disposal. No new target API or publication claim.
LDR-31 A direct Three host uses current qualified CAD document references and public conservative original control-hull bounds to frame selected source-backed bodies with an explicit mm-to-scene scale, then consumes the same document through the existing Loader Three display. Native Loader 74d7c482 on integrated CAD #852 and #854 parent e49e0328; #856 native receipt. Local Integration 6c745f25 and merged-head Three/WebGL2 receipt complete: four qualified bodies, original witnesses, explicit caller asset poses/camera, visible pixels, refusal and owned disposal. Viewer #737 fits displayed geometry separately; no new Loader API, tight bounds, mass or publication claim.
LDR-32 A direct Three host loads one canonical native Curve document, displays its sampled Line and separately shows public CAD's qualified native Curve arc-length estimate, heuristic estimator and original interval. Native Loader 8330a3bc on integrated CAD #857 parent c1669d37; #860 native receipt. Local Integration 231e15c5 and merged-head Three/WebGL2 receipt complete. Original quarter Curve estimate and heuristic label stay separate from the 13-point display Line chord sum; qualified binding, pixels, refusal and owned disposal passed. Viewer #689 straight chord is a different metric. No new Loader API, certified error bound, general dimensions or publication claim.
LDR-33 Optional ./three-assembly consumes a validated CAD assembly0 result from #863 and displays each authored instance as a distinct Three Group around its unchanged source0 Mesh or sampled Curve Line. It applies the native evaluated row-major world matrix once, scaling mm translation by the explicit display scale. Bindings retain assembly revision, instance/ancestor IDs and complete qualified part reference. Native Loader c5cf810d (#872 native receipt); local Integration 1bff50aa and merged-head CAD/interop/Three WebGL2 receipt complete. Six distinct instances, five original-to-world point witnesses, shared and colliding source IDs, eight Node refusals, four browser refusals and owned disposal passed again on merged head. Host asserts matching right-handed Y-up basis. No geometry baking, Euler recomputation, mate/solid/external-reference or Babylon/Pixi/GPU parity claim.
LDR-34 Optional neutral ./assembly exposes parseBaroCadAssembly(text) and loadBaroCadAssembly(HTTP(S) URL, {signal,onProgress}?) for the public CAD assembly0 result. The URL reader reuses the existing strict 2 MiB/4096-chunk document transport and checks cancellation before and after parsing; native authored files may be as large as 16 MiB, so this URL subset is explicit. Original source, qualified part refs, authored instance order/poses and signed data stay under public CAD authority. Native Loader 65787124 (#875 native receipt); local Integration bd1a96ea and merged-head CAD/interop/HTTP receipt complete. Three chunk progress values, cold reopen, 13 refusals and six composed Three bindings passed again. The post-parse abort microtask was checked in code but not forced in the flow. Existing ./three-assembly consumes the result; no new renderer, parser, evaluator, external part lifecycle or npm publication claim.
LDR-35 Optional ./babylon-assembly consumes a validated CAD assembly0 result into distinct owned Babylon instance nodes and source-backed Mesh/LinesMesh children. It translates the native evaluated row-major, column-vector world matrix into Babylon's element order once, scales only mm translation, and retains full qualified part/instance/ancestor lineage. The caller supplies a live right-handed Scene and matching Y-up basis assertion; a display-only parent root pose remains possible. Native Loader 4abd4b27 on local parent bd1a96ea; #879 native receipt. Local Integration 1c514b48 and merged-head Babylon NullEngine/WebGL2 receipt complete. Six distinct instances, five native-to-target point witnesses, display-only root movement, seven NullEngine and four browser refusals, owned disposal and caller Scene survival passed again on merged head. Babylon float32 target points use explicit display tolerance; native points remain original binary64. No new native evaluator, target parity, solid/mate or npm publication claim.
LDR-36 Optional pinned Pixi3D 2.5.0/PixiJS 7.2.4 ./pixi3d-assembly displays each validated CAD assembly0 instance as a distinct owned Container3D and source-backed Mesh3D. It composes the existing selected-body Pixi document adapter, converts the evaluated native row-major world pose into Pixi's matrix representation, scales only mm translation and retains complete qualified part/instance/ancestor lineage. The caller asserts matching right-handed Y-up basis; a display-only root movement remains possible. Native Loader 2ff23adb on clean local parent b7298d60 (#883 native receipt); local Integration 16af42a3 and merged-head CAD/interop/Pixi WebGL2 receipt complete. Six authentic #863 bindings, five native-to-Pixi point witnesses through target world transforms, five individually visible display instances plus one edge-on Surface, seven refusals, accepted-frame retention, staged cleanup, empty assembly and caller-frame survival passed again. Combined display contributed 2,537 pixels beyond 112 caller pixels; browser console had zero errors/warnings. Explicit float32 display tolerance; no PixiJS v8, evaluator rewrite, GPU parity, packed npm or publication claim.
LDR-37 Optional ./three-boolean-contours displays a fully validated #881 planar Boolean result as component → outer/hole loop → exact source0 world Curve fragment Lines. It composes existing Three parsing for each native extracted single-Curve source because a full #881 world source chunk can exceed the Loader's four-object Curve display limit. It checks exact fragment/source pointers without changing native chunks, scales mm once and preserves fragment/source/operand-qualified IDs, original parameter and traversal intervals, role and sense. UV pcurves and UV area remain metadata; the native support Surface stays hidden because it is not a filled Boolean region. Native Loader db88f1a9 on clean parent 70474f0b (#886 native receipt); local Integration ed40d837 and merged-head CAD/interop/Three WebGL2 receipt complete. Saved #881 hole/two-component/cross-source/empty results produced 8/8/16/0 selected Lines, 96 native-to-Three point checks, five Node and five browser refusals, staged cleanup and caller survival again on merged head. Outer/hole isolated pixels were 946/316; two components 523/523; empty0. First full-chunk parse refused at the existing object cap and contract was refined before target implementation. No filled face, solid/BRep, global topology certification, target parity, packed npm or publication claim.
LDR-38 Optional ./three-boolean-mesh consumes the fully validated native #887 raw authored-XYZ/mm filled Boolean mesh into one owned Three Mesh per material component. The adapter copies native positions/normals/triangle indices with one explicit mm-to-scene-unit scale; _CAD_UV remains dimensionless metadata. Bindings retain mesh/evaluation/support/source/operand/component/loop/triangle/vertex provenance. Original boundary paths stay separate from internal display diagonals and bridges. Native Loader 7b3960b2 on clean parent 16b487d7 (#890 native receipt); local Integration d534a81e and merged-head CAD/interop/Three WebGL2 receipt complete. Three authentic #887 meshes passed public-subpath Node checks with 1/2/0 components, 8/4/0 triangles, exact buffer and provenance comparisons, six refusals and staged cleanup. Headed WebGL2 showed 48,171 filled pixels with a background hole center, two separate 13,572-pixel components, empty0, five browser refusals, frame retention and owned disposal; zero console errors/warnings. No support-Surface fill, new tessellation, solid/BRep, target parity, packed npm or publication claim.
LDR-39 Optional ./babylon-boolean-mesh consumes the fully validated #887 raw authored-XYZ/mm filled Boolean mesh in a live right-handed Babylon Scene. It scales positions once, copies native normals, component triangle indices and dimensionless custom _CAD_UV data, and creates one owned Babylon Mesh per material component. Bindings retain mesh/evaluation/support/source/operand/component/loop/triangle/vertex provenance. Original CAD boundary paths remain separate from internal display edges and bridges. Native Loader 7ad3f5f5 on clean parent 13a2e971 (#893 native receipt); local Integration cc3a2288 and merged-head CAD/interop/Babylon WebGL2 receipt complete. Three authentic #887 meshes passed public-subpath Node/NullEngine checks for 1/2/0 components and 8/4/0 triangles, exact buffer/provenance comparison, seven refusals and staged cleanup. Headed Babylon WebGL2 showed 48,171 filled pixels with a background hole center, two separate 13,572-pixel components, empty0, five browser refusals, frame retention and owned disposal; zero console errors/warnings. No support-Surface substitution, native tessellation/evaluator copy, solid/B-Rep, other target parity, packed npm or publication claim.
LDR-40 Optional pinned Pixi3D 2.5.0/PixiJS 7.2.4 ./pixi3d-boolean-mesh consumes the fully validated #887 raw authored-XYZ/mm filled Boolean mesh into one owned unlit double-sided Mesh3D per native material component. Positions scale mm once, normals and component triangle indices copy exactly. Native dimensionless CAD UV stays in separate named binding data because Pixi's MeshGeometry3D.uvs is texture UV. Bindings retain mesh/evaluation/support/source/operand/component/loop/triangle/vertex IDs; true boundary paths remain separate from internal display edges and bridges. Native Loader a3dbd08a on clean parent 687bec50 (#899 native receipt); local Integration ce2064da and merged-head CAD/interop/Pixi WebGL2 receipt complete. Actual pinned Pixi WebGL2 compared copied buffers/provenance and showed 48,171 filled pixels beyond 112 caller pixels with a background hole center, two separate 13,572-pixel components, empty0, five browser refusals, frame retention and owned cleanup; zero console errors/warnings. First native browser camera transform failure was repaired; merged head needed no repair. Plain Node Pixi import fails during texture resource initialization; no Node target runtime claim. No support-Surface substitute, native tessellation/evaluator copy, solid/B-Rep, other target parity, packed npm or publication claim.
LDR-41 Optional ./boolean-mesh-glb consumes the fully validated #887 raw authored-XYZ/mm Boolean material mesh and reuses the bounded GLB writer for one derived glTF triangle node per material component. Explicit fixed 0.001 metre/mm positions convert once to Float32 in asserted right-handed Y-up; native normals and triangle winding remain, native dimensionless CAD UV uses custom _CAD_UV rather than texture UV. glTF extras/report bind original mesh/evaluation/support/source/operand/component/loop/triangle/vertex and true-boundary identities; display internal diagonals/bridges stay distinct. Empty material yields a zero-node display GLB. Integrated and closed: native Loader 539c41a5 on clean parent 7ef1e680, adopted once on local develop as merge 5088f71964a9d00f39bd225a3a672a5f11892204 (#901 native receipt, merged-head receipt). Three authentic #887 files produced byte-identical 11,916/12,568/1,644-byte GLBs with 1/2/0 nodes and 8/4/0 triangles on merged HEAD. Public Node verified exact buffers/provenance, four refusals, HTTP/Three GLTFLoader imports and unchanged legacy GLB golden hash. Headed Three WebGL2 loaded saved files over HTTP: 48,171 filled pixels with background hole center, two separate 13,572-pixel components, empty0, four browser refusals and zero console errors/warnings. A valid-parent Float32-underflow refusal was not exercised. No packet0 or native Surface forgery, editable CAD, solid/B-Rep, target parity, packed npm or publication claim.
LDR-42 Optional ./three-boolean-extrusion-mesh consumes the complete validated #896 native filled Shell mesh on exact local develop parent e20ad87d. Fixed 0.001 metres/mm and asserted authored XYZ/right-handed Y-up; one native Shell Group and one face-local Mesh per face range, preserving hard normals, exact triangle slices and custom dimensionless _CAD_UV. A separate host-attachable true-edge Group uses only actual native Curve D1 sample paths, never display diagonals or bridges. Copied bindings retain native Shell/component/face/edge/source identities; empty has zero display objects. The adapter owns and disposes only its resources. Integrated and closed: native Loader a9825689 on clean parent e20ad87d, adopted once on local develop as no-ff merge efac134978b7bea3926dcd02c2572a5602b4e9a3 (#905 native receipt, merged-head receipt). Five authentic #896 outputs passed again on merged HEAD: 1/2/0/1/1 Shells, 10/12/0/10/10 faces, 24/24/0/24/24 true paths, 6,048 positions/normals, 4,032 CAD UV and 864 Curve sample coordinates; six refusals. Headed Three WebGL2 showed 28,200 filled pixels with background hole center, 11,035 oblique wall-only pixels, two isolated 14,100-pixel Shells, empty0, real distance-edit frame change, separate true-edge overlay, four browser refusals, owned disposal and zero console errors/warnings. First heuristic material probe was corrected to an actual triangle centroid in the example; no product repair. No valid native Float32-underflow/collapse witness was executed. No Surface/PreviewPacket0/Solid/native inverse, packed npm, publication or target parity claim.
LDR-43 Optional ./boolean-extrusion-glb consumes the complete validated #896 authored-XYZ/mm filled Shell mesh. Existing bounded GLB writer emits one derived triangle node per native Shell with exact face-range indices, hard normals and custom dimensionless _CAD_UV, plus one separate line node per true native Curve path through its original D1 samples. Fixed 0.001 metre/mm and matching right-handed Y-up assertion. Original Shell/face/edge/Curve/source IDs and true-boundary provenance remain distinct from display diagonals/bridges in glTF extras/report; empty produces zero nodes. Integrated and closed: native Loader 98efd5d6 on clean local parent 486e1297, adopted once on local develop as no-ff merge aac168a3348e57103dac6d5a756d835cf9496234 (#910 native receipt, merged-head receipt). Five authentic #896 inputs produced byte-identical 55,064/58,464/1,556/54,644/54,656-byte GLBs with 1/2/0/1/1 Shell Meshes, 24/24/0/24/24 true Curve Lines and exact buffers/provenance in Node HTTP/Three GLTFLoader; five refusals and unchanged source0 golden. Headed Three WebGL2 loaded saved GLBs: 28,200 filled pixels with background hole center, 11,035 oblique wall-only pixels, two isolated 14,100-pixel Shells, empty0, authentic distance-edit frame change, line-overlay frame change, four browser refusals, cleanup0 and console0/0. Merged-head builds/public/browser flows passed without repair. No valid native Float32-underflow/collapse or 1 MiB refusal witness executed. The line nodes are sampled polylines, not exact continuous native Curves. No editable Surface/Solid, native inverse, Babylon/Pixi parity, packed npm or publication claim.
LDR-44 Optional ./babylon-boolean-extrusion-mesh consumes the complete validated #896 authored-XYZ/mm filled Shell mesh in a live caller-owned right-handed Babylon Scene. Fixed 0.001 metre/mm and matching Y-up assertion; one Shell TransformNode and one face-local filled Mesh per native face range with exact indices, hard normals and custom dimensionless _CAD_UV. A separate initially disabled true-edge root contains LinesMeshes through actual native Curve D1 samples, never display diagonals/bridges. Bindings retain Shell/face/edge/Curve/source IDs. Empty has no child display objects; adapter disposal preserves the caller Scene. Integrated and closed: native Loader 24e1a274 on clean local parent aac168a3, adopted once on local develop as no-ff merge 95f8452e47a7d2d4c74a24a326a64e2617950ce9 (#913 native receipt, merged-head receipt). Five authentic #896 files passed again on merged HEAD in public Babylon NullEngine with 1/2/0/1/1 Shells, 10/12/0/10/10 faces, 24/24/0/24/24 true edges, 6,048 Float32 positions/normals, 4,032 CAD UV and 864 Curve coordinates, seven refusals and staged cleanup. Merged-head Babylon WebGL2 showed 58,289 filled pixels with background hole center, 20,268 wall-only pixels, two isolated 17,307/17,306-pixel Shells, empty0, authentic distance-edit and true-edge frame changes, four browser refusals, disposal0 and console0/0. Native and merged-head build/Node/browser flows passed without product repair. No valid native Float32-underflow/collapse refusal witness executed. Lines are sampled polylines, not exact native Curves. No editable Surface/Solid, native inverse, Pixi parity, packed npm or publication claim.
LDR-45 Optional neutral ./boolean-extrusion-feature-graph reads caller text with native #903 graph options through the public parseBooleanExtrusionFeatureGraph exactly once. It returns exact original authoredText and a separate owned, fully evaluated native graph result. Authored graph0/mm/revision/qualified IDs stay native authority; no second parser, evaluator, validation rebuild, URL transport or renderer data. Caller owns original file bytes; native strict JSON/UTF-8/1 MiB admission and diagnostics apply without new caps. Integrated and closed: native Loader 7d4a0559 on clean parent 4939c701, adopted once on local develop as no-ff merge addae1a8cc10ee5a49436b14af88fa55d2253934 (#914 native file receipt, merged-head receipt). Public CAD/interop builds, seven hashed authentic #903 authored files on native and merged HEAD, four native builder calls per read, full graph/qualified ref/geometry checks, a real height edit plus authored-only save/cold read, separate owned validation, eight read refusals and one tampered-owned refusal passed. The first example expected edited graph IDs to change and fixed source counts; actual files retain graph ID and vary source count. Only the native example expectation was repaired; Integration made no source repair. No renderer, packed npm or publication claim. #801 stays deferred.
LDR-46 Optional ./boolean-extrusion-feature-graph URL export loads an absolute HTTP(S) authored #903 graph through existing streaming transport and the integrated #914 one-call reader. Exact 1 MiB Content-Length/body bound, ≤4,096 chunks, fatal UTF-8, plain-own signal/progress, explicit native options, original decoded text and owned complete native result. Check abort before/during read and after synchronous parse; do not claim interruption inside native construction. No cache, format inference, display geometry or renderer resources. Integrated and closed: native Loader c63d09d0 on clean local parent 7f55a248, adopted once on local develop as no-ff merge 8dafae3f940188fc6d29ca8bf6d583584c74637b (#919 native HTTP receipt, merged-head receipt). Seven SHA-256 checked authentic #903 files passed again on merged HEAD over real local HTTP with exact bytes/text/native result against the direct reader, 21 immutable monotonic progress events and 14 abort/HTTP/UTF-8/JSON/option refusals retaining prior output. Post-parse abort check exists but was not forced; synchronous native evaluation is not interruptible. No renderer, packed npm or publication claim. #801 stays deferred.
LDR-47 Optional pinned Pixi3D 2.5.0/PixiJS 7.2.4 ./pixi3d-boolean-extrusion-mesh consumes the validated #896 filled Shell mesh. One owned Container3D per Shell and face-local Mesh3D per native face range use actual indices/hard normals and explicit 0.001 scene units/mm; CAD UV stays copied metadata, never Pixi texture UV. Separate caller-attachable edgeRoot draws only true native Curve three-D1-sample paths via the pinned LineStrip path, not internal display diagonals. Exact Shell/face/edge/source bindings, Float32/Uint16 guards, empty output and owned disposal preserve caller stage/Application. Integrated and closed: native Loader 5d20c76f on clean local parent addae1a8, adopted once on local develop as no-ff merge 7f55a24898a938a3539cd4eda78c6d68459bdbc0 (#920 native WebGL2 receipt, merged-head receipt). Five exact saved #896 files passed again on merged HEAD in pinned Pixi WebGL2: 1/2/0/1/1 Shells, 10/12/0/10/10 faces, 24/24/0/24/24 true paths, exact geometry/bindings, 8,215 hole material pixels with background hole center, 2,848 wall-only pixels, isolated 2,441/2,438-pixel Shells, empty0, real distance edit, true-edge overlay, five browser refusals, staged cleanup, caller survival and console0/0. A valid native Float32-collapse refusal witness remains unexecuted. No generic Node texture-init, PixiJS v8 parity, packed npm or publication claim.
LDR-48 Existing ./boolean-extrusion-feature-graph direct/HTTP readers consume actual #915 parameter-lifecycle authored graph0 revision files. This adds no Loader runtime API: public native CAD validates complete Face/Boolean/extrusion results, #915 explicit transaction edits a URL-loaded accepted graph, its authored-only serializer saves and the existing Loader URL reader cold-loads. Original bytes, qualified refs and prior result stay caller-owned; no #922 feature-node assumption. Integrated and closed: native Loader example/docs c2e0fbd1 on clean integrated parent 46287542, adopted once on local develop as no-ff merge 86624deec1475a5e4b2056a5e19663a5791a0a28 (#924 frozen contract, native receipt, merged-head receipt). Node 22 public builds and seven exact saved #915 files passed again via actual HTTP/direct read, paired complete native result/validator equality, parameter counts3/2/3/2/0/8/8 and distances2/3/4/5/2/2/2. A new height5→6 transaction, authored-only save/cold URL read, two refusals and prior file/result retention passed. #922 feature-node output and renderer/packed/publication remain outside this proof.
LDR-49 Optional neutral ./boolean-extrusion-feature-mesh: accept a complete owned #903/#922 graph result, explicit graph ID/revision/feature ID/output slot selection and public #896 mesh options. Public CAD validates the whole graph, selects an evaluated normal-extrusion with exact qualified binding, tessellates that native extrusion and validates the derived filled Shell mesh. Return a copied qualified binding separately from the complete owned mesh. The authored file/graph remains editing authority; the mesh is derived display data. The host may pass it to existing Three/Babylon/pinned Pixi Shell adapters with their explicit frame/scale contracts. Integrated and closed: native parent 724beb9a → child ad571f69, adopted once on local develop as no-ff merge a875d0e09e42c4a983b371021c1ceff96b029ba9 (#926 native receipt, merged-head receipt). Node22 public builds and eight authentic HTTP files passed again on merged HEAD with exact complete paired native/direct CAD Shell meshes, 28/28/12/12/12/12/32/0 triangles and 10 refusals. Headed Three WebGL2 again showed revision1→3 21,200→7,950 filled pixels, separate true-edge frame change, four browser refusals, 36 owned resource disposals and console0/0. Integration made no source repair. CAD #927 multi-output, own GPU, packed npm and publication remain separate.
LDR-50 #928 consumes CAD #927's current graph0 fan-out through existing direct/HTTP readers and integrated LDR-49 bridge. Old single-output examples now assert distances[] and summary.extrusions[]; historical singular owned caches rebuild from authored intent without aliases. Each sibling is selected by exact graph/revision/feature/slot, then its native Shell mesh is compared to direct public CAD tessellation. Shared Face/Boolean inputs and separate extrusion outputs remain distinct; Three receives derived display only. Integrated and closed: clean Loader parent 72f6e62a0990d134c94bde32d8329a17a923870c → native child 399c6b9e90718232c404c145984a878894ce6932, adopted once on local develop as d574af83e507d9f54ddd4976ef9c38c91ebb526b (native receipt, merged-head receipt). Six exact saved #927 files passed direct/HTTP and current paired native checks: output counts [1,3,3,3,4,3], heights [2], [2,3,4], [3,4,5], [4,5,6], [4,5,6,7], and three empty leaves; six sibling/slot/revision/forged refusals. Five old #903/#915/#922 regression examples passed on the native child after current-schema adaptation. Headed merged-head Three WebGL2 showed separate sibling material pixels 6761/9824/12869, edited 9824/12869/15926, empty 0/0/0, true edges, four filled and four empty-selection refusals, 476 owned disposal events and console0/0. The first merged-head HTTP run had an unexplained ECONNRESET; one unchanged retry passed. No new runtime API, assembly/Solid, packed npm or publication claim.
LDR-51 Public HTTP graph reader → LDR-49 exact qualified extrusion Shell mesh → existing LDR-44 Babylon adapter in caller-owned right-handed Scene. Explicit authored XYZ/Y-up and 0.001 scene units/mm; one Face Mesh per native face range and separate true Curve LinesMeshes. Retain graph/revision/feature/slot and native source/Shell/face/edge identity; reject stale or forged candidates without changing accepted display. Integrated and closed: #929 native parent ad571f69 → child 2f216e59, adopted once after #926 on local develop as no-ff merge 63e7700ec5f5d1c41820cd026e1df3c6f2c0f5c0 (native receipt, merged-head receipt). Node22 public builds and six actual #922 HTTP files passed again in Babylon NullEngine: 10/10/6/6/6/6 faces, 24/24/12/12/12/12 true lines, 4,608 position, 3,072 CAD UV and 864 true-edge coordinate checks, five refusals, 184 owned disposals. Headed Babylon WebGL2 again showed revisions1/3 46,478→9,903 material pixels, true-edge frame change, four browser refusals, 24 owned disposals and console0/0. Integration made no source repair. #927 multi-output, Babylon GLB, packed npm and publication remain separate.
LDR-52 Public HTTP authored graph reader → LDR-49 exact qualified extrusion Shell mesh → existing LDR-47 pinned Pixi3D 2.5.0/PixiJS 7.2.4 adapter. Explicit authored XYZ/right-handed Y-up and 0.001 scene units/mm. Face Mesh3D triangles/hard normals and separate true native Curve LineStrip paths preserve graph/feature/slot and Shell/source binding; CAD UV is copied metadata, not texture UV. Integrated and closed: #930 native parent 2f216e59 → child 254ef0a8, adopted once after #929 on local develop as no-ff merge 374b4b16f121bc45b5caf3ce2b8d7a5682297455 (native receipt, merged-head receipt). Node22 public builds and eight-file neutral check passed again. Headed pinned Pixi WebGL2 again read exact #922 authored revisions1/3 via HTTP and checked Mesh3D/LineStrip buffers, 6,541→1,391 Shell material pixels, true-edge frame change, four refusal retentions, 18 owned mesh disposals, caller baseline/frame preservation and console0/0. Integration made no source repair. No generic Node Pixi, PixiJS v8, #927 multi-output, packed npm or publication claim.
LDR-53 #936: actual CAD #927 authored fan-out → public direct/HTTP graph reader → exact qualified per-leaf bridge → existing Babylon Shell adapter. In a caller-owned right-handed Scene, each sibling remains a separate filled Shell display with separate true Curve edge root; shared Face/Boolean native inputs remain shared. Explicit authored XYZ/Y-up and 0.001 scene units/mm, four/six/seven-feature graph budgets, and exact graph/revision/feature/slot selection apply. Integrated and closed: clean #928 parent d574af83e507d9f54ddd4976ef9c38c91ebb526b → native child 3bf66ad9a84b89e67b88a8aaa99fcb91166df1a7, merged once on local develop as 85e4df021298258b0c14ecd2f74d4721b7913568 (native receipt, merged-head receipt). Six authentic saved #927 files, 17 leaves and three empties passed direct/HTTP/current paired results and exact public CAD mesh comparison on the merged head. Babylon NullEngine checked 20,160 positions, 20,160 normals, 13,440 CAD UV, 1,176 indices, 3,024 true-edge coordinates, eight refusals and 616 owned disposal events. Headed merged-head Babylon WebGL2 showed sibling pixels 24948/27943/30944, edited 27943/30944/33934, three empty0, true edges, eight browser refusals, 308 owned disposal events and console0/0. Initial native local HTTP ECONNRESET was not reproduced after test-server Connection: close; exact cause remains unproved. No Pixi3D fan-out, assembly/Solid, packed npm or publication claim.
LDR-54 #937: optional neutral ./boolean-extrusion-feature-properties bridge accepts the current whole native graph, exact graph/revision/feature/output-slot selection and CAD construction-property budgets. It returns the independent qualified binding beside CAD's complete owned native area, volume and geometric-centroid result for one selected extrusion. It shares exact selection admission with the existing mesh bridge without changing that bridge's behavior. Native authored XYZ/mm, area mm², volume mm³, source/component/Shell/loop identity and empty0/null remain explicit; sibling overlap is not aggregated. Integrated and closed: clean #936 parent 85e4df021298258b0c14ecd2f74d4721b7913568 → native child c0ce4c34e6ac3ec9b98551f28fd4ac68c64f26bf, adopted once by local no-ff merge 2b9bbd56fa8aae6491b92a6d1e8c278d6f5d5062 with first parent 122cf34ae5c8c54f910608fe20bc6eb3f6416967 and second parent the exact native child (pre-code freeze, native receipt, merged-head receipt). Node22 merged-head interop public build, actual eight-file direct/HTTP property flow and eight-file old mesh bridge regression passed; the merged receipt did not rerun CAD build or lint. Nineteen qualified outputs included 15 nonempty components and four genuine empties; complete properties matched direct CAD measurement/validation, nine property refusals and ten mesh-regression refusals retained accepted data. Shared area 33.9411254969543 mm², separate height2/3/4 volumes 67.8822509939086/101.8233764908629/135.7645019878172 mm³; edited heights3/4/5 shifted volumes and geometric centroids. The #931 off-centre-hole saved property input has distinct native evaluation and is separate provider evidence. No new CAD math, density/mass/inertia, interior-centroid claim, general Solid or publication.
LDR-55 #945: actual CAD #927 authored fan-out through existing public direct/HTTP graph readers, exact per-leaf bridge and pinned Pixi3D 2.5.0/PixiJS 7.2.4 Shell adapter. Each qualified sibling is a separate filled Mesh3D display in the caller-owned Application; true native Curve LineStrip paths have separate attachable roots. Explicit authored XYZ/right-handed Y-up and 0.001 scene units/mm apply. Original graph and shared Face/Boolean inputs stay authoritative; CAD UV is binding metadata, not texture UV. Integrated and closed: clean #936 parent 85e4df021298258b0c14ecd2f74d4721b7913568 → native child 61dbf71ccfa24c432b730f80eba999d32a0c1a15, adopted once by local -x cherry-pick 0fc373aef6eecee4e96811331c629b54f6275185 after #937 merge 2b9bbd56fa8aae6491b92a6d1e8c278d6f5d5062 (pre-code freeze, native receipt, merged-head receipt). The merged receipt reran Node22 interop public build and actual six-file direct/HTTP/current verifier: 17 leaves, three empties, 140 native face ranges, 336 true edge paths, exact direct CAD meshes and five refusals. Headed pinned Pixi WebGL2 reran three HTTP graph views: separate 2/3/4-mm leaf pixels 2696/2910/3119, edited 3/4/5-mm 2910/3119/3352, empty 0/0/0; three display-spaced roots had group pixels 8708→9352, true-edge frame hash 292101581→711172888, four browser refusals, 510 owned Mesh3D disposals, caller survival and console0/0. The merged receipt did not rerun CAD build or lint. Host preview offsets affect roots only; native XYZ remains unchanged. No PixiJS v8, packed npm, spatial union, Solid or publication claim.
LDR-56 #950: use the existing neutral source0 reader and Three BaroCADLoader with explicit sample-v1 to consume actual CAD #947 parameterized through-point Curve source files. Keep authored points/options and complete native Curve/result as authority, and treat Three Lines as approximate display. Explicit native XYZ/right-handed Y-up and 0.001 scene units/mm; host-only spacing separates visible Lines without altering native coordinates. Integrated and closed: exact native parent f25f0a5dd101194b70f0a25745fa99ea9d024ac9 → child f4c5e7a5d80633ade198bf32a0f63e7c9e575d69, adopted once by local -x cherry-pick ff50125fc0882e41af9c7ac16191df3478a002d4 after #937/#945 (frozen contract, merged-head receipt). Node22 merged-head CAD and interop public builds plus interop lint and exact four-file compiled verifier passed: sample points16/19/16/19, segments15/18/15/18, three distinct same-point native probes, real edited-point change and five refusals. Headed Three WebGL2 fetched all four SHA-matched files and showed cyan/magenta/yellow/green pixels193/185/182/205; four browser refusals retained frame hash 4075967010, double disposal released four owned Lines and preserved caller resources, console0/0. The native first-view camera issue was repaired before Integration; merged browser flow passed as received. CAD lint was not rerun on merged head; native CAD lint had 17 unrelated baseline errors. No new Loader API, true arc-length/best-fit/regularity/Solid, packed npm or publication claim.
LDR-57 #951: read six exact CAD #946 native point-grid Surface source0 results using the existing neutral reader and Three BaroCADLoader. Five non-collapsed Surfaces get 8×8 display Meshes; the authentic coincident-XYZ Surface refuses preview with Collapsed or nonfinite preview triangle and preserves accepted data. Original authored U/V grid and complete validated native Surface remain authority. The original 16×16 construction is not reduced to an 8×8 native result. Keep authored XYZ/right-handed Y-up with 0.001 scene units/mm and host-only group spacing. Integrated and closed: exact native parent f25f0a5dd101194b70f0a25745fa99ea9d024ac9 → child 4a4e737bbb1a7ae0415f082fdc169871556c383d, adopted once by local -x cherry-pick 3c72d11d9e48773865d3612aa85598bbd7a2adb5 after #950 ff50125fc0882e41af9c7ac16191df3478a002d4 (frozen contract, authentic refusal correction, merged-head receipt). The README ending conflict kept both example sections. Node22 merged-head interop build/lint and actual six-file verifier passed; CAD build from the preceding #950 head remained current, and CAD lint was not rerun. Five neutral/Three Meshes each had 64 display vertices/98 triangles with exact position/normal/index/native CAD UV buffers; the sixth native-valid source refused collapsed preview. The 16×16 native constructor reported 8,192 basis evaluations, 3,840 eliminations and 256 Surface evaluations. Headed Three WebGL2 fetched all six SHA-matched files, showed independent visible pixels1,014/6,695/2,412/2,393/2,401, retained frame hash 352992571 after four browser refusals, double-disposed five owned Meshes and preserved caller resources, console0/0. No new Loader API, interpolation quality/regularity, B-Rep/Solid, other engine parity, packed npm or publication claim.
LDR-58 #953: consume seven exact CAD #949 fixed-positive-weight rational Curve source0 results using the existing neutral reader and BaroCADBabylonLoader. Six get bounded sample-v1 Babylon Lines in a caller-owned right-handed Scene; the native-valid coincident-XYZ Curve refuses a collapsed Float32 segment without partial display. Original supplied points/weights and full validated native Curve remain authority. Host-only color/spacing and 0.001 scene units/mm do not change native XYZ. Integrated and closed: exact native parent d703c995e2781bcc7c72b3a63b65d97aa94b95cc → child d40eee77f607a9162916877bba8f35456fdb963a, adopted once by local -x cherry-pick e940ca3992bd97601ff282cc1628c383f7a2872e after #950/#951 (frozen contract, merged-head receipt). The README ending conflict retained all three example sections. Node22 merged-head interop build and authentic seven-file verifier passed: exact saved #949 bytes/SHA, public CAD owned validation, cold compile, native coefficients and six neutral/Babylon NullEngine Lines with exact IDs/parameters/Float32 positions and sample points5/11/5/10/5/14. The seventh native-valid file refused collapsed display. Changed supplied weights changed a native probe; local common-weight-scaled probes agreed. Six Node refusals retained accepted lines. Headed Babylon 9.29.0 WebGL2 fetched all seven, showed six separate Line pixel counts101/211/100/306/103/264, retained frame hash 3597241697 after six browser refusals, double-disposed six owned Lines and preserved caller Scene/engine/canvas with console0/0. The native first-view camera was repaired before Integration. Merged receipt did not rerun CAD build/lint or interop lint. No unknown-weight fit, certified arc length/regularity, Surface/Solid, packed npm or publication claim.
LDR-59 #954: consume six exact CAD #952 compatible multi-section rational-U loft Surface source0 results through the existing neutral reader and BaroCADBabylonLoader. Five non-collapsed outputs get 8×8 Babylon display meshes in a right-handed caller Scene; the native-valid coincident-section loft refuses collapsed preview triangles without partial display. Original authored sections, U compatibility and complete native loft Surface remain authority. Host-only poses and 0.001 scene units/mm do not change native XYZ. Integrated and closed: exact native parent 122cf34ae5c8c54f910608fe20bc6eb3f6416967 → child ff090091a714cd847466abadefda0775ad75f112, adopted once by local -x cherry-pick 08209c8539ce907cc775ad08dbe46c747d80b003 after #953 (frozen contract, merged-head receipt). The README ending conflict retained all previous Loader sections. Node22 merged-head interop build and authentic six-file verifier passed: exact #952 bytes/SHA, complete owned validation, cold compile, original section Curves plus loft Surface and five neutral/Babylon NullEngine Meshes with exact native ID/position/normal/index/CAD UV buffers, each 64 vertices/98 triangles. The sixth native-valid file refused collapsed preview. Middle-section edit changed a native probe; maximum retained 15 sections/16 U poles with 3,600 basis evaluations and 1,680 eliminations. Five Node refusals retained accepted meshes. Headed Babylon 9.29.0 WebGL2 fetched all six, showed five independent Mesh pixel counts1,006/1,003/910/1,005/967, retained frame hash 1583334816 after five browser refusals, double-disposed five owned Meshes and preserved caller Scene/engine/canvas with console0/0. The native verifier's first one-object assumption was corrected before Integration, without a product Loader repair. Merged receipt did not rerun CAD build/lint or interop lint. No arbitrary section matching/guides/caps, Shell/Solid, packed npm or publication claim.
LDR-60 #956: consume six exact CAD #934 fixed-orientation translational Sweep Surface source0 files through existing neutral reader and Three BaroCADLoader. The original profile Curve, rail Curve and generated Surface remain native authority; constructor Curves are not B-Rep boundaries. Explicit generated Surface ID <key>_surface, 8×8 preview, authored XYZ/right-handed Y-up and 0.001 scene units/mm. Five original sources are preview-admitted; native-valid zero_translation_rail refuses collapsed preview triangles without partial display. Integrated and closed: exact native parent bbfda071dc9105f09292fd7868005eeac66fd948 → child 3205d39ca7643465fce4b85e232c4cdbf6f8238c, adopted once by local -x cherry-pick 8b423ae9ab4f85370fbc8812786df37adfad9d44 after preceding Loader examples (frozen contract, native receipt, merged-head receipt). Node22 merged-head interop build and authentic six-file verifier passed exact saved #934 bytes/SHA, complete CAD owned validation, cold three-object source0 compilation and neutral/Three native-ID/position/normal/index/CAD UV equality. Five 8×8 Meshes had 64 vertices/98 triangles each; the sixth native-valid source refused collapsed display. A real rail edit changed native and display probes; four Node refusals retained accepted source. Headed Three 0.186.1 WebGL2 fetched all six, showed independent pixels708/705/525/585/3042, retained frame hash 787549926 after four browser refusals, double-disposed five owned Meshes and preserved caller marker/renderer/canvas with console0/0. The merged focused server started on port57050 without the native author's earlier busy-port failure. The host-only Group rotation retained maximum visibility without changing native buffers. CAD build/lint and interop lint were not rerun on the merged head. No new Loader runtime API, transported frames, caps, Shell/Solid, other renderer parity, packed npm #801 or publication claim.
LDR-61 #961: use the existing neutral reader and Three BaroCADLoader to consume seven exact CAD #958 affine Curve/Surface copy source0 files. Each has two authoritative native objects, original then new copy, selected by exact ID. Four Curve pairs use explicit wide sample-v1, and three Surface pairs use 8×8 previews. Keep authored XYZ/right-handed Y-up, original parameter/knot/weight lineage, native determinant parity and 0.001 scene units/mm; host-only spacing is display pose, not a new native transform. Clean native parent 15387424fd5e9280028678e7f71fc76b9fbaa4e8 → child 8f55481b9f56c45de7346b79fd8e4ae22cf32fed (frozen contract, native receipt); merged-head proof/closure pending. Seven byte-exact saved #958 files passed Node22 CAD/interop public builds, interop lint, complete public owned validation, cold two-object compilation, native D0/D1 and exact neutral/Three buffers. Four Line pairs had 5/5, 5/5, 11/11, 64/64 sample points; three Mesh pairs had 64 vertices/98 triangles each. Two determinant signs were negative; genuine C0 derivative refusals remained. All seven real saved files admitted both previews; no native-valid display refusal was observed. Five Node invalid candidates retained accepted sources. Headed Three 0.186.1 WebGL2 fetched all seven over HTTP; all 14 original/copy objects had individually visible pixels, combined frame hash 1100426613. Four browser refusals retained accepted scene/sources/frame; double disposal released only 14 owned geometry/material pairs and preserved caller marker/renderer/canvas, console0/0. The first browser evidence map reused original IDs across source files; source-qualified keys repaired the evidence count without a Loader runtime change. CAD lint was not run. No new runtime API, B-Rep orientation/Solid certificate, other renderer parity, packed npm #801 or publication claim.
Entry/API Input and actual output Evidence/status
--- --- ---
copyCadPreviewPacket / prepareCadPreviewMesh / encodeCadPreviewGlb SharedPreviewPacket v0→owneddisplay buffers/GLB 656 adopted via public 657, actualCAD/GPU/Three consumption
prepareOwnNativeFaceMesh / encodeOwnNativeFaceMeshGlb Nativeface-displayDTO→owneddisplay buffers/GLB withqualifiedmetadata Nativeface conversion actual656 consumer; generaltrim/solid preservation not implied
./native parseBaroCadSource OriginalsourceVersion 0 @modeltext→native Model/preview/meshes/unrenderedCurveIds Prototype-integrated 65889d043fd
./three BaroCADLoader.parse/load/loadAsync Same native text→actualThreeBufferGeometry/Mesh group plusoriginal data Task/merge build andactual file/HTTPload4exits0
./babylon BaroCADBabylonLoader Same native text→actualBabylonSceneMesh/VertexData plusoriginal data/owneddispose Native663 completion reported, integration pending
./pixi3d native Surface adapter Source0 → owned Pixi3D 2.5.0 / PixiJS 7.2.4 Surface meshes; Curves remain unrendered and curveDisplay refuses. #690 local Integration and actual browser proof. No PixiJS v8 or Curve claim.

Source embedding in GLB is untrusted reference text, not proof that imported geometry/history/constraints match. A wide native Curve cannot be silently accepted by an older display profile. Loader manual, author's #699 contribution.

Acceptance: real native source/file/URL -> neutral/target objects or encoded/decoded asset; original IDs/domain/unit/frame, visible/read-back target result, abort/invalid retention and owned cleanup. Pin and record the actual SDK target version. No general STEP reader or target replacement kernel is implied.

Motion

Scenario: sample or play exact target TRS from caller-provided time, return owned poses/events and let the host explicitly adapt them to display geometry.

createMotionClip, sampleMotionClip, createMotionPlayer, clip/marker-file codecs, marker timelines, sampleMotionBlend, cubic timing and absolute-time range timeline APIs are present at the source snapshot. Existing clip0 bounds:64 targets,192 tracks,256 keys/track,4096 total keys, duration≤3600 seconds, translation±10000 mm, scale[0.001,100], unit XYZW norm tolerance 1e-9. Rotation supports declared STEP/shortest SLERP; authored endpoints retain their values.

Valid: target part-a translation keys at0 and2 seconds with values [0,0,0] and [20,0,0]; declared LINEAR sampling at1 second gives [10,0,0]. Invalid: out-of-range time/values, malformed keys, duplicate/foreign targets or incompatible blend context/tracks. Declare whether refusal preserves player state/events. The caller owns its clock; Motion owns copied clip/pose/event data and no CAD or renderer resources. The published MOT-01..11 matrix is the current Motion evidence ledger.

Clip file0 and marker-file0 are distinct envelopes with context/version checks. Native authored part XYZ/mm must be explicitly mapped to renderer coordinates. Motion is neither a CAD edit nor a scene hierarchy. Transition #692 has an Integration receipt at cbc9c61ab7aec8a21491b4f5b71f1bea9c7dfa65; Viewer transition #719 has its own actual integrated browser receipt; format-adapter adoption remains separate. Motion adapter #718 has a native implementation at 27b0871bef7a69665f4a34876cc7b0b2cade3d69 on #692 parent 0b3358819cb09ff469d4a3a5d6f9609096e4e116, with affected build, real AnimatedTriangle file and headed rotation/refusal proof (receipt). It accepts parsed glTF JSON plus caller-owned buffers; it is an own data adapter, not a Three.js clip converter or full scene loader. The #718/#721 import and #724 finite cubic bake have separate Integration receipts in the manual. #719 proves actual transition consumption; it does not prove Viewer format-adapter adoption. #701 owns detailed current API/default/event/file reconciliation; use it with Motion manual, without duplicating that decision.

Acceptance: actual compiled clip/file -> known pose/time/event result and a named consumer where claimed; preserve first failures and report source/integration/consumer/publication stages separately.

Canvas2D

Scenario: edit/display an owned logical-pixel scene with explicit node kinds and assets, hit it in the same accepted transform/clip space, and refuse unsupported layouts.

Current source exports Scene versions 0..4 with unit:'logical-px', contextId and owned nodes. X is right, Y is down. Scene0 has group/frame/rect/line; Scene1 adds M/L/Q/C/Z strokes; Scene2 distinguishes even-odd fill/stroke paths; Scene3 adds image nodes with caller-owned RGBA assets; Scene4 adds semantic glyph runs from supplied atlases. These versions must not be relabelled into one incompatible scene schema.

Valid: a version3 image node references a previously admitted owned RGBA asset with explicit sampling/source rectangle; a version4 glyph run uses declared atlas rectangles and text ranges. Invalid: missing assets, unsafe dimensions/rectangles, incompatible scene versions, invalid paths/clip transforms or a disposed/lost renderer. Transform, layer, nested frame clip, view pan/zoom and hit policies must match actual display; alpha/color/asset ownership are declared. Asset/node serialization and disposal are separate from a complete document/editor model.

Supplied glyph quads do not establish shaping, font layout or editable text. SVG import, nonzero fills, exports, asset bundles, Boolean paths, host command/history/selection/text editing and measured scale work have separate #702–#710 cards. Canvas2D product specification owns their exact formats/limits; preserve its current author's edits.

Acceptance: actual versioned scene/asset -> WebGL buffers/pixels/hit result, invalid scene/asset retention and resource lifecycle. Image/text browser decoding and general SVG support are not inferred from owned RGBA/atlas data.

Viewer

Scenario: load real native models, fit/move the camera, inspect qualified approximate visible geometry, measure original native parameter points and apply externally sampled display poses.

Current APIs include createViewer/loadNative/setPackets/fit/setView/orbit/pan/zoom/pick/resize/getState/dispose, applyMotionFrame/resetMotion and native Surface/Curve/mixed point measurement specializations in the source snapshot. Current Surface load profile uses source0, grid 2..17 and1..4 Surface objects; mixed display/pick is #688 and depends on actual #679 readiness.

Valid: Surface reference {modelId,surfaceId} plus original U/V inside that Surface's domain, or Curve reference {modelId,curveId} plus original t for native queries. Screen pick returns approximate triangle/native-UV association and ambiguity; it does not solve an exact NURBS ray intersection. Invalid: missing/foreign/stale refs, unsupported source/basis, unsafe display poses or unmatched Motion context/targets. Candidate refusal preserves the relevant native/display/camera/selection/measurement state. Successful load resets state as documented. Dispose only Viewer-created resources; do not own the caller's Motion clock/clip/canvas.

Native point distance is Euclidean separation in original authored XYZ/mm. It is not display/assembly distance, Curve length or a certified drawing dimension. #697 and #700 specify one typed native-point measurement entry while retaining explicit compatibility with existing methods. Do not silently remove already integrated specializations. The common measureNativePoints API is now locally integrated at 73e94266789ffe940946f8827d67455c87104ccb, with an affected build and actual tagged-distance/refusal browser flow (receipt); it still measures original native points, not display or assembly space.

Curve parameterApprox from accepted displayed segments is distinct from a native point evaluated at that parameter. Native Curve IDs are not automatically B-Rep edge IDs. Selection occlusion/clipping/tie policy and limits belong in #688 before implementation. Current Viewer v0 contract.

Acceptance: actual native source -> our own GPU canvas -> camera/selection/native-query/Motion behavior with visible/read-back evidence, invalid candidate retention and owned cleanup. No substituted renderer, exact topology certificate or hidden playback is implied.

Clone this wiki locally