pz-cli 5.0.0__tar.gz → 5.0.2__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.
- {pz_cli-5.0.0 → pz_cli-5.0.2}/PKG-INFO +3 -3
- {pz_cli-5.0.0 → pz_cli-5.0.2}/README.md +2 -2
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/specs/2026-07-13-pz-app-version-resolution-design.md +66 -34
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/specs/2026-07-13-pz-cli-single-wheel-design.md +17 -13
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/specs/2026-07-13-pz-publish-git-release-orchestration-design.md +40 -16
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pyproject.toml +3 -3
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/_contracts.py +6 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/cli/workers.py +139 -56
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/configs/default.jsonc +27 -2
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/tortoise_manager.py +0 -5
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/docs/distribution-README.md +8 -5
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/docs//350/256/276/350/256/241/346/226/207/346/241/243.md +41 -4
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/docs//350/267/257/347/224/261/344/270/216URL/345/244/204/347/220/206/350/247/204/350/214/203.md +1 -0
- pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/edge_cache.py +46 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/web.py +38 -62
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/lifecycle.py +6 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/managed_workers.py +272 -44
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/cache_control.py +125 -20
- pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/middlewares/request_logging.py +133 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/security_headers/csp_nonce.py +101 -4
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/core.py +17 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/feishu_bot.py +8 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/telegram_bot.py +17 -6
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/public.py +74 -1
- pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/request_ids.py +92 -0
- pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/resource_delivery.py +101 -0
- pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/root_cli.py +16 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/declarations.py +130 -143
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/loaders.py +58 -15
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/manifest.py +77 -71
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/registry.py +30 -10
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/runtime.py +0 -30
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/settings.py +31 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/storage/local.py +34 -3
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/storage/public.py +24 -4
- pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/storage/s3.py +219 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/storage/service.py +29 -0
- pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/third_party.py +291 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/urls.py +1 -2
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_asset_directory_contract.py +18 -8
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_managed_workers_contract.py +194 -14
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_public_contract.py +17 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_settings_surface_contract.py +21 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_managed_workers_cli.py +61 -5
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_observability_logger_contract.py +9 -4
- pz_cli-5.0.2/pz_contrib/pz_foundation/tests/test_request_id_contract.py +136 -0
- pz_cli-5.0.2/pz_contrib/pz_foundation/tests/test_resource_delivery_contract.py +66 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_routing_declarations.py +104 -1
- pz_cli-5.0.2/pz_contrib/pz_foundation/tests/test_runtime_middlewares.py +718 -0
- pz_cli-5.0.2/pz_contrib/pz_foundation/tests/test_storage_backends.py +329 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_tortoise_manager_runtime_recovery.py +9 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/docs/distribution-README.md +1 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/project_helpers.py +5 -5
- pz_cli-5.0.2/pz_contrib/pz_settings_center/tests/test_project_helpers_contract.py +11 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/tests/test_metadata_contract.py +1 -1
- pz_cli-5.0.2/pz_core/pz_core/app_availability.py +476 -0
- pz_cli-5.0.2/pz_core/pz_core/app_sources.py +355 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/app_discovery.py +71 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/apps/compiler.py +24 -26
- pz_cli-5.0.2/pz_core/pz_core/assembly/cli/__init__.py +20 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/cli/compiler.py +83 -21
- pz_cli-5.0.2/pz_core/pz_core/assembly/cli/inventory.py +43 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/diagnostics/checks.py +3 -4
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/diagnostics/dev_sources.py +143 -11
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/extensions/compiler.py +12 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/project/discovery.py +23 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/settings/compiler.py +13 -24
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/app_init_service.py +428 -38
- pz_cli-5.0.2/pz_core/pz_core/authoring/app_source_providers.py +398 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/app_versions.py +424 -23
- pz_cli-5.0.2/pz_core/pz_core/authoring/cli.py +149 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/commands.py +1211 -343
- pz_cli-5.0.2/pz_core/pz_core/authoring/dependency_checks.py +520 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/dev_git.py +71 -3
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/dev_import.py +514 -61
- pz_cli-5.0.2/pz_core/pz_core/authoring/dev_project.py +72 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/dev_sources.py +224 -12
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/env_cli.py +7 -0
- pz_cli-5.0.2/pz_core/pz_core/authoring/file_transaction.py +374 -0
- pz_cli-5.0.2/pz_core/pz_core/authoring/files.py +215 -0
- pz_cli-5.0.2/pz_core/pz_core/authoring/installed_app_dependencies.py +266 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/official_dev_sources.py +104 -17
- pz_cli-5.0.2/pz_core/pz_core/authoring/orchestration.py +78 -0
- pz_cli-5.0.2/pz_core/pz_core/authoring/orchestration_service.py +1042 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_default.jsonc +7 -0
- pz_cli-5.0.2/pz_core/pz_core/authoring/project_dependencies.py +34 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_metadata_service.py +94 -13
- pz_cli-5.0.2/pz_core/pz_core/authoring/project_repair.py +359 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_settings_service.py +105 -40
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_state.py +29 -8
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/publish_source.py +20 -13
- pz_cli-5.0.2/pz_core/pz_core/authoring/pyproject_repair.py +661 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/release.py +186 -25
- pz_cli-5.0.2/pz_core/pz_core/authoring/root_cli.py +23 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/scaffold_service.py +60 -9
- pz_cli-5.0.2/pz_core/pz_core/authoring/source_closure.py +623 -0
- pz_cli-5.0.2/pz_core/pz_core/authoring/source_identity.py +418 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/sync_service.py +182 -61
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/pyproject.py +1 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/static_app_js.py +10 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/urls.py +3 -6
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/agents.py +1 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/apps_container_readme.py +2 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/pyproject.py +1 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/readme.py +6 -6
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/workspace.py +86 -0
- pz_cli-5.0.2/pz_core/pz_core/cli.py +312 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/cli_options.py +18 -2
- pz_cli-5.0.2/pz_core/pz_core/cli_routing.py +122 -0
- pz_cli-5.0.2/pz_core/pz_core/command_catalog.py +259 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/extensions/__init__.py +2 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/extensions/registry.py +5 -1
- pz_cli-5.0.2/pz_core/pz_core/docs/README.md +56 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/distribution-README.md +55 -31
- pz_cli-5.0.2/pz_core/pz_core/docs/pz/345/221/275/344/273/244/346/200/273/350/247/210.md +1197 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/00-pz/346/236/266/346/236/204/346/200/273/347/272/262.md +1 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/02-/345/214/205/344/270/216/345/210/206/345/217/221/350/247/204/350/214/203.md +18 -6
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/03-App/346/234/200/345/260/217/345/255/220/345/214/205/350/247/204/350/214/203.md +3 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/04-Settings/344/270/216/351/205/215/347/275/256/350/247/204/350/214/203.md +1 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/05-/350/265/204/346/272/220/344/270/216/350/277/220/350/241/214/347/233/256/345/275/225/350/247/204/350/214/203.md +1 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/09-CLI/344/270/216Worker/345/205/245/345/217/243/350/247/204/350/214/203.md +326 -83
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/10-/346/265/213/350/257/225/344/270/216/345/245/221/347/272/246/350/247/204/350/214/203.md +122 -25
- pz_cli-5.0.2/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/11-/344/273/223/345/272/223/347/234/237/347/233/270/346/272/220/345/234/260/345/233/276.md +142 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/12-/346/236/204/345/273/272/344/270/216/345/217/221/345/270/203/346/243/200/346/237/245/346/270/205/345/215/225.md +3 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/13-/346/255/243/345/274/217Facade/346/200/273/350/241/250.md +10 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/14-/345/210/206/345/261/202/344/270/216/346/211/251/345/261/225/350/247/204/350/214/203.md +1 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/15-/345/255/220/345/214/205/345/274/200/345/217/221/344/275/277/347/224/250/346/211/213/345/206/214.md +80 -44
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/16-/346/211/251/345/261/225/347/202/271/346/255/243/345/274/217/345/215/217/350/256/256/346/270/205/345/215/225.md +4 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/17-pz.protocols.v1/346/255/243/345/274/217/345/215/217/350/256/256.md +1 -0
- pz_cli-5.0.2/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/19-/351/224/231/350/257/257/347/240/201/344/270/216/350/257/212/346/226/255/345/215/217/350/256/256.md +240 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/20-/347/247/201/346/234/211/345/214/205/344/273/223/344/270/216/347/273/237/344/270/200/350/256/244/350/257/201/351/203/250/347/275/262/350/247/204/350/214/203.md +14 -11
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/24-pz/345/220/257/345/212/250/344/270/216/350/277/220/350/241/214/346/227/266/347/274/226/350/257/221/346/265/201/347/250/213.md +23 -9
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/README.md +1 -0
- pz_cli-5.0.2/pz_core/pz_core/docs//346/226/260/346/211/213/346/214/207/345/215/227.md +318 -0
- pz_cli-5.0.2/pz_core/pz_core/import_ref.py +50 -0
- pz_cli-5.0.2/pz_core/pz_core/imported_command.py +36 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/storage/ports.py +6 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/project_runtime_cli.py +25 -32
- pz_cli-5.0.2/pz_core/pz_core/project_runtime_entry.py +26 -0
- pz_cli-5.0.2/pz_core/pz_core/pz_launcher.py +40 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/root_cli.py +24 -4
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/cli/app_commands.py +277 -58
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/cli/check.py +43 -3
- pz_cli-5.0.2/pz_core/pz_core/runtime/cli/main.py +91 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/cli/resources.py +3 -5
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/environment_integrity.py +3 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/storage.py +127 -5
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/host.py +6 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/host_runner.py +46 -16
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/http/app.py +6 -14
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/http_timing.py +3 -2
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/lifecycle/__init__.py +2 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/plan.py +6 -2
- pz_cli-5.0.2/pz_core/pz_core/runtime/request_id.py +62 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/settings.py +5 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/worker/engine.py +111 -121
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/scripts/README.md +4 -4
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/assembly/test_visible_app_discovery.py +38 -1
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_app_init_from_bindings.py +188 -2
- pz_cli-5.0.2/pz_core/tests/authoring/test_app_source_providers.py +209 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_app_versions.py +336 -18
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_business_app_id.py +2 -2
- pz_cli-5.0.2/pz_core/tests/authoring/test_dependency_checks.py +185 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_binding_transaction.py +234 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_check_diagnostics.py +88 -2
- pz_cli-5.0.2/pz_core/tests/authoring/test_dev_cli.py +666 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_git_integration.py +22 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_import.py +154 -1
- pz_cli-5.0.2/pz_core/tests/authoring/test_file_transaction.py +168 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_ide_projection.py +78 -29
- pz_cli-5.0.2/pz_core/tests/authoring/test_installed_app_dependencies.py +134 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_orchestration_service.py +257 -40
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_project_metadata_service.py +122 -1
- pz_cli-5.0.2/pz_core/tests/authoring/test_project_pyproject_repair.py +155 -0
- pz_cli-5.0.2/pz_core/tests/authoring/test_project_repair_environment.py +177 -0
- pz_cli-5.0.2/pz_core/tests/authoring/test_repair_cli.py +108 -0
- pz_cli-5.0.2/pz_core/tests/authoring/test_source_closure.py +419 -0
- pz_cli-5.0.2/pz_core/tests/authoring/test_source_identity.py +72 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_source_locator_resolution.py +66 -6
- pz_cli-5.0.2/pz_core/tests/authoring/test_sync_service_artifacts.py +332 -0
- pz_cli-5.0.2/pz_core/tests/core/test_app_availability.py +131 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_app_registry_contract.py +39 -0
- pz_cli-5.0.2/pz_core/tests/core/test_app_source_catalog.py +82 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_cli_list_contract.py +149 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_http_timing_contract.py +4 -4
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_infra_contracts.py +6 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_infra_facades_contract.py +9 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_project_settings_contract.py +47 -10
- pz_cli-5.0.2/pz_core/tests/core/test_request_id_contract.py +32 -0
- pz_cli-5.0.2/pz_core/tests/core/test_root_cli_discovery.py +67 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_runtime_access_contract.py +62 -6
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_runtime_facades_contract.py +154 -23
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_runtime_plan_app_factory_contract.py +8 -4
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_runtime_plan_contract.py +7 -3
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/runtime/test_environment_integrity.py +6 -10
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_cli_contract.py +532 -321
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_publish_contract.py +242 -2
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_runtime_resources_cli.py +2 -2
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_scaffold_service_contract.py +1 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/pz_release/distributions.py +81 -16
- {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/tests/test_distribution_graph.py +30 -18
- {pz_cli-5.0.0 → pz_cli-5.0.2}/uv.lock +1 -1
- pz_cli-5.0.0/docs/superpowers/specs/2026-07-12-pz-shared-sources-symlink-design.md +0 -80
- pz_cli-5.0.0/docs/superpowers/specs/2026-07-13-pz-dev-add-link-source-ownership-design.md +0 -493
- pz_cli-5.0.0/pz_contrib/pz_foundation/pz_foundation/middlewares/request_logging.py +0 -104
- pz_cli-5.0.0/pz_contrib/pz_foundation/pz_foundation/root_cli.py +0 -20
- pz_cli-5.0.0/pz_contrib/pz_foundation/pz_foundation/storage/s3.py +0 -116
- pz_cli-5.0.0/pz_contrib/pz_foundation/tests/test_runtime_middlewares.py +0 -346
- pz_cli-5.0.0/pz_contrib/pz_foundation/tests/test_storage_backends.py +0 -72
- pz_cli-5.0.0/pz_core/pz_core/assembly/cli/__init__.py +0 -9
- pz_cli-5.0.0/pz_core/pz_core/authoring/cli.py +0 -192
- pz_cli-5.0.0/pz_core/pz_core/authoring/files.py +0 -109
- pz_cli-5.0.0/pz_core/pz_core/authoring/orchestration_service.py +0 -558
- pz_cli-5.0.0/pz_core/pz_core/authoring/root_cli.py +0 -28
- pz_cli-5.0.0/pz_core/pz_core/cli.py +0 -291
- pz_cli-5.0.0/pz_core/pz_core/docs/README.md +0 -20
- pz_cli-5.0.0/pz_core/pz_core/docs/pz/345/221/275/344/273/244/346/200/273/350/247/210.md +0 -1011
- pz_cli-5.0.0/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/11-/344/273/223/345/272/223/347/234/237/347/233/270/346/272/220/345/234/260/345/233/276.md +0 -102
- pz_cli-5.0.0/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/19-/351/224/231/350/257/257/347/240/201/344/270/216/350/257/212/346/226/255/345/215/217/350/256/256.md +0 -176
- pz_cli-5.0.0/pz_core/pz_core/docs//346/226/260/346/211/213/346/214/207/345/215/227.md +0 -422
- pz_cli-5.0.0/pz_core/pz_core/pz_launcher.py +0 -209
- pz_cli-5.0.0/pz_core/pz_core/runtime/cli/main.py +0 -89
- pz_cli-5.0.0/pz_core/tests/authoring/test_dev_cli.py +0 -382
- pz_cli-5.0.0/pz_core/tests/authoring/test_sync_service_artifacts.py +0 -36
- {pz_cli-5.0.0 → pz_cli-5.0.2}/.gitignore +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/AGENTS.md +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/history/pz_contrib/2026-04-22-contrib-deprecated-code-audit.md +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/history/pz_contrib/README.md +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/history/pz_contrib/distribution-README.md +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/in_progress/README.md +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/in_progress/Studio/347/274/226/350/276/221/345/231/250/350/256/276/350/256/241.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/in_progress//344/270/212/344/274/240/345/220/216/347/253/213/345/215/263/345/274/200/345/247/213/345/274/200/345/205/263/344/270/216/346/211/213/345/212/250/347/277/273/350/257/221/351/230/237/345/210/227/346/226/271/346/241/210.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/in_progress//346/212/275/345/245/226/346/250/241/345/235/227/350/256/276/350/256/241.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/plans/2026-06-27-page-center-pseo-admin.md +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/specs/2026-06-27-page-center-pseo-admin-design.md +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/specs/2026-07-13-pz-vscode-shadow-projection-design.md +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/.gitignore +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/AGENTS.md +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/foundation_testsupport/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/foundation_testsupport/orm_models.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/_errors.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/api.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/apps.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/auth/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/cache_control.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/cli/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/configs/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/configs/default.env +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/aerich_executor.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/config.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/connection_manager.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/connection_probe.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/database.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/deps.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/lifecycle_status.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/migrations.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/mysql.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/postgresql.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/production_pool_fallback.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/public.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/session.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/sqlite.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/tortoise_psycopg.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/docs/README.md +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/docs/infra/350/243/201/345/211/252/344/270/216/350/220/275/344/275/215/350/257/264/346/230/216.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/docs//345/205/254/345/274/200/345/205/215/350/264/271/346/216/245/345/217/243/351/230/262/346/273/245/347/224/250/344/270/216/344/272/272/346/234/272/346/240/241/351/252/214.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/health.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/builder.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/cache_runtime.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/aerich_config.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/config.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/connection_manager.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/deps.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/orm_retry_patch.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/request_adapter.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/router.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/session.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/tortoise_manager.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/idempotency.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/lifespan.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/redis_runtime.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/infra_provider.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/kv/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/kv/cache.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/kv/deps.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/kv/public.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/kv/redis_manager.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/lazy_exports.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/lazy_imports.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/_settings.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/analytics.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/compression.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/cors.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/geo_country.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/inner_router.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/rate_limited/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/rate_limited/key_limiter.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/route_owner.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/security_csrf.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/security_headers/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/security_headers/conflicts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/security_headers/security_headers.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/migrations/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/migrations/pz_foundation/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/models.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/notifications/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/notifications/email.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/notifications/public.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/http.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/_bot_settings.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/bot_message.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/delivery_audit.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/metrics.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/runtime.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/resources/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/resources/builder.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/resources/images.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/canonical.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/convertors.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/exports.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/manifest_provider.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/mounts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/ordering.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/utils.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/settings_normalization.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/storage/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/utils/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/utils/merge.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/worker_replicas.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/conftest.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/fixtures/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/fixtures/orm_models.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_aerich_executor_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_database_probe_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_database_url_options.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_distribution_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_aerich_executor.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_analytics_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_database_runtime_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_database_session.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_db_connection_manager_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_db_lifecycle_status_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_db_request_adapter_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_host_db_session_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_host_lifespan_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_lazy_imports_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_mail_runtime_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_prometheus_metrics.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_provider_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_redis_config.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_redis_runtime_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_resource_images_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_security_headers_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_tortoise_model_binding.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_tortoise_psycopg_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_key_limiter.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_observability_bot_backpressure.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_observability_lazy_import_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_orm_retry_patch.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_redis_manager.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_resource_images.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_route_ordering.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_route_owner_middleware.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_settings_template_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_utils_merge.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_v5_regression_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/api/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/api/runtime_overrides.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/apps.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/configs/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/configs/default.env +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/configs/default.jsonc +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/docs/01-settings_center/350/203/275/345/212/233/350/276/271/347/225/214.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/docs/README.md +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/docs//350/256/276/350/256/241/346/226/207/346/241/243.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/integration_payload.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/public.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/routing_helpers.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/runtime_override_provider.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/typed_settings.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/urls.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/tests/test_integration_payload.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/tests/test_runtime_overrides_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/tests/test_minimal_dependency_direction_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/.gitignore +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/AGENTS.md +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/__main__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/app.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/apps/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/apps/providers.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/diagnostics/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/events/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/events/compiler.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/extensions/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/infra/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/infra/compiler.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/lifecycle/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/lifecycle/compiler.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/middlewares/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/middlewares/compiler.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/project/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/project/compiler.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/project/context.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/resources/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/resources/compiler.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/resources/settings.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/routes/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/routes/compiler.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/runtime_manifests/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/runtime_manifests/compiler.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/settings/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/settings/host_project_overrides.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/settings/host_runtime_endpoint.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/conflicts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/dev_bindings.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/dev_manifest.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/ide_projection.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/naming.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/official_sources.json +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_defaults.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_settings_checks.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_settings_cli.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/publish_git.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/publish_lock.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/repo_keys.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/api.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/apps.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/auth_package_init.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/auth_readme.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/configs_package_init.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/default_env.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/default_jsonc.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/locales_readme.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/migrations_readme.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/models.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/package_init.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/pages_base.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/pages_readme.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/public.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/readme.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/settings.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/static_readme.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/template_config_page.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/template_index_html.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/templates_readme.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/views.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/main_py.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/project_env.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/pz_env_env.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/pz_env_jsonc.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/pz_jsonc.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/root_gitkeep.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/shared/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/shared/text.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/venv_service.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/errors/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/errors/models.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/events/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/events/registry.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/health/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/health/contracts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/middlewares/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/middlewares/models.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/routing/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/routing/models.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/settings_contracts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/01-/347/233/256/345/275/225/344/270/216/345/210/206/345/261/202/350/247/204/350/214/203.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/06-/346/225/260/346/215/256/345/272/223/344/270/216/345/217/257/351/200/211/345/237/272/347/241/200/350/256/276/346/226/275/350/247/204/350/214/203.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/07-App/346/233/277/346/215/242/350/247/204/350/214/203.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/08-/345/271/263/345/217/260/347/272/247App/344/270/216/350/277/220/350/241/214/346/227/266/345/215/225/344/276/213/350/247/204/350/214/203.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/18-/346/211/251/345/261/225/347/202/271/345/206/262/347/252/201/350/243/201/345/206/263/346/200/273/350/241/250.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/21-contrib/347/272/246/345/256/232/344/270/216Provider/346/216/245/345/205/245/350/247/204/350/214/203.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/22-/345/244/232/345/233/275/350/257/255/350/250/200/350/265/204/346/272/220/346/262/273/347/220/206/344/270/216/346/214/211/351/234/200/345/212/240/350/275/275/350/247/204/350/214/203.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/23-/351/246/226/345/261/217/345/261/225/347/244/272/344/270/216/351/246/226/345/270/247/347/250/263/345/256/232/350/247/204/350/214/203.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/25-/351/235/242/345/220/221/345/257/271/350/261/241/345/274/200/345/217/221/350/247/204/350/214/203.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/00-legacy_core/346/240/207/345/207/206pip/345/214/205/345/214/226/351/207/215/346/236/204/346/200/273/347/272/262.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/01-/347/233/256/345/275/225/344/270/216/345/210/206/345/261/202/351/207/215/346/236/204/346/211/247/350/241/214/346/226/271/346/241/210.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/02-/345/214/205/344/270/216/345/210/206/345/217/221/350/247/204/350/214/203-/345/220/253/345/216/206/345/217/262/345/217/243/345/276/204.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/13-/344/270/200/346/254/241/346/200/247/345/256/236/346/226/275/346/270/205/345/215/225.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/14-/345/255/220/345/214/205/351/200/202/351/205/215/346/224/271/351/200/240/346/270/205/345/215/225.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/15-infra/350/243/201/345/211/252/344/270/216/350/220/275/344/275/215/346/270/205/345/215/225.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/19-core/345/215/225/344/270/200/346/255/243/345/274/217/346/226/271/346/241/210/346/224/266/346/225/233/346/211/247/350/241/214/346/270/205/345/215/225.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/25-/345/215/217/350/256/256/345/210/260/346/272/220/347/240/201/345/267/256/350/267/235/346/270/205/345/215/225.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/26-cutover/345/256/214/345/267/245/346/243/200/346/237/245/346/270/205/345/215/225.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/29-/345/244/232/345/233/275/350/257/255/350/250/200/350/265/204/346/272/220/346/262/273/347/220/206/344/270/216/346/214/211/351/234/200/345/212/240/350/275/275/350/247/204/350/214/203-/345/220/253/350/277/201/347/247/273/347/255/226/347/225/245.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/99-/350/265/204/346/272/220/346/224/266/345/217/243/345/220/216/347/273/255TODO.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs//345/217/221/347/211/210/345/211/215/346/270/205/345/215/225-4.0.11.md" +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/db/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/db/contracts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/health/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/health/contracts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/kv/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/kv/contracts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/observability/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/observability/contracts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/resilience/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/resilience/contracts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/resources/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/resources/contracts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/settings/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/settings/models.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/storage/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/project_root_commands.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/project_sources.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/access.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/adapters/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/adapters/base.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/asyncio_bridge.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/bindings/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/bindings/container.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/cli/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/cli/_args.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/cli/db.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/discovery.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/errors.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/events.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/_capabilities.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/cache.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/database.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/events.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/health.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/mail.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/observability.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/providers.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/resources.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/health/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/health/service.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/http/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/invocation.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/json_safe.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/lifecycle/manager.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/plan_context.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/plan_snapshot.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/registries/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/registries/capabilities.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/registries/providers.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/resource_assets.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/run_cli.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/worker/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/worker/runtime.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/testing/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/testing/doc_route_contracts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/utils/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/utils/env.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/utils/project_jsonc/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/utils/project_jsonc/document.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/utils/project_settings.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/scripts/build_pz.sh +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/scripts/install_pz.sh +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/git_fixtures.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_bindings.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_git_unit.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_manifest.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_update_remove.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/conftest.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_api_assembly_minimal_host_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_cli_check_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_core_layout_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_db_cli_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_doc_route_contracts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_event_extension_registry_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_extension_registry_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_host_assembly_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_middleware_manifest_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_project_context_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_project_jsonc_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_project_sources_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_release_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_resource_manifest_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_route_manifest_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_runtime_import_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_runtime_settings_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_settings_contracts.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_settings_snapshot_precedence_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_resources_cli_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_runtime_resource_assets.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_utils_env_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_utils_project_settings_contract.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/pyproject.toml +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/pz_release/__init__.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/pz_release/build_minimal.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/pz_release/verify_minimal_runtime.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/tests/test_verify_minimal_runtime.py +0 -0
- {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pz-cli
|
|
3
|
-
Version: 5.0.
|
|
3
|
+
Version: 5.0.2
|
|
4
4
|
Summary: PZ CLI, runtime compiler, settings owner, and foundation runtime
|
|
5
5
|
Project-URL: Homepage, https://github.com/JiXiangTools/pz
|
|
6
6
|
Project-URL: Repository, https://github.com/JiXiangTools/pz
|
|
@@ -36,14 +36,14 @@ Description-Content-Type: text/markdown
|
|
|
36
36
|
|
|
37
37
|
`pz-cli` is the single install and release unit for the PZ base runtime.
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
The version declared by the root `pyproject.toml` bundles the `pz_core`, `pz_settings_center`, and `pz_foundation`
|
|
40
40
|
Python packages in one wheel and exposes the formal `pz` command. The retired
|
|
41
41
|
`pz-core`, `pz-contrib`, `pz-settings-center`, and `pz-foundation`
|
|
42
42
|
distributions are no longer built or installed separately. Business packages
|
|
43
43
|
from the `pz_apps` repository remain independent distributions.
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
pip install pz-cli
|
|
46
|
+
pip install pz-cli
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
The source checkout uses one root `pyproject.toml` and one root `uv.lock`.
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
`pz-cli` is the single install and release unit for the PZ base runtime.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The version declared by the root `pyproject.toml` bundles the `pz_core`, `pz_settings_center`, and `pz_foundation`
|
|
6
6
|
Python packages in one wheel and exposes the formal `pz` command. The retired
|
|
7
7
|
`pz-core`, `pz-contrib`, `pz-settings-center`, and `pz-foundation`
|
|
8
8
|
distributions are no longer built or installed separately. Business packages
|
|
9
9
|
from the `pz_apps` repository remain independent distributions.
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
pip install pz-cli
|
|
12
|
+
pip install pz-cli
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
The source checkout uses one root `pyproject.toml` and one root `uv.lock`.
|
{pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/specs/2026-07-13-pz-app-version-resolution-design.md
RENAMED
|
@@ -2,8 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## Status
|
|
4
4
|
|
|
5
|
-
This document defines the implemented contract for version-aware
|
|
6
|
-
installation in `pz app`.
|
|
5
|
+
This document defines the original implemented contract for version-aware
|
|
6
|
+
package installation in `pz app`. Source selection, Git package-tag installs,
|
|
7
|
+
and the replacement of the index-only model are now owned by the formal
|
|
8
|
+
`pz_core/pz_core/docs/pz规范与使用/09-CLI与Worker入口规范.md`; the exact-version,
|
|
9
|
+
PEP 440, orchestration, and retry contracts below remain applicable.
|
|
7
10
|
|
|
8
11
|
## Goal
|
|
9
12
|
|
|
@@ -13,7 +16,8 @@ reproducible exact installed version.
|
|
|
13
16
|
|
|
14
17
|
The normal workflow must be simple:
|
|
15
18
|
|
|
16
|
-
- `pz app add <app_id>` installs the latest compatible stable version
|
|
19
|
+
- `pz app add <app_id>` installs the latest compatible stable version from the
|
|
20
|
+
selected source, defaulting to `internal-pypi`;
|
|
17
21
|
- `pz app add <app_id> --version <version>` installs one exact version;
|
|
18
22
|
- `pz app update <app_id>` resolves the latest compatible stable version;
|
|
19
23
|
- `pz app update <app_id> --version <version>` moves to one exact version;
|
|
@@ -26,16 +30,16 @@ PZ retains the explicit atomic-command plus orchestration-command model.
|
|
|
26
30
|
Orchestration commands are:
|
|
27
31
|
|
|
28
32
|
- `pz app init`;
|
|
29
|
-
- `pz app add <app_id> [--version <version>]`;
|
|
30
|
-
- `pz app update <app_id> [--version <version>]`;
|
|
33
|
+
- `pz app add <app_id> [--source <source>] [--version <version>]`;
|
|
34
|
+
- `pz app update <app_id> [--source <source>] [--version <version>]`;
|
|
31
35
|
- `pz app rm <app_id>`.
|
|
32
36
|
|
|
33
37
|
Public atomic commands are:
|
|
34
38
|
|
|
35
39
|
- `pz app versions <app_id>`;
|
|
36
|
-
- `pz app declare <app_id> --version <version
|
|
40
|
+
- `pz app declare <app_id> --version <version> [--source <source>]`;
|
|
37
41
|
- `pz app undeclare <app_id>`;
|
|
38
|
-
- `pz app install <app_id> --version <version
|
|
42
|
+
- `pz app install <app_id> --version <version> [--source <source>]`.
|
|
39
43
|
|
|
40
44
|
The orchestrators also reuse atomic `pz settings update` and environment sync
|
|
41
45
|
capabilities. Each command belongs to exactly one layer. Normal human workflows
|
|
@@ -63,7 +67,10 @@ minimal apps.
|
|
|
63
67
|
## Version Resolution
|
|
64
68
|
|
|
65
69
|
Without `--version`, `app add`, `app update`, and `app init` resolve the latest
|
|
66
|
-
compatible stable version from the configured
|
|
70
|
+
compatible stable version from the configured `AppSourceCatalog` source.
|
|
71
|
+
PyPI sources enumerate releases through the Simple API. Git sources enumerate
|
|
72
|
+
formal `<distribution>@<version>` package tags and resolve the selected tag to
|
|
73
|
+
one full commit and exact leaf subdirectory.
|
|
67
74
|
|
|
68
75
|
The resolver must:
|
|
69
76
|
|
|
@@ -86,9 +93,9 @@ package dependency metadata, not an ambiguous project installation request.
|
|
|
86
93
|
|
|
87
94
|
## `pz app versions`
|
|
88
95
|
|
|
89
|
-
`pz app versions <app_id
|
|
90
|
-
or index mutation. It resolves the formal
|
|
91
|
-
|
|
96
|
+
`pz app versions <app_id> [--source <source_id>]` is read-only and performs no
|
|
97
|
+
project, environment, Git remote, or index mutation. It resolves the formal
|
|
98
|
+
distribution and selected catalog source, then reports:
|
|
92
99
|
|
|
93
100
|
- `app_id` and distribution name;
|
|
94
101
|
- all available versions in descending PEP 440 order;
|
|
@@ -106,10 +113,19 @@ redacted.
|
|
|
106
113
|
|
|
107
114
|
### `pz app declare`
|
|
108
115
|
|
|
109
|
-
`pz app declare <app_id> --version <version
|
|
110
|
-
distribution
|
|
111
|
-
|
|
112
|
-
|
|
116
|
+
`pz app declare <app_id> --version <version> [--source <source>]` atomically
|
|
117
|
+
writes the exact distribution plan and app identity/load-order declaration.
|
|
118
|
+
Before install, a PyPI declaration contains the root identity. With a Git
|
|
119
|
+
source, the command first compiles the complete formal app closure from the root
|
|
120
|
+
package tag's full commit, then writes every member's exact version, the same
|
|
121
|
+
credential-free Git URL/full commit, and its own leaf subdirectory in one
|
|
122
|
+
project transaction; no member may fall back to an index. After `app install`,
|
|
123
|
+
repeating the
|
|
124
|
+
same atomic declaration inspects installed metadata, validates the complete
|
|
125
|
+
formal app dependency closure against hard distribution dependencies and lock
|
|
126
|
+
versions, and reconciles the closure into `installed_apps` in dependency-first
|
|
127
|
+
order. It does not install packages or refresh app settings. Existing explicit
|
|
128
|
+
dev source ownership is preserved and remains higher priority.
|
|
113
129
|
|
|
114
130
|
### `pz app undeclare`
|
|
115
131
|
|
|
@@ -119,11 +135,18 @@ or remote package artifacts.
|
|
|
119
135
|
|
|
120
136
|
### `pz app install`
|
|
121
137
|
|
|
122
|
-
`pz app install <app_id> --version <version
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
138
|
+
`pz app install <app_id> --version <version> [--source <source>]` installs the resolved root
|
|
139
|
+
distribution and its compatible distribution dependency graph into the project
|
|
140
|
+
environment and converges `uv.lock`. Missing formal app dependencies use the
|
|
141
|
+
root app's same install source. A PyPI install does not inherit `UV_INDEX`, uses
|
|
142
|
+
`first-index`, and cannot silently redirect a closure member to another private
|
|
143
|
+
index. A PyPI resolution persists an exact version. A Git resolution consumes
|
|
144
|
+
the exact same-commit closure entries already persisted by `app declare`; the
|
|
145
|
+
explicit source also makes failure recovery reuse the same source. It does not
|
|
146
|
+
choose latest or modify source directories. The
|
|
147
|
+
second atomic `app declare` projects the installed graph into `installed_apps`.
|
|
148
|
+
Locked and installed metadata must match the root request and every formal
|
|
149
|
+
dependency before success.
|
|
127
150
|
|
|
128
151
|
## Orchestration
|
|
129
152
|
|
|
@@ -133,16 +156,18 @@ metadata must match the requested distribution and version before success.
|
|
|
133
156
|
|
|
134
157
|
```text
|
|
135
158
|
resolve latest stable or validate --version
|
|
136
|
-
-> app declare exact
|
|
137
|
-
-> app install exact
|
|
159
|
+
-> app declare exact same-source plan
|
|
160
|
+
-> app install exact same-source plan
|
|
161
|
+
-> app declare installed dependency closure
|
|
138
162
|
-> settings update
|
|
139
163
|
```
|
|
140
164
|
|
|
141
|
-
Each successful atomic stage remains committed. If installation fails after
|
|
142
|
-
declaration,
|
|
143
|
-
|
|
144
|
-
resumes from settings
|
|
145
|
-
stages, the selected exact version, and the first incomplete
|
|
165
|
+
Each successful atomic stage remains committed. If installation fails after the
|
|
166
|
+
root declaration, that exact declaration remains and retry resumes from install.
|
|
167
|
+
If closure declaration fails after installation, retry repeats `app declare`;
|
|
168
|
+
if settings refresh fails, retry resumes from settings. The orchestration always
|
|
169
|
+
reports completed stages, the selected exact version, and the first incomplete
|
|
170
|
+
stage.
|
|
146
171
|
|
|
147
172
|
### `pz app update`
|
|
148
173
|
|
|
@@ -155,8 +180,9 @@ reinstalling.
|
|
|
155
180
|
|
|
156
181
|
`pz app init` resolves every selected package first, forms one dependency-safe
|
|
157
182
|
exact plan, then declares and installs in dependency order. A resolver conflict
|
|
158
|
-
fails before project mutation. It never uses
|
|
159
|
-
|
|
183
|
+
fails before project mutation. It never uses a branch, `HEAD`, floating tag, or
|
|
184
|
+
the current version of an arbitrary source checkout as a production pin. A Git
|
|
185
|
+
source is valid only through a formal package tag resolved to a full commit.
|
|
160
186
|
|
|
161
187
|
### `pz app rm`
|
|
162
188
|
|
|
@@ -180,7 +206,8 @@ refresh. It does not remove local source or delete remote package versions.
|
|
|
180
206
|
Publishing and installation remain separate chains. The leaf
|
|
181
207
|
`[project].version`, package tag, wheel metadata, and package-index version must
|
|
182
208
|
match under the Git release orchestration design. `pz app` consumes those
|
|
183
|
-
published versions and never commits,
|
|
209
|
+
published versions from PyPI or a formal Git package tag and never commits,
|
|
210
|
+
tags, or publishes source.
|
|
184
211
|
|
|
185
212
|
## Testing
|
|
186
213
|
|
|
@@ -194,12 +221,15 @@ Tests must cover:
|
|
|
194
221
|
4. `app versions` reports available, latest, declared, locked, and installed
|
|
195
222
|
versions consistently in human and JSON output without mutation;
|
|
196
223
|
5. install validates installed distribution metadata;
|
|
197
|
-
6. add/update/init
|
|
198
|
-
resolution conflict;
|
|
224
|
+
6. add/update/init install the formal dependency closure from the same source,
|
|
225
|
+
preserve dependency order, and fail deterministically on resolution conflict;
|
|
199
226
|
7. staged declaration rollback and forward recovery after later-stage failure;
|
|
200
227
|
8. source/distribution identity conflicts remain hard errors;
|
|
201
228
|
9. repository-root version never overrides a leaf package version;
|
|
202
|
-
10. credentials and authenticated index URLs are redacted
|
|
229
|
+
10. credentials and authenticated index URLs are redacted;
|
|
230
|
+
11. inherited `UV_INDEX` cannot redirect a private formal dependency, while an
|
|
231
|
+
explicit existing dev source remains higher priority and is never deleted
|
|
232
|
+
or rewritten by `pz app`.
|
|
203
233
|
|
|
204
234
|
## Non-Goals
|
|
205
235
|
|
|
@@ -207,4 +237,6 @@ Tests must cover:
|
|
|
207
237
|
- Giving every app in one repository the same release version.
|
|
208
238
|
- Persisting floating `latest` dependencies.
|
|
209
239
|
- Automatically selecting or bumping a package's publish version.
|
|
210
|
-
- Installing
|
|
240
|
+
- Installing from a mutable branch, `HEAD`, floating tag, dirty checkout, or
|
|
241
|
+
unversioned local source in the `pz app` command family. Exact Git package-tag
|
|
242
|
+
installs are formal inputs under the unified source catalog design.
|
{pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/specs/2026-07-13-pz-cli-single-wheel-design.md
RENAMED
|
@@ -140,7 +140,7 @@ The wheel exposes both existing entry-point contracts:
|
|
|
140
140
|
pz = "pz_core.pz_launcher:main"
|
|
141
141
|
|
|
142
142
|
[project.entry-points."pz.root_cli"]
|
|
143
|
-
|
|
143
|
+
workers = "pz_foundation.root_cli:get_root_command_handlers"
|
|
144
144
|
```
|
|
145
145
|
|
|
146
146
|
## Dependency Metadata
|
|
@@ -200,13 +200,15 @@ with one dependency:
|
|
|
200
200
|
pz-cli==5.0.0
|
|
201
201
|
```
|
|
202
202
|
|
|
203
|
-
App-to-app dependency relationships remain unchanged
|
|
204
|
-
|
|
203
|
+
App-to-app dependency relationships remain unchanged. The cutover artifacts
|
|
204
|
+
start at `5.0.1`, while ongoing package metadata declares compatible `5.x`
|
|
205
|
+
ranges instead of advancing every downstream package with an exact release pin.
|
|
205
206
|
|
|
206
207
|
Dependency metadata is part of an artifact's identity. Therefore the approved
|
|
207
|
-
`pz_apps`
|
|
208
|
-
|
|
209
|
-
`5.0.1`; the base dependency
|
|
208
|
+
`pz_apps` cutover artifacts move from `5.0.0` to `5.0.1`. After the cutover,
|
|
209
|
+
each app owns an independent version and uses compatibility metadata such as
|
|
210
|
+
`pz-auth>=5.0.1,<6`; the base compatibility dependency is
|
|
211
|
+
`pz-cli>=5.0.0,<6`. Exact versions belong to host projects and `uv.lock`.
|
|
210
212
|
|
|
211
213
|
Each `[tool.uv.sources]` table removes the old base source entries and uses one
|
|
212
214
|
editable source entry pointing to the PZ repository root:
|
|
@@ -228,7 +230,7 @@ its own next unpublished version when changing dependencies.
|
|
|
228
230
|
## External Consumer Migration
|
|
229
231
|
|
|
230
232
|
Any third-party distribution or project that depends directly on a retired
|
|
231
|
-
base distribution must migrate to `pz-cli
|
|
233
|
+
base distribution must migrate to `pz-cli>=5.0.0,<6` before it can consume the
|
|
232
234
|
single-wheel release. Release notes must list the retired names and the exact
|
|
233
235
|
dependency replacement.
|
|
234
236
|
|
|
@@ -245,7 +247,7 @@ pz-cli = { path = "apps/.sources/pz", editable = true }
|
|
|
245
247
|
```
|
|
246
248
|
|
|
247
249
|
Scaffold, `pz dev init`, project metadata reconciliation, source diagnostics,
|
|
248
|
-
environment sync,
|
|
250
|
+
environment sync, explicit runtime-target selection, and installer scripts stop creating or
|
|
249
251
|
expecting separate editable bindings for the retired distributions.
|
|
250
252
|
|
|
251
253
|
The `apps/.sources/pz` Git checkout and manifest identity remain unchanged.
|
|
@@ -426,9 +428,10 @@ The cutover is complete only when all of the following pass:
|
|
|
426
428
|
2. no retired base `pyproject.toml`, lock, build target, publish target, or
|
|
427
429
|
dependency remains;
|
|
428
430
|
3. root `uv lock --check` and the combined PZ test suite pass;
|
|
429
|
-
4.
|
|
430
|
-
`pz-cli
|
|
431
|
-
contract tests pass;
|
|
431
|
+
4. the initial affected `pz_apps` artifacts are `5.0.1`, their base dependency
|
|
432
|
+
is only `pz-cli>=5.0.0,<6`, their app-to-app compatibility ranges and locks
|
|
433
|
+
are consistent, and their contract tests pass; subsequent app versions are
|
|
434
|
+
independent and need not remain equal;
|
|
432
435
|
5. a clean build produces one `pz_cli-5.0.0` wheel and one matching sdist;
|
|
433
436
|
6. the wheel contains exactly the intended `pz_core`, `pz_settings_center`, and
|
|
434
437
|
`pz_foundation` package trees plus their declared resources and package docs;
|
|
@@ -441,8 +444,9 @@ The cutover is complete only when all of the following pass:
|
|
|
441
444
|
resources/docs;
|
|
442
445
|
10. an environment with any retired distribution fails the new integrity
|
|
443
446
|
diagnostic with an actionable clean-environment migration message;
|
|
444
|
-
11.
|
|
445
|
-
|
|
447
|
+
11. the shell-resolved installed `pz-cli` remains the control plane while both
|
|
448
|
+
source-checkout and installed-wheel project runtime targets produce the same
|
|
449
|
+
runtime contracts; a project source target never takes over the authoring CLI;
|
|
446
450
|
12. source and installed runtime version checks both resolve exactly
|
|
447
451
|
`pz-cli==5.0.0`, never `pz` or `0.0.0`;
|
|
448
452
|
13. authoring reconciliation emits only the `pz-cli` editable distribution
|
|
@@ -19,12 +19,13 @@ The repository may contain many minimal apps. One app release must not silently
|
|
|
19
19
|
commit another app's changes.
|
|
20
20
|
|
|
21
21
|
Publishing first checks whether `project_dir` itself is a Git repository root
|
|
22
|
-
whose root `pyproject.toml` distribution
|
|
23
|
-
|
|
24
|
-
release scope
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
whose root `pyproject.toml` distribution or `[tool.uv.workspace].members`
|
|
23
|
+
uniquely matches the requested app. A root distribution match gives the whole
|
|
24
|
+
repository one release scope; a workspace-member match gives only that package
|
|
25
|
+
path. Only when the current Git workspace does not match does publishing
|
|
26
|
+
enumerate usable Git repositories under `apps/.sources`. A `tool.uv.sources`
|
|
27
|
+
path is only a dependency source, so a business-owned copied app is not a
|
|
28
|
+
publish source.
|
|
28
29
|
|
|
29
30
|
This is a constrained reuse of `iter_workspace_packages` /
|
|
30
31
|
`resolve_workspace_package`, not a second package scanner. The shared resolver
|
|
@@ -78,22 +79,24 @@ distribution version must match exactly.
|
|
|
78
79
|
|
|
79
80
|
The Git root is selected in this order:
|
|
80
81
|
|
|
81
|
-
1. if `project_dir` resolves to the top level of its Git worktree
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
1. if `project_dir` resolves to the top level of its Git worktree, search its
|
|
83
|
+
root distribution and `[tool.uv.workspace].members`; select the unique root
|
|
84
|
+
or member match without considering `tool.uv.sources` dependency paths;
|
|
84
85
|
2. otherwise enumerate direct source entries under `apps/.sources`, resolve
|
|
85
86
|
each entry to its canonical Git worktree, and use the existing
|
|
86
87
|
workspace-package discovery program inside each distinct Git root.
|
|
87
88
|
|
|
88
89
|
Nearest-parent Git discovery from an arbitrary child directory remains
|
|
89
|
-
insufficient.
|
|
90
|
-
top level and its root distribution
|
|
90
|
+
insufficient. Current-workspace publishing is explicit only when `project_dir`
|
|
91
|
+
is the Git top level and its root distribution or formal workspace member
|
|
92
|
+
matches.
|
|
91
93
|
|
|
92
94
|
Resolution has exactly five outcomes:
|
|
93
95
|
|
|
94
|
-
1. the project Git root
|
|
95
|
-
|
|
96
|
-
|
|
96
|
+
1. the project Git root or one formal workspace member exactly matches the
|
|
97
|
+
requested distribution: return that package root and the current owning Git
|
|
98
|
+
root;
|
|
99
|
+
2. no current-workspace match and no usable Git repository exists under
|
|
97
100
|
`apps/.sources`: fail with
|
|
98
101
|
`PZ_PUB_GIT_REQUIRED`;
|
|
99
102
|
3. repositories exist but none contains the requested app: fail with
|
|
@@ -238,6 +241,26 @@ step. It must not hide an already-created commit or tag when a later step fails.
|
|
|
238
241
|
build validation, publish-lock validation, and target planning, but performs no
|
|
239
242
|
Git index mutation, commit, tag creation, or remote upload.
|
|
240
243
|
|
|
244
|
+
## Package Index Boundary
|
|
245
|
+
|
|
246
|
+
The official app distributions are published only to the configured internal
|
|
247
|
+
PyPI/devpi service. `pz app ...` consumes their released versions from that
|
|
248
|
+
internal service, while `pz dev ...` continues to obtain source from the Git
|
|
249
|
+
cache and either imports a business-owned copy or exposes a managed checkout
|
|
250
|
+
through bindings.
|
|
251
|
+
|
|
252
|
+
`pz pub` without `--target` must resolve the target source root's explicit
|
|
253
|
+
`tool.pz.publish.default_target` to a configured internal index or upload URL.
|
|
254
|
+
An absent or empty default target is an error; PZ must never fall through to
|
|
255
|
+
the package backend's public default index. `devpi_dev`, `devpi_prod`, and
|
|
256
|
+
`devpi_pub` are all channels of the internal service; `devpi_pub` is the
|
|
257
|
+
internal shared-release channel, not `pypi.org`.
|
|
258
|
+
|
|
259
|
+
Publishing to `pypi.org` is a separate, explicit exception. It requires
|
|
260
|
+
`--target pypi` (or `-t pypi`) and must pass the project publish lock. The
|
|
261
|
+
default lock allows only the `pz-cli` distribution; a project that authorizes
|
|
262
|
+
another distribution must replace that allowlist explicitly.
|
|
263
|
+
|
|
241
264
|
## Failure And Retry Semantics
|
|
242
265
|
|
|
243
266
|
The workflow is forward-recoverable, not rollback-by-history-rewrite:
|
|
@@ -341,8 +364,9 @@ Tests must cover:
|
|
|
341
364
|
1. commit stages and commits only the selected minimal-app path;
|
|
342
365
|
2. tracked changes, deletions, and untracked source files in the target app are
|
|
343
366
|
included;
|
|
344
|
-
3. an exact
|
|
345
|
-
host root still falls back to `.sources` discovery
|
|
367
|
+
3. an exact root distribution or formal workspace member publishes directly,
|
|
368
|
+
while a non-matching host root still falls back to `.sources` discovery and
|
|
369
|
+
never treats `tool.uv.sources` as publish membership;
|
|
346
370
|
4. no root or `.sources` Git source, no matching app, multiple matching Git roots,
|
|
347
371
|
staged changes, ambiguous shared-root changes, detached HEAD, missing Git
|
|
348
372
|
identity, and non-Git package roots fail before mutation;
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pz-cli"
|
|
7
|
-
version = "5.0.
|
|
7
|
+
version = "5.0.2"
|
|
8
8
|
description = "PZ CLI, runtime compiler, settings owner, and foundation runtime"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -45,7 +45,7 @@ db-mysql = ["pymysql>=1.1,<2.0"]
|
|
|
45
45
|
pz = "pz_core.pz_launcher:main"
|
|
46
46
|
|
|
47
47
|
[project.entry-points."pz.root_cli"]
|
|
48
|
-
|
|
48
|
+
workers = "pz_foundation.root_cli:get_root_command_handlers"
|
|
49
49
|
|
|
50
50
|
[dependency-groups]
|
|
51
51
|
dev = [
|
|
@@ -81,7 +81,7 @@ norecursedirs = [".git", ".venv", "__pycache__", "build", "dist", ".runtime"]
|
|
|
81
81
|
package_role = "runtime_bootstrap"
|
|
82
82
|
|
|
83
83
|
[tool.pz.publish]
|
|
84
|
-
default_target = "
|
|
84
|
+
default_target = "pypi"
|
|
85
85
|
|
|
86
86
|
[tool.pz.publish.targets.devpi_dev]
|
|
87
87
|
publish_url = "https://devpi.seobot.cc/packages/dev/"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from dataclasses import dataclass
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from typing import Any, Protocol, runtime_checkable
|
|
6
6
|
|
|
@@ -10,6 +10,7 @@ class PresignInfo:
|
|
|
10
10
|
method: str
|
|
11
11
|
url: str
|
|
12
12
|
expires_in_seconds: int
|
|
13
|
+
headers: dict[str, str] = field(default_factory=dict)
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
@dataclass(frozen=True, slots=True)
|
|
@@ -23,6 +24,10 @@ class StoredObject:
|
|
|
23
24
|
class StoragePort(Protocol):
|
|
24
25
|
def store_bytes(self, object_key: str, payload: bytes, *, content_type: str | None = None) -> StoredObject: ...
|
|
25
26
|
|
|
27
|
+
def stat(self, object_key: str) -> StoredObject: ...
|
|
28
|
+
|
|
29
|
+
def read_range(self, object_key: str, *, offset: int = 0, length: int) -> bytes: ...
|
|
30
|
+
|
|
26
31
|
def delete(self, object_key: str) -> None: ...
|
|
27
32
|
|
|
28
33
|
def presign_get(self, object_key: str, *, expires_in_seconds: int) -> PresignInfo: ...
|