fix: Allow empty eventHooks/ntfyEndpoints to reconcile from server

Remove the `length > 0` guards in fast-hydrate reconciliation that
prevented intentional empty-array clears from syncing across clients.
Server-side wipe protection (`__allowEmpty*` escape hatches) already
ensures empty arrays in the server are intentional.

Addresses PR #831 review feedback from CodeRabbit and Gemini.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
gsxdsm
2026-03-03 20:08:07 -08:00
parent 6f2394f17e
commit f5752b662f

View File

@@ -600,10 +600,7 @@ function RootLayoutContent() {
// so updating them won't cause a visible re-render flash. // so updating them won't cause a visible re-render flash.
const serverHooks = (finalSettings as GlobalSettings).eventHooks ?? []; const serverHooks = (finalSettings as GlobalSettings).eventHooks ?? [];
const currentHooks = useAppStore.getState().eventHooks; const currentHooks = useAppStore.getState().eventHooks;
if ( if (JSON.stringify(serverHooks) !== JSON.stringify(currentHooks)) {
JSON.stringify(serverHooks) !== JSON.stringify(currentHooks) &&
serverHooks.length > 0
) {
logger.info( logger.info(
`[FAST_HYDRATE] Reconciling eventHooks from server (server=${serverHooks.length}, store=${currentHooks.length})` `[FAST_HYDRATE] Reconciling eventHooks from server (server=${serverHooks.length}, store=${currentHooks.length})`
); );
@@ -613,10 +610,7 @@ function RootLayoutContent() {
// Reconcile ntfy endpoints from server (same rationale as eventHooks) // Reconcile ntfy endpoints from server (same rationale as eventHooks)
const serverEndpoints = (finalSettings as GlobalSettings).ntfyEndpoints ?? []; const serverEndpoints = (finalSettings as GlobalSettings).ntfyEndpoints ?? [];
const currentEndpoints = useAppStore.getState().ntfyEndpoints; const currentEndpoints = useAppStore.getState().ntfyEndpoints;
if ( if (JSON.stringify(serverEndpoints) !== JSON.stringify(currentEndpoints)) {
JSON.stringify(serverEndpoints) !== JSON.stringify(currentEndpoints) &&
serverEndpoints.length > 0
) {
logger.info( logger.info(
`[FAST_HYDRATE] Reconciling ntfyEndpoints from server (server=${serverEndpoints.length}, store=${currentEndpoints.length})` `[FAST_HYDRATE] Reconciling ntfyEndpoints from server (server=${serverEndpoints.length}, store=${currentEndpoints.length})`
); );