Repository navigation
Platform connection points: run the execution matrix on real machines #671
Description
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
- The
connectionssection, platform-keyed and validated star connections check— reachability, loud on failuremake check-allgrows its execution half, shipping frombuild/<goos>-<goarch>/(builds on make build cross-compiles for the selected platforms; dist ships every supported one #598)
Open questions, carried in the plan
- Does an entry name a platform or a machine — can one box claim several platforms?
- Where do binaries land remotely: fixed path, per-run temp, or XDG on the remote?
- Is
shellthe only thing SSH config cannot express? - Does this belong to devlore-cli or to
writ, which already knows about machines?
Related
- CI must be a strict superset of the local checks #670 — CI as a strict superset; this is its execution half
- make build cross-compiles for the selected platforms; dist ships every supported one #598 — build once, test many; supplies the binaries this ships
Activity
docs(op): the record catches up with what shipped
Providers claim what they guarantee, and a type-checked pass holds th…