This website requires JavaScript.
Explore
Help
Sign In
vincent
/
gerbeur
Watch
1
Star
0
Fork
0
You've already forked gerbeur
Code
Issues
Pull Requests
Actions
Packages
Projects
Releases
Wiki
Activity
Files
c7ce31c1bda91450899bf96c3c2cf4108b37dd57
gerbeur
/
api
/
db
/
migrations
History
khannurien
73b80af08e
All checks were successful
Build and Publish Docker Image / build-and-push (push)
Successful in 43s
Details
v3: the chat stops dropping things and holds up to long messages — a message sent while the socket was down vanished with the draft already cleared, and a rejected one fared no better since the client ignored any error that wasn't about a vote or a like. Sends now carry a nonce and sit dimmed in the list until their echo retires them; the server's refusal, an offline socket or ten seconds of silence turns one into a failed row with retry, edit and discard, and a failed row that turns up in the history after a reconnect is retired as having landed after all. Failed edits and deletes show in a bar above the composer. The live stream only goes to signed-in sockets, matching the history behind auth; sends, edits and deletes share a per-user token bucket (typing and read markers get their own, and are just dropped past it); and moderation re-reads the role from the database on every check rather than trusting the one a week-old socket captured. Unread now lives on the server as users.chat_read_at (migration 0014, existing users start caught up), so the count survives a reload and every tab and device clears together; opening onto unread history lands on a "new" divider rather than the bottom, and marks it read only once you've scrolled down to it. After a reconnect the chat re-reads everything from its oldest loaded message and takes that as the truth, edits and deletions included, or reloads the latest page if too much happened. History pages on (created_at, id) so a shared millisecond can't hide a message at a boundary. In the modal: a run of messages from one author shares a header with the time in the gutter on hover, mentions and replies to you get an accent edge, a pill counts what arrived while you were scrolled up, the draft survives closing and reloading, relative times tick, reply previews are flattened from markdown, owners can delete their own messages, ↑ in an empty composer edits your last one, and there's a proper loading and retry state instead of a flash of "No messages yet". Long messages: the composer and edit box grow only so far and then scroll, instead of squeezing the list away; the counter shows only near the limit and sits above the box, since .comment-reply-textarea's padding shorthand had quietly cancelled the room kept for it inside; TextEditor sizes itself before paint, so opening an edit animates to the right height instead of dipping and snapping; and the list follows the bottom through any change in its content's height while pinned there, so ending an edit returns you to the end. A mention notification opens the chat over the page you're on rather than the home page.
...
Co-Authored-By: Claude Opus 5.5 <
noreply@anthropic.com
>
2026-09-22 20:36:49 +00:00
..
0001_comment_likes.ts
v3: fixed docker image, updated locales
2026-06-21 14:38:17 +00:00
0002_dump_thumbnail.ts
v3: allow users to edit dump thumbnail, fixed some linter errors in the frontend
2026-06-21 15:41:40 +00:00
0003_dump_backlinks.ts
v3: add backlinks between dumps (via either dump url or dump target url mentioned through dump description and dump comments)
2026-06-21 20:30:03 +00:00
0004_user_roles.ts
v3: added a roles/permissions system, added user management tab on user profile
2026-06-28 06:21:23 +00:00
0005_drop_is_admin.ts
v3: added a roles/permissions system, added user management tab on user profile
2026-06-28 06:21:23 +00:00
0006_categories.ts
v3: added site-wide categories, added admin category management, various visual fixes
2026-06-28 16:23:44 +00:00
0007_password_reset_tokens.ts
v3: added customizable site emoji (logo), small visual tweaks
2026-06-29 15:12:25 +02:00
0008_chat_messages.ts
v3: added a chatbox
2026-06-29 20:25:10 +00:00
0009_chat_reply.ts
v3: chatbox improvements (typing indicators, answer to previous messages, backlog days separators, scroll to last message position, visual tweaks)
2026-06-30 12:27:03 +02:00
0010_youtube_embed_start.ts
v3: youtube embeds now honour the timestamp in the source url, with a migration backfilling existing dumps
2026-08-08 11:47:26 +00:00
0011_split_favicon_thumbnail.ts
v3: generated placeholder thumbnails for pages with no preview image, and a fix for hotlink-protected ones
2026-08-11 19:43:55 +00:00
0012_fix_favicon_reclassification.ts
v3: fix migration 0011 mistaking real og:images for favicons
2026-08-11 19:51:49 +00:00
0013_dump_url_canonical.ts
v3: reworked posting — three panels, drafts, duplicate detection, upload progress
2026-09-08 14:40:37 +00:00
0014_chat_read_state.ts
v3: the chat stops dropping things and holds up to long messages — a message sent while the socket was down vanished with the draft already cleared, and a rejected one fared no better since the client ignored any error that wasn't about a vote or a like. Sends now carry a nonce and sit dimmed in the list until their echo retires them; the server's refusal, an offline socket or ten seconds of silence turns one into a failed row with retry, edit and discard, and a failed row that turns up in the history after a reconnect is retired as having landed after all. Failed edits and deletes show in a bar above the composer. The live stream only goes to signed-in sockets, matching the history behind auth; sends, edits and deletes share a per-user token bucket (typing and read markers get their own, and are just dropped past it); and moderation re-reads the role from the database on every check rather than trusting the one a week-old socket captured. Unread now lives on the server as users.chat_read_at (migration 0014, existing users start caught up), so the count survives a reload and every tab and device clears together; opening onto unread history lands on a "new" divider rather than the bottom, and marks it read only once you've scrolled down to it. After a reconnect the chat re-reads everything from its oldest loaded message and takes that as the truth, edits and deletions included, or reloads the latest page if too much happened. History pages on (created_at, id) so a shared millisecond can't hide a message at a boundary. In the modal: a run of messages from one author shares a header with the time in the gutter on hover, mentions and replies to you get an accent edge, a pill counts what arrived while you were scrolled up, the draft survives closing and reloading, relative times tick, reply previews are flattened from markdown, owners can delete their own messages, ↑ in an empty composer edits your last one, and there's a proper loading and retry state instead of a flash of "No messages yet". Long messages: the composer and edit box grow only so far and then scroll, instead of squeezing the list away; the counter shows only near the limit and sits above the box, since .comment-reply-textarea's padding shorthand had quietly cancelled the room kept for it inside; TextEditor sizes itself before paint, so opening an edit animates to the right height instead of dipping and snapping; and the list follows the bottom through any change in its content's height while pinned there, so ending an edit returns you to the end. A mention notification opens the chat over the page you're on rather than the home page.
2026-09-22 20:36:49 +00:00