Files

GitOps v2 Design Anchor

This directory freezes the GitOps v2 control-plane boundary before the full cutover.

Scope

  • State moves out of ljwx-deploy into ljwx-release-state.
  • ljwx-release-state becomes the only writer for runtime state.
  • ljwx-deploy remains the only writer for deploy overlays and Argo-owned desired state.
  • Service repositories publish facts and requests only; they must not mutate deploy state directly.

Phase 0 Decisions

  • Generated service workflows default to auto_merge_pr=false.
  • Generated service workflows require an executable ci/validate.sh.
  • Legacy promoter/smoke CronJobs are suspended.
  • release/queue.yaml is retained only as an empty compatibility file for old references.

Target Object Model

  • Event
  • ReleaseBundle
  • ReleaseRequest
  • DeployResolution
  • ReleaseResult

Temporary Boundary During Transition

  • New v2 schema work starts in /root/codes/ljwx-release-state/schemas/.
  • Any new behavior added during the transition must preserve the single-writer destination:
    • runtime state -> ljwx-release-state
    • deploy mutation -> ljwx-deploy

Follow-up Implementation Order

  1. Shadow intake into ljwx-release-state
  2. Shadow request -> resolution generation
  3. Deploy-controller cutover
  4. Prod-controller cutover
  5. Legacy queue/evidence cleanup

Current Shadow Tooling

  • ljwx-release-state/scripts/intake_shadow.py
    • Persists Event, ReleaseBundle, and ReleaseRequest
  • ljwx-release-state/scripts/state_controller_shadow.py
    • Persists DeployResolution
  • ljwx-deploy/scripts/gitops_v2/render_shadow_diff.py
    • Renders overlay diffs from DeployResolution without mutating ljwx-deploy
  • ljwx-deploy/scripts/gitops_v2/apply_resolutions.py
    • Applies DeployResolution into deploy overlays
  • ljwx-deploy/scripts/gitops_v2/copy_resolution_images.py
    • Copies prod-target images into production Harbor before overlay commit
  • ljwx-deploy/scripts/gitops_v2/purge_legacy_runtime_state.py
    • Dry-run / apply tool for deleting legacy queue/evidence dirty state after cutover