Skip to content

Platform connection points: run the execution matrix on real machines #671

Open

Description

@David-Noble-at-work

Chore. Plan: platform-connection-points.md (drafted, not yet committed).

Declare, per developer, which machines stand in for which platforms, so the checks that must execute can run somewhere real. On a darwin workstation: name a linux box and a windows box, and the matrix builds locally, ships, runs remotely, reports back.

Why now

#670 rules that CI is a strict superset of the local checks, with a local opt-in to everything. Measuring that gap showed the matrix is not one thing:

Check Needs a remote machine Runs on darwin today
make build-all no yes — 12s
make vet-all no yes — 5s
make lint-all no yes — 59s
make test, make test-race yes host only
make test-scenario yes host only

Cross-compilation is pure Go and already works locally. Only cross-execution needs machines. So the static half of make check-all can land without this issue — this is what grows the execution half.

Shape

A connections section in pkg/devconfig — the mechanism the runtime section already uses, so no new file format and no new discovery path. In the user's config, never the repository's.

connections:
  linux/amd64:   { host: build-linux }
  windows/arm64: { host: build-win, shell: pwsh }

host is an ~/.ssh/config alias, not a hostname. SSH already solves user, port, identity, jump host, and multiplexing, and the developer already maintains that file — restating any of it here would create a second source of truth that drifts. The section carries only what SSH config cannot express, which today is the remote shell.

Keyed by platform, not OS (corrected in discussion): windows/amd64 and windows/arm64 are different targets, and PLATFORM, build/<goos>-<goarch>/, and dist already share that spelling.

The rule that matters most

An unreachable connection point fails loudly. It never skips.

A matrix that silently drops a platform because a box is down reproduces the exact defect this campaign has been unwinding — a gate reporting green while not running. No entry means "not configured", reported as such. An entry that will not connect is a failure, not an omission.

That is also why phase 2 exists: star connections check proves every configured point is reachable before a sweep depends on it.

Phases

  1. The connections section, platform-keyed and validated
  2. star connections check — reachability, loud on failure
  3. make check-all grows its execution half, shipping from build/<goos>-<goarch>/ (builds on make build cross-compiles for the selected platforms; dist ships every supported one #598)

Open questions, carried in the plan

  1. Does an entry name a platform or a machine — can one box claim several platforms?
  2. Where do binaries land remotely: fixed path, per-run temp, or XDG on the remote?
  3. Is shell the only thing SSH config cannot express?
  4. Does this belong to devlore-cli or to writ, which already knows about machines?

Related

Metadata

Metadata

Labels

Epic:QualityCoverageCode quality, coverage, and the lint gateschoreMaintenance work on the repo: build, CI, tooling, process

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions