quadkit-cli 0.0.42__tar.gz → 0.0.44__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 (212) hide show
  1. quadkit_cli-0.0.44/.gitignore +24 -0
  2. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/PKG-INFO +4 -4
  3. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/README.md +3 -3
  4. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/pyproject.toml +1 -1
  5. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/db_commands_data.py +54 -24
  6. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/layout.py +11 -3
  7. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_db.py +49 -5
  8. quadkit_cli-0.0.42/.gitignore +0 -214
  9. quadkit_cli-0.0.42/docs/ARCHITECTURE.md +0 -586
  10. quadkit_cli-0.0.42/docs/COMMANDS.md +0 -258
  11. quadkit_cli-0.0.42/docs/CONFIGURATION.md +0 -46
  12. quadkit_cli-0.0.42/docs/GUIDE.md +0 -205
  13. quadkit_cli-0.0.42/docs/HOWTOS.md +0 -92
  14. quadkit_cli-0.0.42/docs/PROJECT_LAYOUT.md +0 -256
  15. quadkit_cli-0.0.42/docs/PUBLIC_PACKAGE_CLI_MATRIX.md +0 -89
  16. quadkit_cli-0.0.42/docs/QUICKSTART.md +0 -67
  17. quadkit_cli-0.0.42/docs/TROUBLESHOOTING.md +0 -150
  18. quadkit_cli-0.0.42/tests/helpers/runner.py +0 -153
  19. quadkit_cli-0.0.42/tests/unit/registry/test_template.py +0 -187
  20. quadkit_cli-0.0.42/tests/unit/test_add.py +0 -131
  21. quadkit_cli-0.0.42/tests/unit/test_package_names.py +0 -157
  22. quadkit_cli-0.0.42/tests/unit/test_public_surface.py +0 -85
  23. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/LICENSE +0 -0
  24. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/NOTICE +0 -0
  25. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/example.yaml +0 -0
  26. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/__init__.py +0 -0
  27. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/assembly/__init__.py +0 -0
  28. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/assembly/assembler.py +0 -0
  29. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/__init__.py +0 -0
  30. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/add.py +0 -0
  31. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/config.py +0 -0
  32. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/config_utils.py +0 -0
  33. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/contrib.py +0 -0
  34. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/db.py +0 -0
  35. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/db_bootstrap.py +0 -0
  36. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/db_commands_migrations.py +0 -0
  37. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/db_commands_ops.py +0 -0
  38. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/dev.py +0 -0
  39. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/events.py +0 -0
  40. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/gen.py +0 -0
  41. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/init.py +0 -0
  42. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/inspect.py +0 -0
  43. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/meta.py +0 -0
  44. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/new.py +0 -0
  45. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/project.py +0 -0
  46. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/py.typed +0 -0
  47. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/run.py +0 -0
  48. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/shell.py +0 -0
  49. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/commands/system.py +0 -0
  50. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/config.py +0 -0
  51. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/constants.py +0 -0
  52. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/contributors/__init__.py +0 -0
  53. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/contributors/base.py +0 -0
  54. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/contributors/core.py +0 -0
  55. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/contributors/discovery.py +0 -0
  56. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/contributors/registry.py +0 -0
  57. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/contributors/runtime.py +0 -0
  58. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/decorators.py +0 -0
  59. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/di/__init__.py +0 -0
  60. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/di/provider.py +0 -0
  61. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/di/sub_providers/__init__.py +0 -0
  62. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/di/sub_providers/contributor.py +0 -0
  63. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/events.py +0 -0
  64. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/exceptions.py +0 -0
  65. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/generators/__init__.py +0 -0
  66. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/generators/base.py +0 -0
  67. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/generators/field_parser.py +0 -0
  68. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/generators/provider.py +0 -0
  69. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/generators/test.py +0 -0
  70. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/hooks.py +0 -0
  71. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/lib/__init__.py +0 -0
  72. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/lib/config_loader.py +0 -0
  73. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/lib/entry_point.py +0 -0
  74. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/lib/naming.py +0 -0
  75. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/lib/templates.py +0 -0
  76. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/module.py +0 -0
  77. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/output/__init__.py +0 -0
  78. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/output/manager.py +0 -0
  79. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/package_names.py +0 -0
  80. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/protocols.py +0 -0
  81. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/py.typed +0 -0
  82. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/__init__.py +0 -0
  83. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/_lazy_exports.py +0 -0
  84. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/backend_base.py +0 -0
  85. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/command.py +0 -0
  86. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/completion.py +0 -0
  87. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/config.py +0 -0
  88. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/database.py +0 -0
  89. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/database_backends.py +0 -0
  90. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/environment.py +0 -0
  91. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/formatter.py +0 -0
  92. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/generator.py +0 -0
  93. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/health.py +0 -0
  94. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/health_checks/__init__.py +0 -0
  95. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/health_checks/base.py +0 -0
  96. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/health_checks/deps.py +0 -0
  97. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/health_checks/project.py +0 -0
  98. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/health_checks/providers.py +0 -0
  99. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/health_checks/python_env.py +0 -0
  100. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/health_checks/tools.py +0 -0
  101. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/health_checks/vcs_docker.py +0 -0
  102. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/hook.py +0 -0
  103. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/inspect.py +0 -0
  104. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/migration.py +0 -0
  105. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/presets.py +0 -0
  106. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/provider.py +0 -0
  107. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/provider_catalog.py +0 -0
  108. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/provider_registry.py +0 -0
  109. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/secrets.py +0 -0
  110. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/serializer.py +0 -0
  111. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/server.py +0 -0
  112. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/task.py +0 -0
  113. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/telemetry.py +0 -0
  114. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/template.py +0 -0
  115. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/version.py +0 -0
  116. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/registry/watcher.py +0 -0
  117. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/runtime/__init__.py +0 -0
  118. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/runtime/context.py +0 -0
  119. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/runtime/error_handler.py +0 -0
  120. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/runtime/main.py +0 -0
  121. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/scaffold/__init__.py +0 -0
  122. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/scaffold/app_files.py +0 -0
  123. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/scaffold/module_files.py +0 -0
  124. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/scaffold/render.py +0 -0
  125. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/scaffold/specs.py +0 -0
  126. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/scaffold/support_files.py +0 -0
  127. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/scaffold_package.py +0 -0
  128. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/templates/provider.py.jinja2 +0 -0
  129. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/templates/py.typed +0 -0
  130. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/templates/test_unit.py.jinja2 +0 -0
  131. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/cli/types.py +0 -0
  132. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/src/quadkit/py.typed +0 -0
  133. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/conftest.py +0 -0
  134. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/integration/__init__.py +0 -0
  135. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/integration/test_cli_lifecycle.py +0 -0
  136. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/test_package_structure_p1.py +0 -0
  137. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/__init__.py +0 -0
  138. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/_test_cli_contribution_system_support.py +0 -0
  139. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/commands/__init__.py +0 -0
  140. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/commands/test_config.py +0 -0
  141. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/commands/test_config_happy_paths.py +0 -0
  142. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/commands/test_contrib.py +0 -0
  143. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/commands/test_events_cmd.py +0 -0
  144. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/commands/test_inspect.py +0 -0
  145. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/commands/test_meta.py +0 -0
  146. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/commands/test_run.py +0 -0
  147. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/commands/test_shell.py +0 -0
  148. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/commands/test_system.py +0 -0
  149. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/di/test_config_alignment.py +0 -0
  150. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/lib/test_templates.py +0 -0
  151. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/__init__.py +0 -0
  152. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_completion.py +0 -0
  153. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_database.py +0 -0
  154. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_environment.py +0 -0
  155. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_formatter.py +0 -0
  156. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_health.py +0 -0
  157. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_hook.py +0 -0
  158. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_inspect_registry.py +0 -0
  159. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_migration.py +0 -0
  160. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_presets.py +0 -0
  161. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_secrets.py +0 -0
  162. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_serializer.py +0 -0
  163. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_task.py +0 -0
  164. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_telemetry.py +0 -0
  165. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_version.py +0 -0
  166. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/registry/test_watcher.py +0 -0
  167. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_base_contributor.py +0 -0
  168. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_cli_constants.py +0 -0
  169. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_cli_context.py +0 -0
  170. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_cli_contribution_system.py +0 -0
  171. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_cli_contribution_system__testclicontributorsubprovider.py +0 -0
  172. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_cli_errors.py +0 -0
  173. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_cli_exceptions.py +0 -0
  174. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_cli_import_isolation.py +0 -0
  175. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_cli_module.py +0 -0
  176. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_cli_types.py +0 -0
  177. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_config_async.py +0 -0
  178. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_config_loader.py +0 -0
  179. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_config_save.py +0 -0
  180. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_config_validate.py +0 -0
  181. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_contributor_registry.py +0 -0
  182. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_contributor_runtime.py +0 -0
  183. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_core_contributor.py +0 -0
  184. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_decorators.py +0 -0
  185. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_dev_command.py +0 -0
  186. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_error_handler.py +0 -0
  187. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_events.py +0 -0
  188. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_exception_handling.py +0 -0
  189. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_field_parser.py +0 -0
  190. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_gen.py +0 -0
  191. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_gen_controller.py +0 -0
  192. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_gen_provider.py +0 -0
  193. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_generator_base.py +0 -0
  194. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_generator_option_help.py +0 -0
  195. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_generator_registry.py +0 -0
  196. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_generators_contract.py +0 -0
  197. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_health_checks.py +0 -0
  198. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_hooks.py +0 -0
  199. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_init_command.py +0 -0
  200. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_layout.py +0 -0
  201. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_main.py +0 -0
  202. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_new.py +0 -0
  203. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_output.py +0 -0
  204. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_output_json.py +0 -0
  205. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_project.py +0 -0
  206. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_project_layout.py +0 -0
  207. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_provider_registry.py +0 -0
  208. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_round40_hardening.py +0 -0
  209. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_run_detection.py +0 -0
  210. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_scaffold_and_validators.py +0 -0
  211. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_server_registry.py +0 -0
  212. {quadkit_cli-0.0.42 → quadkit_cli-0.0.44}/tests/unit/test_storage_driver_generator.py +0 -0
