Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1747e33923 |
@@ -835,9 +835,6 @@ type answers struct {
|
||||
// public name on the machine went dark. The holds were correct; they were recorded only in the
|
||||
// machine's own state file, and the one visible symptom was a count that did not add up.
|
||||
untaken map[string]map[string]int
|
||||
// leftOut is, per machine, every module of its set its composition leaves out, and why (novox/hq issue
|
||||
// 380): assigned and not applied, which every push said only in passing. Not well while there is any.
|
||||
leftOut map[string][]leftOutModule
|
||||
// unheld is every module on a machine whose resources are applied through a seat nothing on
|
||||
// that machine holds (novox/hq ADR 0207), with the modules that could hold it. Reported, not
|
||||
// refused, until the switch — and while there is any, the mesh is not all well: the order the
|
||||
|
||||
@@ -144,15 +144,11 @@ func actOnDeadLetter(ctx context.Context, on *busHandles, act string, id uint64,
|
||||
}
|
||||
switch act {
|
||||
case "deliver":
|
||||
delivered, to, err := link.DeliverAgain(on.js, id)
|
||||
_, to, err := link.DeliverAgain(on.js, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
answer["delivered_on"] = to
|
||||
if delivered.Original != "" {
|
||||
// What became of the ask in its seat's queue (novox/hq issue 334): removed, or left, and why.
|
||||
answer["original"] = delivered.Original
|
||||
}
|
||||
answer["done"] = fmt.Sprintf("dead letter %d was delivered again to %s, and nobody else; it is no longer kept",
|
||||
id, consumerWho(d.Stream, d.Consumer))
|
||||
case "drop":
|
||||
|
||||
@@ -136,11 +136,6 @@ var probeRegistry = []probe{
|
||||
{ID: "D-root", Asserts: "no agent can become root without a person on a machine where the router or a channel " +
|
||||
"proving its sender runs: not by its own account, and not through a tool that runs its command as an account " +
|
||||
"that can", From: "ADR 0259 §8", Kind: kindRootNotFree, Phase: 2, run: probeAgentRoot},
|
||||
// A module assigned and left out of its machine's composition (novox/hq issue 380): said on that machine, the
|
||||
// operator's, never urgent; cleared once it composes again or is unassigned.
|
||||
{ID: probeLeftOutID, Asserts: "no module assigned to a machine is left out of its composition unsaid: each " +
|
||||
"raises needs-operator for a setting nobody gave, left-out for any other cause", From: "issue 380",
|
||||
Kind: kindLeftOut, Raises: []string{kindNeedsOperator}, Phase: 1, run: probeLeftOut},
|
||||
{ID: "DW", Asserts: "the watchdogs of the signals table ran within three of their intervals",
|
||||
From: "ADR 0227 rule 6: the watchers are watched", Kind: "watchdogs-silent", Phase: 1, run: probeWatchdogs},
|
||||
// The core's health definitions (novox/hq to-be 45 §8, ADR 0236): what a core component's new build is
|
||||
|
||||
@@ -1,226 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/novox/mesh-controller/internal/catalogue"
|
||||
"github.com/novox/mesh-controller/internal/conditions"
|
||||
)
|
||||
|
||||
// A module assigned to a machine and left out of its composition is said (novox/hq issue 380).
|
||||
//
|
||||
// **An omission is a finding, never a refusal of the push** (ADR 0163, rule 6): the machine is sent everything
|
||||
// else, and the module's held things are kept. Until issue 380 the only place it showed was `plan`: nfs-server was
|
||||
// assigned to the home server for days, every push left it out for a setting nobody gave, and the operator believed
|
||||
// it ran. So the self-check composes every machine as the next push would (Resolution.LeftOutBecause, the push's
|
||||
// own judgement) and raises a condition on that machine for each module it leaves out:
|
||||
//
|
||||
// - a setting nobody gave (catalogue.UnsetSettingError) is the operator's to give: kind needs-operator, naming
|
||||
// the module, the setting and the command that sets it;
|
||||
// - any other cause is said as a module not working is: kind left-out, a warning with the reason as evidence.
|
||||
//
|
||||
// Never urgent and never escalated by age (as ADR 0283 decision 5): nothing the machine ran was undone. It clears
|
||||
// on the first run that no longer finds it — the module composed again, or no longer assigned. `status` and
|
||||
// `node show` list the same modules under "assigned, not applied" with the same reason.
|
||||
//
|
||||
// A module left out because its stored manifest has a key this controller does not know is not raised here: the
|
||||
// catalogue's own unknown-field condition says it once for the whole mesh (ADR 0262); it is still listed.
|
||||
|
||||
const (
|
||||
// probeLeftOutID is the self-check's probe that raises and clears these conditions.
|
||||
probeLeftOutID = "D-left-out"
|
||||
// kindLeftOut is a module left out for any cause but a setting nobody gave; it is also every such condition's
|
||||
// token, whichever its kind, so a cause that changes is the same condition said anew.
|
||||
kindLeftOut = "left-out"
|
||||
)
|
||||
|
||||
// leftOutModule is one module of a machine's set that its composition leaves out, and why.
|
||||
type leftOutModule struct {
|
||||
Module string
|
||||
// Setting is the setting nobody gave, when that is the cause.
|
||||
Setting string
|
||||
// Why is the composition's own reason, whole.
|
||||
Why string
|
||||
// Unread is a stored manifest this controller cannot read whole (said by the catalogue's condition).
|
||||
Unread bool
|
||||
}
|
||||
|
||||
// leftOutOf is every module of a machine's resolution that a push would leave out, sorted. Pure: the judgement
|
||||
// the push makes (catalogue.Resolution.LeftOutBecause), nothing allocated.
|
||||
func leftOutOf(plan catalogue.Resolution, settings catalogue.SettingsBy, adopted bool) []leftOutModule {
|
||||
because := plan.LeftOutBecause(settings, adopted)
|
||||
out := make([]leftOutModule, 0, len(because))
|
||||
for module, why := range because {
|
||||
l := leftOutModule{Module: module, Why: oneLine(why.Error())}
|
||||
var unset *catalogue.UnsetSettingError
|
||||
var unread *catalogue.UnreadManifestError
|
||||
switch {
|
||||
case errors.As(why, &unset):
|
||||
l.Setting = unset.Setting
|
||||
case errors.As(why, &unread):
|
||||
l.Unread = true
|
||||
}
|
||||
out = append(out, l)
|
||||
}
|
||||
sort.Slice(out, func(i, j int) bool { return out[i].Module < out[j].Module })
|
||||
return out
|
||||
}
|
||||
|
||||
// settingCommand is the command that gives a module's setting on one machine.
|
||||
func settingCommand(module, setting, node string) string {
|
||||
return fmt.Sprintf("`settings set %s '{%q: …}' --node %s`", module, setting, node)
|
||||
}
|
||||
|
||||
// reason is why a module is left out, as `status`, `node show` and the condition's summary say it: for a setting
|
||||
// nobody gave, the setting and the command that gives it; otherwise the composition's own words.
|
||||
func (l leftOutModule) reason(node string) string {
|
||||
if l.Setting != "" {
|
||||
return fmt.Sprintf("nothing sets its setting %q, so every push leaves it out — %s sets it", l.Setting,
|
||||
settingCommand(l.Module, l.Setting, node))
|
||||
}
|
||||
return "every push leaves it out: " + l.Why
|
||||
}
|
||||
|
||||
// leftOutObservations are the conditions a machine's left-out modules raise, one each.
|
||||
func leftOutObservations(node string, left []leftOutModule) []conditions.Observation {
|
||||
var out []conditions.Observation
|
||||
for _, l := range left {
|
||||
if l.Unread {
|
||||
continue
|
||||
}
|
||||
out = append(out, leftOutObservation(node, l))
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// leftOutObservation is one module left out of one machine's composition: needs-operator for a setting nobody
|
||||
// gave, left-out otherwise; a warning either way, the operator's to resolve.
|
||||
func leftOutObservation(node string, l leftOutModule) conditions.Observation {
|
||||
o := conditions.Observation{Scope: conditions.ScopeModule, ID: l.Module + "." + node, Token: kindLeftOut,
|
||||
Kind: kindLeftOut, Machine: node, Severity: conditions.Warning, Resolver: conditions.ResolverOperator,
|
||||
Summary: fmt.Sprintf("%s is assigned to %s and not applied: %s", l.Module, node, l.reason(node)),
|
||||
Said: l.Why}
|
||||
w := leftOutWords(l.Module, node, l.Setting)
|
||||
if l.Setting != "" {
|
||||
o.Kind = kindNeedsOperator
|
||||
} else {
|
||||
// The composition's words may name a path or an address, which the operator's channel withholds: the
|
||||
// summary sends them to the evidence, and `plan` says them in full.
|
||||
o.Summary = fmt.Sprintf("%s is assigned to %s and not applied: every push leaves it out, because what is "+
|
||||
"set for it does not compose with its definition — the evidence and `plan %s` say why", l.Module, node, node)
|
||||
}
|
||||
o.Headline, o.Explanation, o.Needs, o.Resolved = w.Headline, w.Explanation, w.Needs, w.Resolved
|
||||
return o
|
||||
}
|
||||
|
||||
// leftOutWords is what the operator reads of a module left out (ADR 0253): plain, the act named.
|
||||
func leftOutWords(module, node, setting string) words {
|
||||
w := words{
|
||||
Headline: fmt.Sprintf("%s is not applied on %s", module, node),
|
||||
Explanation: fmt.Sprintf("%s is assigned to %s, and every update of %s leaves it out because what is set "+
|
||||
"for it does not fit its definition. Nothing of it changes there; the rest of %s is updated as usual.",
|
||||
module, node, node, node),
|
||||
Needs: fmt.Sprintf("read why in the details, then change what is set for %s or unassign it.", module),
|
||||
Resolved: fmt.Sprintf("%s on %s is no longer left out", module, node),
|
||||
}
|
||||
if setting != "" {
|
||||
w.Explanation = fmt.Sprintf("%s is assigned to %s, and every update of %s leaves it out because nothing "+
|
||||
"sets its setting %s. Nothing of it runs there until it is set; the rest of %s is updated as usual.",
|
||||
module, node, node, setting, node)
|
||||
w.Needs = fmt.Sprintf("set %s for %s on %s, or approve it when it is proposed to you.", setting, module, node)
|
||||
// A setting's name that is not plain (a dotted key) is in the summary instead.
|
||||
if _, ok := conditions.PlainWords(w, node); !ok {
|
||||
w.Explanation = fmt.Sprintf("%s is assigned to %s, and every update of %s leaves it out because a "+
|
||||
"setting it needs is not set. Nothing of it runs there until it is set; the details name it.",
|
||||
module, node, node)
|
||||
w.Needs = fmt.Sprintf("set what %s needs on %s; the details name the setting.", module, node)
|
||||
}
|
||||
}
|
||||
return w
|
||||
}
|
||||
|
||||
// probeLeftOut is the self-check's probe of issue 380: every machine's set is judged as its next push would
|
||||
// judge it, and each module left out raises its condition. A machine that does not resolve is passed over — D1
|
||||
// says it — and a store that cannot be read is an error, never "nothing left out" (ADR 0227 rule 4).
|
||||
func probeLeftOut(ctx context.Context, d *doctor) ([]conditions.Observation, error) {
|
||||
nodes, err := d.open.inventory.Nodes(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var out []conditions.Observation
|
||||
for _, n := range nodes {
|
||||
plan, settings, err := planFor(ctx, d.open, n.Name)
|
||||
if err != nil {
|
||||
if unresolvable(err) {
|
||||
continue
|
||||
}
|
||||
return nil, fmt.Errorf("%s cannot be worked out: %w", n.Name, err)
|
||||
}
|
||||
out = append(out, leftOutObservations(n.Name, leftOutOf(plan, settings, n.Adopted))...)
|
||||
if ctx.Err() != nil {
|
||||
return nil, ctx.Err()
|
||||
}
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// notAppliedLines is a machine's "assigned, not applied" as `node show` prints it: one line a module, with the
|
||||
// reason its condition says.
|
||||
func notAppliedLines(node string, left []leftOutModule) []string {
|
||||
if len(left) == 0 {
|
||||
return nil
|
||||
}
|
||||
lines := []string{"", " assigned, not applied:"}
|
||||
for _, l := range left {
|
||||
lines = append(lines, fmt.Sprintf(" %-22s %s", l.Module, l.reason(node)))
|
||||
}
|
||||
return lines
|
||||
}
|
||||
|
||||
// machineNotApplied is one module assigned to a machine and left out of its composition, in `status --json`.
|
||||
type machineNotApplied struct {
|
||||
Node string `json:"node"`
|
||||
Module string `json:"module"`
|
||||
Setting string `json:"setting,omitempty"`
|
||||
Reason string `json:"reason"`
|
||||
}
|
||||
|
||||
// notApplied is every machine's left-out modules, in a stated order, as `status --json` carries them.
|
||||
func notApplied(left map[string][]leftOutModule) []machineNotApplied {
|
||||
names := make([]string, 0, len(left))
|
||||
for name := range left {
|
||||
names = append(names, name)
|
||||
}
|
||||
sort.Strings(names)
|
||||
var out []machineNotApplied
|
||||
for _, name := range names {
|
||||
for _, l := range left[name] {
|
||||
out = append(out, machineNotApplied{Node: name, Module: l.Module, Setting: l.Setting, Reason: l.reason(name)})
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// printNotApplied is status's "assigned, not applied", every machine's.
|
||||
func printNotApplied(left map[string][]leftOutModule) {
|
||||
rows := notApplied(left)
|
||||
if len(rows) == 0 {
|
||||
return
|
||||
}
|
||||
fmt.Printf("%d module(s) assigned, not applied — every push leaves them out, and each raises a condition:\n",
|
||||
len(rows))
|
||||
for _, r := range rows {
|
||||
fmt.Printf(" %-12s %-22s %s\n", r.Node, r.Module, r.Reason)
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
// isLeftOutCondition is whether a condition is this probe's, which the machine's health statements neither
|
||||
// raise nor clear.
|
||||
func isLeftOutCondition(c conditions.Condition) bool {
|
||||
return c.Source == probeLeftOutID || strings.HasSuffix(c.Key, "."+kindLeftOut)
|
||||
}
|
||||
@@ -1,203 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/novox/mesh-controller/internal/catalogue"
|
||||
"github.com/novox/mesh-controller/internal/conditions"
|
||||
"github.com/novox/mesh-controller/internal/inventory"
|
||||
)
|
||||
|
||||
// novox/hq issue 380: nfs-server was assigned to the home server for days and every push left it out — "nfs-server
|
||||
// has a file that says ${setting:shares}, and nothing sets shares for it" — and nothing but `plan` said so. The
|
||||
// manifest is the catalogue's own at the commit that added it (mesh-catalog 48fba44), which still says
|
||||
// ${setting:shares}; the reason below is the one the live push printed.
|
||||
|
||||
// leftOutNFS is the resolution of a machine assigned that nfs-server, with the settings given.
|
||||
func leftOutNFS(t *testing.T) catalogue.Resolution {
|
||||
t.Helper()
|
||||
raw, err := os.ReadFile("testdata/left-out/nfs-server.json")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
m, err := catalogue.ParseManifest(raw)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return catalogue.Resolution{Modules: []catalogue.Manifest{m}}
|
||||
}
|
||||
|
||||
// sharesGiven is the operator's setting for it on the machine.
|
||||
func sharesGiven(value string) catalogue.SettingsBy {
|
||||
return catalogue.SettingsBy{"nfs-server": {{From: "anchor", Values: map[string]any{"shares": value}}}}
|
||||
}
|
||||
|
||||
func TestAModuleLeftOutForASettingNobodyGaveNeedsTheOperatorNamingTheSettingAndTheCommand(t *testing.T) {
|
||||
left := leftOutOf(leftOutNFS(t), nil, false)
|
||||
if len(left) != 1 || left[0].Module != "nfs-server" || left[0].Setting != "shares" {
|
||||
t.Fatalf("left out: %+v", left)
|
||||
}
|
||||
if !strings.Contains(left[0].Why, `nothing sets "shares" for it`) {
|
||||
t.Fatalf("the reason is not the push's own: %s", left[0].Why)
|
||||
}
|
||||
obs := leftOutObservations("anchor", left)
|
||||
if len(obs) != 1 {
|
||||
t.Fatalf("raised %+v", obs)
|
||||
}
|
||||
o := obs[0]
|
||||
if o.Key() != "module.nfs-server.anchor.left-out" || o.Kind != kindNeedsOperator || o.Machine != "anchor" ||
|
||||
o.Severity != conditions.Warning || o.Resolver != conditions.ResolverOperator {
|
||||
t.Fatalf("raised %s as %s, %s, by %s, on %q", o.Key(), o.Kind, o.Severity, o.Resolver, o.Machine)
|
||||
}
|
||||
for _, want := range []string{"nfs-server", "anchor", `"shares"`, "`settings set nfs-server '{\"shares\": …}' --node anchor`"} {
|
||||
if !strings.Contains(o.Summary, want) {
|
||||
t.Errorf("the summary does not name %s: %s", want, o.Summary)
|
||||
}
|
||||
}
|
||||
if o.Said != left[0].Why {
|
||||
t.Errorf("the evidence is not the composition's reason: %s", o.Said)
|
||||
}
|
||||
plainExample(t, o, "nfs-server is not applied on anchor",
|
||||
"Needs you: set shares for nfs-server on anchor, or approve it when it is proposed to you. nfs-server is assigned to "+
|
||||
"anchor, and every update of anchor leaves it out because nothing sets its setting shares. Nothing of it "+
|
||||
"runs there until it is set; the rest of anchor is updated as usual.")
|
||||
}
|
||||
|
||||
func TestAModuleLeftOutForAnotherCauseIsAWarningWithTheReasonAsEvidence(t *testing.T) {
|
||||
// A setting stored that its definition can no longer compose: one with a line break (issue 339).
|
||||
left := leftOutOf(leftOutNFS(t), sharesGiven("library=/srv/library\nmedia=/srv/media"), false)
|
||||
if len(left) != 1 || left[0].Setting != "" {
|
||||
t.Fatalf("left out: %+v", left)
|
||||
}
|
||||
obs := leftOutObservations("anchor", left)
|
||||
if len(obs) != 1 {
|
||||
t.Fatalf("raised %+v", obs)
|
||||
}
|
||||
o := obs[0]
|
||||
if o.Key() != "module.nfs-server.anchor.left-out" || o.Kind != kindLeftOut || o.Severity != conditions.Warning {
|
||||
t.Fatalf("raised %s as %s, %s", o.Key(), o.Kind, o.Severity)
|
||||
}
|
||||
if !strings.Contains(o.Said, "holds a line break") || strings.Contains(o.Summary, "/srv/") {
|
||||
t.Fatalf("the reason is not the evidence, or the summary carries it to the channel:\n%s\n%s", o.Summary, o.Said)
|
||||
}
|
||||
plainExample(t, o, "nfs-server is not applied on anchor",
|
||||
"Needs you: read why in the details, then change what is set for nfs-server or unassign it. nfs-server is assigned to "+
|
||||
"anchor, and every update of anchor leaves it out because what is set for it does not fit its definition. "+
|
||||
"Nothing of it changes there; the rest of anchor is updated as usual.")
|
||||
}
|
||||
|
||||
// The self-check raises it, keeps it a warning however long it stands, and clears it when the module composes
|
||||
// again or is no longer assigned; a machine's health statement neither clears nor raises it.
|
||||
func TestALeftOutModulesConditionClearsWhenItComposesAgainOrIsUnassigned(t *testing.T) {
|
||||
plan, settings := leftOutNFS(t), catalogue.SettingsBy(nil)
|
||||
withProbes(t, probe{ID: probeLeftOutID, Asserts: "the test's", Kind: kindLeftOut, Phase: 1,
|
||||
run: func(context.Context, *doctor) ([]conditions.Observation, error) {
|
||||
return leftOutObservations("anchor", leftOutOf(plan, settings, false)), nil
|
||||
}})
|
||||
store := conditions.NewInMemory()
|
||||
k := conditions.NewKeeper(t.Context(), conditions.Options{Store: store, History: store})
|
||||
defer k.Close(context.Background())
|
||||
d := &doctor{keeper: k, teller: &conditions.Told{}, host: "anchor"}
|
||||
key := "module.nfs-server.anchor.left-out"
|
||||
openOnes := func() map[string]conditions.Condition {
|
||||
t.Helper()
|
||||
open, err := k.Open(t.Context())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
out := map[string]conditions.Condition{}
|
||||
for _, c := range open {
|
||||
out[c.Key] = c
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
d.runOnce(t.Context(), "a test")
|
||||
c, raised := openOnes()[key]
|
||||
if !raised || c.Kind != kindNeedsOperator || c.Severity != conditions.Warning {
|
||||
t.Fatalf("a module left out raised %+v", openOnes())
|
||||
}
|
||||
// A statement from the machine that says nothing of it — the module runs nothing there — leaves it open.
|
||||
if err := judgeModuleHealth(t.Context(), nil, k, "anchor", map[string][]inventory.ResourceHealth{}, nil,
|
||||
time.Now().Add(72*time.Hour)); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, still := openOnes()[key]; !still {
|
||||
t.Fatal("a health statement that says nothing of the module cleared its left-out condition")
|
||||
}
|
||||
d.runOnce(t.Context(), "a test")
|
||||
if c := openOnes()[key]; c.Severity != conditions.Warning {
|
||||
t.Fatalf("after a health statement and days, it is %+v", openOnes())
|
||||
}
|
||||
|
||||
// The setting given: it composes, and the condition clears.
|
||||
settings = sharesGiven("library=/srv/library")
|
||||
d.runOnce(t.Context(), "a test")
|
||||
if _, still := openOnes()[key]; still {
|
||||
t.Fatalf("composed again, still open: %+v", openOnes())
|
||||
}
|
||||
|
||||
// Left out again, then unassigned: no longer in the machine's set, and it clears.
|
||||
settings = nil
|
||||
d.runOnce(t.Context(), "a test")
|
||||
if _, raised := openOnes()[key]; !raised {
|
||||
t.Fatal("left out again and not raised")
|
||||
}
|
||||
plan = catalogue.Resolution{}
|
||||
d.runOnce(t.Context(), "a test")
|
||||
if _, still := openOnes()[key]; still {
|
||||
t.Fatalf("unassigned, still open: %+v", openOnes())
|
||||
}
|
||||
}
|
||||
|
||||
func TestTheLeftOutProbeIsInTheRegistry(t *testing.T) {
|
||||
for _, p := range probeRegistry {
|
||||
if p.ID == probeLeftOutID {
|
||||
if p.run == nil || p.Kind != kindLeftOut {
|
||||
t.Fatalf("%+v", p)
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
t.Fatalf("no probe %s: a module left out is said nowhere", probeLeftOutID)
|
||||
}
|
||||
|
||||
// status and node show list it under "assigned, not applied" with the reason the condition says, and status is
|
||||
// not well while there is one.
|
||||
func TestStatusAndNodeListAModuleAssignedAndNotApplied(t *testing.T) {
|
||||
left := map[string][]leftOutModule{"anchor": leftOutOf(leftOutNFS(t), nil, false)}
|
||||
reason := leftOutObservations("anchor", left["anchor"])[0].Summary
|
||||
asked := answers{leftOut: left}
|
||||
if asked.well() {
|
||||
t.Fatal("a mesh with a module assigned and not applied is called well")
|
||||
}
|
||||
shown := printed(t, func() error { return printStatus(asked) })
|
||||
if !strings.Contains(shown, "1 module(s) assigned, not applied") || !strings.Contains(shown, "nfs-server") ||
|
||||
!strings.Contains(shown, "`settings set nfs-server '{\"shares\": …}' --node anchor` sets it") {
|
||||
t.Fatalf("status says:\n%s", shown)
|
||||
}
|
||||
if !strings.Contains(reason, left["anchor"][0].reason("anchor")) {
|
||||
t.Fatalf("status and the condition say different reasons:\n%s\n%s", shown, reason)
|
||||
}
|
||||
body, err := statusAsJSON(asked)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var doc struct {
|
||||
NotApplied []machineNotApplied `json:"not-applied"`
|
||||
}
|
||||
if err := json.Unmarshal(body, &doc); err != nil || len(doc.NotApplied) != 1 ||
|
||||
doc.NotApplied[0].Setting != "shares" || doc.NotApplied[0].Node != "anchor" {
|
||||
t.Fatalf("status --json: %v %s", err, body)
|
||||
}
|
||||
lines := strings.Join(notAppliedLines("anchor", left["anchor"]), "\n")
|
||||
if !strings.Contains(lines, "assigned, not applied:") || !strings.Contains(lines, "nfs-server") ||
|
||||
!strings.Contains(lines, `nothing sets its setting "shares"`) {
|
||||
t.Fatalf("node show says:\n%s", lines)
|
||||
}
|
||||
}
|
||||
@@ -147,11 +147,9 @@ func judgeModuleHealth(ctx context.Context, inv *inventory.Inventory, k *conditi
|
||||
}
|
||||
standing := map[string]conditions.Condition{}
|
||||
for _, c := range open {
|
||||
// A module left out of the composition is the self-check's to raise and clear, never a statement's
|
||||
// (novox/hq issue 380): its needs-operator is not cleared for not being in what the machine runs.
|
||||
if (c.Kind == kindModuleUnhealthy || c.Kind == kindReloginNeeded || c.Kind == kindUsedAsFound ||
|
||||
c.Kind == kindNeedsOperator) &&
|
||||
c.Subject.Machine == node && !isLeftOutCondition(c) {
|
||||
c.Subject.Machine == node {
|
||||
standing[c.Key] = c
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ func nodeCommand(ctx context.Context, args []string) error {
|
||||
if len(args) != 2 {
|
||||
return errors.New("node show <name>")
|
||||
}
|
||||
return showNode(ctx, open, args[1])
|
||||
return showNode(ctx, inv, args[1])
|
||||
case "add":
|
||||
return addNode(ctx, inv, args[1:])
|
||||
|
||||
@@ -787,8 +787,7 @@ func roughly(d time.Duration) string {
|
||||
//
|
||||
// It is also where "what should it be configured as" is read. The same line that gates an
|
||||
// assignment carries `card1-DP-1`, and a person composing settings for that machine needs it.
|
||||
func showNode(ctx context.Context, stored *stores, name string) error {
|
||||
inv := stored.inventory
|
||||
func showNode(ctx context.Context, inv *inventory.Inventory, name string) error {
|
||||
node, err := inv.NodeByName(ctx, name)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -890,17 +889,6 @@ func showNode(ctx context.Context, stored *stores, name string) error {
|
||||
if len(assigned) > 0 {
|
||||
fmt.Printf("\n assigned: %s\n", strings.Join(assigned, ", "))
|
||||
}
|
||||
// And which of them a push leaves out, and why (novox/hq issue 380): judged as the push judges it, the same
|
||||
// reason its condition says. Not computable is said, never read as "all applied".
|
||||
plan, settings, err := planFor(ctx, stored, name)
|
||||
switch {
|
||||
case err != nil:
|
||||
fmt.Printf("\n whether a push leaves any assigned module out is NOT known: %s\n", oneLine(err.Error()))
|
||||
default:
|
||||
for _, line := range notAppliedLines(name, leftOutOf(plan, settings, node.Adopted)) {
|
||||
fmt.Println(line)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -231,14 +231,6 @@ var plainWordings = map[string]func(conditions.Observation) words{
|
||||
w := needsOperatorWords(orModule(module), node, nil)
|
||||
return w
|
||||
}),
|
||||
kindLeftOut: worded(func(o conditions.Observation) words {
|
||||
// The observation carries its own words (novox/hq issue 380); these are its kind's alone.
|
||||
module := ""
|
||||
if o.Scope == conditions.ScopeModule && o.Machine != "" {
|
||||
module = strings.TrimSuffix(o.ID, "."+o.Machine)
|
||||
}
|
||||
return leftOutWords(orModule(module), machineOr(o, "a machine"), "")
|
||||
}),
|
||||
kindProviderFailing: worded(func(o conditions.Observation) words {
|
||||
thing, consumer := conditions.ThingWords(o), idPart(o, 2)
|
||||
if consumer == "" {
|
||||
|
||||
@@ -69,9 +69,6 @@ type meshStatus struct {
|
||||
// **A document without this said an outage was a well mesh.** Read from what each machine
|
||||
// reported, so it is the machine's account and not the mesh's take-time listing.
|
||||
Untaken []machineUntaken `json:"untaken,omitempty"`
|
||||
// NotApplied is every module assigned to a machine and left out of its composition, with why (novox/hq
|
||||
// issue 380). Absent when every module composes.
|
||||
NotApplied []machineNotApplied `json:"not-applied,omitempty"`
|
||||
// Filtered is every converged machine that is not filtered by the mesh alone (novox/hq ADR
|
||||
// 0168), one entry per rule set the mesh did not write — the found firewall in force again,
|
||||
// or a chain nobody speaks for. Absent when every converged machine is filtered by the mesh
|
||||
@@ -254,7 +251,6 @@ func statusAsJSON(asked answers) ([]byte, error) {
|
||||
}
|
||||
}
|
||||
out.Unheld = asked.unheld
|
||||
out.NotApplied = notApplied(asked.leftOut)
|
||||
out.HandActsThisWeek, out.HandActsUnread = asked.handActs, asked.handActsUnread
|
||||
out.HealsThisWeek, out.HealsUnread = asked.heals, asked.healsUnread
|
||||
// In brief, as `conditions` lists them: status leads with every open condition, and their whole
|
||||
|
||||
@@ -66,7 +66,7 @@ func TestAProviderFailingAConsumerBreaksAllWellUntilItRecovers(t *testing.T) {
|
||||
}
|
||||
// Both machines' `node show` name it: where the provider runs, and where the consumer is.
|
||||
for _, node := range []string{"anchor", "laptop"} {
|
||||
shown := printed(t, func() error { return showNode(ctx, open, node) })
|
||||
shown := printed(t, func() error { return showNode(ctx, open.inventory, node) })
|
||||
if !strings.Contains(shown, "open condition(s) about this machine") || !strings.Contains(shown, "mesh_laptop_dashboard") {
|
||||
t.Fatalf("node show %s does not name it:\n%s", node, shown)
|
||||
}
|
||||
|
||||
@@ -289,10 +289,6 @@ func printStatus(asked answers) error {
|
||||
fmt.Printf("\n `take <node> <module>` compares what runs against what it declares, and runs it\n\n")
|
||||
}
|
||||
|
||||
// Assigned and not applied (novox/hq issue 380): before what is merely reported, because it reads like work
|
||||
// finished and is none.
|
||||
printNotApplied(asked.leftOut)
|
||||
|
||||
if len(asked.unheld) > 0 {
|
||||
// **Reported, and not refused yet** (novox/hq ADR 0207 §4). Each machine still resolves and
|
||||
// is sent what it would be; this says which of its modules depend on a seat nothing there
|
||||
@@ -460,13 +456,6 @@ func theThreeQuestions(ctx context.Context, open *stores) (answers, error) {
|
||||
return answers{}, err
|
||||
}
|
||||
plans[n.Name] = planned{plan, settings}
|
||||
// And which of its modules a push leaves out (novox/hq issue 380), judged as the push judges it.
|
||||
if left := leftOutOf(plan, settings, n.Adopted); len(left) > 0 {
|
||||
if out.leftOut == nil {
|
||||
out.leftOut = map[string][]leftOutModule{}
|
||||
}
|
||||
out.leftOut[n.Name] = left
|
||||
}
|
||||
out.unheld = append(out.unheld, plan.Unheld...)
|
||||
// And which of its modules a provider leaves out of its grants, for an identity too long
|
||||
// for what the provision keeps (novox/hq ADR 0225) — judged from the consumer's own
|
||||
@@ -615,7 +604,7 @@ func untakenModules(ctx context.Context, inv *inventory.Inventory, nodes []inven
|
||||
// read as success for the whole of the edge cut-over outage (novox/hq 04-ISSUES/125).
|
||||
func (a answers) well() bool {
|
||||
return len(a.wrong) == 0 && len(a.quiet) == 0 && len(a.behind) == 0 &&
|
||||
len(a.waiting) == 0 && len(a.refused) == 0 && a.network == "" && len(a.untaken) == 0 && len(a.leftOut) == 0 &&
|
||||
len(a.waiting) == 0 && len(a.refused) == 0 && a.network == "" && len(a.untaken) == 0 &&
|
||||
len(a.filtered) == 0 && len(a.unheld) == 0 && len(a.overflowing) == 0 &&
|
||||
len(a.conditions) == 0 && a.conditionsUnread == "" && a.pendingUnread == "" && !pendingOpen(a.pending)
|
||||
}
|
||||
|
||||
@@ -1,142 +0,0 @@
|
||||
{
|
||||
"module": "nfs-server",
|
||||
"version": "1",
|
||||
"upgrade": {
|
||||
"policy": "record",
|
||||
"why": "the folders other machines mount: a build that breaks the exports leaves every client's mount hanging or refused, and the gate on this one machine does not see the clients (hq ADR 0236, ADR 0263)"
|
||||
},
|
||||
"capabilities": [
|
||||
"package-manager",
|
||||
"service-manager"
|
||||
],
|
||||
"provides": [
|
||||
{
|
||||
"name": "nfs-share",
|
||||
"scope": "mesh",
|
||||
"identity": false
|
||||
}
|
||||
],
|
||||
"data": {
|
||||
"consumers": {
|
||||
"nfs-share": {
|
||||
"class": "none",
|
||||
"why": "the shared folders are the operator's data (hq ADR 0051): what a client writes lands in them, and they are protected where the operator declares them, never by this module, which keeps nothing of a consumer's"
|
||||
}
|
||||
}
|
||||
},
|
||||
"claims": [
|
||||
{
|
||||
"name": "node-nfs-server",
|
||||
"scope": "node",
|
||||
"serves": [
|
||||
"exports",
|
||||
"clients",
|
||||
"test",
|
||||
"reload",
|
||||
"adopt"
|
||||
]
|
||||
}
|
||||
],
|
||||
"state": [
|
||||
{
|
||||
"name": "exports",
|
||||
"ttl-seconds": 120,
|
||||
"per-machine": true
|
||||
}
|
||||
],
|
||||
"tools": [
|
||||
"nfs_health"
|
||||
],
|
||||
"listens": [
|
||||
{
|
||||
"name": "nfs",
|
||||
"port": 2049,
|
||||
"protocol": "tcp",
|
||||
"from": "mesh",
|
||||
"fixed": true,
|
||||
"why": "the shares, to the mesh's machines only (hq ADR 0263): NFS version 4 alone, which needs no other port, and never the home network, where a device that is not a node could claim any user id"
|
||||
}
|
||||
],
|
||||
"resources": [
|
||||
{
|
||||
"id": "package",
|
||||
"type": "package",
|
||||
"package": "nfs-utils"
|
||||
},
|
||||
{
|
||||
"id": "nfs-conf",
|
||||
"type": "file",
|
||||
"path": "/etc/nfs.conf.d/50-mesh.conf",
|
||||
"mode": "0644",
|
||||
"content": "# Written by the mesh (module nfs-server, novox/hq ADR 0263). Replaced on every push; a drop-in of\n# the operator's that sorts after this one overrides it, and is theirs.\n#\n# NFS version 4 only: a client needs port 2049 and nothing else, so the module opens nothing more\n# than that, to the private network. Version 3 needs rpcbind and mountd, on ports the mesh does not open.\n[nfsd]\nvers2=n\nvers3=n\nvers4=y\nvers4.0=n\nvers4.1=y\nvers4.2=y\n"
|
||||
},
|
||||
{
|
||||
"id": "config-dir",
|
||||
"type": "directory",
|
||||
"path": "/etc/nfs-server",
|
||||
"mode": "0755"
|
||||
},
|
||||
{
|
||||
"id": "config",
|
||||
"type": "file",
|
||||
"path": "/etc/nfs-server/shares.conf",
|
||||
"mode": "0644",
|
||||
"content": "# Written by the mesh (module nfs-server, novox/hq ADR 0263) from this machine's assignment.\n# Replaced on every push; change the `shares` setting, never this file.\n#\n# The shares: name=folder, or name=folder:ro, one share per folder. The module's process exports each\n# to the private network's range below, every client mapped to the folder's owner.\nshares=${setting:shares}\nrange=${machine:mesh-range}\n"
|
||||
},
|
||||
{
|
||||
"id": "run-dir",
|
||||
"type": "directory",
|
||||
"path": "/run/nfs-server",
|
||||
"mode": "0755"
|
||||
},
|
||||
{
|
||||
"id": "server",
|
||||
"type": "service",
|
||||
"unit": "nfs-server.service",
|
||||
"state": "running",
|
||||
"boot": "enabled",
|
||||
"restart-on": [
|
||||
"nfs-conf"
|
||||
],
|
||||
"health": {
|
||||
"kind": "unit"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "exports",
|
||||
"type": "process",
|
||||
"name": "nfs-server-exports",
|
||||
"artifact": "tools",
|
||||
"run": [
|
||||
"./nfs-server",
|
||||
"exports"
|
||||
],
|
||||
"restart-on": [
|
||||
"config"
|
||||
],
|
||||
"health": {
|
||||
"kind": "tool",
|
||||
"tool": "nfs_health",
|
||||
"interval": "60s",
|
||||
"timeout": "10s",
|
||||
"looks": 2,
|
||||
"grace": "90s"
|
||||
}
|
||||
}
|
||||
],
|
||||
"build": {
|
||||
"artifacts": [
|
||||
{
|
||||
"name": "tools",
|
||||
"kind": "bundle",
|
||||
"language": "go",
|
||||
"system": "arch",
|
||||
"from": "cmd/nfs-server",
|
||||
"binary": "nfs-server",
|
||||
"loads": [
|
||||
"nfs-server"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -163,21 +163,6 @@ type Principal struct {
|
||||
// goes with the retired seat row.
|
||||
var seatsTheControllerAsks = []string{"node-build-agent", "mesh-build-machine"}
|
||||
|
||||
// TheControllersAsk says whether a message of stream, published on subject, is an ask the controller
|
||||
// itself makes: one on the accept subject of a seat in seatsTheControllerAsks, kept in that seat's own
|
||||
// work queue. Such an ask, given up on by the seat's worker, can be delivered again with the authority
|
||||
// the controller already holds — the publish on that seat's accepts and the stream API to remove the
|
||||
// original — and no other can (novox/hq issue 334, ADR 0264's consequences: no grant over the seats'
|
||||
// queues).
|
||||
func TheControllersAsk(stream, subject string) bool {
|
||||
for _, seat := range seatsTheControllerAsks {
|
||||
if stream == seatStreamName(seat) && strings.HasPrefix(subject, "mesh.seat."+seat+".accept.") {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// SeatVerb is one verb of one seat, on every machine holding it.
|
||||
type SeatVerb struct{ Seat, Verb string }
|
||||
|
||||
|
||||
+108
-7
@@ -146,6 +146,9 @@ type Layer struct {
|
||||
Verdict string
|
||||
Summary string
|
||||
Modules []string
|
||||
// Failed is what the repository's own check printed that names what failed, picked from the whole of
|
||||
// its output and said at the end of the verdict's report (novox/hq issue 460). Empty when it passed.
|
||||
Failed string
|
||||
}
|
||||
|
||||
// CheckScript is what a repository declares its own merge check as: run from its root, with the
|
||||
@@ -477,7 +480,7 @@ func Check(ctx context.Context, run Runner, spec CheckSpec, workspace, registry
|
||||
}
|
||||
|
||||
v.Verdict, v.Summary = v.Gate.Verdict, v.Gate.Summary
|
||||
v.Report, v.Took = out.String(), time.Since(began)
|
||||
v.Report, v.Took = withWhatFailed(out.String(), v.Repo), time.Since(began)
|
||||
say("check", "gate %s — %s; repository %s — %s (%s)", strings.ToUpper(v.Gate.Verdict), v.Gate.Summary,
|
||||
strings.ToUpper(v.Repo.Verdict), v.Repo.Summary, v.Took.Round(time.Second))
|
||||
return v, nil
|
||||
@@ -515,17 +518,29 @@ func ownCheck(ctx context.Context, spec CheckSpec, parts []ScriptPart, tree stri
|
||||
say("check", "running its %s in the mesh's %s toolchain", part.Script, part.Toolchain)
|
||||
fmt.Fprintf(out, "--- its %s (%s toolchain)\n", part.Script, part.Toolchain)
|
||||
var own tail
|
||||
var picked failures
|
||||
logged := &toTheLog{say: say}
|
||||
cmd := command(image, part.Script)
|
||||
inItsOwnGroup(cmd)
|
||||
w := io.MultiWriter(out, &own)
|
||||
w := io.MultiWriter(out, &own, &picked, logged)
|
||||
cmd.Stdout, cmd.Stderr = w, w
|
||||
switch err := cmd.Run(); {
|
||||
err := cmd.Run()
|
||||
logged.close(picked.String())
|
||||
switch {
|
||||
case timedOut():
|
||||
return &Layer{Verdict: "error", Summary: fmt.Sprintf("its %s ran past %s and was ended", part.Script, CheckTimeout)}
|
||||
return &Layer{Verdict: "error", Summary: fmt.Sprintf("its %s ran past %s and was ended", part.Script, CheckTimeout),
|
||||
Failed: picked.String()}
|
||||
case ctx.Err() != nil:
|
||||
return nil
|
||||
case err != nil:
|
||||
return &Layer{Verdict: "fail", Summary: passedSoFar(ran) + "its " + part.Script + " failed: " + whatFailed(own.String())}
|
||||
// Named from the whole run, not the tail: what failed may be thousands of lines from the end
|
||||
// (novox/hq issue 460).
|
||||
said := picked.said()
|
||||
if said == "" {
|
||||
said = whatFailed(own.String())
|
||||
}
|
||||
return &Layer{Verdict: "fail", Summary: passedSoFar(ran) + "its " + part.Script + " failed: " + said,
|
||||
Failed: picked.String()}
|
||||
}
|
||||
ran = append(ran, fmt.Sprintf("%s (%s)", part.Script, part.Toolchain))
|
||||
}
|
||||
@@ -535,6 +550,84 @@ func ownCheck(ctx context.Context, spec CheckSpec, parts []ScriptPart, tree stri
|
||||
return &Layer{Verdict: "pass", Summary: "its " + CheckScript + " passed, each part in its toolchain: " + strings.Join(ran, ", ")}
|
||||
}
|
||||
|
||||
// withWhatFailed is a check's report with what its repository's own check names as failed said last, whole:
|
||||
// the report's tail is the last reportLines lines, and the controller keeps the end of a report it cuts, so
|
||||
// what failed travels whatever came before or after it (novox/hq issue 460).
|
||||
func withWhatFailed(report string, repo *Layer) string {
|
||||
if repo == nil || repo.Failed == "" {
|
||||
return report
|
||||
}
|
||||
return report + "\n--- what failed, picked from the whole of its output (the whole is in the build's log)\n" +
|
||||
repo.Failed
|
||||
}
|
||||
|
||||
// logLines bounds the lines of a repository's own check that go into the build's log. The bus keeps 10 000
|
||||
// messages per subject (EVENTS' MaxMsgsPerSubject), and a build's log is one subject: past that, its first
|
||||
// lines would be lost. The build's own lines are a few hundred at most, so the check's output takes 8 000.
|
||||
const logLines = 8000
|
||||
|
||||
// logLineBytes bounds one line of it, so a line that pastes a document does not fill a message.
|
||||
const logLineBytes = 4 << 10
|
||||
|
||||
// toTheLog says each line a repository's own check prints in the build's log, as it prints it — the whole
|
||||
// output kept for the build and read with `builds` and its id (novox/hq issue 460), where before only the
|
||||
// verdict's tail of it was kept. Past logLines it says how many lines it left out, and the lines that name
|
||||
// what failed after them.
|
||||
type toTheLog struct {
|
||||
say func(step, format string, args ...any)
|
||||
partial []byte
|
||||
said int
|
||||
dropped int
|
||||
}
|
||||
|
||||
func (l *toTheLog) Write(p []byte) (int, error) {
|
||||
l.partial = append(l.partial, p...)
|
||||
for {
|
||||
i := bytes.IndexByte(l.partial, '\n')
|
||||
if i < 0 {
|
||||
break
|
||||
}
|
||||
l.line(string(bytes.TrimRight(l.partial[:i], "\r")))
|
||||
l.partial = l.partial[i+1:]
|
||||
}
|
||||
if len(l.partial) > logLineBytes {
|
||||
l.line(string(l.partial))
|
||||
l.partial = nil
|
||||
}
|
||||
return len(p), nil
|
||||
}
|
||||
|
||||
func (l *toTheLog) line(line string) {
|
||||
if l.said >= logLines {
|
||||
l.dropped++
|
||||
return
|
||||
}
|
||||
if len(line) > logLineBytes {
|
||||
line = line[:logLineBytes] + fmt.Sprintf(" … (%d bytes more)", len(line)-logLineBytes)
|
||||
}
|
||||
l.said++
|
||||
l.say("output", "%s", line)
|
||||
}
|
||||
|
||||
// close says the last line, and, when lines were left out, how many and what failed.
|
||||
func (l *toTheLog) close(failed string) {
|
||||
if len(l.partial) > 0 {
|
||||
l.line(string(l.partial))
|
||||
l.partial = nil
|
||||
}
|
||||
if l.dropped == 0 {
|
||||
return
|
||||
}
|
||||
l.say("output", "… %d more line(s) of its output are not in this log, which keeps its first %d", l.dropped, logLines)
|
||||
if failed == "" {
|
||||
return
|
||||
}
|
||||
l.say("output", "--- what failed, picked from the whole of its output")
|
||||
for _, line := range strings.Split(failed, "\n") {
|
||||
l.say("output", "%s", line)
|
||||
}
|
||||
}
|
||||
|
||||
// passedSoFar is what of a check's parts passed before the one that did not, said first.
|
||||
func passedSoFar(ran []string) string {
|
||||
if len(ran) == 0 {
|
||||
@@ -1018,9 +1111,17 @@ func whatFailed(s string) string {
|
||||
return "not gofmt'd by the toolchain's gofmt: " + strings.Join(files, ", ")
|
||||
}
|
||||
}
|
||||
for _, prefix := range []string{"--- FAIL:", "FAIL\t", "panic:"} {
|
||||
// A panic, a data race or a build error outside any test says more than the package's bare FAIL line
|
||||
// (novox/hq issue 460).
|
||||
for _, said := range []func(string) bool{
|
||||
func(l string) bool { return strings.HasPrefix(l, "--- FAIL:") },
|
||||
func(l string) bool { return strings.HasPrefix(l, "panic:") || strings.HasPrefix(l, "fatal error:") },
|
||||
func(l string) bool { return l == "WARNING: DATA RACE" },
|
||||
goError.MatchString,
|
||||
func(l string) bool { return strings.HasPrefix(l, "FAIL\t") },
|
||||
} {
|
||||
for _, line := range lines {
|
||||
if line = strings.TrimSpace(line); strings.HasPrefix(line, prefix) {
|
||||
if line = strings.TrimSpace(line); said(line) {
|
||||
return line
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,285 @@
|
||||
package builder
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// **What failed is picked from the whole of a check's output, as it streams** (novox/hq issue 460).
|
||||
//
|
||||
// A repository's own check kept only the last reportLines lines of what it printed, and named what failed
|
||||
// from those. A long store-backed run prints its logs after the failure: the `--- FAIL:` line of mesh-controller
|
||||
// #218 was pushed out of the tail by the package's own log lines, and the verdict said only
|
||||
// "FAIL <package> 268.072s" — the test that failed could not be named, and the fix was a guess. #220's failure
|
||||
// came a few dozen lines before the end, inside the tail, and was named. The length of what came after the
|
||||
// failure decided it, nothing else.
|
||||
//
|
||||
// So every line is looked at as it is written, and the lines that name what failed are kept whole, wherever
|
||||
// in the output they are: each `--- FAIL:` line with its indented message lines, a `panic:` with its first
|
||||
// frames, a `WARNING: DATA RACE` report, each `FAIL\t<package>` line, a build error with its package, and
|
||||
// the files gofmt lists. The rest is cut as before.
|
||||
|
||||
// Bounds on what is picked, so a run that fails everywhere still travels in a verdict: the controller cuts a
|
||||
// report to its last 60 KiB (maxCheckReport), and what failed is said at the report's end, so it stays inside.
|
||||
const (
|
||||
// failureLines and failureBytes bound everything picked from one run.
|
||||
failureLines = 400
|
||||
failureBytes = 32 << 10
|
||||
// failureLineBytes bounds one picked line: a message that pastes a whole document is cut, said.
|
||||
failureLineBytes = 1 << 10
|
||||
// The lines kept after the line that opens each kind of block.
|
||||
failMessageLines = 30 // a --- FAIL's messages
|
||||
panicLines = 40 // a panic's first frames
|
||||
raceLines = 80 // a data race report, to its closing rule
|
||||
buildLines = 40 // a package's build errors
|
||||
gofmtLines = 50 // the files gofmt lists
|
||||
// failedNames bounds how many further failing tests the summary names after the first.
|
||||
failedNames = 5
|
||||
)
|
||||
|
||||
// goError is a compiler's or vet's line: a Go file, a line, and what is wrong there.
|
||||
var goError = regexp.MustCompile(`^\S+\.go:\d+(:\d+)?: `)
|
||||
|
||||
// raceRule is the line the race detector opens and closes its report with.
|
||||
const raceRule = "=================="
|
||||
|
||||
type failureBlock int
|
||||
|
||||
const (
|
||||
noBlock failureBlock = iota
|
||||
inFail
|
||||
inPanic
|
||||
inRace
|
||||
inBuild
|
||||
inGofmt
|
||||
)
|
||||
|
||||
// failures keeps the lines of a check's output that name what failed. It is an io.Writer, fed the same
|
||||
// bytes as the report's tail.
|
||||
type failures struct {
|
||||
partial []byte
|
||||
kept []string
|
||||
size int
|
||||
dropped int
|
||||
|
||||
block failureBlock
|
||||
indent int // a --- FAIL line's indentation: its messages are indented deeper
|
||||
left int // lines the open block may still keep
|
||||
headers []string
|
||||
tests []string // every failing test's --- FAIL line, in order
|
||||
lastRule bool // the line before was the race detector's rule, which opens its report
|
||||
}
|
||||
|
||||
func (f *failures) Write(p []byte) (int, error) {
|
||||
f.partial = append(f.partial, p...)
|
||||
for {
|
||||
i := bytes.IndexByte(f.partial, '\n')
|
||||
if i < 0 {
|
||||
break
|
||||
}
|
||||
f.line(strings.TrimRight(string(f.partial[:i]), "\r"))
|
||||
f.partial = f.partial[i+1:]
|
||||
}
|
||||
// A line with no end, longer than any line is kept, is judged by its start.
|
||||
if len(f.partial) > failureLineBytes*4 {
|
||||
f.line(string(f.partial))
|
||||
f.partial = nil
|
||||
}
|
||||
return len(p), nil
|
||||
}
|
||||
|
||||
// flush judges what is left of a last line with no newline.
|
||||
func (f *failures) flush() {
|
||||
if len(f.partial) > 0 {
|
||||
f.line(strings.TrimRight(string(f.partial), "\r"))
|
||||
f.partial = nil
|
||||
}
|
||||
}
|
||||
|
||||
func indentOf(line string) int {
|
||||
return len(line) - len(strings.TrimLeft(line, " \t"))
|
||||
}
|
||||
|
||||
func (f *failures) keep(line string) {
|
||||
if f.size >= failureBytes || len(f.kept) >= failureLines {
|
||||
f.dropped++
|
||||
return
|
||||
}
|
||||
if len(line) > failureLineBytes {
|
||||
line = line[:failureLineBytes] + fmt.Sprintf(" … (%d bytes more)", len(line)-failureLineBytes)
|
||||
}
|
||||
f.kept = append(f.kept, line)
|
||||
f.size += len(line) + 1
|
||||
}
|
||||
|
||||
func (f *failures) open(block failureBlock, lines int) {
|
||||
f.block, f.left = block, lines
|
||||
}
|
||||
|
||||
func (f *failures) line(line string) {
|
||||
trimmed := strings.TrimSpace(line)
|
||||
rule := trimmed == raceRule
|
||||
|
||||
// A line that opens a block ends whatever block was open.
|
||||
if f.opens(line, trimmed) {
|
||||
f.lastRule = rule
|
||||
return
|
||||
}
|
||||
switch f.block {
|
||||
case inFail:
|
||||
if trimmed != "" && indentOf(line) > f.indent && f.left > 0 {
|
||||
f.left--
|
||||
f.keep(line)
|
||||
f.lastRule = rule
|
||||
return
|
||||
}
|
||||
case inPanic:
|
||||
if f.left > 0 && !strings.HasPrefix(line, "FAIL") && !strings.HasPrefix(line, "ok \t") &&
|
||||
!strings.HasPrefix(line, "exit status") {
|
||||
f.left--
|
||||
f.keep(line)
|
||||
f.lastRule = rule
|
||||
return
|
||||
}
|
||||
case inRace:
|
||||
if f.left > 0 {
|
||||
f.left--
|
||||
f.keep(line)
|
||||
if rule {
|
||||
f.block = noBlock
|
||||
}
|
||||
f.lastRule = rule
|
||||
return
|
||||
}
|
||||
case inBuild:
|
||||
if f.left > 0 && trimmed != "" && !strings.HasPrefix(line, "FAIL") && !strings.HasPrefix(line, "ok \t") &&
|
||||
!strings.HasPrefix(line, "? \t") {
|
||||
f.left--
|
||||
f.keep(line)
|
||||
f.lastRule = rule
|
||||
return
|
||||
}
|
||||
case inGofmt:
|
||||
if f.left > 0 && trimmed != "" {
|
||||
f.left--
|
||||
f.keep(line)
|
||||
f.lastRule = rule
|
||||
return
|
||||
}
|
||||
}
|
||||
f.block = noBlock
|
||||
|
||||
switch {
|
||||
case strings.HasPrefix(line, "# "):
|
||||
// A package's name before its build errors — kept only when an error follows it.
|
||||
f.headers = append(f.headers, line)
|
||||
if len(f.headers) > 4 {
|
||||
f.headers = f.headers[1:]
|
||||
}
|
||||
case len(f.headers) > 0 && goError.MatchString(line):
|
||||
for _, h := range f.headers {
|
||||
f.keep(h)
|
||||
}
|
||||
f.headers = nil
|
||||
f.keep(line)
|
||||
f.open(inBuild, buildLines)
|
||||
case strings.HasPrefix(line, "FAIL\t"):
|
||||
f.headers = nil
|
||||
f.keep(line)
|
||||
default:
|
||||
f.headers = nil
|
||||
}
|
||||
f.lastRule = rule
|
||||
}
|
||||
|
||||
// opens keeps a line that opens a block of what failed, and opens the block. False for any other line.
|
||||
func (f *failures) opens(line, trimmed string) bool {
|
||||
switch {
|
||||
case strings.HasPrefix(trimmed, "--- FAIL:"):
|
||||
f.headers = nil
|
||||
f.keep(line)
|
||||
f.tests = append(f.tests, trimmed)
|
||||
f.indent = indentOf(line)
|
||||
f.open(inFail, failMessageLines)
|
||||
case strings.HasPrefix(line, "panic:") || strings.HasPrefix(line, "fatal error:"):
|
||||
f.headers = nil
|
||||
f.keep(line)
|
||||
f.open(inPanic, panicLines)
|
||||
case trimmed == "WARNING: DATA RACE":
|
||||
f.headers = nil
|
||||
if f.lastRule {
|
||||
f.keep(raceRule)
|
||||
}
|
||||
f.keep(line)
|
||||
f.open(inRace, raceLines)
|
||||
case strings.HasPrefix(trimmed, "not gofmt'd:"):
|
||||
f.headers = nil
|
||||
f.keep(line)
|
||||
f.open(inGofmt, gofmtLines)
|
||||
default:
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// String is every line picked, in the order the run printed them, and how many more were left out.
|
||||
func (f *failures) String() string {
|
||||
f.flush()
|
||||
s := strings.Join(f.kept, "\n")
|
||||
if f.dropped > 0 {
|
||||
s += fmt.Sprintf("\n… %d more line(s) naming what failed, past the %d lines or %d KiB kept", f.dropped,
|
||||
failureLines, failureBytes>>10)
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
// said is what the repository layer's summary says failed: the first thing that failed, whole, then the
|
||||
// further failing tests by name. Empty when nothing was picked.
|
||||
func (f *failures) said() string {
|
||||
picked := f.String()
|
||||
if picked == "" {
|
||||
return ""
|
||||
}
|
||||
first := whatFailed(picked)
|
||||
var more []string
|
||||
for _, t := range f.tests {
|
||||
if t == first {
|
||||
continue
|
||||
}
|
||||
// A subtest's parent fails with it; its name is in the subtest's.
|
||||
name := strings.Fields(strings.TrimPrefix(t, "--- FAIL:"))
|
||||
if len(name) > 0 {
|
||||
more = append(more, name[0])
|
||||
}
|
||||
}
|
||||
more = withoutParents(more)
|
||||
switch {
|
||||
case len(more) == 0:
|
||||
return first
|
||||
case len(more) > failedNames:
|
||||
return fmt.Sprintf("%s; and %s and %d more", first, strings.Join(more[:failedNames], ", "),
|
||||
len(more)-failedNames)
|
||||
default:
|
||||
return first + "; and " + strings.Join(more, ", ")
|
||||
}
|
||||
}
|
||||
|
||||
// withoutParents drops a test whose subtest is also named.
|
||||
func withoutParents(names []string) []string {
|
||||
var out []string
|
||||
for _, n := range names {
|
||||
parent := false
|
||||
for _, m := range names {
|
||||
if strings.HasPrefix(m, n+"/") {
|
||||
parent = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !parent {
|
||||
out = append(out, n)
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
package builder
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// ownCheckOf runs a repository's own check whose script prints a captured output and fails, as the build
|
||||
// seat runs it, and answers the layer and every line it said in the build's log.
|
||||
func ownCheckOf(t *testing.T, printed string) (*Layer, []string) {
|
||||
t.Helper()
|
||||
tree := t.TempDir()
|
||||
if err := os.WriteFile(filepath.Join(tree, "printed.txt"), []byte(printed), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.WriteFile(filepath.Join(tree, CheckScript), []byte("cat printed.txt\nexit 1\n"), 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var out tail
|
||||
var logged []string
|
||||
layer := ownCheck(t.Context(), CheckSpec{Toolchain: "go-image"}, []ScriptPart{{"go", CheckScript}}, tree, &out,
|
||||
func() bool { return false },
|
||||
func(_, script string) *exec.Cmd {
|
||||
cmd := exec.CommandContext(t.Context(), "sh", script)
|
||||
cmd.Dir = tree
|
||||
return cmd
|
||||
}, func(step, format string, args ...any) {
|
||||
if step == "output" {
|
||||
logged = append(logged, fmt.Sprintf(format, args...))
|
||||
}
|
||||
})
|
||||
if layer == nil || layer.Verdict != "fail" {
|
||||
t.Fatalf("a failing check answered %+v", layer)
|
||||
}
|
||||
return layer, logged
|
||||
}
|
||||
|
||||
func captured(t *testing.T, name string) string {
|
||||
t.Helper()
|
||||
body, err := os.ReadFile(filepath.Join("testdata", "issue460", name))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return string(body)
|
||||
}
|
||||
|
||||
// **novox/hq issue 460**: mesh-controller #218's check failed with "FAIL <package> 268.072s" and no test
|
||||
// name: the package's own logs, printed after its `--- FAIL:` lines, pushed them out of the last 200 lines,
|
||||
// which was all the summary was named from. The first failing test is named, and the others after it,
|
||||
// however much came after them.
|
||||
func TestAFailureEarlyInALongRunIsStillNamed(t *testing.T) {
|
||||
layer, _ := ownCheckOf(t, captured(t, "a-long-run-failing-early.txt"))
|
||||
if !strings.Contains(layer.Summary, "failed: --- FAIL: TestTheEnvelopeIsPinned (0.00s)") {
|
||||
t.Errorf("a failure 600 lines from the end is said as %q", layer.Summary)
|
||||
}
|
||||
if !strings.Contains(layer.Summary, "TestSubtests/the_hub") {
|
||||
t.Errorf("the second failing test is not named: %q", layer.Summary)
|
||||
}
|
||||
}
|
||||
|
||||
// One -race run of every package: the first failure is the earliest, not the last within the tail.
|
||||
func TestARaceRunOfEveryPackageNamesItsFirstFailure(t *testing.T) {
|
||||
layer, _ := ownCheckOf(t, captured(t, "a-race-run-of-every-package.txt"))
|
||||
if !strings.Contains(layer.Summary, "failed: --- FAIL: TestTheEnvelopeIsPinned (0.00s)") ||
|
||||
!strings.Contains(layer.Summary, "TestAMapIsNil") || !strings.Contains(layer.Summary, "TestACounterIsShared") {
|
||||
t.Errorf("a run failing in four packages is said as %q", layer.Summary)
|
||||
}
|
||||
}
|
||||
|
||||
// A package that does not build is named by its error, not by its bare "[build failed]".
|
||||
func TestABuildErrorIsNamedByTheError(t *testing.T) {
|
||||
layer, _ := ownCheckOf(t, captured(t, "a-build-error.txt"))
|
||||
if !strings.HasSuffix(layer.Summary, "failed: broken/broken.go:3:28: undefined: undefinedThing") {
|
||||
t.Errorf("a build error is said as %q", layer.Summary)
|
||||
}
|
||||
}
|
||||
|
||||
// The whole of what the check printed is in the build's log, line by line — where before none of it was.
|
||||
func TestTheWholeOutputIsInTheBuildsLog(t *testing.T) {
|
||||
printed := captured(t, "a-long-run-failing-early.txt")
|
||||
_, logged := ownCheckOf(t, printed)
|
||||
want := strings.Split(strings.TrimRight(printed, "\n"), "\n")
|
||||
if len(logged) != len(want) {
|
||||
t.Fatalf("the build's log holds %d line(s) of the %d printed", len(logged), len(want))
|
||||
}
|
||||
for i := range want {
|
||||
if logged[i] != want[i] {
|
||||
t.Fatalf("line %d is logged as %q, printed as %q", i+1, logged[i], want[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// What failed is kept whole in the verdict: each --- FAIL with its messages, a panic with its first frames,
|
||||
// a data race report from rule to rule — and none of the log lines around them.
|
||||
func TestTheVerdictKeepsWhatFailedWhole(t *testing.T) {
|
||||
layer, _ := ownCheckOf(t, captured(t, "a-long-run-failing-early.txt"))
|
||||
want := "--- FAIL: TestTheEnvelopeIsPinned (0.00s)\n" +
|
||||
" early_test.go:9: the envelope's subject is \"mesh.a\", not \"mesh.b\"\n" +
|
||||
" early_test.go:10: a second line of the same failure\n" +
|
||||
"--- FAIL: TestSubtests (0.00s)\n" +
|
||||
" --- FAIL: TestSubtests/the_hub (0.00s)\n" +
|
||||
" early_test.go:14: the hub does not compose\n" +
|
||||
"FAIL\texample.com/cap/early\t"
|
||||
if !strings.HasPrefix(layer.Failed, want) || strings.Contains(layer.Failed, "kept what home-server says") {
|
||||
t.Errorf("the early failure is kept as:\n%s", layer.Failed)
|
||||
}
|
||||
|
||||
layer, _ = ownCheckOf(t, captured(t, "a-panic.txt"))
|
||||
for _, line := range []string{"--- FAIL: TestAMapIsNil (0.00s)", "panic: assignment to entry in nil map",
|
||||
"[running]:", "example.com/cap/panics.TestAMapIsNil(", "/src/cap/panics/panics_test.go:7",
|
||||
"FAIL\texample.com/cap/panics\t"} {
|
||||
if !strings.Contains(layer.Failed, line) {
|
||||
t.Errorf("a panic is kept without %q:\n%s", line, layer.Failed)
|
||||
}
|
||||
}
|
||||
|
||||
layer, _ = ownCheckOf(t, captured(t, "a-data-race.txt"))
|
||||
race := captured(t, "a-data-race.txt")
|
||||
report := race[:strings.Index(race, "--- FAIL:")]
|
||||
if !strings.HasPrefix(layer.Failed, report) ||
|
||||
!strings.Contains(layer.Failed, "--- FAIL: TestACounterIsShared (0.00s)\n testing.go:1865: race detected") {
|
||||
t.Errorf("a data race is kept as:\n%s", layer.Failed)
|
||||
}
|
||||
|
||||
layer, _ = ownCheckOf(t, captured(t, "a-build-error.txt"))
|
||||
if layer.Failed != "# example.com/cap/broken\nbroken/broken.go:3:28: undefined: undefinedThing\n"+
|
||||
"FAIL\texample.com/cap/broken [build failed]" {
|
||||
t.Errorf("a build error is kept as:\n%s", layer.Failed)
|
||||
}
|
||||
}
|
||||
|
||||
// A run that fails everywhere is bounded in what it keeps, and what it keeps survives the controller's cut
|
||||
// of a report to its last 60 KiB, said at the report's end.
|
||||
func TestWhatFailedIsBoundedAndSurvivesTheReportsCut(t *testing.T) {
|
||||
var b strings.Builder
|
||||
for i := range 3000 {
|
||||
fmt.Fprintf(&b, "--- FAIL: TestNumber%d (0.00s)\n x_test.go:1: %s\n", i, strings.Repeat("why ", 600))
|
||||
fmt.Fprintf(&b, "2026/10/11 01:30:03 a log line %d\n", i)
|
||||
}
|
||||
b.WriteString("FAIL\tx/everything\t1s\nFAIL\n")
|
||||
layer, logged := ownCheckOf(t, b.String())
|
||||
if len(layer.Failed) > failureBytes+2*failureLineBytes || !strings.Contains(layer.Failed, "more line(s) naming what failed") {
|
||||
t.Errorf("what failed in a run that fails everywhere is %d bytes, ending %q", len(layer.Failed),
|
||||
layer.Failed[max(0, len(layer.Failed)-200):])
|
||||
}
|
||||
if !strings.Contains(layer.Summary, "--- FAIL: TestNumber0 (0.00s); and TestNumber1, ") ||
|
||||
!strings.Contains(layer.Summary, "and 2994 more") {
|
||||
t.Errorf("a run failing 3000 tests is said as %q", layer.Summary)
|
||||
}
|
||||
|
||||
var out tail
|
||||
out.Write([]byte(b.String()))
|
||||
report := withWhatFailed(out.String(), layer)
|
||||
const maxCheckReport = 60 << 10 // as the controller cuts it, from the front
|
||||
if len(report) > maxCheckReport {
|
||||
report = report[len(report)-maxCheckReport:]
|
||||
}
|
||||
if !strings.Contains(report, "--- what failed") || !strings.Contains(report, "--- FAIL: TestNumber0 (0.00s)") {
|
||||
t.Error("what failed did not survive the controller's cut of the report")
|
||||
}
|
||||
|
||||
// The build's log keeps its first logLines lines, says how many it left out, then what failed.
|
||||
if len(logged) < logLines+2 || logged[logLines] != "… 1002 more line(s) of its output are not in this log, which keeps its first 8000" ||
|
||||
logged[logLines+1] != "--- what failed, picked from the whole of its output" ||
|
||||
logged[logLines+2] != "--- FAIL: TestNumber0 (0.00s)" {
|
||||
t.Errorf("the log past its bound says %q", logged[logLines:min(len(logged), logLines+3)])
|
||||
}
|
||||
}
|
||||
|
||||
// A passing check says nothing of what failed.
|
||||
func TestAPassingCheckReportsAsBefore(t *testing.T) {
|
||||
if got := withWhatFailed("ok\tx\t1s", &Layer{Verdict: "pass"}); got != "ok\tx\t1s" {
|
||||
t.Errorf("a passing report became %q", got)
|
||||
}
|
||||
if got := withWhatFailed("r", nil); got != "r" {
|
||||
t.Errorf("no repository layer became %q", got)
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
Captured 2026-10-11 from real `go test` runs (go1.27.1, linux/amd64) of a throwaway module whose
|
||||
packages fail each way a repository's own check fails: a test failing early in a run its own logs
|
||||
then fill (early: 600 log lines after the failures), a panic, a data race under -race, a build error,
|
||||
and one -race run of every package. Only the module's directory was rewritten to /src/cap.
|
||||
|
||||
They are the output shapes of novox/hq issue 460: mesh-controller #218's check printed its
|
||||
`--- FAIL:` line before the store-backed package's logs, which pushed it out of the report's tail.
|
||||
@@ -0,0 +1,5 @@
|
||||
# example.com/cap/broken
|
||||
broken/broken.go:3:28: undefined: undefinedThing
|
||||
FAIL example.com/cap/broken [build failed]
|
||||
ok example.com/cap/fine (cached)
|
||||
FAIL
|
||||
@@ -0,0 +1,31 @@
|
||||
==================
|
||||
WARNING: DATA RACE
|
||||
Read at 0x00c000018398 by goroutine 8:
|
||||
example.com/cap/race.TestACounterIsShared.func1()
|
||||
/src/cap/race/race_test.go:13 +0x7b
|
||||
|
||||
Previous write at 0x00c000018398 by goroutine 9:
|
||||
example.com/cap/race.TestACounterIsShared.func1()
|
||||
/src/cap/race/race_test.go:13 +0x8d
|
||||
|
||||
Goroutine 8 (running) created at:
|
||||
example.com/cap/race.TestACounterIsShared()
|
||||
/src/cap/race/race_test.go:13 +0x78
|
||||
testing.tRunner()
|
||||
/usr/lib/go/src/testing/testing.go:2193 +0x21c
|
||||
testing.(*T).Run.gowrap1()
|
||||
/usr/lib/go/src/testing/testing.go:2258 +0x38
|
||||
|
||||
Goroutine 9 (finished) created at:
|
||||
example.com/cap/race.TestACounterIsShared()
|
||||
/src/cap/race/race_test.go:13 +0x78
|
||||
testing.tRunner()
|
||||
/usr/lib/go/src/testing/testing.go:2193 +0x21c
|
||||
testing.(*T).Run.gowrap1()
|
||||
/usr/lib/go/src/testing/testing.go:2258 +0x38
|
||||
==================
|
||||
--- FAIL: TestACounterIsShared (0.00s)
|
||||
testing.go:1865: race detected during execution of test
|
||||
FAIL
|
||||
FAIL example.com/cap/race 0.008s
|
||||
FAIL
|
||||
@@ -0,0 +1,609 @@
|
||||
--- FAIL: TestTheEnvelopeIsPinned (0.00s)
|
||||
early_test.go:9: the envelope's subject is "mesh.a", not "mesh.b"
|
||||
early_test.go:10: a second line of the same failure
|
||||
--- FAIL: TestSubtests (0.00s)
|
||||
--- FAIL: TestSubtests/the_hub (0.00s)
|
||||
early_test.go:14: the hub does not compose
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d0
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d1
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d2
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d3
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d4
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d5
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d6
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d7
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d8
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d9
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d10
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d11
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d12
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d13
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d14
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d15
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d16
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d17
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d18
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d19
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d20
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d21
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d22
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d23
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d24
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d25
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d26
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d27
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d28
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d29
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d30
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d31
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d32
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d33
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d34
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d35
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d36
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d37
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d38
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d39
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d40
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d41
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d42
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d43
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d44
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d45
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d46
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d47
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d48
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d49
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d50
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d51
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d52
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d53
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d54
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d55
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d56
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d57
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d58
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d59
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d60
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d61
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d62
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d63
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d64
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d65
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d66
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d67
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d68
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d69
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d70
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d71
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d72
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d73
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d74
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d75
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d76
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d77
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d78
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d79
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d80
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d81
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d82
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d83
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d84
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d85
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d86
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d87
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d88
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d89
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d90
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d91
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d92
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d93
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d94
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d95
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d96
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d97
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d98
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d99
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d100
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d101
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d102
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d103
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d104
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d105
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d106
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d107
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d108
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d109
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d110
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d111
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d112
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d113
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d114
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d115
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d116
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d117
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d118
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d119
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d120
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d121
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d122
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d123
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d124
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d125
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d126
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d127
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d128
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d129
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d130
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d131
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d132
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d133
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d134
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d135
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d136
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d137
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d138
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d139
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d140
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d141
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d142
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d143
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d144
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d145
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d146
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d147
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d148
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d149
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d150
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d151
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d152
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d153
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d154
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d155
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d156
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d157
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d158
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d159
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d160
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d161
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d162
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d163
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d164
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d165
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d166
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d167
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d168
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d169
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d170
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d171
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d172
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d173
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d174
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d175
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d176
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d177
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d178
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d179
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d180
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d181
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d182
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d183
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d184
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d185
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d186
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d187
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d188
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d189
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d190
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d191
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d192
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d193
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d194
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d195
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d196
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d197
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d198
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d199
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d200
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d201
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d202
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d203
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d204
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d205
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d206
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d207
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d208
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d209
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d210
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d211
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d212
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d213
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d214
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d215
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d216
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d217
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d218
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d219
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d220
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d221
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d222
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d223
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d224
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d225
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d226
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d227
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d228
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d229
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d230
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d231
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d232
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d233
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d234
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d235
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d236
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d237
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d238
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d239
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d240
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d241
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d242
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d243
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d244
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d245
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d246
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d247
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d248
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d249
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d250
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d251
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d252
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d253
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d254
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d255
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d256
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d257
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d258
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d259
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d260
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d261
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d262
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d263
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d264
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d265
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d266
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d267
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d268
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d269
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d270
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d271
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d272
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d273
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d274
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d275
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d276
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d277
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d278
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d279
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d280
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d281
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d282
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d283
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d284
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d285
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d286
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d287
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d288
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d289
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d290
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d291
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d292
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d293
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d294
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d295
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d296
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d297
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d298
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d299
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d300
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d301
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d302
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d303
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d304
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d305
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d306
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d307
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d308
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d309
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d310
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d311
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d312
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d313
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d314
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d315
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d316
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d317
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d318
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d319
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d320
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d321
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d322
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d323
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d324
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d325
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d326
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d327
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d328
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d329
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d330
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d331
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d332
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d333
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d334
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d335
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d336
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d337
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d338
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d339
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d340
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d341
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d342
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d343
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d344
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d345
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d346
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d347
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d348
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d349
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d350
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d351
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d352
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d353
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d354
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d355
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d356
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d357
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d358
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d359
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d360
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d361
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d362
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d363
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d364
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d365
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d366
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d367
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d368
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d369
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d370
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d371
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d372
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d373
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d374
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d375
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d376
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d377
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d378
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d379
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d380
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d381
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d382
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d383
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d384
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d385
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d386
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d387
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d388
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d389
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d390
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d391
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d392
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d393
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d394
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d395
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d396
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d397
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d398
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d399
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d400
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d401
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d402
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d403
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d404
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d405
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d406
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d407
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d408
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d409
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d410
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d411
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d412
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d413
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d414
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d415
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d416
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d417
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d418
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d419
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d420
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d421
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d422
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d423
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d424
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d425
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d426
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d427
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d428
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d429
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d430
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d431
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d432
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d433
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d434
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d435
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d436
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d437
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d438
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d439
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d440
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d441
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d442
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d443
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d444
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d445
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d446
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d447
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d448
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d449
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d450
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d451
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d452
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d453
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d454
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d455
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d456
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d457
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d458
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d459
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d460
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d461
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d462
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d463
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d464
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d465
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d466
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d467
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d468
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d469
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d470
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d471
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d472
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d473
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d474
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d475
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d476
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d477
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d478
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d479
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d480
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d481
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d482
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d483
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d484
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d485
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d486
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d487
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d488
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d489
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d490
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d491
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d492
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d493
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d494
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d495
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d496
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d497
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d498
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d499
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d500
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d501
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d502
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d503
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d504
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d505
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d506
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d507
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d508
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d509
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d510
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d511
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d512
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d513
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d514
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d515
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d516
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d517
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d518
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d519
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d520
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d521
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d522
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d523
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d524
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d525
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d526
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d527
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d528
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d529
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d530
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d531
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d532
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d533
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d534
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d535
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d536
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d537
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d538
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d539
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d540
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d541
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d542
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d543
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d544
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d545
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d546
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d547
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d548
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d549
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d550
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d551
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d552
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d553
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d554
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d555
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d556
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d557
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d558
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d559
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d560
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d561
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d562
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d563
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d564
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d565
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d566
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d567
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d568
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d569
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d570
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d571
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d572
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d573
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d574
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d575
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d576
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d577
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d578
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d579
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d580
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d581
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d582
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d583
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d584
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d585
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d586
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d587
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d588
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d589
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d590
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d591
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d592
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d593
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d594
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d595
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d596
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d597
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d598
|
||||
2026/10/11 04:22:00 kept what home-server says about the machine, and refused its account of declaration d599
|
||||
FAIL
|
||||
FAIL example.com/cap/early 0.003s
|
||||
FAIL
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
--- FAIL: TestAMapIsNil (0.00s)
|
||||
panic: assignment to entry in nil map [recovered, repanicked]
|
||||
|
||||
goroutine 18 [running]:
|
||||
testing.tRunner.func1.2({0x6b6810, 0x6ee000})
|
||||
/usr/lib/go/src/testing/testing.go:2123 +0x232
|
||||
testing.tRunner.func1()
|
||||
/usr/lib/go/src/testing/testing.go:2126 +0x329
|
||||
panic({0x6b6810?, 0x6ee000?})
|
||||
/usr/lib/go/src/runtime/panic.go:859 +0x125
|
||||
example.com/cap/panics.TestAMapIsNil(0x1e97d59dc248?)
|
||||
/src/cap/panics/panics_test.go:7 +0x28
|
||||
testing.tRunner(0x1e97d59dc248, 0x6d41f8)
|
||||
/usr/lib/go/src/testing/testing.go:2193 +0xea
|
||||
created by testing.(*T).Run in goroutine 1
|
||||
/usr/lib/go/src/testing/testing.go:2258 +0x4d4
|
||||
FAIL example.com/cap/panics 0.004s
|
||||
FAIL
|
||||
@@ -0,0 +1,660 @@
|
||||
# example.com/cap/broken
|
||||
broken/broken.go:3:28: undefined: undefinedThing
|
||||
FAIL example.com/cap/broken [build failed]
|
||||
--- FAIL: TestTheEnvelopeIsPinned (0.00s)
|
||||
early_test.go:9: the envelope's subject is "mesh.a", not "mesh.b"
|
||||
early_test.go:10: a second line of the same failure
|
||||
--- FAIL: TestSubtests (0.00s)
|
||||
--- FAIL: TestSubtests/the_hub (0.00s)
|
||||
early_test.go:14: the hub does not compose
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d0
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d1
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d2
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d3
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d4
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d5
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d6
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d7
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d8
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d9
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d10
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d11
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d12
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d13
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d14
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d15
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d16
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d17
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d18
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d19
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d20
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d21
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d22
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d23
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d24
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d25
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d26
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d27
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d28
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d29
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d30
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d31
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d32
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d33
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d34
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d35
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d36
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d37
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d38
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d39
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d40
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d41
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d42
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d43
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d44
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d45
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d46
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d47
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d48
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d49
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d50
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d51
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d52
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d53
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d54
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d55
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d56
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d57
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d58
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d59
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d60
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d61
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d62
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d63
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d64
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d65
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d66
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d67
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d68
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d69
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d70
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d71
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d72
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d73
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d74
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d75
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d76
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d77
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d78
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d79
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d80
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d81
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d82
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d83
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d84
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d85
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d86
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d87
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d88
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d89
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d90
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d91
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d92
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d93
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d94
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d95
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d96
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d97
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d98
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d99
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d100
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d101
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d102
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d103
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d104
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d105
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d106
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d107
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d108
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d109
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d110
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d111
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d112
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d113
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d114
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d115
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d116
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d117
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d118
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d119
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d120
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d121
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d122
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d123
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d124
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d125
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d126
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d127
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d128
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d129
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d130
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d131
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d132
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d133
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d134
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d135
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d136
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d137
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d138
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d139
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d140
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d141
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d142
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d143
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d144
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d145
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d146
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d147
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d148
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d149
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d150
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d151
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d152
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d153
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d154
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d155
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d156
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d157
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d158
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d159
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d160
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d161
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d162
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d163
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d164
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d165
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d166
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d167
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d168
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d169
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d170
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d171
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d172
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d173
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d174
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d175
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d176
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d177
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d178
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d179
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d180
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d181
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d182
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d183
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d184
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d185
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d186
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d187
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d188
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d189
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d190
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d191
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d192
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d193
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d194
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d195
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d196
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d197
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d198
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d199
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d200
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d201
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d202
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d203
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d204
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d205
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d206
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d207
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d208
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d209
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d210
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d211
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d212
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d213
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d214
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d215
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d216
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d217
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d218
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d219
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d220
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d221
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d222
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d223
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d224
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d225
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d226
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d227
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d228
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d229
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d230
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d231
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d232
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d233
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d234
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d235
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d236
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d237
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d238
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d239
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d240
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d241
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d242
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d243
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d244
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d245
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d246
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d247
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d248
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d249
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d250
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d251
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d252
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d253
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d254
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d255
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d256
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d257
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d258
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d259
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d260
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d261
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d262
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d263
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d264
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d265
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d266
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d267
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d268
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d269
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d270
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d271
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d272
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d273
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d274
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d275
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d276
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d277
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d278
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d279
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d280
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d281
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d282
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d283
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d284
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d285
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d286
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d287
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d288
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d289
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d290
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d291
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d292
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d293
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d294
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d295
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d296
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d297
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d298
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d299
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d300
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d301
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d302
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d303
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d304
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d305
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d306
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d307
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d308
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d309
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d310
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d311
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d312
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d313
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d314
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d315
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d316
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d317
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d318
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d319
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d320
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d321
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d322
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d323
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d324
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d325
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d326
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d327
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d328
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d329
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d330
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d331
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d332
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d333
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d334
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d335
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d336
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d337
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d338
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d339
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d340
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d341
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d342
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d343
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d344
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d345
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d346
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d347
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d348
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d349
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d350
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d351
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d352
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d353
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d354
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d355
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d356
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d357
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d358
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d359
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d360
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d361
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d362
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d363
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d364
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d365
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d366
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d367
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d368
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d369
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d370
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d371
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d372
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d373
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d374
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d375
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d376
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d377
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d378
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d379
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d380
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d381
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d382
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d383
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d384
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d385
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d386
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d387
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d388
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d389
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d390
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d391
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d392
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d393
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d394
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d395
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d396
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d397
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d398
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d399
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d400
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d401
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d402
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d403
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d404
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d405
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d406
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d407
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d408
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d409
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d410
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d411
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d412
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d413
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d414
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d415
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d416
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d417
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d418
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d419
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d420
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d421
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d422
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d423
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d424
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d425
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d426
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d427
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d428
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d429
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d430
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d431
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d432
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d433
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d434
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d435
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d436
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d437
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d438
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d439
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d440
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d441
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d442
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d443
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d444
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d445
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d446
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d447
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d448
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d449
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d450
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d451
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d452
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d453
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d454
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d455
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d456
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d457
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d458
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d459
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d460
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d461
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d462
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d463
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d464
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d465
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d466
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d467
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d468
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d469
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d470
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d471
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d472
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d473
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d474
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d475
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d476
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d477
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d478
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d479
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d480
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d481
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d482
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d483
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d484
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d485
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d486
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d487
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d488
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d489
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d490
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d491
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d492
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d493
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d494
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d495
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d496
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d497
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d498
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d499
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d500
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d501
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d502
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d503
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d504
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d505
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d506
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d507
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d508
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d509
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d510
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d511
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d512
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d513
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d514
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d515
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d516
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d517
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d518
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d519
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d520
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d521
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d522
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d523
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d524
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d525
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d526
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d527
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d528
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d529
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d530
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d531
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d532
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d533
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d534
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d535
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d536
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d537
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d538
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d539
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d540
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d541
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d542
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d543
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d544
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d545
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d546
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d547
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d548
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d549
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d550
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d551
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d552
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d553
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d554
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d555
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d556
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d557
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d558
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d559
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d560
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d561
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d562
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d563
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d564
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d565
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d566
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d567
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d568
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d569
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d570
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d571
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d572
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d573
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d574
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d575
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d576
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d577
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d578
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d579
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d580
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d581
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d582
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d583
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d584
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d585
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d586
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d587
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d588
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d589
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d590
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d591
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d592
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d593
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d594
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d595
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d596
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d597
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d598
|
||||
2026/10/11 04:21:53 kept what home-server says about the machine, and refused its account of declaration d599
|
||||
FAIL
|
||||
FAIL example.com/cap/early 0.013s
|
||||
ok example.com/cap/fine (cached)
|
||||
--- FAIL: TestAMapIsNil (0.00s)
|
||||
panic: assignment to entry in nil map [recovered, repanicked]
|
||||
|
||||
goroutine 35 [running]:
|
||||
testing.tRunner.func1.2({0x7c6e60, 0x806640})
|
||||
/usr/lib/go/src/testing/testing.go:2123 +0x419
|
||||
testing.tRunner.func1()
|
||||
/usr/lib/go/src/testing/testing.go:2126 +0x65f
|
||||
panic({0x7c6e60?, 0x806640?})
|
||||
/usr/lib/go/src/runtime/panic.go:859 +0x125
|
||||
example.com/cap/panics.TestAMapIsNil(0xc0001d6248?)
|
||||
/src/cap/panics/panics_test.go:7 +0x32
|
||||
testing.tRunner(0xc0001d6248, 0x7e5f78)
|
||||
/usr/lib/go/src/testing/testing.go:2193 +0x21d
|
||||
created by testing.(*T).Run in goroutine 1
|
||||
/usr/lib/go/src/testing/testing.go:2258 +0xb13
|
||||
FAIL example.com/cap/panics 0.011s
|
||||
==================
|
||||
WARNING: DATA RACE
|
||||
Read at 0x00c000018398 by goroutine 9:
|
||||
example.com/cap/race.TestACounterIsShared.func1()
|
||||
/src/cap/race/race_test.go:13 +0x7b
|
||||
|
||||
Previous write at 0x00c000018398 by goroutine 8:
|
||||
example.com/cap/race.TestACounterIsShared.func1()
|
||||
/src/cap/race/race_test.go:13 +0x8d
|
||||
|
||||
Goroutine 9 (running) created at:
|
||||
example.com/cap/race.TestACounterIsShared()
|
||||
/src/cap/race/race_test.go:13 +0x78
|
||||
testing.tRunner()
|
||||
/usr/lib/go/src/testing/testing.go:2193 +0x21c
|
||||
testing.(*T).Run.gowrap1()
|
||||
/usr/lib/go/src/testing/testing.go:2258 +0x38
|
||||
|
||||
Goroutine 8 (finished) created at:
|
||||
example.com/cap/race.TestACounterIsShared()
|
||||
/src/cap/race/race_test.go:13 +0x78
|
||||
testing.tRunner()
|
||||
/usr/lib/go/src/testing/testing.go:2193 +0x21c
|
||||
testing.(*T).Run.gowrap1()
|
||||
/usr/lib/go/src/testing/testing.go:2258 +0x38
|
||||
==================
|
||||
--- FAIL: TestACounterIsShared (0.00s)
|
||||
testing.go:1865: race detected during execution of test
|
||||
FAIL
|
||||
FAIL example.com/cap/race 0.009s
|
||||
FAIL
|
||||
@@ -342,38 +342,18 @@ func (e *NotMadeError) Error() string {
|
||||
// compose. Empty when every module composes. The same judgement SetSettings makes before storing.
|
||||
func (r Resolution) LeftOut(settings SettingsBy, adopted bool) map[string]string {
|
||||
out := map[string]string{}
|
||||
for module, why := range r.LeftOutBecause(settings, adopted) {
|
||||
out[module] = why.Error()
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// LeftOutBecause is LeftOut with each reason as the error it was, so a reader can tell a setting nobody
|
||||
// gave (an *UnsetSettingError) from any other cause and say it as the operator's to give (novox/hq issue
|
||||
// 380). An UnreadManifestError for a stored manifest this controller cannot read whole.
|
||||
func (r Resolution) LeftOutBecause(settings SettingsBy, adopted bool) map[string]error {
|
||||
out := map[string]error{}
|
||||
for _, m := range r.Modules {
|
||||
if why := UnknownFieldReason(m); why != "" {
|
||||
out[m.Module] = &UnreadManifestError{Module: m.Module, said: why}
|
||||
out[m.Module] = why
|
||||
continue
|
||||
}
|
||||
if err := JudgeSettings(m, settings[m.Module], adopted); err != nil {
|
||||
out[m.Module] = err
|
||||
out[m.Module] = err.Error()
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// UnreadManifestError is a module left out because its stored manifest has a key this controller does not know
|
||||
// (novox/hq ADR 0262): said once for the whole mesh, by the catalogue's own condition, not per machine.
|
||||
type UnreadManifestError struct {
|
||||
Module string
|
||||
said string
|
||||
}
|
||||
|
||||
func (e *UnreadManifestError) Error() string { return e.said }
|
||||
|
||||
// Compose is Declaration with the owner of every resource said.
|
||||
func (r Resolution) Compose(with Rendering) (Composed, error) {
|
||||
owner := map[string]string{}
|
||||
|
||||
@@ -38,17 +38,6 @@ func settingsUsed(content string) []string {
|
||||
return keys
|
||||
}
|
||||
|
||||
// UnsetSettingError is a module whose definition says ${setting:<key>} where nothing sets that key: typed, so
|
||||
// that whoever reads why a module was left out of a machine can tell a setting nobody gave — the operator's
|
||||
// to give, named with the command that gives it — from any other reason (novox/hq issue 380). Its words are
|
||||
// the refusal's, unchanged.
|
||||
type UnsetSettingError struct {
|
||||
Module, Setting string
|
||||
said string
|
||||
}
|
||||
|
||||
func (e *UnsetSettingError) Error() string { return e.said }
|
||||
|
||||
// settingInto fills a file's ${setting:…} placeholders from the layers over a module.
|
||||
//
|
||||
// The last layer setting a key wins, which is the node's over the mesh's over the module's own
|
||||
@@ -69,12 +58,12 @@ func settingInto(resource map[string]any, layers []Layer, module string) error {
|
||||
for _, key := range settingsUsed(content) {
|
||||
value, set := settingValue(layers, key)
|
||||
if !set {
|
||||
return &UnsetSettingError{Module: module, Setting: key, said: fmt.Sprintf(
|
||||
return fmt.Errorf(
|
||||
"%s has a file that says ${setting:%s}, and nothing sets %q for it — an operator's "+
|
||||
"value is the assignment's, never the definition's (novox/hq ADR 0112), and only a "+
|
||||
"preference has a default in the definition (ADR 0262): "+
|
||||
"`settings set %s <file>` with {%q: …}%s",
|
||||
module, key, key, module, key, orNoSettings(layers))}
|
||||
module, key, key, module, key, orNoSettings(layers))
|
||||
}
|
||||
content = strings.ReplaceAll(content, "${setting:"+key+"}", plainly(value))
|
||||
}
|
||||
@@ -125,11 +114,11 @@ func settingIntoUnit(resource map[string]any, layers []Layer, module string) err
|
||||
for _, key := range settingsUsed(unit) {
|
||||
value, set := settingValue(layers, key)
|
||||
if !set {
|
||||
return &UnsetSettingError{Module: module, Setting: key, said: fmt.Sprintf(
|
||||
return fmt.Errorf(
|
||||
"%s has a service whose unit says ${setting:%s}, and nothing sets %q for it — an operator's "+
|
||||
"value is the assignment's, never the definition's (novox/hq ADR 0112): "+
|
||||
"`settings set %s <file>` with {%q: …}%s",
|
||||
module, key, key, module, key, orNoSettings(layers))}
|
||||
module, key, key, module, key, orNoSettings(layers))
|
||||
}
|
||||
v := plainly(value)
|
||||
if !unitPart.MatchString(v) {
|
||||
|
||||
@@ -62,9 +62,6 @@ type DeadLetter struct {
|
||||
// taken. The record of it is kept all the same, so it is said and dropped, never silently missing.
|
||||
Lost string `json:"lost,omitempty"`
|
||||
Size int `json:"size"`
|
||||
// Original says what became of the ask it was kept from, in its seat's work queue, when it was
|
||||
// delivered again (novox/hq issue 334).
|
||||
Original string `json:"original,omitempty"`
|
||||
// Body and Headers are the message itself, given only for one dead letter asked by its id; a header
|
||||
// with several values keeps them all.
|
||||
Body string `json:"body,omitempty"`
|
||||
@@ -253,15 +250,9 @@ func DeadLetterNamed(js nats.JetStreamContext, id uint64) (DeadLetter, error) {
|
||||
|
||||
// AgainTo is where a kept message is delivered again so that only the consumer that gave it up gets
|
||||
// it: an event under that consumer's own again subject on EVENTS — and only when the consumer exists and
|
||||
// filters that subject, so a message is never let go as delivered while nobody receives it.
|
||||
//
|
||||
// An ask the controller itself made (broker.TheControllersAsk) goes back on its own subject: a seat's
|
||||
// work queue has one worker per subject, so only the worker that gave it up takes it, and DeliverAgain
|
||||
// removes the original from the queue first, so there are never two (novox/hq issue 334); only while the
|
||||
// worker that gave it up is on the bus. Any other stream's
|
||||
// message is refused, with why: an ask to a seat the controller does not ask would need a publish it is
|
||||
// not granted, in its asker's name (ADR 0264's consequences, ADR 0259 §3), and a stream that is neither
|
||||
// would reach every consumer of its subject.
|
||||
// filters that subject, so a message is never let go as delivered while nobody receives it. Any other
|
||||
// stream's message is refused, with why: an ask given up on by a seat's worker is not delivered again yet
|
||||
// (novox/hq issue 330's follow-up), since publishing it again leaves the original stuck in the queue.
|
||||
func AgainTo(js nats.JetStreamContext, d DeadLetter) (string, error) {
|
||||
switch {
|
||||
case d.Lost != "":
|
||||
@@ -269,22 +260,10 @@ func AgainTo(js nats.JetStreamContext, d DeadLetter) (string, error) {
|
||||
case d.Subject == "":
|
||||
return "", fmt.Errorf("dead letter %d does not say the subject it was published on, so it cannot be "+
|
||||
"delivered again. Drop it", d.ID)
|
||||
case broker.TheControllersAsk(d.Stream, d.Subject):
|
||||
// The seat's worker takes it, and only while it is on the bus: without one the queue would keep
|
||||
// the ask for a holder that may never come, and it would be let go as delivered meanwhile.
|
||||
if _, err := js.ConsumerInfo(d.Stream, d.Consumer); errors.Is(err, nats.ErrConsumerNotFound) {
|
||||
return "", fmt.Errorf("dead letter %d was given up by %s, which is no longer on the bus, so the ask "+
|
||||
"would only wait in %s for a holder. Nothing was done, and it is still kept: deliver it again once "+
|
||||
"the seat has a holder, or drop it", d.ID, d.Who, d.Stream)
|
||||
} else if err != nil {
|
||||
return "", fmt.Errorf("whether %s can receive dead letter %d cannot be read: %w", d.Who, d.ID, err)
|
||||
}
|
||||
return d.Subject, nil
|
||||
case d.Stream != broker.EventsStream:
|
||||
return "", fmt.Errorf("dead letter %d is from %s, and only an event or an ask the controller made is "+
|
||||
"delivered again: publishing it again would reach every consumer of its subject, or need a grant the "+
|
||||
"controller does not hold to speak for its asker. Drop it, and have its sender say it again",
|
||||
d.ID, d.Stream)
|
||||
return "", fmt.Errorf("dead letter %d is from %s, and only an event is delivered again: publishing it "+
|
||||
"again would reach every consumer of its subject, or leave the original in its queue. Drop it, and "+
|
||||
"have its sender say it again", d.ID, d.Stream)
|
||||
}
|
||||
info, err := js.ConsumerInfo(d.Stream, d.Consumer)
|
||||
if errors.Is(err, nats.ErrConsumerNotFound) {
|
||||
@@ -305,7 +284,7 @@ func AgainTo(js nats.JetStreamContext, d DeadLetter) (string, error) {
|
||||
}
|
||||
|
||||
// DeliverAgain hands a kept message to the consumer that gave it up, and nobody else, then removes it
|
||||
// from DEAD_LETTERS; an ask's original is removed from its work queue before. The message carries its own headers and AgainHeader; its de-duplication id is the
|
||||
// from DEAD_LETTERS. The message carries its own headers and AgainHeader; its de-duplication id is the
|
||||
// kept copy's, so asking twice delivers it once.
|
||||
func DeliverAgain(js nats.JetStreamContext, id uint64) (DeadLetter, string, error) {
|
||||
d, err := DeadLetterNamed(js, id)
|
||||
@@ -316,9 +295,6 @@ func DeliverAgain(js nats.JetStreamContext, id uint64) (DeadLetter, string, erro
|
||||
if err != nil {
|
||||
return d, "", err
|
||||
}
|
||||
if d.Stream != broker.EventsStream {
|
||||
d.Original = removeOriginal(js, d)
|
||||
}
|
||||
again := &nats.Msg{Subject: to, Header: nats.Header{}, Data: []byte(d.Body)}
|
||||
for k, v := range d.Headers {
|
||||
again.Header[k] = append([]string(nil), v...)
|
||||
@@ -326,10 +302,6 @@ func DeliverAgain(js nats.JetStreamContext, id uint64) (DeadLetter, string, erro
|
||||
again.Header.Set(AgainHeader, strconv.FormatUint(id, 10))
|
||||
again.Header.Set(nats.MsgIdHdr, "again."+broker.DeadLettersStream+"."+strconv.FormatUint(id, 10))
|
||||
if _, err := js.PublishMsg(again); err != nil {
|
||||
if d.Original != "" {
|
||||
return d, to, fmt.Errorf("dead letter %d could not be delivered again on %s: %w; it is still kept, so "+
|
||||
"delivering it again tries once more. Its original: %s", id, to, err, d.Original)
|
||||
}
|
||||
return d, to, fmt.Errorf("dead letter %d could not be delivered again on %s: %w; it is still kept", id, to, err)
|
||||
}
|
||||
if err := js.DeleteMsg(broker.DeadLettersStream, id); err != nil && !errors.Is(err, nats.ErrMsgNotFound) {
|
||||
@@ -339,34 +311,6 @@ func DeliverAgain(js nats.JetStreamContext, id uint64) (DeadLetter, string, erro
|
||||
return d, to, nil
|
||||
}
|
||||
|
||||
// removeOriginal takes the ask a dead letter was kept from out of its seat's work queue, and says what
|
||||
// became of it. Given up on, the original is never acknowledged and would stay beside its copy until the
|
||||
// stream's age drops it (novox/hq issue 334). It is removed before the copy is published, so a copy that
|
||||
// cannot be published leaves the kept one to try again, and never two.
|
||||
//
|
||||
// **Only when the queue still holds that same message**: its subject and the time it was stored are the
|
||||
// dead letter's. A seat's stream deleted and made again — the build handover deletes one (builds.go) —
|
||||
// numbers from one again, and an old dead letter's sequence may then name another, live ask; deleting by
|
||||
// the number alone would drop that one silently. Anything else is said, never an error: the original is
|
||||
// gone or is not this one, and the copy is the only one there will be.
|
||||
func removeOriginal(js nats.JetStreamContext, d DeadLetter) string {
|
||||
held, err := js.GetMsg(d.Stream, d.Sequence)
|
||||
switch {
|
||||
case errors.Is(err, nats.ErrMsgNotFound):
|
||||
return fmt.Sprintf("%s no longer held message %d, so there was nothing to remove", d.Stream, d.Sequence)
|
||||
case err != nil:
|
||||
return fmt.Sprintf("message %d of %s could not be read, so it was left as it is: %v", d.Sequence, d.Stream, err)
|
||||
case d.Published.IsZero() || held.Subject != d.Subject || !held.Time.Equal(d.Published):
|
||||
return fmt.Sprintf("message %d of %s is another message now (%s, stored %s), so it was left as it is; "+
|
||||
"the one given up on is gone", d.Sequence, d.Stream, held.Subject, held.Time.UTC().Format(time.RFC3339))
|
||||
}
|
||||
if err := js.DeleteMsg(d.Stream, d.Sequence); err != nil && !errors.Is(err, nats.ErrMsgNotFound) {
|
||||
return fmt.Sprintf("message %d of %s could not be removed, so it stays beside its copy until the "+
|
||||
"stream's age drops it; nothing delivers it again: %v", d.Sequence, d.Stream, err)
|
||||
}
|
||||
return fmt.Sprintf("message %d of %s, the one given up on, was removed from the queue", d.Sequence, d.Stream)
|
||||
}
|
||||
|
||||
// DropDeadLetter removes a kept message for good.
|
||||
func DropDeadLetter(js nats.JetStreamContext, id uint64) (DeadLetter, error) {
|
||||
d, err := DeadLetterNamed(js, id)
|
||||
|
||||
@@ -1,217 +0,0 @@
|
||||
package link
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/nats-io/nats.go"
|
||||
"github.com/nats-io/nats.go/jetstream"
|
||||
|
||||
"github.com/novox/mesh-controller/internal/broker"
|
||||
)
|
||||
|
||||
// What a seat's worker gave up on, when the ask is one the controller itself makes (novox/hq issue 334).
|
||||
//
|
||||
// The controller already publishes on the accept subjects of the seats it asks (broker's
|
||||
// seatsTheControllerAsks) and reaches the stream API, so delivering its own ask again needs no grant it
|
||||
// does not hold: the original is removed from the work queue by its sequence, and the kept copy is
|
||||
// published on the ask's own subject, where the seat's one worker takes it. An ask to any other seat is
|
||||
// still refused, and stays kept: delivering it would need a publish the controller is not granted
|
||||
// (ADR 0264's consequences), in the asker's name (ADR 0259 §3).
|
||||
|
||||
// theBuildWorker is the build seat's worker as a holder pulls from it.
|
||||
func theBuildWorker(t *testing.T, js *broker.JetStream) jetstream.Consumer {
|
||||
t.Helper()
|
||||
api, err := jetstream.New(js.Conn())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
stream := "SEAT_NODE_BUILD_AGENT"
|
||||
worker, err := api.Consumer(t.Context(), stream, stream+"_worker")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return worker
|
||||
}
|
||||
|
||||
func TestAnAskTheControllerMadeIsDeliveredAgainToTheSeatsWorker(t *testing.T) {
|
||||
js := aBusWithTheBuildRole(t)
|
||||
keeping(t, js)
|
||||
worker := theBuildWorker(t, js)
|
||||
|
||||
subject := BuildWorkOf(TheBuildMachine)
|
||||
ask := &nats.Msg{Subject: subject, Data: []byte(`{"module":"x"}`), Header: nats.Header{}}
|
||||
ask.Header.Set(nats.MsgIdHdr, "build-1")
|
||||
if _, err := js.Context().PublishMsg(ask); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
d := givenUp(t, js, worker)
|
||||
if d.Stream != "SEAT_NODE_BUILD_AGENT" || d.Subject != subject || d.Lost != "" {
|
||||
t.Fatalf("kept as %+v", d)
|
||||
}
|
||||
if _, err := js.Context().GetMsg(d.Stream, d.Sequence); err != nil {
|
||||
t.Fatalf("the original is not in the work queue before it is delivered again: %v", err)
|
||||
}
|
||||
|
||||
_, to, err := DeliverAgain(js.Context(), d.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if to != subject {
|
||||
t.Fatalf("delivered again on %s, not the ask's own subject %s", to, subject)
|
||||
}
|
||||
if _, err := js.Context().GetMsg(d.Stream, d.Sequence); !errors.Is(err, nats.ErrMsgNotFound) {
|
||||
t.Fatalf("the original is still in the work queue beside its copy: %v", err)
|
||||
}
|
||||
again := next(t, worker)
|
||||
if again == nil {
|
||||
t.Fatal("the seat's worker was not handed the ask again")
|
||||
}
|
||||
if string(again.Data()) != `{"module":"x"}` || again.Headers().Get(AgainHeader) == "" {
|
||||
t.Fatalf("handed again as %s %v", again.Data(), again.Headers())
|
||||
}
|
||||
_ = again.Ack()
|
||||
if m := next(t, worker); m != nil {
|
||||
t.Fatalf("the worker was handed it twice: %s", m.Subject())
|
||||
}
|
||||
if _, err := DeadLetterNamed(js.Context(), d.ID); !errors.Is(err, ErrNoDeadLetter) {
|
||||
t.Fatalf("still kept after it was delivered again: %v", err)
|
||||
}
|
||||
if _, _, err := DeliverAgain(js.Context(), d.ID); !errors.Is(err, ErrNoDeadLetter) {
|
||||
t.Fatalf("a second delivery answered %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// An ask to a seat the controller does not ask is refused, says why, and nothing is done.
|
||||
func TestAnAskTheControllerDidNotMakeIsStillOnlyDropped(t *testing.T) {
|
||||
js := aBus(t)
|
||||
for _, d := range []DeadLetter{
|
||||
{ID: 2, Stream: "SEAT_TELEGRAM_SENDER", Consumer: "SEAT_TELEGRAM_SENDER_worker",
|
||||
Subject: "mesh.seat.telegram-sender.accept.send"},
|
||||
// The subject of a seat the controller asks, on a stream that is not that seat's queue.
|
||||
{ID: 3, Stream: "SEAT_TELEGRAM_SENDER", Consumer: "SEAT_TELEGRAM_SENDER_worker",
|
||||
Subject: "mesh.seat.node-build-agent.accept.build"},
|
||||
} {
|
||||
if to, err := AgainTo(js.Context(), d); err == nil {
|
||||
t.Errorf("%s on %s was given %s to be delivered again on", d.Subject, d.Stream, to)
|
||||
} else if !strings.Contains(err.Error(), "Drop it") {
|
||||
t.Errorf("refused without saying what to do: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// aBuildAskGivenUp publishes one build ask and lets the worker give it up.
|
||||
func aBuildAskGivenUp(t *testing.T, js *broker.JetStream, worker jetstream.Consumer, body string) DeadLetter {
|
||||
t.Helper()
|
||||
if _, err := js.Context().Publish(BuildWorkOf(TheBuildMachine), []byte(body)); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return givenUp(t, js, worker)
|
||||
}
|
||||
|
||||
// A copy that cannot be published: the original is already out of the queue, the dead letter is kept and
|
||||
// the answer says both; asked again once it can be published, it is delivered once.
|
||||
func TestAnAskWhoseCopyIsRefusedStaysKeptAndIsDeliveredOnTheNextTry(t *testing.T) {
|
||||
js := aBusWithTheBuildRole(t)
|
||||
keeping(t, js)
|
||||
worker := theBuildWorker(t, js)
|
||||
d := aBuildAskGivenUp(t, js, worker, `{"module":"x"}`)
|
||||
|
||||
// The queue stops taking the ask's subject, so the copy's publish is refused by the server.
|
||||
info, err := js.Context().StreamInfo(d.Stream)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cfg := info.Config
|
||||
taking := cfg.Subjects
|
||||
cfg.Subjects = []string{"mesh.seat." + TheBuildMachine + ".accept.nothing"}
|
||||
if _, err := js.Context().UpdateStream(&cfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, _, err = DeliverAgain(js.Context(), d.ID)
|
||||
if err == nil || !strings.Contains(err.Error(), "still kept") || !strings.Contains(err.Error(), "was removed") {
|
||||
t.Fatalf("a refused copy answered %v", err)
|
||||
}
|
||||
if _, err := js.Context().GetMsg(d.Stream, d.Sequence); !errors.Is(err, nats.ErrMsgNotFound) {
|
||||
t.Fatalf("the original is still in the queue: %v", err)
|
||||
}
|
||||
if _, err := DeadLetterNamed(js.Context(), d.ID); err != nil {
|
||||
t.Fatalf("a refused copy let the dead letter go: %v", err)
|
||||
}
|
||||
|
||||
cfg.Subjects = taking
|
||||
if _, err := js.Context().UpdateStream(&cfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
retried, _, err := DeliverAgain(js.Context(), d.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !strings.Contains(retried.Original, "no longer held") {
|
||||
t.Fatalf("the retry said of the original: %q", retried.Original)
|
||||
}
|
||||
if again := next(t, worker); again == nil || string(again.Data()) != `{"module":"x"}` {
|
||||
t.Fatal("the retry did not hand the ask to the worker")
|
||||
} else {
|
||||
_ = again.Ack()
|
||||
}
|
||||
if m := next(t, worker); m != nil {
|
||||
t.Fatalf("handed twice: %s", m.Data())
|
||||
}
|
||||
}
|
||||
|
||||
// A queue made again numbers from one: the old dead letter's sequence then names a live ask, which is left
|
||||
// alone.
|
||||
func TestAnAskWhoseSequenceNamesAnotherMessageLeavesThatOneAlone(t *testing.T) {
|
||||
js := aBusWithTheBuildRole(t)
|
||||
keeping(t, js)
|
||||
d := aBuildAskGivenUp(t, js, theBuildWorker(t, js), `{"module":"old"}`)
|
||||
|
||||
// The build handover's way: the seat's queue deleted and made again, with its worker.
|
||||
if err := js.Context().DeleteStream(d.Stream); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := broker.RaiseSeats(js, []broker.DeclaredSeat{{Name: TheBuildMachine, Accepts: []string{"build"},
|
||||
Emits: []string{"built"}}}, map[string]broker.Holder{TheBuildMachine: {Node: "anchor", Module: "builder"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
live, err := js.Context().Publish(BuildWorkOf(TheBuildMachine), []byte(`{"module":"live"}`))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if live.Sequence != d.Sequence {
|
||||
t.Fatalf("the live ask is message %d, the dead letter names %d: the test does not set up the collision",
|
||||
live.Sequence, d.Sequence)
|
||||
}
|
||||
|
||||
delivered, _, err := DeliverAgain(js.Context(), d.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !strings.Contains(delivered.Original, "another message") {
|
||||
t.Fatalf("the answer said of the original: %q", delivered.Original)
|
||||
}
|
||||
if held, err := js.Context().GetMsg(d.Stream, d.Sequence); err != nil || string(held.Data) != `{"module":"live"}` {
|
||||
t.Fatalf("the live ask at that sequence was touched: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// No worker on the seat's queue: refused, kept, and nothing published.
|
||||
func TestAnAskIsNotDeliveredAgainWhileTheSeatHasNoWorker(t *testing.T) {
|
||||
js := aBusWithTheBuildRole(t)
|
||||
keeping(t, js)
|
||||
d := aBuildAskGivenUp(t, js, theBuildWorker(t, js), `{"module":"x"}`)
|
||||
if err := js.Context().DeleteConsumer(d.Stream, d.Consumer); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, _, err := DeliverAgain(js.Context(), d.ID); err == nil || !strings.Contains(err.Error(), "wait in") {
|
||||
t.Fatalf("delivered with no worker: %v", err)
|
||||
}
|
||||
if _, err := js.Context().GetMsg(d.Stream, d.Sequence); err != nil {
|
||||
t.Fatalf("a refusal removed the original: %v", err)
|
||||
}
|
||||
if _, err := DeadLetterNamed(js.Context(), d.ID); err != nil {
|
||||
t.Fatalf("a refusal let the dead letter go: %v", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user