v3.6.2_sync
DonSeTch v3.6.2_sync
Added
- Ghost SERP cascade lane: when the plain-HTTP fan-out AND its retry
wave leave the merge thin (<3 working lanes or <15 hits), one browser
render through the shared ghost hook fetches Google's 2026 JS-shell
SERP (plain HTTP gets 0 result anchors; the browser render parses with
the existing layered parser). Joins the merge as the independent
googleindex family (5 keyless families instead of 4). Costs zero
when healthy (never fires), trust/quarantine shared with thegoogle
base, honestgoogle_ghostengine reports. Kill switches:
DONSEEK_NO_GHOST_LANES,DONSEEK_FORCE_GHOST_LANE(dev bench). - Persisted engine health: trust EWMAs + failure streaks live in
search-trust.json, so a benched engine stays benched across daemon
crashes instead of re-paying three failure lanes after every restart. - Corroboration on the model surface: compact search lines carry the
independent-index-family count per result (· 3 sources), the same
math the ranking consensus uses. - Ranking top-up on page truth: after enrichment swaps in real page
titles/descriptions for the top slice, the cross-encoder gets a
bounded ±0.1 nudge on close calls (DONSEEK_NO_TOPUP= A/B switch).
Bench A/B: head-10 corpus MRR 0.75 → 0.80 with the top-up.
Fixed
donsetch loginpost-login probe aborted the CLI process: the
probe and the CDP endpoint poll builtreqwest::blockingclients
inside the tokio runtime context, which is a documented reqwest
panic (and withpanic = "abort", a hard process abort). Reproduced
on master:probe_domainin a tokio test kills the process. Fixed
by running the probe on a dedicated thread and converting the
endpoint poll to an async client. Both paths regression-tested
under the runtime. Credit: mnaza (dondai44423#122).- Linux warm-connect (TFO) path shipped three real bugs in 3.6.x:
(1)sockaddr_ofreturned a pointer to a local inside its own match
arm: dangling-pointer UB, benign only by stack-layout luck (the
shipped path "worked" by accident of stack reuse);
(2)from_ne_bytes(...).to_be()reversed the IPv4 octets on every
little-endian target, so warm TFO connects dialed octet-reversed
addresses (203.0.113.7 → 7.113.0.203), always failed, and silently
fell back to a plain connect: warm TCP Fast Open never actually
worked on Linux in 3.6.x, and the fix makes warm connects genuinely
faster (fewer round trips on repeat-navigation origins);
(3) the rawlibc::connecton a TFO-requesting socket is a real
blocking syscall that ran inline on the executor thread: measured
against loopback by the author at ~135s vs ~220µs for a plain
connect, silently defeating the outer connect timeout. Fixed with
spawn_blocking+ honest fallback to a plain connect. Structs now
returned by value, execute-test covers the executor-freedom pattern
with a stated caveat. Credit: mnaza (dondai44423#123). - search --json lost titles/snippets for machine consumers (compact
contracts, v3.6.0): the model surface (structuredContent) stays
compact, but the client-onlycom.donsetch/search-debugnamespace now
carries the full per-result machine view (title/url/snippet/score/)
and the CLI--jsonre-materializes it intometafor pipelines.
The in-repo search bench had silently gone 0/30 because of the loss:
found live, restored, and the bench now measures real recall
(snippet accuracy 96.7% over the 30-question corpus, MRR 0.80). consensusdouble-counted same-engine ranks in the JSON meta: a
Yahoo URL at two ranks read as consensus 2 for one opinion. Now counts
index families (same math as ranking), matching its own field name.- Enrichment demoted slow-alive pages as dead links: transport
timeouts no longer halve a result's score; only refused/DNS-dead/
4xx/5xx answers do (slow ≠ dead). - Single-flight stampede: two identical searches at different
max_results each paid a full fan-out; the flight now keys on
query+intent since the leader publishes the full top-12 anyway. - Oversized/empty queries now fail fast with a clean message +
next_action on BOTH paths (BYOK providers included), instead of
burning a fan-out:donsetch search "<862-char query>"no longer
reaches exa/engine endpoints. - Search-health single write per search: trust snapshots now save
once per completed search (not per engine outcome).
Changed
- Google News snippets now carry
Publisher · dateinstead of a bare
RFC-822 date string (a date alone says nothing about the story). - search --json engines list dedups engine names (an engine surfacing
a URL at two ranks is one opinion, same as the markdown surface). - Bench harness:
bench/search_quality.pyresults cache note + the
search invocation verified against the current CLI arg surface.
Full Changelog: v3.2.0_sync...v3.6.2_sync