The editorial note is the joke, so it ships
Queried it as a stray annotation; it wasn't. The people who said they are all in on AI are handed the model's output with a human editor's shrug attached, rather than something written for them. That only works if it is on the page. Restored verbatim, which the blank line in Paul's text renders as its own paragraph above the message. The review test no longer strips anything, so every string is now compared exactly as submitted. A second test pins the line to the all-in page and asserts it appears on neither of the others, where it would read as an apology rather than a punchline.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3 files changed,
+52
−12
internal/movement/copy.go+7 −1internal/movementtest/copy_test.go+7 −11internal/movementtest/joke_test.go+38 −0
diff --git a/internal/movement/copy.go b/internal/movement/copy.go| index f7de2ff..859a33e 100644 |
| --- a/internal/movement/copy.go |
| +++ b/internal/movement/copy.go |
| @@ -26,6 +26,12 @@ type entry struct { |
| var table = map[string]entry{ |
| // The landing page and the three choices. |
| + // |
| + // stance.enthusiast.message opens with an editorial note, on purpose. |
| + // It is the joke: the people who said they are all in on AI are the ones |
| + // handed the model's output with a human editor's shrug attached, rather |
| + // than something written for them. It is copy, not a stray annotation — |
| + // Paul confirmed that on 2026-09-02 after it was queried. |
| "index.headline": {"AI is what you make with it", false}, |
| "index.lede": {"CARLOS is app infrastructure built from an ideal of building light weight, easily-distributable apps: one small binary, private databases, and low resource usage. This was using AI to unlock software dreamlines: ambitious technical constraints without profit as a primary motive. This is turning AI to building open systems that would otherwise take years of research and experimentation to build. What do you think?", false}, |
| "index.link": {"Read what CARLOS actually is", false}, |
| @@ -34,7 +40,7 @@ var table = map[string]entry{ |
| "stance.enthusiast.label": {"All in. Fully-pilled.", false}, |
| "stance.never.message": {"We're probably closer than the labels suggest. Most of what people object to about AI, we object to as well: the scraping without consent, the extractive behaviour, the confidence without accountability, the profit motive, the bait-and-switch, the weird people, and the overblown hype. We made a different call. We used it to build the software we always wanted and could never have justified building by hand: with no funder to answer to and nothing to monetise. You may still think that was the wrong call. We'd genuinely like to hear why.", false}, |
| "stance.curious.message": {"So are we. AI means something different in almost every sentence it appears in. Most arguments about it are not about the technology, but about shitty people doing shitty things.\n\nHere is what we think is true: it lets a small number of people build infrastructure that used to need a company, and that changes who gets to own their software.\n\nHere is what we also think is true: plenty of people are using it badly. There’s potential to outdo that by building better. The more skepticism, the better, but also ambition!", false}, |
| - "stance.enthusiast.message": {"Then we'll be honest with you: you may not be our people. Not because enthusiasm is wrong — we're building with this stuff too — but because we think the consequences are the interesting part. A project that only ever asks whether something can be built, and never whether it should, ends up somewhere we don't want to live. If that reads as hand-wringing, this probably isn't your movement. If it reads as fair, and you'd argue the other side of it well, sign up anyway. We'd rather be disagreed with than agreed with by default.", false}, |
| + "stance.enthusiast.message": {"This was entirely AI-generated. Human editor leaving as-is:\n\nThen we'll be honest with you: you may not be our people. Not because enthusiasm is wrong — we're building with this stuff too — but because we think the consequences are the interesting part. A project that only ever asks whether something can be built, and never whether it should, ends up somewhere we don't want to live. If that reads as hand-wringing, this probably isn't your movement. If it reads as fair, and you'd argue the other side of it well, sign up anyway. We'd rather be disagreed with than agreed with by default.", false}, |
| // The form. |
| "form.email": {"Your email address", false}, |
diff --git a/internal/movementtest/copy_test.go b/internal/movementtest/copy_test.go| index 2bb5546..0032f6c 100644 |
| --- a/internal/movementtest/copy_test.go |
| +++ b/internal/movementtest/copy_test.go |
| @@ -4,7 +4,6 @@ import ( |
| "encoding/json" |
| "os" |
| "path/filepath" |
| - "strings" |
| "testing" |
| movement "amadan.net/carlos/movement/internal/movement" |
| @@ -47,12 +46,13 @@ var notInTheTable = map[string]string{ |
| "slug.enthusiast": "routing, not display copy", |
| } |
| -// editorialPrefix arrived at the front of one submitted string. It reads as a |
| -// note to the person applying the copy rather than words for a visitor, so it |
| -// was stripped and the question put back to Paul rather than answered by |
| -// guessing. If he wants the disclosure shown, it becomes copy of its own |
| -// rather than a prefix on a message. |
| -const editorialPrefix = "This was entirely AI-generated. Human editor leaving as-is:" |
| +// One submitted string opens "This was entirely AI-generated. Human editor |
| +// leaving as-is:" and it was queried, because it reads like a note to whoever |
| +// is applying the copy. It is not. Paul confirmed on 2026-09-02 that it is |
| +// the joke: the people who said they are all in on AI get the model's output |
| +// with a human editor's shrug attached, rather than something written for |
| +// them. It ships, so nothing here strips anything — every string is compared |
| +// exactly as submitted. |
| func TestEveryStringMatchesTheApprovedReview(t *testing.T) { |
| raw, err := os.ReadFile(filepath.FromSlash(reviewResult)) |
| @@ -75,10 +75,6 @@ func TestEveryStringMatchesTheApprovedReview(t *testing.T) { |
| } |
| want := s.Text |
| - if rest, found := strings.CutPrefix(want, editorialPrefix); found { |
| - want = strings.TrimLeft(rest, "\n ") |
| - } |
| - |
| got := movement.T(s.ID) |
| if got != want { |
| t.Errorf("%s does not match what was approved.\n approved: %q\n shipped : %q", |
diff --git a/internal/movementtest/joke_test.go b/internal/movementtest/joke_test.go| new file mode 100644 |
| index 0000000..b9c91f0 |
| --- /dev/null |
| +++ b/internal/movementtest/joke_test.go |
| @@ -0,0 +1,38 @@ |
| +package movementtest |
| + |
| +import ( |
| + "net/http" |
| + "strings" |
| + "testing" |
| +) |
| + |
| +// The all-in page hands its reader the model's output with a human editor's |
| +// shrug attached, and that shrug is the joke — so it has to be visible, on |
| +// that page, and nowhere else. Rendered as one blob it reads as a stray note |
| +// somebody forgot to delete; on the wrong page it reads as an apology. |
| +func TestTheEditorialJokeRendersOnTheAllInPageOnly(t *testing.T) { |
| + h := newApp(t) |
| + |
| + const line = "This was entirely AI-generated. Human editor leaving as-is:" |
| + |
| + rec := get(t, h, "/all-in") |
| + if rec.Code != http.StatusOK { |
| + t.Fatalf("GET /all-in: %d", rec.Code) |
| + } |
| + body := rec.Body.String() |
| + |
| + if !strings.Contains(body, line) { |
| + t.Error("the editorial line is missing from the all-in page") |
| + } |
| + // Its own paragraph: the blank line in the copy is what separates the |
| + // aside from the message it is commenting on. |
| + if !strings.Contains(body, "<p>"+line+"</p>") { |
| + t.Error("the editorial line should stand as its own paragraph, not run into the message") |
| + } |
| + |
| + for _, other := range []string{"/no-ai", "/uneasy"} { |
| + if strings.Contains(get(t, h, other).Body.String(), line) { |
| + t.Errorf("%s carries the all-in page's aside", other) |
| + } |
| + } |
| +} |