Skip to content

Implement the Stable Address, the derived Move and Infrastructure Intent #324

Open
10 of 12 issues completed
Open

Description

@ExtraToast

Parent

#320

What

Implement what #323 specified, in TypeScript, against hand-written oracle files: the Stable Address, availability, Infrastructure Intent, and the Estate root for cross-file OCL. Every E_ code #323 added is pending on this epic in scripts/lint-codes.ts, and leaves that list when its slice's test lands.

Slices

Each slice is one vertical change that leaves npm run verify green, lands in TypeScript and its oracles in one pull request after emf/ is deleted (#347; #338 is the one coursework slice, landing before 30 October), and names its behaviour row for the ledger.

order slice depends on
1 #330 Pin the facts a Move derives from: an engine image's version, the active Instance, each engine's move method #341
2 #331 Derive and render the Stable Address, and resolve every dependency coordinate to it #341
any #332 Declare availability on an engine Process #341
any #337 Read Infrastructure Intent and generate the node contract from it #341
any #338 Navigate an Estate root for cross-file OCL in the model-driven implementation none

The Move is cut

The derived Move leaves the model (maintainer, 2026-11-02): it existed only to carry data across the migration off the previous delivery path. #333, #335 and #334 landed and are removed again by #807; #336, #340 and #667 are closed as not planned. #330's move-method facts go with #807 too.

Before it starts

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.
    on Oct 9, 2026
  2. 4 remaining items

  3. ExtraToast commented on Oct 27, 2026

    @ExtraToast
    ContributorAuthor

    Resume here: landing the Move stack (updated 2026-10-27)

    State

    Next step: after 1.0.0: #667 (one flip image for every Move, decided 2026-10-27), then #332 and #337 as their notes say.

    Ledger numbers on main once all three land: REQ-112 for #648, REQ-113 for #649, REQ-114 for #651 (sidecars, already on main), REQ-115 for #650. The ledger's "holds N rows" line is 115 at the end.

    Landing one stacked PR, after the PR below it merges

    Run this in the PR's worktree. <old-base> is the parent's head SHA given above.

    git fetch origin main
    git rebase --onto origin/main <old-base>
    # Generated files: take main's copy, then regenerate.
    git checkout --ours -- spec/v1/examples spec/v1/schemas spec/v1/diagrams
    # docs/requirements.md: union the rows by hand, keep a single "holds N rows" line,
    # and renumber the citing test comments.
    # Test files where both sides add a describe block: keep both, and check the closing braces.

    Regenerate:

    • the descriptor and schemas: a throwaway regen.ts at the repo root, deleted afterwards, which writes descriptor(), projectIntentJsonSchema() and every PUBLISHED_SCHEMAS entry from ./src/index.ts;
    • the oracles: run test/model/resolution.test.ts, project-intent.test.ts and platform-intent.test.ts with an oracle setup file that writes the expected JSON;
    • the platform drawing: python3 scripts/diagrams/class-diagram.py 14-platform-intent out.drawio, then export it with draw.io (-x -f svg -e -b 10) to spec/v1/diagrams/14-platform-intent-model.drawio.svg. A 3-way merge cannot handle this file, which is one line.

    Then:

    • npm run verify must pass. Push only on success, with --force-with-lease=<branch>:<sha>.
    • gh pr merge <N> --auto --squash.
    • Change the PR body's first line from "Stacked on…" to "Rebased onto main…".
    • If CI mutation shards fail, list the survivors from the Stryker report artifacts and kill them with tests. An equivalent mutant gets a // Stryker disable next-line <Mutator> with a reason.

    Gotchas

    • Never git add -A with scratch scripts in the tree. A stray script once reached a pushed commit.
    • Mutation testing is incremental against main's baseline, so mutants on lines a PR never touched can resurface.
  4. ExtraToast commented on Nov 2, 2026

    @ExtraToast
    ContributorAuthor

    The derived Move is cut from this epic (maintainer, 2026-11-02). #336, #340 and #667 are closed as not planned, and #807 removes what #333, #334, #335 and #330 landed for it. The Stable Address, #332, #337 and #338 stay here.

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.status: blockedCannot move forward until an external dependency is resolved.status: in-progressActively being worked.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