Author SHA1 Message Date
jochen 8bf7026d97 Cite the hq issues by the numbers they were given: 285, 286, 287 2026-10-07 02:00:10 +02:00
7 changed files with 16 additions and 16 deletions
+2 -2
View File
@@ -17,7 +17,7 @@ import (
) )
// `check-here` is a pull request's merge check run on the machine at hand **exactly as the build seat // `check-here` is a pull request's merge check run on the machine at hand **exactly as the build seat
// runs it** (novox/hq issue 283): the same code (builder.Check), the same ask the controller would make of // runs it** (novox/hq issue 286): the same code (builder.Check), the same ask the controller would make of
// the seat — the gate's modules and judge by the planner's own answer over the facts snapshot, the // the seat — the gate's modules and judge by the planner's own answer over the facts snapshot, the
// repositories beside it at the refs the snapshot says the seat clones them at — in the toolchain image // repositories beside it at the refs the snapshot says the seat clones them at — in the toolchain image
// the mesh holds, as the user the build seat runs as, against a throwaway store and bus of the versions // the mesh holds, as the user the build seat runs as, against a throwaway store and bus of the versions
@@ -126,7 +126,7 @@ func checkHereCommand(ctx context.Context, args []string) error {
} }
if len(toolchains) == 0 { if len(toolchains) == 0 {
return errors.New("the facts snapshot names no toolchain: it was taken by a controller from before " + return errors.New("the facts snapshot names no toolchain: it was taken by a controller from before " +
"issue 283, and the seat's toolchain cannot be known here") "issue 286, and the seat's toolchain cannot be known here")
} }
beside := map[string]builder.Beside{} beside := map[string]builder.Beside{}
for d, ref := range f.Beside { for d, ref := range f.Beside {
+1 -1
View File
@@ -123,7 +123,7 @@ func run() error {
// The merge gate: every machine of the snapshot composed with a change (novox/hq to-be 45 §9). // The merge gate: every machine of the snapshot composed with a change (novox/hq to-be 45 §9).
case "merge-gate": case "merge-gate":
return mergeGateCommand(ctx, args[1:]) return mergeGateCommand(ctx, args[1:])
// A pull request's merge check run here exactly as the build seat runs it (novox/hq issue 283). // A pull request's merge check run here exactly as the build seat runs it (novox/hq issue 286).
case "check-here": case "check-here":
return checkHereCommand(ctx, args[1:]) return checkHereCommand(ctx, args[1:])
case "upgrade": case "upgrade":
+3 -3
View File
@@ -108,7 +108,7 @@ type mergeVerdict struct {
Facts time.Time `json:"facts"` Facts time.Time `json:"facts"`
Failures []string `json:"failures,omitempty"` Failures []string `json:"failures,omitempty"`
// Errors are what kept the gate from judging: a machine the mesh composes that the gate could not // Errors are what kept the gate from judging: a machine the mesh composes that the gate could not
// raise as it is. Any one makes the verdict an error — never a pass (novox/hq issue 282). // raise as it is. Any one makes the verdict an error — never a pass (novox/hq issue 285).
Errors []string `json:"errors,omitempty"` Errors []string `json:"errors,omitempty"`
Warnings []string `json:"warnings,omitempty"` Warnings []string `json:"warnings,omitempty"`
Notes []string `json:"notes,omitempty"` Notes []string `json:"notes,omitempty"`
@@ -222,7 +222,7 @@ func mergeGateCommand(ctx context.Context, args []string) error {
} }
// errMergeGateCouldNotJudge is the gate's own error: the mesh as it is could not be raised, so nothing // errMergeGateCouldNotJudge is the gate's own error: the mesh as it is could not be raised, so nothing
// the change does to it can be seen. Never a pass (novox/hq issue 282). // the change does to it can be seen. Never a pass (novox/hq issue 285).
var errMergeGateCouldNotJudge = errors.New("the merge gate could not judge the change") var errMergeGateCouldNotJudge = errors.New("the merge gate could not judge the change")
// errMergeGateFailed is the gate's own failure: the verdict says why, so the error says nothing more. // errMergeGateFailed is the gate's own failure: the verdict says why, so the error says nothing more.
@@ -351,7 +351,7 @@ func judgeChange(ctx context.Context, in mergeCheckInput) (mergeVerdict, error)
v.Failures = append(v.Failures, fmt.Sprintf("%s: nothing could be sent to it with this change — %s", v.Failures = append(v.Failures, fmt.Sprintf("%s: nothing could be sent to it with this change — %s",
gm.Described, firstOr(newOnly(gm.Change.Problems, gm.Base.Problems), gm.Change.Problems))) gm.Described, firstOr(newOnly(gm.Change.Problems, gm.Base.Problems), gm.Change.Problems)))
case !gm.Base.Composes && m.Declaration.Composes: case !gm.Base.Composes && m.Declaration.Composes:
// **The mesh composes it and the gate could not raise it as it is** (novox/hq issue 282): a fact // **The mesh composes it and the gate could not raise it as it is** (novox/hq issue 285): a fact
// the snapshot does not carry, or one the gate does not raise. Then the change is judged against a // the snapshot does not carry, or one the gate does not raise. Then the change is judged against a
// machine that is not the mesh's — broken against broken, which passes whatever the change does — // machine that is not the mesh's — broken against broken, which passes whatever the change does —
// so the gate cannot judge, and says so: an error, never a pass. // so the gate cannot judge, and says so: an error, never a pass.
+5 -5
View File
@@ -323,11 +323,11 @@ func busMesh(t *testing.T) snapshot.Facts {
return f return f
} }
// **Issue 282**: every machine running a module on the bus failed to compose in the gate's store, with // **Issue 285**: every machine running a module on the bus failed to compose in the gate's store, with
// the change and without — the store held the module's credential and no account for it, which // the change and without — the store held the module's credential and no account for it, which
// composition refuses (issue 203) — and the gate passed every change, "0 of 4 compose". The account the // composition refuses (issue 203) — and the gate passed every change, "0 of 4 compose". The account the
// mesh issued is raised with its credential, so the machine composes in the gate as on the mesh. // mesh issued is raised with its credential, so the machine composes in the gate as on the mesh.
func TestIssue282AModuleOnTheBusComposesInTheGate(t *testing.T) { func TestIssue285AModuleOnTheBusComposesInTheGate(t *testing.T) {
f := busMesh(t) f := busMesh(t)
v := gateJudged(t, f, "") v := gateJudged(t, f, "")
if v.Verdict != "pass" { if v.Verdict != "pass" {
@@ -343,10 +343,10 @@ func TestIssue282AModuleOnTheBusComposesInTheGate(t *testing.T) {
} }
} }
// **Issue 282**: a machine the mesh composes that the gate cannot raise as it is leaves the change judged // **Issue 285**: a machine the mesh composes that the gate cannot raise as it is leaves the change judged
// against a machine that is not the mesh's — broken against broken, which passes whatever the change does. // against a machine that is not the mesh's — broken against broken, which passes whatever the change does.
// That is an error, never a pass. // That is an error, never a pass.
func TestIssue282AMachineTheGateCannotRaiseIsAnErrorNeverAPass(t *testing.T) { func TestIssue285AMachineTheGateCannotRaiseIsAnErrorNeverAPass(t *testing.T) {
f := busMesh(t) f := busMesh(t)
for i := range f.Machines { for i := range f.Machines {
// A fact the snapshot does not carry: the module's credential, gone from the laptop's. // A fact the snapshot does not carry: the module's credential, gone from the laptop's.
@@ -386,7 +386,7 @@ func TestAWithheldPathIsStoodInForByAPath(t *testing.T) {
} }
} }
// **Issue 283**: a check run by hand clones beside a change what the seat clones — one rule, read by the // **Issue 286**: a check run by hand clones beside a change what the seat clones — one rule, read by the
// controller's ask and by the facts — and finds the repository it checks from its origin. // controller's ask and by the facts — and finds the repository it checks from its origin.
func TestACheckByHandClonesWhatTheSeatClones(t *testing.T) { func TestACheckByHandClonesWhatTheSeatClones(t *testing.T) {
for dir, refs := range map[string]map[string]string{ for dir, refs := range map[string]map[string]string{
+2 -2
View File
@@ -519,7 +519,7 @@ func gateLayer(ctx context.Context, spec CheckSpec, tree, root, gate, verdictFil
case "fail": case "fail":
return "fail", said.Summary return "fail", said.Summary
case "error": case "error":
// The gate could not raise the mesh as it is (novox/hq issue 282): said in its own words. // The gate could not raise the mesh as it is (novox/hq issue 285): said in its own words.
return "error", said.Summary return "error", said.Summary
} }
} }
@@ -835,7 +835,7 @@ func (t *tail) String() string {
// whatFailed is the line of a failed script's output that says what failed, for the status a pull request // whatFailed is the line of a failed script's output that says what failed, for the status a pull request
// shows: the first failing test, the first failing package, the files not formatted — a bare "FAIL" or a // shows: the first failing test, the first failing package, the files not formatted — a bare "FAIL" or a
// file's name said nothing a reader could act on (novox/hq issue 283) — and the last line otherwise. // file's name said nothing a reader could act on (novox/hq issue 286) — and the last line otherwise.
func whatFailed(s string) string { func whatFailed(s string) string {
lines := strings.Split(strings.TrimSpace(s), "\n") lines := strings.Split(strings.TrimSpace(s), "\n")
for i, line := range lines { for i, line := range lines {
+1 -1
View File
@@ -415,7 +415,7 @@ func TestABuildSaysWhetherItsCommitIsOnTheTrunk(t *testing.T) {
} }
} }
// **Issue 283**: a failed merge-check.sh was said by its last line — a bare "FAIL", or the name of a file // **Issue 286**: a failed merge-check.sh was said by its last line — a bare "FAIL", or the name of a file
// gofmt listed — which named nothing a reader could act on. The status says what failed. // gofmt listed — which named nothing a reader could act on. The status says what failed.
func TestAFailedScriptIsSaidByWhatFailed(t *testing.T) { func TestAFailedScriptIsSaidByWhatFailed(t *testing.T) {
for out, want := range map[string]string{ for out, want := range map[string]string{
+2 -2
View File
@@ -64,7 +64,7 @@ type Facts struct {
Edges []Edge `json:"edges,omitempty"` Edges []Edge `json:"edges,omitempty"`
// Beside is the ref each repository is cloned at beside a merge check, by the directory it is found // Beside is the ref each repository is cloned at beside a merge check, by the directory it is found
// under — the commits the mesh runs, the catalogue's main — so a check run by hand reads the siblings // under — the commits the mesh runs, the catalogue's main — so a check run by hand reads the siblings
// the build seat reads (novox/hq issue 283). // the build seat reads (novox/hq issue 286).
Beside map[string]string `json:"beside,omitempty"` Beside map[string]string `json:"beside,omitempty"`
} }
@@ -85,7 +85,7 @@ type Versions struct {
// Toolchains are the toolchain images a merge check runs in, by language, as the mesh holds them — // Toolchains are the toolchain images a merge check runs in, by language, as the mesh holds them —
// with no address: the artifact store the snapshot is read from is where they are pulled from. What // with no address: the artifact store the snapshot is read from is where they are pulled from. What
// a repository's merge-check.sh runs in on the build seat, and so what it must run in anywhere else // a repository's merge-check.sh runs in on the build seat, and so what it must run in anywhere else
// (novox/hq issue 283): two releases of one compiler disagree, down to how gofmt lays out a file. // (novox/hq issue 286): two releases of one compiler disagree, down to how gofmt lays out a file.
Toolchains map[string]string `json:"toolchains,omitempty"` Toolchains map[string]string `json:"toolchains,omitempty"`
} }