1e7bd0a540
create_instance had an if/else where the else branch handled both compose and manifest types. For manifest types, compose_template is NULL (migrated tools no longer store raw compose strings), so render_compose_template(None,...) crashed with 'NoneType' object has no attribute 'replace'. Add an explicit elif tool_type.definition_type == 'manifest' branch that: 1. Looks up the ToolDefinitionManifest from tool_type.manifest_id 2. Resolves base definition if referenced 3. Computes deterministic image tag 4. Generates compose via compile_compose Legacy compose types continue to use render_compose_template in the else branch.