Skip to content

Cut over live target identity reads to provider-target resolver #1104

@cbusillo

Description

@cbusillo

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    planDurable planning issueplan:activeCurrent active plan

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions