Skip to content

Render a Move: its step Jobs, its move identity and policy for both Instances #335

Closed

Description

@ExtraToast

Parent

#324

What

Render a Move (chapter 55):

  • one Job per step (start, sync, lag, fence, final lag, flip, unfence, reverse), named by the revision's tag and the step, created suspended and applied once;
  • the move identity <process>-move: ServiceAccount, Vault role and policy, the method's credential at secret/data/<project>/<process>/move, and one Kubernetes permission, update on the Stable Addresses that name the source;
  • the allow-set rules for every Instance while the Move is open, and between the Instances on the method's surface (chapter 16);
  • retirement drops the source, its reverse step and the move identity from the render, and the source claim stays bound under its prune-disabled mark;
  • the Postgres move example's rendered tree, hand-written and reviewed.

Lands in TypeScript only, after emf/ is deleted (#347), with the rendered-tree and diagnostics oracles it affects, in one pull request. The intent, effective and dependencies goldens are dropped (#346), so it adds none.

Behaviour (draft ledger row)

A Process with an open Move renders its step Jobs suspended, a move identity that can update only the Stable Addresses naming its source, and policy admitting every consumer to both Instances, and the example's share equals its committed tree byte for byte.

Blocked by

#341, the map whose rewrite plan replaces the closed placement ticket #328 (see #350).

Activity

  1. added
    type: featureNew user-facing or operator-facing capability.
    area: deployhomelab-deploy, deploy-v2, manifests, and rollout flow.
    component: deployDeployment pipeline, manifests, or release rollout.
    priority: P2Medium; normal planned work.
    status: blockedCannot move forward until an external dependency is resolved.
    on Oct 9, 2026
  2. ExtraToast commented on Oct 27, 2026

    @ExtraToast
    ContributorAuthor

    Resume here (updated 2026-10-27)

    State: merged as f00fc54e (PR #649).

    Next step: none.

    Blocked by: nothing.

    Decisions (taken with the maintainer):

    • The target Instance is named by the release tag, <process>-<tag>, and its claims are <claim>-<suffix>. ClusterState records name and target.name.
    • The source is frozen: created once, kustomize.toolkit.fluxcd.io/ssa: IfNotPresent.
    • Every Instance's pods carry app.kubernetes.io/instance: <process>, and its workload and Service select {name: <instance>, instance: <process>}.
    • The move identity is <process>-move. A Role and RoleBinding in estate-system, named <ns>-<process>-move, may update only the flipped Services (resourceNames).
    • Step Jobs are <identity>-<step>-<tag>: start, sync, lag, fence, final-lag, flip, unfence, and reverse when the Move is reversible.
    • Ledger row: REQ-113.

    Gotchas:

  3. removed
    status: blockedCannot move forward until an external dependency is resolved.
    on Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: deployhomelab-deploy, deploy-v2, manifests, and rollout flow.component: deployDeployment pipeline, manifests, or release rollout.priority: P2Medium; normal planned work.type: featureNew user-facing or operator-facing capability.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions