floccusaddon / floccusaddon/floccus

Git sync stops retrying after temporary "Failed to fetch" network error

Open
#2,348 1 comment 0 reactions 0 assignees View on GitHub
bug
Dominant language
JavaScript
Stars
8.5k
Forks
327
Avg merge
3d 14h
Merged PRs (30d)
2

Description

### Which version of floccus are you using?

5.10.2

### How many bookmarks do you have, roughly?

1000

### Are you using other means to sync bookmarks in parallel to floccus?

Yes. A separate script generates the bookmarks HTML file in the Git repository. Floccus is then used by roughly 20 users in read-only mode to sync that generated HTML file.

### Sync method

Git

### Which browser are you using? In case you are using the phone App, specify the Android or iOS version and device please.

Chrome 143.0.0.0

### Which version of Nextcloud Bookmarks are you using? (if relevant)

Not applicable

### Which version of Nextcloud? (if relevant)

Not applicable

### What kind of WebDAV server are you using? (if relevant)

Not applicable

### Describe the Bug

am using Floccus 5.10.2 with the Git backend against a private Gitea server.

The Gitea server is only reachable from a specific network or when connected to a VPN.

Periodic synchronization is enabled with a 5-minute interval.

If Floccus attempts to synchronize while the Git server is temporarily unreachable, the Git fetch fails with:

Failed to fetch (gitea.example.com)

After this happens, Floccus does not appear to retry synchronization anymore, even after network/VPN connectivity has been restored.

The profile can remain in this state for many hours until I manually trigger a synchronization.

After the failed attempt, the exported profile contains:

"errorCount": 1,
"syncing": false,
"scheduled": false,
"error": "Failed to fetch (gitea.example.com)",
"syncIntervalEnabled": true,
"isTransientError": false

The important part seems to be:

isTransientError: false

A temporarily unreachable Git server appears to be classified as a non-transient error, which seems to stop periodic synchronization retries.

The Git configuration itself works correctly as soon as the server is reachable.

### Expected Behavior

A temporary network failure such as Failed to fetch should be treated as a transient error.

Periodic synchronization should continue retrying, possibly using the normal retry/backoff mechanism.

For example:

Git server unreachable
→ Failed to fetch
→ transient error
→ retry later
→ VPN/network connectivity restored
→ synchronization succeeds automatically

The user should not need to manually trigger a synchronization after network connectivity is restored.

### To Reproduce

1. Configure a Floccus account using the **Git** sync method.
2. Use a Git/Gitea server that is only reachable from a private network or through a VPN.
3. Enable **periodic synchronization**.
4. Set the synchronization interval to **5 minutes**.
5. Verify that synchronization works correctly while the Git server is reachable.
6. Disconnect from the VPN/private network so that the Git server becomes unreachable.
7. Wait for the next periodic synchronization attempt.
8. Floccus fails with:

```
Failed to fetch
```
9. Restore VPN/private network connectivity.
10. Wait longer than the configured 5-minute synchronization interval.

Debug files:

[[floccus-5.10.2-2026-09-04-redacted.log](https://github.com/user-attachments/files/31835048/floccus-5.10.2-2026-09-04-redacted.log)](https://github.com/user-attachments/files/31835048/floccus-5.10.2-2026-09-04-redacted.log)

[[floccus.export-redacted.json](https://github.com/user-attachments/files/31835051/floccus.export-redacted.json)](https://github.com/user-attachments/files/31835051/floccus.export-redacted.json)

### Result

Floccus does not automatically attempt another synchronization after connectivity is restored.

The account remains in the failed state until synchronization is manually triggered.

In the exported account state after the failure, periodic synchronization is still enabled, but the network error is marked as non-transient:

```json
"syncIntervalEnabled": true,
"error": "Failed to fetch (gitea.example.com)",
"isTransientError": false
```

The Git repository is used as a read-only bookmark source for approximately 20 Floccus users. The `bookmarks.html` file itself is generated by a separate script.

### Debug log provided

- [x] I have provided a debug log file

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by tracing the Git backend's handling of the “Failed to fetch” error into periodic synchronization and the exported account state. Use the provided debug log and export JSON to compare the failed attempt with the expected retry state. Done means a temporarily unreachable Git server is treated as transient and periodic synchronization resumes after connectivity returns.

Written by the indexing model from the issue text.

Assessment

Tech stack
git, javascript
Domain
backend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.