Two gaps at the render level, same shape of fix. useEventActions assembles the three action tiers every detail surface renders, and the ⋯ menu it fills is author-only, so no signed-out pass over the app reaches it; OverflowMenu carries its own test for the open / act / dismiss behaviour, but the tier logic deciding which entries exist (close only while the request is open, delete while it is open or closed) has none. Mount the hook against a mock request with a matching and a non-matching viewer. Separately, the 230 frontend tests concentrate in lib/ and components/ui/, and the largest stateful pages carry zero coverage: app/submit/page.tsx (737 LOC, about 20 useState calls) and app/search/page.tsx, whose publish-gating and form-readiness logic is only exercised indirectly. Add render-level tests for the submit publish floor, in the shape app/events/[id]/edit/page.test.tsx already uses over the detection form.
Imported from planning/backlog.md.
Two gaps at the render level, same shape of fix.
useEventActionsassembles the three action tiers every detail surface renders, and the⋯menu it fills is author-only, so no signed-out pass over the app reaches it;OverflowMenucarries its own test for the open / act / dismiss behaviour, but the tier logic deciding which entries exist (close only while the request is open, delete while it is open or closed) has none. Mount the hook against a mock request with a matching and a non-matching viewer. Separately, the 230 frontend tests concentrate inlib/andcomponents/ui/, and the largest stateful pages carry zero coverage:app/submit/page.tsx(737 LOC, about 20useStatecalls) andapp/search/page.tsx, whose publish-gating and form-readiness logic is only exercised indirectly. Add render-level tests for the submit publish floor, in the shapeapp/events/[id]/edit/page.test.tsxalready uses over the detection form.Imported from planning/backlog.md.