@developerz.ai/ts23d 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/CLAUDE.md +1 -1
  3. package/README.md +10 -5
  4. package/dist/{chunk-a8fxakcj.js → chunk-6b05mnmx.js} +2 -2
  5. package/dist/{chunk-kgvbpqqw.js → chunk-7rtfjh9f.js} +6 -5
  6. package/dist/chunk-7rtfjh9f.js.map +10 -0
  7. package/dist/{chunk-1ypfs7ga.js → chunk-8j4c28jt.js} +790 -276
  8. package/dist/chunk-8j4c28jt.js.map +46 -0
  9. package/dist/{chunk-wtqhq529.js → chunk-d1fv6hrm.js} +6 -6
  10. package/dist/{chunk-wtqhq529.js.map → chunk-d1fv6hrm.js.map} +1 -1
  11. package/dist/{chunk-gcyp9b4d.js → chunk-dbq4qf52.js} +362 -215
  12. package/dist/chunk-dbq4qf52.js.map +25 -0
  13. package/dist/{chunk-xnt2sdhf.js → chunk-drna2rny.js} +2 -2
  14. package/dist/{chunk-ravbb06q.js → chunk-dxvypr7y.js} +2 -2
  15. package/dist/{chunk-11v28977.js → chunk-f6yme003.js} +85 -71
  16. package/dist/{chunk-11v28977.js.map → chunk-f6yme003.js.map} +6 -6
  17. package/dist/{chunk-4ddzsqtc.js → chunk-hg7pf34j.js} +4 -3
  18. package/dist/{chunk-4ddzsqtc.js.map → chunk-hg7pf34j.js.map} +5 -5
  19. package/dist/{chunk-w1zyhj40.js → chunk-jq4e17tj.js} +2 -2
  20. package/dist/{chunk-kvcep7ft.js → chunk-y63c6zcv.js} +967 -218
  21. package/dist/chunk-y63c6zcv.js.map +53 -0
  22. package/dist/cli/args.d.ts +7 -1
  23. package/dist/cli/bin.js +66 -25
  24. package/dist/cli/bin.js.map +6 -5
  25. package/dist/cli/manifest.d.ts +5 -1
  26. package/dist/cli/texture-cache.d.ts +4 -0
  27. package/dist/core/definition.d.ts +7 -0
  28. package/dist/core/errors.d.ts +1 -1
  29. package/dist/core/index.js +1 -1
  30. package/dist/export/credits.d.ts +4 -0
  31. package/dist/export/glb-options.d.ts +48 -0
  32. package/dist/export/glb.d.ts +5 -35
  33. package/dist/export/hierarchy.d.ts +23 -0
  34. package/dist/export/index.d.ts +2 -1
  35. package/dist/export/index.js +21 -7
  36. package/dist/export/index.js.map +1 -1
  37. package/dist/export/lod-coverage.d.ts +12 -0
  38. package/dist/export/metadata.d.ts +2 -0
  39. package/dist/export/version.d.ts +2 -2
  40. package/dist/grammar/index.js +2 -2
  41. package/dist/index.js +63 -17
  42. package/dist/index.js.map +1 -1
  43. package/dist/kinds/head-armour.d.ts +3 -7
  44. package/dist/kinds/head-bust.d.ts +3 -2
  45. package/dist/kinds/head-face.d.ts +3 -1
  46. package/dist/kinds/head-garb.d.ts +4 -0
  47. package/dist/kinds/head-mesh.d.ts +4 -0
  48. package/dist/kinds/head-mouth.d.ts +4 -0
  49. package/dist/kinds/head-params.d.ts +9 -1
  50. package/dist/kinds/head-tone.d.ts +10 -0
  51. package/dist/kinds/head-torso.d.ts +35 -0
  52. package/dist/kinds/index.js +6 -6
  53. package/dist/material/cc0.d.ts +4 -0
  54. package/dist/material/define.d.ts +34 -0
  55. package/dist/material/generator.d.ts +1 -1
  56. package/dist/material/index.d.ts +8 -3
  57. package/dist/material/index.js +39 -7
  58. package/dist/material/index.js.map +1 -1
  59. package/dist/material/library.d.ts +7 -0
  60. package/dist/material/material-def.d.ts +30 -0
  61. package/dist/material/paint/canvas.d.ts +7 -0
  62. package/dist/material/paint/default-sheet.d.ts +3 -1
  63. package/dist/material/paint/fabric.d.ts +4 -0
  64. package/dist/material/paint/image-strip.d.ts +4 -0
  65. package/dist/material/paint/kit.d.ts +5 -0
  66. package/dist/material/paint/metal.d.ts +3 -0
  67. package/dist/material/paint/orm.d.ts +1 -1
  68. package/dist/material/paint/strip.d.ts +1 -1
  69. package/dist/material/paint/types.d.ts +32 -2
  70. package/dist/material/palette.d.ts +2 -0
  71. package/dist/material/slots.d.ts +5 -0
  72. package/dist/material/texture-source.d.ts +34 -0
  73. package/dist/material/trim-sheet.d.ts +20 -4
  74. package/dist/neural/index.js +2 -2
  75. package/dist/passes/index.js +2 -2
  76. package/dist/primitives/index.js +3 -3
  77. package/dist/qa/index.js +2 -2
  78. package/dist/render/beauty.d.ts +1 -1
  79. package/dist/render/index.js +3 -3
  80. package/dist/render/lighting.d.ts +7 -0
  81. package/dist/render/shade.d.ts +1 -1
  82. package/dist/testing/index.js +5 -5
  83. package/docs/README.md +4 -0
  84. package/docs/architecture/gltf-capabilities.md +38 -1
  85. package/docs/architecture/materials.md +151 -0
  86. package/docs/idea/10-sculpting.md +166 -0
  87. package/docs/idea/11-materials-authoring.md +132 -0
  88. package/docs/idea/12-blender-bridge.md +136 -0
  89. package/docs/idea/13-asset-pipeline-research.md +89 -0
  90. package/docs/plans/roadmap.md +12 -0
  91. package/package.json +2 -1
  92. package/recipes/boxcar/README.md +7 -0
  93. package/recipes/boxcar/boxcar.ts +118 -34
  94. package/recipes/goblin_head/README.md +27 -14
  95. package/recipes/goblin_head/goblin_head.ts +11 -9
  96. package/recipes/human_head/README.md +8 -4
  97. package/recipes/human_head/human_head.ts +4 -3
  98. package/recipes/material_swatches/material_swatches.ts +11 -5
  99. package/recipes/orc_head/README.md +32 -20
  100. package/recipes/orc_head/orc_head.ts +9 -7
  101. package/src/cli/args.ts +16 -3
  102. package/src/cli/manifest.ts +6 -0
  103. package/src/cli/run.ts +33 -9
  104. package/src/cli/texture-cache.ts +24 -0
  105. package/src/core/asset.ts +1 -0
  106. package/src/core/definition.ts +7 -0
  107. package/src/core/errors.ts +6 -1
  108. package/src/export/credits.ts +25 -0
  109. package/src/export/glb-options.ts +53 -0
  110. package/src/export/glb.ts +100 -113
  111. package/src/export/hierarchy.ts +122 -0
  112. package/src/export/index.ts +17 -1
  113. package/src/export/lod-coverage.ts +71 -0
  114. package/src/export/metadata.ts +3 -0
  115. package/src/export/version.ts +1 -1
  116. package/src/kinds/head-armour.ts +103 -73
  117. package/src/kinds/head-bust.ts +49 -86
  118. package/src/kinds/head-face.ts +94 -74
  119. package/src/kinds/head-garb.ts +181 -0
  120. package/src/kinds/head-hair.ts +74 -33
  121. package/src/kinds/head-mesh.ts +43 -5
  122. package/src/kinds/head-mouth.ts +111 -0
  123. package/src/kinds/head-params.ts +11 -2
  124. package/src/kinds/head-presets.ts +30 -27
  125. package/src/kinds/head-tone.ts +52 -0
  126. package/src/kinds/head-torso.ts +230 -0
  127. package/src/kinds/head.ts +8 -3
  128. package/src/material/cc0.ts +41 -0
  129. package/src/material/define.ts +130 -0
  130. package/src/material/generator.ts +15 -8
  131. package/src/material/index.ts +34 -3
  132. package/src/material/library.ts +196 -0
  133. package/src/material/material-def.ts +84 -0
  134. package/src/material/paint/canvas.ts +11 -1
  135. package/src/material/paint/compose.ts +1 -1
  136. package/src/material/paint/decode-png.ts +19 -13
  137. package/src/material/paint/default-sheet.ts +40 -28
  138. package/src/material/paint/fabric.ts +63 -0
  139. package/src/material/paint/image-strip.ts +88 -0
  140. package/src/material/paint/kit.ts +37 -0
  141. package/src/material/paint/masks.ts +3 -1
  142. package/src/material/paint/metal.ts +109 -0
  143. package/src/material/paint/orm.ts +14 -1
  144. package/src/material/paint/planks.ts +49 -4
  145. package/src/material/paint/strip.ts +35 -29
  146. package/src/material/paint/types.ts +45 -2
  147. package/src/material/paint/validate.ts +19 -3
  148. package/src/material/palette.ts +3 -0
  149. package/src/material/slots.ts +18 -0
  150. package/src/material/texture-source.ts +86 -0
  151. package/src/material/trim-sheet.ts +79 -13
  152. package/src/render/beauty.ts +2 -2
  153. package/src/render/lighting.ts +26 -0
  154. package/src/render/shade.ts +10 -5
  155. package/dist/chunk-1ypfs7ga.js.map +0 -42
  156. package/dist/chunk-gcyp9b4d.js.map +0 -22
  157. package/dist/chunk-kgvbpqqw.js.map +0 -10
  158. package/dist/chunk-kvcep7ft.js.map +0 -43
  159. /package/dist/{chunk-a8fxakcj.js.map → chunk-6b05mnmx.js.map} +0 -0
  160. /package/dist/{chunk-xnt2sdhf.js.map → chunk-drna2rny.js.map} +0 -0
  161. /package/dist/{chunk-ravbb06q.js.map → chunk-dxvypr7y.js.map} +0 -0
  162. /package/dist/{chunk-w1zyhj40.js.map → chunk-jq4e17tj.js.map} +0 -0
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/core/errors.ts", "../src/core/rng.ts", "../src/core/definition.ts", "../src/core/asset.ts", "../src/core/family.ts", "../src/core/mesh.ts", "../src/core/png.ts", "../src/core/transform.ts", "../src/core/vec.ts", "../src/core/world.ts"],
4
4
  "sourcesContent": [
5
- "// The one error type. Every failure carries a stable code, the cause, and the exact fix — the\n// reader is usually an agent, and an error it can act on is worth ten it has to interpret.\n\nexport type ErrorCode =\n | 'T3D_NOT_IMPLEMENTED'\n | 'T3D_GRAMMAR_SYNTAX'\n | 'T3D_GRAMMAR_OVERFLOW'\n | 'T3D_PART_DUPLICATE'\n | 'T3D_PART_UNKNOWN'\n | 'T3D_RECIPE_INVALID'\n | 'T3D_NO_ASSET_EXPORT'\n | 'T3D_QA_FAILED'\n | 'T3D_RENDER_OPTIONS'\n | 'T3D_AMBIENT_RANDOM'\n | 'T3D_RELEASE'\n | 'T3D_BENCH';\n\nexport interface ErrorDetails {\n readonly cause: string;\n readonly fix: string;\n}\n\nexport class Ts23dError extends Error {\n readonly code: ErrorCode;\n readonly fix: string;\n\n constructor(code: ErrorCode, details: ErrorDetails) {\n super(`${code}: ${details.cause}`);\n this.name = 'Ts23dError';\n this.code = code;\n this.fix = details.fix;\n }\n\n toJSON(): { code: ErrorCode; message: string; fix: string } {\n return { code: this.code, message: this.message, fix: this.fix };\n }\n}\n\n/** Placeholder for a planned seam. Names the plan so the agent knows where the work is tracked. */\nexport function notImplemented(what: string, plan = 'docs/plans/roadmap.md'): never {\n throw new Ts23dError('T3D_NOT_IMPLEMENTED', {\n cause: `${what} is declared but not built yet`,\n fix: `implement it — the spec and its slice are in ${plan}`,\n });\n}\n",
5
+ "// The one error type. Every failure carries a stable code, the cause, and the exact fix — the\n// reader is usually an agent, and an error it can act on is worth ten it has to interpret.\n\nexport type ErrorCode =\n | 'T3D_NOT_IMPLEMENTED'\n | 'T3D_GRAMMAR_SYNTAX'\n | 'T3D_GRAMMAR_OVERFLOW'\n | 'T3D_PART_DUPLICATE'\n | 'T3D_PART_UNKNOWN'\n | 'T3D_RECIPE_INVALID'\n | 'T3D_NO_ASSET_EXPORT'\n | 'T3D_QA_FAILED'\n | 'T3D_RENDER_OPTIONS'\n | 'T3D_AMBIENT_RANDOM'\n | 'T3D_RELEASE'\n | 'T3D_BENCH'\n | 'T3D_MATERIAL_INVALID'\n | 'T3D_MATERIAL_UNKNOWN'\n | 'T3D_MATERIAL_CONFLICT'\n | 'T3D_SHEET_FULL'\n | 'T3D_TEXTURE_MISSING';\n\nexport interface ErrorDetails {\n readonly cause: string;\n readonly fix: string;\n}\n\nexport class Ts23dError extends Error {\n readonly code: ErrorCode;\n readonly fix: string;\n\n constructor(code: ErrorCode, details: ErrorDetails) {\n super(`${code}: ${details.cause}`);\n this.name = 'Ts23dError';\n this.code = code;\n this.fix = details.fix;\n }\n\n toJSON(): { code: ErrorCode; message: string; fix: string } {\n return { code: this.code, message: this.message, fix: this.fix };\n }\n}\n\n/** Placeholder for a planned seam. Names the plan so the agent knows where the work is tracked. */\nexport function notImplemented(what: string, plan = 'docs/plans/roadmap.md'): never {\n throw new Ts23dError('T3D_NOT_IMPLEMENTED', {\n cause: `${what} is declared but not built yet`,\n fix: `implement it — the spec and its slice are in ${plan}`,\n });\n}\n",
6
6
  "// Seeded, forkable PRNG (mulberry32). The only entropy a recipe may read: same seed, same bytes.\n\nexport interface Rng {\n /** Uniform in [0, 1). */\n next(): number;\n range(min: number, max: number): number;\n int(min: number, maxInclusive: number): number;\n pick<T>(items: readonly T[]): T;\n /** An independent stream keyed by name, so adding a draw in one part never shifts another. */\n fork(name: string): Rng;\n /** A colour varied by ±amount per channel (relative): ten bales, ten slightly different straws. */\n jitter(color: readonly [number, number, number], amount: number): [number, number, number];\n}\n\nfunction hash(seed: number, name: string): number {\n let h = seed ^ 0x9e3779b9;\n for (let i = 0; i < name.length; i++) h = Math.imul(h ^ name.charCodeAt(i), 0x85ebca6b);\n return (h ^ (h >>> 13)) >>> 0;\n}\n\nexport function createRng(seed: number): Rng {\n let state = seed >>> 0;\n const next = (): number => {\n state = (state + 0x6d2b79f5) >>> 0;\n let t = state;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n return {\n next,\n range: (min, max) => min + (max - min) * next(),\n int: (min, max) => min + Math.floor(next() * (max - min + 1)),\n pick: <T>(items: readonly T[]): T => {\n const item = items[Math.floor(next() * items.length)];\n if (item === undefined) throw new RangeError('pick() from an empty list');\n return item;\n },\n fork: (name) => createRng(hash(seed, name)),\n jitter: (c, amount) => {\n const k = 1 + (next() * 2 - 1) * amount;\n return [\n c[0] * k * (1 + (next() - 0.5) * amount * 0.4),\n c[1] * k,\n c[2] * k * (1 + (next() - 0.5) * amount * 0.4),\n ];\n },\n };\n}\n",
7
- "// The asset contract: what defineAsset takes (AssetDefinition), what build() receives\n// (BuildContext), budgets, real-world dimensions, measures, checks, and the compiled result.\n\nimport type { Mesh } from './mesh.ts';\nimport type { EmitterOptions, Lod, Part, PartOptions, SocketOptions, UseOptions } from './part.ts';\nimport type { Rng } from './rng.ts';\n\nexport interface BuildContext {\n readonly lod: Lod;\n readonly seed: number;\n readonly rng: Rng;\n /** The value for this LOD: `ctx.pick([24, 12, 6])` — segments, counts, sizes per detail level. */\n pick<T>(perLod: readonly [T, T, T]): T;\n /** Add a named part. Names are the contract with the engine: `axle_*`, `door_*`, `rotor_*`. */\n part(name: string, mesh: Mesh | null, options?: PartOptions): void;\n /** An empty pivot that other parts parent to. */\n group(name: string, options?: PartOptions): void;\n /** Declare a particle source (smoke, steam, dust, muzzle…) as a named node. */\n emitter(name: string, options: EmitterOptions): void;\n /** Declare an attachment point (seat, mount, camera, audio, light…) as a named node. */\n socket(name: string, options: SocketOptions): void;\n /** Instance another asset inside this one, compiled at this LOD — the composition primitive. */\n use(asset: Asset, options: UseOptions): void;\n}\n\nexport interface Budget {\n /** Triangle ceiling per LOD; QA fails the build above it. */\n readonly triangles: readonly [number, number, number];\n}\n\n/** Real-world overall dimensions (metres) the QA `proportions` gate holds the model to. */\nexport interface RealDimensions {\n /** Along X (front-back). */\n readonly length: number;\n /** Along Y. */\n readonly width: number;\n /** Along Z. */\n readonly height: number;\n /** Allowed relative error per axis; default 0.05. */\n readonly tolerance?: number;\n /** Named spec-sheet dimensions checked against the model (QA `measures`). */\n readonly measures?: readonly Measure[];\n}\n\n/**\n * One real-world dimension from a source, checked against the model at LOD0: the world-space\n * extent of `parts` (union of their bounds) along `axis`, or the distance between two parts'\n * centres. E.g. driver diameter = extent of `axle_driver_0` on Z; gauge = centre distance of the\n * two rail parts on Y; turret width = extent of `turret_body` on Y.\n */\nexport interface Measure {\n readonly label: string;\n readonly value: number;\n readonly axis: 'x' | 'y' | 'z';\n /** Extent of these parts (prefix match: 'axle_driver_0' includes its wheels). */\n readonly parts?: readonly string[];\n /** Or: distance between the centres of exactly two parts along `axis`. */\n readonly between?: readonly [string, string];\n readonly tolerance?: number;\n /** Where this number comes from (one of `sources`, or a page reference). */\n readonly source?: string;\n}\n\n/** One problem a recipe's own check found. QA turns these into findings named `check`. */\nexport interface CheckFinding {\n readonly message: string;\n readonly fix: string;\n readonly part?: string;\n}\n\n/**\n * A recipe-declared assertion about its own geometry, run by the QA gate at every LOD:\n * \"tracks clear the hull\", \"wheels never overlap\", \"left matches right\". Plain functions —\n * build them with the helpers in /qa (`clear`, `touches`, `noOverlap`, `symmetric`) or write one.\n */\nexport type Check = (asset: CompiledAsset) => readonly CheckFinding[];\n\n/**\n * Triangle budgets per class (LOD0 / LOD1 / LOD2): a starting point, measured on real recipes.\n * `budget: BUDGETS.vehicle` — raise one with a measured reason, never to hide a regression.\n */\nexport const BUDGETS = {\n prop: { triangles: [800, 300, 80] },\n detailedProp: { triangles: [5000, 1500, 300] },\n building: { triangles: [20000, 6000, 800] },\n vehicle: { triangles: [60000, 15000, 1000] },\n hero: { triangles: [150000, 40000, 2000] },\n tree: { triangles: [25000, 6000, 300] },\n scene: { triangles: [500000, 120000, 15000] },\n} as const satisfies Record<string, Budget>;\n\n/** A part set that emits light (lamp lenses, lit windows): an emissive material in the GLB. */\nexport interface Glow {\n /** Part names or globs: 'headlamp_*', 'window_*'. */\n readonly parts: readonly string[];\n /** Linear RGB 0..1 (`hex('#ffd9a0')`). Default warm white. */\n readonly color?: readonly [number, number, number];\n /** Brightness multiplier (KHR_materials_emissive_strength); 1 = plain glTF. Default 4. */\n readonly strength?: number;\n}\n\n/** Provenance written into every GLB: `asset.copyright` + an XMP packet. */\nexport interface AssetMeta {\n readonly description?: string;\n readonly sources?: readonly string[];\n /** SPDX id or licence URL, e.g. 'CC0-1.0', 'MIT'. */\n readonly license?: string;\n /** e.g. '© 2026 Jane Doe'. */\n readonly copyright?: string;\n readonly creators?: readonly string[];\n}\n\nexport interface AssetDefinition {\n readonly name: string;\n readonly kind: string;\n readonly description?: string;\n /** Where the numbers came from: spec sheets, rosters, drawings, photos. Required for `real`. */\n readonly sources?: readonly string[];\n readonly real?: RealDimensions;\n readonly tags?: readonly string[];\n readonly budget: Budget;\n readonly seed?: number;\n /** The recipe's own physical intent, enforced by QA (see Check). */\n readonly checks?: readonly Check[];\n /** SPDX id or licence URL for the generated asset, e.g. 'CC0-1.0'. Written into the GLB. */\n readonly license?: string;\n readonly copyright?: string;\n readonly creators?: readonly string[];\n /** Emissive part sets; `t3d build` writes them as glowing materials. */\n readonly glow?: readonly Glow[];\n build(ctx: BuildContext): void;\n}\n\nexport interface Asset extends AssetDefinition {\n readonly __ts23d: 'asset';\n}\n\nexport interface CompiledAsset {\n readonly name: string;\n readonly kind: string;\n readonly lod: Lod;\n readonly budget: Budget;\n readonly real: RealDimensions | null;\n readonly checks: readonly Check[];\n readonly parts: readonly Part[];\n /** Provenance carried from the definition (absent when the recipe declares none). */\n readonly meta?: AssetMeta;\n readonly glow?: readonly Glow[];\n}\n",
8
- "// The DSL's root: an asset is a TypeScript function that builds named parts into a scene.\n// Code, not JSON — loops, helpers and composition are the point (docs/decisions/002).\n\nimport type { Asset, AssetDefinition, AssetMeta, CompiledAsset } from './definition.ts';\nimport { Ts23dError } from './errors.ts';\nimport type { Mesh } from './mesh.ts';\nimport type { Lod, Part, PartOptions, UseOptions } from './part.ts';\nimport { createRng } from './rng.ts';\n\nexport * from './definition.ts';\nexport * from './part.ts';\n\nexport function defineAsset(def: AssetDefinition): Asset {\n if (!/^[a-z][a-z0-9_]*$/.test(def.name)) {\n throw new Ts23dError('T3D_RECIPE_INVALID', {\n cause: `asset name '${def.name}' is not snake_case`,\n fix: 'rename it to [a-z][a-z0-9_]* — it becomes the GLB file name and the root node',\n });\n }\n return { ...def, __ts23d: 'asset' };\n}\n\nexport const isAsset = (value: unknown): value is Asset =>\n typeof value === 'object' &&\n value !== null &&\n (value as { __ts23d?: unknown }).__ts23d === 'asset';\n\nexport function compile(asset: Asset, options: { lod?: Lod; seed?: number } = {}): CompiledAsset {\n const lod = options.lod ?? 0;\n const seed = options.seed ?? asset.seed ?? 1;\n const parts = new Map<string, Part>();\n const add = (name: string, mesh: Mesh | null, o: PartOptions = {}): void => {\n if (parts.has(name)) {\n throw new Ts23dError('T3D_PART_DUPLICATE', {\n cause: `part '${name}' was added twice in '${asset.name}'`,\n fix: 'give each part a unique name — suffix the loop index, e.g. wheel_0, wheel_1',\n });\n }\n if (o.parent !== undefined && !parts.has(o.parent)) {\n throw new Ts23dError('T3D_PART_UNKNOWN', {\n cause: `part '${name}' parents to '${o.parent}', which does not exist yet`,\n fix: 'add the parent (ctx.group or ctx.part) before its children',\n });\n }\n if (o.motion && o.yaw) {\n throw new Ts23dError('T3D_RECIPE_INVALID', {\n cause: `part '${name}' sets both yaw and motion`,\n fix: 'put the yaw on a parent ctx.group and the motion on the part inside it',\n });\n }\n parts.set(name, {\n name,\n mesh,\n at: o.at ?? [0, 0, 0],\n parent: o.parent ?? null,\n yaw: o.yaw ?? 0,\n motion: o.motion ?? null,\n ...(o.clearOf ? { clearOf: o.clearOf } : {}),\n ...(o.surface && o.surface !== 'opaque' ? { surface: o.surface } : {}),\n });\n };\n const use = (child: Asset, o: UseOptions): void => {\n const sub = compile(child, { lod, seed: o.seed ?? seed });\n add(o.prefix, null, {\n at: o.at ?? [0, 0, 0],\n yaw: o.yaw ?? 0,\n ...(o.parent ? { parent: o.parent } : {}),\n });\n for (const p of sub.parts) {\n add(`${o.prefix}_${p.name}`, p.mesh, {\n at: p.at,\n yaw: p.yaw,\n parent: p.parent ? `${o.prefix}_${p.parent}` : o.prefix,\n ...(p.motion ? { motion: p.motion } : {}),\n ...(p.surface ? { surface: p.surface } : {}),\n });\n const named = parts.get(`${o.prefix}_${p.name}`);\n if (named && (p.emitter || p.socket)) {\n parts.set(named.name, {\n ...named,\n ...(p.emitter ? { emitter: p.emitter } : {}),\n ...(p.socket ? { socket: p.socket } : {}),\n });\n }\n }\n };\n asset.build({\n lod,\n seed,\n rng: createRng(seed),\n pick: (perLod) => perLod[lod],\n part: add,\n group: (name, o) => add(name, null, o),\n emitter: (name, { at, parent, ...emitter }) => {\n add(name, null, { ...(at ? { at } : {}), ...(parent ? { parent } : {}) });\n const p = parts.get(name);\n if (p) parts.set(name, { ...p, emitter });\n },\n socket: (name, { at, parent, ...socket }) => {\n add(name, null, { ...(at ? { at } : {}), ...(parent ? { parent } : {}) });\n const p = parts.get(name);\n if (p) parts.set(name, { ...p, socket });\n },\n use,\n });\n return {\n name: asset.name,\n kind: asset.kind,\n lod,\n budget: asset.budget,\n real: asset.real ?? null,\n checks: asset.checks ?? [],\n parts: [...parts.values()],\n ...metaOf(asset),\n ...(asset.glow?.length ? { glow: asset.glow } : {}),\n };\n}\n\nfunction metaOf(a: Asset): { meta?: AssetMeta } {\n const meta: AssetMeta = {\n ...(a.description ? { description: a.description } : {}),\n ...(a.sources?.length ? { sources: a.sources } : {}),\n ...(a.license ? { license: a.license } : {}),\n ...(a.copyright ? { copyright: a.copyright } : {}),\n ...(a.creators?.length ? { creators: a.creators } : {}),\n };\n return Object.keys(meta).length ? { meta } : {};\n}\n",
7
+ "// The asset contract: what defineAsset takes (AssetDefinition), what build() receives\n// (BuildContext), budgets, real-world dimensions, measures, checks, and the compiled result.\n\nimport type { Mesh } from './mesh.ts';\nimport type { EmitterOptions, Lod, Part, PartOptions, SocketOptions, UseOptions } from './part.ts';\nimport type { Rng } from './rng.ts';\n\nexport interface BuildContext {\n readonly lod: Lod;\n readonly seed: number;\n readonly rng: Rng;\n /** The value for this LOD: `ctx.pick([24, 12, 6])` — segments, counts, sizes per detail level. */\n pick<T>(perLod: readonly [T, T, T]): T;\n /** Add a named part. Names are the contract with the engine: `axle_*`, `door_*`, `rotor_*`. */\n part(name: string, mesh: Mesh | null, options?: PartOptions): void;\n /** An empty pivot that other parts parent to. */\n group(name: string, options?: PartOptions): void;\n /** Declare a particle source (smoke, steam, dust, muzzle…) as a named node. */\n emitter(name: string, options: EmitterOptions): void;\n /** Declare an attachment point (seat, mount, camera, audio, light…) as a named node. */\n socket(name: string, options: SocketOptions): void;\n /** Instance another asset inside this one, compiled at this LOD — the composition primitive. */\n use(asset: Asset, options: UseOptions): void;\n}\n\nexport interface Budget {\n /** Triangle ceiling per LOD; QA fails the build above it. */\n readonly triangles: readonly [number, number, number];\n}\n\n/** Real-world overall dimensions (metres) the QA `proportions` gate holds the model to. */\nexport interface RealDimensions {\n /** Along X (front-back). */\n readonly length: number;\n /** Along Y. */\n readonly width: number;\n /** Along Z. */\n readonly height: number;\n /** Allowed relative error per axis; default 0.05. */\n readonly tolerance?: number;\n /** Named spec-sheet dimensions checked against the model (QA `measures`). */\n readonly measures?: readonly Measure[];\n}\n\n/**\n * One real-world dimension from a source, checked against the model at LOD0: the world-space\n * extent of `parts` (union of their bounds) along `axis`, or the distance between two parts'\n * centres. E.g. driver diameter = extent of `axle_driver_0` on Z; gauge = centre distance of the\n * two rail parts on Y; turret width = extent of `turret_body` on Y.\n */\nexport interface Measure {\n readonly label: string;\n readonly value: number;\n readonly axis: 'x' | 'y' | 'z';\n /** Extent of these parts (prefix match: 'axle_driver_0' includes its wheels). */\n readonly parts?: readonly string[];\n /** Or: distance between the centres of exactly two parts along `axis`. */\n readonly between?: readonly [string, string];\n readonly tolerance?: number;\n /** Where this number comes from (one of `sources`, or a page reference). */\n readonly source?: string;\n}\n\n/** One problem a recipe's own check found. QA turns these into findings named `check`. */\nexport interface CheckFinding {\n readonly message: string;\n readonly fix: string;\n readonly part?: string;\n}\n\n/**\n * A recipe-declared assertion about its own geometry, run by the QA gate at every LOD:\n * \"tracks clear the hull\", \"wheels never overlap\", \"left matches right\". Plain functions —\n * build them with the helpers in /qa (`clear`, `touches`, `noOverlap`, `symmetric`) or write one.\n */\nexport type Check = (asset: CompiledAsset) => readonly CheckFinding[];\n\n/**\n * Triangle budgets per class (LOD0 / LOD1 / LOD2): a starting point, measured on real recipes.\n * `budget: BUDGETS.vehicle` — raise one with a measured reason, never to hide a regression.\n */\nexport const BUDGETS = {\n prop: { triangles: [800, 300, 80] },\n detailedProp: { triangles: [5000, 1500, 300] },\n building: { triangles: [20000, 6000, 800] },\n vehicle: { triangles: [60000, 15000, 1000] },\n hero: { triangles: [150000, 40000, 2000] },\n tree: { triangles: [25000, 6000, 300] },\n scene: { triangles: [500000, 120000, 15000] },\n} as const satisfies Record<string, Budget>;\n\n/** A part set that emits light (lamp lenses, lit windows): an emissive material in the GLB. */\nexport interface Glow {\n /** Part names or globs: 'headlamp_*', 'window_*'. */\n readonly parts: readonly string[];\n /** Linear RGB 0..1 (`hex('#ffd9a0')`). Default warm white. */\n readonly color?: readonly [number, number, number];\n /** Brightness multiplier (KHR_materials_emissive_strength); 1 = plain glTF. Default 4. */\n readonly strength?: number;\n}\n\n/** Provenance written into every GLB: `asset.copyright` + an XMP packet. */\nexport interface AssetMeta {\n readonly description?: string;\n readonly sources?: readonly string[];\n /** SPDX id or licence URL, e.g. 'CC0-1.0', 'MIT'. */\n readonly license?: string;\n /** e.g. '© 2026 Jane Doe'. */\n readonly copyright?: string;\n readonly creators?: readonly string[];\n}\n\nexport interface AssetDefinition {\n readonly name: string;\n readonly kind: string;\n readonly description?: string;\n /** Where the numbers came from: spec sheets, rosters, drawings, photos. Required for `real`. */\n readonly sources?: readonly string[];\n readonly real?: RealDimensions;\n readonly tags?: readonly string[];\n readonly budget: Budget;\n readonly seed?: number;\n /** The recipe's own physical intent, enforced by QA (see Check). */\n readonly checks?: readonly Check[];\n /** SPDX id or licence URL for the generated asset, e.g. 'CC0-1.0'. Written into the GLB. */\n readonly license?: string;\n readonly copyright?: string;\n readonly creators?: readonly string[];\n /** Emissive part sets; `t3d build` writes them as glowing materials. */\n readonly glow?: readonly Glow[];\n /**\n * View-distance hints for the single-file GLB (MSFT_lod `MSFT_screencoverage`): the screen-height\n * fraction below which LOD0 → LOD1, LOD1 → LOD2, and LOD2 is culled (0 = never). Strictly\n * descending, 1 > a > b > c >= 0. Omitted: derived from the triangle counts and size.\n */\n readonly lodCoverage?: readonly [number, number, number];\n build(ctx: BuildContext): void;\n}\n\nexport interface Asset extends AssetDefinition {\n readonly __ts23d: 'asset';\n}\n\nexport interface CompiledAsset {\n readonly name: string;\n readonly kind: string;\n readonly lod: Lod;\n readonly budget: Budget;\n readonly real: RealDimensions | null;\n readonly checks: readonly Check[];\n readonly parts: readonly Part[];\n /** Provenance carried from the definition (absent when the recipe declares none). */\n readonly meta?: AssetMeta;\n readonly glow?: readonly Glow[];\n readonly lodCoverage?: readonly [number, number, number];\n}\n",
8
+ "// The DSL's root: an asset is a TypeScript function that builds named parts into a scene.\n// Code, not JSON — loops, helpers and composition are the point (docs/decisions/002).\n\nimport type { Asset, AssetDefinition, AssetMeta, CompiledAsset } from './definition.ts';\nimport { Ts23dError } from './errors.ts';\nimport type { Mesh } from './mesh.ts';\nimport type { Lod, Part, PartOptions, UseOptions } from './part.ts';\nimport { createRng } from './rng.ts';\n\nexport * from './definition.ts';\nexport * from './part.ts';\n\nexport function defineAsset(def: AssetDefinition): Asset {\n if (!/^[a-z][a-z0-9_]*$/.test(def.name)) {\n throw new Ts23dError('T3D_RECIPE_INVALID', {\n cause: `asset name '${def.name}' is not snake_case`,\n fix: 'rename it to [a-z][a-z0-9_]* — it becomes the GLB file name and the root node',\n });\n }\n return { ...def, __ts23d: 'asset' };\n}\n\nexport const isAsset = (value: unknown): value is Asset =>\n typeof value === 'object' &&\n value !== null &&\n (value as { __ts23d?: unknown }).__ts23d === 'asset';\n\nexport function compile(asset: Asset, options: { lod?: Lod; seed?: number } = {}): CompiledAsset {\n const lod = options.lod ?? 0;\n const seed = options.seed ?? asset.seed ?? 1;\n const parts = new Map<string, Part>();\n const add = (name: string, mesh: Mesh | null, o: PartOptions = {}): void => {\n if (parts.has(name)) {\n throw new Ts23dError('T3D_PART_DUPLICATE', {\n cause: `part '${name}' was added twice in '${asset.name}'`,\n fix: 'give each part a unique name — suffix the loop index, e.g. wheel_0, wheel_1',\n });\n }\n if (o.parent !== undefined && !parts.has(o.parent)) {\n throw new Ts23dError('T3D_PART_UNKNOWN', {\n cause: `part '${name}' parents to '${o.parent}', which does not exist yet`,\n fix: 'add the parent (ctx.group or ctx.part) before its children',\n });\n }\n if (o.motion && o.yaw) {\n throw new Ts23dError('T3D_RECIPE_INVALID', {\n cause: `part '${name}' sets both yaw and motion`,\n fix: 'put the yaw on a parent ctx.group and the motion on the part inside it',\n });\n }\n parts.set(name, {\n name,\n mesh,\n at: o.at ?? [0, 0, 0],\n parent: o.parent ?? null,\n yaw: o.yaw ?? 0,\n motion: o.motion ?? null,\n ...(o.clearOf ? { clearOf: o.clearOf } : {}),\n ...(o.surface && o.surface !== 'opaque' ? { surface: o.surface } : {}),\n });\n };\n const use = (child: Asset, o: UseOptions): void => {\n const sub = compile(child, { lod, seed: o.seed ?? seed });\n add(o.prefix, null, {\n at: o.at ?? [0, 0, 0],\n yaw: o.yaw ?? 0,\n ...(o.parent ? { parent: o.parent } : {}),\n });\n for (const p of sub.parts) {\n add(`${o.prefix}_${p.name}`, p.mesh, {\n at: p.at,\n yaw: p.yaw,\n parent: p.parent ? `${o.prefix}_${p.parent}` : o.prefix,\n ...(p.motion ? { motion: p.motion } : {}),\n ...(p.surface ? { surface: p.surface } : {}),\n });\n const named = parts.get(`${o.prefix}_${p.name}`);\n if (named && (p.emitter || p.socket)) {\n parts.set(named.name, {\n ...named,\n ...(p.emitter ? { emitter: p.emitter } : {}),\n ...(p.socket ? { socket: p.socket } : {}),\n });\n }\n }\n };\n asset.build({\n lod,\n seed,\n rng: createRng(seed),\n pick: (perLod) => perLod[lod],\n part: add,\n group: (name, o) => add(name, null, o),\n emitter: (name, { at, parent, ...emitter }) => {\n add(name, null, { ...(at ? { at } : {}), ...(parent ? { parent } : {}) });\n const p = parts.get(name);\n if (p) parts.set(name, { ...p, emitter });\n },\n socket: (name, { at, parent, ...socket }) => {\n add(name, null, { ...(at ? { at } : {}), ...(parent ? { parent } : {}) });\n const p = parts.get(name);\n if (p) parts.set(name, { ...p, socket });\n },\n use,\n });\n return {\n name: asset.name,\n kind: asset.kind,\n lod,\n budget: asset.budget,\n real: asset.real ?? null,\n checks: asset.checks ?? [],\n parts: [...parts.values()],\n ...metaOf(asset),\n ...(asset.glow?.length ? { glow: asset.glow } : {}),\n ...(asset.lodCoverage ? { lodCoverage: asset.lodCoverage } : {}),\n };\n}\n\nfunction metaOf(a: Asset): { meta?: AssetMeta } {\n const meta: AssetMeta = {\n ...(a.description ? { description: a.description } : {}),\n ...(a.sources?.length ? { sources: a.sources } : {}),\n ...(a.license ? { license: a.license } : {}),\n ...(a.copyright ? { copyright: a.copyright } : {}),\n ...(a.creators?.length ? { creators: a.creators } : {}),\n };\n return Object.keys(meta).length ? { meta } : {};\n}\n",
9
9
  "// Parametric families: one build function, many assets. A variant is a name plus the parameters\n// that differ — \"T-34 1941 vs 1943 turret\", \"4-4-0 vs 2-6-0\", \"oak vs birch\" — so a new model is a\n// one-key change, not a copied file. Families extend families: `base.extend({...})` layers new\n// defaults and can wrap the parent's build to add or replace detail.\n\nimport { type Asset, type AssetDefinition, type BuildContext, defineAsset } from './asset.ts';\n\ntype Shared = Omit<AssetDefinition, 'name' | 'build'>;\n\nexport interface FamilyDefinition<P extends object> extends Shared {\n /** Defaults for every parameter; variants override a subset. */\n readonly defaults: P;\n build(ctx: BuildContext, params: Readonly<P>): void;\n}\n\nexport interface Variant<P> extends Partial<Shared> {\n readonly name: string;\n readonly params?: Partial<P>;\n}\n\nexport interface Family<P extends object> {\n readonly defaults: Readonly<P>;\n /** Make one asset of this family. */\n variant(v: Variant<P>): Asset;\n /** Derive a family: new defaults (may add parameters) and optionally a build that wraps ours. */\n extend<Q extends object>(\n o: {\n readonly defaults: Q;\n readonly build?: (ctx: BuildContext, params: Readonly<P & Q>, base: () => void) => void;\n } & Partial<Shared>,\n ): Family<P & Q>;\n}\n\nexport function defineFamily<P extends object>(def: FamilyDefinition<P>): Family<P> {\n const { defaults, build, ...shared } = def;\n return {\n defaults,\n variant: ({ name, params, ...over }) => {\n const p = { ...defaults, ...params } as P;\n return defineAsset({ ...shared, ...over, name, build: (ctx) => build(ctx, p) });\n },\n extend: ({ defaults: more, build: wrap, ...over }) =>\n defineFamily<P & typeof more>({\n ...shared,\n ...over,\n defaults: { ...defaults, ...more },\n build: (ctx, p) => (wrap ? wrap(ctx, p, () => build(ctx, p)) : build(ctx, p)),\n }),\n };\n}\n",
10
10
  "// The IR: a triangle mesh with per-vertex normal, UV (into the shared trim sheet) and colour.\n// Every primitive emits one; passes and back ends consume one. Nothing else crosses stages.\n\nimport type { Vec2, Vec3 } from './vec.ts';\n\nexport interface Bounds {\n readonly min: Vec3;\n readonly max: Vec3;\n}\n\nexport interface Mesh {\n readonly positions: Float32Array;\n readonly normals: Float32Array;\n readonly uvs: Float32Array;\n readonly colors: Float32Array;\n readonly indices: Uint32Array;\n}\n\nexport interface Vertex {\n readonly p: Vec3;\n readonly n: Vec3;\n readonly uv: Vec2;\n readonly color: Vec3;\n}\n\nexport class MeshBuilder {\n private readonly p: number[] = [];\n private readonly n: number[] = [];\n private readonly uv: number[] = [];\n private readonly c: number[] = [];\n private readonly idx: number[] = [];\n\n vertex(v: Vertex): number {\n this.p.push(...v.p);\n this.n.push(...v.n);\n this.uv.push(...v.uv);\n this.c.push(...v.color);\n return this.p.length / 3 - 1;\n }\n\n tri(a: number, b: number, c: number): this {\n this.idx.push(a, b, c);\n return this;\n }\n\n /** Counter-clockwise quad a-b-c-d as seen from the side its normal faces. */\n quad(a: number, b: number, c: number, d: number): this {\n return this.tri(a, b, c).tri(a, c, d);\n }\n\n build(): Mesh {\n return {\n positions: new Float32Array(this.p),\n normals: new Float32Array(this.n),\n uvs: new Float32Array(this.uv),\n colors: new Float32Array(this.c),\n indices: new Uint32Array(this.idx),\n };\n }\n}\n\nexport const triangleCount = (m: Mesh): number => m.indices.length / 3;\n\nexport function boundsOf(m: Mesh): Bounds {\n const min = [Infinity, Infinity, Infinity];\n const max = [-Infinity, -Infinity, -Infinity];\n for (let i = 0; i < m.positions.length; i += 3) {\n for (let k = 0; k < 3; k++) {\n const v = m.positions[i + k] ?? 0;\n if (v < (min[k] ?? 0)) min[k] = v;\n if (v > (max[k] ?? 0)) max[k] = v;\n }\n }\n return {\n min: [min[0] ?? 0, min[1] ?? 0, min[2] ?? 0],\n max: [max[0] ?? 0, max[1] ?? 0, max[2] ?? 0],\n };\n}\n\n/** Bake a translation into a mesh (parts are authored in parent space, then offset). */\nexport function translate(m: Mesh, by: Vec3): Mesh {\n const positions = new Float32Array(m.positions);\n for (let i = 0; i < positions.length; i += 3) {\n positions[i] = (positions[i] ?? 0) + by[0];\n positions[i + 1] = (positions[i + 1] ?? 0) + by[1];\n positions[i + 2] = (positions[i + 2] ?? 0) + by[2];\n }\n return { ...m, positions };\n}\n\nexport function merge(meshes: readonly Mesh[]): Mesh {\n // Preallocated from summed lengths: no intermediate arrays, no spread (which overflows the\n // call stack on very large inputs).\n const sum = (f: (m: Mesh) => number): number => meshes.reduce((t, m) => t + f(m), 0);\n const positions = new Float32Array(sum((m) => m.positions.length));\n const normals = new Float32Array(sum((m) => m.normals.length));\n const uvs = new Float32Array(sum((m) => m.uvs.length));\n const colors = new Float32Array(sum((m) => m.colors.length));\n const indices = new Uint32Array(sum((m) => m.indices.length));\n let v = 0;\n let uv = 0;\n let ix = 0;\n for (const m of meshes) {\n positions.set(m.positions, v * 3);\n normals.set(m.normals, v * 3);\n colors.set(m.colors, v * 3);\n uvs.set(m.uvs, uv);\n for (let i = 0; i < m.indices.length; i++) indices[ix + i] = (m.indices[i] ?? 0) + v;\n v += m.positions.length / 3;\n uv += m.uvs.length;\n ix += m.indices.length;\n }\n return { positions, normals, uvs, colors, indices };\n}\n",
11
11
  "// RGBA → PNG bytes: contact sheets, painted trim sheets, embedded GLB textures. Zero dependencies beyond node:zlib (present in Bun and Node).\n\nimport { deflateSync } from 'node:zlib';\n\nconst CRC = new Uint32Array(256).map((_, n) => {\n let c = n;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n return c >>> 0;\n});\n\nfunction crc32(bytes: Uint8Array): number {\n let c = 0xffffffff;\n for (const b of bytes) c = (CRC[(c ^ b) & 0xff] ?? 0) ^ (c >>> 8);\n return (c ^ 0xffffffff) >>> 0;\n}\n\nfunction chunk(type: string, data: Uint8Array): Uint8Array {\n const out = new Uint8Array(12 + data.length);\n const dv = new DataView(out.buffer);\n dv.setUint32(0, data.length);\n out.set(new TextEncoder().encode(type), 4);\n out.set(data, 8);\n dv.setUint32(8 + data.length, crc32(out.subarray(4, 8 + data.length)));\n return out;\n}\n\nexport function encodePng(width: number, height: number, rgba: Uint8Array): Uint8Array {\n const raw = new Uint8Array(height * (width * 4 + 1));\n for (let y = 0; y < height; y++)\n raw.set(rgba.subarray(y * width * 4, (y + 1) * width * 4), y * (width * 4 + 1) + 1);\n const ihdr = new Uint8Array(13);\n const dv = new DataView(ihdr.buffer);\n dv.setUint32(0, width);\n dv.setUint32(4, height);\n ihdr.set([8, 6, 0, 0, 0], 8);\n const parts = [\n new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]),\n chunk('IHDR', ihdr),\n chunk('IDAT', new Uint8Array(deflateSync(raw))),\n chunk('IEND', new Uint8Array()),\n ];\n const out = new Uint8Array(parts.reduce((s, p) => s + p.length, 0));\n let o = 0;\n for (const p of parts) {\n out.set(p, o);\n o += p.length;\n }\n return out;\n}\n",
@@ -13,7 +13,7 @@
13
13
  "// Minimal vector math. Units are metres, Z is up, +X is an asset's \"front\" (docs/idea/03-ir.md).\n\nexport type Vec2 = readonly [number, number];\nexport type Vec3 = readonly [number, number, number];\nexport type Quat = readonly [number, number, number, number];\n\nexport const add = (a: Vec3, b: Vec3): Vec3 => [a[0] + b[0], a[1] + b[1], a[2] + b[2]];\nexport const sub = (a: Vec3, b: Vec3): Vec3 => [a[0] - b[0], a[1] - b[1], a[2] - b[2]];\nexport const scale = (a: Vec3, s: number): Vec3 => [a[0] * s, a[1] * s, a[2] * s];\nexport const dot = (a: Vec3, b: Vec3): number => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\nexport const cross = (a: Vec3, b: Vec3): Vec3 => [\n a[1] * b[2] - a[2] * b[1],\n a[2] * b[0] - a[0] * b[2],\n a[0] * b[1] - a[1] * b[0],\n];\nexport const length = (a: Vec3): number => Math.hypot(a[0], a[1], a[2]);\nexport const normalize = (a: Vec3): Vec3 => {\n const l = length(a);\n return l === 0 ? [0, 0, 0] : scale(a, 1 / l);\n};\n\nexport function quatFromAxisAngle(axis: Vec3, radians: number): Quat {\n const [x, y, z] = normalize(axis);\n const s = Math.sin(radians / 2);\n return [x * s, y * s, z * s, Math.cos(radians / 2)];\n}\n",
14
14
  "// Part-space → world-space. Parts chain translation + yaw through their parents; QA, the\n// rasteriser and any back end that flattens a scene read world positions from here.\n\nimport type { Part } from './asset.ts';\nimport type { Mesh } from './mesh.ts';\nimport type { Vec3 } from './vec.ts';\n\nexport interface WorldTransform {\n readonly origin: Vec3;\n readonly yaw: number;\n}\n\nconst rotZ = (p: Vec3, yaw: number): Vec3 => {\n const c = Math.cos(yaw);\n const s = Math.sin(yaw);\n return [p[0] * c - p[1] * s, p[0] * s + p[1] * c, p[2]];\n};\n\nexport function worldTransforms(parts: readonly Part[]): Map<string, WorldTransform> {\n const out = new Map<string, WorldTransform>();\n for (const p of parts) {\n const parent = (p.parent ? out.get(p.parent) : undefined) ?? {\n origin: [0, 0, 0] as Vec3,\n yaw: 0,\n };\n const at = rotZ(p.at, parent.yaw);\n out.set(p.name, {\n origin: [parent.origin[0] + at[0], parent.origin[1] + at[1], parent.origin[2] + at[2]],\n yaw: parent.yaw + p.yaw,\n });\n }\n return out;\n}\n\nexport function toWorld(t: WorldTransform, p: Vec3): Vec3 {\n const r = rotZ(p, t.yaw);\n return [r[0] + t.origin[0], r[1] + t.origin[1], r[2] + t.origin[2]];\n}\n\nexport const rotateZ = rotZ;\n\n/** A part's mesh baked into world space (positions and normals), ready for QA or rasterising. */\nexport function worldMesh(mesh: Mesh, t: WorldTransform): Mesh {\n const positions = new Float32Array(mesh.positions.length);\n const normals = new Float32Array(mesh.normals.length);\n for (let i = 0; i < positions.length; i += 3) {\n positions.set(\n toWorld(t, [mesh.positions[i] ?? 0, mesh.positions[i + 1] ?? 0, mesh.positions[i + 2] ?? 0]),\n i,\n );\n normals.set(\n rotZ([mesh.normals[i] ?? 0, mesh.normals[i + 1] ?? 0, mesh.normals[i + 2] ?? 0], t.yaw),\n i,\n );\n }\n return { ...mesh, positions, normals };\n}\n\n// QA gates, checks, renderers and measures all ask for the same world meshes: compute once per\n// parts array (a CompiledAsset's parts are immutable).\nconst worldCache = new WeakMap<readonly Part[], Map<string, Mesh>>();\n\n/** Every part with geometry, in world space, keyed by part name. Cached per parts array. */\nexport function worldMeshes(parts: readonly Part[]): Map<string, Mesh> {\n const hit = worldCache.get(parts);\n if (hit) return hit;\n const out = computeWorldMeshes(parts);\n worldCache.set(parts, out);\n return out;\n}\n\nfunction computeWorldMeshes(parts: readonly Part[]): Map<string, Mesh> {\n const xf = worldTransforms(parts);\n const out = new Map<string, Mesh>();\n for (const p of parts) {\n const t = xf.get(p.name);\n if (p.mesh && t && p.mesh.indices.length > 0) out.set(p.name, worldMesh(p.mesh, t));\n }\n return out;\n}\n"
15
15
  ],