@@ -0,0 +1,24 @@
1
+ # Generated public-repository ignore rules.
2
+ # Private monorepo paths are intentionally not referenced here.
3
+
4
+ __pycache__/
5
+ *.py[cod]
6
+ *.so
7
+ *.egg-info/
8
+ .venv/
9
+ venv/
10
+ .env
11
+ .env.*
12
+ !.env.example
13
+ .pytest_cache/
14
+ .ruff_cache/
15
+ .mypy_cache/
16
+ .coverage
17
+ coverage.xml
18
+ htmlcov/
19
+ build/
20
+ dist/
21
+ *.log
22
+ .DS_Store
23
+ .idea/
24
+ .vscode/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: quadkit-cli
3
- Version: 0.0.42
3
+ Version: 0.0.44
4
4
  Summary: Command-line interface for Quadkit Framework - Project scaffolding, code generation, and development tools
5
5
  Project-URL: Homepage, https://dbtinoy-.github.io/quadkit/
6
6
  Project-URL: Repository, https://github.com/dbtinoy-/quadkit
@@ -167,10 +167,10 @@ review release notes on upgrade. Report vulnerabilities privately per
167
167
 
168
168
  ## Stability
169
169
 
170
- Version `0.0.42` in the `0.x` series, released in lockstep with the
170
+ Version `0.0.44` in the `0.x` series, released in lockstep with the
171
171
  other four distributions; APIs may change between minor versions until
