You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 2057ccc
Browse filesBrowse the repository at this point in the historyBrowse files
Anonymous
committed
Fix a cache leak, a coarse watcher, and two claims that were not true
support/cache.rs never added a key to its LRU order — `touch` only moved
keys it already had — so MAX_PER_PROVIDER evicted nothing and the map grew
one entry per distinct query per provider for the life of the daemon. Five
tests pin the bound now, and the leak is proven: without the fix the new
bound test holds 48 entries where it should hold 16.
oxyd/watch.rs compared mtimes in whole seconds, so a same-length edit saved
twice inside one second looked like no change at all — a settings save that
silently does nothing. Milliseconds now, in both signatures.
provider/process.rs's `run_sync` and its `shell_command_sync` helper were
dead (every probe goes through the async `check`), and `run_sync` would
have deadlocked on a child writing more than a pipe buffer, since nothing
drained stdout until the child had exited. Removed.
Two comments claimed more than the code does: frecency's boost is added to
the finished score, after the tier clamp, so a row within 9000 of its
ceiling can cross into the next tier — reachable (a substring row at the
top fuzzy band outranks a prefix row at local 0) and the script adds it the
same way, so it is parity, not a port bug. Pins really are clamped, by
contrast. Comments and the porting doc now say exactly that.
Also: availability's recheck subtracted two wall-clock readings without
saturating (a backwards clock jump panics a debug build), and logfile's
rotation gained three tests — including the second rotation, which has to
replace .old rather than fail.
| guards | the file budget and the `model/` layering check in `tests/run.sh`; clippy in CI; `core/.loc-allow` names the three exempt data tables; `core/README.md` is the crate map |
51
51
| extensions | 40 (15 native, 30 script-backed, 27 scripts) — the marketplace was removed |
@@ -1003,7 +1003,7 @@ header, and is the kind of thing a clean rewrite quietly loses.
1003
1003
1004
1004
| rule | where it comes from | what breaks if a port ignores it |
1005
1005
|---|---|---|
1006
-
| A tier is never crossed: pins and frecency reorder *within* a tier only |`support/rank.rs`| a pinned substring outranks a name that starts with what you typed |
1006
+
| A **pin** is clamped to its own tier; **frecency** is added to the finished score and is *not* — a heavily-used row near its tier's ceiling can cross into the next band (the script adds it the same way, so this is parity, not a port bug) |`state/pins.rs`, `state/frecency.rs`, `support/rank.rs`| a pinned substring never outranks a name that starts with what you typed; a frecency-boosted one can, in principle, outrank even a `forced` row|
1007
1007
| The web row is dropped whenever anything real matched; a scoped `?` keeps it |`support/rank.rs` (`merge`) | the fallback row buries the answer, or disappears from `web:`|
1008
1008
| An empty answer over rows already on screen keeps those rows |`worker/state.rs` (`keep_stale`) | a timeout blanks the card (looks like "no matches") |
1009
1009
| A nonzero exit that printed rows is not a failure — only a bad exit with *no* rows is |`prov.fail`| a script that warns on stderr stops answering |
0 commit comments