@deepblend/dsh-blender-preset 0.13.0 → 0.14.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deepblend/dsh-blender-preset",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "type": "module",
5
5
  "description": "DeepBlend Agent-preset plane: ships the DeepBlend Studio agent presets and the deployer row that installs them into the DSH home.",
6
6
  "main": "lib/index.js",
@@ -56,11 +56,17 @@ limit. Additional views still need to show the features required by the brief.
56
56
 
57
57
  For an existing assembly dimension edit, the final handoff must be a compact receipt:
58
58
  - project/current revision and the retained original;
59
- - only the requested overall dimensions, from the saved native span receipt;
59
+ - requested dimensions as saved controls, and the measured native spans with their coordinate basis;
60
60
  - saved custom keyframe timing and protected cameras when requested;
61
61
  - the actual registered native file and primary/back images;
62
62
  - the remaining score findings and unmeasured global conditions.
63
63
  Do not add component tables, inferred margins, or a prose retelling of movement groups.
64
+ A distance from the object origin to one sampled face is one-sided evidence, not a
65
+ measured overall size. Do not double it into a measured width/depth/height without
66
+ checking the opposite boundary. Give any interval its exact coordinate basis and
67
+ whether it covers a half-span or full span; do not call a doubled full interval a
68
+ half-depth. Saved controls and world-axis extents are sufficient when intrinsic
69
+ overall geometry has not been measured; do not invent extra measurements.
64
70
  Do not infer no floating, no interpenetration, topology or clearance from beauty previews.
65
71
  Without corresponding measurements those conditions remain unassessed, even if a view looks good.
66
72
  The save receipt and scene document contain the detailed part changes for inspection.
@@ -126,6 +132,21 @@ it keeps the complete verified objects, samples and source identity while omitti
126
132
  the scene catalogue. Read the scene separately when selecting parts or seeds.
127
133
  It cannot be combined with `full:true`.
128
134
 
135
+ For a dimension edit, request `geometryObjectAxes:true` together with the selected
136
+ native IDs and explicit frame. In a v3 receipt, `objectAxisExtentMm` directly measures
137
+ full evaluated mesh extents along the object's own physical orthogonal axes, including
138
+ native construction/world scale. `objectAxisWorldMatrix` states those normalized axes
139
+ and the native origin; `objectAxisBasis` is `evaluated-object-axes-scaled`. Use this
140
+ returned evidence instead of inverting a world bounding box or doubling one-sided rays.
141
+ For the pinned cabinet-shell these axes correspond to shell width/depth/height. They
142
+ are full per-object mesh extents; for a handled cup, for example, protrusions are included
143
+ and they do not by themselves establish body diameter or wall thickness.
144
+ `objectAxisStatus:unsupported-object-axis-basis` has no axis numbers: a sheared or
145
+ degenerate basis must stay unavailable while world measurements can remain available.
146
+ Do not apply native scale a second time. A non-unit native scale can come from a
147
+ primitive's construction, even when the authored SceneSpec scale is [1,1,1]; it does not
148
+ establish a manual scaling edit or a recipe-to-body mismatch.
149
+
129
150
  For saved native size/movement comparisons, use `geometryCompareRevision` with the
130
151
  old saved revision, the selected `geometryEntityIds`, and explicit `geometryFrame`.
131
152
  Without surface samples, `geometryComparison.objects` gives current-minus-reference
@@ -330,9 +351,42 @@ the current revision and repeat the affected views with the same settings.
330
351
  describe all relative offsets as invariant. A world-coordinate endpoint is not an exposure
331
352
  or clearance distance. If no returned field defines a relationship measurement, leave it
332
353
  unmeasured instead of deriving an attachment distance or margin in the final answer.
333
- Pinned speaker 2.0/2.1 assemblies can retain a complete manual translation, including the
334
- button rest anchor, while resizing. Partial moves and rotated dimension-controlled parts
335
- remain conflicts. Keep custom photography; verify its framing after the size change.
354
+ Pinned speaker 2.0/2.1 assemblies can retain a complete manual translation or XYZ rigid
355
+ pose while resizing when every original part and the button rest anchors agree. A rotated
356
+ button needs the corresponding saved world-axis curves; retain their actual timing/travel.
357
+ For a tilted button, a world-Z change alone is not its total travel. Compare the measured
358
+ XYZ endpoints at the authored rest/press frames: report those components separately, or
359
+ use their Euclidean displacement magnitude for total travel; never label just Z as travel.
360
+ Partial moves, independently rotated parts, scaling and missing animation anchors remain
361
+ conflicts. Keep custom photography and verify framing; add a complete delivery view when
362
+ a protected camera clips the enlarged assembly, without replacing that authored camera.
363
+ For whole-product delivery, select the cabinet shell explicitly with preview_views.subjectId
364
+ and track the shell and named end parts; automatic subject selection may choose a cable.
365
+ Inspect each full-resolution saved front/back PNG, not only the small contact sheet.
366
+ frameBoundaryContacts reports image-edge contact for tracked silhouettes even when they
367
+ are not the selected subject. A positive silhouette with inFrame:false or a bbox touching
368
+ 0/1 cannot support a claim of complete framing. Pixel masks end at the image edge; a
369
+ high score, VALID scene or some projected corners inside is not proof of a complete view.
370
+ Keep authored cameras unchanged. If the requested full product touches an edge, add a
371
+ separate delivery camera with breathing room, render it and inspect the new saved image.
372
+ Contact-free selected parts still do not certify untracked geometry or occlusion.
373
+
374
+ Native world-axis spans change with rotation and cannot certify cabinet-local width/depth/
375
+ height. Distinguish saved size controls from those measured spans. Do not undo the user's
376
+ placement or scale the assembly to make world spans match the requested local dimensions.
377
+ If a multi-part speaker review reports the shell hidden behind its own fitted
378
+ front/rear enclosure panels, inspect the named entities and saved recipe first.
379
+ For the pinned speaker, front-baffle and rear-service-panel are authored enclosure
380
+ parts. Preserve their existing tags and add subject-part through ordinary
381
+ entity.tags.set when those declarations are missing, then rerun the same review.
382
+ Retain the original review and all remaining findings. Do not tag the floor,
383
+ unrelated objects or every scene entity as subject-part to raise a score, and
384
+ do not delete, hide or move parts or protected cameras to make a review pass.
385
+ Keep the current measured findings even for the environment or a detail camera.
386
+ Their tags or intended purpose alone do not establish that a finding is a non-defect.
387
+ A verified enclosure-part declaration does not clear floor occlusion or framing issues.
388
+ Prefer the parameter/native tool receipts over filesystem searches for dimensions,
389
+ animation or registered files; do not reverse-engineer dimensions from world bounds.
336
390
  Controlled geometry conflicts require resolving the named parts before saving. Old recipes
