| fixed | high | src/app/api/subscribe/route.ts. Fixed in popwire 2026-09-19 after this environment caught it: the estate-wide sweep earlier the same day skipped popwire because its tree carried an unrelated uncommitted file, and never came back. Re-measured on a running build after the fix. | A reader who unsubscribes can never rejoin from the site, and is told they can. POST /api/subscribe upserts with ignoreDuplicates: true, so an existing row is left completely alone, and the confirmation send below is gated on !row.confirmed, so a confirmed-then-unsubscribed address falls through both. Measured 2026-09-19 against the running build on 3747 with lennart.sjoquist@pwdesk.invalid: the POST answered 200 {"ok":true}, the row's confirmed, confirm_token, created_at and unsubscribed_at (2026-09-06 20:11:00+00) were all byte for byte unchanged afterwards, and the server log gained 0 [email] lines. The rundown printed 'Check that inbox. One confirmation link, and nothing until you click it.' This was fixed estate-wide on 2026-09-19: agentwire, frontwire and standup all carry the fix with the same comment above it. THE SWEEP MISSED POPWIRE. |
| fixed | medium | src/lib/wire.config.ts, and the absent ~/Library/LaunchAgents/compound.popwire.digest.plist | The digest has no scheduled sender, so a reader who confirms is never mailed. src/lib/wire.config.ts states as fact that '~/Library/LaunchAgents/compound.popwire.digest.plist is installed and loaded, fires at 07:50 daily, and its log last wrote at 07:50 today'. Measured 2026-09-19: no plist with that name exists in ~/Library/LaunchAgents, no plist there references lanes/popwire, launchctl list carries compound.popwire.agent and compound.shared.popwire-bsky-engage and nothing else, and the lane's own .digest.log last wrote at 2026-09-15 07:50:04. The one surviving copy of the job is compound-ops/_retired/launchd-compound-labels-2026-09-10/studio.popwire.digest.plist.pre-compound, so it was taken out during the 2026-09-10 kynth-to-compound rename and never re-installed under the new label. The subscribe, confirm and unsubscribe chain all work; nothing sends. |
| fixed | low | src/lib/wire.ts | A failed database read renders production's rundown instead of erroring. src/lib/wire.ts falls back to the committed manifest src/data/posts.json on 'error || !data || !data.length', and that manifest holds 108 real production entries (measured 2026-09-19). A broken key, a missing table or an RLS change therefore produces a page full of stories, every one of which names a row that does not exist in the database being read. Nothing errors and nothing on the page says which source it came from. scripts/up.sh fails its bring-up closed on this rather than trusting the page. |
| fixed | low | src/lib/wire.config.ts | src/lib/wire.config.ts describes a shell this repo no longer has. Its header names src/components/WireMark.tsx and src/app/wire.css as two of the three files a wire supplies, and its newsletter block records that 'popwire/src/components/Shell.tsx renders this block'. None of those three files exists in the tree; the shells were purged on 2026-09-14 and every app is its own Next.js tree now. The file is still load-bearing (six modules import WIRE), so the stale half reads as current to anyone following it. |