Files
osmWorkflow/.trellis/tasks/archive/2026-08/08-03-extract-fountain-module/implement.md

1.7 KiB

Implementation Plan

Checklist

  1. Capture a parity baseline before product-code edits.
  2. Add blender/osmassets/fountain.py with the current fountain assembly logic.
  3. Import the module in blender/generate_scene.py.
  4. Remove inline add_fountain() from generate_scene.py.
  5. Replace the call site with fountain.assemble(...).
  6. Run Python validation:
    • python3 -m py_compile blender/osmassets/fountain.py
    • python3 -m py_compile blender/generate_scene.py
    • python3 -m unittest blender/tests/test_pure.py
  7. Capture parity after the refactor.
  8. Compare before/after parity snapshots and inspect any non-ignored diff.
  9. Update .trellis/spec or docs/changelog.md only if the work reveals a durable new constraint or user-visible change.
  10. Commit, archive the task, and record the journal entry.

Validation Commands

node scripts/parity.js capture fountain-module-before --stages blender,cesium
python3 -m py_compile blender/osmassets/fountain.py
python3 -m py_compile blender/generate_scene.py
python3 -m unittest blender/tests/test_pure.py
node scripts/parity.js capture fountain-module-after --stages blender,cesium
node scripts/parity.js compare fountain-module-before fountain-module-after

Risk Points

  • link_object_to_collection() must be used the same way as before so object collection membership stays unchanged.
  • The basin custom property must remain on the basin object only.
  • Droplet order and names must stay stable.
  • math usage may move with the function; remove the import from generate_scene.py only if no remaining code uses it.
  • Parity is mandatory because this is a pure refactor of bpy-layer scene generation.