batho 0.1.4__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 (501) hide show
  1. batho-0.1.4/.batho/hooks.yaml +33 -0
  2. batho-0.1.4/.bathoignore.example +114 -0
  3. batho-0.1.4/.github/workflows/ci.yml +48 -0
  4. batho-0.1.4/.github/workflows/publish-pypi.yml +123 -0
  5. batho-0.1.4/.github/workflows/publish-testpypi.yml +62 -0
  6. batho-0.1.4/.github/workflows/release-readiness.yml +114 -0
  7. batho-0.1.4/.gitignore +51 -0
  8. batho-0.1.4/.kilo/plans/1778847690633-neon-island.md +205 -0
  9. batho-0.1.4/.pre-commit-config.yaml +16 -0
  10. batho-0.1.4/.python-version +1 -0
  11. batho-0.1.4/LICENSE +201 -0
  12. batho-0.1.4/PKG-INFO +1378 -0
  13. batho-0.1.4/README.md +1140 -0
  14. batho-0.1.4/assets/batho.svg +64 -0
  15. batho-0.1.4/batho/__init__.py +55 -0
  16. batho-0.1.4/batho/bridge/__init__.py +42 -0
  17. batho-0.1.4/batho/bridge/artifact_loader.py +214 -0
  18. batho-0.1.4/batho/bridge/constants.py +79 -0
  19. batho-0.1.4/batho/bridge/http_api.py +383 -0
  20. batho-0.1.4/batho/bridge/mcp_server.py +159 -0
  21. batho-0.1.4/batho/bridge/models.py +102 -0
  22. batho-0.1.4/batho/bridge/registry_client.py +221 -0
  23. batho-0.1.4/batho/bsg/__init__.py +31 -0
  24. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_cicd.yaml +87 -0
  25. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_cloud_providers.yaml +100 -0
  26. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_cpp.yaml +110 -0
  27. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_csharp.yaml +130 -0
  28. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_dart.yaml +89 -0
  29. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_elixir.yaml +92 -0
  30. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_foundation.yaml +268 -0
  31. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_kotlin.yaml +79 -0
  32. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_php.yaml +135 -0
  33. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_ruby.yaml +100 -0
  34. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_scala.yaml +93 -0
  35. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_swift.yaml +119 -0
  36. batho-0.1.4/batho/bsg/plugins/foundation/bsg_detection_test_frameworks.yaml +130 -0
  37. batho-0.1.4/batho/bsg/plugins/foundation/bsg_file_categorization.yaml +320 -0
  38. batho-0.1.4/batho/bsg/plugins/foundation/bsg_framework_angular.yaml +40 -0
  39. batho-0.1.4/batho/bsg/plugins/foundation/bsg_framework_django.yaml +44 -0
  40. batho-0.1.4/batho/bsg/plugins/foundation/bsg_framework_flask.yaml +44 -0
  41. batho-0.1.4/batho/bsg/plugins/foundation/bsg_framework_nodejs.yaml +378 -0
  42. batho-0.1.4/batho/bsg/plugins/foundation/bsg_framework_other.yaml +278 -0
  43. batho-0.1.4/batho/bsg/plugins/foundation/bsg_framework_python.yaml +249 -0
  44. batho-0.1.4/batho/bsg/plugins/foundation/bsg_framework_react.yaml +92 -0
  45. batho-0.1.4/batho/bsg/plugins/foundation/bsg_framework_vue.yaml +58 -0
  46. batho-0.1.4/batho/bsg/plugins/foundation/bsg_graph_foundation.yaml +109 -0
  47. batho-0.1.4/batho/bsg/plugins/foundation/bsg_token_optimization.yaml +184 -0
  48. batho-0.1.4/batho/bsg/plugins/interceptors/bsg_api_contract_guardian.yaml +27 -0
  49. batho-0.1.4/batho/bsg/plugins/interceptors/bsg_auth_boundary_shield.yaml +29 -0
  50. batho-0.1.4/batho/bsg/plugins/interceptors/bsg_dependency_blast_radius.yaml +28 -0
  51. batho-0.1.4/batho/bsg/plugins/interceptors/bsg_hardcoded_secret_catcher.yaml +30 -0
  52. batho-0.1.4/batho/bsg/plugins/interceptors/bsg_iac_drift_sentinel.yaml +29 -0
  53. batho-0.1.4/batho/bsg/plugins/interceptors/bsg_nplus1_query_catcher.yaml +29 -0
  54. batho-0.1.4/batho/bsg/plugins/interceptors/bsg_resource_leak_preventer.yaml +27 -0
  55. batho-0.1.4/batho/bsg/plugins/interceptors/bsg_schema_migration_enforcer.yaml +23 -0
  56. batho-0.1.4/batho/bsg/plugins/interceptors/bsg_silent_failure_catcher.yaml +23 -0
  57. batho-0.1.4/batho/bsg/plugins_cli.py +263 -0
  58. batho-0.1.4/batho/bsg/rules.py +3268 -0
  59. batho-0.1.4/batho/bsg/schemas/bsg-plugin-schema-v1.json +429 -0
  60. batho-0.1.4/batho/bsg/testing.py +519 -0
  61. batho-0.1.4/batho/cli/bridge.py +295 -0
  62. batho-0.1.4/batho/cli/dashboard.py +280 -0
  63. batho-0.1.4/batho/cloud_sync/__init__.py +11 -0
  64. batho-0.1.4/batho/cloud_sync/client.py +358 -0
  65. batho-0.1.4/batho/cloud_sync/config.py +55 -0
  66. batho-0.1.4/batho/cloud_sync/uploader.py +195 -0
  67. batho-0.1.4/batho/config.py +1021 -0
  68. batho-0.1.4/batho/context/__init__.py +22 -0
  69. batho-0.1.4/batho/context/bsg.py +8 -0
  70. batho-0.1.4/batho/context/bsg_map.py +1835 -0
  71. batho-0.1.4/batho/context/cache.py +473 -0
  72. batho-0.1.4/batho/context/codegraph.py +1179 -0
  73. batho-0.1.4/batho/context/extractor.py +1004 -0
  74. batho-0.1.4/batho/context/graph_cache.py +99 -0
  75. batho-0.1.4/batho/context/incremental.py +198 -0
  76. batho-0.1.4/batho/context/languages/__init__.py +148 -0
  77. batho-0.1.4/batho/context/languages/_common.py +271 -0
  78. batho-0.1.4/batho/context/languages/bash.py +72 -0
  79. batho-0.1.4/batho/context/languages/c.py +61 -0
  80. batho-0.1.4/batho/context/languages/cpp.py +87 -0
  81. batho-0.1.4/batho/context/languages/csharp.py +86 -0
  82. batho-0.1.4/batho/context/languages/css.py +242 -0
  83. batho-0.1.4/batho/context/languages/dart.py +84 -0
  84. batho-0.1.4/batho/context/languages/detector.py +578 -0
  85. batho-0.1.4/batho/context/languages/erlang.py +76 -0
  86. batho-0.1.4/batho/context/languages/factory.py +500 -0
  87. batho-0.1.4/batho/context/languages/go.py +67 -0
  88. batho-0.1.4/batho/context/languages/hack.py +83 -0
  89. batho-0.1.4/batho/context/languages/haskell.py +87 -0
  90. batho-0.1.4/batho/context/languages/hcl.py +357 -0
  91. batho-0.1.4/batho/context/languages/html.py +225 -0
  92. batho-0.1.4/batho/context/languages/java.py +69 -0
  93. batho-0.1.4/batho/context/languages/javascript.py +78 -0
  94. batho-0.1.4/batho/context/languages/json.py +243 -0
  95. batho-0.1.4/batho/context/languages/julia.py +83 -0
  96. batho-0.1.4/batho/context/languages/kotlin.py +76 -0
  97. batho-0.1.4/batho/context/languages/lua.py +70 -0
  98. batho-0.1.4/batho/context/languages/markdown.py +357 -0
  99. batho-0.1.4/batho/context/languages/objectivec.py +107 -0
  100. batho-0.1.4/batho/context/languages/ocaml.py +87 -0
  101. batho-0.1.4/batho/context/languages/perl.py +75 -0
  102. batho-0.1.4/batho/context/languages/php.py +74 -0
  103. batho-0.1.4/batho/context/languages/python.py +106 -0
  104. batho-0.1.4/batho/context/languages/r.py +63 -0
  105. batho-0.1.4/batho/context/languages/registry.py +635 -0
  106. batho-0.1.4/batho/context/languages/ruby.py +67 -0
  107. batho-0.1.4/batho/context/languages/rust.py +75 -0
  108. batho-0.1.4/batho/context/languages/scala.py +99 -0
  109. batho-0.1.4/batho/context/languages/swift.py +94 -0
  110. batho-0.1.4/batho/context/languages/toml.py +262 -0
  111. batho-0.1.4/batho/context/languages/typescript.py +88 -0
  112. batho-0.1.4/batho/context/languages/verilog.py +100 -0
  113. batho-0.1.4/batho/context/languages/yaml.py +285 -0
  114. batho-0.1.4/batho/context/languages/zig.py +88 -0
  115. batho-0.1.4/batho/context/mmap_storage.py +63 -0
  116. batho-0.1.4/batho/context/pipeline.py +381 -0
  117. batho-0.1.4/batho/context/query.py +313 -0
  118. batho-0.1.4/batho/context/schema.py +227 -0
  119. batho-0.1.4/batho/context/storage.py +1727 -0
  120. batho-0.1.4/batho/context/symbol_index.py +124 -0
  121. batho-0.1.4/batho/dashboard/DESIGN.md +8 -0
  122. batho-0.1.4/batho/dashboard/README.md +51 -0
  123. batho-0.1.4/batho/dashboard/assets/css/animations.css +35 -0
  124. batho-0.1.4/batho/dashboard/assets/css/base.css +139 -0
  125. batho-0.1.4/batho/dashboard/assets/css/components.css +326 -0
  126. batho-0.1.4/batho/dashboard/assets/css/graph.css +267 -0
  127. batho-0.1.4/batho/dashboard/assets/css/tokens.css +119 -0
  128. batho-0.1.4/batho/dashboard/assets/fonts/inter-500.woff2 +11 -0
  129. batho-0.1.4/batho/dashboard/assets/fonts/inter-500.woff2.LICENSE +2 -0
  130. batho-0.1.4/batho/dashboard/assets/fonts/inter-600.woff2 +11 -0
  131. batho-0.1.4/batho/dashboard/assets/fonts/space-grotesk-500.woff2 +11 -0
  132. batho-0.1.4/batho/dashboard/assets/fonts/space-grotesk-500.woff2.LICENSE +2 -0
  133. batho-0.1.4/batho/dashboard/assets/fonts/space-grotesk-700.woff2 +11 -0
  134. batho-0.1.4/batho/dashboard/assets/js/ctn-loader.js +424 -0
  135. batho-0.1.4/batho/dashboard/assets/js/cy-import.js +34 -0
  136. batho-0.1.4/batho/dashboard/assets/js/cy-stylesheet.js +156 -0
  137. batho-0.1.4/batho/dashboard/assets/js/format.js +60 -0
  138. batho-0.1.4/batho/dashboard/assets/js/glob.js +94 -0
  139. batho-0.1.4/batho/dashboard/assets/js/graph-stream.js +158 -0
  140. batho-0.1.4/batho/dashboard/assets/js/main.js +175 -0
  141. batho-0.1.4/batho/dashboard/assets/js/router.js +101 -0
  142. batho-0.1.4/batho/dashboard/assets/js/store.js +53 -0
  143. batho-0.1.4/batho/dashboard/index.html +88 -0
  144. batho-0.1.4/batho/dashboard/pages/files.js +275 -0
  145. batho-0.1.4/batho/dashboard/pages/hypergraph.js +564 -0
  146. batho-0.1.4/batho/dashboard/pages/metrics.js +6 -0
  147. batho-0.1.4/batho/dashboard/pages/overview.js +752 -0
  148. batho-0.1.4/batho/dashboard/pages/relationships.js +192 -0
  149. batho-0.1.4/batho/dashboard/pages/rules.js +6 -0
  150. batho-0.1.4/batho/dashboard/pages/search.js +6 -0
  151. batho-0.1.4/batho/dashboard/pages/snapshots.js +234 -0
  152. batho-0.1.4/batho/dashboard/shared/components/audit-export.js +127 -0
  153. batho-0.1.4/batho/dashboard/shared/components/chip-filter.js +67 -0
  154. batho-0.1.4/batho/dashboard/shared/components/code-pane.js +47 -0
  155. batho-0.1.4/batho/dashboard/shared/components/data-table.js +206 -0
  156. batho-0.1.4/batho/dashboard/shared/components/drawer.js +134 -0
  157. batho-0.1.4/batho/dashboard/shared/components/entity-chip.js +75 -0
  158. batho-0.1.4/batho/dashboard/shared/components/header-bar.js +230 -0
  159. batho-0.1.4/batho/dashboard/shared/components/kpi-row.js +28 -0
  160. batho-0.1.4/batho/dashboard/shared/components/latency-bar.js +69 -0
  161. batho-0.1.4/batho/dashboard/shared/components/side-rail.js +73 -0
  162. batho-0.1.4/batho/dashboard/shared/components/staleness-gauge.js +69 -0
  163. batho-0.1.4/batho/dashboard/shared/components/stat-tile.js +41 -0
  164. batho-0.1.4/batho/dashboard/shared/components/tab-bar.js +70 -0
  165. batho-0.1.4/batho/dashboard/vendor/cytoscape/LICENSE +19 -0
  166. batho-0.1.4/batho/dashboard/vendor/cytoscape/VERSION.txt +1 -0
  167. batho-0.1.4/batho/dashboard/vendor/cytoscape/cytoscape.min.js +32 -0
  168. batho-0.1.4/batho/dashboard/vendor/marked/LICENSE +1 -0
  169. batho-0.1.4/batho/dashboard/vendor/marked/VERSION.txt +1 -0
  170. batho-0.1.4/batho/dashboard/vendor/marked/marked.min.js +6 -0
  171. batho-0.1.4/batho/hooks/__init__.py +43 -0
  172. batho-0.1.4/batho/hooks/bootstrap.py +18 -0
  173. batho-0.1.4/batho/hooks/constants.py +97 -0
  174. batho-0.1.4/batho/hooks/installer.py +159 -0
  175. batho-0.1.4/batho/hooks/loader.py +63 -0
  176. batho-0.1.4/batho/hooks/models.py +78 -0
  177. batho-0.1.4/batho/hooks/planner.py +128 -0
  178. batho-0.1.4/batho/hooks/runner.py +147 -0
  179. batho-0.1.4/batho/synthesizer.py +249 -0
  180. batho-0.1.4/batho/time_machine.py +1667 -0
  181. batho-0.1.4/batho/utils/__init__.py +54 -0
  182. batho-0.1.4/batho/utils/cli_output.py +165 -0
  183. batho-0.1.4/batho/utils/dependencies.py +618 -0
  184. batho-0.1.4/batho/utils/encoding.py +106 -0
  185. batho-0.1.4/batho/utils/file_io.py +194 -0
  186. batho-0.1.4/batho/utils/file_lock.py +294 -0
  187. batho-0.1.4/batho/utils/hash.py +214 -0
  188. batho-0.1.4/batho/utils/ignore.py +379 -0
  189. batho-0.1.4/batho/utils/logging.py +160 -0
  190. batho-0.1.4/batho/utils/memory_monitor.py +304 -0
  191. batho-0.1.4/batho/utils/patch_errors.py +279 -0
  192. batho-0.1.4/batho/utils/path_sanitizer.py +237 -0
  193. batho-0.1.4/batho.yaml +137 -0
  194. batho-0.1.4/batho.yaml.example +164 -0
  195. batho-0.1.4/batho_cli.py +3922 -0
  196. batho-0.1.4/cicd/README.md +37 -0
  197. batho-0.1.4/cicd/action.yml +149 -0
  198. batho-0.1.4/cicd/batho-index.yml +106 -0
  199. batho-0.1.4/cicd/starter-batho.yml +56 -0
  200. batho-0.1.4/pyproject.toml +88 -0
  201. batho-0.1.4/pytest.ini +45 -0
  202. batho-0.1.4/scripts/ci/render_summary.py +188 -0
  203. batho-0.1.4/test.py +94 -0
  204. batho-0.1.4/tests/__init__.py +1 -0
  205. batho-0.1.4/tests/bridge/__init__.py +1 -0
  206. batho-0.1.4/tests/bridge/test_artifact_loader.py +100 -0
  207. batho-0.1.4/tests/bridge/test_http_api.py +330 -0
  208. batho-0.1.4/tests/bridge/test_mcp_server.py +93 -0
  209. batho-0.1.4/tests/bridge/test_registry_client.py +144 -0
  210. batho-0.1.4/tests/bsg_plugins/secret_catcher.yaml +45 -0
  211. batho-0.1.4/tests/cli/__init__.py +0 -0
  212. batho-0.1.4/tests/cli/test_batho_high_coverage.py +1382 -0
  213. batho-0.1.4/tests/cli/test_cli_commands.py +1057 -0
  214. batho-0.1.4/tests/cli/test_cli_integration.py +72 -0
  215. batho-0.1.4/tests/cli/test_cli_main_logging.py +103 -0
  216. batho-0.1.4/tests/cli/test_cli_parser.py +220 -0
  217. batho-0.1.4/tests/cli/test_cli_plugins.py +399 -0
  218. batho-0.1.4/tests/cli/test_sync_command.py +211 -0
  219. batho-0.1.4/tests/cloud_sync/__init__.py +0 -0
  220. batho-0.1.4/tests/cloud_sync/test_client.py +149 -0
  221. batho-0.1.4/tests/cloud_sync/test_uploader.py +142 -0
  222. batho-0.1.4/tests/conftest.py +191 -0
  223. batho-0.1.4/tests/context/__init__.py +0 -0
  224. batho-0.1.4/tests/context/test_bsg_map_json.py +313 -0
  225. batho-0.1.4/tests/context/test_cache_high_coverage.py +141 -0
  226. batho-0.1.4/tests/context/test_codegraph.py +664 -0
  227. batho-0.1.4/tests/context/test_common_queries.py +41 -0
  228. batho-0.1.4/tests/context/test_context_misc_coverage.py +295 -0
  229. batho-0.1.4/tests/context/test_css_extractor.py +468 -0
  230. batho-0.1.4/tests/context/test_extractor_imports.py +54 -0
  231. batho-0.1.4/tests/context/test_factory.py +308 -0
  232. batho-0.1.4/tests/context/test_graph_cache.py +52 -0
  233. batho-0.1.4/tests/context/test_hcl_extractor.py +490 -0
  234. batho-0.1.4/tests/context/test_html_extractor.py +238 -0
  235. batho-0.1.4/tests/context/test_incremental.py +137 -0
  236. batho-0.1.4/tests/context/test_json_extractor.py +69 -0
  237. batho-0.1.4/tests/context/test_language_detector_comprehensive.py +376 -0
  238. batho-0.1.4/tests/context/test_languages.py +173 -0
  239. batho-0.1.4/tests/context/test_markdown_extractor.py +288 -0
  240. batho-0.1.4/tests/context/test_mmap_storage.py +110 -0
  241. batho-0.1.4/tests/context/test_objectivec_extractor.py +245 -0
  242. batho-0.1.4/tests/context/test_pipeline_high_coverage.py +348 -0
  243. batho-0.1.4/tests/context/test_query_service.py +214 -0
  244. batho-0.1.4/tests/context/test_storage_registry.py +677 -0
  245. batho-0.1.4/tests/context/test_symbol_index.py +89 -0
  246. batho-0.1.4/tests/context/test_tiny_language_extractors.py +62 -0
  247. batho-0.1.4/tests/context/test_toml_extractor.py +129 -0
  248. batho-0.1.4/tests/context/test_yaml_extractor.py +419 -0
  249. batho-0.1.4/tests/core/__init__.py +0 -0
  250. batho-0.1.4/tests/core/test_bsg_rules.py +480 -0
  251. batho-0.1.4/tests/core/test_bsg_rules_extended.py +796 -0
  252. batho-0.1.4/tests/core/test_config.py +399 -0
  253. batho-0.1.4/tests/core/test_extractor.py +199 -0
  254. batho-0.1.4/tests/core/test_hooks_config.py +81 -0
  255. batho-0.1.4/tests/core/test_new_detection_plugins.py +375 -0
  256. batho-0.1.4/tests/core/test_schema.py +172 -0
  257. batho-0.1.4/tests/core/test_synthesizer.py +60 -0
  258. batho-0.1.4/tests/integration/__init__.py +0 -0
  259. batho-0.1.4/tests/integration/test_cross_platform.py +291 -0
  260. batho-0.1.4/tests/integration/test_error_handling.py +291 -0
  261. batho-0.1.4/tests/integration/test_workflows.py +193 -0
  262. batho-0.1.4/tests/performance/test_performance.py +294 -0
  263. batho-0.1.4/tests/test_batho_core_init.py +41 -0
  264. batho-0.1.4/tests/test_flask_fixture.py +59 -0
  265. batho-0.1.4/tests/test_incremental_patch.py +796 -0
  266. batho-0.1.4/tests/test_time_machine.py +384 -0
  267. batho-0.1.4/tests/test_time_machine_high_coverage.py +845 -0
  268. batho-0.1.4/tests/testdata/PHASE1_COMPLETION_SUMMARY.md +116 -0
  269. batho-0.1.4/tests/testdata/PHASES1_5_COMPLETION_SUMMARY.md +171 -0
  270. batho-0.1.4/tests/testdata/files/README.md +10 -0
  271. batho-0.1.4/tests/testdata/files/config/sample_config.ini +66 -0
  272. batho-0.1.4/tests/testdata/files/config/sample_config.json +80 -0
  273. batho-0.1.4/tests/testdata/files/config/sample_config.toml +77 -0
  274. batho-0.1.4/tests/testdata/files/config/sample_config.yaml +77 -0
  275. batho-0.1.4/tests/testdata/files/cpp/sample_cpp.cpp +224 -0
  276. batho-0.1.4/tests/testdata/files/css/advanced.css +38 -0
  277. batho-0.1.4/tests/testdata/files/css/basic.css +18 -0
  278. batho-0.1.4/tests/testdata/files/css/complex_selectors.css +58 -0
  279. batho-0.1.4/tests/testdata/files/css/scss_style.scss +54 -0
  280. batho-0.1.4/tests/testdata/files/go/sample_go.go +113 -0
  281. batho-0.1.4/tests/testdata/files/hcl/basic.tf +24 -0
  282. batho-0.1.4/tests/testdata/files/hcl/complex.tf +76 -0
  283. batho-0.1.4/tests/testdata/files/java/SampleClass.java +151 -0
  284. batho-0.1.4/tests/testdata/files/javascript/sample_es6.js +84 -0
  285. batho-0.1.4/tests/testdata/files/markup/sample_html.html +341 -0
  286. batho-0.1.4/tests/testdata/files/markup/sample_markdown.md +186 -0
  287. batho-0.1.4/tests/testdata/files/markup/sample_xml.xml +246 -0
  288. batho-0.1.4/tests/testdata/files/python/sample_functions.py +77 -0
  289. batho-0.1.4/tests/testdata/files/rust/sample_rust.rs +160 -0
  290. batho-0.1.4/tests/testdata/files/yaml/basic.yaml +20 -0
  291. batho-0.1.4/tests/testdata/files/yaml/complex.yaml +54 -0
  292. batho-0.1.4/tests/testdata/fixtures/README.md +10 -0
  293. batho-0.1.4/tests/testdata/outputs/PHASE7_COMPLETION_SUMMARY.md +135 -0
  294. batho-0.1.4/tests/testdata/outputs/README.md +10 -0
  295. batho-0.1.4/tests/testdata/outputs/api_responses/error_response.json +13 -0
  296. batho-0.1.4/tests/testdata/outputs/api_responses/index_success.json +27 -0
  297. batho-0.1.4/tests/testdata/outputs/api_responses/stats_response.json +30 -0
  298. batho-0.1.4/tests/testdata/outputs/configs/custom_configs/language_specific_config.yaml +18 -0
  299. batho-0.1.4/tests/testdata/outputs/configs/custom_configs/large_repository_config.json +21 -0
  300. batho-0.1.4/tests/testdata/outputs/configs/custom_configs/performance_tuning_config.toml +18 -0
  301. batho-0.1.4/tests/testdata/outputs/configs/default_config.json +21 -0
  302. batho-0.1.4/tests/testdata/outputs/configs/env_override_configs/override_example.json +34 -0
  303. batho-0.1.4/tests/testdata/outputs/configs/invalid_configs/missing_fields.json +9 -0
  304. batho-0.1.4/tests/testdata/outputs/configs/invalid_configs/schema_violation.json +21 -0
  305. batho-0.1.4/tests/testdata/outputs/configs/invalid_configs/type_errors.json +21 -0
  306. batho-0.1.4/tests/testdata/outputs/graphs/flask_sample_graph.json +22336 -0
  307. batho-0.1.4/tests/testdata/outputs/graphs/multi_language_graph.json +1272 -0
  308. batho-0.1.4/tests/testdata/outputs/graphs/simple_python_graph.json +531 -0
  309. batho-0.1.4/tests/testdata/outputs/repomaps/flask_sample_repomap.json +4591 -0
  310. batho-0.1.4/tests/testdata/outputs/repomaps/flask_sample_repomap_compressed_1000.txt +102 -0
  311. batho-0.1.4/tests/testdata/outputs/repomaps/flask_sample_repomap_compressed_2000.txt +215 -0
  312. batho-0.1.4/tests/testdata/outputs/repomaps/flask_sample_repomap_compressed_4000.txt +533 -0
  313. batho-0.1.4/tests/testdata/outputs/repomaps/flask_sample_repomap_full.txt +763 -0
  314. batho-0.1.4/tests/testdata/outputs/repomaps/flask_sample_repomap_hierarchical.txt +768 -0
  315. batho-0.1.4/tests/testdata/outputs/repomaps/multi_language_repomap.json +314 -0
  316. batho-0.1.4/tests/testdata/outputs/repomaps/multi_language_repomap_compressed_1000.txt +39 -0
  317. batho-0.1.4/tests/testdata/outputs/repomaps/multi_language_repomap_compressed_2000.txt +39 -0
  318. batho-0.1.4/tests/testdata/outputs/repomaps/multi_language_repomap_compressed_4000.txt +39 -0
  319. batho-0.1.4/tests/testdata/outputs/repomaps/multi_language_repomap_full.txt +39 -0
  320. batho-0.1.4/tests/testdata/outputs/repomaps/multi_language_repomap_hierarchical.txt +42 -0
  321. batho-0.1.4/tests/testdata/outputs/repomaps/simple_python_repomap.json +148 -0
  322. batho-0.1.4/tests/testdata/outputs/repomaps/simple_python_repomap_compressed_1000.txt +19 -0
  323. batho-0.1.4/tests/testdata/outputs/repomaps/simple_python_repomap_compressed_2000.txt +19 -0
  324. batho-0.1.4/tests/testdata/outputs/repomaps/simple_python_repomap_compressed_4000.txt +19 -0
  325. batho-0.1.4/tests/testdata/outputs/repomaps/simple_python_repomap_full.txt +19 -0
  326. batho-0.1.4/tests/testdata/outputs/repomaps/simple_python_repomap_hierarchical.txt +22 -0
  327. batho-0.1.4/tests/testdata/repositories/edge_cases/.!61241!latin1_file.py +1 -0
  328. batho-0.1.4/tests/testdata/repositories/edge_cases/.!61737!latin1_file.py +1 -0
  329. batho-0.1.4/tests/testdata/repositories/edge_cases/.!6650!latin1_file.py +1 -0
  330. batho-0.1.4/tests/testdata/repositories/edge_cases/binary_file.bin +0 -0
  331. batho-0.1.4/tests/testdata/repositories/edge_cases/deep/nested/path/to/file.py +2 -0
  332. batho-0.1.4/tests/testdata/repositories/edge_cases/empty_file.py +0 -0
  333. batho-0.1.4/tests/testdata/repositories/edge_cases/latin1_file.py +4 -0
  334. batho-0.1.4/tests/testdata/repositories/edge_cases/utf16_file.txt +0 -0
  335. batho-0.1.4/tests/testdata/repositories/edge_cases/whitespace_only.py +3 -0
  336. batho-0.1.4/tests/testdata/repositories/flask/.devcontainer/devcontainer.json +17 -0
  337. batho-0.1.4/tests/testdata/repositories/flask/.devcontainer/on-create-command.sh +9 -0
  338. batho-0.1.4/tests/testdata/repositories/flask/.editorconfig +13 -0
  339. batho-0.1.4/tests/testdata/repositories/flask/.flake8 +25 -0
  340. batho-0.1.4/tests/testdata/repositories/flask/.gitignore +25 -0
  341. batho-0.1.4/tests/testdata/repositories/flask/.pre-commit-config.yaml +37 -0
  342. batho-0.1.4/tests/testdata/repositories/flask/.readthedocs.yaml +13 -0
  343. batho-0.1.4/tests/testdata/repositories/flask/CHANGES.rst +1516 -0
  344. batho-0.1.4/tests/testdata/repositories/flask/CODE_OF_CONDUCT.md +76 -0
  345. batho-0.1.4/tests/testdata/repositories/flask/CONTRIBUTING.rst +238 -0
  346. batho-0.1.4/tests/testdata/repositories/flask/LICENSE.rst +28 -0
  347. batho-0.1.4/tests/testdata/repositories/flask/README.rst +80 -0
  348. batho-0.1.4/tests/testdata/repositories/flask/docs/Makefile +20 -0
  349. batho-0.1.4/tests/testdata/repositories/flask/docs/_static/debugger.png +0 -0
  350. batho-0.1.4/tests/testdata/repositories/flask/docs/_static/flask-horizontal.png +0 -0
  351. batho-0.1.4/tests/testdata/repositories/flask/docs/_static/flask-vertical.png +0 -0
  352. batho-0.1.4/tests/testdata/repositories/flask/docs/_static/pycharm-run-config.png +0 -0
  353. batho-0.1.4/tests/testdata/repositories/flask/docs/_static/shortcut-icon.png +0 -0
  354. batho-0.1.4/tests/testdata/repositories/flask/docs/api.rst +722 -0
  355. batho-0.1.4/tests/testdata/repositories/flask/docs/appcontext.rst +147 -0
  356. batho-0.1.4/tests/testdata/repositories/flask/docs/async-await.rst +131 -0
  357. batho-0.1.4/tests/testdata/repositories/flask/docs/blueprints.rst +315 -0
  358. batho-0.1.4/tests/testdata/repositories/flask/docs/changes.rst +4 -0
  359. batho-0.1.4/tests/testdata/repositories/flask/docs/cli.rst +556 -0
  360. batho-0.1.4/tests/testdata/repositories/flask/docs/conf.py +96 -0
  361. batho-0.1.4/tests/testdata/repositories/flask/docs/config.rst +721 -0
  362. batho-0.1.4/tests/testdata/repositories/flask/docs/contributing.rst +1 -0
  363. batho-0.1.4/tests/testdata/repositories/flask/docs/debugging.rst +99 -0
  364. batho-0.1.4/tests/testdata/repositories/flask/docs/deploying/apache-httpd.rst +66 -0
  365. batho-0.1.4/tests/testdata/repositories/flask/docs/deploying/asgi.rst +27 -0
  366. batho-0.1.4/tests/testdata/repositories/flask/docs/deploying/eventlet.rst +80 -0
  367. batho-0.1.4/tests/testdata/repositories/flask/docs/deploying/gevent.rst +80 -0
  368. batho-0.1.4/tests/testdata/repositories/flask/docs/deploying/gunicorn.rst +130 -0
  369. batho-0.1.4/tests/testdata/repositories/flask/docs/deploying/index.rst +79 -0
  370. batho-0.1.4/tests/testdata/repositories/flask/docs/deploying/mod_wsgi.rst +94 -0
  371. batho-0.1.4/tests/testdata/repositories/flask/docs/deploying/nginx.rst +69 -0
  372. batho-0.1.4/tests/testdata/repositories/flask/docs/deploying/proxy_fix.rst +33 -0
  373. batho-0.1.4/tests/testdata/repositories/flask/docs/deploying/uwsgi.rst +145 -0
  374. batho-0.1.4/tests/testdata/repositories/flask/docs/deploying/waitress.rst +75 -0
  375. batho-0.1.4/tests/testdata/repositories/flask/docs/design.rst +228 -0
  376. batho-0.1.4/tests/testdata/repositories/flask/docs/errorhandling.rst +523 -0
  377. batho-0.1.4/tests/testdata/repositories/flask/docs/extensiondev.rst +303 -0
  378. batho-0.1.4/tests/testdata/repositories/flask/docs/extensions.rst +48 -0
  379. batho-0.1.4/tests/testdata/repositories/flask/docs/index.rst +84 -0
  380. batho-0.1.4/tests/testdata/repositories/flask/docs/installation.rst +144 -0
  381. batho-0.1.4/tests/testdata/repositories/flask/docs/license.rst +4 -0
  382. batho-0.1.4/tests/testdata/repositories/flask/docs/lifecycle.rst +168 -0
  383. batho-0.1.4/tests/testdata/repositories/flask/docs/logging.rst +183 -0
  384. batho-0.1.4/tests/testdata/repositories/flask/docs/make.bat +35 -0
  385. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/appdispatch.rst +189 -0
  386. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/appfactories.rst +118 -0
  387. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/caching.rst +16 -0
  388. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/celery.rst +242 -0
  389. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/deferredcallbacks.rst +44 -0
  390. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/favicon.rst +53 -0
  391. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/fileuploads.rst +182 -0
  392. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/flashing.rst +148 -0
  393. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/index.rst +40 -0
  394. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/javascript.rst +259 -0
  395. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/jquery.rst +6 -0
  396. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/lazyloading.rst +109 -0
  397. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/methodoverrides.rst +42 -0
  398. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/mongoengine.rst +103 -0
  399. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/packages.rst +133 -0
  400. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/requestchecksum.rst +55 -0
  401. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/singlepageapplications.rst +24 -0
  402. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/sqlalchemy.rst +214 -0
  403. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/sqlite3.rst +147 -0
  404. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/streaming.rst +85 -0
  405. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/subclassing.rst +17 -0
  406. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/templateinheritance.rst +68 -0
  407. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/urlprocessors.rst +126 -0
  408. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/viewdecorators.rst +171 -0
  409. batho-0.1.4/tests/testdata/repositories/flask/docs/patterns/wtforms.rst +126 -0
  410. batho-0.1.4/tests/testdata/repositories/flask/docs/quickstart.rst +907 -0
  411. batho-0.1.4/tests/testdata/repositories/flask/docs/reqcontext.rst +243 -0
  412. batho-0.1.4/tests/testdata/repositories/flask/docs/security.rst +274 -0
  413. batho-0.1.4/tests/testdata/repositories/flask/docs/server.rst +115 -0
  414. batho-0.1.4/tests/testdata/repositories/flask/docs/shell.rst +100 -0
  415. batho-0.1.4/tests/testdata/repositories/flask/docs/signals.rst +167 -0
  416. batho-0.1.4/tests/testdata/repositories/flask/docs/templating.rst +229 -0
  417. batho-0.1.4/tests/testdata/repositories/flask/docs/testing.rst +319 -0
  418. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/blog.rst +336 -0
  419. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/database.rst +209 -0
  420. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/deploy.rst +111 -0
  421. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/factory.rst +162 -0
  422. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/flaskr_edit.png +0 -0
  423. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/flaskr_index.png +0 -0
  424. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/flaskr_login.png +0 -0
  425. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/index.rst +64 -0
  426. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/install.rst +89 -0
  427. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/layout.rst +110 -0
  428. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/next.rst +38 -0
  429. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/static.rst +72 -0
  430. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/templates.rst +187 -0
  431. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/tests.rst +559 -0
  432. batho-0.1.4/tests/testdata/repositories/flask/docs/tutorial/views.rst +305 -0
  433. batho-0.1.4/tests/testdata/repositories/flask/docs/views.rst +324 -0
  434. batho-0.1.4/tests/testdata/repositories/flask/metadata.py +101 -0
  435. batho-0.1.4/tests/testdata/repositories/flask/pyproject.toml +108 -0
  436. batho-0.1.4/tests/testdata/repositories/flask/repository_metadata.json +159 -0
  437. batho-0.1.4/tests/testdata/repositories/flask/requirements/build.in +1 -0
  438. batho-0.1.4/tests/testdata/repositories/flask/requirements/build.txt +13 -0
  439. batho-0.1.4/tests/testdata/repositories/flask/requirements/dev.in +6 -0
  440. batho-0.1.4/tests/testdata/repositories/flask/requirements/dev.txt +64 -0
  441. batho-0.1.4/tests/testdata/repositories/flask/requirements/docs.in +5 -0
  442. batho-0.1.4/tests/testdata/repositories/flask/requirements/docs.txt +68 -0
  443. batho-0.1.4/tests/testdata/repositories/flask/requirements/tests-pallets-min.in +6 -0
  444. batho-0.1.4/tests/testdata/repositories/flask/requirements/tests-pallets-min.txt +22 -0
  445. batho-0.1.4/tests/testdata/repositories/flask/requirements/tests.in +4 -0
  446. batho-0.1.4/tests/testdata/repositories/flask/requirements/tests.txt +19 -0
  447. batho-0.1.4/tests/testdata/repositories/flask/requirements/typing.in +4 -0
  448. batho-0.1.4/tests/testdata/repositories/flask/requirements/typing.txt +23 -0
  449. batho-0.1.4/tests/testdata/repositories/flask/src/flask/__init__.py +102 -0
  450. batho-0.1.4/tests/testdata/repositories/flask/src/flask/__main__.py +3 -0
  451. batho-0.1.4/tests/testdata/repositories/flask/src/flask/app.py +2213 -0
  452. batho-0.1.4/tests/testdata/repositories/flask/src/flask/blueprints.py +626 -0
  453. batho-0.1.4/tests/testdata/repositories/flask/src/flask/cli.py +1068 -0
  454. batho-0.1.4/tests/testdata/repositories/flask/src/flask/config.py +347 -0
  455. batho-0.1.4/tests/testdata/repositories/flask/src/flask/ctx.py +440 -0
  456. batho-0.1.4/tests/testdata/repositories/flask/src/flask/debughelpers.py +160 -0
  457. batho-0.1.4/tests/testdata/repositories/flask/src/flask/globals.py +96 -0
  458. batho-0.1.4/tests/testdata/repositories/flask/src/flask/helpers.py +701 -0
  459. batho-0.1.4/tests/testdata/repositories/flask/src/flask/json/__init__.py +170 -0
  460. batho-0.1.4/tests/testdata/repositories/flask/src/flask/json/provider.py +216 -0
  461. batho-0.1.4/tests/testdata/repositories/flask/src/flask/json/tag.py +314 -0
  462. batho-0.1.4/tests/testdata/repositories/flask/src/flask/logging.py +76 -0
  463. batho-0.1.4/tests/testdata/repositories/flask/src/flask/py.typed +0 -0
  464. batho-0.1.4/tests/testdata/repositories/flask/src/flask/scaffold.py +873 -0
  465. batho-0.1.4/tests/testdata/repositories/flask/src/flask/sessions.py +367 -0
  466. batho-0.1.4/tests/testdata/repositories/flask/src/flask/signals.py +33 -0
  467. batho-0.1.4/tests/testdata/repositories/flask/src/flask/templating.py +220 -0
  468. batho-0.1.4/tests/testdata/repositories/flask/src/flask/testing.py +295 -0
  469. batho-0.1.4/tests/testdata/repositories/flask/src/flask/typing.py +82 -0
  470. batho-0.1.4/tests/testdata/repositories/flask/src/flask/views.py +190 -0
  471. batho-0.1.4/tests/testdata/repositories/flask/src/flask/wrappers.py +173 -0
  472. batho-0.1.4/tests/testdata/repositories/flask/tox.ini +42 -0
  473. batho-0.1.4/tests/testdata/repositories/flask/uv.lock +473 -0
  474. batho-0.1.4/tests/testdata/repositories/multi_language/Dockerfile +5 -0
  475. batho-0.1.4/tests/testdata/repositories/multi_language/backend/app.py +20 -0
  476. batho-0.1.4/tests/testdata/repositories/multi_language/backend/models.py +28 -0
  477. batho-0.1.4/tests/testdata/repositories/multi_language/backend/requirements.txt +3 -0
  478. batho-0.1.4/tests/testdata/repositories/multi_language/frontend/package.json +13 -0
  479. batho-0.1.4/tests/testdata/repositories/multi_language/frontend/src/App.tsx +17 -0
  480. batho-0.1.4/tests/testdata/repositories/multi_language/frontend/src/utils.ts +9 -0
  481. batho-0.1.4/tests/testdata/repositories/multi_language/frontend/tsconfig.json +10 -0
  482. batho-0.1.4/tests/testdata/repositories/simple_python/.gitignore +5 -0
  483. batho-0.1.4/tests/testdata/repositories/simple_python/README.md +2 -0
  484. batho-0.1.4/tests/testdata/repositories/simple_python/requirements.txt +3 -0
  485. batho-0.1.4/tests/testdata/repositories/simple_python/setup.py +9 -0
  486. batho-0.1.4/tests/testdata/repositories/simple_python/src/__init__.py +6 -0
  487. batho-0.1.4/tests/testdata/repositories/simple_python/src/calculator.py +43 -0
  488. batho-0.1.4/tests/testdata/repositories/simple_python/src/utils.py +16 -0
  489. batho-0.1.4/tests/testdata/repositories/simple_python/tests/test_calculator.py +17 -0
  490. batho-0.1.4/tests/utils/__init__.py +0 -0
  491. batho-0.1.4/tests/utils/test_dependencies.py +518 -0
  492. batho-0.1.4/tests/utils/test_encoding.py +120 -0
  493. batho-0.1.4/tests/utils/test_file_io.py +94 -0
  494. batho-0.1.4/tests/utils/test_file_lock.py +195 -0
  495. batho-0.1.4/tests/utils/test_hash.py +161 -0
  496. batho-0.1.4/tests/utils/test_ignore.py +220 -0
  497. batho-0.1.4/tests/utils/test_logging.py +91 -0
  498. batho-0.1.4/tests/utils/test_memory_monitor.py +244 -0
  499. batho-0.1.4/tests/utils/test_patch_errors.py +93 -0
  500. batho-0.1.4/tests/utils/test_path_sanitizer.py +95 -0
  501. batho-0.1.4/uv.lock +1224 -0
