orchard
mirrorEvery site I host, in one repo, along with the Cloudflare Tunnel and Caddy that front them. It's all Go, Vite, and SQLite, and it runs on a desktop at home with nothing listening on an inbound port.
blogbuncaddycloudflare-tunneldockergogolanghomelabhtml-templatemonorepoself-hostedseosqlitestatic-sitetypstuptime-monitoringviteweb-analytics
1package main
2
3import "testing"
4
5// A first answer that searched, then the same answer written out again under a
6// follow-up that asked something new. That is the shape Isaac hit twice in one
7// conversation: the tools ran on the first question and never again, and every
8// later reply was the first one reworded. The third is the control, a follow-up
9// that went somewhere the first answer does not cover.
10const (
11 firstAnswer = `Crossings are down rather than up. Between 1 January and 5 September 2026, 16,513 people made the crossing, which is 43% below the same period last year. Almost everyone who arrives claims asylum and is allowed to stay while the claim is decided.
12
13The buses are the dispersal process. Arrivals land in one county and are moved to hotels and shared housing across the country. About 18% of the 89,089 people in asylum accommodation in June 2026 were in hotels, and the government has said it will stop using hotels by 2029.
14
15Applications fell 21% to 85,891 over the year to June 2026, the backlog fell 56%, and returns rose 8% to 40,605. Sources: https://example.org/a and https://example.org/b`
16
17 rehash = `I cannot answer this from the tool results. The sources I read show the opposite of what the question assumes. Crossings are down rather than up, 43% below the same period last year, applications fell 21% and the backlog fell 56%.
18
19The buses are the dispersal process. Arrivals land in one county and are moved to hotels and shared housing across the country. About 18% of the 89,089 people in asylum accommodation in June 2026 were in hotels, and the government has said it will stop using hotels by 2029. Almost everyone who arrives claims asylum and is allowed to stay while the claim is decided.
20
21Sources: https://example.org/a and https://example.org/b`
22
23 movedOn = `Fair, the split is not really between one country and another. Ports on both coasts handle their own arrivals and the counts differ by season more than by policy, so a year on year figure hides most of what you are asking about. The Home Office publishes a quarterly table by port of entry, and Dover and Folkestone sit well above everywhere else in it, which is the number that would settle this. https://example.org/c`
24)
25
26func TestRepeatsAnswered(t *testing.T) {
27 if !repeatsAnswered(rehash, []string{firstAnswer}) {
28 t.Error("a follow-up that rewrote the previous answer was let through")
29 }
30 if !repeatsAnswered(rehash, []string{"unrelated earlier reply", firstAnswer}) {
31 t.Error("the match has to be against every earlier answer, not just the last")
32 }
33 if repeatsAnswered(movedOn, []string{firstAnswer, rehash}) {
34 t.Error("a follow-up that moved on was called a repeat")
35 }
36 if repeatsAnswered(rehash, nil) {
37 t.Error("there was nothing to repeat and it still said yes")
38 }
39 // A short reply shares its whole vocabulary with what came before, so the
40 // overlap says nothing about whether it answered.
41 if repeatsAnswered("Yes, that is right, the crossings are down 43% on last year.", []string{firstAnswer}) {
42 t.Error("a short reply was measured for overlap")
43 }
44}
45
46func TestRefusal(t *testing.T) {
47 if !refusal.MatchString(rehash) {
48 t.Error("missed a refusal to answer from the tool results")
49 }
50 for _, s := range []string{firstAnswer, movedOn, "I cannot answer that until the market opens."} {
51 if refusal.MatchString(s) {
52 t.Errorf("ate a real answer: %.60q", s)
53 }
54 }
55}