Skip to content

Select remote builders automatically and honor Compose defaults #804

Closed

Description

@nick-potts

Parent

Build runner spec (#798)

What to build

Finish the small user-facing location interface on both build and deploy. The client makes one bounded selection from observed compatible Machines; the selected host retains final admission authority. Selection should be predictable and explainable without becoming a Cluster scheduler.

Acceptance criteria

  • Make plain '--remote' select automatically for build and deploy. Keep '--remote=' as the explicit pin and '--local' as the local override, rejecting conflicts and preserving positional Services. Explicit CLI choice overrides Compose; Compose overrides the local default. Plain '--remote' requests automatic selection rather than silently retaining a configured pin.
  • Store preferred execution location, recipe, and platforms in Compose using existing extension/standard-field conventions; do not add a separate project configuration file or resource/cache/queue flags. Preserve current Service/profile/build-option selection and keep build location independent of application placement.
  • Use visible Machines with verified required recipe/platform, worker, image-store, and emulation capability as applicable. Use a deterministic stable Machine-ID order for v1 automatic selection and existing ambiguity rules for explicit/preferred targets. Native defaults refer to the actual Docker execution platform. Report the selected Machine before upload.
  • An unavailable preferred/explicit target or absent compatible automatic candidate fails with observed evidence and a useful corrective action. Keep stale/unknown capability visible. The selected Machine rechecks admission; no silent local fallback, automatic redistribution after submission, replicated builder role, or cluster-wide scheduling/queue state is added.
  • Use rung-1 selection/precedence/capability tests, including permuted observation order, ambiguity, missing evidence and explicit overrides. Use rung-3 actual CLI tests for flag/positional parsing and refusal text. Add or extend a registered rung-4 two-candidate build-and-deploy exercise showing compatible selection, an explicit pin, and local override. The same capture/execute module must remain the only build path.

Blocked by

Activity

  1. nick-potts commented on Sep 9, 2026

    @nick-potts
    ContributorAuthor

    Descoping the Compose build location

    Implemented in #846, with one acceptance criterion deliberately dropped rather than deferred.

    AC2 asks to "store preferred execution location, recipe, and platforms in Compose using existing extension/standard-field conventions", and AC1 sets up the tier "Explicit CLI choice overrides Compose; Compose overrides the local default." An earlier revision of #846 implemented this as a top-level x-build-machine: accepting a Machine name or ID, auto, or local.

    That has been removed. The reason is in our own glossary:

    • Machine ID — "uniqueness is within one Cluster" (CONTEXT.md:30)
    • Machine Name — "a human-facing selector for a Machine that may be ambiguous. It is not an identity" (CONTEXT.md:33)

    Both are Cluster-local, one is ambiguous, and a Compose file is portable and usually committed. x-build-machine: tower therefore names a different Machine in each developer's checkout and no Machine at all in CI — the same class of mistake as hardcoding a hostname. Which Machine builds is a per-invocation fact, and --remote=<Machine> already expresses it correctly.

    An auto | local -only form was considered — portable, and it would have preserved the precedence tier — but it was judged not worth a Compose surface of its own for what the flags already say.

    Delivered: plain --remote selects automatically, --remote=<Machine> pins, --local states the local default, conflicts are refused, positional Services are preserved; deterministic Machine-ID ordering with native-platform ranking; per-Machine evidence in every refusal; rung 1/3/4 tests. Recipe (build.x-recipe) and platforms (build.platforms) were already in Compose and are untouched, so AC2's other two clauses hold.

    Not delivered: the Compose tier of AC1, and AC2's execution-location clause.

    Closing with #846 rather than leaving this open, since the gap is a decision against the criterion, not outstanding work. If a portable project-level build-location preference is wanted later, it should be a fresh issue arguing for the auto | local form on its own merits.

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

    ready-for-agentFully specified, ready for an AFK agent

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions