6.4 KiB
6.4 KiB
Suspected app bugs
Places where the app source contradicts a story in USER_STORIES.md. The spec for each asserts
the story, so it fails until the bug is fixed. None of this has been confirmed by running the
suite.
Rooms & membership
- US-019 / US-020 — joined and created rooms never land under "Your Rooms".
Rooms.joinRoompublishes only kind-9021 andRoomForm.submitpublishes create/edit/join — none of them write the user's kind-10009 room list, which is whatderiveUserRoomsreads. Only the Favorite toggle and the delete path touch the list. - US-019 — leaving a room's member list is silent on success.
RoomDetailMenu.handleLoadingonly toasts whenwaitForError()returns a message. - US-021 — private-room card says "Join Room" where the story (and the restricted-room card)
say "Ask to Join" (
RoomChat.svelteisPrivate vs isRestricted branches). - US-028 — no Share action exists on any message.
shareEventis wired only into EventMenu ("Share to Chat"), BoardMenu and PinMenu; the cross-space Share picker is reachable only from native share intents or/share.
Spaces & access
- US-011 — the "Request Access" state is unreachable on a
public_join = falserelay. welshman'sRelayJoinWriter.setClaim("")always writes aclaimtag, so zooid answers "failed to validate invite code" instead of "no claim tag";attemptRelayAccessswallows that error when no claim was supplied, soSpaceJoinshows "Join Space" and toasts "Welcome to the space!" for a space that refused the join. - US-009 — "Browse Spaces" section renders as "More Spaces" whenever the user has joined spaces, so the story's two named sections never appear together.
DMs & composer
- US-035 — up-arrow in an empty DM composer edits the oldest editable message, not the newest.
Chat.sveltedoesmessages.toReversed().find(canEditEvent)butchat.messagesis already newest-first; RoomChat uses the same expression over an ascending list, so the DM copy inverted the ordering. - US-059 — a cancelled edit clobbers the room draft. RoomChat re-keys RoomCompose on
initialValueswhile passing the samedraftKeyduring editing, so the draft store is overwritten with the edited message's text. Chat.svelte avoids this by passingdraftKey={eventToEdit ? undefined : draftKey}. - US-056 — mentions render with no avatar (composer nodeview is a bare text span;
ContentMentionrenders@namewith no image). - US-056 —
~roomreferences render as plain text once sent.parseRoompre-emptsparseLinkandContent.sveltehas noisRoombranch, so the intended#RoomNamelink path inContentLinkUrlis unreachable. - US-057 — an unsupported file type is rejected silently.
Uploader.addFilereturns false before any upload on a mime mismatch, soonUploadError(the only toast in the path) never runs.
Delivery & deletion
- US-072 — the "Deleted" pill never replaces reactions/menus. In Article/Comment/Thread/Poll/
Goal/CalendarEvent Actions,
ThunkStatusOrDeletedis a sibling ofReactionSummary/EventActionsinstead of wrapping them;ClassifiedActionsis the only one wired as intended. - US-072 — a deleted event vanishes from lists and threads instead of staying with the pill.
Repositoryemits the target inremovedandmakeFeed/deriveEventsByIdprune on it; onlyderiveEvent(includeDeleted: true) retains it, so the pill is only reachable on detail pages. - US-071 — the publish-status popover's timeout reason reads "timed out." not "request timed
out".
publishOnealways setsdetail: "timed out", makingThunkStatusDetail's fallback branch unreachable.
People & profiles
- US-079 — profile notes show an absolute date+clock (
NoteCardusesformatTimestamp) where the story asks for a relative timestamp (formatTimestampRelativeexists and is used for "Last active"). - US-079 — a note published live never appears in another user's open profile view without a
reload.
syncSpace's CONTENT_KINDS contains no NOTE kind andmakeFeed's forward scroller stops on its first tick. - US-008 — deleting your profile can delete the blanked kind-0 it just published. The kind-5
requests carry an
atag (0:<pubkey>) newer than the blanked profile; zooid has no NIP-62 handling, and in a fresh session no kind-5 may be sent at all.
Settings
- US-091 — the zero/negative zap-amount error toast is unreachable. The inputs carry
min="1", so native constraint validation blocks submit beforeonZapAmountsSubmitruns. - US-084 — blocked relays still appear in relay suggestions.
RelayAddfilters on matchRelay/already-selected/isIPAddress only;BlockedRelayListsis consumed solely bypolicies.tsto refuse sockets.
Content rendering
- US-067 — a bare
lnbc1…invoice renders as plain prose.parseInvoiceonly matches behind alightning:scheme andparseLinkskips it too, so the copyable chip appears only for the prefixed form. - US-046 — the calendar "Today" divider keys off
created_atinstead of the event's start tag (isFuture = todayDateDisplay === newDateDisplay || event.created_at > now()), so it lands on the wrong item for past-published events. (Not covered by the suite; the scroll effect uses the correctgetStart.)
Hosting & admin
- US-102 — payment history is not sorted client-side. The hosting settings page renders
listTenantInvoicesorder verbatim, so "most recent first" depends on the backend. - US-041 — the article list card lacks the "Posted in #room" badge the story names for both
surfaces;
ArticleItemnever passesshowRoomand renders the room inline in the byline instead. - US-092 — possible over-broad admin gate (inferred, unverified).
deriveUserIsSpaceAdminissupportedMethods().length > 0, and zooid's migration writesmember_methods = ["listclaims", "createclaim"]— if applied, every member reports as an admin.
Known coverage gaps (not bugs)
- US-070 bullet 3 (article/comment retry succeeds and clears the indicator) is uncoverable:
no UI path makes an article publish fail then succeed in one session without discarding
$thunks.history. - US-065's "briefly shows a loading state" is inherently racy (sync may already hold the quoted event); the assertion stands as the story requires but may flake.