databricks-tellr-app 0.3.10.dev2__tar.gz → 0.3.10.dev3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/PKG-INFO +1 -1
  2. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/databricks_tellr_app.egg-info/PKG-INFO +1 -1
  3. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/pyproject.toml +1 -1
  4. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/database.py +39 -0
  5. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/README.md +0 -0
  6. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/databricks_tellr_app/__init__.py +0 -0
  7. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/databricks_tellr_app/run.py +0 -0
  8. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/databricks_tellr_app.egg-info/SOURCES.txt +0 -0
  9. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/databricks_tellr_app.egg-info/dependency_links.txt +0 -0
  10. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/databricks_tellr_app.egg-info/requires.txt +0 -0
  11. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/databricks_tellr_app.egg-info/top_level.txt +0 -0
  12. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/setup.cfg +0 -0
  13. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/setup.py +0 -0
  14. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/__init__.py +0 -0
  15. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/__init__.py +0 -0
  16. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/_otel_bootstrap.py +0 -0
  17. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/fixtures/tour_demo_deck.json +0 -0
  18. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/main.py +0 -0
  19. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/mcp_auth.py +0 -0
  20. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/mcp_server.py +0 -0
  21. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/middleware/__init__.py +0 -0
  22. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/middleware/request_logging.py +0 -0
  23. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/__init__.py +0 -0
  24. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/admin.py +0 -0
  25. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/agent_config.py +0 -0
  26. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/chat.py +0 -0
  27. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/deck_contributors.py +0 -0
  28. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/export.py +0 -0
  29. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/feedback.py +0 -0
  30. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/google_slides.py +0 -0
  31. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/images.py +0 -0
  32. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/local_version.py +0 -0
  33. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/profiles.py +0 -0
  34. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/sessions.py +0 -0
  35. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/settings/__init__.py +0 -0
  36. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/settings/contributors.py +0 -0
  37. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/settings/deck_prompts.py +0 -0
  38. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/settings/identities.py +0 -0
  39. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/settings/slide_styles.py +0 -0
  40. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/setup.py +0 -0
  41. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/slides.py +0 -0
  42. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/tools.py +0 -0
  43. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/tour.py +0 -0
  44. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/verification.py +0 -0
  45. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/routes/version.py +0 -0
  46. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/schemas/__init__.py +0 -0
  47. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/schemas/agent_config.py +0 -0
  48. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/schemas/feedback.py +0 -0
  49. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/schemas/requests.py +0 -0
  50. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/schemas/responses.py +0 -0
  51. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/schemas/settings/__init__.py +0 -0
  52. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/schemas/settings/requests.py +0 -0
  53. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/schemas/settings/responses.py +0 -0
  54. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/schemas/streaming.py +0 -0
  55. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/services/__init__.py +0 -0
  56. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/services/chat_service.py +0 -0
  57. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/services/export_job_queue.py +0 -0
  58. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/services/feedback_service.py +0 -0
  59. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/services/job_queue.py +0 -0
  60. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/services/session_manager.py +0 -0
  61. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/services/session_naming.py +0 -0
  62. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/utils/__init__.py +0 -0
  63. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/api/utils/validation.py +0 -0
  64. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/__init__.py +0 -0
  65. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/config_loader.py +0 -0
  66. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/context_utils.py +0 -0
  67. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/databricks_client.py +0 -0
  68. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/defaults.py +0 -0
  69. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/encryption.py +0 -0
  70. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/init_default_profile.py +0 -0
  71. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/lakebase.py +0 -0
  72. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/migrate_profiles_to_agent_config.py +0 -0
  73. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/mlflow_agent_spans.py +0 -0
  74. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/mlflow_tracing.py +0 -0
  75. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/otel_logging.py +0 -0
  76. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/permission_context.py +0 -0
  77. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/prompt_modules.py +0 -0
  78. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/settings_db.py +0 -0
  79. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/core/user_context.py +0 -0
  80. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/__init__.py +0 -0
  81. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/__init__.py +0 -0
  82. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/deck_contributor.py +0 -0
  83. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/feedback.py +0 -0
  84. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/genie_space.py +0 -0
  85. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/google_global_credentials.py +0 -0
  86. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/google_oauth_token.py +0 -0
  87. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/identity.py +0 -0
  88. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/image.py +0 -0
  89. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/profile.py +0 -0
  90. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/profile_contributor.py +0 -0
  91. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/prompts.py +0 -0
  92. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/request_log.py +0 -0
  93. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/session.py +0 -0
  94. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/slide_deck_prompt.py +0 -0
  95. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/slide_style_library.py +0 -0
  96. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/database/models/user_preference.py +0 -0
  97. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/domain/__init__.py +0 -0
  98. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/domain/slide.py +0 -0
  99. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/domain/slide_deck.py +0 -0
  100. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/__init__.py +0 -0
  101. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/agent.py +0 -0
  102. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/agent_factory.py +0 -0
  103. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/config_service.py +0 -0
  104. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/config_validator.py +0 -0
  105. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/drive_uploader.py +0 -0
  106. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/evaluation/__init__.py +0 -0
  107. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/evaluation/llm_judge.py +0 -0
  108. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/genie_service.py +0 -0
  109. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/google_slides_auth.py +0 -0
  110. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/google_slides_prompts_defaults.py +0 -0
  111. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/html_to_google_slides.py +0 -0
  112. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/html_to_pptx.py +0 -0
  113. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/identity_provider.py +0 -0
  114. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/identity_providers/__init__.py +0 -0
  115. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/identity_providers/account_provider.py +0 -0
  116. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/identity_providers/local_provider.py +0 -0
  117. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/identity_providers/workspace_provider.py +0 -0
  118. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/image_service.py +0 -0
  119. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/image_tools.py +0 -0
  120. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/permission_service.py +0 -0
  121. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/pptx_from_html_huashu.py +0 -0
  122. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/pptx_from_records.py +0 -0
  123. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/pptx_prompts_defaults.py +0 -0
  124. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/profile_service.py +0 -0
  125. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/streaming_callback.py +0 -0
  126. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/tools/__init__.py +0 -0
  127. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/tools/agent_bricks_tool.py +0 -0
  128. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/tools/genie_tool.py +0 -0
  129. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/tools/mcp_tool.py +0 -0
  130. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/tools/model_endpoint_tool.py +0 -0
  131. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/tools/vector_tool.py +0 -0
  132. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/services/validator.py +0 -0
  133. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/utils/__init__.py +0 -0
  134. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/utils/css_utils.py +0 -0
  135. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/utils/error_handling.py +0 -0
  136. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/utils/html_safety.py +0 -0
  137. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/utils/html_utils.py +0 -0
  138. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/utils/image_utils.py +0 -0
  139. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/utils/js_validator.py +0 -0
  140. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/utils/logging_config.py +0 -0
  141. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/utils/pi_filter.py +0 -0
  142. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/utils/slide_hash.py +0 -0
  143. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/utils/spotlight.py +0 -0
  144. {databricks_tellr_app-0.3.10.dev2 → databricks_tellr_app-0.3.10.dev3}/src/utils/text_caps.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databricks-tellr-app
