Goal
Stabilize Strut by stopping unstable provider patching and rewriting the generation/preview path around validated semantic plans, local compilation, and visual QA.
Immediate cleanup already started
- Retire unstable BYOK providers from UI selection.
- Remove dedicated provider-specific router registration.
- Keep BYOK focused on OpenAI, Gemini, and OpenAI-compatible/local endpoint.
Rewrite scope
-
Provider contract
- Providers return compact semantic plans only.
- No provider should be trusted to emit full final UI/animation documents directly.
- Add deterministic local compilation from semantic plan to editable StrutDocument.
-
Visual quality gate
- Reject outputs with missing requested text marks.
- Reject tiny/mostly-empty subjects.
- Reject shadow/blob-only results.
- Reject timelines without active visible motion.
- Reject state visibility mistakes where required layers disappear.
-
Preview/runtime
- Remove white nested-card feel from artboard preview.
- Make preview state playback obvious and default to a useful animation frame/playback, not a dead edge-view frame.
- Improve stage scaling, background toggles, and visible subject bounds.
-
UI cleanup
- Reduce container stacking and visual clutter.
- Make provider state, generation state, and preview state clear.
- Hide or disable broken/unsupported provider paths.
-
CLI providers
- Move CLIs to the same compact-plan contract.
- Parse/validate locally; do not let CLI prose or pseudo-documents pass.
Non-goals
- No animation-specific hardcoding such as coin/dice/pet special cases.
- No more prompt-only patching as a replacement for architecture changes.
Goal
Stabilize Strut by stopping unstable provider patching and rewriting the generation/preview path around validated semantic plans, local compilation, and visual QA.
Immediate cleanup already started
Rewrite scope
Provider contract
Visual quality gate
Preview/runtime
UI cleanup
CLI providers
Non-goals