Insert attachment links on file addition, resolve provisional links on first save, preserve the editor selection, and highlight unsaved draft changes. Include regression tests and changelog updates.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Apply the shared filename filter before URL encoding, preserve escaped URLs and original link labels, and add regression coverage for accented and spaced filenames. Update the changelog.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the fragment marker used for unsupported filename characters with an underscore and cover upload metadata and static-file downloads.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Constrain the blog page layout, separate list and article scrolling, and remove content height limits and nested editor scrolling. Add six headless regression cases and update the changelog and layout documentation.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Client PostIt:
- JoinedRooms, SelectedRoom, messages et utilisateurs par salle
(FocusedMessages/FocusedUsers), OnRoomJoined alimente depuis la
valeur de retour du Join
- ChatPage : ComboBox de choix de la salle en focus, listes bindees
sur les vues de focus
Serveur:
- AddSignalR().AddJsonProtocol(IncludeFields=true) : ChatRoomInfo
n'expose que des champs publics, STJ ne les serialisait pas et le
client recevait des objets vides (JoinedRooms jamais alimente)
ChatUserNames n'etait jamais alimente (relique d'un SetUserName disparu),
ce qui faisait lever KeyNotFoundException a chaque connexion SignalR et
fermait immediatement la connexion cote client ("Déconnecté (The server
closed the connection...)" dans PostIt).
- IConnexionManager.OnConnected prend desormais le userName en parametre
- HubConnectionManager.OnConnected alimente ChatUserNames et ChatCxIds
- ChatHub.OnConnectedAsync passe le userName resolu depuis les claims
Inclut aussi les changements PostIt lies (bandeau de statut avec
commande d'action, handlers Reconnecting/Reconnected/Closed).
DeleteUserDirOrFile (and DeleteUserFile) read FileInfo.Length AFTER
fi.Delete(), and FileInfo.Length throws FileNotFoundException once
the file is gone. The controller's catch turned that into a 400, so
the user saw "le fichier n'existe pas sur le serveur" while the delete
had in fact succeeded. Capture the length before deleting.
Adds FileSystemApiTests.Delete_fs_removes_the_file_and_returns_200
(asserts 200 + file gone from disk). 8/8 FileSystemApiTests pass.
Co-Authored-By: Claude Code <noreply@anthropic.com>