quadkit-cli 0.0.42__tar.gz → 0.0.43__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.
- quadkit_cli-0.0.43/.gitignore +24 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/PKG-INFO +4 -4
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/README.md +3 -3
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/pyproject.toml +1 -1
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/db_commands_data.py +54 -24
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/layout.py +11 -3
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_db.py +49 -5
- quadkit_cli-0.0.42/.gitignore +0 -214
- quadkit_cli-0.0.42/docs/ARCHITECTURE.md +0 -586
- quadkit_cli-0.0.42/docs/COMMANDS.md +0 -258
- quadkit_cli-0.0.42/docs/CONFIGURATION.md +0 -46
- quadkit_cli-0.0.42/docs/GUIDE.md +0 -205
- quadkit_cli-0.0.42/docs/HOWTOS.md +0 -92
- quadkit_cli-0.0.42/docs/PROJECT_LAYOUT.md +0 -256
- quadkit_cli-0.0.42/docs/PUBLIC_PACKAGE_CLI_MATRIX.md +0 -89
- quadkit_cli-0.0.42/docs/QUICKSTART.md +0 -67
- quadkit_cli-0.0.42/docs/TROUBLESHOOTING.md +0 -150
- quadkit_cli-0.0.42/tests/helpers/runner.py +0 -153
- quadkit_cli-0.0.42/tests/unit/registry/test_template.py +0 -187
- quadkit_cli-0.0.42/tests/unit/test_add.py +0 -131
- quadkit_cli-0.0.42/tests/unit/test_package_names.py +0 -157
- quadkit_cli-0.0.42/tests/unit/test_public_surface.py +0 -85
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/LICENSE +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/NOTICE +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/example.yaml +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/assembly/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/assembly/assembler.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/add.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/config.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/config_utils.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/contrib.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/db.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/db_bootstrap.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/db_commands_migrations.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/db_commands_ops.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/dev.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/events.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/gen.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/init.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/inspect.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/meta.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/new.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/project.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/py.typed +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/run.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/shell.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/commands/system.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/config.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/constants.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/contributors/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/contributors/base.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/contributors/core.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/contributors/discovery.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/contributors/registry.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/contributors/runtime.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/decorators.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/di/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/di/provider.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/di/sub_providers/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/di/sub_providers/contributor.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/events.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/exceptions.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/generators/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/generators/base.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/generators/field_parser.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/generators/provider.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/generators/test.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/hooks.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/lib/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/lib/config_loader.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/lib/entry_point.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/lib/naming.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/lib/templates.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/module.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/output/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/output/manager.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/package_names.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/protocols.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/py.typed +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/_lazy_exports.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/backend_base.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/command.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/completion.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/config.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/database.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/database_backends.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/environment.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/formatter.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/generator.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/health.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/health_checks/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/health_checks/base.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/health_checks/deps.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/health_checks/project.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/health_checks/providers.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/health_checks/python_env.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/health_checks/tools.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/health_checks/vcs_docker.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/hook.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/inspect.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/migration.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/presets.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/provider.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/provider_catalog.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/provider_registry.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/secrets.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/serializer.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/server.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/task.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/telemetry.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/template.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/version.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/registry/watcher.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/runtime/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/runtime/context.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/runtime/error_handler.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/runtime/main.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/scaffold/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/scaffold/app_files.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/scaffold/module_files.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/scaffold/render.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/scaffold/specs.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/scaffold/support_files.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/scaffold_package.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/templates/provider.py.jinja2 +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/templates/py.typed +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/templates/test_unit.py.jinja2 +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/cli/types.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/src/quadkit/py.typed +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/conftest.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/integration/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/integration/test_cli_lifecycle.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/test_package_structure_p1.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/_test_cli_contribution_system_support.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/commands/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/commands/test_config.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/commands/test_config_happy_paths.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/commands/test_contrib.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/commands/test_events_cmd.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/commands/test_inspect.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/commands/test_meta.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/commands/test_run.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/commands/test_shell.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/commands/test_system.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/di/test_config_alignment.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/lib/test_templates.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/__init__.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_completion.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_database.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_environment.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_formatter.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_health.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_hook.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_inspect_registry.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_migration.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_presets.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_secrets.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_serializer.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_task.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_telemetry.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_version.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/registry/test_watcher.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_base_contributor.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_cli_constants.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_cli_context.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_cli_contribution_system.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_cli_contribution_system__testclicontributorsubprovider.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_cli_errors.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_cli_exceptions.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_cli_import_isolation.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_cli_module.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_cli_types.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_config_async.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_config_loader.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_config_save.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_config_validate.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_contributor_registry.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_contributor_runtime.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_core_contributor.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_decorators.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_dev_command.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_error_handler.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_events.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_exception_handling.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_field_parser.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_gen.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_gen_controller.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_gen_provider.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_generator_base.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_generator_option_help.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_generator_registry.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_generators_contract.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_health_checks.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_hooks.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_init_command.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_layout.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_main.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_new.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_output.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_output_json.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_project.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_project_layout.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_provider_registry.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_round40_hardening.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_run_detection.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_scaffold_and_validators.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/tests/unit/test_server_registry.py +0 -0
- {quadkit_cli-0.0.42 → quadkit_cli-0.0.43}/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.
|
|
3
|
+
Version: 0.0.43
|
|
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.
|
|
170
|
+
Version `0.0.43` 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.
|
|
173
|
-
(`>=0.0.
|
|
172
|
+
1.0 — pin an exact version (`quadkit-cli==0.0.43`) or a tight range
|
|
173
|
+
(`>=0.0.43,<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.
|
|
114
|
+
Version `0.0.43` 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.
|
|
117
|
-
(`>=0.0.
|
|
116
|
+
1.0 — pin an exact version (`quadkit-cli==0.0.43`) or a tight range
|
|
117
|
+
(`>=0.0.43,<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.
|
|
9
|
+
version = "0.0.43"
|
|
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
|
|
27
|
-
"""
|
|
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 — ``
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
2.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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)
|
|
41
|
-
package its modules belong to
|
|
42
|
-
|
|
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
|
-
|
|
49
|
-
|
|
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
|
-
|
|
139
|
-
|
|
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,
|
|
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
|
-
|
|
220
|
-
if
|
|
221
|
-
for
|
|
222
|
-
|
|
223
|
-
out, manager.provider, seed_file,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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>/
|
|
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" / "
|
|
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.
|
|
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/
|
|
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.
|
|
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
|
+
|
quadkit_cli-0.0.42/.gitignore
DELETED
|
@@ -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/
|