172
- 1.0 — pin an exact version (`quadkit-cli==0.0.42`) or a tight range
173
- (`>=0.0.42,<0.1.0`). Full policy:
172
+ 1.0 — pin an exact version (`quadkit-cli==0.0.44`) or a tight range
173
+ (`>=0.0.44,<0.1.0`). Full policy:
174
174
  [stability and compatibility](https://dbtinoy-.github.io/quadkit/reference/stability/).
175
175
 
176
176
  ## Links
@@ -111,10 +111,10 @@ review release notes on upgrade. Report vulnerabilities privately per
111
111
 
112
112
  ## Stability
113
113
 
114
- Version `0.0.42` in the `0.x` series, released in lockstep with the
114
+ Version `0.0.44` in the `0.x` series, released in lockstep with the
115
115
  other four distributions; APIs may change between minor versions until
116
- 1.0 — pin an exact version (`quadkit-cli==0.0.42`) or a tight range
117
- (`>=0.0.42,<0.1.0`). Full policy:
116
+ 1.0 — pin an exact version (`quadkit-cli==0.0.44`) or a tight range
117
+ (`>=0.0.44,<0.1.0`). Full policy:
118
118
  [stability and compatibility](https://dbtinoy-.github.io/quadkit/reference/stability/).
119
119
 
120
120
  ## Links
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "quadkit-cli"
9
- version = "0.0.42"
9
+ version = "0.0.44"
10
10
  description = "Command-line interface for Quadkit Framework - Project scaffolding, code generation, and development tools"
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.11"
@@ -23,30 +23,58 @@ from quadkit.contracts.cli.contributions import (
23
23
  from quadkit.contracts.data.sql.database import DatabaseProviderProtocol
24
24
 
25
25
 
26
- def _seeder_source() -> tuple[Path, str | None]:
27
- """Where this project's seeders are, and how to import them.
26
+ def _seeder_sources() -> list[tuple[Path, str | None]]:
27
+ """Every directory this project keeps seeders in, and how to import each.
28
28
 
29
29
  Resolution order:
30
30
 
31
- 1. the canonical ``seeders`` component — ``src/<app>/shared/seeders``,
32
- where ``quadkit gen seeder`` writes and where a generated application
33
- keeps the seeders its persistence provider boots;
34
- 2. the project-root ``seeds/`` directory — what a project generated before
35
- the ``seeders`` row landed has, and what a hand-written collection of
36
- seeders looks like. Those files sit outside any package, so they stay
37
- path-loaded, exactly as this command always loaded them.
31
+ 1. the canonical ``seeders`` component — where ``quadkit gen seeder``
32
+ writes and where a generated application keeps the seeders its
33
+ persistence provider boots;
34
+ 2. **one per bounded context** — ``src/<app>/modules/<slug>/seeders``.
35
+ A seeder seeds one entity, so it follows that entity into its module
36
+ (OQ-L1). Before that, every seeder in a modular project shared one
37
+ ``shared/seeders`` directory and a single lookup found them all;
38
+ scanning the modules is what keeps ``db seed`` complete now that they
39
+ are spread out. Missing this is how the command would silently seed
40
+ nothing in exactly the projects that need it most;
41
+ 3. the project-root ``seeds/`` directory — what a project generated
42
+ before the ``seeders`` row landed has, and what a hand-written
43
+ collection looks like. Those files sit outside any package, so they
44
+ stay path-loaded, exactly as this command always loaded them.
38
45
 
39
46
  Returns:
40
- ``(directory, module_prefix)``: the directory to read, and the dotted
41
- package its modules belong to (``my_app.shared.seeders``) when the
42
- directory lives inside ``src/`` — ``None`` when it does not, which is
43
- the signal to load files by path instead.
47
+ ``(directory, module_prefix)`` pairs: the directory to read, and the
48
+ dotted package its modules belong to when it lives inside ``src/`` —
49
+ ``None`` when it does not, which is the signal to load by path.
44
50
  """
45
51
  layout = read_project_layout()
52
+ found: list[tuple[Path, str | None]] = []
53
+
46
54
  canonical = Path(resolve_output_dir("src/seeders", app_package=layout.app_package))
47
55
  if canonical.is_dir():
48
- return canonical, _module_prefix(canonical)
49
- return Path("seeds"), None
56
+ found.append((canonical, _module_prefix(canonical)))
57
+
58
+ # The app package's `modules/` tree, if this project has bounded contexts.
59
+ app_root = canonical.parent if canonical.name == "seeders" else None
60
+ modules_root = (app_root / "modules") if app_root else None
61
+ if modules_root and modules_root.is_dir():
62
+ for module_dir in sorted(modules_root.iterdir()):
63
+ seeders = module_dir / "seeders"
64
+ if seeders.is_dir():
65
+ found.append((seeders, _module_prefix(seeders)))
66
+
67
+ if found:
68
+ return found
69
+ # The legacy root directory is returned whether or not it exists: the
70
+ # callers report "no seeds directory found" from it, so handing back an
71
+ # absent path is how that message still gets made.
72
+ return [(Path("seeds"), None)]
73
+
74
+
75
+ def _seeder_source() -> tuple[Path, str | None]:
76
+ """The first seeder directory, for callers that only report existence."""
77
+ return _seeder_sources()[0]
50
78
 
51
79
 
52
80
  def _module_prefix(directory: Path) -> str | None:
@@ -135,8 +163,9 @@ def seed(
135
163
  manager = await db_bootstrap.get_migration_manager()
136
164
  await manager.provider.boot()
137
165
  try:
138
- seeds_dir, module_prefix = _seeder_source()
139
- if not seeds_dir.exists() and not file:
166
+ sources = _seeder_sources()
167
+ seeds_dir = sources[0][0]
168
+ if not any(d.exists() for d, _ in sources) and not file:
140
169
  out.warning("No seeds directory found.")
141
170
  return
142
171
 
@@ -150,7 +179,9 @@ def seed(
150
179
  files_to_run.append((Path(file), None))
151
180
  else:
152
181
  files_to_run = [
153
- (seed_file, module_prefix) for seed_file in _seed_files(seeds_dir)
182
+ (seed_file, prefix)
183
+ for directory, prefix in _seeder_sources()
184
+ for seed_file in _seed_files(directory)
154
185
  ]
155
186
 
156
187
  for seed_file, prefix in files_to_run:
@@ -216,12 +247,11 @@ def reset(
216
247
  out.info("No pending migrations.")
217
248
 
218
249
  if seed:
219
- seeds_dir, module_prefix = _seeder_source()
220
- if seeds_dir.exists():
221
- for seed_file in _seed_files(seeds_dir):
222
- await _run_seeder(
223
- out, manager.provider, seed_file, module_prefix
224
- )
250
+ sources = _seeder_sources()
251
+ if any(d.exists() for d, _ in sources):
252
+ for directory, prefix in sources:
253
+ for seed_file in _seed_files(directory):
254
+ await _run_seeder(out, manager.provider, seed_file, prefix)
225
255
  else:
226
256
  out.warning("No seeds directory found, skipping seed step.")
227
257
 
@@ -64,7 +64,11 @@ class ComponentDir:
64
64
  COMPONENTS: tuple[ComponentDir, ...] = (
65
65
  ComponentDir("admin/actions", "admin/actions", False, ("admin_action",)),
66
66
  ComponentDir("admin/resources", "admin/resources", False, ("admin_resource",)),
67
- ComponentDir("audit", "audit", True, ("audited",)),
67
+ # Per-entity attachment: an audit log is written for one entity's table,
68
+ # so it belongs wherever that entity does (the rule `validators` states
69
+ # below). Cross-cutting `shared/` put it where every context could see a
70
+ # file only one of them owns.
71
+ ComponentDir("audit", "audit", False, ("audited",)),
68
72
  # ``auth``, ``contracts`` and ``validators`` carry no generators on
69
73
  # purpose: no registered generator writes there yet (the CLI ships
70
74
  # ``provider`` and ``test``; subsystems contribute the rest), and a
@@ -125,14 +129,18 @@ COMPONENTS: tuple[ComponentDir, ...] = (
125
129
  ComponentDir("sagas", "sagas", False, ("saga", "saga_step")),
126
130
  ComponentDir("schema", "schema", True, ("graphql",)),
127
131
  ComponentDir("schema/dataloaders", "schema/dataloaders", True, ("dataloader",)),
128
- ComponentDir("search", "search", True, ("search_index",)),
132
+ # Per-entity attachment: a search index indexes one entity's fields.
133
+ ComponentDir("search", "search", False, ("search_index",)),
129
134
  # Generated seeders live inside the application package so they are
130
135
  # importable: a project boots them from its persistence provider, and
131
136
  # `quadkit db seed` imports the same modules. ``seeds`` (project root)
132
137
  # stays resolvable in ROOT_DIRS below, because that is where every
133
138
  # project generated before 2026-09-23 kept them and where the command
134
139
  # still looks second.
135
- ComponentDir("seeders", "seeders", True, ("seeder",)),
140
+ # Per-entity attachment: a seeder seeds exactly one entity, so it follows
141
+ # that entity into its module. `quadkit db seed` discovers seeders through
142
+ # the layout rather than a fixed path, so it finds them either way.
143
+ ComponentDir("seeders", "seeders", False, ("seeder",)),
136
144
  ComponentDir("services", "services", False, ("service",)),
137
145
  ComponentDir("storage/backends", "storage/backends", True, ("storage_driver",)),
138
146
  ComponentDir("tasks", "tasks", False, ("task",)),
@@ -176,7 +176,7 @@ def test_db_seed_finds_package_seeders_and_imports_them(
176
176
  ) -> None:
177
177
  """Seeders inside the application package are imported, not path-loaded.
178
178
 
179
- A generated project keeps its seeders under ``src/<app>/shared/seeders/``
179
+ A generated project keeps its seeders under ``src/<app>/seeders/``
180
180
  (the canonical ``seeders`` component) so that its persistence provider can
181
181
  import them at boot. ``quadkit db seed`` has to run the same modules --
182
182
  the path-loading it did before cannot import a seeder that itself imports
@@ -190,7 +190,7 @@ def test_db_seed_finds_package_seeders_and_imports_them(
190
190
  (tmp_path / "pyproject.toml").write_text(
191
191
  '[tool.quadkit]\nmodule = "shop_api.app:app"\n'
192
192
  )
193
- seeders = tmp_path / "src" / "shop_api" / "shared" / "seeders"
193
+ seeders = tmp_path / "src" / "shop_api" / "seeders"
194
194
  seeders.mkdir(parents=True)
195
195
  (seeders / "__init__.py").write_text("")
196
196
  (seeders / "users.py").write_text(
@@ -198,7 +198,7 @@ def test_db_seed_finds_package_seeders_and_imports_them(
198
198
  "\n"
199
199
  "\n"
200
200
  "async def run(provider) -> None:\n"
201
- " import shop_api.shared.seeders as package\n"
201
+ " import shop_api.seeders as package\n"
202
202
  "\n"
203
203
  ' package.RUNS.append("users")\n'
204
204
  )
@@ -207,11 +207,55 @@ def test_db_seed_finds_package_seeders_and_imports_them(
207
207
  result = CliRunner().invoke(app, ["seed"])
208
208
 
209
209
  assert result.exit_code == 0, result.output
210
- assert "Running seeder: src/shop_api/shared/seeders/users.py" in result.output
210
+ assert "Running seeder: src/shop_api/seeders/users.py" in result.output
211
211
 
212
212
  # The same module object the command imported: proof the body ran, which a
213
213
  # text-only assertion on the output cannot give (the import could have
214
214
  # failed silently and left the file unexecuted).
215
- from shop_api.shared.seeders import RUNS
215
+ from shop_api.seeders import RUNS
216
216
 
217
217
  assert RUNS == ["users"]
218
+ @patch(
219
+ "quadkit.cli.commands.db_bootstrap.get_migration_manager",
220
+ new_callable=AsyncMock,
221
+ )
222
+ def test_db_seed_finds_seeders_inside_every_module(
223
+ mock_get_manager, monkeypatch, tmp_path
224
+ ) -> None:
225
+ """A modular project keeps one seeder directory per bounded context.
226
+
227
+ OQ-L1 moved a seeder next to the entity it seeds, so a modular project no
228
+ longer has a single `shared/seeders` for the command to read -- it has
229
+ `modules/<slug>/seeders`, one per context. A lookup that resolved only the
230
+ canonical directory would find nothing here and report success, seeding an
231
+ empty database in exactly the projects most likely to need it.
232
+ """
233
+ mock_manager = AsyncMock()
234
+ mock_manager.provider = AsyncMock()
235
+ mock_get_manager.return_value = mock_manager
236
+
237
+ monkeypatch.chdir(tmp_path)
238
+ (tmp_path / "pyproject.toml").write_text(
239
+ '[tool.quadkit]\nmodule = "shop_api.app:app"\n'
240
+ )
241
+ app_root = tmp_path / "src" / "shop_api"
242
+ for slug, entity in (("billing", "invoices"), ("catalog", "items")):
243
+ seeders = app_root / "modules" / slug / "seeders"
244
+ seeders.mkdir(parents=True)
245
+ (seeders / "__init__.py").write_text("")
246
+ (seeders / f"{entity}.py").write_text(
247
+ "from __future__ import annotations\n"
248
+ "\n"
249
+ "\n"
250
+ "async def run(provider) -> None:\n"
251
+ " return None\n"
252
+ )
253
+
254
+ result = CliRunner().invoke(app, ["seed"])
255
+
256
+ assert result.exit_code == 0, result.output
257
+ # Both contexts, not just the first one found.
258
+ assert "src/shop_api/modules/billing/seeders/invoices.py" in result.output
259
+ assert "src/shop_api/modules/catalog/seeders/items.py" in result.output
260
+
261
+
@@ -1,214 +0,0 @@
1
- *
2
- !tests/
3
- !tests/**
4
- !README.md
5
- !AGENTS.md
6
- !DEVELOPMENT.md
7
- !QUICKGUIDE.md
8
- !MILESTONE*.md
9
- !TESTS*.md
10
- !CHANGELOG.md
11
- !AUDIT*.md
12
- !REF*.md
13
- !AUDIT*.json
14
- !LICENSE
15
- !LICENSE-MIT.txt
16
- !NOTICE
17
- !TRADEMARK.md
18
- !conftest.py
19
- !CONTRIBUTING.md
20
- !CODE_OF_CONDUCT.md
21
- !SECURITY.md
22
- !GOVERNANCE.md
23
- !pyproject.toml
24
- !uv.lock
25
- !docker-compose.yml
26
- !.env.example
27
- !.env.full.example
28
- !.importlinter
29
- !.superpowers/
30
- !.superpowers/**
31
- !.gitattributes
32
- !.editorconfig
33
- !Makefile
34
- !docker-compose.test.yml
35
- !quadkit.yaml.example
36
- !.github/
37
- !.github/workflows/
38
- !.github/workflows/**
39
- !.github/dependabot.yml
40
- !.devcontainer/
41
- !.devcontainer/**
42
- !tools/
43
- !tools/**
44
- !*example.yaml
45
-
46
- # Quadkit Packages
47
- !quadkit*/
48
- !quadkit*/pyproject.toml
49
- !quadkit*/CHANGELOG.md
50
- !quadkit*/README.md
51
- !quadkit*/alembic.ini
52
- !quadkit*/mypy.ini
53
- !quadkit*/*.yaml.example
54
- !quadkit*/src/
55
- !quadkit*/src/**
56
- !quadkit*/docs/
57
- !quadkit*/docs/**
58
- !quadkit*/tests/
59
- !quadkit*/tests/**
60
-
61
- # Keep quadkit docs
62
- !/docs/
63
- !docs/**
64
-
65
- # Session / cutover plans at the repo root
66
- !plans/
67
- !plans/**
68
-
69
- # Keep example files for README examples
70
- !/examples/
71
- !/examples/**
72
-
73
- # Re-ignore these AFTER negations (last match wins)
74
- *.tape
75
- examples/*/runs/
76
- __pycache__/
77
- *.pyc
78
- *.pyo
79
- *.egg-info/
80
- dist/
81
- build/
82
- .eggs/
83
- *.egg
84
- .pytest_cache/
85
- .mypy_cache/
86
- .ruff_cache/
87
- htmlcov/
88
- .coverage
89
- coverage.xml
90
- test.db
91
- !quadkit*/tests/fixtures/test.db
92
- *.log
93
- *.tmp
94
-
95
- # Company-specific files (keep private, do not commit)
96
- .company/
97
- COMPANY_*.md
98
- company-config/
99
- internal-docs/
100
- # Editor swap files
101
- *.swp
102
-
103
- !core/
104
- !packages/
105
- !core/quadkit*/
106
- !packages/quadkit*/
107
- !core/quadkit*/pyproject.toml
108
- !packages/quadkit*/pyproject.toml
109
- !core/quadkit*/CHANGELOG.md
110
- !packages/quadkit*/CHANGELOG.md
111
- !core/quadkit*/README.md
112
- !packages/quadkit*/README.md
113
- !core/quadkit*/alembic.ini
114
- !packages/quadkit*/alembic.ini
115
- !core/quadkit*/mypy.ini
116
- !packages/quadkit*/mypy.ini
117
- !core/quadkit*/*.yaml.example
118
- !packages/quadkit*/*.yaml.example
119
- !core/quadkit*/src/
120
- !core/quadkit*/src/**
121
- !packages/quadkit*/src/
122
- !packages/quadkit*/src/**
123
- !core/quadkit*/tests/
124
- !core/quadkit*/tests/**
125
- !packages/quadkit*/tests/
126
- !packages/quadkit*/tests/**
127
- !core/quadkit*/docs/
128
- !core/quadkit*/docs/**
129
- !packages/quadkit*/docs/
130
- !packages/quadkit*/docs/**
131
-
132
- # dev/
133
- !dev/
134
- !dev/**
135
-
136
- # Admin dev playground (committed dev asset; local SQLite files stay ignored)
137
- !packages/quadkit-admin/playground/
138
- !packages/quadkit-admin/playground/serve.py
139
-
140
- # gatewai apps
141
- !apps/
142
- !apps/**
143
- !apps/gatewai/
144
- !apps/gatewai/**
145
- apps/**/node_modules/
146
- apps/**/dist/
147
- apps/**/__pycache__/
148
- apps/**/*.pyc
149
- apps/**/*.db
150
- apps/**/*.db-wal
151
- apps/**/*.db-shm
152
- apps/**/.env
153
- apps/**/.env.*
154
- !apps/**/.env.example
155
- !apps/**/.env.full.example
156
-
157
- # Piccolina — nested app tracked in this monorepo (standalone .git removed).
158
- # Keep marketing packages and deployment secrets out of the tree.
159
- apps/piccolina/piccolina-marketing/
160
- apps/piccolina/piccolina-marketing-plans/
161
- apps/piccolina/secrets/
162
- apps/piccolina/**/secrets/
163
- apps/piccolina/**/*.pem
164
- apps/piccolina/**/*.key
165
- apps/piccolina/**/.venv/
166
- apps/piccolina/**/node_modules/
167
- apps/piccolina/**/__pycache__/
168
- apps/piccolina/**/*.pyc
169
- apps/piccolina/**/*.pbf
170
- apps/piccolina/**/.open-next/
171
- apps/piccolina/**/storage/
172
- apps/piccolina/**/.deploy-host
173
-
174
- # Re-exclude private content under the tiered paths.
175
- # MUST come after the !...docs/** negations above — last match wins.
176
- core/quadkit*/docs/plans/
177
- packages/quadkit*/docs/plans/
178
- core/quadkit*/docs/**/
179
- packages/quadkit*/docs/**/
180
-
181
- # Re-exclude tooling artifacts under the tiered paths
182
- __pycache__/
183
- *.pyc
184
- *.pyo
185
- *.egg-info/
186
- .pytest_cache/
187
- .mypy_cache/
188
- .ruff_cache/
189
- htmlcov/
190
- .coverage
191
- coverage.xml
192
- test.db
193
- *.tmp
194
- *.log
195
- !core/quadkit*/tests/fixtures/test.db
196
- !packages/quadkit*/tests/fixtures/test.db
197
-
198
- # Allow the generated example gifs to be tracked (README hero images).
199
- !core/quadkit*/docs/gifs/
200
- !core/quadkit*/docs/gifs/**
201
- !packages/*/quadkit*/docs/gifs/
202
- !packages/*/quadkit*/docs/gifs/**
203
- examples/*/screenshot.png
204
- !banner*
205
- apps/quadkit-playground/**/node_modules/
206
- apps/quadkit-playground/**/dist/
207
- apps/quadkit-playground/**/__pycache__/
208
- apps/quadkit-playground/**/*.pyc
209
- apps/quadkit-playground/**/*.db
210
- apps/quadkit-playground/**/*.db-wal
211
- apps/quadkit-playground/**/*.db-shm
212
- apps/quadkit-playground/projects/
213
- apps/quadkit-playground/quadkit/
214
- docs/superpowers/