Skip to content

Derive a Move in layer 2, with a hand-written Postgres 16 to 17 example #333

Closed

Description

@ExtraToast

Parent

#324

What

Derive a Move in layer 2 (chapter 20, 0094):

  • triggers: an engine version change in the component breaksOn names, a namespace other than the active Instance's, or an eligible node set that excludes the bound volume's node;
  • the move element: source, target, method, move identity, the Stable Addresses it flips, reversible, and the bounds;
  • rollback: forward-only on a Process (chapter 10), with E_MOVE_IRREVERSIBLE, E_FORWARD_ONLY_UNUSED, E_MOVE_UNSUPPORTED, E_NO_MOVE_POLICY and E_MOVE_OPEN (a second Move while one is open);
  • retirement once ClusterState records the flip held past retention;
  • a new worked example: platform-postgres moving from 16 to 17, with a hand-written expected/resolved.json and its refusal fixtures. This is also the second hand-written target model the Task 1 feedback asked for.

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 change an engine's data cannot follow in place derives a Move whose source, target, method and reversibility the projection records, an irreversible one is refused unless acknowledged, an acknowledgement nothing needs is refused, and the source is retired only once its flip has held past the platform's retention.

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.
    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 (2026-10-27)

    State: PR #648, rebased onto main, verified (2436 tests) and on auto-merge. Its 12 mutation shards were running when this was written.

    Next step: once it merges, land #649 (see #324's note). If a shard fails, kill its survivors and push.

    Blocked by: CI only.

    Decisions:

    • The triggers are version, namespace and binding.
    • The refusals are E_MOVE_UNSUPPORTED, E_NO_MOVE_POLICY, E_MOVE_OPEN, E_MOVE_IRREVERSIBLE and E_FORWARD_ONLY_UNUSED.
    • The policy is delivery.move {timeout, retention, memory, cpu}, and durations accept d.
    • The worked example is spec/v1/examples/data/expected/resolved.moving.json (platform-postgres 16 → 17). Its flips are platform-postgres-postgres.
    • Ledger row: REQ-112.

    Gotchas: moveRefusals in src/check/pinned-inputs.ts returns early while the image is unlocked, by design.

  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.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