pz-cli 5.0.0__py3-none-any.whl
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.dist-info/METADATA +51 -0
- pz_cli-5.0.0.dist-info/RECORD +399 -0
- pz_cli-5.0.0.dist-info/WHEEL +4 -0
- pz_cli-5.0.0.dist-info/entry_points.txt +5 -0
- pz_core/__init__.py +64 -0
- pz_core/__main__.py +7 -0
- pz_core/app.py +45 -0
- pz_core/assembly/__init__.py +17 -0
- pz_core/assembly/app_discovery.py +1240 -0
- pz_core/assembly/apps/__init__.py +25 -0
- pz_core/assembly/apps/compiler.py +824 -0
- pz_core/assembly/apps/providers.py +188 -0
- pz_core/assembly/cli/__init__.py +9 -0
- pz_core/assembly/cli/compiler.py +166 -0
- pz_core/assembly/diagnostics/__init__.py +21 -0
- pz_core/assembly/diagnostics/checks.py +257 -0
- pz_core/assembly/diagnostics/dev_sources.py +569 -0
- pz_core/assembly/events/__init__.py +5 -0
- pz_core/assembly/events/compiler.py +219 -0
- pz_core/assembly/extensions/__init__.py +5 -0
- pz_core/assembly/extensions/compiler.py +696 -0
- pz_core/assembly/infra/__init__.py +6 -0
- pz_core/assembly/infra/compiler.py +272 -0
- pz_core/assembly/lifecycle/__init__.py +5 -0
- pz_core/assembly/lifecycle/compiler.py +95 -0
- pz_core/assembly/middlewares/__init__.py +19 -0
- pz_core/assembly/middlewares/compiler.py +508 -0
- pz_core/assembly/project/__init__.py +7 -0
- pz_core/assembly/project/compiler.py +9 -0
- pz_core/assembly/project/context.py +17 -0
- pz_core/assembly/project/discovery.py +227 -0
- pz_core/assembly/resources/__init__.py +19 -0
- pz_core/assembly/resources/compiler.py +310 -0
- pz_core/assembly/resources/settings.py +129 -0
- pz_core/assembly/routes/__init__.py +7 -0
- pz_core/assembly/routes/compiler.py +400 -0
- pz_core/assembly/runtime_manifests/__init__.py +13 -0
- pz_core/assembly/runtime_manifests/compiler.py +159 -0
- pz_core/assembly/settings/__init__.py +17 -0
- pz_core/assembly/settings/compiler.py +786 -0
- pz_core/assembly/settings/host_project_overrides.py +82 -0
- pz_core/assembly/settings/host_runtime_endpoint.py +207 -0
- pz_core/authoring/__init__.py +79 -0
- pz_core/authoring/app_init_service.py +946 -0
- pz_core/authoring/app_versions.py +814 -0
- pz_core/authoring/cli.py +192 -0
- pz_core/authoring/commands.py +1810 -0
- pz_core/authoring/conflicts.py +180 -0
- pz_core/authoring/dev_bindings.py +916 -0
- pz_core/authoring/dev_git.py +1087 -0
- pz_core/authoring/dev_import.py +1061 -0
- pz_core/authoring/dev_manifest.py +522 -0
- pz_core/authoring/dev_sources.py +1638 -0
- pz_core/authoring/env_cli.py +454 -0
- pz_core/authoring/files.py +109 -0
- pz_core/authoring/ide_projection.py +1129 -0
- pz_core/authoring/naming.py +58 -0
- pz_core/authoring/official_dev_sources.py +432 -0
- pz_core/authoring/official_sources.json +156 -0
- pz_core/authoring/orchestration_service.py +558 -0
- pz_core/authoring/project_default.jsonc +53 -0
- pz_core/authoring/project_defaults.py +88 -0
- pz_core/authoring/project_metadata_service.py +199 -0
- pz_core/authoring/project_settings_checks.py +51 -0
- pz_core/authoring/project_settings_cli.py +299 -0
- pz_core/authoring/project_settings_service.py +1700 -0
- pz_core/authoring/project_state.py +399 -0
- pz_core/authoring/publish_git.py +423 -0
- pz_core/authoring/publish_lock.py +188 -0
- pz_core/authoring/publish_source.py +195 -0
- pz_core/authoring/release.py +1382 -0
- pz_core/authoring/repo_keys.py +29 -0
- pz_core/authoring/root_cli.py +28 -0
- pz_core/authoring/scaffold_service.py +325 -0
- pz_core/authoring/sync_service.py +787 -0
- pz_core/authoring/templates/app/__init__.py +1 -0
- pz_core/authoring/templates/app/api.py +25 -0
- pz_core/authoring/templates/app/apps.py +31 -0
- pz_core/authoring/templates/app/auth_package_init.py +14 -0
- pz_core/authoring/templates/app/auth_readme.py +29 -0
- pz_core/authoring/templates/app/configs_package_init.py +14 -0
- pz_core/authoring/templates/app/default_env.py +18 -0
- pz_core/authoring/templates/app/default_jsonc.py +25 -0
- pz_core/authoring/templates/app/locales_readme.py +25 -0
- pz_core/authoring/templates/app/migrations_readme.py +19 -0
- pz_core/authoring/templates/app/models.py +14 -0
- pz_core/authoring/templates/app/package_init.py +8 -0
- pz_core/authoring/templates/app/pages_base.py +161 -0
- pz_core/authoring/templates/app/pages_readme.py +25 -0
- pz_core/authoring/templates/app/public.py +31 -0
- pz_core/authoring/templates/app/pyproject.py +77 -0
- pz_core/authoring/templates/app/readme.py +74 -0
- pz_core/authoring/templates/app/settings.py +46 -0
- pz_core/authoring/templates/app/static_app_js.py +24 -0
- pz_core/authoring/templates/app/static_readme.py +31 -0
- pz_core/authoring/templates/app/template_config_page.py +23 -0
- pz_core/authoring/templates/app/template_index_html.py +28 -0
- pz_core/authoring/templates/app/templates_readme.py +32 -0
- pz_core/authoring/templates/app/urls.py +36 -0
- pz_core/authoring/templates/app/views.py +36 -0
- pz_core/authoring/templates/project/__init__.py +1 -0
- pz_core/authoring/templates/project/agents.py +51 -0
- pz_core/authoring/templates/project/apps_container_readme.py +37 -0
- pz_core/authoring/templates/project/main_py.py +59 -0
- pz_core/authoring/templates/project/project_env.py +19 -0
- pz_core/authoring/templates/project/pyproject.py +26 -0
- pz_core/authoring/templates/project/pz_env_env.py +65 -0
- pz_core/authoring/templates/project/pz_env_jsonc.py +69 -0
- pz_core/authoring/templates/project/pz_jsonc.py +12 -0
- pz_core/authoring/templates/project/readme.py +94 -0
- pz_core/authoring/templates/project/root_gitkeep.py +8 -0
- pz_core/authoring/templates/shared/__init__.py +5 -0
- pz_core/authoring/templates/shared/text.py +10 -0
- pz_core/authoring/venv_service.py +87 -0
- pz_core/authoring/workspace.py +167 -0
- pz_core/cli.py +291 -0
- pz_core/cli_options.py +74 -0
- pz_core/core/__init__.py +3 -0
- pz_core/core/errors/__init__.py +5 -0
- pz_core/core/errors/models.py +117 -0
- pz_core/core/events/__init__.py +5 -0
- pz_core/core/events/registry.py +54 -0
- pz_core/core/extensions/__init__.py +51 -0
- pz_core/core/extensions/registry.py +790 -0
- pz_core/core/health/__init__.py +6 -0
- pz_core/core/health/contracts.py +10 -0
- pz_core/core/middlewares/__init__.py +6 -0
- pz_core/core/middlewares/models.py +24 -0
- pz_core/core/routing/__init__.py +5 -0
- pz_core/core/routing/models.py +21 -0
- pz_core/core/settings_contracts.py +25 -0
- pz_core/docs/README.md +20 -0
- pz_core/docs/distribution-README.md +438 -0
- pz_core/docs/pz/345/221/275/344/273/244/346/200/273/350/247/210.md +1011 -0
- 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 +240 -0
- 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 +216 -0
- 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 +403 -0
- 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 +571 -0
- 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 +1177 -0
- 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 +575 -0
- 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 +499 -0
- 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 +206 -0
- 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 +445 -0
- 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 +950 -0
- 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 +1001 -0
- 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 +102 -0
- 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 +171 -0
- 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 +402 -0
- 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 +550 -0
- 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 +1004 -0
- 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 +352 -0
- 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 +266 -0
- 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 +131 -0
- 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 +176 -0
- 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 +243 -0
- 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 +365 -0
- 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 +912 -0
- 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 +269 -0
- 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 +245 -0
- 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 +300 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/README.md +98 -0
- 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 +1073 -0
- 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 +224 -0
- 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 +671 -0
- 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 +387 -0
- 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 +592 -0
- 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 +81 -0
- 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 +161 -0
- 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 +377 -0
- 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 +117 -0
- 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 +956 -0
- 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 +84 -0
- pz_core/docs//345/217/221/347/211/210/345/211/215/346/270/205/345/215/225-4.0.11.md +84 -0
- pz_core/docs//346/226/260/346/211/213/346/214/207/345/215/227.md +422 -0
- pz_core/infra/__init__.py +17 -0
- pz_core/infra/db/__init__.py +23 -0
- pz_core/infra/db/contracts.py +73 -0
- pz_core/infra/health/__init__.py +5 -0
- pz_core/infra/health/contracts.py +8 -0
- pz_core/infra/kv/__init__.py +5 -0
- pz_core/infra/kv/contracts.py +17 -0
- pz_core/infra/observability/__init__.py +23 -0
- pz_core/infra/observability/contracts.py +142 -0
- pz_core/infra/resilience/__init__.py +5 -0
- pz_core/infra/resilience/contracts.py +17 -0
- pz_core/infra/resources/__init__.py +5 -0
- pz_core/infra/resources/contracts.py +16 -0
- pz_core/infra/settings/__init__.py +17 -0
- pz_core/infra/settings/models.py +81 -0
- pz_core/infra/storage/__init__.py +5 -0
- pz_core/infra/storage/ports.py +27 -0
- pz_core/project_root_commands.py +282 -0
- pz_core/project_runtime_cli.py +344 -0
- pz_core/project_sources.py +253 -0
- pz_core/pz_launcher.py +209 -0
- pz_core/root_cli.py +70 -0
- pz_core/runtime/__init__.py +229 -0
- pz_core/runtime/access.py +86 -0
- pz_core/runtime/adapters/__init__.py +5 -0
- pz_core/runtime/adapters/base.py +18 -0
- pz_core/runtime/asyncio_bridge.py +18 -0
- pz_core/runtime/bindings/__init__.py +5 -0
- pz_core/runtime/bindings/container.py +50 -0
- pz_core/runtime/cli/__init__.py +5 -0
- pz_core/runtime/cli/_args.py +67 -0
- pz_core/runtime/cli/app_commands.py +417 -0
- pz_core/runtime/cli/check.py +214 -0
- pz_core/runtime/cli/db.py +297 -0
- pz_core/runtime/cli/main.py +89 -0
- pz_core/runtime/cli/resources.py +280 -0
- pz_core/runtime/discovery.py +23 -0
- pz_core/runtime/environment_integrity.py +157 -0
- pz_core/runtime/errors.py +5 -0
- pz_core/runtime/events.py +87 -0
- pz_core/runtime/facades/__init__.py +38 -0
- pz_core/runtime/facades/_capabilities.py +46 -0
- pz_core/runtime/facades/cache.py +103 -0
- pz_core/runtime/facades/database.py +71 -0
- pz_core/runtime/facades/events.py +380 -0
- pz_core/runtime/facades/health.py +101 -0
- pz_core/runtime/facades/mail.py +121 -0
- pz_core/runtime/facades/observability.py +102 -0
- pz_core/runtime/facades/providers.py +75 -0
- pz_core/runtime/facades/resources.py +52 -0
- pz_core/runtime/facades/storage.py +296 -0
- pz_core/runtime/health/__init__.py +5 -0
- pz_core/runtime/health/service.py +102 -0
- pz_core/runtime/host.py +188 -0
- pz_core/runtime/host_runner.py +282 -0
- pz_core/runtime/http/__init__.py +20 -0
- pz_core/runtime/http/app.py +576 -0
- pz_core/runtime/http_timing.py +173 -0
- pz_core/runtime/invocation.py +29 -0
- pz_core/runtime/json_safe.py +47 -0
- pz_core/runtime/lifecycle/__init__.py +25 -0
- pz_core/runtime/lifecycle/manager.py +533 -0
- pz_core/runtime/plan.py +214 -0
- pz_core/runtime/plan_context.py +33 -0
- pz_core/runtime/plan_snapshot.py +177 -0
- pz_core/runtime/registries/__init__.py +27 -0
- pz_core/runtime/registries/capabilities.py +101 -0
- pz_core/runtime/registries/providers.py +396 -0
- pz_core/runtime/resource_assets.py +344 -0
- pz_core/runtime/run_cli.py +211 -0
- pz_core/runtime/settings.py +888 -0
- pz_core/runtime/worker/__init__.py +21 -0
- pz_core/runtime/worker/engine.py +921 -0
- pz_core/runtime/worker/runtime.py +25 -0
- pz_core/testing/__init__.py +15 -0
- pz_core/testing/doc_route_contracts.py +305 -0
- pz_core/utils/__init__.py +44 -0
- pz_core/utils/env.py +65 -0
- pz_core/utils/project_jsonc/__init__.py +29 -0
- pz_core/utils/project_jsonc/document.py +420 -0
- pz_core/utils/project_settings.py +99 -0
- pz_foundation/__init__.py +50 -0
- pz_foundation/_contracts.py +81 -0
- pz_foundation/_errors.py +34 -0
- pz_foundation/api.py +14 -0
- pz_foundation/apps.py +127 -0
- pz_foundation/auth/__init__.py +1 -0
- pz_foundation/cache_control.py +233 -0
- pz_foundation/cli/__init__.py +2 -0
- pz_foundation/cli/workers.py +565 -0
- pz_foundation/configs/__init__.py +0 -0
- pz_foundation/configs/default.env +15 -0
- pz_foundation/configs/default.jsonc +452 -0
- pz_foundation/db/__init__.py +94 -0
- pz_foundation/db/aerich_executor.py +664 -0
- pz_foundation/db/config.py +358 -0
- pz_foundation/db/connection_manager.py +689 -0
- pz_foundation/db/connection_probe.py +204 -0
- pz_foundation/db/database.py +1291 -0
- pz_foundation/db/deps.py +47 -0
- pz_foundation/db/lifecycle_status.py +85 -0
- pz_foundation/db/migrations.py +477 -0
- pz_foundation/db/mysql.py +57 -0
- pz_foundation/db/postgresql.py +409 -0
- pz_foundation/db/production_pool_fallback.py +143 -0
- pz_foundation/db/public.py +45 -0
- pz_foundation/db/session.py +369 -0
- pz_foundation/db/sqlite.py +15 -0
- pz_foundation/db/tortoise_manager.py +724 -0
- pz_foundation/db/tortoise_psycopg.py +148 -0
- pz_foundation/docs/README.md +18 -0
- pz_foundation/docs/distribution-README.md +319 -0
- 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 +39 -0
- 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 +680 -0
- pz_foundation/docs//350/256/276/350/256/241/346/226/207/346/241/243.md +288 -0
- 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 +119 -0
- pz_foundation/health.py +105 -0
- pz_foundation/host/__init__.py +11 -0
- pz_foundation/host/builder.py +34 -0
- pz_foundation/host/cache_runtime.py +44 -0
- pz_foundation/host/db/__init__.py +17 -0
- pz_foundation/host/db/aerich_config.py +36 -0
- pz_foundation/host/db/config.py +106 -0
- pz_foundation/host/db/connection_manager.py +48 -0
- pz_foundation/host/db/deps.py +5 -0
- pz_foundation/host/db/orm_retry_patch.py +566 -0
- pz_foundation/host/db/request_adapter.py +325 -0
- pz_foundation/host/db/router.py +28 -0
- pz_foundation/host/db/session.py +284 -0
- pz_foundation/host/db/tortoise_manager.py +10 -0
- pz_foundation/host/idempotency.py +132 -0
- pz_foundation/host/lifespan.py +247 -0
- pz_foundation/host/redis_runtime.py +100 -0
- pz_foundation/host/web.py +790 -0
- pz_foundation/infra_provider.py +236 -0
- pz_foundation/kv/__init__.py +25 -0
- pz_foundation/kv/cache.py +1166 -0
- pz_foundation/kv/deps.py +84 -0
- pz_foundation/kv/public.py +25 -0
- pz_foundation/kv/redis_manager.py +1531 -0
- pz_foundation/lazy_exports.py +43 -0
- pz_foundation/lazy_imports.py +124 -0
- pz_foundation/lifecycle.py +392 -0
- pz_foundation/managed_workers.py +1117 -0
- pz_foundation/middlewares/__init__.py +26 -0
- pz_foundation/middlewares/_settings.py +250 -0
- pz_foundation/middlewares/analytics.py +124 -0
- pz_foundation/middlewares/cache_control.py +156 -0
- pz_foundation/middlewares/compression.py +202 -0
- pz_foundation/middlewares/cors.py +62 -0
- pz_foundation/middlewares/geo_country.py +44 -0
- pz_foundation/middlewares/inner_router.py +50 -0
- pz_foundation/middlewares/rate_limited/__init__.py +3 -0
- pz_foundation/middlewares/rate_limited/key_limiter.py +115 -0
- pz_foundation/middlewares/request_logging.py +104 -0
- pz_foundation/middlewares/route_owner.py +309 -0
- pz_foundation/middlewares/security_csrf.py +44 -0
- pz_foundation/middlewares/security_headers/__init__.py +4 -0
- pz_foundation/middlewares/security_headers/conflicts.py +44 -0
- pz_foundation/middlewares/security_headers/csp_nonce.py +200 -0
- pz_foundation/middlewares/security_headers/security_headers.py +44 -0
- pz_foundation/migrations/__init__.py +1 -0
- pz_foundation/migrations/pz_foundation/__init__.py +1 -0
- pz_foundation/models.py +22 -0
- pz_foundation/notifications/__init__.py +23 -0
- pz_foundation/notifications/email.py +542 -0
- pz_foundation/notifications/public.py +31 -0
- pz_foundation/observability/__init__.py +71 -0
- pz_foundation/observability/http.py +34 -0
- pz_foundation/observability/logger/__init__.py +49 -0
- pz_foundation/observability/logger/_bot_settings.py +126 -0
- pz_foundation/observability/logger/bot_message.py +592 -0
- pz_foundation/observability/logger/core.py +385 -0
- pz_foundation/observability/logger/delivery_audit.py +84 -0
- pz_foundation/observability/logger/feishu_bot.py +199 -0
- pz_foundation/observability/logger/telegram_bot.py +194 -0
- pz_foundation/observability/metrics.py +365 -0
- pz_foundation/observability/runtime.py +68 -0
- pz_foundation/public.py +405 -0
- pz_foundation/resources/__init__.py +12 -0
- pz_foundation/resources/builder.py +900 -0
- pz_foundation/resources/images.py +363 -0
- pz_foundation/root_cli.py +20 -0
- pz_foundation/routing/__init__.py +203 -0
- pz_foundation/routing/canonical.py +486 -0
- pz_foundation/routing/convertors.py +82 -0
- pz_foundation/routing/declarations.py +843 -0
- pz_foundation/routing/exports.py +148 -0
- pz_foundation/routing/loaders.py +138 -0
- pz_foundation/routing/manifest.py +215 -0
- pz_foundation/routing/manifest_provider.py +47 -0
- pz_foundation/routing/mounts.py +101 -0
- pz_foundation/routing/ordering.py +172 -0
- pz_foundation/routing/registry.py +133 -0
- pz_foundation/routing/utils.py +28 -0
- pz_foundation/runtime.py +234 -0
- pz_foundation/settings.py +253 -0
- pz_foundation/settings_normalization.py +130 -0
- pz_foundation/storage/__init__.py +25 -0
- pz_foundation/storage/local.py +209 -0
- pz_foundation/storage/public.py +106 -0
- pz_foundation/storage/s3.py +116 -0
- pz_foundation/storage/service.py +234 -0
- pz_foundation/urls.py +19 -0
- pz_foundation/utils/__init__.py +6 -0
- pz_foundation/utils/merge.py +160 -0
- pz_foundation/worker_replicas.py +55 -0
- pz_settings_center/__init__.py +5 -0
- pz_settings_center/api/__init__.py +5 -0
- pz_settings_center/api/runtime_overrides.py +360 -0
- pz_settings_center/apps.py +28 -0
- pz_settings_center/configs/__init__.py +0 -0
- pz_settings_center/configs/default.env +2 -0
- pz_settings_center/configs/default.jsonc +1 -0
- pz_settings_center/docs/01-settings_center/350/203/275/345/212/233/350/276/271/347/225/214.md +124 -0
- pz_settings_center/docs/README.md +12 -0
- pz_settings_center/docs/distribution-README.md +150 -0
- pz_settings_center/docs//350/256/276/350/256/241/346/226/207/346/241/243.md +48 -0
- pz_settings_center/integration_payload.py +18 -0
- pz_settings_center/project_helpers.py +405 -0
- pz_settings_center/public.py +139 -0
- pz_settings_center/routing_helpers.py +73 -0
- pz_settings_center/runtime_override_provider.py +61 -0
- pz_settings_center/typed_settings.py +324 -0
- pz_settings_center/urls.py +9 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
# 一次性实施清单
|
|
2
|
+
|
|
3
|
+
> 历史说明:本文中的 `legacy_core` 只用于标记旧主链、旧 helper 与迁移清退对象;当前正式基础包统一为 `pz`。
|
|
4
|
+
|
|
5
|
+
> settings 统一口径:Python 运行时代码只允许 `import pz_settings_center.public as settings_center`,并通过 `settings_center.settings.<app_id>.<field>` 读取;`settings.py` / `settings/` 只负责声明;`legacy_core.settings`、`get_settings()`、`ensure_full_settings()` 都只属于历史清退对象。
|
|
6
|
+
|
|
7
|
+
## 1. 实施目标
|
|
8
|
+
|
|
9
|
+
本次重构按一次到位推进,不再采用“先 phase 1、再 phase 2”的交付策略。
|
|
10
|
+
|
|
11
|
+
但一次到位不等于无顺序开发,仍需要明确内部执行顺序与完成门禁。
|
|
12
|
+
|
|
13
|
+
总体要求:
|
|
14
|
+
|
|
15
|
+
- 以全新设计为目标,运行时只保留新主链
|
|
16
|
+
- 单次重构完成后,应直接达到标准 `pip` 包化目标
|
|
17
|
+
- 实施过程中仍应保留可验证的回滚面
|
|
18
|
+
- 不引入新的长期并行主链
|
|
19
|
+
- 子包改造主要依赖适配改造文档
|
|
20
|
+
- 新版包的开发、依赖锁定、构建与命令执行统一采用 `uv` 工具链
|
|
21
|
+
|
|
22
|
+
## 2. 一次性实施的内部顺序
|
|
23
|
+
|
|
24
|
+
虽然不分阶段发布,但固定按以下技术顺序完成,以减少返工。
|
|
25
|
+
|
|
26
|
+
补充总约束:
|
|
27
|
+
|
|
28
|
+
- 必须先固化下层契约,再接上层入口
|
|
29
|
+
- 不允许上层入口先落代码,再倒逼下层临时补接口
|
|
30
|
+
- 不允许在不同阶段重复实现同类编译器/聚合器来临时打通链路
|
|
31
|
+
|
|
32
|
+
### 2.1 包与配置边界收口
|
|
33
|
+
|
|
34
|
+
必须完成:
|
|
35
|
+
|
|
36
|
+
- 建立 `project_dir`
|
|
37
|
+
- 建立 `pz.jsonc`
|
|
38
|
+
- 引入标准 `console_scripts`
|
|
39
|
+
- 收敛 settings 解析入口
|
|
40
|
+
- 建立唯一 `RuntimePlan` 编译入口
|
|
41
|
+
|
|
42
|
+
完成标志:
|
|
43
|
+
|
|
44
|
+
- 新配置解析器
|
|
45
|
+
- `pz` 标准入口
|
|
46
|
+
- `RuntimePlan` 作为唯一组合根落地
|
|
47
|
+
- `pyproject.toml` 的 `project.scripts`、extras 名称、对外元数据收口到标准 pip 包语义
|
|
48
|
+
- `pz env sync` / `pz ...` / `uv build` / `uv.lock` 成为新版包的正式开发与构建路径
|
|
49
|
+
- `ROOT_DIR/.env` / `cwd` 驱动的历史配置发现被 project_dir 驱动模型替换
|
|
50
|
+
- `create_app/create_host_app` 从全局 settings 回落模式收口为显式上下文 API
|
|
51
|
+
- config schema 的正式字段、旧字段折叠规则与删除边界成文
|
|
52
|
+
- `project_dir`、`pz.jsonc`、`<project_dir>/.env`、`installed_apps`、`[app_replacements]` 这些唯一真相源先固定
|
|
53
|
+
- core/app 的公共导出面收口为 `pz`、`pz.app`、`<app>.public`
|
|
54
|
+
- `pz check` 与 `CheckReport` 确立为系统检查唯一正式入口与唯一正式输出模型
|
|
55
|
+
- 生命周期状态机与错误编码体系先于入口层固定
|
|
56
|
+
- 官方最小子包 `pz_*` 的 wheel / package / import 契约成文并具备 contract test
|
|
57
|
+
- 旧 `legacy_core.settings` helper、`ensure_full_settings()`、`get_settings()` 等历史读取入口的清退策略成文,并明确统一收口到 `settings_center.settings`
|
|
58
|
+
|
|
59
|
+
### 2.2 运行目录与资源输出迁移
|
|
60
|
+
|
|
61
|
+
必须完成:
|
|
62
|
+
|
|
63
|
+
- 引入 `cache_dir/runtime_dir/asset_dir`
|
|
64
|
+
- 资源合并迁出包目录
|
|
65
|
+
- 迁移聚合迁出包目录
|
|
66
|
+
- 上传与本地存储纳入 `asset_dir`
|
|
67
|
+
|
|
68
|
+
完成标志:
|
|
69
|
+
|
|
70
|
+
- 新路径服务
|
|
71
|
+
- 新资源输出目录
|
|
72
|
+
- 锁文件目录重定向
|
|
73
|
+
- asset build/bundle/minify 从 repo-root `legacy_core/merged/static` 迁到 `cache_dir`
|
|
74
|
+
- bootstrap/resources 不再直接操作模块级资源/i18n/config 单例
|
|
75
|
+
- mounts/static/uploads 绑定切到当前 project settings/asset_dir
|
|
76
|
+
- 资源 merge 输出切到原子切换模式,并补 manifest/回滚语义
|
|
77
|
+
- `<cache_dir>/resources/manifest.json` 落为资源结果唯一真相源
|
|
78
|
+
- 资源诊断、debug、preflight 全部改为读取同一份 manifest
|
|
79
|
+
- `file_service` / storage public URL 语义收口:无公共访问入口时不再输出宿主机路径、相对路径或 `file://`
|
|
80
|
+
|
|
81
|
+
### 2.3 可选基础设施化
|
|
82
|
+
|
|
83
|
+
必须完成:
|
|
84
|
+
|
|
85
|
+
- DB 可选
|
|
86
|
+
- Redis 可选
|
|
87
|
+
- readiness 只探测启用项
|
|
88
|
+
- `legacy_core` base 安装不强依赖 DB/Redis 驱动
|
|
89
|
+
|
|
90
|
+
完成标志:
|
|
91
|
+
|
|
92
|
+
- `database.enabled`
|
|
93
|
+
- `redis.enabled`
|
|
94
|
+
- extras 重新分层
|
|
95
|
+
- CLI 诊断信息完善
|
|
96
|
+
- `pyproject.toml` 与实际 extras/console script 口径一致
|
|
97
|
+
- metrics/tracing 的 label 规范与低侵入策略明确
|
|
98
|
+
- `InfraSettings` / `InfraContext` 成为基础设施能力唯一 typed snapshot
|
|
99
|
+
- Web `startup()` / `setup_infra()` / `/ready` 全部退出 schema 生成、自动建表、迁移修补路径,DDL 只保留显式 `pz db ...`
|
|
100
|
+
|
|
101
|
+
### 2.4 平台 app 与跨 app 依赖收口
|
|
102
|
+
|
|
103
|
+
必须完成:
|
|
104
|
+
|
|
105
|
+
- shared site UI owner
|
|
106
|
+
- settings runtime owner
|
|
107
|
+
- task dispatch / worker owner
|
|
108
|
+
|
|
109
|
+
这些平台级 app 形成正式公共门面;具体包名与迁移清单归 owning 子包文档维护。
|
|
110
|
+
|
|
111
|
+
完成标志:
|
|
112
|
+
|
|
113
|
+
- 清理 core 对具体官方维护最小子包的直接 import
|
|
114
|
+
- 清理不同 `<app_id>` 最小子包之间的内部实现 import
|
|
115
|
+
- 引入显式 `public.py` / facade / capability contract / events 协作方式
|
|
116
|
+
- shared site UI owner、settings runtime owner、task dispatch owner 的默认单例与 facade 边界统一收口
|
|
117
|
+
- CoreSettings 默认 installed_apps/installed_apps_extension 收缩为最小集合
|
|
118
|
+
- app 替换场景下的数据/迁移/storage owner 归属规则完成收口
|
|
119
|
+
- capability registry / provider contract 收口完成
|
|
120
|
+
- 上层 app 只依赖 facade/capability/contract,不再直接依赖具体实现模块
|
|
121
|
+
- `required_protocols` 只依赖 capability contract 名称,不再接受实现模块路径
|
|
122
|
+
|
|
123
|
+
### 2.5 worker 与入口体系收口
|
|
124
|
+
|
|
125
|
+
必须完成:
|
|
126
|
+
|
|
127
|
+
- worker 入口显式化
|
|
128
|
+
- 统一 web/CLI/worker 的配置解析
|
|
129
|
+
- 删除 in-process worker 正式路径
|
|
130
|
+
|
|
131
|
+
完成标志:
|
|
132
|
+
|
|
133
|
+
- worker CLI 规范
|
|
134
|
+
- supervisor/lock/runtime 规范
|
|
135
|
+
- 入口层与配置层职责切分完成
|
|
136
|
+
- `init` / 历史 `git_plugins` 迁移命令 / preflight 资产构建都不再围绕 vendored repo 心智
|
|
137
|
+
- `db` / `init` / app CLI 全部切到标准包化心智,不再围绕 wrapper 与 merged workspace
|
|
138
|
+
- entrypoint 只负责组装上下文,不再重复实现 settings/app/resource/infra 规则
|
|
139
|
+
- app CLI 命令发现只保留 `cli/` 目录约定,不再保留第二套动态命令注册链
|
|
140
|
+
- system checks 只保留 `pz check` 入口,不再保留 startup/debug/preflight 自定义检查主链
|
|
141
|
+
- Web / CLI / worker 共用同一套生命周期状态机与错误编码
|
|
142
|
+
- 旧 `run` / `git_plugins` / `init` 的直接删除清单与替代入口成文
|
|
143
|
+
- app `startup()` 内注册 ports、订阅事件、拉起 in-process worker 的路径全部退出正式模型
|
|
144
|
+
- `db` CLI 工作空间切到 `ProjectContext/cache_dir` 模型,不再写 repo-root `merged`
|
|
145
|
+
- 启动诊断输出收口为稳定 `code/stage/owner/action` 结构
|
|
146
|
+
- asset build / 图片优化 / bundle-minify 从 Web startup 正式退出,改为显式编译或显式 preflight 流程
|
|
147
|
+
- `module_config_service` / `redirect_rules_cache` 收口为项目级 runtime cache,具备 owner、reset、invalidate 与 cleanup 语义
|
|
148
|
+
- worker register / heartbeat / pull / ack 热路径不再依赖全局 `settings` 修补;`wid/token` / TTL / re-register 语义形成正式协议
|
|
149
|
+
- worker supervisor 的 lock/state/temp 文件统一迁入 `runtime_dir`,不再使用系统级临时目录
|
|
150
|
+
|
|
151
|
+
### 2.6 测试矩阵与稳定化
|
|
152
|
+
|
|
153
|
+
必须完成:
|
|
154
|
+
|
|
155
|
+
- wheel 安装测试
|
|
156
|
+
- SQLite/MySQL/PostgreSQL 契约测试
|
|
157
|
+
- app 替换测试
|
|
158
|
+
- 单例 reset / 多次启动测试
|
|
159
|
+
- 升级与回滚验证
|
|
160
|
+
- base-only 轻量命令验证
|
|
161
|
+
|
|
162
|
+
完成标志:
|
|
163
|
+
|
|
164
|
+
- CI 分层矩阵
|
|
165
|
+
- 回归门禁
|
|
166
|
+
- 旧文档清理清单
|
|
167
|
+
|
|
168
|
+
### 2.7 首批代码重构切入顺序
|
|
169
|
+
|
|
170
|
+
真正进入代码重构时,首批切入顺序固定为以下主链断点,不允许绕开。
|
|
171
|
+
|
|
172
|
+
唯一原则:
|
|
173
|
+
|
|
174
|
+
- 先切 `core` 主链
|
|
175
|
+
- 再切 app 层实现,包括现有官方维护最小子包 与历史 `plugins/*` 路径
|
|
176
|
+
- 最后清理脚本层与残余旧路径
|
|
177
|
+
|
|
178
|
+
排序依据:
|
|
179
|
+
|
|
180
|
+
- 只要 `core` 还在直接依赖旧 `infra` 实现,后面所有 app 改造都会继续被旧主链拖回去
|
|
181
|
+
- 先改 app 层现状目录,只会产生更多临时 adapter 和旧路径胶水
|
|
182
|
+
|
|
183
|
+
正式禁止:
|
|
184
|
+
|
|
185
|
+
- 先从某个 feature app 开刀试图“局部证明新架构”
|
|
186
|
+
- 先在历史独立子包路径里打补丁绕过 `setup_infra()` / `db_manager` / `redis_manager`
|
|
187
|
+
- 在 `core` 主链未切断前,提前大面积迁 app 代码
|
|
188
|
+
|
|
189
|
+
首批代码重构完成后,至少要达成以下结果:
|
|
190
|
+
|
|
191
|
+
- `core` 不再把旧 `infra` 当作默认运行主链
|
|
192
|
+
- `RuntimePlan -> InfraContext -> CapabilityRegistry` 进入正式启动主链
|
|
193
|
+
- Web / CLI / worker 的主入口不再依赖 `setup_infra()` 这种旧总管函数
|
|
194
|
+
- middleware、resources、storage、health、observability 都开始走新的正式边界
|
|
195
|
+
|
|
196
|
+
#### 2.7.1 首批关键模块
|
|
197
|
+
|
|
198
|
+
第一优先级:
|
|
199
|
+
|
|
200
|
+
- `legacy_core/assembly/settings/compiler.py`
|
|
201
|
+
- `legacy_core/runtime/plan.py`
|
|
202
|
+
- `legacy_core/runtime/http/app.py`
|
|
203
|
+
|
|
204
|
+
排序依据:
|
|
205
|
+
|
|
206
|
+
- 这三处直接决定 settings 真相源、`RuntimePlan` 编译链、Web 入口是否真正只消费编译结果
|
|
207
|
+
- 只要它们不改,`RuntimePlan`、`CapabilityRegistry`、`Facade` 仍可能被入口层绕开
|
|
208
|
+
|
|
209
|
+
第二优先级:
|
|
210
|
+
|
|
211
|
+
- `legacy_core/assembly/resources/compiler.py`
|
|
212
|
+
- `legacy_core/runtime/facades/storage.py`
|
|
213
|
+
- `legacy_core/runtime/health/service.py`
|
|
214
|
+
|
|
215
|
+
排序依据:
|
|
216
|
+
|
|
217
|
+
- 它们分别代表资源主链、storage 主链、health/readiness 主链
|
|
218
|
+
- 它们最容易把新边界重新拖回旧 helper/service/manager
|
|
219
|
+
|
|
220
|
+
第三优先级:
|
|
221
|
+
|
|
222
|
+
- `legacy_core/assembly/apps/compiler.py`
|
|
223
|
+
- `legacy_core/assembly/project/compiler.py`
|
|
224
|
+
- `legacy_core/runtime/cli/db.py`
|
|
225
|
+
- `legacy_core/runtime/lifecycle/manager.py`
|
|
226
|
+
|
|
227
|
+
排序依据:
|
|
228
|
+
|
|
229
|
+
- 这些文件需要承接新的 typed snapshot / registry / facade 结构
|
|
230
|
+
- 但它们应在第一、二优先级断口明确后再调整
|
|
231
|
+
|
|
232
|
+
#### 2.7.2 第一批必须先切的三个断点
|
|
233
|
+
|
|
234
|
+
断点一:`assembly/settings/compiler.py`
|
|
235
|
+
|
|
236
|
+
- 遗留问题:仍可能保留历史字段折叠、默认 `installed_apps`、派生字段二次补写这类旧主链心智
|
|
237
|
+
- 首批完成标志:默认 `installed_apps` 收口为最小集合或空集合;所有派生字段只在单一 compiler 阶段产出;不再为入口层保留第二套补写空间
|
|
238
|
+
- 不允许:旧默认链与新 manifest 配置并存
|
|
239
|
+
|
|
240
|
+
断点二:`runtime/http/app.py`
|
|
241
|
+
|
|
242
|
+
- 遗留问题:Web 入口最容易重新拼 settings/app/resource/infra,或者在 startup/lifespan 中补第二套裁决
|
|
243
|
+
- 首批完成标志:HTTP 入口只消费已编译好的 `RuntimePlan`;不再在 startup/lifespan 内部补第二套 settings/route/infra 裁决;路由/中间件注册顺序完全来自编译产物
|
|
244
|
+
- 不允许:把旧总管函数改名后继续保留;把更多编译逻辑塞进 startup/lifespan 作为临时实现
|
|
245
|
+
|
|
246
|
+
断点三:`runtime/plan.py`
|
|
247
|
+
|
|
248
|
+
- 遗留问题:一旦 `RuntimePlan` 不是唯一组合根,后续入口与 facade 就会各自绕开它重建状态
|
|
249
|
+
- 首批完成标志:`RuntimePlan` 固定承载 `ProjectContext`、`SettingsSnapshot`、`AppRegistry`、`ResourceManifest`、`InfraContext`、`RouteManifest`、`MiddlewareManifest`、`CapabilityRegistry` 等正式产物;入口层不再跳过它直接拼装运行图
|
|
250
|
+
- 资源域补充完成标志:资源作者配置统一走 `resources.items`;运行期统一消费 `ResourceManifest.items`;不再保留固定输出字段或目录名映射表
|
|
251
|
+
|
|
252
|
+
#### 2.7.2A 旧主链专项清理
|
|
253
|
+
|
|
254
|
+
在进入大规模目录迁移前,还必须明确清掉以下历史路径:
|
|
255
|
+
|
|
256
|
+
- app import 短名自动补全、`legacy_core.<name>` 自动补前缀、package-level `app` 猜测
|
|
257
|
+
- 重复 `app_id` 静默跳过
|
|
258
|
+
- `init()` / `startup()` 失败后 warning 继续
|
|
259
|
+
- `legacy_core.settings` 的 env 回写、旧全局 `settings` 单例、`ensure_full_settings()` 补挂 namespace
|
|
260
|
+
- `get_settings()` 这类历史 flatten-export 读取入口
|
|
261
|
+
- `clean_and_reorder_routes()` 与 legacy extension adapter
|
|
262
|
+
|
|
263
|
+
这些专项不要求先把所有代码删光,但必须先把正式新主链与旧路径边界切开,避免迁移过程中继续把旧行为当主路径。
|
|
264
|
+
|
|
265
|
+
#### 2.7.3 首批顺序
|
|
266
|
+
|
|
267
|
+
首批顺序如下:
|
|
268
|
+
|
|
269
|
+
1. 建立最小 `RuntimePlan` / `InfraContext` / `CapabilityRegistry` 正式主链
|
|
270
|
+
2. 改 `assembly/settings/compiler.py`
|
|
271
|
+
3. 改 `runtime/http/app.py`
|
|
272
|
+
4. 改 `assembly/resources/compiler.py`
|
|
273
|
+
5. 改 `runtime/facades/storage.py`
|
|
274
|
+
6. 改 `runtime/health/service.py`
|
|
275
|
+
7. 再改 `assembly/apps/compiler.py`、`assembly/project/compiler.py`、`runtime/cli/db.py`、`runtime/lifecycle/manager.py`
|
|
276
|
+
8. 再开始切 app 层现状路径对 `legacy_core.infra.*` 的直接 import
|
|
277
|
+
|
|
278
|
+
#### 2.7.4 首批完成后的验收标准
|
|
279
|
+
|
|
280
|
+
以下条件同时满足,才算首批重构完成:
|
|
281
|
+
|
|
282
|
+
- `runtime/http/app.py` 不再在入口层重建 settings/app/resource/infra 裁决
|
|
283
|
+
- `runtime/plan.py` 成为唯一组合根,入口层不再绕开它
|
|
284
|
+
- `assembly/settings/compiler.py` 不再为后续入口层保留第二套派生字段补写空间
|
|
285
|
+
- `assembly/resources/compiler.py` 不再直接依赖旧 merge service
|
|
286
|
+
- `runtime/facades/storage.py` 不再硬编码旧 storage adapter 路径
|
|
287
|
+
- `runtime/health/service.py` 不再直接依赖旧 readiness 聚合器
|
|
288
|
+
- Web / CLI / worker 的正式入口都能解释为“先编译 `RuntimePlan`,再执行”
|
|
289
|
+
- 旧 `infra` 仍可作为内部实现残留一段时间,但已不再控制正式主链
|
|
290
|
+
|
|
291
|
+
## 3. 一次性实施完成定义
|
|
292
|
+
|
|
293
|
+
整体重构完成至少满足:
|
|
294
|
+
|
|
295
|
+
1. 设计文档已更新
|
|
296
|
+
2. 有对应自动化测试
|
|
297
|
+
3. 有现状差距项被关闭
|
|
298
|
+
4. 不再新增同类历史并行主链
|
|
299
|
+
5. 有明确迁移说明
|
|
300
|
+
6. 有发布与回滚说明
|
|
301
|
+
7. 有残余风险说明
|
|
302
|
+
8. 需要改造的子包都有明确适配清单
|
|
303
|
+
|
|
304
|
+
## 4. 固定门禁
|
|
305
|
+
|
|
306
|
+
整个一次性实施过程中,都应坚持以下门禁:
|
|
307
|
+
|
|
308
|
+
- 不扩大 `public.py` / facade / capability contract 对外依赖面,除非文档先行
|
|
309
|
+
- 不新增新的 import-time 全局副作用
|
|
310
|
+
- 不新增新的 repo-root / cwd / vendored 路径依赖
|
|
311
|
+
- 不以“先沿用旧路径”名义引入第二套长期真相源
|
|
312
|
+
- 不在不同层重复实现同一类扫描、聚合、裁决逻辑
|
|
313
|
+
- 不允许上层模块反向依赖下层具体实现细节
|
|
314
|
+
- 不允许多个入口各自拼装运行图,必须统一走 `RuntimePlan`
|
|
315
|
+
- 每关闭一条旧路径,都要补诊断与迁移提示
|
|
316
|
+
- 不把 warning-only 的半初始化运行结果当作正式完成
|
|
317
|
+
- 涉及数据/迁移归属变更时,必须同时提供升级和回滚说明
|
|
318
|
+
|
|
319
|
+
## 4.1 最终红线清单
|
|
320
|
+
|
|
321
|
+
进入代码重构与合并前,必须额外逐项核对以下红线:
|
|
322
|
+
|
|
323
|
+
- 没有新增第二套配置/app/resource/infra 真相源
|
|
324
|
+
- 没有把编译逻辑塞回 `startup()` / `lifespan` / adapter
|
|
325
|
+
- 没有新增 import-time 全局单例、全局 setter 主链或隐藏回退
|
|
326
|
+
- 没有新增 repo-root / `cwd` / `ROOT_DIR` 依赖
|
|
327
|
+
- 没有让 core 重新依赖具体官方 app / 独立子包的内部模块
|
|
328
|
+
- 没有允许 app 直接 import 其它 app 的内部模块
|
|
329
|
+
- 没有让旧 middleware manager 逻辑继续进入正式主链
|
|
330
|
+
- 没有出现第二套 system checks 入口或第二套 `CheckReport`
|
|
331
|
+
- 没有让 CLI / Web / worker 的生命周期语义和错误编码分叉
|
|
332
|
+
- 没有让 base 安装基础命令依赖可选驱动或重型 extras
|
|
333
|
+
- 没有把 warning-only 结果带入正式运行态
|
|
334
|
+
- 没有缺失升级说明、回滚说明、版本范围说明
|
|
335
|
+
|
|
336
|
+
## 5. 发布门禁
|
|
337
|
+
|
|
338
|
+
虽然设计上一次到位,但发布仍必须保持可控。
|
|
339
|
+
|
|
340
|
+
发布前必须完成:
|
|
341
|
+
|
|
342
|
+
- 在主分支合入前完成端到端验证
|
|
343
|
+
- 发布包前完成:
|
|
344
|
+
- wheel 安装验证
|
|
345
|
+
- 非源码目录 smoke run
|
|
346
|
+
- 子包适配清单核对
|
|
347
|
+
- `uv build` 产物与 `pip install` 安装链验证同时通过
|
|
348
|
+
- 若涉及数据/迁移/目录边界切换,必须有一次性 cutover 与回滚步骤
|
|
349
|
+
- 不引入 feature flag、隐藏开关或双路径长期并存来规避一次性实施
|
|
350
|
+
|
|
351
|
+
补充门禁:
|
|
352
|
+
|
|
353
|
+
- 发布说明必须显式列出:
|
|
354
|
+
- 支持的 Python 版本
|
|
355
|
+
- 支持的数据库范围
|
|
356
|
+
- 官方聚合 distribution 或分拆官方 wheel 的版本范围
|
|
357
|
+
- 必须验证 base 安装下基础命令可运行:
|
|
358
|
+
- `pz --help`
|
|
359
|
+
- `pz list`
|
|
360
|
+
- `pz check`
|
|
361
|
+
|
|
362
|
+
## 6. 文档治理要求
|
|
363
|
+
|
|
364
|
+
本次一次性实施,至少同步维护以下文档:
|
|
365
|
+
|
|
366
|
+
- 设计规范
|
|
367
|
+
- 迁移说明
|
|
368
|
+
- 发布说明
|
|
369
|
+
- 子包适配改造清单
|
|
370
|
+
|
|
371
|
+
要求:
|
|
372
|
+
|
|
373
|
+
- stable 文档、README、示例命令、CLI help 口径必须同步
|
|
374
|
+
- 不允许出现“设计文档已经切换,但 README/help 仍在宣传旧路径”的状态
|
|
375
|
+
- 重构完成后必须进入 core freeze / extension-first 治理
|
|
376
|
+
- 后续 `pz` 相关增量需求默认进入官方扩展包,不再继续向 `legacy_core` 内核堆叠功能
|
|
377
|
+
- 只有框架级公共契约、编译/运行边界、安全修复与缺陷修复,才允许继续修改 `legacy_core`
|
|
378
|
+
|
|
379
|
+
## 7. 明确不接受的推进方式
|
|
380
|
+
|
|
381
|
+
不接受:
|
|
382
|
+
|
|
383
|
+
- 在旧路径上继续打补丁
|
|
384
|
+
- 旧优先级与新显式机制并存
|
|
385
|
+
- 让新旧两套 settings 长期并存
|
|
386
|
+
- 让 wrapper/vendored 模式继续充当主运行路径
|
|
387
|
+
- 以“后续再慢慢补”为理由提交半完成架构
|