337
391
  without geometry controls return available:false. Use a fresh idempotencyKey for each new
338
392
  intent, including edits after restoring history; reuse it only for the same retry.
@@ -345,8 +399,28 @@ the current revision and repeat the affected views with the same settings.
345
399
  registration. Do not guess a producer's old absolute directory from historical metadata.
346
400
  4. **`blender_scene_get`** — read before writing. Patching without reading is how a
347
401
  stale `baseRevision` produces a refusal you then have to diagnose.
402
+ For exact fields of one saved entity in a large scene, use `sourceEntityId`.
403
+ It returns bounded compact JSON `sourceText`, `nextOffset`, revision and
404
+ `entityJsonSha256`. Continue with that explicit revision and `sourceOffset:nextOffset`,
405
+ verify the hash stays identical, concatenate the chunks in order, then parse JSON.
406
+ `nextOffset:null` ends the entity. `sourceLimit` is 1–2048 characters; escaped
407
+ text may return fewer. Do not combine this mode with full or geometry reads.
408
+ This preset has no generic `read` tool: do not spend repeated grep calls trying
409
+ to reconstruct multiline control vertices from spilled full-scene output.
348
410
  5. **`blender_scene_patch`** — submit ordinary scene edits as bounded operations. There is no free-form
349
411
  edit and no script. See "Revision discipline" below.
412
+ To reuse exact saved geometry without repeating control arrays, supply up to16
413
+ `entityCopies:[{sourceEntityId,newEntityId,transform?}]` from `baseRevision`.
414
+ These become ordinary entity.add operations before `operations` (which may be []).
415
+ Transform components are absolute overrides; omitted components and other authored
416
+ entity fields remain exact. Each source must exist in that saved revision; target IDs
417
+ must be new and distinct. References are retained, not remapped; child assemblies and
418
+ animation tracks are not copied. Decide placement explicitly and inspect native
419
+ contact and actual renders. Copying does not create a natural layout automatically.
420
+ `entityCopyOffset:[dx,dy,dz]` translates all selected copies by one common world-metre
421
+ displacement, preserving their relative placement. Omit every copy's transform.location
422
+ in this mode; per-entity rotation/scale overrides remain absolute. Select every required
423
+ part explicitly: unselected references/dependencies and animation are not moved/copied.
350
424
  6. **`blender_preview_render` / `blender_preview_views`** — look at it. `preview_views`
351
425
  renders several declared views in one Blender launch and returns contact sheet
352
426
  paths and measurements, and attaches the verified saved contact sheet for image-capable models.
@@ -477,3 +551,22 @@ sourceMaterialSlots 的原始 index。materialSlots 只表示当前结果,可
477
551
  `{partId,materialId,slotIndex?}`。省略槽位表示这个网格的全部槽,指定槽覆盖优先。
478
552
  保持原几何、UV 和面的材质索引;部件父路径不隐式选择后代。空数组恢复原材质或现有
479
553
  entity.materialId 的整体覆盖。局部图片材质同样要求被使用网格有对应 UV;不要猜选择器。
554
+
555
+ ### Repeated details attached to static closed meshes
556
+
557
+ Use a final `surface_scatter` modifier on a generated prototype instead of listing
558
+ hundreds of repeated mesh payloads. Set `targetEntityIds` (1–8 closed generated
559
+ meshes), `count` (1–512), and `anchorVertexIndices` (1–8 distinct indices in the
560
+ actual mesh AFTER earlier modifiers). Local +Z is the outward growth direction.
561
+ Optional `seed` defaults to 0, `embedDepthMm` to 5 (positive, at most 100),
562
+ `scaleRange` to [1,1] (ordered, within 0.05–20), and `upwardBias` to 0 (0–1).
563
+ All selected attachment vertices must lie inside the actual support for each
564
+ instance; insufficient placements refuse the entire candidate. Start with a
565
+ small count to verify anchor indices, support thickness and prototype size.
566
+ The source, targets and any dependencies must remain static: no rigs, physics
567
+ or entity transform animation; nested scatter targets are unavailable.
568
+ The result is an editable native mesh with preserved UV/material assignments
569
+ and deterministic placement metadata. Placement recalculates on rebuild; it
570
+ does not certify whole-leaf clearance, self-intersection freedom or appearance.
571
+ Preserve old entities and manual edits, and inspect fixed front/side renders
572
+ before accepting density, repetition or silhouette.