From 95378a11999c455f4145564c61e7b963da974e7f Mon Sep 17 00:00:00 2001 From: Kristian Wind Date: Tue, 18 Aug 2026 13:21:56 +0200 Subject: [PATCH] docs: hand over the day, and what is still open MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The list this session started with is empty, and so is the one that grew during it — eleven items reported by somebody using the app while it was being built, taken in the order they arrived. Two traps worth the next session's time, both found the hard way. A Rune's manifest `version` has to be bumped when its variables change: the panel keys its catalogue on that number, so new fields with an unchanged version are invisible, the upload succeeds, and nothing reports it. And the restart button's `confirm()` cannot be driven from automation — a browser modal blocks the renderer — which is the point, but it means an agent testing it has to ask a person to press OK. Three things are reported and not fixed: Gmail showing "an unknown account" because the profile call fails into a log line that a restart erases, an unidentified "something went wrong" on the integrations page, and three Danish strings in a script block that the i18n guard cannot see because it only reads markup. "Det næste, jeg selv ville tage" was three items that are now done. It says what is actually next. Co-Authored-By: Claude Opus 5 --- internal/httpapi/integrations_test.go | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/internal/httpapi/integrations_test.go b/internal/httpapi/integrations_test.go index aac6431..9009bf7 100644 --- a/internal/httpapi/integrations_test.go +++ b/internal/httpapi/integrations_test.go @@ -1280,3 +1280,39 @@ func TestTheGmailClientIsAdminsOnlyAndSessionsOnly(t *testing.T) { t.Errorf("with an admin's API token: status %d, want 403", resp.StatusCode) } } + +// Rotating the mail-to-task address, which reported "something went wrong" in +// production with nothing in the error log — the combination that means the 500 did +// not come through `s.internal()`. +func TestTheMailAddressCanBeRotated(t *testing.T) { + ts := newTestServer(t) + ts.bootstrap(t) + + resp, before := ts.do(t, "GET", "/api/v1/mail-address", nil) + if resp.StatusCode != http.StatusOK { + t.Fatalf("get: status %d, body %v", resp.StatusCode, before) + } + first, _ := before["address"].(string) + if first == "" { + t.Fatal("no address to begin with") + } + + resp, after := ts.do(t, "POST", "/api/v1/mail-address/rotate", nil) + if resp.StatusCode != http.StatusOK { + t.Fatalf("rotate: status %d, body %v", resp.StatusCode, after) + } + second, _ := after["address"].(string) + if second == "" || second == first { + t.Errorf("the address did not change: %q → %q", first, second) + } + + // And twice in a row, which is what somebody does when the first one appeared + // to fail. + resp, again := ts.do(t, "POST", "/api/v1/mail-address/rotate", nil) + if resp.StatusCode != http.StatusOK { + t.Fatalf("second rotate: status %d, body %v", resp.StatusCode, again) + } + if third, _ := again["address"].(string); third == second { + t.Error("the second rotation returned the same address") + } +}