instant-python 0.24.2__tar.gz → 0.26.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- instant_python-0.26.0/.agents/agents/convention_keeper.md +50 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/agents/judge.md +4 -4
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/agents/tdd_craftsman.md +2 -2
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/mutation_testing/SKILL.md +6 -6
- instant_python-0.26.0/.github/actions/setup_environment/action.yml +26 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.github/workflows/ci.yml +18 -18
- {instant_python-0.24.2 → instant_python-0.26.0}/.github/workflows/pages.yml +4 -4
- {instant_python-0.24.2 → instant_python-0.26.0}/.github/workflows/release.yml +59 -4
- {instant_python-0.24.2 → instant_python-0.26.0}/.pre-commit-config.yaml +4 -2
- {instant_python-0.24.2 → instant_python-0.26.0}/AGENTS.md +11 -11
- {instant_python-0.24.2 → instant_python-0.26.0}/CHANGELOG.md +92 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/PKG-INFO +16 -2
- {instant_python-0.24.2 → instant_python-0.26.0}/README.md +14 -0
- instant_python-0.26.0/Taskfile.yml +183 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/development/contributing.md +23 -23
- instant_python-0.26.0/docs/documentation/getting_started/installation.md +83 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/home/index.md +14 -0
- instant_python-0.26.0/instant_python/__init__.py +1 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/application/config_generator.py +4 -6
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/delivery/cli.py +2 -1
- instant_python-0.26.0/instant_python/config/domain/answers_review_formatter.py +7 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/domain/question_wizard.py +3 -1
- instant_python-0.26.0/instant_python/config/infra/question_wizard/console_answers_review_formatter.py +34 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/infra/question_wizard/questionary_console_wizard.py +20 -3
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/renderer/jinja_environment.py +2 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/domain/config_schema.py +5 -1
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/domain/general_config.py +3 -5
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/LICENSE +3 -3
- instant_python-0.26.0/mise.toml +4 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/pyproject.toml +6 -1
- {instant_python-0.24.2 → instant_python-0.26.0}/schemas/ipy-schema.json +3 -7
- instant_python-0.26.0/scripts/install.ps1 +81 -0
- instant_python-0.26.0/scripts/install.sh +87 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/config/application/test_config_generator.py +14 -1
- {instant_python-0.24.2 → instant_python-0.26.0}/test/config/infra/question_wizard/fake_questionary.py +5 -0
- instant_python-0.26.0/test/config/infra/question_wizard/step/test_dependencies_step.py +151 -0
- instant_python-0.26.0/test/config/infra/question_wizard/step/test_git_step.py +38 -0
- instant_python-0.26.0/test/config/infra/question_wizard/step/test_template_step.py +62 -0
- instant_python-0.26.0/test/config/infra/question_wizard/test_console_answer_review_formatter.py +182 -0
- instant_python-0.26.0/test/config/infra/question_wizard/test_questionary_console_wizard.py +133 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/infra/renderer/test_jinja_environment.py +3 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/shared/domain/test_config_schema.py +22 -0
- instant_python-0.26.0/test/shared/persistence/__init__.py +0 -0
- instant_python-0.26.0/uv.lock +2936 -0
- instant_python-0.24.2/.agents/agents/convention_keeper.md +0 -55
- instant_python-0.24.2/.github/actions/python_setup/action.yml +0 -23
- instant_python-0.24.2/.python-version +0 -1
- instant_python-0.24.2/.tool-versions +0 -1
- instant_python-0.24.2/docs/documentation/getting_started/installation.md +0 -40
- instant_python-0.24.2/instant_python/__init__.py +0 -1
- instant_python-0.24.2/makefile +0 -151
- instant_python-0.24.2/test/config/infra/question_wizard/test_questionary_console_wizard.py +0 -80
- instant_python-0.24.2/uv.lock +0 -2722
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/agents/leader.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/agents/spec_partner.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/commands/commit.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/commands/technical_debt_review.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/code_review/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/complexity_review/REFERENCE.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/complexity_review/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/hamburger_method/REFERENCE.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/hamburger_method/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/micro_steps_coach/REFERENCE.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/micro_steps_coach/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/security_review/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/story_splitting/REFERENCE.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/story_splitting/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/test_desiderata/REFERENCE.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/test_desiderata/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.agents/skills/xp_refactor/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.github/FUNDING.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.github/dependabot.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.github/pull_request_template.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/.gitignore +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/CITATION.cff +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/LICENSE +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/SECURITY.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/codeql-config.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/agents/convention_guidelines.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/agents/leader_workflow.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/agents/spec_guidelines.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/changelog/.components/changelog_header.md.j2 +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/changelog/.components/changelog_init.md.j2 +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/changelog/.components/changelog_update.md.j2 +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/changelog/.components/changes.md.j2 +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/changelog/.components/first_release.md.j2 +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/changelog/.components/macros.md.j2 +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/changelog/.components/versioned_changes.md.j2 +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/changelog/.release_notes.md.j2 +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/changelog/CHANGELOG.md.j2 +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/conventions/testing/assertion-helper-methods.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/conventions/testing/common-test-variables-in-setup-method.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/conventions/testing/tdd-outside-in.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/assets/favicon.svg +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/assets/logo.svg +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/development/releases.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/development/security.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/downloads_macro.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/getting_started/first_steps.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/getting_started/privacy_and_metrics.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/guide/command_config.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/guide/command_init.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/guide/custom_projects.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/guide/default_features.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/guide/index.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/documentation/guide/template_reference.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/specs/0001-metrics-middleware-refactor.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/specs/0002-new-tool-management-system.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/specs/0003-interactive-configuration-wizard-ux.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/docs/specs/technical-debt-review.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/cli/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/cli/cli.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/cli/instant_python_typer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/application/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/delivery/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/domain/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/infra/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/infra/question_wizard/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/infra/question_wizard/step/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/infra/question_wizard/step/dependencies_step.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/infra/question_wizard/step/general_step.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/infra/question_wizard/step/git_step.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/infra/question_wizard/step/questionary.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/infra/question_wizard/step/steps.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/config/infra/question_wizard/step/template_step.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/application/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/application/project_initializer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/delivery/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/delivery/cli.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/domain/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/domain/env_manager.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/domain/node.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/domain/project_formatter.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/domain/project_renderer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/domain/project_structure.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/domain/project_writer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/domain/version_control_configurer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/env_manager/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/env_manager/env_manager_factory.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/env_manager/pdm_env_manager.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/env_manager/system_console.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/env_manager/uv_env_manager.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/formatter/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/formatter/ruff_project_formatter.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/renderer/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/renderer/jinja_project_renderer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/version_control/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/version_control/git_configurer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/writer/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/initialize/infra/writer/file_system_project_writer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/application/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/application/config_snapshot_creator.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/application/usage_metrics_sender.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/delivery/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/delivery/metrics_middleware.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/domain/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/domain/config_snapshot.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/domain/error_metrics_event.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/domain/metrics_reporter.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/domain/usage_metrics_data.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/infra/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/infra/post_hog_config.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/infra/post_hog_metrics_reporter.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/metrics/infra/user_identity_manager.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/application_error.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/domain/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/domain/config_repository.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/domain/dependency_config.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/domain/git_config.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/domain/template_config.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/infra/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/infra/persistence/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/infra/persistence/yaml_config_repository.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/supported_built_in_features.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/supported_licenses.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/supported_managers.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/supported_python_versions.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/shared/supported_templates.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/.gitignore +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/.pre-commit-config.yaml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/.python-version +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/CITATION.cff +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/README.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/SECURITY.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/AGENTS.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/agents/convention_keeper.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/agents/judge.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/agents/leader.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/agents/spec_partner.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/agents/tdd_craftsman.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/commands/commit.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/commands/technical_debt_review.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/convention_guidelines.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/leader_workflow.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/code_review/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/complexity_review/REFERENCE.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/complexity_review/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/hamburger_method/REFERENCE.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/hamburger_method/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/micro_steps_coach/REFERENCE.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/micro_steps_coach/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/mutation_testing/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/security_review/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/story_splitting/REFERENCE.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/story_splitting/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/test_desiderata/REFERENCE.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/test_desiderata/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/skills/xp_refactor/SKILL.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/spec_guidelines.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/tasks.json +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/agents/tdd_outside_in.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/domain_event.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_serializer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/event_aggregate.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/event_bus.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/exchange_type.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/mock_event_bus.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_configurer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_connection.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_consumer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_event_bus.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_queue_formatter.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_settings.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/exceptions/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/exceptions/base_error.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/exceptions/domain_error.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/exceptions/required_value_error.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/fastapi/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/fastapi/application.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/fastapi/error_handlers.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/fastapi/error_response.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/fastapi/fastapi_log_middleware.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/fastapi/lifespan.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/fastapi/success_response.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/github/action.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/github/bug_report.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/github/ci.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/github/dependabot.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/github/feature_request.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/github/pages.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/github/release.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/logger/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/logger/file_logger.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/logger/file_rotating_handler.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/logger/json_formatter.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/mkdocs.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/mypy.ini +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/alembic_migrator.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/async/README.md +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/async/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/async/alembic.ini +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/async/async_engine_fixture.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/async/async_session.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/async/env.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/async/models_metadata.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/async/postgres_settings.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/async/script.py.mako +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/async/sqlalchemy_repository.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/base.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/synchronous/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/synchronous/session_maker.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/pyproject.toml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/scripts/add_dependency.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/scripts/create_aggregate.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/scripts/insert_template.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/scripts/integration.sh +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/scripts/local_setup.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/scripts/makefile +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/scripts/post-merge.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/scripts/pre-commit.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/scripts/pre-push.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/scripts/remove_dependency.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/boilerplate/scripts/unit.sh +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/agents/agents.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/clean_architecture/layers/application.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/clean_architecture/layers/delivery.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/clean_architecture/layers/domain.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/clean_architecture/layers/infra.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/clean_architecture/layers/test_application.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/clean_architecture/layers/test_delivery.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/clean_architecture/layers/test_domain.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/clean_architecture/layers/test_infra.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/clean_architecture/main_structure.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/clean_architecture/source.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/clean_architecture/test.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/config_files/gitignore.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/config_files/mypy.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/config_files/pyproject.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/config_files/python_version.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/documentation/citation.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/documentation/documentation.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/documentation/license.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/documentation/readme.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/documentation/security.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/domain_driven_design/layers/bounded_context.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/domain_driven_design/layers/delivery.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/domain_driven_design/layers/shared.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/domain_driven_design/layers/shared_domain.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/domain_driven_design/layers/shared_infra.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/domain_driven_design/layers/test_shared.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/domain_driven_design/layers/test_shared_delivery.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/domain_driven_design/layers/test_shared_domain.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/domain_driven_design/layers/test_shared_infra.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/domain_driven_design/main_structure.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/domain_driven_design/source.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/domain_driven_design/test.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/errors.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/events/event_bus_domain.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/events/event_bus_infra.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/events/mock_event_bus.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/fastapi/fastapi_app.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/fastapi/fastapi_domain.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/fastapi/fastapi_infra.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/github/github_action.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/github/github_issues_template.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/github/makefile.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/github/precommit_hook.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/logger.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/macros.j2 +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/persistence/alembic_migrator.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/persistence/async_alembic.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/persistence/async_engine_conftest.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/persistence/async_sqlalchemy.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/persistence/persistence.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/persistence/synchronous_sqlalchemy.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/standard_project/layers/source_features.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/standard_project/layers/test_event_bus.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/standard_project/layers/test_features.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/standard_project/main_structure.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/standard_project/source.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/instant_python/templates/project_structure/standard_project/test.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/mkdocs.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/mypy.ini +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/opencode.json +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/schemas/main-structure-schema.json +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/cli/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/cli/test_version_command.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/config/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/config/application/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/config/infra/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/config/infra/question_wizard/__init__.py +0 -0
- {instant_python-0.24.2/test/initialize → instant_python-0.26.0/test/config/infra/question_wizard/step}/__init__.py +0 -0
- {instant_python-0.24.2/test/initialize/application → instant_python-0.26.0/test/initialize}/__init__.py +0 -0
- {instant_python-0.24.2/test/initialize/delivery → instant_python-0.26.0/test/initialize/application}/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/application/test_project_initializer.py +0 -0
- {instant_python-0.24.2/test/initialize/domain → instant_python-0.26.0/test/initialize/delivery}/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/delivery/approvaltests_config.json +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/delivery/approved_files/TestInitCli.test_should_initialize_project_with_custom_project_structure.approved.txt +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/delivery/approved_files/TestInitCli.test_should_initialize_project_with_general_section_combinations.approved.txt +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/delivery/approved_files/TestInitCli.test_should_initialize_project_with_git_section_combinations.approved.txt +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/delivery/approved_files/TestInitCli.test_should_initialize_project_with_predefined_dependencies_and_different_managers.approved.txt +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/delivery/approved_files/TestInitCli.test_should_initialize_project_with_template_section_combinations.approved.txt +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/delivery/test_init_cli.py +0 -0
- {instant_python-0.24.2/test/initialize/domain/mothers → instant_python-0.26.0/test/initialize/domain}/__init__.py +0 -0
- {instant_python-0.24.2/test/initialize/infra → instant_python-0.26.0/test/initialize/domain/mothers}/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/domain/mothers/node_mother.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/domain/mothers/project_structure_mother.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/domain/test_node.py +0 -0
- {instant_python-0.24.2/test/initialize/infra/env_manager → instant_python-0.26.0/test/initialize/infra}/__init__.py +0 -0
- {instant_python-0.24.2/test/initialize/infra/env_manager/mother → instant_python-0.26.0/test/initialize/infra/env_manager}/__init__.py +0 -0
- {instant_python-0.24.2/test/initialize/infra/formatter → instant_python-0.26.0/test/initialize/infra/env_manager/mother}/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/infra/env_manager/mother/command_execution_result_mother.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/infra/env_manager/test_pdm_env_manager.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/infra/env_manager/test_system_console.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/infra/env_manager/test_uv_env_manager.py +0 -0
- {instant_python-0.24.2/test/initialize/infra/renderer → instant_python-0.26.0/test/initialize/infra/formatter}/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/infra/formatter/test_ruff_project_formatter.py +0 -0
- {instant_python-0.24.2/test/initialize/infra/version_control → instant_python-0.26.0/test/initialize/infra/renderer}/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/infra/renderer/test_jinja_project_renderer.py +0 -0
- {instant_python-0.24.2/test/initialize/infra/writer → instant_python-0.26.0/test/initialize/infra/version_control}/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/infra/version_control/test_git_configurer.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/infra/writer/TestFileSystemProjectWriter.test_should_create_file_in_file_system.approved.txt +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/infra/writer/TestFileSystemProjectWriter.test_should_create_python_module_in_file_system.approved.txt +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/infra/writer/TestFileSystemProjectWriter.test_should_create_standard_directory_in_file_system.approved.txt +0 -0
- {instant_python-0.24.2/test/metrics → instant_python-0.26.0/test/initialize/infra/writer}/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/initialize/infra/writer/test_file_system_project_writer.py +0 -0
- {instant_python-0.24.2/test/metrics/application → instant_python-0.26.0/test/metrics}/__init__.py +0 -0
- {instant_python-0.24.2/test/metrics/domain → instant_python-0.26.0/test/metrics/application}/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/metrics/application/test_config_snapshot_creator.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/metrics/application/test_usage_metrics_sender.py +0 -0
- {instant_python-0.24.2/test/metrics/infra → instant_python-0.26.0/test/metrics/domain}/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/metrics/domain/config_snapshot_mother.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/metrics/domain/error_metrics_event_mother.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/metrics/domain/usage_metrics_event_mother.py +0 -0
- {instant_python-0.24.2/test/shared → instant_python-0.26.0/test/metrics/infra}/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/metrics/infra/cassettes/error_posthog_reporter.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/metrics/infra/cassettes/success_posthog_reporter.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/metrics/infra/test_post_hog_config.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/metrics/infra/test_post_hog_metrics_reporter.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/metrics/infra/test_user_identity_manager.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/random_generator.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/resources/base_ipy_config.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/resources/domain_error_template.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/resources/hello_world.j2 +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/resources/main_structure.yml +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/resources/standard_project/main_structure.yml +0 -0
- {instant_python-0.24.2/test/shared/domain → instant_python-0.26.0/test/shared}/__init__.py +0 -0
- {instant_python-0.24.2/test/shared/domain/mothers → instant_python-0.26.0/test/shared/domain}/__init__.py +0 -0
- {instant_python-0.24.2/test/shared/persistence → instant_python-0.26.0/test/shared/domain/mothers}/__init__.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/shared/domain/mothers/config_schema_mother.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/shared/domain/mothers/dependency_config_mother.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/shared/domain/mothers/general_config_mother.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/shared/domain/mothers/git_config_mother.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/shared/domain/mothers/template_config_mother.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/shared/domain/test_dependency_config.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/shared/domain/test_general_config.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/shared/domain/test_git_config.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/shared/domain/test_template_configuration.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/shared/persistence/test_yaml_config_repository.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/test/utils.py +0 -0
- {instant_python-0.24.2 → instant_python-0.26.0}/tox.ini +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: convention_keeper
|
|
3
|
+
description: Captures learnings from completed features and updates or creates convention documentation. Runs after judge approval before release.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Convention Keeper
|
|
7
|
+
|
|
8
|
+
Your job is to distill learnings from a completed feature into reusable conventions. After the
|
|
9
|
+
`judge` has approved and mutation testing has passed, you review what happened during the
|
|
10
|
+
feature and update `docs/conventions/` with any new patterns, decisions, or practices worth
|
|
11
|
+
documenting.
|
|
12
|
+
|
|
13
|
+
You do not write code, tests, or spec files. You maintain the convention library.
|
|
14
|
+
|
|
15
|
+
## Protocol
|
|
16
|
+
|
|
17
|
+
1. Read `AGENTS.md` (Repository knowledge map), `docs/agents/convention_guidelines.md` and the spec file, `docs/progress/tdd_<name>.md`, and `docs/progress/judge_<name>.md` for the completed feature.
|
|
18
|
+
2. **Search the codebase for recurring, undocumented patterns.** A convention is a general pattern applied across the code, so the current feature is only a hint. Grep the wider codebase (`instant_python/`, `test/`) for the candidate pattern — repeated structures, helpers, naming schemes, arrangements — beyond the feature that surfaced it. Document only patterns that recur in more than one place or clearly generalize beyond the current feature.
|
|
19
|
+
3. For each candidate, check if a relevant convention doc already exists in `docs/conventions/`.
|
|
20
|
+
4. If the doc exists, extend or improve it with the new insight.
|
|
21
|
+
5. If no doc exists, create a new one following the template in `docs/agents/convention_guidelines.md`.
|
|
22
|
+
6. **Ask the human** to review and approve the new or updated convention files before finalizing.
|
|
23
|
+
7. **Update the knowledge map**: After the human approves, add the new convention path to the repository knowledge map in `AGENTS.md` (the `docs/conventions/` tree). The knowledge map is the single discovery mechanism: agents read `AGENTS.md` to find conventions. NEVER edit any file under `.agents/agents/` — adding a convention must not change any subagent prompt.
|
|
24
|
+
|
|
25
|
+
## Hard rules
|
|
26
|
+
|
|
27
|
+
- NEVER edit `instant_python/`, `test/`, `docs/specs/`, or any file under `.agents/agents/`.
|
|
28
|
+
- NEVER change the feature status in Linear.
|
|
29
|
+
- NEVER write code or tests.
|
|
30
|
+
- Each convention goes in its own standalone file, placed in the right area subfolder of `docs/conventions/` per the guideline. No bundling.
|
|
31
|
+
- Conventions record general concepts and decisions about patterns (in tests, code, architecture, workflow) that apply across the code — never concrete cases tied to a specific feature, incident, or implementation detail. No feature names, no "during <issue>" stories, no narration of one particular implementation. Before documenting, verify the pattern recurs or generalizes beyond the feature that surfaced it; a practice applied once is not a convention.
|
|
32
|
+
- Illustrate patterns with generic examples: use neutral, invented names (e.g. `a_name`, `a_value`, `_answers_for_a_scenario()`) — never the identifiers, constants, helper names, or file specifics of the feature being captured. Real files appear only in the "Real world examples" section as pointers.
|
|
33
|
+
- When a convention doc already has a "Real world examples" section with a good set of pointers, do not add more examples unless they are truly helpful (e.g., they illustrate a genuinely new aspect). Avoid padding an already-complete examples section.
|
|
34
|
+
- Always ask the human to approve new convention files.
|
|
35
|
+
|
|
36
|
+
## Communication
|
|
37
|
+
|
|
38
|
+
Your final output is **a single line**:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
conventions updated -> docs/conventions/<area>/<name>.md
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
or if nothing new was found:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
no new conventions
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Never return file contents in chat.
|
|
@@ -47,13 +47,13 @@ You have two gates: **review** (coverage, TDD discipline, code quality) and **mu
|
|
|
47
47
|
- Evaluate code quality, simplicity and maintainability with **code_review** skill, and alignment with
|
|
48
48
|
`AGENTS.md`'s Core Principles and Code Standards.
|
|
49
49
|
- Evaluate security concerns using the **security_review** skill
|
|
50
|
-
5. Run `
|
|
50
|
+
5. Run `task test`. Must be green.
|
|
51
51
|
6. **If review passes**, run mutation testing:
|
|
52
52
|
- Use the **mutation_testing** skill and `mutmut` as the mutation tool.
|
|
53
|
-
- The threshold is **100% on new/touched lines**. Scope the run to the feature with the dotted module pattern, never a filesystem path: `
|
|
53
|
+
- The threshold is **100% on new/touched lines**. Scope the run to the feature with the dotted module pattern, never a filesystem path: `task mutate MUTATE_PATH="instant_python.<feature>.*"`. In mutmut 3.7 the positional arg filters mutant names, so a directory path like `instant_python/<feature>/` matches nothing and silently mutates the whole project.
|
|
54
54
|
- When the suite contains a pre-existing red test, mutmut aborts. Keep the run scoped and deterministic.
|
|
55
55
|
- `len()` calls are never mutated and decorated functions (e.g. `@property`) are skipped; do not demand mutants on those lines — compensate with behavioral tests that exercise the public output.
|
|
56
|
-
- Review `
|
|
56
|
+
- Review `task mutate` output and `mutmut show <id>` for surviving mutants.
|
|
57
57
|
- For each surviving mutant, document: file, line, mutation applied, and what test is missing to kill it.
|
|
58
58
|
7. Emit verdict.
|
|
59
59
|
|
|
@@ -102,7 +102,7 @@ CHANGES_REQUESTED -> docs/progress/judge_<name>.md
|
|
|
102
102
|
|
|
103
103
|
- NEVER write or edit production code or tests in `instant_python/` or `test/` — you review,
|
|
104
104
|
you don't implement.
|
|
105
|
-
- Never approve with red tests or `
|
|
105
|
+
- Never approve with red tests or `task test` failing.
|
|
106
106
|
- Never approve if any requirement has no test coverage.
|
|
107
107
|
- Never approve production code that no test demands.
|
|
108
108
|
- Never edit the code. You say what fails, you do not fix it.
|
|
@@ -49,7 +49,7 @@ REFACTOR → clean up with the bar green: names, duplication, short functions
|
|
|
49
49
|
2. Record in `docs/progress/current.md`: `Feature in progress: <name>` and the list of requirements `R1...R<n>` you will cover.
|
|
50
50
|
3. Before starting the TDD cycle, check if the scenario requires a risky change (DB schema, API contract, service replacement). If so, use the **micro_steps_coach** skill to plan the expand-contract pattern first — then proceed with TDD.
|
|
51
51
|
4. **For each requirement in order**, execute one or more Red-Green-Refactor cycles using Outside-In TDD:
|
|
52
|
-
a. **RED** — write a test in `test/` that encodes the functional requirement and verify it **fails** (`
|
|
52
|
+
a. **RED** — write a test in `test/` that encodes the functional requirement and verify it **fails** (`task test`). Apply the **test_desiderata** skill to ensure the test is isolated, fast, specific, and behavioral. A test that passes on the first try proves nothing — adjust it or be suspicious.
|
|
53
53
|
b. **GREEN** — the minimum implementation in `instant_python/` that makes it pass.
|
|
54
54
|
c. **REFACTOR** — with the bar green, apply the **xp_refactor** skill to eliminate duplication, improve naming, and simplify. Run tests again after every change.
|
|
55
55
|
d. Append the cycle to `docs/progress/tdd_<name>.md` (which `R<n>`, which test, what minimum change).
|
|
@@ -57,7 +57,7 @@ REFACTOR → clean up with the bar green: names, duplication, short functions
|
|
|
57
57
|
- **Happy path and critical error scenarios** → start with a delivery acceptance test (TestClient, full stack). Then drive the application layer, then domain and infra.
|
|
58
58
|
- **All other scenarios (edge cases, validation errors, etc.)** → write unit tests at the delivery layer (use case mocked) or application layer (ports mocked) as appropriate. Do not write acceptance tests for these.
|
|
59
59
|
6. **Traceability**: every `R<n>` scenario must be covered by at least one concrete test. Write the `R<n> → test` map in `docs/progress/tdd_<name>.md`.
|
|
60
|
-
7. Run `
|
|
60
|
+
7. Run `task test`. Green end to end.
|
|
61
61
|
8. **Do not mark `done` yourself.** The `judge` must review first.
|
|
62
62
|
9. If the `leader` reinvokes you after the judge has approved and mutation testing has passed: change the Linear status to `Release` and move the summary to `docs/progress/history.md`.
|
|
63
63
|
|
|
@@ -46,7 +46,7 @@ TDD Workflow Mutation Testing Validation
|
|
|
46
46
|
## Reviewing a Mutation Results
|
|
47
47
|
|
|
48
48
|
`mutmut` generates and runs the real mutants — there's no need to simulate them by hand. Use
|
|
49
|
-
this process to go from a `
|
|
49
|
+
this process to go from a `task mutate` run to a reject/approve decision:
|
|
50
50
|
|
|
51
51
|
### Step 1: Scope to What Changed
|
|
52
52
|
|
|
@@ -60,7 +60,7 @@ changed are relevant to this review.
|
|
|
60
60
|
|
|
61
61
|
### Step 2: Run and Read Results
|
|
62
62
|
|
|
63
|
-
Run `
|
|
63
|
+
Run `task mutate`, then `uv run mutmut results` for the mutation score and the list of
|
|
64
64
|
survived mutants (see Integration with mutmut below).
|
|
65
65
|
|
|
66
66
|
### Step 3: Classify Each Relevant Survived Mutant
|
|
@@ -171,8 +171,8 @@ if value is None: # Mutating to == None has same effect
|
|
|
171
171
|
### Running mutmut
|
|
172
172
|
|
|
173
173
|
```bash
|
|
174
|
-
# Always through the
|
|
175
|
-
|
|
174
|
+
# Always through the task target — never call mutmut directly
|
|
175
|
+
task mutate
|
|
176
176
|
|
|
177
177
|
# Under the hood, this runs:
|
|
178
178
|
uv run mutmut run
|
|
@@ -185,11 +185,11 @@ on the dotted module path:
|
|
|
185
185
|
uv run mutmut run "instant_python.module_name*"
|
|
186
186
|
```
|
|
187
187
|
|
|
188
|
-
`
|
|
188
|
+
`task mutate` exposes this as the `MUTATE_PATH` var, so you don't have to call
|
|
189
189
|
mutmut directly to scope a run:
|
|
190
190
|
|
|
191
191
|
```bash
|
|
192
|
-
|
|
192
|
+
task mutate MUTATE_PATH="instant_python.module_name*"
|
|
193
193
|
```
|
|
194
194
|
|
|
195
195
|
To derive the pattern from a changed file, drop the `.py` extension and replace `/` with `.`:
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: Setup development environment
|
|
2
|
+
|
|
3
|
+
inputs:
|
|
4
|
+
python-version:
|
|
5
|
+
description: 'Additional Python versions to install for multi-version testing (e.g. the tox matrix). Leave empty to use only the version pinned in mise.toml.'
|
|
6
|
+
required: false
|
|
7
|
+
default: ""
|
|
8
|
+
outputs: {}
|
|
9
|
+
runs:
|
|
10
|
+
using: composite
|
|
11
|
+
steps:
|
|
12
|
+
- name: 🧰 Setup mise
|
|
13
|
+
uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
|
|
14
|
+
with:
|
|
15
|
+
install: true
|
|
16
|
+
cache: true
|
|
17
|
+
|
|
18
|
+
- name: 🐍 Setup additional Python versions
|
|
19
|
+
if: inputs.python-version != ''
|
|
20
|
+
uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ inputs.python-version }}
|
|
23
|
+
|
|
24
|
+
- name: 📦 Install dependencies
|
|
25
|
+
run: task install
|
|
26
|
+
shell: bash
|
|
@@ -18,7 +18,7 @@ jobs:
|
|
|
18
18
|
runs-on: ubuntu-latest
|
|
19
19
|
steps:
|
|
20
20
|
- name: 🛡️ Harden runner
|
|
21
|
-
uses: step-security/harden-runner@
|
|
21
|
+
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
22
22
|
with:
|
|
23
23
|
egress-policy: audit
|
|
24
24
|
|
|
@@ -30,18 +30,18 @@ jobs:
|
|
|
30
30
|
persist-credentials: false
|
|
31
31
|
|
|
32
32
|
- name: 🛠️ Setup environment
|
|
33
|
-
uses: ./.github/actions/
|
|
33
|
+
uses: ./.github/actions/setup_environment
|
|
34
34
|
|
|
35
35
|
- name: 🧐 Check linting
|
|
36
36
|
id: check_lint
|
|
37
|
-
run:
|
|
37
|
+
run: task check-lint
|
|
38
38
|
|
|
39
39
|
format:
|
|
40
40
|
name: format
|
|
41
41
|
runs-on: ubuntu-latest
|
|
42
42
|
steps:
|
|
43
43
|
- name: 🛡️ Harden runner
|
|
44
|
-
uses: step-security/harden-runner@
|
|
44
|
+
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
45
45
|
with:
|
|
46
46
|
egress-policy: audit
|
|
47
47
|
|
|
@@ -53,11 +53,11 @@ jobs:
|
|
|
53
53
|
persist-credentials: false
|
|
54
54
|
|
|
55
55
|
- name: 🛠️ Setup environment
|
|
56
|
-
uses: ./.github/actions/
|
|
56
|
+
uses: ./.github/actions/setup_environment
|
|
57
57
|
|
|
58
58
|
- name: 🧐 Check code format
|
|
59
59
|
id: check_format
|
|
60
|
-
run:
|
|
60
|
+
run: task check-format
|
|
61
61
|
|
|
62
62
|
analyze-code-quality:
|
|
63
63
|
name: analyze-code-quality
|
|
@@ -68,7 +68,7 @@ jobs:
|
|
|
68
68
|
|
|
69
69
|
steps:
|
|
70
70
|
- name: 🛡️ Harden runner
|
|
71
|
-
uses: step-security/harden-runner@
|
|
71
|
+
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
72
72
|
with:
|
|
73
73
|
egress-policy: audit
|
|
74
74
|
|
|
@@ -102,7 +102,7 @@ jobs:
|
|
|
102
102
|
|
|
103
103
|
steps:
|
|
104
104
|
- name: 🛡️ Harden runner
|
|
105
|
-
uses: step-security/harden-runner@
|
|
105
|
+
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
106
106
|
with:
|
|
107
107
|
egress-policy: audit
|
|
108
108
|
|
|
@@ -113,10 +113,10 @@ jobs:
|
|
|
113
113
|
persist-credentials: false
|
|
114
114
|
|
|
115
115
|
- name: 🛠️ Setup environment
|
|
116
|
-
uses: ./.github/actions/
|
|
116
|
+
uses: ./.github/actions/setup_environment
|
|
117
117
|
|
|
118
118
|
- name: 🏃 Run secrets scanner
|
|
119
|
-
run:
|
|
119
|
+
run: task secrets
|
|
120
120
|
|
|
121
121
|
audit:
|
|
122
122
|
name: audit-dependencies
|
|
@@ -126,7 +126,7 @@ jobs:
|
|
|
126
126
|
|
|
127
127
|
steps:
|
|
128
128
|
- name: 🛡️ Harden runner
|
|
129
|
-
uses: step-security/harden-runner@
|
|
129
|
+
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
130
130
|
with:
|
|
131
131
|
egress-policy: audit
|
|
132
132
|
|
|
@@ -137,17 +137,17 @@ jobs:
|
|
|
137
137
|
persist-credentials: false
|
|
138
138
|
|
|
139
139
|
- name: 🛠️ Setup environment
|
|
140
|
-
uses: ./.github/actions/
|
|
140
|
+
uses: ./.github/actions/setup_environment
|
|
141
141
|
|
|
142
142
|
- name: 🏃 Run audit
|
|
143
|
-
run:
|
|
143
|
+
run: task audit
|
|
144
144
|
|
|
145
145
|
test:
|
|
146
146
|
name: test
|
|
147
147
|
runs-on: ubuntu-latest
|
|
148
148
|
steps:
|
|
149
149
|
- name: 🛡️ Harden runner
|
|
150
|
-
uses: step-security/harden-runner@
|
|
150
|
+
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
151
151
|
with:
|
|
152
152
|
egress-policy: audit
|
|
153
153
|
|
|
@@ -158,7 +158,7 @@ jobs:
|
|
|
158
158
|
persist-credentials: false
|
|
159
159
|
|
|
160
160
|
- name: 🛠️ Setup environment
|
|
161
|
-
uses: ./.github/actions/
|
|
161
|
+
uses: ./.github/actions/setup_environment
|
|
162
162
|
|
|
163
163
|
- name: 📦 Install test dependencies
|
|
164
164
|
run: uv pip install pytest pytest-cov
|
|
@@ -180,7 +180,7 @@ jobs:
|
|
|
180
180
|
runs-on: ubuntu-latest
|
|
181
181
|
steps:
|
|
182
182
|
- name: 🛡️ Harden runner
|
|
183
|
-
uses: step-security/harden-runner@
|
|
183
|
+
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
184
184
|
with:
|
|
185
185
|
egress-policy: audit
|
|
186
186
|
|
|
@@ -191,7 +191,7 @@ jobs:
|
|
|
191
191
|
persist-credentials: false
|
|
192
192
|
|
|
193
193
|
- name: 🛠️ Setup environment
|
|
194
|
-
uses: ./.github/actions/
|
|
194
|
+
uses: ./.github/actions/setup_environment
|
|
195
195
|
with:
|
|
196
196
|
python-version: |
|
|
197
197
|
3.10
|
|
@@ -200,4 +200,4 @@ jobs:
|
|
|
200
200
|
3.13
|
|
201
201
|
|
|
202
202
|
- name: 🏃 Run tox
|
|
203
|
-
run:
|
|
203
|
+
run: task tox
|
|
@@ -18,7 +18,7 @@ jobs:
|
|
|
18
18
|
|
|
19
19
|
steps:
|
|
20
20
|
- name: 🛡️ Harden runner
|
|
21
|
-
uses: step-security/harden-runner@
|
|
21
|
+
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
22
22
|
with:
|
|
23
23
|
egress-policy: audit
|
|
24
24
|
|
|
@@ -29,7 +29,7 @@ jobs:
|
|
|
29
29
|
persist-credentials: false
|
|
30
30
|
|
|
31
31
|
- name: 🛠️ Setup environment
|
|
32
|
-
uses: ./.github/actions/
|
|
32
|
+
uses: ./.github/actions/setup_environment
|
|
33
33
|
|
|
34
34
|
- name: 📖 Build documentation
|
|
35
35
|
run: uv run mkdocs build
|
|
@@ -71,10 +71,10 @@ jobs:
|
|
|
71
71
|
|
|
72
72
|
steps:
|
|
73
73
|
- name: 🛡️ Harden runner
|
|
74
|
-
uses: step-security/harden-runner@
|
|
74
|
+
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
75
75
|
with:
|
|
76
76
|
egress-policy: audit
|
|
77
77
|
|
|
78
78
|
- name: 🚀 Deploy to GitHub Pages
|
|
79
79
|
id: deployment
|
|
80
|
-
uses: actions/deploy-pages@
|
|
80
|
+
uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5
|
|
@@ -17,7 +17,7 @@ jobs:
|
|
|
17
17
|
|
|
18
18
|
steps:
|
|
19
19
|
- name: 🛡️ Harden runner
|
|
20
|
-
uses: step-security/harden-runner@
|
|
20
|
+
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
21
21
|
with:
|
|
22
22
|
egress-policy: audit
|
|
23
23
|
|
|
@@ -56,7 +56,7 @@ jobs:
|
|
|
56
56
|
|
|
57
57
|
steps:
|
|
58
58
|
- name: 🛡️ Harden runner
|
|
59
|
-
uses: step-security/harden-runner@
|
|
59
|
+
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
60
60
|
with:
|
|
61
61
|
egress-policy: audit
|
|
62
62
|
|
|
@@ -68,10 +68,65 @@ jobs:
|
|
|
68
68
|
ref: refs/tags/${{ needs.release.outputs.tag }}
|
|
69
69
|
|
|
70
70
|
- name: 🛠️ Setup environment
|
|
71
|
-
uses: ./.github/actions/
|
|
71
|
+
uses: ./.github/actions/setup_environment
|
|
72
72
|
|
|
73
73
|
- name: 🏃 Build package
|
|
74
|
-
run:
|
|
74
|
+
run: task build
|
|
75
75
|
|
|
76
76
|
- name: 🚀 Publish
|
|
77
77
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
78
|
+
|
|
79
|
+
build-binaries:
|
|
80
|
+
name: Build binary (${{ matrix.target }})
|
|
81
|
+
needs:
|
|
82
|
+
- release
|
|
83
|
+
if: needs.release.outputs.released == 'true' || github.event_name == 'release'
|
|
84
|
+
strategy:
|
|
85
|
+
matrix:
|
|
86
|
+
include:
|
|
87
|
+
- runner: macos-14
|
|
88
|
+
target: aarch64-apple-darwin
|
|
89
|
+
ext: ""
|
|
90
|
+
- runner: ubuntu-latest
|
|
91
|
+
target: x86_64-unknown-linux-gnu
|
|
92
|
+
ext: ""
|
|
93
|
+
- runner: ubuntu-24.04-arm
|
|
94
|
+
target: aarch64-unknown-linux-gnu
|
|
95
|
+
ext: ""
|
|
96
|
+
- runner: windows-latest
|
|
97
|
+
target: x86_64-pc-windows-msvc
|
|
98
|
+
ext: ".exe"
|
|
99
|
+
runs-on: ${{ matrix.runner }}
|
|
100
|
+
permissions:
|
|
101
|
+
contents: write
|
|
102
|
+
|
|
103
|
+
steps:
|
|
104
|
+
- name: 🛡️ Harden runner
|
|
105
|
+
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
106
|
+
with:
|
|
107
|
+
egress-policy: audit
|
|
108
|
+
|
|
109
|
+
- name: 📥 Checkout the repository
|
|
110
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
111
|
+
with:
|
|
112
|
+
fetch-depth: 0
|
|
113
|
+
persist-credentials: false
|
|
114
|
+
ref: refs/tags/${{ needs.release.outputs.tag }}
|
|
115
|
+
|
|
116
|
+
- name: 🦀 Setup Rust toolchain
|
|
117
|
+
uses: dtolnay/rust-toolchain@6bed0761d98439e5a578e2877258200ad565ba87 # stable
|
|
118
|
+
with:
|
|
119
|
+
targets: ${{ matrix.target }}
|
|
120
|
+
|
|
121
|
+
- name: 🛠️ Setup environment
|
|
122
|
+
uses: ./.github/actions/setup_environment
|
|
123
|
+
|
|
124
|
+
- name: 🏃 Build binary
|
|
125
|
+
env:
|
|
126
|
+
CARGO_BUILD_TARGET: ${{ matrix.target }}
|
|
127
|
+
run: uvx hatch build -t binary
|
|
128
|
+
|
|
129
|
+
- name: 📤 Upload release asset
|
|
130
|
+
env:
|
|
131
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
132
|
+
run: gh release upload ${{ needs.release.outputs.tag }} dist/app/ipy-${{ matrix.target }}${{ matrix.ext }} --clobber
|
|
@@ -60,14 +60,16 @@ repos:
|
|
|
60
60
|
hooks:
|
|
61
61
|
- id: lint
|
|
62
62
|
name: 🧹 Code Linter
|
|
63
|
-
entry:
|
|
63
|
+
entry: task lint
|
|
64
64
|
language: system
|
|
65
|
+
pass_filenames: false
|
|
65
66
|
stages:
|
|
66
67
|
- pre-push
|
|
67
68
|
|
|
68
69
|
- id: format
|
|
69
70
|
name: 🎨 Code Formatter
|
|
70
|
-
entry:
|
|
71
|
+
entry: task format
|
|
71
72
|
language: system
|
|
73
|
+
pass_filenames: false
|
|
72
74
|
stages:
|
|
73
75
|
- pre-push
|
|
@@ -111,21 +111,21 @@ Task management lives in the Linear project, not in a JSON file: the feature sta
|
|
|
111
111
|
|
|
112
112
|
## Tool usage
|
|
113
113
|
|
|
114
|
-
**NEVER** call tools like `pytest`, `black`, `mypy`, or similar directly. Always use the corresponding `
|
|
114
|
+
**NEVER** call tools like `pytest`, `black`, `mypy`, or similar directly. Always use the corresponding `task` target.
|
|
115
115
|
|
|
116
116
|
### Usage Rules
|
|
117
|
-
1. **Testing**: When running tests, use `
|
|
118
|
-
2. **Formatting**: For formatting, use `
|
|
119
|
-
3. **Type Checking**: For type checking, use `
|
|
120
|
-
4. **Lint Checks**: For lint checks, use `
|
|
121
|
-
5. **Building**: For building or updating the app, use `
|
|
122
|
-
6. **Help**: If you are unsure which target to use, run `
|
|
123
|
-
7. **New Operations**: If a new operation is needed, prefer adding a new
|
|
117
|
+
1. **Testing**: When running tests, use `task test`.
|
|
118
|
+
2. **Formatting**: For formatting, use `task format` or `task check-format`.
|
|
119
|
+
3. **Type Checking**: For type checking, use `task check-typing`.
|
|
120
|
+
4. **Lint Checks**: For lint checks, use `task check-lint`.
|
|
121
|
+
5. **Building**: For building or updating the app, use `task build` or `task update`.
|
|
122
|
+
6. **Help**: If you are unsure which target to use, run `task` (or `task --list-all`) to see all available options.
|
|
123
|
+
7. **New Operations**: If a new operation is needed, prefer adding a new Taskfile target rather than running a tool directly.
|
|
124
124
|
|
|
125
125
|
### Good vs Bad Examples
|
|
126
126
|
```sh
|
|
127
|
-
# Good: Use
|
|
128
|
-
|
|
127
|
+
# Good: Use task target to run tests
|
|
128
|
+
task test
|
|
129
129
|
|
|
130
130
|
# Bad: Call pytest directly
|
|
131
131
|
pytest tests
|
|
@@ -138,7 +138,7 @@ When working on this project:
|
|
|
138
138
|
1. **Start every response with contemplation** 🌲
|
|
139
139
|
2. **Take baby steps** - one test, one file, one change at a time 👣
|
|
140
140
|
3. **Always write the failing test first** (TDD) ❌➡️✅
|
|
141
|
-
4. **Use
|
|
141
|
+
4. **Use task targets** - never call tools directly 🔧
|
|
142
142
|
5. **Keep code small and typed** - max 20 lines per method 📏
|
|
143
143
|
6. **Show your thinking process** - be conversational and progressive 💭
|
|
144
144
|
7. **Question everything** - assumptions, requirements, design choices ❓
|
|
@@ -2,6 +2,98 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v0.26.0 (2026-09-08)
|
|
6
|
+
|
|
7
|
+
### ✨ Features
|
|
8
|
+
|
|
9
|
+
- **schema**: Remove year field and add missing built in features in ipy schema file
|
|
10
|
+
([`f365f88`](https://github.com/dimanu-py/instant-python/commit/f365f88294745570c7cc7b5f7af9b2a613dc3d42))
|
|
11
|
+
|
|
12
|
+
### ⚙️ Build System
|
|
13
|
+
|
|
14
|
+
- Create installation script for Windows
|
|
15
|
+
([`aee3d6e`](https://github.com/dimanu-py/instant-python/commit/aee3d6eac108569037c24687ef5a1925cc8eb58c))
|
|
16
|
+
|
|
17
|
+
- Create installation script for Apple Silicon and Linux
|
|
18
|
+
([`f431d2e`](https://github.com/dimanu-py/instant-python/commit/f431d2ec8c767be06dbd57a2c668f72c2678f9c2))
|
|
19
|
+
|
|
20
|
+
- Bump click to fix vulnerability
|
|
21
|
+
([`1c83b66`](https://github.com/dimanu-py/instant-python/commit/1c83b66ab31665dfe44a59221271767adb188249))
|
|
22
|
+
|
|
23
|
+
- Bump python-semantic-release
|
|
24
|
+
([`3e3c7b2`](https://github.com/dimanu-py/instant-python/commit/3e3c7b2c1d0c578184f3cb707d86d8d3fd1dc7e8))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
## v0.25.0 (2026-09-06)
|
|
28
|
+
|
|
29
|
+
### ✨ Features
|
|
30
|
+
|
|
31
|
+
- **config**: Not store configuration file when users decide to discard it
|
|
32
|
+
([`e0c7998`](https://github.com/dimanu-py/instant-python/commit/e0c7998bfa38870d82e58c3c5b52a3e57fb2af0c))
|
|
33
|
+
|
|
34
|
+
- **config**: Ask the user if they want to save the configuration or not
|
|
35
|
+
([`89e95f9`](https://github.com/dimanu-py/instant-python/commit/89e95f9ecb2ca9ba548ae9c835bdea2c0b0e09ea))
|
|
36
|
+
|
|
37
|
+
- **config**: Inject answers shummary formatter into real app command
|
|
38
|
+
([`0556573`](https://github.com/dimanu-py/instant-python/commit/05565730c92ec8ac7b4269f4fc7dd4fb9c3753af))
|
|
39
|
+
|
|
40
|
+
- **config**: Print dependency summary including production and development dependencies when
|
|
41
|
+
specified
|
|
42
|
+
([`ca6652e`](https://github.com/dimanu-py/instant-python/commit/ca6652e66931ec0dc36859d8d91f7ac8ea65f8dd))
|
|
43
|
+
|
|
44
|
+
- **config**: Print empty summary when no dependencies are selected
|
|
45
|
+
([`5df6944`](https://github.com/dimanu-py/instant-python/commit/5df69442deb8f53895f53628e357c8ff691269eb))
|
|
46
|
+
|
|
47
|
+
- **config**: Print git summary section
|
|
48
|
+
([`9e97281`](https://github.com/dimanu-py/instant-python/commit/9e97281096fea1f98b05eef760b8ea9ff41c23d6))
|
|
49
|
+
|
|
50
|
+
- **config**: Show selected built in features in template summary
|
|
51
|
+
([`28e327c`](https://github.com/dimanu-py/instant-python/commit/28e327ce2d5d7127f8065572f6d195f7b00d905f))
|
|
52
|
+
|
|
53
|
+
- **config**: Show summary for template configuration section supporting previous sections
|
|
54
|
+
([`f4cc977`](https://github.com/dimanu-py/instant-python/commit/f4cc977fbfa06fbd742469c06e89a64908e6f6d3))
|
|
55
|
+
|
|
56
|
+
- **config**: Show summary for general configuration section
|
|
57
|
+
([`c2fc86b`](https://github.com/dimanu-py/instant-python/commit/c2fc86bb02d9d79c1b38a408cd4015ffd9a439f0))
|
|
58
|
+
|
|
59
|
+
- **config**: Show review configuration summary title
|
|
60
|
+
([`bb2d97d`](https://github.com/dimanu-py/instant-python/commit/bb2d97d4351d23423235210917c8c2b4144ae12d))
|
|
61
|
+
|
|
62
|
+
- **config**: Include new answer formatter to print answers summary to the user
|
|
63
|
+
([`e7dc03d`](https://github.com/dimanu-py/instant-python/commit/e7dc03d14b4e87b5021361858428a5eb396f4710))
|
|
64
|
+
|
|
65
|
+
### 🪲 Bug Fixes
|
|
66
|
+
|
|
67
|
+
- **config**: Remove override annotation to make library compatible with older python versions
|
|
68
|
+
([`df71f74`](https://github.com/dimanu-py/instant-python/commit/df71f74155caec074ace285b96cce71ced950b3f))
|
|
69
|
+
|
|
70
|
+
### ⚙️ Build System
|
|
71
|
+
|
|
72
|
+
- Upgrade gitpython to a version that fixed vulnerabilities
|
|
73
|
+
([`b224ae1`](https://github.com/dimanu-py/instant-python/commit/b224ae12c4ca49a73de44526366d5829655f6908))
|
|
74
|
+
|
|
75
|
+
### ♻️ Refactoring
|
|
76
|
+
|
|
77
|
+
- **config**: Remove 'year' field from ConfigSchema and compute it as a global env variable in Jinja
|
|
78
|
+
instead
|
|
79
|
+
([`c76356b`](https://github.com/dimanu-py/instant-python/commit/c76356b34be61ef57154b505f626bb9cd2452b75))
|
|
80
|
+
|
|
81
|
+
- **config**: Correct typo in internal validation method
|
|
82
|
+
([`8f8acdc`](https://github.com/dimanu-py/instant-python/commit/8f8acdcc22b4a8fcde2b3759fe25d94b9de85cb9))
|
|
83
|
+
|
|
84
|
+
- **config**: Build config schema before showing summary to avoid printing incorrect values
|
|
85
|
+
([`8cc1c77`](https://github.com/dimanu-py/instant-python/commit/8cc1c77366acd882c4aa489b8564f9aaf6841823))
|
|
86
|
+
|
|
87
|
+
- **config**: Let console wizard return ConfigSchema instead of primitives
|
|
88
|
+
([`1e19771`](https://github.com/dimanu-py/instant-python/commit/1e19771ef7b3c2329c19548ba10e911560e1a93f))
|
|
89
|
+
|
|
90
|
+
- **config**: Remove answers existing check since empty dict will be ignored directly
|
|
91
|
+
([`1799a4d`](https://github.com/dimanu-py/instant-python/commit/1799a4daa9dcc8f784929abc17337ee8b2187c4f))
|
|
92
|
+
|
|
93
|
+
- **config**: Substitue empty value with None only when it is a list
|
|
94
|
+
([`ada43f5`](https://github.com/dimanu-py/instant-python/commit/ada43f5022c50d013043981129da568c2219b0ba))
|
|
95
|
+
|
|
96
|
+
|
|
5
97
|
## v0.24.2 (2026-08-07)
|
|
6
98
|
|
|
7
99
|
### 🪲 Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: instant-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.26.0
|
|
4
4
|
Summary: Instant boilerplate generation for Python projects
|
|
5
5
|
Project-URL: documentation, https://dimanu-py.github.io/instant-python/
|
|
6
6
|
Project-URL: repository, https://github.com/dimanu-py/instant-python/
|
|
@@ -264,6 +264,20 @@ commands like `ng new` or `create-react-app`, but for Python projects.
|
|
|
264
264
|
|
|
265
265
|
</td></tr></table></div>
|
|
266
266
|
|
|
267
|
+
## 🚀 Quick Start
|
|
268
|
+
|
|
269
|
+
Once [installed](https://dimanu-py.github.io/instant-python/getting_started/installation/), generating a project takes two commands:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
ipy config # answer a few questions through an interactive wizard to create your ipy.yml configuration file
|
|
273
|
+
ipy init # generate the project from that configuration file
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
- `ipy config` asks you about your project (name, Python version, project manager, template, dependencies, and more) and writes an `ipy.yml` configuration file in the current directory.
|
|
277
|
+
- `ipy init` reads that `ipy.yml` file and generates your new project.
|
|
278
|
+
|
|
279
|
+
See the [First Steps](https://dimanu-py.github.io/instant-python/getting_started/first_steps/) guide for a full walkthrough.
|
|
280
|
+
|
|
267
281
|
## ✨ NEW ✨ Create Fully Customized Projects
|
|
268
282
|
|
|
269
283
|
Take full control of your project generation! With **custom templates**, you can:
|
|
@@ -31,6 +31,20 @@ commands like `ng new` or `create-react-app`, but for Python projects.
|
|
|
31
31
|
|
|
32
32
|
</td></tr></table></div>
|
|
33
33
|
|
|
34
|
+
## 🚀 Quick Start
|
|
35
|
+
|
|
36
|
+
Once [installed](https://dimanu-py.github.io/instant-python/getting_started/installation/), generating a project takes two commands:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
ipy config # answer a few questions through an interactive wizard to create your ipy.yml configuration file
|
|
40
|
+
ipy init # generate the project from that configuration file
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- `ipy config` asks you about your project (name, Python version, project manager, template, dependencies, and more) and writes an `ipy.yml` configuration file in the current directory.
|
|
44
|
+
- `ipy init` reads that `ipy.yml` file and generates your new project.
|
|
45
|
+
|
|
46
|
+
See the [First Steps](https://dimanu-py.github.io/instant-python/getting_started/first_steps/) guide for a full walkthrough.
|
|
47
|
+
|
|
34
48
|
## ✨ NEW ✨ Create Fully Customized Projects
|
|
35
49
|
|
|
36
50
|
Take full control of your project generation! With **custom templates**, you can:
|