16
- "mappings": "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",
17
- "debugId": "91716F1616A183CA64756E2164756E21",
16
+ "mappings": "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",
17
+ "debugId": "288573E03E7A25C964756E2164756E21",
18
18
  "names": []
19
19
  }
@@ -6,7 +6,7 @@ import {
6
6
  worldTransforms2,
7
7
  toWorld2,
8
8
  worldMeshes2
9
- } from "./chunk-4ddzsqtc.js";
9
+ } from "./chunk-hg7pf34j.js";
10
10
 
11
11
  // src/qa/geometry.ts
12
12
  var at = (m, i) => [
@@ -1028,4 +1028,4 @@ function runLodQa2(lods, gates = DEFAULT_LOD_GATES2) {
1028
1028
  export { pointTriangleDistance2, TriangleGrid2, surfaceSamples2, insideSolid2, glob2, inspect2, clear2, noOverlap2, touches2, symmetric2, runChecks2, CONTACT_EPS2, CLASH_EPS2, clashes2, touching2, floatingParts2, measure2, measures2, zFighting2, hiddenParts2, nonFinite2, vertexColors2, normalsMatchWinding2, degenerateTriangles2, triangleBudget2, partNames2, proportions2, silhouetteIoU2, DEFAULT_GATES2, runQa2, lodTriangles2, lodSilhouette2, lodPivots2, DEFAULT_LOD_GATES2, runLodQa2 };
1029
1029
 
1030
1030
  //# debugId=D719F42A62E0985B64756E2164756E21
1031
- //# sourceMappingURL=chunk-w1zyhj40.js.map
1031
+ //# sourceMappingURL=chunk-jq4e17tj.js.map