Search and navigation
Reader search is browser-side over generated search-index.json, not a hosted search engine, live source query or permission-filtered account service. Sidebar/breadcrumbs/heading links provide a second way to find context.
Open and control search
| Input | Action |
|---|---|
| Header search | Opens palette; typing is inside it |
| Ctrl+K / Cmd+K | Open; select existing query when open |
/ outside form editing |
Open palette |
| At least 2 characters | Starts result search |
| Arrow down/up | Move selected result, wraps |
| Enter | Open selected page/fragment |
| Escape or overlay backdrop | Close palette |
| Tab in palette | Kept in input, not general traversal |
The header field is read-only as an entry control, not the active typing box. OS/browser shortcuts can intercept key combinations, especially embedded contexts. Test actual browser and pointer/touch entry too.
Closing restores prior non-header focus when available; header search is blurred to avoid reopening loop. Palette results have option/selection semantics, but these facts do not certify every assistive-technology scenario. Verify keyboard/focus with intended readers.
Query matching
| Query kind | Matching |
|---|---|
| Ordinary words | Every term must match somewhere |
| Exact word | Strongest word match |
| Prefix | Weaker than exact |
| Typo | Terms 5+ can allow edit distance |
| Quoted phrase | Normalized title/body substring |
| One-character ordinary term | Rejected by core |
Text normalizes lowercase/NFKD and removes combining marks. Word matching handles Unicode words beyond ASCII, which does not mean route slugs support all languages. For typo terms length 5-8, up to one edit; 9+, up to two. Transposed adjacent characters can match. It is not semantic embedding search or a promise all misspellings match.
Ranking weights title stronger than section path, then text; exact complete title and page type gain bonuses. Each ordinary term can match different fields of the same entry. Quoted phrases search normalized title/text combined, not path-only phrase filtering. Search does not expose date/role/filetype/server query filters.
Pages and Sections are grouped separately, default caps 6 page and 8 section hits. The result count is displayed hits, not total matching index count. Try fewer distinctive words when no results or too much generic overlap.
Indexed content
| Entry | Source |
|---|---|
| Page | Title, breadcrumb path, description and intro |
| Section | H2-H4 title, fragment and following prose |
| Code/diagram | Preformatted text stripped |
| Script/style/SVG | Stripped from prose |
| Hidden branch | Still indexed when built |
| Unsaved draft | Not in generated index |
Page text ends at first indexed heading. Heading text extends to next indexed heading, not the whole document. Description can be displayed as fallback when a page entry has no intro; core word preparation does not separately search description field. Put meaningful purpose in actual prose too.
H1/H5/H6 do not create section entries. Tables/lists/body text can be searchable within their surrounding section. Important command/diagram conclusions need normal prose outside fences. Search index is a reader output artifact; it can disclose all included hidden/internal text.
Example task search
In a Field Guide installation, search Workstation check then installed tools. Page result should reach intended article; heading result should reach actual fragment. Read prerequisites and expected results before using a command found by search.
In this handbook, search “metadata save” or “local recovery” and confirm destination/context. A ranked result does not prove its instructions are current, authorized or appropriate to your operating system. Use scope/version notes inside the page.
Index loading and staleness
| State | Interpretation |
|---|---|
| First open | Lazy fetch using template base prefix |
| Loaded | Prepared index reused in this page process |
| Network/parse failure | Console error; results can appear empty |
| New query during fetch | Stale earlier query response ignored |
| Cached old index | Old routes/fragments can remain |
| Fresh navigation/reload | Can reload index under cache policy |
Fetch failure is not a permission-aware “no documents” answer. Check actual JSON response, not a 200 login/home fallback. The loader does not present every failure as a detailed visible error. Preserve console/network evidence and reconcile built versus served index.
Deploy HTML/resources/index together. A correct origin artifact with stale browser cache differs from old provider deployment/branch. Repeated text saves cannot repair a stale host/index. Health and diagnostics explains layer checks.
Sidebar and orientation
| Control | Meaning |
|---|---|
| Folder disclosure | Expand/collapse children |
| Folder landing link | Open overview |
| Normal page link | Open article |
| Breadcrumb | Current route ancestors |
| Previous/next | Flattened visible sidebar order |
| Browser Back | Your visit history |
| On this page rail | H2 tasks on current page |
Folders precede ordinary pages; folders use position/title, pages title sorting. Landings should state recommended task sequence rather than making readers infer it from alphabetic titles. A folder disclosure is not the same click as its link.
A hidden folder branch is absent from sidebar and visible sequence, not output/search. A current hidden article can have no previous/next cards because it is outside flattened navigation. No reader-role filtering follows from collapse/hidden state.
Sidebar visibility, expansion and scroll position are browser-local preferences. They do not edit source or synchronize devices/accounts. Storage restrictions can prevent remembered state; inspect immediate interaction separately from persistence.
Phone drawer
Normal-page selection closes menu. Folder landing selection can preserve open drawer through navigation to continue exploration. Backdrop/Escape closes. Do not report folder staying open as the same failure as an article staying open.
Test actual controls, longest nested labels and available height. A no-overflow result does not prove drawer focus/touch/keyboard works. Use browser Back for visit history and landing links for deliberate learning order.
Heading links and host routes
Copy exact built fragment. Title/folder changes can move full route; heading changes move fragment independently. ASCII page slug and heading normalization differ, especially Hebrew-only/non-Latin text at this pin. Do not infer a translated path.
Open copied result in fresh tab and reload deep route directly. A client click that appears to work does not prove server deep-route handling. Missing URL must have intended 404 behavior rather than misleading home 200. MarkStack does not create host redirects automatically.
Theme and acceptance gate
Theme defaults dark until saved browser choice applies; toggle then reload to test persistence. It is not an account/admin synchronized setting. Reader storage wrappers allow immediate controls without saved preferences when storage is blocked. Check persistence separately; not all restricted browser modes were tested.
| Check | Pass condition |
|---|---|
| Search entry | Actual palette and minimum query |
| Page query | Intended route opens |
| Heading query | Exact fragment opens/reloads |
| Keyboard | Open, arrows, Enter, Escape/focus |
| Index | Current JSON, not fallback/stale |
| Sidebar | Disclosure versus link understood |
| Phone | Normal page closes, folder behavior verified |
| Missing route | Actual intended status/destination |
These are task checks, not blanket accessibility/browser certification. Reader experience and Validation limits retain network/device/production boundaries.