3
- Version: 0.3.10.dev2
3
+ Version: 0.3.10.dev3
4
4
  Summary: Tellr application package for Databricks Apps
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databricks-tellr-app
3
- Version: 0.3.10.dev2
3
+ Version: 0.3.10.dev3
4
4
  Summary: Tellr application package for Databricks Apps
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "databricks-tellr-app"
7
- version = "0.3.10.dev2"
7
+ version = "0.3.10.dev3"
8
8
  description = "Tellr application package for Databricks Apps"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -521,6 +521,45 @@ def _run_migrations(engine, schema: str | None = None):
521
521
  # --- image_assets.tags: json → jsonb (PostgreSQL) for native @> queries ---
522
522
  _migrate_image_assets_tags_json_to_jsonb(conn, schema, _qual, is_sqlite)
523
523
 
524
+ # --- THROWAWAY devloop ownership probe (NOT FOR MERGE) ---
525
+ # Exercises the shared-owner unblock on a fork: ALTER an *inherited*
526
+ # app_data_prod table (the case that used to fail "must be owner of
527
+ # table") + CREATE a new table (which the reassign step below re-homes).
528
+ if not is_sqlite:
529
+ logger.info("PROBE: ALTER inherited config_profiles + CREATE _probe_tbl")
530
+ conn.execute(text(
531
+ f"ALTER TABLE {_qual('config_profiles')} ADD COLUMN IF NOT EXISTS _probe text"
532
+ ))
533
+ conn.execute(text(
534
+ f"CREATE TABLE IF NOT EXISTS {_qual('_probe_tbl')} (col1 text)"
535
+ ))
536
+
537
+ # --- keep newly created objects owned by the shared role (prod forks) ---
538
+ _reassign_new_objects_to_shared_owner(conn, is_sqlite)
539
+
540
+
541
+ def _reassign_new_objects_to_shared_owner(
542
+ conn, is_sqlite: bool, owning_role: str = "tellr_app_owners"
543
+ ) -> None:
544
+ """Re-home objects this connection's role just created onto the shared owner.
545
+
546
+ No-op on SQLite and when the owning role is absent (static-schema envs).
547
+ Wrapped in a SAVEPOINT so a failure cannot poison the outer migration
548
+ transaction. Idempotent: REASSIGN OWNED is a no-op when nothing is owned.
549
+ """
550
+ from sqlalchemy import text
551
+
552
+ if is_sqlite:
553
+ return
554
+ exists = conn.execute(
555
+ text("SELECT 1 FROM pg_roles WHERE rolname = :r"), {"r": owning_role}
556
+ ).scalar()
557
+ if not exists:
558
+ return
559
+ logger.info(f"Migration: reassigning new objects to shared owner {owning_role}")
560
+ with conn.begin_nested():
561
+ conn.execute(text(f'REASSIGN OWNED BY CURRENT_USER TO "{owning_role}"'))
562
+
524
563
 
525
564
  def _ensure_llm_judge_backend_default(
526
565
  conn, table_name, qualified_table, schema, is_sqlite