# Integration Notes — Opus Review

## Integrating

### #1 + #2: GDScript-side node count guard
**Integrate.** Add a hard cap of 256 in the GDScript handler after pattern expansion. Truncate excess and report warning. This is defense-in-depth.

### #3: Remove auto-create parent
**Integrate.** Remove auto-creation. Return error if parent not found, matching node_ops behavior. Consistency is more important than convenience.

### #4: Scatter validation
**Integrate.** Access `scatter.get("items", [])` for count. Return error if `items` key missing.

### #5: Required sub-field validation
**Integrate.** Add validation in `_validate_build_params`:
- Grid: rows > 0, cols > 0 required
- Line: points array with len >= 2 required
- Scatter: items must be non-empty list
- Mode-specific scene/type presence checked at addon level (partial success handles it)

### #6: apply_output_limit list_keys
**Integrate.** Pass `list_keys=["errors"]`.

### #7: Line endpoint duplication
**Integrate.** Add epsilon check: if last placed node within `spacing * 0.1` of endpoint, skip forced endpoint.

### #8: Rotation format
**Integrate.** Clarify: all rotation arrays are [x, y, z] in degrees for 3D. For 2D nodes, rotation is not supported via build_scene (2D rotation is a single float, too different to auto-detect). Document this.

### #14: Error recovery in prompt
**Integrate.** Add build_scene error recovery entries.

### #15: `scene` parameter rename
**Integrate.** Rename top-level to `target_scene` to avoid collision. This matches clarity goals.

### #19: Edge case tests
**Integrate.** Add tests for: rows=0 grid, 1-point line, empty scatter items, single node grid (1x1).

## NOT Integrating

### #9: Default scale in grid/line
**Skip.** Per-cell overrides handle this. Adding default scale adds API complexity for a rare need. Can add later.

### #10: Default properties in grid/line
**Skip.** Same reasoning as #9. Overrides handle it.

### #11: Save scene recommendation
**Skip for plan.** This is usage guidance, not an implementation concern. The prompt section already says "save after each phase."

### #12: Spec file inconsistency
**Already resolved.** Plan targets correct file.

### #13: Export convention
**Skip.** Tests importing private functions with leading underscore is standard Python practice for testing internals.

### #16: Performance target
**Skip explicit target.** "Test with 256 nodes" is sufficient. If slow, reduce limit. No need to specify seconds.

### #17: Node name uniqueness
**Skip.** Godot handles this natively (auto-renames with @N suffix). This is expected behavior, not a bug. Documenting it in the docstring is sufficient.

### #18: Payload size
**Skip.** 50KB is well within WebSocket limits. Not a real concern.

### #20: detail default
**Skip.** The prompt says "default to brief." build_scene follows the prompt, not other tools.
