oficina / meet Public

ui: one sign-out, in the shell; callTitle test

welcome.html no longer renders its own sign-out form now that the
topbar shell always shows one when a Viewer is signed in — /welcome
was showing two. Updated the "Sign out" row in the slice 1 copy list
to point at the shell instead of welcome.html.

Added TestCallTitle, a table test over a fixed time and a few zones
(UTC, a zone ahead of UTC, and one that rolls the date forward),
covering what meettest's black-box "Call, " prefix check couldn't.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CzvnuKhLzudvq7jZ7SvVt2
Paul Campbell pushed by paul@keymail.dev 39f7de7704153fce9ef171d333d8770255305cef parent 77227de
3 files changed, +60 −2
  • docs/superpowers/copy/2026-09-08-slice-1-strings.md +1 −1
  • internal/meet/handlers_meetings_test.go +59 −0
  • internal/meet/templates/welcome.html +0 −1

CI passed — run details

diff --git a/docs/superpowers/copy/2026-09-08-slice-1-strings.md b/docs/superpowers/copy/2026-09-08-slice-1-strings.md
index e451bd2..a944bf8 100644
--- a/docs/superpowers/copy/2026-09-08-slice-1-strings.md
+++ b/docs/superpowers/copy/2026-09-08-slice-1-strings.md
@@ -23,7 +23,7 @@ Reviewed and approved by Paul on 2026-09-08 (copy-review, 52 strings, two edited
| Signed in | `templates/welcome.html`, `title` block |
| You're signed in | `templates/welcome.html`, `content` block, page-header Title |
| You're signed in as {{.Email}}. This team's Meet has no meetings for you. If someone sent you a meeting link, open it again now. | `templates/welcome.html`, `content` block |
-| Sign out | `templates/welcome.html`, `content` block, submit button |
+| Sign out | now lives in the shell (`templates/layout.html`, account corner, shown whenever `.Viewer` is set) — no longer its own form on `templates/welcome.html` |
## Start a call (`/meetings/start`)
diff --git a/internal/meet/handlers_meetings_test.go b/internal/meet/handlers_meetings_test.go
new file mode 100644
index 0000000..2e15ae9
--- /dev/null
+++ b/internal/meet/handlers_meetings_test.go
@@ -0,0 +1,59 @@
+package meet
+
+import (
+ "testing"
+ "time"
+)
+
+// TestCallTitle is the review follow-up for "Start a call":
+// meettest's black-box test only ever checked the title for a
+// "Call, " prefix, so this pins the exact format over a fixed time
+// and a few zones, including one that rolls the date over.
+func TestCallTitle(t *testing.T) {
+ dublin, err := time.LoadLocation("Europe/Dublin")
+ if err != nil {
+ t.Fatal(err)
+ }
+ tokyo, err := time.LoadLocation("Asia/Tokyo")
+ if err != nil {
+ t.Fatal(err)
+ }
+ cases := []struct {
+ name string
+ now time.Time
+ zone *time.Location
+ want string
+ }{
+ {
+ name: "UTC",
+ now: time.Date(2026, 9, 10, 9, 5, 0, 0, time.UTC),
+ zone: time.UTC,
+ want: "Call, 10 Sep 09:05",
+ },
+ {
+ name: "single-digit day is not zero-padded",
+ now: time.Date(2026, 9, 3, 9, 5, 0, 0, time.UTC),
+ zone: time.UTC,
+ want: "Call, 3 Sep 09:05",
+ },
+ {
+ name: "a zone ahead of UTC, same day",
+ now: time.Date(2026, 9, 10, 9, 15, 0, 0, time.UTC),
+ zone: dublin, // Irish summer time is UTC+1 in September
+ want: "Call, 10 Sep 10:15",
+ },
+ {
+ name: "a zone far enough ahead to roll the date over",
+ now: time.Date(2026, 9, 10, 23, 30, 0, 0, time.UTC),
+ zone: tokyo, // UTC+9, no DST
+ want: "Call, 11 Sep 08:30",
+ },
+ }
+ for _, c := range cases {
+ t.Run(c.name, func(t *testing.T) {
+ if got := callTitle(c.now, c.zone); got != c.want {
+ t.Errorf("callTitle(%s, %s) = %q, want %q", c.now, c.zone, got, c.want)
+ }
+ })
+ }
+}
diff --git a/internal/meet/templates/welcome.html b/internal/meet/templates/welcome.html
index 2be5df2..4455ff6 100644
--- a/internal/meet/templates/welcome.html
+++ b/internal/meet/templates/welcome.html
@@ -2,5 +2,4 @@
{{define "content"}}
{{template "page-header" dict "Title" "You're signed in"}}
<p>You're signed in as {{.Email}}. This team's Meet has no meetings for you. If someone sent you a meeting link, open it again now.</p>
-<form method="post" action="/signout"><button type="submit" rst-btn="ghost">Sign out</button></form>
{{end}}