From 69793d29a02be44d31f0ad46557908ab25d90b40 Mon Sep 17 00:00:00 2001 From: Anders Robstad Date: Tue, 29 Sep 2026 14:06:31 +0200 Subject: [PATCH 1/3] Keep History's errors when the tab refreshes, and bump rustls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Opening History runs a refresh, and a refresh whose list succeeded set `error = null` — wiping a failed body load or clear before the tab that reports it could show it. Two e2e tests have failed on main since #99 for this reason. A successful list now clears only an error a failed list set. rustls 0.23.43 -> 0.23.45 for RUSTSEC-2026-0285 (TLS 1.3 handshake messages accepted across encryption level boundaries), which fails the dependency audit on main. --- .changeset/history-keeps-its-errors.md | 14 ++++++++++++++ src-tauri/Cargo.lock | 6 +++--- src/lib/history.svelte.ts | 26 ++++++++++++++++++++++---- 3 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 .changeset/history-keeps-its-errors.md diff --git a/.changeset/history-keeps-its-errors.md b/.changeset/history-keeps-its-errors.md new file mode 100644 index 0000000..a43f924 --- /dev/null +++ b/.changeset/history-keeps-its-errors.md @@ -0,0 +1,14 @@ +--- +"fiber": patch +--- + +A response body that fails to load, or a history clear that fails, is reported +in the History tab again instead of vanishing the moment the tab opens. + +History now catches up with what the MCP server records whenever the tab is +opened, and a catch-up that succeeded cleared every error on the way — including +the one the tab was being opened to show. It now clears only an earlier failure +to list history, which is the one a successful list resolves. + +Also moves rustls to 0.23.45 for RUSTSEC-2026-0285, in which TLS 1.3 handshake +messages were accepted across encryption level boundaries. diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 3746ae0..eb6487e 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -3890,9 +3890,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.43" +version = "0.23.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" +checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" dependencies = [ "aws-lc-rs", "once_cell", @@ -5057,7 +5057,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.3", + "getrandom 0.3.4", "once_cell", "rustix", "windows-sys 0.61.2", diff --git a/src/lib/history.svelte.ts b/src/lib/history.svelte.ts index 26e41c3..48a2609 100644 --- a/src/lib/history.svelte.ts +++ b/src/lib/history.svelte.ts @@ -97,13 +97,31 @@ class History { * clicked went nowhere. */ viewingId = $state(null); + /** + * The message of the last list that failed, if `error` still shows it. + * + * A list that succeeds resolves that error and no other. `refresh` runs + * every time the History tab opens, and clearing `error` outright there + * wiped a failed body load or clear the moment the tab that reports it was + * opened. + */ + #listError: string | null = null; + + #listed(): void { + if (this.error !== null && this.error === this.#listError) this.error = null; + this.#listError = null; + } + + #listFailed(error: unknown): void { + this.error = this.#listError = String(error); + } async load(): Promise { try { this.entries = (await historyList()).map(fromRecord); - this.error = null; + this.#listed(); } catch (error) { - this.error = String(error); + this.#listFailed(error); } } @@ -123,9 +141,9 @@ class History { let records: HistoryRecord[]; try { records = await historyList(); - this.error = null; + this.#listed(); } catch (error) { - this.error = String(error); + this.#listFailed(error); return; } const known = new Set(this.entries.map((entry) => entry.id)); From 399fcad91fea6b9ff4615af70a3c3b2d8856f61c Mon Sep 17 00:00:00 2001 From: Anders Robstad Date: Tue, 29 Sep 2026 14:12:15 +0200 Subject: [PATCH 2/3] Bump fast-uri for GHSA-qw65-cvwx-89v3 and GHSA-58mr-gqgx-xq4g pnpm audit --prod --audit-level high fails on fast-uri 3.1.6, pulled in by ajv. 3.1.8 is within ajv's ^3.0.1 range; nothing else in the lockfile moves. --- .changeset/history-keeps-its-errors.md | 4 +++- pnpm-lock.yaml | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.changeset/history-keeps-its-errors.md b/.changeset/history-keeps-its-errors.md index a43f924..f15daa6 100644 --- a/.changeset/history-keeps-its-errors.md +++ b/.changeset/history-keeps-its-errors.md @@ -11,4 +11,6 @@ the one the tab was being opened to show. It now clears only an earlier failure to list history, which is the one a successful list resolves. Also moves rustls to 0.23.45 for RUSTSEC-2026-0285, in which TLS 1.3 handshake -messages were accepted across encryption level boundaries. +messages were accepted across encryption level boundaries, and fast-uri (used by +the editor's schema linting) to 3.1.8 for two advisories on how it parses a +URI's authority. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fb53f10..14eb72d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -891,8 +891,8 @@ packages: fast-string-width@3.0.2: resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} - fast-uri@3.1.6: - resolution: {integrity: sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==} + fast-uri@3.1.8: + resolution: {integrity: sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==} fast-wrap-ansi@0.2.2: resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} @@ -2045,7 +2045,7 @@ snapshots: ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.6 + fast-uri: 3.1.8 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -2139,7 +2139,7 @@ snapshots: dependencies: fast-string-truncated-width: 3.0.3 - fast-uri@3.1.6: {} + fast-uri@3.1.8: {} fast-wrap-ansi@0.2.2: dependencies: From 1be529734c0601660fb287d89f44a682f133fc72 Mon Sep 17 00:00:00 2001 From: Anders Robstad Date: Tue, 29 Sep 2026 14:23:17 +0200 Subject: [PATCH 3/3] Don't let the next collection's cog also dismiss the settings drawer A click on another collection's cog is outside the open drawer, so it both closed the drawer and started opening the next one; when the close landed last, no drawer stayed open. It made 'opening another collection's settings flushes the one being left' fail about one run in ten, on main too. The drawer now ignores outside interactions on a cog, which switches collections itself. --- .changeset/history-keeps-its-errors.md | 5 +++++ src/lib/components/SectionSettings.svelte | 12 ++++++++++++ src/lib/components/Sidebar.svelte | 1 + 3 files changed, 18 insertions(+) diff --git a/.changeset/history-keeps-its-errors.md b/.changeset/history-keeps-its-errors.md index f15daa6..e846094 100644 --- a/.changeset/history-keeps-its-errors.md +++ b/.changeset/history-keeps-its-errors.md @@ -14,3 +14,8 @@ Also moves rustls to 0.23.45 for RUSTSEC-2026-0285, in which TLS 1.3 handshake messages were accepted across encryption level boundaries, and fast-uri (used by the editor's schema linting) to 3.1.8 for two advisories on how it parses a URI's authority. + +Clicking another collection's settings cog while a settings drawer is open now +reliably switches to that collection. The click also counted as dismissing the +open drawer, and when the dismissal landed last the drawer closed and stayed +closed. diff --git a/src/lib/components/SectionSettings.svelte b/src/lib/components/SectionSettings.svelte index ec39cdc..ef397ad 100644 --- a/src/lib/components/SectionSettings.svelte +++ b/src/lib/components/SectionSettings.svelte @@ -304,8 +304,20 @@ and usable — you are configuring a collection you can still see. --> + { + if (event.target instanceof Element && event.target.closest('[data-opens-settings]')) { + event.preventDefault(); + } + }} >
Section settings diff --git a/src/lib/components/Sidebar.svelte b/src/lib/components/Sidebar.svelte index fd2d2e7..1051de1 100644 --- a/src/lib/components/Sidebar.svelte +++ b/src/lib/components/Sidebar.svelte @@ -1110,6 +1110,7 @@ {...props} type="button" aria-label="Settings for {section.name}" + data-opens-settings onclick={(event) => { event.stopPropagation(); onOpenSettings(section);