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.
Files changed (603) hide show
  1. {pz_cli-5.0.0 → pz_cli-5.0.2}/PKG-INFO +3 -3
  2. {pz_cli-5.0.0 → pz_cli-5.0.2}/README.md +2 -2
  3. {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/specs/2026-07-13-pz-app-version-resolution-design.md +66 -34
  4. {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/specs/2026-07-13-pz-cli-single-wheel-design.md +17 -13
  5. {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
  6. {pz_cli-5.0.0 → pz_cli-5.0.2}/pyproject.toml +3 -3
  7. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/_contracts.py +6 -1
  8. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/cli/workers.py +139 -56
  9. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/configs/default.jsonc +27 -2
  10. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/tortoise_manager.py +0 -5
  11. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/docs/distribution-README.md +8 -5
  12. {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
  13. {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
  14. pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/edge_cache.py +46 -0
  15. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/web.py +38 -62
  16. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/lifecycle.py +6 -0
  17. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/managed_workers.py +272 -44
  18. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/cache_control.py +125 -20
  19. pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/middlewares/request_logging.py +133 -0
  20. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/security_headers/csp_nonce.py +101 -4
  21. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/core.py +17 -1
  22. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/feishu_bot.py +8 -1
  23. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/telegram_bot.py +17 -6
  24. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/public.py +74 -1
  25. pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/request_ids.py +92 -0
  26. pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/resource_delivery.py +101 -0
  27. pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/root_cli.py +16 -0
  28. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/declarations.py +130 -143
  29. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/loaders.py +58 -15
  30. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/manifest.py +77 -71
  31. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/registry.py +30 -10
  32. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/runtime.py +0 -30
  33. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/settings.py +31 -0
  34. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/storage/local.py +34 -3
  35. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/storage/public.py +24 -4
  36. pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/storage/s3.py +219 -0
  37. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/storage/service.py +29 -0
  38. pz_cli-5.0.2/pz_contrib/pz_foundation/pz_foundation/third_party.py +291 -0
  39. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/urls.py +1 -2
  40. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_asset_directory_contract.py +18 -8
  41. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_managed_workers_contract.py +194 -14
  42. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_public_contract.py +17 -0
  43. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_settings_surface_contract.py +21 -1
  44. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_managed_workers_cli.py +61 -5
  45. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_observability_logger_contract.py +9 -4
  46. pz_cli-5.0.2/pz_contrib/pz_foundation/tests/test_request_id_contract.py +136 -0
  47. pz_cli-5.0.2/pz_contrib/pz_foundation/tests/test_resource_delivery_contract.py +66 -0
  48. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_routing_declarations.py +104 -1
  49. pz_cli-5.0.2/pz_contrib/pz_foundation/tests/test_runtime_middlewares.py +718 -0
  50. pz_cli-5.0.2/pz_contrib/pz_foundation/tests/test_storage_backends.py +329 -0
  51. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_tortoise_manager_runtime_recovery.py +9 -0
  52. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/docs/distribution-README.md +1 -1
  53. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/project_helpers.py +5 -5
  54. pz_cli-5.0.2/pz_contrib/pz_settings_center/tests/test_project_helpers_contract.py +11 -0
  55. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/tests/test_metadata_contract.py +1 -1
  56. pz_cli-5.0.2/pz_core/pz_core/app_availability.py +476 -0
  57. pz_cli-5.0.2/pz_core/pz_core/app_sources.py +355 -0
  58. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/app_discovery.py +71 -0
  59. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/apps/compiler.py +24 -26
  60. pz_cli-5.0.2/pz_core/pz_core/assembly/cli/__init__.py +20 -0
  61. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/cli/compiler.py +83 -21
  62. pz_cli-5.0.2/pz_core/pz_core/assembly/cli/inventory.py +43 -0
  63. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/diagnostics/checks.py +3 -4
  64. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/diagnostics/dev_sources.py +143 -11
  65. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/extensions/compiler.py +12 -0
  66. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/project/discovery.py +23 -0
  67. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/settings/compiler.py +13 -24
  68. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/app_init_service.py +428 -38
  69. pz_cli-5.0.2/pz_core/pz_core/authoring/app_source_providers.py +398 -0
  70. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/app_versions.py +424 -23
  71. pz_cli-5.0.2/pz_core/pz_core/authoring/cli.py +149 -0
  72. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/commands.py +1211 -343
  73. pz_cli-5.0.2/pz_core/pz_core/authoring/dependency_checks.py +520 -0
  74. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/dev_git.py +71 -3
  75. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/dev_import.py +514 -61
  76. pz_cli-5.0.2/pz_core/pz_core/authoring/dev_project.py +72 -0
  77. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/dev_sources.py +224 -12
  78. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/env_cli.py +7 -0
  79. pz_cli-5.0.2/pz_core/pz_core/authoring/file_transaction.py +374 -0
  80. pz_cli-5.0.2/pz_core/pz_core/authoring/files.py +215 -0
  81. pz_cli-5.0.2/pz_core/pz_core/authoring/installed_app_dependencies.py +266 -0
  82. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/official_dev_sources.py +104 -17
  83. pz_cli-5.0.2/pz_core/pz_core/authoring/orchestration.py +78 -0
  84. pz_cli-5.0.2/pz_core/pz_core/authoring/orchestration_service.py +1042 -0
  85. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_default.jsonc +7 -0
  86. pz_cli-5.0.2/pz_core/pz_core/authoring/project_dependencies.py +34 -0
  87. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_metadata_service.py +94 -13
  88. pz_cli-5.0.2/pz_core/pz_core/authoring/project_repair.py +359 -0
  89. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_settings_service.py +105 -40
  90. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_state.py +29 -8
  91. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/publish_source.py +20 -13
  92. pz_cli-5.0.2/pz_core/pz_core/authoring/pyproject_repair.py +661 -0
  93. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/release.py +186 -25
  94. pz_cli-5.0.2/pz_core/pz_core/authoring/root_cli.py +23 -0
  95. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/scaffold_service.py +60 -9
  96. pz_cli-5.0.2/pz_core/pz_core/authoring/source_closure.py +623 -0
  97. pz_cli-5.0.2/pz_core/pz_core/authoring/source_identity.py +418 -0
  98. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/sync_service.py +182 -61
  99. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/pyproject.py +1 -1
  100. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/static_app_js.py +10 -1
  101. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/urls.py +3 -6
  102. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/agents.py +1 -1
  103. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/apps_container_readme.py +2 -1
  104. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/pyproject.py +1 -1
  105. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/readme.py +6 -6
  106. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/workspace.py +86 -0
  107. pz_cli-5.0.2/pz_core/pz_core/cli.py +312 -0
  108. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/cli_options.py +18 -2
  109. pz_cli-5.0.2/pz_core/pz_core/cli_routing.py +122 -0
  110. pz_cli-5.0.2/pz_core/pz_core/command_catalog.py +259 -0
  111. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/extensions/__init__.py +2 -0
  112. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/extensions/registry.py +5 -1
  113. pz_cli-5.0.2/pz_core/pz_core/docs/README.md +56 -0
  114. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/docs/distribution-README.md +55 -31
  115. 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
  116. {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
  117. {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
  118. {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
  119. {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
  120. {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
  121. {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
  122. {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
  123. 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
  124. {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
  125. {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
  126. {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
  127. {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
  128. {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
  129. {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
  130. 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
  131. {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
  132. {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
  133. {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
  134. 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
  135. pz_cli-5.0.2/pz_core/pz_core/import_ref.py +50 -0
  136. pz_cli-5.0.2/pz_core/pz_core/imported_command.py +36 -0
  137. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/storage/ports.py +6 -1
  138. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/project_runtime_cli.py +25 -32
  139. pz_cli-5.0.2/pz_core/pz_core/project_runtime_entry.py +26 -0
  140. pz_cli-5.0.2/pz_core/pz_core/pz_launcher.py +40 -0
  141. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/root_cli.py +24 -4
  142. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/cli/app_commands.py +277 -58
  143. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/cli/check.py +43 -3
  144. pz_cli-5.0.2/pz_core/pz_core/runtime/cli/main.py +91 -0
  145. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/cli/resources.py +3 -5
  146. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/environment_integrity.py +3 -1
  147. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/storage.py +127 -5
  148. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/host.py +6 -1
  149. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/host_runner.py +46 -16
  150. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/http/app.py +6 -14
  151. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/http_timing.py +3 -2
  152. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/lifecycle/__init__.py +2 -0
  153. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/plan.py +6 -2
  154. pz_cli-5.0.2/pz_core/pz_core/runtime/request_id.py +62 -0
  155. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/settings.py +5 -1
  156. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/worker/engine.py +111 -121
  157. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/scripts/README.md +4 -4
  158. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/assembly/test_visible_app_discovery.py +38 -1
  159. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_app_init_from_bindings.py +188 -2
  160. pz_cli-5.0.2/pz_core/tests/authoring/test_app_source_providers.py +209 -0
  161. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_app_versions.py +336 -18
  162. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_business_app_id.py +2 -2
  163. pz_cli-5.0.2/pz_core/tests/authoring/test_dependency_checks.py +185 -0
  164. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_binding_transaction.py +234 -0
  165. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_check_diagnostics.py +88 -2
  166. pz_cli-5.0.2/pz_core/tests/authoring/test_dev_cli.py +666 -0
  167. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_git_integration.py +22 -0
  168. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_import.py +154 -1
  169. pz_cli-5.0.2/pz_core/tests/authoring/test_file_transaction.py +168 -0
  170. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_ide_projection.py +78 -29
  171. pz_cli-5.0.2/pz_core/tests/authoring/test_installed_app_dependencies.py +134 -0
  172. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_orchestration_service.py +257 -40
  173. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_project_metadata_service.py +122 -1
  174. pz_cli-5.0.2/pz_core/tests/authoring/test_project_pyproject_repair.py +155 -0
  175. pz_cli-5.0.2/pz_core/tests/authoring/test_project_repair_environment.py +177 -0
  176. pz_cli-5.0.2/pz_core/tests/authoring/test_repair_cli.py +108 -0
  177. pz_cli-5.0.2/pz_core/tests/authoring/test_source_closure.py +419 -0
  178. pz_cli-5.0.2/pz_core/tests/authoring/test_source_identity.py +72 -0
  179. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_source_locator_resolution.py +66 -6
  180. pz_cli-5.0.2/pz_core/tests/authoring/test_sync_service_artifacts.py +332 -0
  181. pz_cli-5.0.2/pz_core/tests/core/test_app_availability.py +131 -0
  182. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_app_registry_contract.py +39 -0
  183. pz_cli-5.0.2/pz_core/tests/core/test_app_source_catalog.py +82 -0
  184. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_cli_list_contract.py +149 -0
  185. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_http_timing_contract.py +4 -4
  186. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_infra_contracts.py +6 -0
  187. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_infra_facades_contract.py +9 -0
  188. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_project_settings_contract.py +47 -10
  189. pz_cli-5.0.2/pz_core/tests/core/test_request_id_contract.py +32 -0
  190. pz_cli-5.0.2/pz_core/tests/core/test_root_cli_discovery.py +67 -0
  191. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_runtime_access_contract.py +62 -6
  192. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_runtime_facades_contract.py +154 -23
  193. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_runtime_plan_app_factory_contract.py +8 -4
  194. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_runtime_plan_contract.py +7 -3
  195. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/runtime/test_environment_integrity.py +6 -10
  196. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_cli_contract.py +532 -321
  197. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_publish_contract.py +242 -2
  198. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_runtime_resources_cli.py +2 -2
  199. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_scaffold_service_contract.py +1 -0
  200. {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/pz_release/distributions.py +81 -16
  201. {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/tests/test_distribution_graph.py +30 -18
  202. {pz_cli-5.0.0 → pz_cli-5.0.2}/uv.lock +1 -1
  203. pz_cli-5.0.0/docs/superpowers/specs/2026-07-12-pz-shared-sources-symlink-design.md +0 -80
  204. pz_cli-5.0.0/docs/superpowers/specs/2026-07-13-pz-dev-add-link-source-ownership-design.md +0 -493
  205. pz_cli-5.0.0/pz_contrib/pz_foundation/pz_foundation/middlewares/request_logging.py +0 -104
  206. pz_cli-5.0.0/pz_contrib/pz_foundation/pz_foundation/root_cli.py +0 -20
  207. pz_cli-5.0.0/pz_contrib/pz_foundation/pz_foundation/storage/s3.py +0 -116
  208. pz_cli-5.0.0/pz_contrib/pz_foundation/tests/test_runtime_middlewares.py +0 -346
  209. pz_cli-5.0.0/pz_contrib/pz_foundation/tests/test_storage_backends.py +0 -72
  210. pz_cli-5.0.0/pz_core/pz_core/assembly/cli/__init__.py +0 -9
  211. pz_cli-5.0.0/pz_core/pz_core/authoring/cli.py +0 -192
  212. pz_cli-5.0.0/pz_core/pz_core/authoring/files.py +0 -109
  213. pz_cli-5.0.0/pz_core/pz_core/authoring/orchestration_service.py +0 -558
  214. pz_cli-5.0.0/pz_core/pz_core/authoring/root_cli.py +0 -28
  215. pz_cli-5.0.0/pz_core/pz_core/cli.py +0 -291
  216. pz_cli-5.0.0/pz_core/pz_core/docs/README.md +0 -20
  217. 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
  218. 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
  219. 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
  220. 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
  221. pz_cli-5.0.0/pz_core/pz_core/pz_launcher.py +0 -209
  222. pz_cli-5.0.0/pz_core/pz_core/runtime/cli/main.py +0 -89
  223. pz_cli-5.0.0/pz_core/tests/authoring/test_dev_cli.py +0 -382
  224. pz_cli-5.0.0/pz_core/tests/authoring/test_sync_service_artifacts.py +0 -36
  225. {pz_cli-5.0.0 → pz_cli-5.0.2}/.gitignore +0 -0
  226. {pz_cli-5.0.0 → pz_cli-5.0.2}/AGENTS.md +0 -0
  227. {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/history/pz_contrib/2026-04-22-contrib-deprecated-code-audit.md +0 -0
  228. {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/history/pz_contrib/README.md +0 -0
  229. {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/history/pz_contrib/distribution-README.md +0 -0
  230. {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/in_progress/README.md +0 -0
  231. {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
  232. {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
  233. {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
  234. {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/plans/2026-06-27-page-center-pseo-admin.md +0 -0
  235. {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/specs/2026-06-27-page-center-pseo-admin-design.md +0 -0
  236. {pz_cli-5.0.0 → pz_cli-5.0.2}/docs/superpowers/specs/2026-07-13-pz-vscode-shadow-projection-design.md +0 -0
  237. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/.gitignore +0 -0
  238. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/AGENTS.md +0 -0
  239. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/foundation_testsupport/__init__.py +0 -0
  240. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/foundation_testsupport/orm_models.py +0 -0
  241. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/__init__.py +0 -0
  242. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/_errors.py +0 -0
  243. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/api.py +0 -0
  244. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/apps.py +0 -0
  245. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/auth/__init__.py +0 -0
  246. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/cache_control.py +0 -0
  247. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/cli/__init__.py +0 -0
  248. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/configs/__init__.py +0 -0
  249. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/configs/default.env +0 -0
  250. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/__init__.py +0 -0
  251. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/aerich_executor.py +0 -0
  252. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/config.py +0 -0
  253. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/connection_manager.py +0 -0
  254. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/connection_probe.py +0 -0
  255. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/database.py +0 -0
  256. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/deps.py +0 -0
  257. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/lifecycle_status.py +0 -0
  258. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/migrations.py +0 -0
  259. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/mysql.py +0 -0
  260. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/postgresql.py +0 -0
  261. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/production_pool_fallback.py +0 -0
  262. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/public.py +0 -0
  263. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/session.py +0 -0
  264. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/sqlite.py +0 -0
  265. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/db/tortoise_psycopg.py +0 -0
  266. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/docs/README.md +0 -0
  267. {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
  268. {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
  269. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/health.py +0 -0
  270. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/__init__.py +0 -0
  271. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/builder.py +0 -0
  272. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/cache_runtime.py +0 -0
  273. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/__init__.py +0 -0
  274. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/aerich_config.py +0 -0
  275. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/config.py +0 -0
  276. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/connection_manager.py +0 -0
  277. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/deps.py +0 -0
  278. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/orm_retry_patch.py +0 -0
  279. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/request_adapter.py +0 -0
  280. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/router.py +0 -0
  281. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/session.py +0 -0
  282. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/db/tortoise_manager.py +0 -0
  283. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/idempotency.py +0 -0
  284. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/lifespan.py +0 -0
  285. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/host/redis_runtime.py +0 -0
  286. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/infra_provider.py +0 -0
  287. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/kv/__init__.py +0 -0
  288. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/kv/cache.py +0 -0
  289. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/kv/deps.py +0 -0
  290. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/kv/public.py +0 -0
  291. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/kv/redis_manager.py +0 -0
  292. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/lazy_exports.py +0 -0
  293. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/lazy_imports.py +0 -0
  294. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/__init__.py +0 -0
  295. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/_settings.py +0 -0
  296. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/analytics.py +0 -0
  297. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/compression.py +0 -0
  298. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/cors.py +0 -0
  299. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/geo_country.py +0 -0
  300. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/inner_router.py +0 -0
  301. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/rate_limited/__init__.py +0 -0
  302. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/rate_limited/key_limiter.py +0 -0
  303. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/route_owner.py +0 -0
  304. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/security_csrf.py +0 -0
  305. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/security_headers/__init__.py +0 -0
  306. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/security_headers/conflicts.py +0 -0
  307. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/middlewares/security_headers/security_headers.py +0 -0
  308. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/migrations/__init__.py +0 -0
  309. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/migrations/pz_foundation/__init__.py +0 -0
  310. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/models.py +0 -0
  311. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/notifications/__init__.py +0 -0
  312. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/notifications/email.py +0 -0
  313. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/notifications/public.py +0 -0
  314. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/__init__.py +0 -0
  315. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/http.py +0 -0
  316. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/__init__.py +0 -0
  317. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/_bot_settings.py +0 -0
  318. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/bot_message.py +0 -0
  319. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/logger/delivery_audit.py +0 -0
  320. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/metrics.py +0 -0
  321. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/observability/runtime.py +0 -0
  322. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/resources/__init__.py +0 -0
  323. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/resources/builder.py +0 -0
  324. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/resources/images.py +0 -0
  325. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/__init__.py +0 -0
  326. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/canonical.py +0 -0
  327. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/convertors.py +0 -0
  328. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/exports.py +0 -0
  329. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/manifest_provider.py +0 -0
  330. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/mounts.py +0 -0
  331. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/ordering.py +0 -0
  332. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/routing/utils.py +0 -0
  333. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/settings_normalization.py +0 -0
  334. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/storage/__init__.py +0 -0
  335. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/utils/__init__.py +0 -0
  336. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/utils/merge.py +0 -0
  337. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/pz_foundation/worker_replicas.py +0 -0
  338. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/conftest.py +0 -0
  339. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/fixtures/__init__.py +0 -0
  340. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/fixtures/orm_models.py +0 -0
  341. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_aerich_executor_contract.py +0 -0
  342. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_database_probe_contract.py +0 -0
  343. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_database_url_options.py +0 -0
  344. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_distribution_contract.py +0 -0
  345. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_aerich_executor.py +0 -0
  346. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_analytics_contract.py +0 -0
  347. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_database_runtime_contract.py +0 -0
  348. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_database_session.py +0 -0
  349. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_db_connection_manager_contract.py +0 -0
  350. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_db_lifecycle_status_contract.py +0 -0
  351. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_db_request_adapter_contract.py +0 -0
  352. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_host_db_session_contract.py +0 -0
  353. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_host_lifespan_contract.py +0 -0
  354. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_lazy_imports_contract.py +0 -0
  355. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_mail_runtime_contract.py +0 -0
  356. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_prometheus_metrics.py +0 -0
  357. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_provider_contract.py +0 -0
  358. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_redis_config.py +0 -0
  359. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_redis_runtime_contract.py +0 -0
  360. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_resource_images_contract.py +0 -0
  361. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_security_headers_contract.py +0 -0
  362. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_tortoise_model_binding.py +0 -0
  363. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_foundation_tortoise_psycopg_contract.py +0 -0
  364. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_key_limiter.py +0 -0
  365. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_observability_bot_backpressure.py +0 -0
  366. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_observability_lazy_import_contract.py +0 -0
  367. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_orm_retry_patch.py +0 -0
  368. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_redis_manager.py +0 -0
  369. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_resource_images.py +0 -0
  370. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_route_ordering.py +0 -0
  371. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_route_owner_middleware.py +0 -0
  372. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_settings_template_contract.py +0 -0
  373. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_utils_merge.py +0 -0
  374. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_foundation/tests/test_v5_regression_contract.py +0 -0
  375. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/__init__.py +0 -0
  376. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/api/__init__.py +0 -0
  377. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/api/runtime_overrides.py +0 -0
  378. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/apps.py +0 -0
  379. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/configs/__init__.py +0 -0
  380. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/configs/default.env +0 -0
  381. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/configs/default.jsonc +0 -0
  382. {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
  383. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/docs/README.md +0 -0
  384. {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
  385. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/integration_payload.py +0 -0
  386. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/public.py +0 -0
  387. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/routing_helpers.py +0 -0
  388. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/runtime_override_provider.py +0 -0
  389. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/typed_settings.py +0 -0
  390. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/pz_settings_center/urls.py +0 -0
  391. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/tests/test_integration_payload.py +0 -0
  392. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/pz_settings_center/tests/test_runtime_overrides_contract.py +0 -0
  393. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_contrib/tests/test_minimal_dependency_direction_contract.py +0 -0
  394. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/.gitignore +0 -0
  395. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/AGENTS.md +0 -0
  396. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/__init__.py +0 -0
  397. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/__main__.py +0 -0
  398. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/app.py +0 -0
  399. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/__init__.py +0 -0
  400. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/apps/__init__.py +0 -0
  401. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/apps/providers.py +0 -0
  402. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/diagnostics/__init__.py +0 -0
  403. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/events/__init__.py +0 -0
  404. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/events/compiler.py +0 -0
  405. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/extensions/__init__.py +0 -0
  406. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/infra/__init__.py +0 -0
  407. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/infra/compiler.py +0 -0
  408. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/lifecycle/__init__.py +0 -0
  409. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/lifecycle/compiler.py +0 -0
  410. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/middlewares/__init__.py +0 -0
  411. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/middlewares/compiler.py +0 -0
  412. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/project/__init__.py +0 -0
  413. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/project/compiler.py +0 -0
  414. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/project/context.py +0 -0
  415. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/resources/__init__.py +0 -0
  416. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/resources/compiler.py +0 -0
  417. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/resources/settings.py +0 -0
  418. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/routes/__init__.py +0 -0
  419. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/routes/compiler.py +0 -0
  420. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/runtime_manifests/__init__.py +0 -0
  421. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/runtime_manifests/compiler.py +0 -0
  422. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/settings/__init__.py +0 -0
  423. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/settings/host_project_overrides.py +0 -0
  424. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/assembly/settings/host_runtime_endpoint.py +0 -0
  425. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/__init__.py +0 -0
  426. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/conflicts.py +0 -0
  427. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/dev_bindings.py +0 -0
  428. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/dev_manifest.py +0 -0
  429. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/ide_projection.py +0 -0
  430. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/naming.py +0 -0
  431. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/official_sources.json +0 -0
  432. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_defaults.py +0 -0
  433. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_settings_checks.py +0 -0
  434. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/project_settings_cli.py +0 -0
  435. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/publish_git.py +0 -0
  436. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/publish_lock.py +0 -0
  437. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/repo_keys.py +0 -0
  438. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/__init__.py +0 -0
  439. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/api.py +0 -0
  440. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/apps.py +0 -0
  441. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/auth_package_init.py +0 -0
  442. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/auth_readme.py +0 -0
  443. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/configs_package_init.py +0 -0
  444. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/default_env.py +0 -0
  445. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/default_jsonc.py +0 -0
  446. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/locales_readme.py +0 -0
  447. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/migrations_readme.py +0 -0
  448. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/models.py +0 -0
  449. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/package_init.py +0 -0
  450. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/pages_base.py +0 -0
  451. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/pages_readme.py +0 -0
  452. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/public.py +0 -0
  453. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/readme.py +0 -0
  454. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/settings.py +0 -0
  455. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/static_readme.py +0 -0
  456. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/template_config_page.py +0 -0
  457. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/template_index_html.py +0 -0
  458. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/templates_readme.py +0 -0
  459. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/app/views.py +0 -0
  460. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/__init__.py +0 -0
  461. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/main_py.py +0 -0
  462. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/project_env.py +0 -0
  463. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/pz_env_env.py +0 -0
  464. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/pz_env_jsonc.py +0 -0
  465. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/pz_jsonc.py +0 -0
  466. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/project/root_gitkeep.py +0 -0
  467. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/shared/__init__.py +0 -0
  468. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/templates/shared/text.py +0 -0
  469. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/authoring/venv_service.py +0 -0
  470. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/__init__.py +0 -0
  471. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/errors/__init__.py +0 -0
  472. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/errors/models.py +0 -0
  473. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/events/__init__.py +0 -0
  474. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/events/registry.py +0 -0
  475. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/health/__init__.py +0 -0
  476. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/health/contracts.py +0 -0
  477. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/middlewares/__init__.py +0 -0
  478. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/middlewares/models.py +0 -0
  479. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/routing/__init__.py +0 -0
  480. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/routing/models.py +0 -0
  481. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/core/settings_contracts.py +0 -0
  482. {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
  483. {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
  484. {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
  485. {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
  486. {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
  487. {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
  488. {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
  489. {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
  490. {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
  491. {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
  492. {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
  493. {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
  494. {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
  495. {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
  496. {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
  497. {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
  498. {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
  499. {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
  500. {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
  501. {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
  502. {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
  503. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/__init__.py +0 -0
  504. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/db/__init__.py +0 -0
  505. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/db/contracts.py +0 -0
  506. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/health/__init__.py +0 -0
  507. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/health/contracts.py +0 -0
  508. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/kv/__init__.py +0 -0
  509. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/kv/contracts.py +0 -0
  510. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/observability/__init__.py +0 -0
  511. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/observability/contracts.py +0 -0
  512. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/resilience/__init__.py +0 -0
  513. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/resilience/contracts.py +0 -0
  514. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/resources/__init__.py +0 -0
  515. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/resources/contracts.py +0 -0
  516. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/settings/__init__.py +0 -0
  517. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/settings/models.py +0 -0
  518. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/infra/storage/__init__.py +0 -0
  519. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/project_root_commands.py +0 -0
  520. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/project_sources.py +0 -0
  521. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/__init__.py +0 -0
  522. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/access.py +0 -0
  523. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/adapters/__init__.py +0 -0
  524. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/adapters/base.py +0 -0
  525. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/asyncio_bridge.py +0 -0
  526. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/bindings/__init__.py +0 -0
  527. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/bindings/container.py +0 -0
  528. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/cli/__init__.py +0 -0
  529. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/cli/_args.py +0 -0
  530. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/cli/db.py +0 -0
  531. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/discovery.py +0 -0
  532. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/errors.py +0 -0
  533. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/events.py +0 -0
  534. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/__init__.py +0 -0
  535. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/_capabilities.py +0 -0
  536. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/cache.py +0 -0
  537. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/database.py +0 -0
  538. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/events.py +0 -0
  539. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/health.py +0 -0
  540. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/mail.py +0 -0
  541. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/observability.py +0 -0
  542. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/providers.py +0 -0
  543. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/facades/resources.py +0 -0
  544. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/health/__init__.py +0 -0
  545. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/health/service.py +0 -0
  546. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/http/__init__.py +0 -0
  547. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/invocation.py +0 -0
  548. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/json_safe.py +0 -0
  549. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/lifecycle/manager.py +0 -0
  550. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/plan_context.py +0 -0
  551. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/plan_snapshot.py +0 -0
  552. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/registries/__init__.py +0 -0
  553. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/registries/capabilities.py +0 -0
  554. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/registries/providers.py +0 -0
  555. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/resource_assets.py +0 -0
  556. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/run_cli.py +0 -0
  557. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/worker/__init__.py +0 -0
  558. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/runtime/worker/runtime.py +0 -0
  559. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/testing/__init__.py +0 -0
  560. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/testing/doc_route_contracts.py +0 -0
  561. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/utils/__init__.py +0 -0
  562. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/utils/env.py +0 -0
  563. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/utils/project_jsonc/__init__.py +0 -0
  564. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/utils/project_jsonc/document.py +0 -0
  565. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/pz_core/utils/project_settings.py +0 -0
  566. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/scripts/build_pz.sh +0 -0
  567. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/scripts/install_pz.sh +0 -0
  568. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/__init__.py +0 -0
  569. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/git_fixtures.py +0 -0
  570. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_bindings.py +0 -0
  571. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_git_unit.py +0 -0
  572. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_manifest.py +0 -0
  573. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/authoring/test_dev_update_remove.py +0 -0
  574. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/conftest.py +0 -0
  575. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_api_assembly_minimal_host_contract.py +0 -0
  576. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_cli_check_contract.py +0 -0
  577. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_core_layout_contract.py +0 -0
  578. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_db_cli_contract.py +0 -0
  579. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_doc_route_contracts.py +0 -0
  580. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_event_extension_registry_contract.py +0 -0
  581. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_extension_registry_contract.py +0 -0
  582. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_host_assembly_contract.py +0 -0
  583. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_middleware_manifest_contract.py +0 -0
  584. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_project_context_contract.py +0 -0
  585. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_project_jsonc_contract.py +0 -0
  586. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_project_sources_contract.py +0 -0
  587. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_release_contract.py +0 -0
  588. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_resource_manifest_contract.py +0 -0
  589. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_route_manifest_contract.py +0 -0
  590. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_runtime_import_contract.py +0 -0
  591. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_runtime_settings_contract.py +0 -0
  592. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_settings_contracts.py +0 -0
  593. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/core/test_settings_snapshot_precedence_contract.py +0 -0
  594. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_resources_cli_contract.py +0 -0
  595. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_runtime_resource_assets.py +0 -0
  596. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_utils_env_contract.py +0 -0
  597. {pz_cli-5.0.0 → pz_cli-5.0.2}/pz_core/tests/test_utils_project_settings_contract.py +0 -0
  598. {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/pyproject.toml +0 -0
  599. {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/pz_release/__init__.py +0 -0
  600. {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/pz_release/build_minimal.py +0 -0
  601. {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/pz_release/verify_minimal_runtime.py +0 -0
  602. {pz_cli-5.0.0 → pz_cli-5.0.2}/tools/release/tests/test_verify_minimal_runtime.py +0 -0
  603. {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.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
- Version 5.0.0 bundles the `pz_core`, `pz_settings_center`, and `pz_foundation`
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==5.0.0
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
- Version 5.0.0 bundles the `pz_core`, `pz_settings_center`, and `pz_foundation`
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==5.0.0
12
+ pip install pz-cli
13
13
  ```
14
14
 
15
15
  The source checkout uses one root `pyproject.toml` and one root `uv.lock`.
@@ -2,8 +2,11 @@
2
2
 
3
3
  ## Status
4
4
 
5
- This document defines the implemented contract for version-aware package
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 formal package index.
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>` is read-only and performs no project, environment,
90
- or index mutation. It resolves the formal distribution and configured package
91
- index, then reports:
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>` atomically writes the exact
110
- distribution pin and app identity/load-order declaration. It does not install
111
- the package or refresh app settings. Repeating an exact matching declaration is
112
- idempotent; conflicting local source ownership is a hard error.
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>` installs exactly one already
123
- resolved distribution version into the project environment and converges the
124
- corresponding `uv.lock` state. It does not choose latest, mutate
125
- `installed_apps`, or modify source directories. The locked and installed
126
- metadata must match the requested distribution and version before success.
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 version
137
- -> app install exact version
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, the exact declaration remains and retry resumes from install. If
143
- settings refresh fails after declaration and installation succeed, retry
144
- resumes from settings refresh. The orchestration always reports completed
145
- stages, the selected exact version, and the first incomplete stage.
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 versions found in source checkout
159
- `pyproject.toml` files as production pins.
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, tags, or publishes source.
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 preserve dependency order and fail before mutation on
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 directly from source checkout in the `pz app` command family.
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.
@@ -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
- pz_foundation = "pz_foundation.root_cli:get_root_command_handlers"
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; only their exact release
204
- pins advance with the app release train.
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` release train moves from `5.0.0` to `5.0.1` in this cutover. Every
208
- affected app's own version and every exact app-to-app pin are updated to
209
- `5.0.1`; the base dependency remains `pz-cli==5.0.0`.
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==5.0.0` before it can consume the
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, provider selection, and installer scripts stop creating or
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. all affected `pz_apps` versions are `5.0.1`, their base dependency is only
430
- `pz-cli==5.0.0`, their app-to-app pins and locks are consistent, and their
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. source checkout bootstrap and installed-wheel provider paths produce the
445
- same CLI and runtime contracts;
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 exactly matches the requested app. An
23
- exact root match is the publish source and gives the whole repository one
24
- release scope. Only when the root distribution does not match does publishing
25
- enumerate usable Git repositories under `apps/.sources` and reuse the existing
26
- workspace-package discovery program inside them. A business-owned copied app is
27
- not a publish source.
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 and the root
82
- `pyproject.toml` distribution exactly matches the requested app, select that
83
- repository root directly;
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. Root publishing is explicit only when `project_dir` is the Git
90
- top level and its root distribution matches.
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 exactly matches the requested distribution: return the
95
- repository root as both package root and owning Git root;
96
- 2. no exact root match and no usable Git repository exists under
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 matching repository root publishes directly, while a non-matching
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.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
- pz_foundation = "pz_foundation.root_cli:get_root_command_handlers"
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 = "devpi_pub"
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: ...