Skip to content

Separate Odoo bootstrap provenance from deployment evidence #557

@cbusillo

Description

@cbusillo

Objective

Separate Odoo bootstrap operation evidence from artifact deployment provenance so Launchplane does not claim a data bootstrap deployed or verified an artifact it did not actually deploy.

Finish Line

After an Odoo bootstrap, Launchplane records exactly what changed: bootstrap run status, post-deploy status, verification status, observed runtime identity, and whether current environment inventory should be advanced, retained, or marked stale.

Current Status

State: First implementation slice merged in PR #560. Launchplane now records bootstrap-specific evidence, result status split (bootstrap_run_status and readiness_status), and bootstrap_record_id on inventory so failed/partial bootstrap attempts remain visible without moving the current deployment pointer.
Next action: Runtime identity comparison remains related follow-up through #516. Full async operation tracking remains separate in #556.
Blocked by: None for the merged status/provenance slice.
Last verified: 2026-05-10; PR #560 CI, Security, and CodeQL checks passed before merge.

Scope

  • Add or reuse a record type for Odoo bootstrap operations distinct from artifact deployment records.
  • Split statuses into bootstrap execution, post-deploy application, health verification, canonical verification, logo verification, runtime identity verification, and overall readiness.
  • Define inventory update rules for full success, bootstrap-success/verification-fail, bootstrap-fail-before-mutation, and unknown/timeout states.
  • Preserve previous deployment artifact/source evidence without re-stamping it as newly deployed unless runtime identity proves it.
  • Make read models surface stale, partial, or unverifiable current state explicitly.
  • Update workflow/service responses so operators can distinguish "bootstrap did not run" from "bootstrap ran but verification failed".

Acceptance Criteria

  • A bootstrap run that succeeds but fails canonical/logo verification does not report bootstrap_status=fail as the only top-level truth.
  • Launchplane can mark environment state as partially_bootstrapped, verification_failed, stale_inventory, or an equivalent explicit state rather than silently retaining old inventory as current.
  • Deployment records are not used to assert a fresh artifact deployment when no artifact deployment occurred.
  • Runtime identity, when available, is recorded as observed evidence and compared to expected identity.
  • Tests cover all major mutation/verification combinations and inventory/read-model outcomes.
  • Docs explain the difference between artifact deployment provenance, data bootstrap provenance, and public readiness.

Relationships

Validation

  • Unit tests for status mapping and inventory advancement/retention/stale marking.
  • Service response tests for partial success and timeout states.
  • Read-model serialization tests for expected vs observed runtime/bootstrap state.
  • Live CM testing run should show bootstrap/post-deploy/canonical/logo as separate fields.

Decisions

  • Bootstrap is not the same thing as artifact deployment.
  • Partial success is a first-class operator state, not a generic failure string.

Open Questions

  • Should bootstrap evidence live on deployment records as a new evidence field or in a separate bootstrap operation record referenced by inventory?
  • How should operator UI prioritize stale inventory versus last known good deployment evidence?
  • What state should be used when the service loses the HTTP connection but the Dokploy schedule continues running?

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