Intent
Introduce the provider-neutral identity resolver and move live read/deploy/promotion paths to provider-target authority while still validating provider-specific execution config.
Current Status
PR #1113 is open and green for the first #1104 cutover slice: #1113
Implemented in commit 4ca24a1924d0d75f20d9e0680229e3173ab3d4d8:
- Provider-target Postgres reads/lists now use only physical
launchplane_provider_targets rows for current authority. Paired Dokploy records remain audit/backfill comparison material and execution metadata.
- Lane summaries and product environment target summaries no longer synthesize current provider-target identity from Dokploy target/id pairs; Dokploy-only lanes surface missing target authority.
- Generic-web Dokploy deploy resolves identity from physical
ProviderTargetRecord, reads only the selected lane's Dokploy execution config, fails closed on missing provider-target authority or Dokploy identity mismatch, and avoids cross-lane Dokploy orphan blast radius.
- Records/service-boundary docs updated to describe identity authority versus provider execution config.
Local validation:
uv run --extra dev ruff check <changed python files> passed.
uv run --extra dev ruff format --check <changed python files> passed.
uv run --extra dev mypy control_plane tests passed.
npx --yes markdownlint-cli2 docs/records.md docs/service-boundary.md passed.
uv run python -m unittest tests.test_postgres_store tests.test_generic_web_deploy tests.test_product_environment_read_model tests.test_service passed: 536 tests.
uv run python -m unittest tests.test_provider_target_audit tests.test_provider_target_backfill tests.test_product_environment_read_model tests.test_service passed: 482 tests.
uv run python -m unittest passed: 1,966 tests.
GitHub validation on PR #1113:
- CI run 26830599547 passed.
- Security run 26830600144 passed.
- CodeQL run 26830599588 passed.
Next action: review/merge/deploy PR #1113. After deploy, #1105 should run product-by-product validation and a fresh Provider Target Operations audit before #1106 retirement.
Finish Line
Generic-web deploy, promotion/ship resolution, VeriReel environment reads, and Odoo target-sensitive workflows resolve stable target identity from provider-target rows and fail closed when provider-specific Dokploy metadata disagrees.
Acceptance Criteria
- Resolver uses
ProviderTargetRecord for provider id, target id, target category, display name, and provider target type.
- Dokploy adapter still loads Dokploy route/runtime config needed for execution but cannot override provider-target identity.
- Missing provider-target rows block migrated live paths after cutover.
- Existing deployment/promotion records keep provider-neutral target evidence.
- Tests cover generic-web deploy, promotion/ship resolution, VeriReel environment, Odoo target replacement/post-deploy, mismatch blocking, and missing-row failure.
- Docs clarify identity authority versus provider execution config authority.
Quality Gates
Targeted workflow tests, full unittest, ruff, mypy, docs, then post-merge CI/deploy/health evidence.
Intent
Introduce the provider-neutral identity resolver and move live read/deploy/promotion paths to provider-target authority while still validating provider-specific execution config.
Current Status
PR #1113 is open and green for the first #1104 cutover slice: #1113
Implemented in commit
4ca24a1924d0d75f20d9e0680229e3173ab3d4d8:launchplane_provider_targetsrows for current authority. Paired Dokploy records remain audit/backfill comparison material and execution metadata.ProviderTargetRecord, reads only the selected lane's Dokploy execution config, fails closed on missing provider-target authority or Dokploy identity mismatch, and avoids cross-lane Dokploy orphan blast radius.Local validation:
uv run --extra dev ruff check <changed python files>passed.uv run --extra dev ruff format --check <changed python files>passed.uv run --extra dev mypy control_plane testspassed.npx --yes markdownlint-cli2 docs/records.md docs/service-boundary.mdpassed.uv run python -m unittest tests.test_postgres_store tests.test_generic_web_deploy tests.test_product_environment_read_model tests.test_servicepassed: 536 tests.uv run python -m unittest tests.test_provider_target_audit tests.test_provider_target_backfill tests.test_product_environment_read_model tests.test_servicepassed: 482 tests.uv run python -m unittestpassed: 1,966 tests.GitHub validation on PR #1113:
Next action: review/merge/deploy PR #1113. After deploy, #1105 should run product-by-product validation and a fresh Provider Target Operations audit before #1106 retirement.
Finish Line
Generic-web deploy, promotion/ship resolution, VeriReel environment reads, and Odoo target-sensitive workflows resolve stable target identity from provider-target rows and fail closed when provider-specific Dokploy metadata disagrees.
Acceptance Criteria
ProviderTargetRecordfor provider id, target id, target category, display name, and provider target type.Quality Gates
Targeted workflow tests, full unittest, ruff, mypy, docs, then post-merge CI/deploy/health evidence.