@@ -0,0 +1,33 @@
1
+ version: hooks.v1
2
+ defaults:
3
+ shell: sh
4
+ timeout_seconds: 300
5
+ fail_fast: true
6
+ env: {}
7
+
8
+ templates:
9
+ custom-team-check:
10
+ description: Team-specific guardrail
11
+ run: echo "[batho hooks] add your team check here"
12
+
13
+ hooks:
14
+ pre-commit:
15
+ enabled: true
16
+ description: Enterprise pre-commit gate
17
+ stages:
18
+ - template: code-quality
19
+ - template: secret-scan
20
+ - template: batho-index
21
+
22
+ pre-push:
23
+ enabled: true
24
+ description: Enterprise pre-push validation
25
+ stages:
26
+ - template: validation-tests
27
+ - template: batho-patch-scan
28
+
29
+ enterprise-nightly:
30
+ enabled: true
31
+ description: Custom non-git hook runnable via batho hooks run
32
+ stages:
33
+ - template: custom-team-check
@@ -0,0 +1,114 @@
1
+ # Batho Ignore File
2
+ # This file uses glob patterns to exclude files/directories from BSG indexing.
3
+ # Patterns are merged with global ignore patterns.
4
+ # Format: one pattern per line, shell-style globs (same as .gitignore)
5
+
6
+ # Build artifacts and dependencies
7
+ **/__pycache__/
8
+ **/*.pyc
9
+ **/*.pyo
10
+ **/*.pyd
11
+ **/.Python
12
+ **/build/
13
+ **/dist/
14
+ **/*.egg-info/
15
+ **/.eggs/
16
+ **/node_modules/
17
+ **/vendor/
18
+ **/.venv/
19
+ **/venv/
20
+ **/ENV/
21
+
22
+ # IDE and editor files
23
+ **/.vscode/
24
+ **/.idea/
25
+ **/.DS_Store
26
+ **/*.swp
27
+ **/*.swo
28
+ **/*~
29
+ **/.project
30
+ **/.settings/
31
+
32
+ # Test and coverage artifacts
33
+ **/.pytest_cache/
34
+ **/.coverage
35
+ **/htmlcov/
36
+ **/.tox/
37
+ **/.mypy_cache/
38
+ **/coverage.xml
39
+ **/*.cover
40
+
41
+ # Documentation and generated files
42
+ **/_build/
43
+ **/site/
44
+ **/.doctrees/
45
+ **/*.md~
46
+
47
+ # Temporary and cache files
48
+ **/tmp/
49
+ **/temp/
50
+ **/*.tmp
51
+ **/*.bak
52
+ **/*.log
53
+ **/*.cache
54
+
55
+ # Large binary files
56
+ **/*.zip
57
+ **/*.tar
58
+ **/*.tar.gz
59
+ **/*.rar
60
+ **/*.7z
61
+ **/*.iso
62
+ **/*.dmg
63
+ **/*.img
64
+ **/*.bin
65
+
66
+ # Database files
67
+ **/*.db
68
+ **/*.sqlite
69
+ **/*.sqlite3
70
+
71
+ # Environment files
72
+ **/.env
73
+ **/.env.local
74
+ **/.env.*.local
75
+
76
+ # OS-specific files
77
+ **/Thumbs.db
78
+ **/Desktop.ini
79
+ **/.Spotlight-V100
80
+ **/.Trashes
81
+
82
+ # Version control (usually handled by .gitignore, but for safety)
83
+ **/.git/
84
+ **/.hg/
85
+ **/.svn/
86
+
87
+ # CI/CD
88
+ **/.github/workflows/*.log
89
+ **/.gitlab-ci.yml
90
+ **/Jenkinsfile
91
+
92
+ # Large data files
93
+ **/data/
94
+ **/datasets/
95
+ **/*.csv
96
+ **/*.xlsx
97
+ **/*.xls
98
+ **/*.parquet
99
+ **/assets/images/
100
+ **/assets/videos/
101
+ **/assets/audio/
102
+
103
+ # Lock files (package managers)
104
+ **/poetry.lock
105
+ **/package-lock.json
106
+ **/yarn.lock
107
+ **/pnpm-lock.yaml
108
+ **/uv.lock
109
+
110
+ # Example/skeleton files
111
+ **/example/
112
+ **/examples/
113
+ **/demo/
114
+ **/samples/
@@ -0,0 +1,48 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ test:
15
+ name: Test (Python ${{ matrix.python-version }})
16
+ runs-on: ubuntu-latest
17
+ strategy:
18
+ fail-fast: false
19
+ matrix:
20
+ python-version: ["3.12"]
21
+
22
+ steps:
23
+ - name: Checkout
24
+ uses: actions/checkout@v4
25
+
26
+ - name: Install uv
27
+ uses: astral-sh/setup-uv@v4
28
+
29
+ - name: Set up Python
30
+ run: uv python install ${{ matrix.python-version }}
31
+
32
+ - name: Install dependencies
33
+ run: uv sync --all-extras
34
+
35
+ - name: Run all tests with coverage
36
+ run: |
37
+ uv run pytest \
38
+ --cov=batho \
39
+ --cov=batho_cli \
40
+ --cov-report=xml \
41
+ --cov-report=term-missing
42
+
43
+ - name: Upload coverage
44
+ uses: actions/upload-artifact@v4
45
+ with:
46
+ name: coverage-${{ matrix.python-version }}
47
+ path: coverage.xml
48
+ retention-days: 7
@@ -0,0 +1,123 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v[0-9]+.[0-9]+.[0-9]+'
7
+ - '!v*-test*'
8
+ workflow_dispatch:
9
+ inputs:
10
+ confirm:
11
+ description: 'Type "publish" to confirm production PyPI release'
12
+ required: true
13
+ default: ''
14
+
15
+ concurrency:
16
+ group: ${{ github.workflow }}-${{ github.ref }}
17
+ cancel-in-progress: false
18
+
19
+ permissions:
20
+ contents: read
21
+
22
+ jobs:
23
+ readiness:
24
+ uses: ./.github/workflows/release-readiness.yml
25
+
26
+ build:
27
+ name: Build package
28
+ needs: readiness
29
+ runs-on: ubuntu-latest
30
+ outputs:
31
+ version: ${{ steps.get-version.outputs.version }}
32
+
33
+ steps:
34
+ - name: Checkout code
35
+ uses: actions/checkout@v4
36
+
37
+ - name: Install uv
38
+ uses: astral-sh/setup-uv@v4
39
+
40
+ - name: Set up Python
41
+ run: uv python install 3.12
42
+
43
+ - name: Get version from pyproject.toml
44
+ id: get-version
45
+ run: |
46
+ version=$(grep '^version' pyproject.toml | head -1 | cut -d'"' -f2)
47
+ echo "version=$version" >> "$GITHUB_OUTPUT"
48
+
49
+ - name: Build package
50
+ run: uv build
51
+
52
+ - name: Verify build artifacts
53
+ run: |
54
+ ls -lh dist/
55
+ echo "Checking for duplicate files in wheel..."
56
+ unzip -l dist/*.whl | awk 'NR>3 && $4 != "" && $4 !~ /^-+$/ {print $4}' | sort | uniq -d | grep -q . && exit 1 || echo "No duplicates found"
57
+ echo "Checking sdist contents..."
58
+ tar tzf dist/*.tar.gz | head -20
59
+
60
+ - name: Check package metadata with twine
61
+ run: uv run --with twine twine check dist/*
62
+
63
+ - name: Upload build artifacts
64
+ uses: actions/upload-artifact@v4
65
+ with:
66
+ name: dist-packages
67
+ path: dist/
68
+ if-no-files-found: error
69
+
70
+ publish-to-pypi:
71
+ name: Publish to PyPI
72
+ needs:
73
+ - readiness
74
+ - build
75
+ runs-on: ubuntu-latest
76
+ environment:
77
+ name: pypi
78
+ url: https://pypi.org/project/batho/${{ needs.build.outputs.version }}/
79
+
80
+ steps:
81
+ - name: Guard against accidental manual trigger
82
+ if: github.event_name == 'workflow_dispatch'
83
+ run: |
84
+ if [ "${{ github.event.inputs.confirm }}" != "publish" ]; then
85
+ echo "Aborted: confirmation input was not 'publish'"
86
+ exit 1
87
+ fi
88
+
89
+ - name: Download build artifacts
90
+ uses: actions/download-artifact@v4
91
+ with:
92
+ name: dist-packages
93
+ path: dist/
94
+
95
+ - name: List artifacts
96
+ run: ls -lh dist/
97
+
98
+ - name: Publish to PyPI
99
+ uses: pypa/gh-action-pypi-publish@release/v1
100
+ with:
101
+ password: ${{ secrets.PYPI_API_TOKEN }}
102
+ verbose: true
103
+
104
+ verify-install:
105
+ name: Verify PyPI install
106
+ needs:
107
+ - publish-to-pypi
108
+ - build
109
+ runs-on: ubuntu-latest
110
+ steps:
111
+ - name: Install uv
112
+ uses: astral-sh/setup-uv@v4
113
+
114
+ - name: Set up Python
115
+ run: uv python install 3.12
116
+
117
+ - name: Install from PyPI and verify
118
+ run: |
119
+ uv venv .verify-venv
120
+ source .verify-venv/bin/activate
121
+ uv pip install batho==${{ needs.build.outputs.version }}
122
+ python -c "import batho; print(f'Installed batho {batho.__version__}')"
123
+ batho --version
@@ -0,0 +1,62 @@
1
+ name: Publish to TestPyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*-test*' # Trigger on tags like v0.1.0-test1, v0.2.0-test2
7
+ workflow_dispatch: # Allow manual trigger
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ build-and-publish:
14
+ name: Build and publish to TestPyPI
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - name: Checkout code
19
+ uses: actions/checkout@v4
20
+
21
+ - name: Install uv
22
+ uses: astral-sh/setup-uv@v4
23
+
24
+ - name: Set up Python
25
+ run: uv python install 3.12
26
+
27
+ - name: Build package
28
+ run: uv build
29
+
30
+ - name: Verify build artifacts
31
+ run: |
32
+ ls -lh dist/
33
+ echo "Checking for duplicate files in wheel..."
34
+ unzip -l dist/*.whl | awk '{print $4}' | sort | uniq -d || echo "No duplicates found ✓"
35
+
36
+ - name: Publish to TestPyPI
37
+ uses: pypa/gh-action-pypi-publish@release/v1
38
+ with:
39
+ repository-url: https://test.pypi.org/legacy/
40
+ password: ${{ secrets.TEST_PYPI_API_TOKEN }}
41
+ skip-existing: true
42
+ verbose: true
43
+
44
+ - name: Test installation from TestPyPI
45
+ run: |
46
+ sleep 10 # Wait for package to be available
47
+ uv venv .test-venv
48
+ source .test-venv/bin/activate
49
+ uv pip install --index-url https://test.pypi.org/simple/ \
50
+ --extra-index-url https://pypi.org/simple \
51
+ batho==$(cat pyproject.toml | grep '^version' | cut -d'"' -f2)
52
+
53
+ # Verify installation
54
+ python -c "import batho; print(f'Batho version: {batho.__version__}')"
55
+ batho --version
56
+
57
+ - name: Upload build artifacts
58
+ uses: actions/upload-artifact@v4
59
+ with:
60
+ name: dist-packages
61
+ path: dist/
62
+ retention-days: 7
@@ -0,0 +1,114 @@
1
+ name: Release Readiness Check
2
+
3
+ on:
4
+ workflow_call:
5
+ outputs:
6
+ version:
7
+ description: "Extracted version from pyproject.toml"
8
+ value: ${{ jobs.validate.outputs.version }}
9
+ workflow_dispatch:
10
+ pull_request:
11
+ branches: [main]
12
+
13
+ concurrency:
14
+ group: release-readiness-${{ github.ref }}
15
+ cancel-in-progress: true
16
+
17
+ permissions:
18
+ contents: read
19
+
20
+ jobs:
21
+ test:
22
+ name: Test Suite
23
+ runs-on: ubuntu-latest
24
+ steps:
25
+ - name: Checkout
26
+ uses: actions/checkout@v4
27
+
28
+ - name: Install uv
29
+ uses: astral-sh/setup-uv@v4
30
+
31
+ - name: Set up Python
32
+ run: uv python install 3.12
33
+
34
+ - name: Install dependencies
35
+ run: uv sync --all-extras
36
+
37
+ - name: Run tests with coverage
38
+ run: |
39
+ uv run pytest \
40
+ --cov=batho \
41
+ --cov=batho_cli \
42
+ --cov-report=xml \
43
+ --cov-report=term-missing
44
+
45
+ - name: Upload coverage
46
+ uses: actions/upload-artifact@v4
47
+ with:
48
+ name: coverage
49
+ path: coverage.xml
50
+ retention-days: 1
51
+
52
+ validate:
53
+ name: Validate Release
54
+ runs-on: ubuntu-latest
55
+ outputs:
56
+ version: ${{ steps.version.outputs.version }}
57
+
58
+ steps:
59
+ - name: Checkout
60
+ uses: actions/checkout@v4
61
+
62
+ - name: Install uv
63
+ uses: astral-sh/setup-uv@v4
64
+
65
+ - name: Set up Python
66
+ run: uv python install 3.12
67
+
68
+ - name: Extract version
69
+ id: version
70
+ run: |
71
+ version=$(grep '^version' pyproject.toml | head -1 | cut -d'"' -f2)
72
+ echo "version=$version" >> "$GITHUB_OUTPUT"
73
+ echo "Detected version: $version"
74
+
75
+ - name: Verify tag matches version (tag pushes only)
76
+ if: startsWith(github.ref, 'refs/tags/v')
77
+ run: |
78
+ tag=${GITHUB_REF#refs/tags/v}
79
+ version=${{ steps.version.outputs.version }}
80
+ if [ "$tag" != "$version" ]; then
81
+ echo "ERROR: Git tag ($tag) does not match pyproject.toml version ($version)"
82
+ exit 1
83
+ fi
84
+ echo "Tag and version match: $version"
85
+
86
+ - name: Verify clean working tree (non-PR only)
87
+ if: github.event_name != 'pull_request'
88
+ run: |
89
+ if [ -n "$(git status --porcelain)" ]; then
90
+ echo "ERROR: Working tree is not clean"
91
+ git status --short
92
+ exit 1
93
+ fi
94
+ echo "Working tree is clean"
95
+
96
+ - name: Build package
97
+ run: uv build
98
+
99
+ - name: Verify build artifacts
100
+ run: |
101
+ ls -lh dist/
102
+ echo "Checking for duplicate files in wheel..."
103
+ unzip -l dist/*.whl | awk 'NR>3 && $4 != "" && $4 !~ /^-+$/ {print $4}' | sort | uniq -d | grep -q . && exit 1 || echo "No duplicates found"
104
+
105
+ - name: Check package metadata with twine
106
+ run: uv run --with twine twine check dist/*
107
+
108
+ - name: Test local install
109
+ run: |
110
+ uv venv .check-venv
111
+ source .check-venv/bin/activate
112
+ uv pip install dist/*.whl
113
+ python -c "import batho; print(f'Installed batho {batho.__version__}')"
114
+ batho --version
batho-0.1.4/.gitignore ADDED
@@ -0,0 +1,51 @@
1
+ # Python cache and build artifacts
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.so
5
+ *.egg
6
+ *.egg-info/
7
+ dist/
8
+ build/
9
+ wheels/
10
+ .eggs/
11
+
12
+ # Virtual environments
13
+ .venv/
14
+ venv/
15
+ env/
16
+ .env/
17
+
18
+ # Test, coverage, and output
19
+ .coverage
20
+ .pytest_cache/
21
+ htmlcov/
22
+ coverage.xml
23
+ test-results.xml
24
+ test_output.puml
25
+
26
+ # Supabase and .ctn artifacts
27
+ supabase/
28
+ .ctn/
29
+
30
+ # Editor/OS files
31
+ .DS_Store
32
+ Thumbs.db
33
+ *.swp
34
+ *.swo
35
+ *.bak
36
+ *.tmp
37
+ ~$*
38
+
39
+ # IDE/project files
40
+ .vscode/
41
+ .idea/
42
+ *.iml
43
+ docs/*
44
+ BSGautoresearch/repos/
45
+ BSGautoresearch/generated/
46
+ BSGautoresearch/state/
47
+ BSGautoresearch/.env
48
+ bsg_analysis.ipynb
49
+ .DS_Store
50
+ issue.md
51
+ plans/*