feat: Complete pipeline hot-rebuild implementation with acceptance tests

- Implements pipeline hot-rebuild with state preservation (issue #43)
- Adds auto-injection of MVP stages for missing capabilities
- Adds radial camera mode for polar coordinate scanning
- Adds afterimage and motionblur effects using framebuffer history
- Adds comprehensive acceptance tests for camera modes and pipeline rebuild
- Updates presets.toml with new effect configurations

Related to: #35 (Pipeline Mutation API epic)
Closes: #43, #44, #45
This commit is contained in:
2026-03-19 03:34:06 -07:00
parent 0eb5f1d5ff
commit 238bac1bb2
30 changed files with 3438 additions and 378 deletions

View File

@@ -27,13 +27,13 @@ class TestMain:
"""main() uses PRESET from config if set."""
with (
patch("engine.config.PIPELINE_DIAGRAM", False),
patch("engine.config.PRESET", "gallery-sources"),
patch("engine.config.PRESET", "demo"),
patch("engine.config.PIPELINE_MODE", False),
patch("engine.app.main.run_pipeline_mode") as mock_run,
):
sys.argv = ["mainline.py"]
main()
mock_run.assert_called_once_with("gallery-sources")
mock_run.assert_called_once_with("demo")
def test_main_exits_on_unknown_preset(self):
"""main() exits with error for unknown preset."""
@@ -122,7 +122,7 @@ class TestRunPipelineMode:
mock_create.return_value = mock_display
try:
run_pipeline_mode("gallery-display-terminal")
run_pipeline_mode("demo-base")
except (KeyboardInterrupt, SystemExit):
pass