fix: secret ordering, dead-end opens, and stale response metrics - #10
Open
starvy wants to merge 3 commits into
Open
fix: secret ordering, dead-end opens, and stale response metrics#10starvy wants to merge 3 commits into
starvy wants to merge 3 commits into
Conversation
An off-list destination used to resolve {{secret:…}} first, so an
unreachable keychain failed the whole send over a credential the
policy would never let it carry (and every refused send cost a
secret-backend read). The egress decision now comes first: refused
hosts skip credential resolution entirely and report what a granted
send would carry; granting the host re-resolves for real. The Auth
tab warning now shares the same predicate so the two can't drift.
Opening a recent whose folder is gone now prunes it from the recents (the toast says so) instead of leaving a permanently broken row, and the Welcome list marks still-missing entries. A path picker that cannot open at all — no xdg-desktop-portal on Linux — used to be a silent no-op; it now toasts the cause instead of looking like a dead button.
History recorded latency and size but the rows only showed status and age. The in-flight elapsed also only rendered before the first byte, which read as a frozen counter that jumped to the final total; it now counts through the whole flight (quantized — full precision would strobe at repaint rate) and the settled total stays engine-reported.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three fixes that came out of a hands-on UI audit, each verified end-to-end in the running app on Linux (real sends against api.github.com and a local streaming server).
1. Secrets resolve only after the host allow-list decision —
fix(engine)Sending to an off-list host with inherited
{{secret:…}}auth used to resolve the secret first: an unreachable keychain failed the whole send over a credential the policy would never let it carry, and every refused send cost a secret-backend read. The egress decision now comes first — refused destinations skip resolution entirely and go straight to the policy dialog; Send once / Allow host re-enter with the grant and only then resolve. The Auth-tab mismatch warning now uses the samepolicy::egress_allowedpredicate as the send path, so the two can't drift.New engine tests prove the ordering with a counting resolver double: off-list host → zero backend calls, no
Authorizationheader, one strippableOffHostEgress; granted host → exactly one read, and a broken backend still errors as before.2. Failed workspace opens no longer dead-end —
fix(ui)missingin the Welcome list; opening it prunes it from the persisted recents and the toast says so. OnlyNotFound+ path-actually-gone prunes — permission errors and malformed manifests keep the entry.3. History rows carry their numbers; elapsed ticks live —
feat(ui)200 · 10.21 s · 170 B) next to the age.1.9 s · 32 B received→5.0 s · 89 B received), quantized so the low digits don't strobe at repaint rate; the settled total remains the engine-reported elapsed.Gates
cargo test --workspace(413 passed) ·cargo clippy --workspace --all-targets -- --deny warnings·cargo fmt --all --checkReview notes
flex_shrink_0, so long ad-hoc URL names truncate hard in a narrow sidebar (saved-request names are fine). Shout if you'd rather the metadata yield instead.interchange.rs,multipart.rs); the newpicked_folderhelper is liftable — left as a follow-up to keep this reviewable.assets/ui-audit-fixesbranch; delete it whenever this PR is closed out.