Ship floating launcher, automatic discovery and bounded media search improvements

This commit is contained in:
karl committed 2026-10-14 11:44:15 +02:00
1 parent 01279a6b25
commit 521966a2ac
43 files changed
+3165 -267

No files matched your search

+26
View File
@@ -0,0 +1,26 @@
# Local application search
Type an application's name in the desktop search window and open its application
result. Matching ignores case and spaces; `VS Code` and `vscode` also match
Visual Studio Code. Application search uses a small local catalog and works
without downloading an embedding model.
Windows reads user/common Start Menu shortcuts. Registered Microsoft Store
applications are added in the background using the operating system's
`Get-StartApps` inventory, with a five-second timeout. The initial window and
searches do not wait for that inventory. Linux reads visible XDG `.desktop`
applications and launches them using GIO (`gio launch`); a missing GIO launcher
produces an explicit error. macOS discovery covers the standard Applications
directories; actual macOS execution remains untested.
The catalog is refreshed when searchi starts. Restart it after installing an
application if it has not appeared. Launch commands accept only opaque IDs
already in this local catalog. Executable paths and command lines are never
accepted from the webview; Linux desktop-entry parsing is delegated to GIO.
The Windows development machine's actual read-only inventory test passed:
92 Start Menu shortcuts and 25 registered applications. All four focused module
tests passed, including VS Code aliases, hidden desktop entries, rejected
registered-ID command text, and results that do not disclose launch paths.
This inventory check launches nothing; native application launch/keyboard
interaction must be verified separately in the final desktop check.
+5 -3
View File
@@ -48,13 +48,15 @@ copy into unsupported performance or production-readiness claims.
## Window materials
Appearance settings offer Solid, Glass and Frosted glass, with a bounded
70–100% tint-strength control (90% by default). Frosted glass layers an extra
35% milk tint beneath that control; Glass has the lighter direct tint. Both
40–100% background-opacity control (90% by default). Both materials use the selected opacity directly, without a second milk-tint
layer. The slider previews changes while dragging. Both
currently share Windows native acrylic blur. Native compositor effects expose and soften
the actual desktop; CSS transparency alone cannot blur other windows. If the
platform cannot apply its native effect, use an honest opaque fallback. Forced
colors always make the shell opaque while retaining the saved preference.
Search input, results, previews and settings keep their opaque reading surfaces;
The search input and shell labels use a local 60% reading tint, so the lowest
shell setting still yields at least 76% theme tint under text. Results, previews
and settings keep opaque reading surfaces;
never lower text opacity or introduce decorative wallpaper simulations.
Native acrylic currently requires Windows 11 22H2 or later with a compatible
compositor and system transparency settings. macOS, Linux and older Windows
+53
View File
@@ -0,0 +1,53 @@
# Floating search launcher
The desktop opens as a centered search bar rather than a conventional document
window. The empty launcher requests 720 × 110 logical pixels. Typing or opening
settings, filters, local-model details or folder controls expands it to
1080 × 700. Native sizing stays inside the current monitor's work area, including
its scale factor and taskbar. A small display receives a smaller window.
The window is frameless, above ordinary windows, and omitted from the taskbar.
Its header can be dragged; the dedicated hide button, Escape and the existing
tray/global shortcut retain the resident workflow. The rounded shell uses the
configured native glass/frosted material where supported and the existing
opaque/high-contrast fallback otherwise. No CSS blur is presented as native
desktop transparency. Brief content transitions respect reduced motion and do
not defer search requests.
Installed applications have a separate list above file matches and a simple
launch preview. Arrow keys move across applications and files while preserving
typing focus; Enter launches the selected application or opens the selected
file. Application identities are opaque backend identifiers, not pretend file
paths or invented passages. Filters keep application suggestions out of scoped
file searches. Application requests are local lexical lookups and do not wait
for semantic inference.
Input immediately invalidates the previous application selection. A launch
requires the current query and the settled request revision, so a late response
or an immediate Enter after editing cannot launch an older suggestion. File
search timing remains separately measured; the result summary includes visible
application counts, and application-only matches suppress the empty-file state.
Automatic local-drive indexing is enabled by default. Its settings checkbox can
disable future automatic work while retaining searchable indexed content;
additional folder controls live inside settings. Existing active work is not
claimed to be instantly cancelled by the checkbox. Model progress and retry
remain available through local-search setup details.
## Validation recorded so far
- Frontend TypeScript/Vite build passed on desktop version 0.1.8.
- All 62 existing frontend tests passed; Prettier checks passed.
- Final Windows desktop checks passed 56 tests (one optional actual-catalog
check ignored); strict all-target Clippy passed. Linux passed 56 desktop tests.
- The background opacity control spans 40–100%, previews while dragging, and
applies directly to both glass materials. Local 60% reading tints protect
input, labels and controls; result and preview panes remain opaque.
- Twelve CPU browser composition checks passed across both themes, both glass
materials and 40/90/100% opacity. This verifies actual built CSS alpha,
independently of native compositor validation.
These checks alone do not establish native pixels, dragging, tray interaction,
rounded compositor corners or application launching. Actual final-build UI
capture and keyboard interaction belong in
[the native validation report](NATIVE-FINAL-VALIDATION.md).
+8 -4
View File
@@ -1,9 +1,13 @@
# Linux desktop release build evidence
Current download: [Ubuntu 24.04 x64 desktop 0.1.4](https://tea.karlcom.de/karl/searchi/releases/download/v0.1.4/searchi_0.1.4_amd64.deb).
See [current package checks](LINUX-0.1.4.md) and
[checksums](https://tea.karlcom.de/karl/searchi/releases/download/v0.1.4/LINUX-DESKTOP-SHA256SUMS-0.1.4.txt).
The evidence below records the preceding 0.1.3 preparation.
Current download: [Ubuntu 24.04 x64 desktop 0.1.8](https://tea.karlcom.de/karl/searchi/releases/download/v0.1.8/searchi_0.1.8_amd64.deb).
See [final package checks](NATIVE-FINAL-VALIDATION.md) and
[checksum](https://tea.karlcom.de/karl/searchi/releases/download/v0.1.8/searchi_0.1.8_amd64.deb.sha256).
The current package includes the floating launcher, automatic local discovery,
application search and hybrid relevance cleanup. Native compilation, 56 desktop
tests, runtime provenance, loader checks and packaged CPU startup passed on
Ubuntu 24.04 WSL. Native graphical interaction and other distributions remain
unverified. The historical evidence below records preceding releases.
Source: `a6bf091`, desktop 0.1.3, Ubuntu 24.04 WSL x86-64, kernel
6.18.54.1-microsoft-standard-WSL2, two virtual CPU cores (AMD Ryzen 7 7800X3D).
+136
View File
@@ -0,0 +1,136 @@
# Bounded media relevance improvement, 2026-10-14
This pass keeps Google EmbeddingGemma 2 and the existing shared engine. It
corrects one practical source of irrelevant results without another model,
reindexing, an absolute similarity cutoff, or a new ranking framework.
## Hybrid shortlist correction after the real screenshot review
The real screenshot exposed an additional defect: reciprocal-rank fusion gave
every semantic nearest neighbour a result rank even when its raw similarity
was far below a strong match. A mountain photo consequently appeared beneath
the supplier agreement for a cancellation query.
Hybrid search now keeps the strongest semantic cluster when the filtered,
file-deduplicated score list has one clearly separated tail: choose the largest
adjacent raw cosine gap, and prune after it only when that gap is **greater than
0.07**. Equal largest gaps within f32 rounding retain the complete list. The
0.07 gap is rounded upward from the maximum 0.0650497 observed among eight
previously frozen calibration absence requests; it is a relative decluttering
rule, **not an absolute cosine threshold or a confidence percentage**.
The [frozen policy](../tools/relevance-eval/policies/hybrid-tail-v1.json) records
the exact scope and calibration report hash.
All independent lexical matches, exact filename/identifier priority and the
best semantic candidate survive. Explicit raw semantic search is unchanged.
Filters and source checks still run before candidate limits; no index or model
is regenerated. Debug traces report `hybrid.semantic_shortlist` with before,
after and pruned counts.
Actual current Google CPU query results on the verified README fixture:
| Query | Raw semantic scores | Hybrid result |
| --- | --- | --- |
| `cancel the supplier partnership` | Agreement 0.820912; onboarding 0.660648; procurement 0.626666; mountain photo 0.528253 | Agreement retained; unrelated photos removed; 7 → 1 results |
| `mountains reflected in calm water` | Lake 0.753141; pier 0.684482; travel document 0.537812 | Two image results retained; unrelated documents removed |
The genuine query-role CPU integration passed in 7.61 seconds, covering raw API
preservation, actual PDF/photo retrieval, exact filename priority, PDF and size
filters, and limit one. Its ignored log `.searchi/qa/hybrid-tail-google-cpu.log`
has SHA-256 `bc920ba56bc5b4f89bb5ee8831420bf5c14964d2da5decb0b392482e12309d4e`.
The raw pre-change requests are preserved in
`.searchi/qa/readme-raw-relevance.json`, SHA-256
`4a017d8fee0d3762a806628e38a848ca9ca9cb052e92c1892f639efda3fde62d`.
A replay of existing genuine raw-score reports retained every previously
retrieved relevant top-five file in calibration, the previously evaluated
held-out report and the 61 ranked media-reference rows. Mean semantic
candidate counts changed from 11.6 to 5.0, 11.6 to 4.2 and 14.75 to 3.59,
respectively. This is score replay on known diagnostics, not newly independent
inference or a production relevance guarantee. The historical media reference
contains its documented audio preprocessing failure; no failed encoding is
silently credited as a positive. Forty text/code positive rows retain their
top semantic candidate by construction; **all 20 absence rows still retain a
neighbour**. The policy does not solve absence classification.
Three focused shortlist unit tests passed (weak-but-correct 0.6766, multiple
strong matches, flat/uniform/tied lists, one/two candidates and independent exact
lexical preservation). The full service library passed 45 tests with its two
explicitly provisioned/benchmark tests ignored; strict all-target Clippy passed.
## What changed
Explicit photo/image requests use image evidence; explicit video/film requests
use video-frame evidence. Spoken-topic requests retain speech-first retrieval
and raw-audio fallback while recognition is unavailable. Explicit music/audio
requests use actual audio evidence. If the requested channel is empty, semantic
search now returns empty instead of selecting an unrelated photo/document.
The independent exact filename/keyword lane remains available in hybrid search.
Ordinary subject queries stay general. Document/code/algorithm cues veto these
small intent hints. A mixed `photo or video` request stays general rather than
silently losing videos. `sound financial advice` is not an audio request.
The hints use word boundaries and English/German cues, not a claim of natural
language understanding. Debug traces report `explicit_source_channel` and
`requested_channel_empty`.
## Actual Google CPU evidence
The isolated integration fixture contains the existing licensed, SHA-locked
cat photo `fixtures/media/assets/image01.jpg`, copied into a temporary owned
index. It uses the normal native Google runtime with `SEARCHI_FORCE_CPU=1`,
one inference thread, actual image encoding, persisted ANN retrieval and the
query-role worker. No fabricated vectors or labels enter inference.
| Check | Unrestricted real-model channel | Corrected automatic routing |
| --- | --- | --- |
| Six requests for absent audio/music/speech/video channels, EN/DE | 6/6 returned the unrelated photo | 0/6 returned a semantic result |
| Three photo/general cat requests, EN/DE | Actual image indexed | 3/3 retained the correct photo |
| Exact `cat.jpg` | Independent lexical lane | Exact filename retained |
`explicit_media_requests_do_not_fall_back_to_unrelated_channels` passed in
82.63 seconds including indexing, model loading and all assertions. This is
functional correctness evidence, not a search-latency benchmark or a large
collection quality score. Raw log: ignored `.searchi/qa/media-final-routing.log`,
SHA-256 `14d452192315fb1ddfd0b0df1448ffc475876af57a767546b36f68f17771b83d`.
The existing actual Google code-versus-licensed-audio regression also passed
in 81.72 seconds: an explicit code query retained its indexed implementation
while real audio remained an eligible independent channel. Its ignored log
`.searchi/qa/media-final-code-veto.log` has SHA-256
`04d8f42ed8e872f22607c2fe4fb45e0d5149d4b42539b3346abd18ebb224e137`.
All three focused routing unit tests passed after the mixed-channel/algorithm/
sound-adjective fixes, including the English/German ambiguity cases.
Reproduce with the verified Google/model and FFmpeg environment described in
SKILLS.md:
```powershell
$env:SEARCHI_FORCE_CPU = '1'
cargo test -p searchi-service --test routing_google_cpu explicit_media_requests_do_not_fall_back --locked -- --ignored --nocapture --test-threads=1
cargo test -p searchi-service --lib routing::tests --locked
```
## Limits and music decision
These changes reject wrong channels and trim clearly separated weak tails;
they are not calibrated detection that a particular
subject is absent within a populated channel. An indexed audio collection can
still return an unrelated nearest performance for an absent musical instrument;
photos/videos have the same limitation within their own channel. Speech without
recognized passages retains raw audio fallback. Do not advertise a confidence
percentage or perfect no-answer detection.
Existing exact artist/title metadata filters remain the reliable identity path.
The previous independently frozen music comparison improved 8/14 to 11/14 first
hits using literal embedded tag fields, but regressed one positive, fell to 5/14
with misleading tags, and failed all four no-answer cases. That unconditional
field-max policy remains unintegrated: it does not justify shipping a universal
music-recognition improvement. See MUSIC-METADATA.md and
fixtures/music-validation-v1/README.md. This pass adds no hosted music lookup,
fingerprinting service, generated labels, or extra model downloads.
Existing image evidence and video scene sampling are retained. Spoken timing
and recovery are recorded separately in SPEECH-FINAL-QUALITY.md. Media remains
usable with explicit limits; this bounded pass does not invent a new overall
quality rating or extend the agreed release scope.
+320
View File
@@ -0,0 +1,320 @@
# Final native interaction and reinstall validation
Renewed bounded goal, 2026-10-14: verify Windows/Linux interaction and the
Windows uninstall/reinstall path, alongside a modest media relevance improvement.
No intermediate release or push is permitted. This report distinguishes actual
native observations from process, source and automated frontend checks.
Current delivery is 0.1.8. See the final startup-writer correction and corrected
Windows/Linux package sections below for authoritative hashes and checks.
Earlier local candidates are retained as historical prechecks and were not
published. Final native capture/input remains unavailable; process startup,
accessibility observation and software screenshots do not replace that gate.
## Native access inventory
The approved Computer Use `@oai/sky` client initialized successfully. Unlike the
previous handoff, native Windows screenshot and accessibility capture are now
available. `list_windows` initially omitted the hidden resident application.
The existing CPU-only local launcher brought its existing window forward;
the returned native window was then captured through the approved API.
Observed installed Windows 0.1.7: process 29000 responding; native searchi
window, dark theme, Add folder, filters, settings, query field and readable
empty-state interface. Its accessibility tree reports zero files and
“Google model ready. Index a folder to search by meaning.” CPU status is visible.
This is actual native observation, not a search or keyboard interaction pass.
The capture also showed an unrelated foreground Windows Security firewall
permission dialog for Electron. No input was attempted while it blocked the
workspace. The Computer Use guidance explicitly says: “Do not act on security
or privacy permission requests.” The human must dismiss that unrelated prompt
before dependent native interaction continues. The agent did not change any
security setting or bypass the prompt.
Ubuntu 24.04 WSL starts successfully and advertises `DISPLAY=:0` and
`WAYLAND_DISPLAY=wayland-0`. Both WSLg X11 and Wayland sockets exist. Existing
relocated Linux desktop validation binaries remain available. The current
approved UI API only targets Windows applications; no Linux input/capture API
has been exposed. WSLg availability alone does not prove native Linux input.
## Windows reinstall test procedure
User authorized uninstalling/reinstalling the Windows dev installation. Root
agent coordinates execution after backing up the existing user state.
1. Preserve external settings/index/model cache and local CPU wrapper/startup
shortcuts; save installer and installed file hashes.
2. Stop only searchi and its owned workers; wait for process exit.
3. Run installed `C:/Users/karl/Applications/searchi/uninstall.exe` silently.
Record exit code and verify executable/resources and installer registration
are removed. Record any remaining owned directory or shortcut separately.
4. Confirm external user settings/index/model cache survive unchanged.
5. Install the verified normal hardware-detecting package to the same location.
Record exit code, registration, installed executable/runtime hashes and
bundled extraction/media/speech resource verification.
6. Start with an isolated empty test profile under CPU-only VM flags to exercise
fresh settings/index creation. Existing downloaded assets may be reused;
this must not be described as a fresh operating-system or first-download test.
7. Restore the user profile and CPU launcher/startup shortcuts. Leave the final
installed application running and accessible.
## Executed uninstall/reinstall checks
Root executed the existing verified Windows 0.1.7 uninstall and reinstall.
Both processes returned exit code zero. The installed main executable was absent
after uninstall; external settings/index/model assets survived. Reinstall restored
the executable with its expected hash. Raw local records are
`.searchi/qa/final-uninstall.json` and `.searchi/qa/final-reinstall.json`;
the preserved state is in `.searchi/qa/windows-final-reinstall-backup`.
An actual new empty profile at `.searchi/qa/fresh-reinstall-profile` was launched
without seeded settings or a copied model cache, using forced CPU inference and
software WebView flags. The approved native API returned its searchi window.
Initial monitor capture failed with `CreateForMonitor` error `0x80070057`; fresh
window selection and the single documented retry succeeded. The native
accessibility observation showed zero files and “Preparing Google semantic
search on your device…” with CPU status. This establishes installed empty-profile
startup, not completed model downloading or search readiness. No user interaction
was attempted while the unrelated security permission prompt remained pending.
This is uninstall/reinstall on the existing dev OS, not a newly installed Windows
system. Final updated package validation and model setup remain separate checks.
## Native Windows search interaction
After a fresh approved capture showed that the unrelated permission dialog was
gone, native input was used on the isolated profile. Add folder opened the inline
folder controls. Entering the owned `.searchi/qa/native-final-corpus` directory
and clicking Index folder indexed three files with two extracted text documents.
The app displayed its indexing progress while keeping keyword search available.
Setting the query to `supplier agreement` returned the correct document and
line-one passage. The native screenshot showed highlighted query words in the
result, filename and preview. The compact Why this result detail stayed collapsed.
Observed tiny-fixture timing was search 40 ms / shown 293 ms; this is one native
functional observation, not a latency benchmark. Ctrl+K visibly selected the
query text, confirming actual keyboard focus behavior.
The next `type_text` operation failed to activate the captured window. After
refreshing the same returned window, monitor capture failed again with
`0x80070057`; input stopped rather than proceeding blindly. No semantic-query,
global-hotkey, tray or Enter-open success is inferred from those partial checks.
Read-only accessibility recovery subsequently succeeded and confirmed selected
query text. The single accessibility input retry returned `GetCursorPos failed:
Access denied (0x80070005)`. Native input is therefore currently blocked by the
interactive-session permission state; no shell input or capture workaround was
attempted.
## Native acceptance checklist
- [x] Native Windows screenshot/accessibility capture of the installed app.
- [x] Native Add folder/index action, keyword query, highlighted passage preview
and Ctrl+K query selection on the isolated owned corpus.
- [ ] Search query typing, arrow selection, passage/media preview and Enter open.
- [ ] Settings/theme/transparency interaction and readable preview.
- [ ] Escape and title-bar close hide; Ctrl+Shift+Space restores query focus.
- [ ] Tray Show/Quit and background/login startup behavior.
- [x] Existing Windows 0.1.7 uninstall/reinstall and fresh empty-profile startup.
- [ ] Final updated package uninstall/reinstall and completed fresh-profile setup.
- [ ] Native Linux keyboard/search/preview interaction through a supported UI API.
Unchecked items are pending, not implied by compilation or unit tests.
## Whole-disk permission handling
The shared scanner now skips specifically permission-denied scopes, directory
walk entries and file reads/metadata/publication checks, increments its skipped
count and retains existing records in the affected subtree. It does not update
their source fingerprints or certify their freshness. Other filesystem failures
still abort and roll back reconciliation. Exact path boundaries protect sibling
directories from accidental preservation, including a whole-root special case.
Two focused helper regressions cover preserved content/subtree boundaries and
classification of other I/O failures. Windows core unit checks passed 27 tests
with one separately built-worker test ignored, using serial execution. The first
concurrent run hit an existing extraction-worker deadline; the serial rerun
passed that test. Strict core library Clippy passed. These are structural checks;
no personal folders or operating-system ACLs were modified to fabricate a denied
directory fixture.
## Final Linux 0.1.8 local package
The exact final uncommitted workspace source plus both new Rust modules and the
built frontend were frozen into a 668-file snapshot before building. Snapshot
SHA-256: `bf864935e2f630d56836246e6c6a217f1d7313f4498c4fc19c3bac4d6296996d`.
Current extraction helper was rebuilt and its source provenance staged. Normal
GPU-capable Google and speech runtimes were verified; speech adds 29 resource
records. Native desktop release compilation passed on Ubuntu 24.04 WSL in
3m47s; the known vendored GLib lifetime warnings remain dependency warnings.
The initial local Debian precheck package was
`.searchi/packages/searchi_0.1.8_amd64.deb`, 177,695,882 bytes, SHA-256
`39bc495e65d7ab8c1592636b76aeade25de9fa56d5b139fc6f479fbcb9de0ee6`.
No intermediate package was published. Raw build records:
`.searchi/qa/linux-final-018-build.json` and its build log.
The extracted package started on real WSLg X11 display `:0`, with CPU inference,
Mesa software rendering and an owned isolated profile. Automatic disk indexing
was explicitly disabled for this bounded test. `ldd` reported no missing desktop
dependencies; packaged speech resource verification passed. Its bundled genuine
Google worker was observed with `--device cpu --role query --threads 1`, and the
desktop remained alive. The approved Windows API returned the WSLg-hosted native
window titled `searchi (Ubuntu-24.04)`, proving it can be selected as a target.
Raw startup record: `.searchi/qa/linux-final-018-startup.json`.
Compilation, loader checks and target inventory do not by themselves establish
Linux keyboard or preview interaction. Those checks remain separate.
The approved WSLg capture attempt failed with the same `CreateForMonitor`
`0x80070057` error as the Windows final candidate. Read-only accessibility exposed
only the remote-desktop host pane, not Linux application controls. No input was
attempted; the owned CPU startup process group is terminated by the test script.
Current Linux desktop unit tests passed 54/54 in 6.33 seconds, including native
Linux filesystem create/update/rename/delete watcher behavior, application catalog
parsing and automatic-indexing guards. The release tests use `custom-protocol`;
an initial invocation without that required feature correctly failed compilation
and was corrected without source changes. Raw successful log:
`.searchi/qa/linux-final-018-unit-custom.log`. No Linux build/test process remains.
### Earlier local package after safety and visual QA corrections
Before final packaging, credential/cache exclusions were added to automatic
disk indexing. Actual UI QA also corrected a preview selector that incorrectly
stacked document previews. The final Linux source uses the safe snapshot
`9f48db1ae11272d51f2e832b0d08de2f850e6e2d456960fcf7435857c46a5eee`
plus recorded exact frontend/module deltas in
`.searchi/qa/linux-final-018-safe-final-delta.json`. The unchanged extraction
helper and normal runtimes were reused only after current provenance validation.
Final cached Linux desktop compilation passed in 1m44s. The extracted final
Debian payload passed extraction provenance, all 29 speech resource records and
loader checks with no missing dependencies. The accepted package at
`.searchi/packages/searchi_0.1.8_amd64.deb` is **177,696,356 bytes**, SHA-256
`cd69092b0b41403c4731e5e94a251067bc32e6a0b9f4338bc51bac0e8e2e85b0`.
Desktop executable SHA-256:
`d630e369c8823a3dfede5b8dad48a8c7d7dd196700743b0bac8418d6f23a5021`.
This earlier local package was preserved as an ignored precheck fixture and
was not published. Final report:
`.searchi/qa/linux-final-018-safe-final-build.json`. Native input was not retried
after its recorded capture/permission failure. No owned Linux process remains.
### Accepted final Linux package
The final frozen source includes application launching, first-use indexing and
watcher cache exclusions, hybrid relevance handling, the new regression tests
and current frontend appearance controls. Base snapshot has 677 files; the final
frontend/brand source archive SHA-256 is
`5650523467ed470355cd1bdb1faaf463bc551610e35ec741a542e228c4879fa8`.
The last icon reading-plate delta is recorded separately in
`.searchi/qa/linux-final-018-closed-icons-delta.json`. The final ELF was explicitly
checked to contain the latest `assets/index-D4fzQWUH.css` asset.
Final native Linux desktop tests passed **56/56**, with zero ignored tests, in
4.61 seconds. Native release build and bundling passed. The extracted package
passed current extraction provenance, normal speech runtime verification (29
records), and loader resolution without missing dependencies. No further native
UI input was attempted after the existing environment errors.
The accepted `.searchi/packages/searchi_0.1.8_amd64.deb` is **177,694,032 bytes**,
SHA-256 `7ab0a3789028f2a974bbca7fc29220a4ee9327d08388370e20ed610688c13bb9`.
Desktop executable SHA-256:
`268d2632682d57917595e2f0f3062ff885a58e4eb5ea3ebe0f54e3c988eb2383`.
Previous local candidates were preserved as ignored evidence, not published.
Raw successful build/test log and report:
`.searchi/qa/linux-final-018-closed-build.log` and
`.searchi/qa/linux-final-018-closed-build.json`. All owned Linux processes finished.
The **accepted final package bytes** (`7ab0a378…c13bb9`) were subsequently
extracted again and actually launched on WSLg `:0` from a new owned profile,
with automatic indexing disabled and CPU/software rendering enforced. Loader
resolution and all 29 packaged speech records passed. The exact bundled Google
worker was observed with `--device cpu --role query --threads 1` and the desktop
was alive. The bounded smoke exited zero and terminated its owned process group.
This is actual final-package startup evidence, not inferred from the earlier
candidate or a compilation. No UI input or inference benchmark was performed.
Raw report: `.searchi/qa/linux-final-018-closed-startup.json`.
### Final package with indexing/startup database-lock fix
Actual Windows startup exposed an interaction between whole-disk indexing and
semantic database preparation. The final shared service now prepares semantic
storage before watchers start, opens current-schema storage without a write
transaction, and treats only a busy optional lexical warmup as deferrable. The
current service source/tests plus formatted desktop startup were captured in
`.searchi/qa/linux-final-018-lockfix-source-delta.json` and rebuilt locally.
Linux desktop tests again passed **56/56**, zero ignored, in 4.08 seconds.
Release compilation, final frontend asset presence, extraction provenance,
normal speech runtime verification (29 records), and loader resolution passed.
The preceding packages above are preserved local prechecks, not release artifacts.
**Accepted current package:** `.searchi/packages/searchi_0.1.8_amd64.deb`,
177,702,404 bytes, SHA-256
`d0fd15c4aa4ec0d7320b507a3bc4afa1ebb14bdffa39c3b5cd076df66ede997c`.
Desktop executable SHA-256:
`e4938a0a557dbe910431f69e51c2ea4a36451df80b6971aede1ad198b82deb7b`.
Actual startup of these exact extracted bytes passed on WSLg with an isolated
profile, automatic indexing disabled and CPU/software rendering enforced. Its
bundled Google process ran `--device cpu --role query --threads 1`; the desktop
was alive. The smoke exited zero and terminated the owned process group.
No UI retry or inference benchmark was performed.
Final evidence: `.searchi/qa/linux-final-018-lockfix-build.json`, matching build
log, and `.searchi/qa/linux-final-018-lockfix-startup.json`. All owned Linux
build/test/startup processes have finished. No package was published here.
## Final startup writer correction
The preceding local 0.1.8 packages remained unpublished prechecks. An actual
Windows start with automatic whole-drive discovery exposed `database is locked`
during semantic query preparation. The current semantic store had unnecessarily
requested an immediate writer transaction on every open. Its optional lexical
statistics warmup could request the same writer while discovery was running.
The final source prepares core/semantic storage before starting the watcher.
Complete current semantic schemas reopen without a migration write; legacy
additions still repair atomically and unsupported versions are rejected. Query
warmup tolerates only typed SQLite busy/locked errors from the optional lexical
cache, then still executes genuine model inference and ANN preparation. Other
cache errors remain errors. No model, ranking or extraction helper changed.
Focused WAL-writer, legacy-schema, future-version and error propagation checks
passed. Final service unit checks passed 49 tests with two explicit ignored
fixtures; strict all-target Clippy passed. A genuine Google CPU query session
opened, warmed and retrieved the supplier agreement with an owned WAL writer
held throughout, in 13.32 seconds. This is functional contention evidence,
not a foreground latency benchmark or simulated embedding result.
Before packaging, the corrected Windows release executable was tested with an
absent application profile and automatic indexing enabled. It exposed 27 Desktop
files including the owned validation text, database quick-check returned `ok`,
semantic schema was 9, and the actual normal worker remained resident with CPU,
query role and one thread. The returned native accessibility tree showed the
compact launcher without the earlier schema-lock error. The owned fresh-profile
processes were stopped. Raw evidence: `.searchi/qa/lean-final-runtime-smoke/`.
A native query input attempt on that returned window still failed at
`GetCursorPos` with access denied `0x80070005`. No input success, final hotkey/
tray interaction or native glass pixels are inferred from that attempt. Twelve
actual-built CSS composition checks separately passed; they are not native
compositor validation. Final installer hashes and installed-start verification
are recorded below.
### Corrected Windows installer and installed startup
The final Windows installer is 101,832,696 bytes, SHA-256
`6dd415aeb8f7c4d357383f44eab099dcc1c945ef01427ff305999b3b1f616b0c`.
Installation exited zero; installed executable SHA-256
`ab7eb3826b713be0f815f27415d2f9d0e9528029cdeee948d8e96cf557d96465`
matches the extracted installer exactly. Current extraction provenance passed.
Settings bytes were unchanged and a consistent SQLite backup was retained.
The VM-only CPU launcher and desktop/login shortcuts were restored.
The actual installed package was launched with the original profile. Database
quick-check returned `ok`, semantic schema was 9 and 27 early files, including
the owned validation marker, remained searchable at the data layer. Its normal
Google query worker was observed on CPU with query role and one thread, alongside
bounded background workers. The app is left running for Karl; device discovery
continues in the background. No final native input pass is claimed.
Receipts: `.searchi/qa/lean-final-fixed-install/result.json` and `index-check.json`.
+48 -1
View File
@@ -1,6 +1,53 @@
# Production readiness roadmap
Status: Windows v0.1.7 published and installed with resident tray/global shortcut and login startup; Linux headless v0.1.6 and desktop v0.1.4 previews published. Broader production gates remain open. Windows VM tests use CPU only.
## Current bounded goal — 2026-10-14
Karl replaces the broad production goal with two deliverables. Work stays local;
there are no intermediate pushes or releases. Publish only the final checked version.
- [ ] Verify native Windows/Linux interaction: launcher shortcut, tray, hide/show,
keyboard search, selection, preview and media seeking. Record unavailable UI
automation honestly rather than substituting headless tests.
- [x] Test Windows uninstall and reinstall, preserving existing user data and
using a fresh isolated application profile. Reinstalling on the development
VM does not prove missing prerequisites on a truly clean Windows image.
- [x] Establish bounded media baseline and improve practical image, music,
audio/video relevance, absent-content results and speech timestamps. Use real
Google EmbeddingGemma 2, retain source citations and report regressions.
- [ ] Run meaningful changed-code checks, build/install the final package,
update user documentation and publish that final version once.
Perfect media recognition, macOS, real GPU qualification and the broader gates
below are outside this renewed scope. Stop experimentation when evidence shows
the practical limits; explain those limits and ship the verified improvement.
Additional user steering in this same final local version:
- [x] Replace the normal desktop window with a centered floating search bar;
reveal results/preview on input and keep settings behind a small control.
- [x] Automatically index accessible local files in the background, with
system/cache/index exclusions and a settings switch; no first-use folder gate.
- [x] Search installed applications and launch catalogued results from the bar.
Bounded evidence: uninstall/reinstall and isolated-profile Windows checks passed;
actual CPU Google media tests and the documented music/timing limits are recorded
in MEDIA-FINAL-QUALITY.md and SPEECH-FINAL-QUALITY.md. Launcher/app discovery and
automatic-indexing code passed Windows/Linux desktop tests. Current software
screenshots show actual retrieval and source highlights. Native final-build
hotkey/tray/glass interaction remains unchecked after capture/input failures;
do not infer it from unit tests or software screenshots. A final automatic-start
check exposed a schema writer conflict. Its correction passed held-writer
storage/warmup regressions and actual Google CPU retrieval. An empty Windows
profile with automatic indexing enabled then exposed 27 Desktop files and the
owned marker, with a resident CPU query-role worker and no schema-lock error.
Final bounded delivery: Windows desktop 0.1.8 is installed and its corrected
installer verified; Ubuntu 24.04 desktop 0.1.8 passed packaged CPU startup.
These are the final release artifacts. README includes current working-search
images and a user-facing agent installation prompt. Headless Linux/Windows CLI
0.1.6 remain available through older releases. The native interaction checkbox
above stays open because final capture/input was denied; clean-machine, macOS
and real GPU gates below remain deferred. No further feature work belongs to
this bounded delivery. Gitea Actions remain disabled.
Karl's release priority, 2026-10-13: publish a usable first Windows version and
install it on DEV-WIN11 now. Extensive platform/GPU, clean-machine, signing and
+83
View File
@@ -0,0 +1,83 @@
# Bounded speech and timeline verification
2026-10-14, Windows development VM, CPU only (`SEARCHI_FORCE_CPU=1`).
This closes a focused reassessment of the existing speech implementation;
it does not introduce another ASR model or claim perfect speech recognition.
Google EmbeddingGemma 2 remains the retrieval model. The pinned local
whisper.cpp base model, Silero VAD and DTW supply recognized passages and
estimated source positions.
## Practical improvement already retained
The previous frozen publisher-timed diagnostic improved strict timestamp-start
hits from **4/8 to 6/8** with VAD plus DTW. Both remaining orange-soil queries
still missed their passage. See [the unchanged comparison](SPEECH-DTW.md).
That diagnostic is one English recording with correlated queries, not a current
end-to-end hybrid score. It cannot establish word-level precision.
The shipped implementation uses bounded 30-second windows with two-second
overlap, source-preserving decoding, speech gating, and sentence locations from
first/last token points. It retains errors rather than inventing transcripts.
No new timing offsets, label-specific heuristics or larger model were added:
the remaining measured misses concern recognized content, and the available
evidence does not justify increasing indexing cost merely to move timestamps.
## New genuine runtime check
The exact 30-second PCM from the earlier failed long-source service run was
retested through the current normal distribution worker, forced onto CPU.
The existing Rust integration test copies the runtime and models into genuine
Unicode paths, verifies their inventory, transcribes twice, and requires stable,
nonempty, bounded passages and zero warm model-loading time.
| Measurement | First call | Warm call |
| --- | ---: | ---: |
| Native VAD | 97.8375 ms | 113.021 ms |
| Native ASR | 47,312.2 ms | 48,474.65 ms |
| Native model loading | 235.8515 ms | 0 ms |
| Transport | 44.8708 ms | 48.6905 ms |
| CPU fallback | 0 ms | 0 ms |
The test **passed** in 129.23 seconds including inventory verification,
relocation and cleanup. These are indexing timings, not search latency.
Successful isolated repetition does not explain or erase the earlier service
transport failure, which remains recorded in [speech integration](SPEECH-INTEGRATION.md).
The existing next-source recovery remains in place.
| Verified input/artifact | SHA-256 |
| --- | --- |
| Exact previously failed PCM | `03ef72d2a4cb926b7d31fbaef757a6cb954a55d6d6961085ea6992728c8d9e37` |
| Normal speech worker | `9c34aa2b12a4c2ab876a1573045ef9a31e19e7dfff76a2b34efdf45555ad97aa` |
| Runtime inventory | `98ca365d4a298b23ca240967e005750db83613b09eaa89ed714afb711b42c87d` |
Reproduction uses `crates/searchi-speech/tests/native_cpu.rs`, with
`SEARCHI_TEST_SPEECH_WORKER=.searchi/s-a3/runtime/searchi-speech-worker.exe`,
the pinned base/Silero files in `.searchi/speech/models`, and
`SEARCHI_TEST_SPEECH_PCM=.searchi/speech-runtime/nasa-exact-crash/input.f32`:
```powershell
$env:SEARCHI_FORCE_CPU = '1'
cargo test -p searchi-speech --test native_cpu --locked -- --ignored --nocapture
```
## Actual media source-clock checks
Both real FFmpeg integration tests passed in 3.53 seconds:
- Audio beginning two seconds into a video decodes at its actual source origin;
a whole-file decode preserves the preceding silence.
- An internal timestamp gap, bounded seek and final tail preserve exact source
sample positions without shifting later speech towards the beginning.
```powershell
$env:SEARCHI_FORCE_CPU = '1'
$env:SEARCHI_TEST_FFMPEG = 'C:/Users/karl/searchi/.searchi/media-runtime/bin/ffmpeg.exe'
$env:SEARCHI_TEST_FFPROBE = 'C:/Users/karl/searchi/.searchi/media-runtime/bin/ffprobe.exe'
cargo test -p searchi-service --test speech_stream_offset_cpu --locked -- --ignored --nocapture
```
These checks establish source-clock handling, not recognition accuracy. Speech
positions remain estimates; overlapping windows and imperfect transcripts can
still produce repeated or incomplete passages. The previously recorded tiny
English/German positive retrieval check and music/silence negative recognition
controls remain useful evidence, without a new broad media-quality rating.
+165 -96
View File
@@ -1,9 +1,13 @@
{
"kind": "browser-rendered-production-ui-real-cpu-engine",
"source": {
"base_commit": "9870df7cb5b537ba516997a0d049b996bc30b08d",
"base_commit": "01279a6b25b545d0920889bf277abe00631a666d",
"working_tree_dirty": true
},
"frontend_build": {
"version": "0.1.8",
"index_sha256": "8415df31094999f0d8bae5a6eb06db160132f1dc4657d1a329a24a6125defe0b"
},
"viewport": {
"width": 1440,
"height": 1000
@@ -33,11 +37,11 @@
{
"query": "cancel the supplier partnership",
"mode": "basic",
"result_count": 7,
"result_count": 1,
"metrics": {
"dropped_spans": 0,
"result_count": 7,
"total_ms": 2.0688999999999997,
"result_count": 1,
"total_ms": 73.3586,
"trace": null
},
"first_filename": "Supplier Agreement.pdf",
@@ -48,17 +52,18 @@
"ui_checks": {
"literal_query_marks": true,
"actual_page_explanation": true,
"why_disclosure_collapsed_by_default": true
"why_disclosure_collapsed_by_default": true,
"unrelated_photos_removed": true
}
},
{
"query": "mountains reflected in calm water",
"mode": "basic",
"result_count": 7,
"result_count": 2,
"metrics": {
"dropped_spans": 0,
"result_count": 7,
"total_ms": 1.5953,
"result_count": 2,
"total_ms": 76.9483,
"trace": null
},
"first_filename": "Mountain Lake.jpg",
@@ -67,40 +72,41 @@
"number": 0
},
"ui_checks": {
"meaning_only_image_has_no_text_marks": true
"meaning_only_image_has_no_text_marks": true,
"unrelated_documents_removed": true
}
},
{
"query": "how can we cancel the supplier partnership",
"mode": "debug",
"result_count": 7,
"result_count": 1,
"metrics": {
"dropped_spans": 0,
"result_count": 7,
"total_ms": 92.8279,
"result_count": 1,
"total_ms": 90.92160000000001,
"trace": [
{
"counters": {},
"duration_ms": 92.80539999999999,
"duration_ms": 90.8989,
"name": "hybrid.search",
"parent": null,
"start_ms": 0.0106
"start_ms": 0.0108
},
{
"counters": {},
"duration_ms": 2.6003,
"duration_ms": 1.8246,
"name": "lexical.search",
"parent": 0,
"start_ms": 0.027
"start_ms": 0.0306
},
{
"counters": {
"query_bytes": 42
},
"duration_ms": 0.0389,
"duration_ms": 0.0422,
"name": "lexical.normalization",
"parent": 1,
"start_ms": 0.0374
"start_ms": 0.041100000000000005
},
{
"counters": {
@@ -108,148 +114,149 @@
"frequency_cache_misses": 8,
"trigram_index": 1
},
"duration_ms": 1.0081,
"duration_ms": 0.2968,
"name": "lexical.candidate_plan",
"parent": 1,
"start_ms": 0.08650000000000001
"start_ms": 0.094
},
{
"counters": {},
"duration_ms": 0.2286,
"duration_ms": 0.3236,
"name": "lexical.exact_filename",
"parent": 1,
"start_ms": 1.1168
"start_ms": 0.4067
},
{
"counters": {
"filters_active": 0,
"rows": 0
},
"duration_ms": 0.1837,
"duration_ms": 0.2841,
"name": "lexical.filtered_sql",
"parent": 4,
"start_ms": 1.1471
"start_ms": 0.4364
},
{
"counters": {},
"duration_ms": 0.2688,
"duration_ms": 0.2009,
"name": "lexical.filename_substring",
"parent": 1,
"start_ms": 1.3663
"start_ms": 0.7506999999999999
},
{
"counters": {
"filters_active": 0,
"rows": 0
},
"duration_ms": 0.2249,
"duration_ms": 0.17229999999999998,
"name": "lexical.filtered_sql",
"parent": 6,
"start_ms": 1.3906999999999998
"start_ms": 0.7678999999999999
},
{
"counters": {},
"duration_ms": 0.2146,
"duration_ms": 0.1716,
"name": "lexical.path_substring",
"parent": 1,
"start_ms": 1.6556
"start_ms": 0.9650000000000001
},
{
"counters": {
"filters_active": 0,
"rows": 0
},
"duration_ms": 0.175,
"duration_ms": 0.145,
"name": "lexical.filtered_sql",
"parent": 8,
"start_ms": 1.6802
"start_ms": 0.9821000000000001
},
{
"counters": {},
"duration_ms": 0.2391,
"duration_ms": 0.229,
"name": "lexical.content",
"parent": 1,
"start_ms": 1.8861999999999999
"start_ms": 1.1488
},
{
"counters": {
"filters_active": 0,
"rows": 0
},
"duration_ms": 0.2053,
"duration_ms": 0.2014,
"name": "lexical.filtered_sql",
"parent": 10,
"start_ms": 1.9049
"start_ms": 1.1647
},
{
"counters": {},
"duration_ms": 0.3054,
"duration_ms": 0.27080000000000004,
"name": "lexical.filename_terms",
"parent": 1,
"start_ms": 2.1413
"start_ms": 1.3904
},
{
"counters": {
"filters_active": 0,
"rows": 0
},
"duration_ms": 0.2773,
"duration_ms": 0.2424,
"name": "lexical.filtered_sql",
"parent": 12,
"start_ms": 2.1576999999999997
"start_ms": 1.4071
},
{
"counters": {},
"duration_ms": 0.146,
"duration_ms": 0.162,
"name": "lexical.media_metadata",
"parent": 1,
"start_ms": 2.4598
"start_ms": 1.675
},
{
"counters": {
"filters_active": 0,
"rows": 0
},
"duration_ms": 0.112,
"duration_ms": 0.1344,
"name": "lexical.filtered_sql",
"parent": 14,
"start_ms": 2.4749
"start_ms": 1.6907999999999999
},
{
"counters": {},
"duration_ms": 0.0155,
"duration_ms": 0.015000000000000001,
"name": "hybrid.identifier_priority",
"parent": 0,
"start_ms": 2.6382
"start_ms": 1.8684999999999998
},
{
"counters": {
"code_task": 0,
"failed": 0,
"query_cache_hit": 0,
"query_cache_miss": 1,
"request_encode_us": 18,
"request_write_us": 58,
"response_validate_us": 69,
"worker_batch_prepare_us": 19,
"worker_inference_us": 87311,
"worker_pool_normalize_us": 14,
"request_encode_us": 25,
"request_write_us": 197,
"response_validate_us": 97,
"worker_batch_prepare_us": 21,
"worker_inference_us": 86213,
"worker_pool_normalize_us": 19,
"worker_token_count": 16,
"worker_tokenization_us": 173,
"worker_wait_and_response_decode_us": 88454
"worker_tokenization_us": 179,
"worker_wait_and_response_decode_us": 87455
},
"duration_ms": 89.1821,
"duration_ms": 87.9572,
"name": "semantic.query_embedding",
"parent": 0,
"start_ms": 2.6649
"start_ms": 1.8927
},
{
"counters": {
"general_lane": 1
},
"duration_ms": 0.8757,
"duration_ms": 0.9468,
"name": "semantic.routing",
"parent": 0,
"start_ms": 91.8792
"start_ms": 89.89030000000001
},
{
"counters": {
@@ -257,99 +264,110 @@
"filesystem_checks": 2,
"result_files": 7
},
"duration_ms": 0.8334,
"duration_ms": 0.8935,
"name": "semantic.retrieval",
"parent": 18,
"start_ms": 91.90950000000001
"start_ms": 89.93039999999999
},
{
"counters": {},
"duration_ms": 0.1384,
"duration_ms": 0.14650000000000002,
"name": "semantic.generation_snapshot",
"parent": 19,
"start_ms": 91.9247
"start_ms": 89.953
},
{
"counters": {
"cache_hit": 1
},
"duration_ms": 0.0115,
"duration_ms": 0.0167,
"name": "semantic.ann_load",
"parent": 19,
"start_ms": 92.07310000000001
"start_ms": 90.1134
},
{
"counters": {},
"duration_ms": 0.011,
"duration_ms": 0.0167,
"name": "semantic.filter_normalization",
"parent": 19,
"start_ms": 92.0933
"start_ms": 90.14410000000001
},
{
"counters": {
"cache_hit": 1,
"eligible_chunks": 8
},
"duration_ms": 0.0252,
"duration_ms": 0.034999999999999996,
"name": "semantic.eligibility",
"parent": 19,
"start_ms": 92.1129
"start_ms": 90.1714
},
{
"counters": {
"requested_chunks": 8
},
"duration_ms": 0.5494,
"duration_ms": 0.5680999999999999,
"name": "semantic.ann_pass",
"parent": 19,
"start_ms": 92.1485
"start_ms": 90.2198
},
{
"counters": {
"returned_chunks": 8
},
"duration_ms": 0.0347,
"duration_ms": 0.0356,
"name": "semantic.ann_search",
"parent": 24,
"start_ms": 92.161
"start_ms": 90.2333
},
{
"counters": {
"filesystem_checks": 2,
"unique_parents": 7
},
"duration_ms": 0.4802,
"duration_ms": 0.4973,
"name": "semantic.parent_materialization",
"parent": 24,
"start_ms": 92.2066
"start_ms": 90.2796
},
{
"counters": {
"valid": 1
},
"duration_ms": 0.20550000000000002,
"duration_ms": 0.193,
"name": "semantic.parent_filesystem_validation",
"parent": 26,
"start_ms": 92.30539999999999
"start_ms": 90.38690000000001
},
{
"counters": {
"valid": 1
},
"duration_ms": 0.1146,
"duration_ms": 0.1215,
"name": "semantic.parent_filesystem_validation",
"parent": 26,
"start_ms": 92.5374
"start_ms": 90.6088
},
{
"counters": {
"candidates_after": 1,
"candidates_before": 7,
"tail_candidates_pruned": 6
},
"duration_ms": 0.0216,
"name": "hybrid.semantic_shortlist",
"parent": 0,
"start_ms": 90.8471
},
{
"counters": {
"lexical_files": 0,
"semantic_files": 7
"semantic_files": 1
},
"duration_ms": 0.0376,
"duration_ms": 0.02,
"name": "hybrid.rank_fusion",
"parent": 0,
"start_ms": 92.7663
"start_ms": 90.8783
}
]
},
@@ -361,79 +379,130 @@
}
],
"screenshots": [
{
"file": "launcher-empty.png",
"sha256": "276ddb994d3b361c707d6afdadf28976d6386be9103baba19abbfe07fd4a3024",
"query": "",
"mode": "empty-ready",
"result_count": 0,
"selected_filename": null,
"theme": "light",
"capture_bounds": {
"x": 360,
"y": 120,
"width": 720,
"height": 110
},
"state_assertions": {
"semantic_ready": true,
"compact_empty_layout": true,
"native_pixels": false
}
},
{
"file": "search-light.png",
"sha256": "bd45041de13093f7a7e26285618f4c1afc5b081fb41e51ff06e1313216af3562",
"sha256": "75fd2ebc9b40dcfb8501ee9ff0e14dc0b3a2cccc223b672f66c6feb4fe5f5858",
"query": "cancel the supplier partnership",
"mode": "basic",
"result_count": 7,
"result_count": 1,
"selected_filename": "Supplier Agreement.pdf",
"first_source_kind": "page",
"first_source_number": 2,
"theme": "light",
"summary": "7 RESULTS · KEYWORD + MEANING · SEARCH 2.1 MS · SHOWN 233 MS",
"summary": "1 RESULTS · KEYWORD + MEANING · SEARCH 73 MS · SHOWN 306 MS",
"capture_bounds": {
"x": 180,
"y": 0,
"width": 1080,
"height": 1000
},
"state_assertions": {
"wide_split_preview": true,
"semantic_ready": true,
"hybrid_final": true,
"image_visible": false,
"actual_worker_inference": false,
"literal_query_marks": true,
"actual_page_explanation": true,
"why_disclosure_collapsed_by_default": true
"why_disclosure_collapsed_by_default": true,
"unrelated_photos_removed": true
}
},
{
"file": "search-dark.png",
"sha256": "cd7e2aa3f7027cd9b40965171a232f6ee901e1e2b971f04628b4cfcc3b440263",
"sha256": "45c3b7f5072d22e4f9c52549727ad63ce122650c2cd105680d40d38b8e0730e1",
"query": "cancel the supplier partnership",
"mode": "basic",
"result_count": 7,
"result_count": 1,
"selected_filename": "Supplier Agreement.pdf",
"first_source_kind": "page",
"first_source_number": 2,
"theme": "dark",
"summary": "7 RESULTS · KEYWORD + MEANING · SEARCH 2.1 MS · SHOWN 233 MS",
"summary": "1 RESULTS · KEYWORD + MEANING · SEARCH 73 MS · SHOWN 306 MS",
"capture_bounds": {
"x": 180,
"y": 0,
"width": 1080,
"height": 1000
},
"state_assertions": {
"wide_split_preview": true,
"semantic_ready": true,
"hybrid_final": true,
"image_visible": false,
"actual_worker_inference": false,
"literal_query_marks": true,
"actual_page_explanation": true,
"why_disclosure_collapsed_by_default": true
"why_disclosure_collapsed_by_default": true,
"unrelated_photos_removed": true
}
},
{
"file": "media-search.png",
"sha256": "4c278446963cd5dbad073bea93a3ca33fb9c10cb43a9544258d5fb6039014d81",
"sha256": "718ffd4e7fa0a21ef717a0773749c0b72a1cbae4968bebb0c26e7f4d68133488",
"query": "mountains reflected in calm water",
"mode": "basic",
"result_count": 7,
"result_count": 2,
"selected_filename": "Mountain Lake.jpg",
"first_source_kind": "image",
"first_source_number": 0,
"theme": "light",
"summary": "7 RESULTS · KEYWORD + MEANING · SEARCH 1.6 MS · SHOWN 217 MS",
"summary": "2 RESULTS · KEYWORD + MEANING · SEARCH 77 MS · SHOWN 280 MS",
"capture_bounds": {
"x": 180,
"y": 0,
"width": 1080,
"height": 1000
},
"state_assertions": {
"wide_split_preview": true,
"semantic_ready": true,
"hybrid_final": true,
"image_visible": true,
"actual_worker_inference": false,
"meaning_only_image_has_no_text_marks": true
"meaning_only_image_has_no_text_marks": true,
"unrelated_documents_removed": true
}
},
{
"file": "performance-details.png",
"sha256": "4f336d4c42d0c4a50ce33bca27595f02da7d896c8734d447350d50dab5c339df",
"sha256": "945dec2b087961a4cfa073983f4ac055c6f7b75c736aaaa5094596ffdd959713",
"query": "how can we cancel the supplier partnership",
"mode": "debug",
"result_count": 7,
"result_count": 1,
"selected_filename": "Supplier Agreement.pdf",
"first_source_kind": "page",
"first_source_number": 2,
"theme": "light",
"summary": "7 RESULTS · KEYWORD + MEANING · SEARCH 93 MS · SHOWN 311 MS",
"summary": "1 RESULTS · KEYWORD + MEANING · SEARCH 91 MS · SHOWN 306 MS",
"capture_bounds": {
"x": 180,
"y": 0,
"width": 1080,
"height": 1000
},
"state_assertions": {
"wide_split_preview": true,
"semantic_ready": true,
"hybrid_final": true,
"image_visible": false,
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 439 KiB

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 80 KiB