querysource 4.5.15__tar.gz → 5.0.0__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 (728) hide show
  1. querysource-5.0.0/.claude/agents/code-review.md +136 -0
  2. querysource-5.0.0/.claude/agents/qa-runner.md +123 -0
  3. {querysource-4.5.15 → querysource-5.0.0}/.claude/agents/sdd-autopilot.md +30 -20
  4. querysource-5.0.0/.claude/agents/sdd-coder.md +190 -0
  5. querysource-5.0.0/.claude/agents/sdd-feedback.md +80 -0
  6. querysource-5.0.0/.claude/agents/sdd-ideation.md +386 -0
  7. querysource-5.0.0/.claude/agents/sdd-planner.md +105 -0
  8. querysource-5.0.0/.claude/agents/sdd-research.md +162 -0
  9. querysource-5.0.0/.claude/agents/sdd-secondopinion.md +107 -0
  10. querysource-5.0.0/.claude/agents/sdd-worker.md +464 -0
  11. querysource-5.0.0/.claude/commands/bookstore.md +37 -0
  12. querysource-5.0.0/.claude/commands/parrotwiki.md +42 -0
  13. querysource-5.0.0/.claude/commands/release.md +216 -0
  14. querysource-5.0.0/.claude/commands/remove-worktree.md +128 -0
  15. {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-codereview.md +67 -5
  16. {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-done.md +156 -65
  17. querysource-5.0.0/.claude/commands/sdd-explain.md +105 -0
  18. querysource-5.0.0/.claude/commands/sdd-insight.md +110 -0
  19. {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-proposal.md +29 -4
  20. querysource-5.0.0/.claude/commands/sdd-spec.md +648 -0
  21. {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-start.md +65 -32
  22. {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-status.md +19 -2
  23. querysource-5.0.0/.claude/commands/sdd-task.md +399 -0
  24. {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-tojira.md +13 -9
  25. querysource-5.0.0/.claude/commands/security-check.md +227 -0
  26. querysource-5.0.0/.claude/hooks/dangerous-actions-blocker.sh +257 -0
  27. querysource-5.0.0/.claude/hooks/sdd-worker-format.sh +160 -0
  28. querysource-5.0.0/.claude/rules/codebase-conventions.md +44 -0
  29. {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/python-development.md +2 -2
  30. querysource-5.0.0/.claude/skills/bookstore/SKILL.md +69 -0
  31. querysource-5.0.0/.claude/skills/meta-prompting/SKILL.md +173 -0
  32. querysource-5.0.0/.claude/skills/meta-prompting/analyze-complexity/SKILL.md +214 -0
  33. querysource-5.0.0/.claude/skills/meta-prompting/assess-quality/SKILL.md +313 -0
  34. querysource-5.0.0/.claude/skills/meta-prompting/extract-context/SKILL.md +252 -0
  35. querysource-5.0.0/.claude/skills/meta-prompting/meta-prompt-iterate/SKILL.md +357 -0
  36. querysource-5.0.0/.claude/workflows/sdd-insight.js +180 -0
  37. {querysource-4.5.15 → querysource-5.0.0}/CHANGES.rst +19 -0
  38. {querysource-4.5.15 → querysource-5.0.0}/PKG-INFO +1 -1
  39. {querysource-4.5.15 → querysource-5.0.0}/generated/Query.json +13 -1
  40. {querysource-4.5.15 → querysource-5.0.0}/policies/defaults.yaml +2 -0
  41. {querysource-4.5.15 → querysource-5.0.0}/pyproject.toml +63 -0
  42. {querysource-4.5.15 → querysource-5.0.0}/querysource/_version.py +3 -3
  43. querysource-5.0.0/querysource/auth/slug_visibility.py +471 -0
  44. querysource-5.0.0/querysource/cache_identity.py +94 -0
  45. {querysource-4.5.15 → querysource-5.0.0}/querysource/conf.py +12 -0
  46. {querysource-4.5.15 → querysource-5.0.0}/querysource/connections.py +40 -18
  47. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/__init__.py +12 -9
  48. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/_pagination.py +90 -10
  49. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/abstract.py +117 -4
  50. querysource-5.0.0/querysource/handlers/describe.py +354 -0
  51. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/log.py +35 -10
  52. querysource-5.0.0/querysource/handlers/manager.py +890 -0
  53. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/multi.py +145 -10
  54. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/scheduler.py +60 -16
  55. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/service.py +106 -24
  56. querysource-5.0.0/querysource/handlers/tenant.py +277 -0
  57. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/connections.py +83 -38
  58. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/queries.py +106 -38
  59. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/output.py +29 -12
  60. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/postgres.py +66 -17
  61. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/table.py +31 -9
  62. querysource-5.0.0/querysource/ownership_logging.py +124 -0
  63. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/abstract.py +37 -0
  64. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/cassandra.py +3 -1
  65. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/default.py +3 -1
  66. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/documentdb.py +3 -1
  67. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/mysql.py +3 -1
  68. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/pg.py +27 -0
  69. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sql.py +6 -2
  70. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sqlserver.py +3 -1
  71. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/base.py +10 -9
  72. querysource-5.0.0/querysource/queries/describe.py +260 -0
  73. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/__init__.py +151 -26
  74. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/executors.py +79 -25
  75. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/query.catalog.yaml +9 -0
  76. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/query.py +6 -0
  77. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/obj.py +30 -22
  78. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/qs.py +51 -25
  79. querysource-5.0.0/querysource/repositories/__init__.py +4 -0
  80. querysource-5.0.0/querysource/repositories/definitions.py +496 -0
  81. querysource-5.0.0/querysource/scheduler/jobs.py +204 -0
  82. {querysource-4.5.15 → querysource-5.0.0}/querysource/scheduler/scheduler.py +298 -94
  83. {querysource-4.5.15 → querysource-5.0.0}/querysource/services.py +144 -21
  84. querysource-5.0.0/querysource/tenant_errors.py +20 -0
  85. querysource-5.0.0/querysource/tenant_models.py +69 -0
  86. querysource-5.0.0/querysource/tenants.py +439 -0
  87. {querysource-4.5.15 → querysource-5.0.0}/querysource/types/validators.cpp +4086 -2466
  88. {querysource-4.5.15 → querysource-5.0.0}/querysource/types/validators.pyx +55 -6
  89. querysource-5.0.0/querysource/utils/vocabulary.py +211 -0
  90. {querysource-4.5.15 → querysource-5.0.0}/querysource/version.py +1 -1
  91. {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/PKG-INFO +1 -1
  92. {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/SOURCES.txt +81 -1
  93. {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/scm_file_list.json +164 -0
  94. querysource-5.0.0/querysource.egg-info/scm_version.json +8 -0
  95. querysource-5.0.0/scripts/remove_worktree.py +423 -0
  96. querysource-5.0.0/scripts/sdd/check_id_collisions.py +327 -0
  97. querysource-5.0.0/scripts/sdd/check_task_graph.py +334 -0
  98. querysource-5.0.0/scripts/sdd/close_task.sh +115 -0
  99. querysource-5.0.0/scripts/sdd/ensure_worktree.py +324 -0
  100. querysource-5.0.0/scripts/sdd/heal_orphans.sh +85 -0
  101. querysource-5.0.0/scripts/sdd/id_ledger.py +220 -0
  102. querysource-5.0.0/scripts/sdd/insight.py +2079 -0
  103. querysource-5.0.0/scripts/sdd/lint_new.py +188 -0
  104. querysource-5.0.0/scripts/sdd/migrate_index.py +177 -0
  105. querysource-5.0.0/scripts/sdd/reserve_ids.py +657 -0
  106. querysource-5.0.0/scripts/sdd/sdd_meta.py +232 -0
  107. querysource-5.0.0/tests/auth/test_slug_visibility.py +316 -0
  108. {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/conftest.py +13 -2
  109. querysource-5.0.0/tests/handlers/test_describe_columns.py +281 -0
  110. querysource-5.0.0/tests/handlers/test_describe_detail.py +174 -0
  111. querysource-5.0.0/tests/handlers/test_describe_list.py +186 -0
  112. querysource-5.0.0/tests/handlers/test_describe_tenant.py +428 -0
  113. querysource-5.0.0/tests/handlers/test_describe_vocabulary.py +69 -0
  114. querysource-5.0.0/tests/handlers/test_pagination_describe_helpers.py +58 -0
  115. {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_queryservice_pbac_smoke.py +51 -1
  116. {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_multiquery_output_errors.py +48 -6
  117. {querysource-4.5.15 → querysource-5.0.0}/tests/policies/test_default_policies_load.py +18 -0
  118. querysource-5.0.0/tests/services/__init__.py +0 -0
  119. querysource-5.0.0/tests/tenants/conftest.py +152 -0
  120. querysource-5.0.0/tests/tenants/test_integration.py +457 -0
  121. querysource-5.0.0/tests/tenants/test_tenant_bootstrap_lookup.py +274 -0
  122. querysource-5.0.0/tests/tenants/test_tenant_child_execution.py +456 -0
  123. querysource-5.0.0/tests/tenants/test_tenant_definition_model.py +117 -0
  124. querysource-5.0.0/tests/tenants/test_tenant_execution_context.py +198 -0
  125. querysource-5.0.0/tests/tenants/test_tenant_http_routes.py +233 -0
  126. querysource-5.0.0/tests/tenants/test_tenant_management_reads.py +430 -0
  127. querysource-5.0.0/tests/tenants/test_tenant_management_writes.py +270 -0
  128. querysource-5.0.0/tests/tenants/test_tenant_observability_outputs.py +237 -0
  129. querysource-5.0.0/tests/tenants/test_tenant_policy_preflight.py +276 -0
  130. querysource-5.0.0/tests/tenants/test_tenant_registry.py +404 -0
  131. querysource-5.0.0/tests/tenants/test_tenant_remote_protocol.py +238 -0
  132. querysource-5.0.0/tests/tenants/test_tenant_repository_reads.py +270 -0
  133. querysource-5.0.0/tests/tenants/test_tenant_repository_writes.py +325 -0
  134. querysource-5.0.0/tests/tenants/test_tenant_result_cache.py +240 -0
  135. querysource-5.0.0/tests/tenants/test_tenant_rollout_documentation.py +129 -0
  136. querysource-5.0.0/tests/tenants/test_tenant_scheduler_api_jobs.py +352 -0
  137. querysource-5.0.0/tests/tenants/test_tenant_scheduler_registry.py +309 -0
  138. {querysource-4.5.15 → querysource-5.0.0}/tests/test_multiqs_remote_dispatch.py +23 -3
  139. querysource-5.0.0/tests/test_route_registration.py +316 -0
  140. {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_core.py +9 -2
  141. {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_handler_unit.py +81 -0
  142. {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_jobs.py +83 -4
  143. {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_multi_routing.py +6 -3
  144. querysource-5.0.0/tests/test_table_output_postgres.py +121 -0
  145. {querysource-4.5.15 → querysource-5.0.0}/tests/test_threadquery_executor.py +9 -4
  146. {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_multiqs_output_raise.py +27 -2
  147. querysource-5.0.0/tests/unit/test_provider_describe_columns.py +149 -0
  148. querysource-5.0.0/tests/unit/test_slug_describer.py +196 -0
  149. querysource-5.0.0/tests/unit/test_udf_keyword_resolution.py +109 -0
  150. querysource-5.0.0/tests/unit/test_vocabulary.py +70 -0
  151. querysource-4.5.15/.claude/agents/sdd-research.md +0 -80
  152. querysource-4.5.15/.claude/agents/sdd-worker.md +0 -298
  153. querysource-4.5.15/.claude/commands/sdd-spec.md +0 -306
  154. querysource-4.5.15/.claude/commands/sdd-task.md +0 -214
  155. querysource-4.5.15/querysource/handlers/manager.py +0 -521
  156. querysource-4.5.15/querysource/scheduler/jobs.py +0 -122
  157. querysource-4.5.15/querysource.egg-info/scm_version.json +0 -8
  158. querysource-4.5.15/tests/test_route_registration.py +0 -100
  159. {querysource-4.5.15 → querysource-5.0.0}/.agent/rules/async-programming-expert.md +0 -0
  160. {querysource-4.5.15 → querysource-5.0.0}/.agent/rules/code-reviewer.md +0 -0
  161. {querysource-4.5.15 → querysource-5.0.0}/.agent/rules/cython-development.md +0 -0
  162. {querysource-4.5.15 → querysource-5.0.0}/.agent/rules/prompt-expert.md +0 -0
  163. {querysource-4.5.15 → querysource-5.0.0}/.agent/rules/python-development.md +0 -0
  164. {querysource-4.5.15 → querysource-5.0.0}/.agent/rules/rust-development.md +0 -0
  165. {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/create-parrot-tool.md +0 -0
  166. {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/create-workflow.md +0 -0
  167. {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/debug-regressions-with-git-bisect-binary-search.md +0 -0
  168. {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/generate-tests.md +0 -0
  169. {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/git-new-feature.md +0 -0
  170. {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/parrot-mcp-server.md +0 -0
  171. {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/release_package.md +0 -0
  172. {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/start-flow.md +0 -0
  173. {querysource-4.5.15 → querysource-5.0.0}/.bumpversion.cfg +0 -0
  174. {querysource-4.5.15 → querysource-5.0.0}/.claude/agents/code-reviewer.md +0 -0
  175. {querysource-4.5.15 → querysource-5.0.0}/.claude/agents/sdd-qa.md +0 -0
  176. {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/pr-review.md +0 -0
  177. {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-brainstorm.md +0 -0
  178. {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-fromjira.md +0 -0
  179. {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-next.md +0 -0
  180. {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/aws-cost-optimization.md +0 -0
  181. {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/code-reviewer.md +0 -0
  182. {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/cython-development.md +0 -0
  183. {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/rust-development.md +0 -0
  184. {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/using-git-worktrees.md +0 -0
  185. {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/worktree-pr-and-clean.md +0 -0
  186. {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/worktree-start-feature.md +0 -0
  187. {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/worktree-status.md +0 -0
  188. {querysource-4.5.15 → querysource-5.0.0}/.github/dependabot.yml +0 -0
  189. {querysource-4.5.15 → querysource-5.0.0}/.github/workflows/codeql-analysis.yml +0 -0
  190. {querysource-4.5.15 → querysource-5.0.0}/.github/workflows/release.yml +0 -0
  191. {querysource-4.5.15 → querysource-5.0.0}/.isort.cfg +0 -0
  192. {querysource-4.5.15 → querysource-5.0.0}/.jupyter/jupyter_notebook_config.py +0 -0
  193. {querysource-4.5.15 → querysource-5.0.0}/.parrot/wiki.json +0 -0
  194. {querysource-4.5.15 → querysource-5.0.0}/.parrot/wiki.local.json +0 -0
  195. {querysource-4.5.15 → querysource-5.0.0}/.pre-commit-config.yaml +0 -0
  196. {querysource-4.5.15 → querysource-5.0.0}/.pylintrc +0 -0
  197. {querysource-4.5.15 → querysource-5.0.0}/CODE_OF_CONDUCT.md +0 -0
  198. {querysource-4.5.15 → querysource-5.0.0}/CONTRIBUTING.md +0 -0
  199. {querysource-4.5.15 → querysource-5.0.0}/INSTALL +0 -0
  200. {querysource-4.5.15 → querysource-5.0.0}/JOIN_CONDITIONS_FEATURE.md +0 -0
  201. {querysource-4.5.15 → querysource-5.0.0}/JOIN_CONDITIONS_SUMMARY.md +0 -0
  202. {querysource-4.5.15 → querysource-5.0.0}/LICENSE +0 -0
  203. {querysource-4.5.15 → querysource-5.0.0}/MANIFEST.in +0 -0
  204. {querysource-4.5.15 → querysource-5.0.0}/Makefile +0 -0
  205. {querysource-4.5.15 → querysource-5.0.0}/README.md +0 -0
  206. {querysource-4.5.15 → querysource-5.0.0}/app.py +0 -0
  207. {querysource-4.5.15 → querysource-5.0.0}/bin/README.md +0 -0
  208. {querysource-4.5.15 → querysource-5.0.0}/conftest.py +0 -0
  209. {querysource-4.5.15 → querysource-5.0.0}/generated/AirtableSource.json +0 -0
  210. {querysource-4.5.15 → querysource-5.0.0}/generated/Concat.json +0 -0
  211. {querysource-4.5.15 → querysource-5.0.0}/generated/DWHDestination.json +0 -0
  212. {querysource-4.5.15 → querysource-5.0.0}/generated/DropCols.json +0 -0
  213. {querysource-4.5.15 → querysource-5.0.0}/generated/FileSource.json +0 -0
  214. {querysource-4.5.15 → querysource-5.0.0}/generated/Filter.json +0 -0
  215. {querysource-4.5.15 → querysource-5.0.0}/generated/FilterCols.json +0 -0
  216. {querysource-4.5.15 → querysource-5.0.0}/generated/Forecast.json +0 -0
  217. {querysource-4.5.15 → querysource-5.0.0}/generated/GoogleMaps.json +0 -0
  218. {querysource-4.5.15 → querysource-5.0.0}/generated/GroupBy.json +0 -0
  219. {querysource-4.5.15 → querysource-5.0.0}/generated/Info.json +0 -0
  220. {querysource-4.5.15 → querysource-5.0.0}/generated/Join.json +0 -0
  221. {querysource-4.5.15 → querysource-5.0.0}/generated/Map.json +0 -0
  222. {querysource-4.5.15 → querysource-5.0.0}/generated/Melt.json +0 -0
  223. {querysource-4.5.15 → querysource-5.0.0}/generated/Merge.json +0 -0
  224. {querysource-4.5.15 → querysource-5.0.0}/generated/NormalizeColumns.json +0 -0
  225. {querysource-4.5.15 → querysource-5.0.0}/generated/PluckCols.json +0 -0
  226. {querysource-4.5.15 → querysource-5.0.0}/generated/S3Source.json +0 -0
  227. {querysource-4.5.15 → querysource-5.0.0}/generated/SharepointSource.json +0 -0
  228. {querysource-4.5.15 → querysource-5.0.0}/generated/SmartSheetSource.json +0 -0
  229. {querysource-4.5.15 → querysource-5.0.0}/generated/Table.json +0 -0
  230. {querysource-4.5.15 → querysource-5.0.0}/generated/TableDestination.json +0 -0
  231. {querysource-4.5.15 → querysource-5.0.0}/generated/TableOutput.json +0 -0
  232. {querysource-4.5.15 → querysource-5.0.0}/generated/TableOutputAdapter.json +0 -0
  233. {querysource-4.5.15 → querysource-5.0.0}/generated/TableSource.json +0 -0
  234. {querysource-4.5.15 → querysource-5.0.0}/generated/ToS3.json +0 -0
  235. {querysource-4.5.15 → querysource-5.0.0}/generated/ToSharepoint.json +0 -0
  236. {querysource-4.5.15 → querysource-5.0.0}/generated/correlation.json +0 -0
  237. {querysource-4.5.15 → querysource-5.0.0}/generated/crosstab.json +0 -0
  238. {querysource-4.5.15 → querysource-5.0.0}/generated/pivot.json +0 -0
  239. {querysource-4.5.15 → querysource-5.0.0}/generated/tExplode.json +0 -0
  240. {querysource-4.5.15 → querysource-5.0.0}/generated/tOrder.json +0 -0
  241. {querysource-4.5.15 → querysource-5.0.0}/generated/tPandas.json +0 -0
  242. {querysource-4.5.15 → querysource-5.0.0}/gunicorn_config.py +0 -0
  243. {querysource-4.5.15 → querysource-5.0.0}/mypy.ini +0 -0
  244. {querysource-4.5.15 → querysource-5.0.0}/nav.py +0 -0
  245. {querysource-4.5.15 → querysource-5.0.0}/policies/HARDENING.md +0 -0
  246. {querysource-4.5.15 → querysource-5.0.0}/policies/authorized.yaml +0 -0
  247. {querysource-4.5.15 → querysource-5.0.0}/policies/baseline.yaml +0 -0
  248. {querysource-4.5.15 → querysource-5.0.0}/policies/datasources.yaml +0 -0
  249. {querysource-4.5.15 → querysource-5.0.0}/policies/drivers.yaml +0 -0
  250. {querysource-4.5.15 → querysource-5.0.0}/policies/raw_queries.yaml +0 -0
  251. {querysource-4.5.15 → querysource-5.0.0}/policies/slugs.yaml +0 -0
  252. {querysource-4.5.15 → querysource-5.0.0}/policies/superusers.yaml +0 -0
  253. {querysource-4.5.15 → querysource-5.0.0}/pytest.ini +0 -0
  254. {querysource-4.5.15 → querysource-5.0.0}/querysource/__cli__.py +0 -0
  255. {querysource-4.5.15 → querysource-5.0.0}/querysource/__init__.py +0 -0
  256. {querysource-4.5.15 → querysource-5.0.0}/querysource/auth/__init__.py +0 -0
  257. {querysource-4.5.15 → querysource-5.0.0}/querysource/auth/_resource_types.py +0 -0
  258. {querysource-4.5.15 → querysource-5.0.0}/querysource/auth/credentials.py +0 -0
  259. {querysource-4.5.15 → querysource-5.0.0}/querysource/auth/pbac.py +0 -0
  260. {querysource-4.5.15 → querysource-5.0.0}/querysource/cache/__init__.py +0 -0
  261. {querysource-4.5.15 → querysource-5.0.0}/querysource/cache/backends/__init__.py +0 -0
  262. {querysource-4.5.15 → querysource-5.0.0}/querysource/cache/backends/abstract.py +0 -0
  263. {querysource-4.5.15 → querysource-5.0.0}/querysource/cache/backends/memcache.py +0 -0
  264. {querysource-4.5.15 → querysource-5.0.0}/querysource/cache/backends/redis.py +0 -0
  265. {querysource-4.5.15 → querysource-5.0.0}/querysource/cache/base.py +0 -0
  266. {querysource-4.5.15 → querysource-5.0.0}/querysource/cli/__init__.py +0 -0
  267. {querysource-4.5.15 → querysource-5.0.0}/querysource/cli/generate_docs.py +0 -0
  268. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/__init__.py +0 -0
  269. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/__init__.py +0 -0
  270. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/abstract.py +0 -0
  271. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/arangodb.py +0 -0
  272. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/athena.py +0 -0
  273. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/bigquery.py +0 -0
  274. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/cassandra.py +0 -0
  275. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/clickhouse.py +0 -0
  276. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/cockroachdb.py +0 -0
  277. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/couchbase.py +0 -0
  278. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/couchdb.py +0 -0
  279. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/countries.py +0 -0
  280. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/delta.py +0 -0
  281. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/documentdb.py +0 -0
  282. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/dynamodb.py +0 -0
  283. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/elastic.py +0 -0
  284. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/ga.py +0 -0
  285. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/gcalc.py +0 -0
  286. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/hazel.py +0 -0
  287. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/iceberg.py +0 -0
  288. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/influx.py +0 -0
  289. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/jdbc.py +0 -0
  290. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/jira.py +0 -0
  291. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/mariadb.py +0 -0
  292. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/memcached.py +0 -0
  293. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/mongo.py +0 -0
  294. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/mysql.py +0 -0
  295. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/odbc.py +0 -0
  296. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/openweather.py +0 -0
  297. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/oracle.py +0 -0
  298. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/pg.py +0 -0
  299. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/pg_admin.py +0 -0
  300. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/postgres.py +0 -0
  301. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/py.typed +0 -0
  302. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/qs.py +0 -0
  303. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/redis.py +0 -0
  304. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/rest.py +0 -0
  305. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/rethink.py +0 -0
  306. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/sa.py +0 -0
  307. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/salesforce.py +0 -0
  308. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/scylladb.py +0 -0
  309. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/sqlalchemy.py +0 -0
  310. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/sqlite.py +0 -0
  311. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/sqlserver.py +0 -0
  312. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/upc.py +0 -0
  313. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/zipcodeapi.py +0 -0
  314. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/handlers/__init__.py +0 -0
  315. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/handlers/datasource.py +0 -0
  316. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/handlers/utils.py +0 -0
  317. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/introspection.py +0 -0
  318. {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/models.py +0 -0
  319. {querysource-4.5.15 → querysource-5.0.0}/querysource/events/__init__.py +0 -0
  320. {querysource-4.5.15 → querysource-5.0.0}/querysource/exceptions.py +0 -0
  321. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/components.py +0 -0
  322. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/executor.py +0 -0
  323. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/integrations/__init__.py +0 -0
  324. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/integrations/airtable.py +0 -0
  325. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/outputs/__init__.py +0 -0
  326. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/outputs/tableOutput/__init__.py +0 -0
  327. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/outputs/tableOutput/postgres.py +0 -0
  328. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/outputs/tableOutput/table.py +0 -0
  329. {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/variables.py +0 -0
  330. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/__init__.py +0 -0
  331. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/airtable.py +0 -0
  332. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/credentials.py +0 -0
  333. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/databases/__init__.py +0 -0
  334. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/databases/abstract.py +0 -0
  335. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/databases/bigquery.py +0 -0
  336. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/databases/db.py +0 -0
  337. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/databases/mongo.py +0 -0
  338. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/databases/rethink.py +0 -0
  339. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/http.py +0 -0
  340. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/playwright_service.py +0 -0
  341. {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/selenium_service.py +0 -0
  342. {querysource-4.5.15 → querysource-5.0.0}/querysource/libs/__init__.py +0 -0
  343. {querysource-4.5.15 → querysource-5.0.0}/querysource/libs/encoders.py +0 -0
  344. {querysource-4.5.15 → querysource-5.0.0}/querysource/libs/functions/__init__.py +0 -0
  345. {querysource-4.5.15 → querysource-5.0.0}/querysource/libs/py.typed +0 -0
  346. {querysource-4.5.15 → querysource-5.0.0}/querysource/models.py +0 -0
  347. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/__init__.py +0 -0
  348. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/destinations/__init__.py +0 -0
  349. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/destinations/abstract.py +0 -0
  350. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/destinations/dwh.py +0 -0
  351. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/destinations/s3.py +0 -0
  352. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/destinations/sharepoint.py +0 -0
  353. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/destinations/table.py +0 -0
  354. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/__init__.py +0 -0
  355. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/abstract.py +0 -0
  356. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/arrow.py +0 -0
  357. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/dt.py +0 -0
  358. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/factory.py +0 -0
  359. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/iter.py +0 -0
  360. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/modin.py +0 -0
  361. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/pandas.py +0 -0
  362. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/polars.py +0 -0
  363. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/__init__.py +0 -0
  364. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/abstract.py +0 -0
  365. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/bigquery.py +0 -0
  366. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/documentdb.py +0 -0
  367. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/mongodb.py +0 -0
  368. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/mysql.py +0 -0
  369. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/rethink.py +0 -0
  370. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/sa.py +0 -0
  371. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/__init__.py +0 -0
  372. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/__init__.py +0 -0
  373. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/abstract.py +0 -0
  374. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/bokeh.py +0 -0
  375. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/clustering.py +0 -0
  376. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/csv.py +0 -0
  377. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/describe.py +0 -0
  378. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/eda.py +0 -0
  379. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/excel.py +0 -0
  380. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/html.py +0 -0
  381. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/json.py +0 -0
  382. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/pdf.py +0 -0
  383. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/pickle.py +0 -0
  384. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/plotly.py +0 -0
  385. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/profiling.py +0 -0
  386. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/report.py +0 -0
  387. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/table.py +0 -0
  388. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/tsv.py +0 -0
  389. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/txt.py +0 -0
  390. {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/xml.py +0 -0
  391. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/__init__.py +0 -0
  392. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/abstract.c +0 -0
  393. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/abstract.pxd +0 -0
  394. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/abstract.pyx +0 -0
  395. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/arangodb.c +0 -0
  396. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/arangodb.pxd +0 -0
  397. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/arangodb.pyx +0 -0
  398. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/bigquery.c +0 -0
  399. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/bigquery.pxd +0 -0
  400. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/bigquery.pyx +0 -0
  401. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/cql.c +0 -0
  402. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/cql.pxd +0 -0
  403. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/cql.pyx +0 -0
  404. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/deltatbl.c +0 -0
  405. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/deltatbl.pxd +0 -0
  406. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/deltatbl.pyx +0 -0
  407. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/elastic.cpp +0 -0
  408. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/elastic.pxd +0 -0
  409. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/elastic.pyx +0 -0
  410. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/iceberg.c +0 -0
  411. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/iceberg.pxd +0 -0
  412. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/iceberg.pyx +0 -0
  413. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/influx.c +0 -0
  414. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/influx.pxd +0 -0
  415. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/influx.pyx +0 -0
  416. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/mongo.cpp +0 -0
  417. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/mongo.pxd +0 -0
  418. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/mongo.pyx +0 -0
  419. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/parser.c +0 -0
  420. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/parser.pxd +0 -0
  421. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/parser.pyx +0 -0
  422. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/pgsql.c +0 -0
  423. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/pgsql.pxd +0 -0
  424. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/pgsql.pyx +0 -0
  425. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/rethink.c +0 -0
  426. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/rethink.pxd +0 -0
  427. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/rethink.pyx +0 -0
  428. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sosql.c +0 -0
  429. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sosql.pxd +0 -0
  430. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sosql.pyx +0 -0
  431. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sql.c +0 -0
  432. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sql.pxd +0 -0
  433. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sql.pyx +0 -0
  434. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sqlserver.c +0 -0
  435. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sqlserver.pxd +0 -0
  436. {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sqlserver.pyx +0 -0
  437. {querysource-4.5.15 → querysource-5.0.0}/querysource/plugins/__init__.py +0 -0
  438. {querysource-4.5.15 → querysource-5.0.0}/querysource/plugins/importer.py +0 -0
  439. {querysource-4.5.15 → querysource-5.0.0}/querysource/plugins/sources/__init__.py +0 -0
  440. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/__init__.py +0 -0
  441. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/arangodb.py +0 -0
  442. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/bigquery.py +0 -0
  443. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/db.py +0 -0
  444. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/deltatbl.py +0 -0
  445. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/dummy.py +0 -0
  446. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/elastic.py +0 -0
  447. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/external.py +0 -0
  448. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/http.py +0 -0
  449. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/iceberg.py +0 -0
  450. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/influx.py +0 -0
  451. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/py.typed +0 -0
  452. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/rest.py +0 -0
  453. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/rethink.py +0 -0
  454. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/salesforce.py +0 -0
  455. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/scylladb.py +0 -0
  456. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/__init__.py +0 -0
  457. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/abstract.py +0 -0
  458. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/amazon.py +0 -0
  459. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/countries.py +0 -0
  460. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/ga.py +0 -0
  461. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/geofcc.py +0 -0
  462. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/gmaps.py +0 -0
  463. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/graphcountries.py +0 -0
  464. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/graphql.py +0 -0
  465. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/http.py +0 -0
  466. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/hubspot.py +0 -0
  467. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/openweather.py +0 -0
  468. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/parsers/__init__.py +0 -0
  469. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/parsers/amproduct.py +0 -0
  470. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/parsers/xpath.py +0 -0
  471. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/pokemon.py +0 -0
  472. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/populartimes.py +0 -0
  473. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/py.typed +0 -0
  474. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/rest.py +0 -0
  475. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/retailnext.py +0 -0
  476. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/rssapp.py +0 -0
  477. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/salesforce.py +0 -0
  478. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/scrapper.py +0 -0
  479. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/shoppertrack.py +0 -0
  480. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/swop.py +0 -0
  481. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/uap.py +0 -0
  482. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/upc.py +0 -0
  483. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/wm_stores.py +0 -0
  484. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/zammad.py +0 -0
  485. {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/zipcodeapi.py +0 -0
  486. {querysource-4.5.15 → querysource-5.0.0}/querysource/py.typed +0 -0
  487. {querysource-4.5.15 → querysource-5.0.0}/querysource/qs_parsers/__init__.py +0 -0
  488. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/__init__.py +0 -0
  489. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/executor.py +0 -0
  490. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/models.py +0 -0
  491. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/_introspect.py +0 -0
  492. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/abstract.py +0 -0
  493. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/components/__init__.py +0 -0
  494. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/components/abstract.py +0 -0
  495. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/destinations/__init__.py +0 -0
  496. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/destinations/dwh.py +0 -0
  497. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/destinations/s3.py +0 -0
  498. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/destinations/sharepoint.py +0 -0
  499. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/destinations/table.py +0 -0
  500. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Concat.py +0 -0
  501. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/GroupBy.catalog.yaml +0 -0
  502. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/GroupBy.py +0 -0
  503. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Info.py +0 -0
  504. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Join.catalog.yaml +0 -0
  505. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Join.py +0 -0
  506. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Melt.catalog.yaml +0 -0
  507. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Melt.py +0 -0
  508. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Merge.catalog.yaml +0 -0
  509. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Merge.py +0 -0
  510. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/__init__.py +0 -0
  511. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/abstract.py +0 -0
  512. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/filter/Filter.catalog.yaml +0 -0
  513. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/filter/__init__.py +0 -0
  514. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/filter/flt.py +0 -0
  515. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/registry.py +0 -0
  516. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/__init__.py +0 -0
  517. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/airtable.py +0 -0
  518. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/base.py +0 -0
  519. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/file.py +0 -0
  520. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/s3.py +0 -0
  521. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/sharepoint.py +0 -0
  522. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/smartsheet.py +0 -0
  523. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/table.py +0 -0
  524. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/DropCols.catalog.yaml +0 -0
  525. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/DropCols.py +0 -0
  526. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/FilterCols.catalog.yaml +0 -0
  527. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/FilterCols.py +0 -0
  528. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/Forecast.catalog.yaml +0 -0
  529. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/Forecast.py +0 -0
  530. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/Map.catalog.yaml +0 -0
  531. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/Map.py +0 -0
  532. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/NormalizeColumns.catalog.yaml +0 -0
  533. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/NormalizeColumns.py +0 -0
  534. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/PluckCols.catalog.yaml +0 -0
  535. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/PluckCols.py +0 -0
  536. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/__init__.py +0 -0
  537. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/abstract.py +0 -0
  538. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/correlation.catalog.yaml +0 -0
  539. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/correlation.py +0 -0
  540. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/crosstab.catalog.yaml +0 -0
  541. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/crosstab.py +0 -0
  542. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/google/GoogleMaps.catalog.yaml +0 -0
  543. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/google/__init__.py +0 -0
  544. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/google/maps.py +0 -0
  545. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/pivot.catalog.yaml +0 -0
  546. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/pivot.py +0 -0
  547. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/tExplode.catalog.yaml +0 -0
  548. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/tExplode.py +0 -0
  549. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/tOrder.catalog.yaml +0 -0
  550. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/tOrder.py +0 -0
  551. {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/tPandas.py +0 -0
  552. {querysource-4.5.15 → querysource-5.0.0}/querysource/scheduler/__init__.py +0 -0
  553. {querysource-4.5.15 → querysource-5.0.0}/querysource/scheduler/notifications.py +0 -0
  554. {querysource-4.5.15 → querysource-5.0.0}/querysource/template/__init__.py +0 -0
  555. {querysource-4.5.15 → querysource-5.0.0}/querysource/template/parser.py +0 -0
  556. {querysource-4.5.15 → querysource-5.0.0}/querysource/types/__init__.py +0 -0
  557. {querysource-4.5.15 → querysource-5.0.0}/querysource/types/converters.cpp +0 -0
  558. {querysource-4.5.15 → querysource-5.0.0}/querysource/types/converters.pyx +0 -0
  559. {querysource-4.5.15 → querysource-5.0.0}/querysource/types/dt/__init__.py +0 -0
  560. {querysource-4.5.15 → querysource-5.0.0}/querysource/types/dt/filters.py +0 -0
  561. {querysource-4.5.15 → querysource-5.0.0}/querysource/types/dt/transforms.py +0 -0
  562. {querysource-4.5.15 → querysource-5.0.0}/querysource/types/py.typed +0 -0
  563. {querysource-4.5.15 → querysource-5.0.0}/querysource/types/typedefs.c +0 -0
  564. {querysource-4.5.15 → querysource-5.0.0}/querysource/types/typedefs.pyx +0 -0
  565. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/__init__.py +0 -0
  566. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/cache_serialization.py +0 -0
  567. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/dataframes.py +0 -0
  568. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/errors.py +0 -0
  569. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/events.py +0 -0
  570. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/fn.py +0 -0
  571. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/functions.cpp +0 -0
  572. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/functions.pyx +0 -0
  573. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/getfunc.py +0 -0
  574. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/handlers.py +0 -0
  575. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/parseqs.cpp +0 -0
  576. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/parseqs.pyx +0 -0
  577. {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/validators.py +0 -0
  578. {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/dependency_links.txt +0 -0
  579. {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/entry_points.txt +0 -0
  580. {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/not-zip-safe +0 -0
  581. {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/requires.txt +0 -0
  582. {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/top_level.txt +0 -0
  583. {querysource-4.5.15 → querysource-5.0.0}/run.py +0 -0
  584. {querysource-4.5.15 → querysource-5.0.0}/rust/Cargo.lock +0 -0
  585. {querysource-4.5.15 → querysource-5.0.0}/rust/Cargo.toml +0 -0
  586. {querysource-4.5.15 → querysource-5.0.0}/rust/pyproject.toml +0 -0
  587. {querysource-4.5.15 → querysource-5.0.0}/rust/src/arangodb_parser.rs +0 -0
  588. {querysource-4.5.15 → querysource-5.0.0}/rust/src/bigquery_parser.rs +0 -0
  589. {querysource-4.5.15 → querysource-5.0.0}/rust/src/cql_parser.rs +0 -0
  590. {querysource-4.5.15 → querysource-5.0.0}/rust/src/elastic_parser.rs +0 -0
  591. {querysource-4.5.15 → querysource-5.0.0}/rust/src/filter_common.rs +0 -0
  592. {querysource-4.5.15 → querysource-5.0.0}/rust/src/flux_parser.rs +0 -0
  593. {querysource-4.5.15 → querysource-5.0.0}/rust/src/lib.rs +0 -0
  594. {querysource-4.5.15 → querysource-5.0.0}/rust/src/mongo_parser.rs +0 -0
  595. {querysource-4.5.15 → querysource-5.0.0}/rust/src/mssql_parser.rs +0 -0
  596. {querysource-4.5.15 → querysource-5.0.0}/rust/src/parseqs.rs +0 -0
  597. {querysource-4.5.15 → querysource-5.0.0}/rust/src/pgsql_parser.rs +0 -0
  598. {querysource-4.5.15 → querysource-5.0.0}/rust/src/rethink_parser.rs +0 -0
  599. {querysource-4.5.15 → querysource-5.0.0}/rust/src/safe_dict.rs +0 -0
  600. {querysource-4.5.15 → querysource-5.0.0}/rust/src/soql_parser.rs +0 -0
  601. {querysource-4.5.15 → querysource-5.0.0}/rust/src/sql_parser.rs +0 -0
  602. {querysource-4.5.15 → querysource-5.0.0}/rust/src/validators.rs +0 -0
  603. {querysource-4.5.15/templates → querysource-5.0.0/scripts/sdd}/__init__.py +0 -0
  604. {querysource-4.5.15 → querysource-5.0.0}/setup.cfg +0 -0
  605. {querysource-4.5.15 → querysource-5.0.0}/setup.py +0 -0
  606. {querysource-4.5.15 → querysource-5.0.0}/static/notebook/bundle.js +0 -0
  607. {querysource-4.5.15/tests/auth → querysource-5.0.0/templates}/__init__.py +0 -0
  608. {querysource-4.5.15 → querysource-5.0.0}/templates/base.html +0 -0
  609. {querysource-4.5.15 → querysource-5.0.0}/templates/default.html +0 -0
  610. {querysource-4.5.15 → querysource-5.0.0}/templates/default_table.html +0 -0
  611. {querysource-4.5.15 → querysource-5.0.0}/templates/fontlist-v330.json +0 -0
  612. {querysource-4.5.15 → querysource-5.0.0}/templates/fontlist-v390.json +0 -0
  613. {querysource-4.5.15 → querysource-5.0.0}/templates/table_charts.html +0 -0
  614. {querysource-4.5.15/tests/datasources → querysource-5.0.0/tests/auth}/__init__.py +0 -0
  615. {querysource-4.5.15 → querysource-5.0.0}/tests/auth/test_credentials.py +0 -0
  616. {querysource-4.5.15 → querysource-5.0.0}/tests/auth/test_pbac_bootstrap.py +0 -0
  617. {querysource-4.5.15 → querysource-5.0.0}/tests/check_concurrent_get_slug.py +0 -0
  618. {querysource-4.5.15 → querysource-5.0.0}/tests/conftest.py +0 -0
  619. {querysource-4.5.15/tests/handlers → querysource-5.0.0/tests/datasources}/__init__.py +0 -0
  620. {querysource-4.5.15 → querysource-5.0.0}/tests/datasources/test_datasource_view_pbac.py +0 -0
  621. {querysource-4.5.15 → querysource-5.0.0}/tests/datasources/test_driver_factory_session.py +0 -0
  622. {querysource-4.5.15 → querysource-5.0.0}/tests/datasources/test_pg_admin_registration.py +0 -0
  623. {querysource-4.5.15 → querysource-5.0.0}/tests/datasources/test_pg_params_for.py +0 -0
  624. {querysource-4.5.15/tests/integration → querysource-5.0.0/tests/handlers}/__init__.py +0 -0
  625. {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_abstract_pbac_helpers.py +0 -0
  626. {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_airtable_oauth.py +0 -0
  627. {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_multiquery_pbac_smoke.py +0 -0
  628. {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_query_param_exclusion.py +0 -0
  629. {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_queryexecutor_pbac_smoke.py +0 -0
  630. {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_querymanager_pagination.py +0 -0
  631. {querysource-4.5.15/tests/interfaces → querysource-5.0.0/tests/integration}/__init__.py +0 -0
  632. {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_csv_stream_response.py +0 -0
  633. {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_datasource_endpoint.py +0 -0
  634. {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_pbac_credentials.py +0 -0
  635. {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_pbac_enforcement.py +0 -0
  636. {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_pbac_listing.py +0 -0
  637. {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_slug_injection.py +0 -0
  638. {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_slug_regression.py +0 -0
  639. {querysource-4.5.15/tests/multi → querysource-5.0.0/tests/interfaces}/__init__.py +0 -0
  640. {querysource-4.5.15 → querysource-5.0.0}/tests/interfaces/test_airtable_interface.py +0 -0
  641. {querysource-4.5.15/tests/multi/sources → querysource-5.0.0/tests/multi}/__init__.py +0 -0
  642. {querysource-4.5.15/tests/perf → querysource-5.0.0/tests/multi/sources}/__init__.py +0 -0
  643. {querysource-4.5.15 → querysource-5.0.0}/tests/multi/sources/test_airtable_source.py +0 -0
  644. {querysource-4.5.15 → querysource-5.0.0}/tests/multi/sources/test_registry.py +0 -0
  645. {querysource-4.5.15/tests/policies → querysource-5.0.0/tests/perf}/__init__.py +0 -0
  646. {querysource-4.5.15 → querysource-5.0.0}/tests/perf/test_pbac_overhead.py +0 -0
  647. {querysource-4.5.15/tests/scheduler → querysource-5.0.0/tests/policies}/__init__.py +0 -0
  648. {querysource-4.5.15 → querysource-5.0.0}/tests/policies/test_authorized_policy.py +0 -0
  649. {querysource-4.5.15/tests/services → querysource-5.0.0/tests/scheduler}/__init__.py +0 -0
  650. {querysource-4.5.15 → querysource-5.0.0}/tests/scheduler/test_parse_trigger_shorthands.py +0 -0
  651. {querysource-4.5.15 → querysource-5.0.0}/tests/scheduler/test_shorthand_loaders.py +0 -0
  652. {querysource-4.5.15 → querysource-5.0.0}/tests/services/test_querysource_setup_pbac.py +0 -0
  653. {querysource-4.5.15 → querysource-5.0.0}/tests/test_abstract_multi.py +0 -0
  654. {querysource-4.5.15 → querysource-5.0.0}/tests/test_abstract_refactor.py +0 -0
  655. {querysource-4.5.15 → querysource-5.0.0}/tests/test_api.py +0 -0
  656. {querysource-4.5.15 → querysource-5.0.0}/tests/test_arangodb_parser.py +0 -0
  657. {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_colcols.py +0 -0
  658. {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_correlation.py +0 -0
  659. {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_filter.py +0 -0
  660. {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_forecast.py +0 -0
  661. {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_googlemaps.py +0 -0
  662. {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_groupby.py +0 -0
  663. {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_map.py +0 -0
  664. {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_pivot.py +0 -0
  665. {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_remote.py +0 -0
  666. {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_texplode.py +0 -0
  667. {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_torder.py +0 -0
  668. {querysource-4.5.15 → querysource-5.0.0}/tests/test_cli_generate_docs.py +0 -0
  669. {querysource-4.5.15 → querysource-5.0.0}/tests/test_column_filters.py +0 -0
  670. {querysource-4.5.15 → querysource-5.0.0}/tests/test_component_handler.py +0 -0
  671. {querysource-4.5.15 → querysource-5.0.0}/tests/test_component_registry.py +0 -0
  672. {querysource-4.5.15 → querysource-5.0.0}/tests/test_conf_airtable.py +0 -0
  673. {querysource-4.5.15 → querysource-5.0.0}/tests/test_destination_base.py +0 -0
  674. {querysource-4.5.15 → querysource-5.0.0}/tests/test_destination_dwh.py +0 -0
  675. {querysource-4.5.15 → querysource-5.0.0}/tests/test_destination_integration.py +0 -0
  676. {querysource-4.5.15 → querysource-5.0.0}/tests/test_destination_s3.py +0 -0
  677. {querysource-4.5.15 → querysource-5.0.0}/tests/test_destination_sharepoint.py +0 -0
  678. {querysource-4.5.15 → querysource-5.0.0}/tests/test_destination_table.py +0 -0
  679. {querysource-4.5.15 → querysource-5.0.0}/tests/test_destinations_documentation_endpoint.py +0 -0
  680. {querysource-4.5.15 → querysource-5.0.0}/tests/test_elastic_parser.py +0 -0
  681. {querysource-4.5.15 → querysource-5.0.0}/tests/test_error_formatter.py +0 -0
  682. {querysource-4.5.15 → querysource-5.0.0}/tests/test_eval.py +0 -0
  683. {querysource-4.5.15 → querysource-5.0.0}/tests/test_feat102_error_redaction.py +0 -0
  684. {querysource-4.5.15 → querysource-5.0.0}/tests/test_filters_drop_duplicates.py +0 -0
  685. {querysource-4.5.15 → querysource-5.0.0}/tests/test_grouping_sync.py +0 -0
  686. {querysource-4.5.15 → querysource-5.0.0}/tests/test_info_eda.py +0 -0
  687. {querysource-4.5.15 → querysource-5.0.0}/tests/test_info_eda_e2e.py +0 -0
  688. {querysource-4.5.15 → querysource-5.0.0}/tests/test_info_eda_integration.py +0 -0
  689. {querysource-4.5.15 → querysource-5.0.0}/tests/test_join_conditions.py +0 -0
  690. {querysource-4.5.15 → querysource-5.0.0}/tests/test_join_with_column_filter.py +0 -0
  691. {querysource-4.5.15 → querysource-5.0.0}/tests/test_local_executor.py +0 -0
  692. {querysource-4.5.15 → querysource-5.0.0}/tests/test_multi_destinations_subpackage.py +0 -0
  693. {querysource-4.5.15 → querysource-5.0.0}/tests/test_multiqs_column_transforms.py +0 -0
  694. {querysource-4.5.15 → querysource-5.0.0}/tests/test_multiqs_destination_dispatch.py +0 -0
  695. {querysource-4.5.15 → querysource-5.0.0}/tests/test_multiqs_slug_sources_normalize.py +0 -0
  696. {querysource-4.5.15 → querysource-5.0.0}/tests/test_multiqs_sources_integration.py +0 -0
  697. {querysource-4.5.15 → querysource-5.0.0}/tests/test_queryslug_concurrency.py +0 -0
  698. {querysource-4.5.15 → querysource-5.0.0}/tests/test_querysource_setup_airtable.py +0 -0
  699. {querysource-4.5.15 → querysource-5.0.0}/tests/test_qworker_config.py +0 -0
  700. {querysource-4.5.15 → querysource-5.0.0}/tests/test_remote_executor.py +0 -0
  701. {querysource-4.5.15 → querysource-5.0.0}/tests/test_rss.py +0 -0
  702. {querysource-4.5.15 → querysource-5.0.0}/tests/test_rust_parsers.py +0 -0
  703. {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_handler_integration.py +0 -0
  704. {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_integration.py +0 -0
  705. {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_notifications.py +0 -0
  706. {querysource-4.5.15 → querysource-5.0.0}/tests/test_schema_introspectable.py +0 -0
  707. {querysource-4.5.15 → querysource-5.0.0}/tests/test_source_registry.py +0 -0
  708. {querysource-4.5.15 → querysource-5.0.0}/tests/test_source_s3.py +0 -0
  709. {querysource-4.5.15 → querysource-5.0.0}/tests/test_source_sharepoint.py +0 -0
  710. {querysource-4.5.15 → querysource-5.0.0}/tests/test_source_smartsheet.py +0 -0
  711. {querysource-4.5.15 → querysource-5.0.0}/tests/test_source_table.py +0 -0
  712. {querysource-4.5.15 → querysource-5.0.0}/tests/test_sql_parser_combinations.py +0 -0
  713. {querysource-4.5.15 → querysource-5.0.0}/tests/test_texplode.py +0 -0
  714. {querysource-4.5.15 → querysource-5.0.0}/tests/test_thread_file_refactor.py +0 -0
  715. {querysource-4.5.15 → querysource-5.0.0}/tests/test_thread_query_refactor.py +0 -0
  716. {querysource-4.5.15 → querysource-5.0.0}/tests/test_thread_source_base.py +0 -0
  717. {querysource-4.5.15 → querysource-5.0.0}/tests/test_zammad_search.py +0 -0
  718. {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_csv_writer_dataframe.py +0 -0
  719. {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_cython_filter_fallback.py +0 -0
  720. {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_datasource_redaction.py +0 -0
  721. {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_error_payload.py +0 -0
  722. {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_handler_output_status.py +0 -0
  723. {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_iter_format_dataframe.py +0 -0
  724. {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_output_error.py +0 -0
  725. {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_provider_raw_query_validated.py +0 -0
  726. {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_qs_parsers_validated.py +0 -0
  727. {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_raw_query_cond_definition_wiring.py +0 -0
  728. {querysource-4.5.15 → querysource-5.0.0}/tox.ini +0 -0
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: code-review
3
+ description: Use this agent for adversarial code review, design opinions, brainstorming, and research cross-checks. Keep prompts neutral and evaluate findings independently.
4
+ model: sonnet
5
+ color: red
6
+ ---
7
+
8
+ You are an adversarial code review and design-opinion agent. Your job is to find
9
+ real defects, risky assumptions, brittle architecture, missing tests, and places
10
+ where the implementation only appears correct.
11
+
12
+ ## Mission
13
+
14
+ Provide an independent perspective on implementation quality, design choices,
15
+ and cross-checks. Be skeptical, concrete, and fair. Prefer findings with clear
16
+ evidence over broad style opinions.
17
+
18
+ ## Neutral-Brief Rule
19
+
20
+ When invoking a second-opinion tool (`codex` or any external reviewer),
21
+ never feed it your reasoning, draft conclusions, justification, or preferred
22
+ answer. Give it only:
23
+ - the requirement or task statement;
24
+ - the diff, changed files, branch comparison, or commit;
25
+ - the neutral question to answer.
26
+
27
+ Feeding conclusions produces ratification, not review.
28
+
29
+ ## Adversarial Second Opinion
30
+
31
+ Use an external CLI agent as an independent perspective for adversarial
32
+ reviews, design opinions, brainstorming, research cross-checks, and sanity
33
+ checks. The reviewer is **`codex` (OpenAI)**.
34
+
35
+ > **`agy` (Google Gemini / Antigravity) MUST NOT be used as a reviewer.**
36
+ > Removed 2026-09-01 after it returned a fabricated review — an invented
37
+ > 188-test pytest run whose test names did not exist in the branch under
38
+ > review, then `Error: timeout waiting for response`. Hallucinated passing
39
+ > evidence is worse than no review, because it reads like corroboration.
40
+ > Do not re-add it and do not fall back to it: with no external reviewer
41
+ > available, say so and rely on a Claude subagent. (Unrelated to the
42
+ > `google_coding` dev-loop *coding* backend, which drives the same binary.)
43
+
44
+ **Detection:**
45
+ ```bash
46
+ if command -v codex &>/dev/null; then REVIEWER="codex"
47
+ fi
48
+ ```
49
+
50
+ ### codex commands
51
+ ```bash
52
+ # Reviews
53
+ codex exec review --uncommitted
54
+ codex exec review --base dev
55
+ codex exec review --commit <sha>
56
+
57
+ # Opinions, brainstorming, and cross-checks
58
+ codex exec --sandbox read-only -o <scratch-file> "<neutral brief>"
59
+
60
+ # Follow-up in the same Codex session
61
+ codex exec resume --last "<question>"
62
+ ```
63
+
64
+ Each reviewer call is a full agent session and can take 30 seconds to
65
+ 2 minutes. Run it in the background. Never call it per edit or from hooks.
66
+
67
+ ## Disposition Discipline
68
+
69
+ Treat reviewer output (`codex` or any subagent) as advisory. For every
70
+ substantive finding:
71
+ - `CONFIRM`: adopt it and explain the change or required action.
72
+ - `REJECT`: explain why it does not apply.
73
+ - `ESCALATE`: identify the uncertainty that requires user, maintainer, or
74
+ domain-owner judgment.
75
+
76
+ Never silently concede to another agent. Never silently drop a finding.
77
+
78
+ **Verify the reviewer's evidence before relying on it.** If it cites a test
79
+ run, a file, or a symbol, spot-check that the thing exists. An unverifiable
80
+ claim is not a finding — report the review as unusable rather than as a
81
+ pass.
82
+
83
+ ## Review Focus
84
+
85
+ Prioritize:
86
+ - correctness against stated requirements and acceptance criteria;
87
+ - security issues, especially injection, credential exposure, SSRF, path
88
+ traversal, auth bypass, and unsafe subprocess usage;
89
+ - async correctness, including blocking I/O, missing awaits, cancellation, and
90
+ resource cleanup;
91
+ - data integrity, migrations, and backward compatibility;
92
+ - API contract drift, signature mismatches, phantom imports, and fabricated
93
+ framework patterns;
94
+ - test gaps for edge cases, failure paths, and regression risks;
95
+ - maintainability risks caused by over-broad abstractions or hidden coupling.
96
+
97
+ ## Design Opinion Mode
98
+
99
+ For design reviews and brainstorming:
100
+ - separate facts from judgment calls;
101
+ - identify the real tradeoffs and failure modes;
102
+ - compare the proposal against existing project patterns;
103
+ - recommend the smallest design that satisfies the requirement safely;
104
+ - call out when a larger redesign is justified.
105
+
106
+ ## Parallel Perspective
107
+
108
+ When the stakes are high, run one Claude subagent and one background
109
+ reviewer session (`codex`) with the same neutral brief. Synthesize:
110
+ - where both reviewers agree;
111
+ - where they disagree;
112
+ - which findings are confirmed, rejected, or escalated;
113
+ - what concrete action should happen next.
114
+
115
+ ## Output Format
116
+
117
+ ```markdown
118
+ ## Verdict
119
+ Approved | Approved with notes | Needs changes
120
+
121
+ ## Findings
122
+ - **[severity] [file:line]** Issue.
123
+ Impact: why it matters.
124
+ Recommendation: specific fix.
125
+
126
+ ## Cross-Check Disposition
127
+ | Finding | Source | Disposition | Reason |
128
+ |---------|--------|-------------|--------|
129
+ | ... | Reviewer / Claude | CONFIRM / REJECT / ESCALATE | ... |
130
+
131
+ ## Design Notes
132
+ <Only include when design tradeoffs matter.>
133
+
134
+ ## Test Gaps
135
+ <Missing verification or residual risk.>
136
+ ```
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: qa-runner
3
+ description: |
4
+ QA agent for the sdd-autopilot pipeline. Validates a feature
5
+ implementation by running the test suite, linting, and type checking
6
+ on the feature's changed files, then writes a structured
7
+ .autopilot/qa-report.md with a machine-greppable `verdict: PASS | FAIL`.
8
+
9
+ It does NOT fix code — it reports. Fixing is sdd-worker's job. Runs
10
+ inside the feature worktree, read + shell only (no edits).
11
+
12
+ Examples:
13
+
14
+ Context: sdd-autopilot reaches Stage 3 (QA) after code review passes.
15
+ user: "Run test suite for FEAT-071. Output report to .autopilot/qa-report.md with verdict: PASS | FAIL"
16
+ assistant: "I'll run pytest + ruff + mypy on the changed files, check AC coverage, and write the report."
17
+
18
+ model: sonnet
19
+ color: yellow
20
+ permissionMode: plan
21
+ tools: Read, Bash, Glob, Grep
22
+ ---
23
+
24
+ # QA Runner — Test, Lint, and Type-Check Verifier
25
+
26
+ You are the **QA stage** of the `sdd-autopilot` pipeline. You validate a
27
+ feature implementation already committed in the current worktree. You
28
+ **report** problems; you never fix them — that is `sdd-worker`'s job.
29
+ Keeping QA and fixing in separate phases is deliberate: a verifier that
30
+ also edits can mask the very defects it should surface.
31
+
32
+ ## Cardinal rules
33
+
34
+ - **No edits.** You run under `permissionMode: plan` with `Edit`/`Write`
35
+ NOT whitelisted. If you want to change code, STOP and report the issue
36
+ instead — the autopilot loop will feed your report back to `sdd-worker`.
37
+ - **Determinism over judgement.** Pass/fail is decided by process exit
38
+ codes, never by "reading the output and deciding it looks fine". Capture
39
+ stdout/stderr tails for the report, but the verdict follows exit codes.
40
+ - **Activate the venv first.** Per `CLAUDE.md`, ALWAYS
41
+ `source .venv/bin/activate` before any `python`/`pytest`/`ruff`/`mypy`/`uv`
42
+ command. Never invoke them without activating first.
43
+ - **Stay in scope.** Validate the feature's new/modified files. A full-suite
44
+ sanity pass is welcome, but a pre-existing unrelated failure must be
45
+ reported as such — do not blame it on this feature.
46
+
47
+ ## Process
48
+
49
+ 1. **Establish context.**
50
+ - Read the spec (`sdd/specs/<feature>.spec.md`) and the feature's task
51
+ files to understand what was built and the acceptance criteria.
52
+ - Identify new/modified files from git:
53
+ ```bash
54
+ git diff --name-only "$(git merge-base HEAD dev)"...HEAD
55
+ git diff --name-only # uncommitted, if any
56
+ ```
57
+ 2. **Activate the environment.**
58
+ ```bash
59
+ source .venv/bin/activate
60
+ ```
61
+ 3. **Run the test suite** (capture exit codes — they decide the verdict):
62
+ ```bash
63
+ # a) Targeted: the feature's own tests
64
+ pytest <feature-test-paths> -q --tb=short
65
+ # b) Sanity: quick full-suite signal (tolerate pre-existing failures,
66
+ # but attribute them correctly in the report)
67
+ pytest -q --tb=line 2>&1 | tail -30
68
+ ```
69
+ Use `pytest-asyncio` conventions already in the repo for async tests.
70
+ 4. **Lint and type-check the changed files only:**
71
+ ```bash
72
+ ruff check <changed-files>
73
+ mypy <changed-files> # only if a mypy config exists in the repo
74
+ ```
75
+ 5. **Map acceptance criteria to tests.** For each AC in the spec, find at
76
+ least one covering test. Flag any AC with no test as a coverage gap.
77
+ 6. **Decide the verdict.** `PASS` only if: the feature's targeted tests all
78
+ pass AND `ruff` returns 0 AND `mypy` returns 0 (when configured) AND no
79
+ acceptance criterion is left without a test. Otherwise `FAIL`.
80
+
81
+ ## Output Contract
82
+
83
+ Write the report to `.autopilot/qa-report.md` (create the `.autopilot/`
84
+ directory if needed). The autopilot loop greps it with
85
+ `grep -oP '(?<=verdict:\s)(PASS|FAIL)'`, so the verdict line MUST contain
86
+ `verdict: PASS` or `verdict: FAIL` with exactly one space after the colon.
87
+
88
+ ```markdown
89
+ # QA Report: FEAT-<ID>
90
+
91
+ **verdict: PASS**
92
+
93
+ ## Test Results
94
+ - Targeted tests: 15/15 passed
95
+ - Full-suite sanity: 0 new failures (2 pre-existing, unrelated — see notes)
96
+ - Linting (ruff): 0 errors, 2 warnings
97
+ - Type checking (mypy): 0 errors
98
+
99
+ ## AC Test Coverage
100
+ | AC | Has Test | Test File | Status |
101
+ |----|----------|-----------|--------|
102
+ | User can authenticate via OAuth | ✅ | tests/integrations/test_oauth.py | PASS |
103
+ | Token refresh happens automatically | ❌ | — | NO COVERAGE |
104
+
105
+ ## Files Without Tests
106
+ - querysource/providers/salesforce.py::_refresh_token
107
+
108
+ ## Issues Found
109
+ - [querysource/providers/salesforce.py:88] missing `await` on async call (FAIL)
110
+
111
+ ## Notes
112
+ Two full-suite failures (tests/loaders/test_pdf.py) predate this feature
113
+ and are unrelated to FEAT-<ID>.
114
+ ```
115
+
116
+ After writing the file, also print the verdict line to stdout so the
117
+ orchestrator can read it without opening the file.
118
+
119
+ ## Failure handling
120
+
121
+ A `FAIL` verdict is NOT an agent error — write a complete, valid report and
122
+ exit 0. Only hard errors (worktree path missing, `.venv` absent, git not a
123
+ repo) are true failures; surface those plainly so the autopilot can stop.
@@ -5,7 +5,7 @@
5
5
  A two-phase orchestration pipeline for Claude Code that takes a Jira ticket
6
6
  from inception to reviewed PR with minimal human intervention.
7
7
 
8
- **Phase 1 — Planning (interactive):** `/sdd-jira` command
8
+ **Phase 1 — Planning (interactive):** `/sdd-fromjira` command
9
9
  **Phase 2 — Execution (autonomous):** `sdd-autopilot` agent
10
10
 
11
11
  The separation exists because planning REQUIRES human judgment (scope decisions,
@@ -32,7 +32,7 @@ invocations. This mirrors a typical async DAG orchestration pattern but with:
32
32
 
33
33
  ```
34
34
  ┌─────────────────────────────────────────────────────────────────┐
35
- │ Phase 1: /sdd-jira (INTERACTIVE — human in the loop) │
35
+ │ Phase 1: /sdd-fromjira (INTERACTIVE — human in the loop) │
36
36
  │ │
37
37
  │ Jira ticket ──► brainstorm Q&A ──► spec ──► tasks ──► approve │
38
38
  │ (2+ rounds) (commit) (commit) │
@@ -69,20 +69,28 @@ invocations. This mirrors a typical async DAG orchestration pattern but with:
69
69
 
70
70
  ---
71
71
 
72
- ## Phase 1: `/sdd-jira` Command
72
+ ## Phase 1: `/sdd-fromjira` Command
73
+
74
+ > **Implementation note.** "Phase 1" is a *logical* phase, not a single
75
+ > command. The real entry point is `/sdd-fromjira`, which produces a
76
+ > committed brainstorm; the worker-ready spec and task decomposition are
77
+ > then produced by the standard chain `/sdd-spec` → `/sdd-task`. This
78
+ > section describes the combined planning outcome those three commands
79
+ > deliver. The `--auto-approve` flag below is aspirational — `/sdd-fromjira`
80
+ > currently supports `--complexity` and `--skip-qa`.
73
81
 
74
82
  ### Purpose
75
83
 
76
- Interactive planner that converts a Jira ticket into a fully specified,
84
+ Interactive planning that converts a Jira ticket into a fully specified,
77
85
  task-decomposed, worktree-ready feature — with enough detail that `sdd-worker`
78
86
  can execute without asking questions.
79
87
 
80
88
  ### Usage
81
89
 
82
90
  ```
83
- /sdd-jira NAV-8036
84
- /sdd-jira NAV-8036 --auto-approve # skip manual spec approval (risky)
85
- /sdd-jira NAV-8036 --complexity=fix # hint: simple fix, minimal Q&A
91
+ /sdd-fromjira NAV-8036
92
+ /sdd-fromjira NAV-8036 --auto-approve # skip manual spec approval (risky)
93
+ /sdd-fromjira NAV-8036 --complexity=fix # hint: simple fix, minimal Q&A
86
94
  ```
87
95
 
88
96
  ### Flow
@@ -242,14 +250,16 @@ After spec approval, automatically runs task decomposition.
242
250
  #### 6. Create Worktree
243
251
 
244
252
  ```bash
245
- git worktree add -b feat-<FEAT-ID>-<slug> \
246
- .claude/worktrees/feat-<FEAT-ID>-<slug> HEAD
253
+ python -m scripts.sdd.ensure_worktree --json \
254
+ --slug <slug> --feature-id FEAT-<NNN> \
255
+ --spec sdd/specs/<slug>.spec.md \
256
+ --index sdd/tasks/index/<slug>.json
247
257
  ```
248
258
 
249
259
  #### 7. Output & Handoff
250
260
 
251
261
  ```
252
- ✅ /sdd-jira complete for NAV-8036
262
+ ✅ /sdd-fromjira complete for NAV-8036
253
263
 
254
264
  Jira: NAV-8036 — "Add OAuth 2.0 support for Salesforce provider"
255
265
  Spec: sdd/specs/salesforce-oauth.spec.md (committed to dev)
@@ -604,7 +614,7 @@ wrong code).
604
614
 
605
615
  ### The Solution: Task Specification Depth
606
616
 
607
- The `/sdd-jira` command ensures each task contains enough detail that the
617
+ The `/sdd-fromjira` command ensures each task contains enough detail that the
608
618
  worker never needs to ask:
609
619
 
610
620
  #### Level 1 — Minimum (current sdd-task)
@@ -688,7 +698,7 @@ async def test_oauth_callback_invalid_state():
688
698
 
689
699
  ```bash
690
700
  # Human does: review Jira ticket, approve spec
691
- /sdd-jira NAV-8036
701
+ /sdd-fromjira NAV-8036
692
702
 
693
703
  # Then walk away
694
704
  cd .claude/worktrees/feat-071-jira-oauth
@@ -701,7 +711,7 @@ claude --agent sdd-autopilot --verbose
701
711
 
702
712
  ```bash
703
713
  # Planning phase (interactive)
704
- /sdd-jira NAV-8036
714
+ /sdd-fromjira NAV-8036
705
715
 
706
716
  # Run worker + reviewer only
707
717
  cd .claude/worktrees/feat-071-jira-oauth
@@ -773,14 +783,14 @@ curl -s -X POST "$SLACK_WEBHOOK_URL" \
773
783
 
774
784
  ---
775
785
 
776
- ## Files to Create
786
+ ## Files
777
787
 
778
- | File | Type | Purpose |
779
- |------|------|---------|
780
- | `.claude/commands/sdd-jira.md` | Command | Interactive planner |
781
- | `.claude/agents/sdd-autopilot.md` | Agent | Autonomous orchestrator |
782
- | `.claude/agents/qa-runner.md` | Agent | Test execution & reporting |
783
- | `.claude/commands/pr-review.md` | Command | PR vs Jira AC review |
788
+ | File | Type | Purpose | Status |
789
+ |------|------|---------|--------|
790
+ | `.claude/commands/sdd-fromjira.md` | Command | Interactive Jira-seeded planner | exists |
791
+ | `.claude/agents/sdd-autopilot.md` | Agent | Autonomous orchestrator (this doc) | exists |
792
+ | `.claude/agents/qa-runner.md` | Agent | Test execution & reporting | exists |
793
+ | `.claude/commands/pr-review.md` | Command | PR vs Jira AC review | see `pr-review` skill |
784
794
 
785
795
  ---
786
796
 
@@ -0,0 +1,190 @@
1
+ ---
2
+ name: sdd-coder
3
+ description: |
4
+ Task-scoped SDD coder (FEAT-549). Implements exactly ONE task in the sub-worktree it is given, commits code only,
5
+ never touches sdd/ or other tasks, and ends with a DevelopmentOutput JSON. Dispatched by the sdd-worker
6
+ orchestrator (native haiku seat) or by the parrot-sdd-coder MCP server (nova / google-compat / codex seats).
7
+
8
+ Examples:
9
+ Context: sdd-worker prepared .claude/worktrees/feat-FEAT-549-x--pool/TASK-3115-a1 for TASK-3115.
10
+ user: "Implement sdd/tasks/active/TASK-3115-sdd-coder-models.md in this worktree."
11
+ assistant: "I read the task, verify its Codebase Contract, write the blueprint files, run its tests, commit only the listed files, and emit the DevelopmentOutput JSON."
12
+ model: haiku
13
+ color: green
14
+ permissionMode: bypassPermissions
15
+ tools: Read, Write, Edit, MultiEdit, Bash, Glob, Grep
16
+ ---
17
+
18
+ # SDD Coder — One Task, One Worktree, Code Only
19
+
20
+ You are a task-scoped SDD coder. You are given exactly ONE task file and a
21
+ sub-worktree already checked out on its own branch. You implement that one
22
+ task, commit the code, and stop — you never touch SDD state and never pick
23
+ up any other task.
24
+
25
+ ---
26
+
27
+ ## ⛔ CARDINAL RULES — NEVER VIOLATE THESE
28
+
29
+ 1. **YOU ARE A BUILDER, NOT AN ARCHITECT.**
30
+ The spec and task define WHAT to build and HOW. You implement exactly what
31
+ they say. You do NOT redesign, reinterpret, or "improve" the architecture.
32
+ If a task says "create FileManagerInterface in generation.py", you create
33
+ FileManagerInterface in generation.py. Not a RedisJobStore. Not a different pattern.
34
+
35
+ 2. **FILE FIDELITY.**
36
+ The task lists specific files to CREATE or MODIFY. You touch ONLY those files.
37
+ After implementation, verify: does every file listed in the task exist?
38
+ Did you create files NOT listed in the task? If yes, you have diverged — STOP.
39
+
40
+ 3. **CLASS AND INTERFACE FIDELITY.**
41
+ If the task specifies class names, method signatures, or inheritance patterns,
42
+ implement them as specified. Do NOT rename or substitute.
43
+
44
+ 4. **WHEN IN DOUBT, STOP.**
45
+ If the spec is ambiguous, STOP and report your concerns instead of guessing —
46
+ the orchestrator (not you) records completion status and notes in step (g),
47
+ so state your concerns clearly in your final message instead.
48
+
49
+ 5. **NO SCOPE CREEP.**
50
+ Do NOT fix unrelated bugs, refactor code outside scope, or add unspecified features.
51
+
52
+ 6. **YOU NEVER TOUCH `sdd/`.**
53
+ The per-spec index, task files, and their completion write-ups belong to
54
+ the orchestrator (`sdd-worker`). A branch that edits anything under `sdd/`
55
+ is rejected before merge (fidelity gate, spec G7/AC-7) — never move the
56
+ task file, never edit the index, never write its completion write-up
57
+ yourself.
58
+
59
+ ---
60
+
61
+ ## Input
62
+
63
+ You are given:
64
+ - `task_file` — the repo-relative path of the ONE task you implement (e.g.
65
+ `sdd/tasks/active/TASK-3115-sdd-coder-models.md`). Read it in full; never
66
+ reconstruct its content from the task id alone.
67
+ - `cwd` — your sub-worktree, already checked out on its own attempt branch
68
+ (`<feature-branch>--TASK-NNN-a<attempt>`). Do all file and git operations
69
+ here. You never create or switch branches/worktrees yourself.
70
+ - The feature branch name (for reference only — you commit on your own
71
+ attempt branch; the orchestrator merges it).
72
+
73
+ When dispatched through the MCP server, the brief you receive is a
74
+ `TaskScopedBrief` JSON (`{research, task_id, task_file}`). Read `task_file`
75
+ from disk exactly as given — never guess a task's file path from its id.
76
+
77
+ ---
78
+
79
+ ## Steps
80
+
81
+ ### a) Read and Understand Task
82
+ - Read the full task file at `task_file`.
83
+ - Extract and note:
84
+ - **Exact files to create** (list them)
85
+ - **Exact files to modify** (list them)
86
+ - **Class/function names specified** (list them)
87
+ - **Acceptance criteria** (list them)
88
+
89
+ ### b) Verify Codebase Contract (MANDATORY — Anti-Hallucination)
90
+ Before writing ANY code, verify the task's `## Codebase Contract` section:
91
+ - **Verified Imports**: `grep` or `read` each file to confirm the imports exist.
92
+ - **Existing Signatures**: `read` each file to confirm class/method signatures are accurate.
93
+ - **Does NOT Exist**: Review this list — NEVER reference anything listed here.
94
+ - If any entry is stale (file moved, method renamed, attribute removed), treat
95
+ it as a STOP condition rather than silently improvising — you do not own
96
+ the task file, so you cannot correct it yourself; report the mismatch
97
+ instead.
98
+ - **NEVER guess an import, attribute, or method. If it's not in the contract
99
+ and you're unsure, verify with `grep` or `read` before using it.**
100
+
101
+ ### c) Implement — from the Implementation Blueprint
102
+ - Start from the task's Implementation Blueprint blocks; complete every
103
+ `FILL IN` exactly as scoped by its bounding test/acceptance criterion.
104
+ - Never change a signature, class name, or file path that the blueprint
105
+ fixes — those are decided, not suggested.
106
+ - Create/modify ONLY the files listed in the task.
107
+ - Use ONLY the imports from the verified Codebase Contract.
108
+ - Follow project conventions (asyncio-first, Pydantic v2, Google-style
109
+ docstrings, `self.logger` instead of `print`).
110
+
111
+ ### d) Verification Checklist (MANDATORY)
112
+ ```
113
+ VERIFICATION CHECKLIST for TASK-<NNN>:
114
+ □ Every file listed as CREATE in the task → exists?
115
+ □ Every file listed as MODIFY in the task → was modified?
116
+ □ No files were created that are NOT listed in the task?
117
+ □ Class/interface names match the task specification?
118
+ □ No unrelated changes were made?
119
+ □ Nothing under sdd/ was touched?
120
+ ```
121
+ If ANY check fails, fix it or STOP and report.
122
+
123
+ ### e) Validate
124
+ - Do NOT run `ruff`/`black` or spend turns on style: the engine runs `ruff check --fix` plus the
125
+ repo formatter on your committed files at merge time and commits the result itself. Style debt
126
+ that remains is fixed once, feature-wide, by `/sdd-done`.
127
+ - Run THIS task's acceptance-criteria tests.
128
+ - If stuck after 3 attempts, stop and report the failure clearly instead of
129
+ committing broken code — the orchestrator treats an unresolved failure as
130
+ a failed attempt and routes it to the next seat (or implements it itself).
131
+
132
+ ### f) Commit — code only
133
+ ```bash
134
+ # ONLY the files this task lists — NEVER sdd/ files
135
+ git add <file1> <file2> ...
136
+ git commit -m "feat(<feature-slug>): TASK-<NNN> — <title>"
137
+ ```
138
+ Do not `git push`. Do not create branches or worktrees. Do not touch any
139
+ other task's files.
140
+
141
+ ---
142
+
143
+ ## Forbidden
144
+
145
+ - Editing, moving, or creating anything under `sdd/` (index, task files,
146
+ completion write-ups).
147
+ - Marking any task's status.
148
+ - Touching files that belong to a different task.
149
+ - `git push`.
150
+ - Creating branches or worktrees.
151
+ - Calling other agents or tools outside this list.
152
+
153
+ ---
154
+
155
+ ## Output — `DevelopmentOutput` JSON (mandatory)
156
+
157
+ Your final message must be the single `DevelopmentOutput` JSON object
158
+ described in the dispatch prompt — no prose, no markdown fences around it.
159
+ One field is routinely got wrong:
160
+
161
+ **`files_changed` must list EVERY file you created, modified, or deleted —
162
+ including the test modules you wrote.**
163
+
164
+ Listing only the source files you set out to edit is the common failure,
165
+ and it is not cosmetic: QA scopes its pytest run to these paths, and a test
166
+ module missing from this list is a test that never runs.
167
+
168
+ Derive it from git, never from memory:
169
+
170
+ ```bash
171
+ git diff --name-only --diff-filter=d <feature-branch>...HEAD # committed
172
+ git status --porcelain --untracked-files=all # not yet committed
173
+ ```
174
+
175
+ Use repo-relative paths exactly as git prints them. Also include
176
+ `commit_shas` and a short `summary` of what you did.
177
+
178
+ ---
179
+
180
+ ## STOP Conditions
181
+
182
+ STOP and report (do NOT continue silently) if:
183
+ - Your sub-worktree does not look like the task's `cwd` (missing files,
184
+ wrong branch).
185
+ - The task's specification contradicts the spec it references.
186
+ - You cannot implement without modifying files outside scope.
187
+ - Tests fail after 3 attempts.
188
+ - Your implementation has diverged from the task specification.
189
+ - An import, attribute, or method you need is NOT in the Codebase Contract
190
+ and cannot be verified to exist — do NOT guess, STOP and report.
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: sdd-feedback
3
+ description: |
4
+ QA-failure feedback-routing subagent for the dev-loop
5
+ feature-mode flow (FEAT-378). Given a QAReport and the judge-panel's
6
+ verdicts, proposes one of retry / escalate / accept_with_notes.
7
+
8
+ The agent emits ONE final JSON object matching the FeedbackDecision
9
+ Pydantic contract — no prose, no markdown fences, just JSON. Read-only:
10
+ this agent NEVER edits files. Its proposal is advisory — FeedbackRouterNode
11
+ re-checks the deterministic envelope and the retry stop rule in Python
12
+ and may downgrade the decision.
13
+
14
+ Examples:
15
+
16
+ Context: QA failed with two minor code-review findings and all
17
+ deterministic criteria passing.
18
+ user: "QAReport: passed=false, deterministic criteria all pass,
19
+ lint pass, 2 minor findings pending."
20
+ assistant: "Deterministic gate is clean and both findings are minor —
21
+ I'll propose accept_with_notes with the findings summarized as notes."
22
+
23
+ model: sonnet
24
+ color: yellow
25
+ permissionMode: plan
26
+ tools: Read
27
+ ---
28
+
29
+ # SDD Feedback Router — Bounded Retry / Escalate / Accept Routing
30
+
31
+ You are the **feedback phase** of the dev-loop feature-mode flow,
32
+ invoked only when QA has failed. You receive a summary of the QAReport
33
+ (deterministic criteria, lint, code-review outcome, and any pending
34
+ findings) plus the judge panel's per-judge verdicts from the last QA round.
35
+ Your job is to propose exactly ONE routing decision:
36
+
37
+ - **``retry``** — the failure is fixable; include an actionable
38
+ ``dev_brief`` (concrete, specific — reference the failing criterion,
39
+ the finding, or the test output) that will be injected into the next
40
+ development dispatch.
41
+ - **``escalate``** — the failure needs human judgement (ambiguous
42
+ requirement, repeated failures, a finding you cannot characterize as
43
+ minor, or anything outside your read-only ability to resolve).
44
+ - **``accept_with_notes``** — ONLY appropriate when the deterministic gate
45
+ (acceptance criteria + lint) passed AND every pending finding is minor
46
+ or nit-level AND no blocking manual criterion failed. Summarize the
47
+ minor findings as ``notes`` — they will be appended to the PR body for
48
+ human awareness, not silently dropped.
49
+
50
+ ## Cardinal rules
51
+
52
+ - You are **read-only** — you never edit files, never run write commands.
53
+ Your only job is to read the provided context and decide.
54
+ - **You do not enforce the envelope or the retry limit — the caller does.**
55
+ Propose ``accept_with_notes`` or ``retry`` honestly based on what you see;
56
+ if your proposal falls outside the hard rules the caller applies
57
+ (deterministic envelope for accept, bounded attempts for retry), it will
58
+ be downgraded in Python regardless of what you emit here. Do not try to
59
+ reason around those rules — just make your best-faith proposal.
60
+ - When in doubt between ``retry`` and ``escalate``, prefer ``retry`` with a
61
+ clear, actionable brief — but if you cannot articulate a concrete fix,
62
+ choose ``escalate`` instead of guessing.
63
+
64
+ ## Output Contract
65
+
66
+ Emit a single JSON object as your **final** assistant turn (no markdown
67
+ fences, no prose around it):
68
+
69
+ ```json
70
+ {
71
+ "decision": "retry",
72
+ "dev_brief": "Fix the null check in src/x/y.py — the QA criterion 'foo' failed because ...",
73
+ "notes": ""
74
+ }
75
+ ```
76
+
77
+ ``decision`` MUST be exactly one of ``"retry"``, ``"escalate"``, or
78
+ ``"accept_with_notes"``. ``dev_brief`` is only meaningful for ``retry``
79
+ (leave empty otherwise). ``notes`` is only meaningful for
80
+ ``accept_with_notes`` (leave empty otherwise).