# Changelog

All notable changes to this project are documented here.

The format is based on [Keep a Changelog](https://keepachangelog.com/),
and this project adheres to [Semantic Versioning](https://semver.org/).

## [Unreleased]

## [0.5.0] - 2026-06-23

### Added
- Bang (`!`) and at-sign (`@`) shortcuts: `!w query` redirects to Wikipedia, `@w query` searches only Wikipedia. Shortcodes auto-generated from configured engines, overridable per-engine or via `[[bangs]]` config.
- `shortcode`, `bang_url`, `bang_enabled` per-engine override fields.
- Configurable standalone bangs via `[[bangs]]` in `config.toml`.
- Dynamic shortcuts help in the web UI (press `?`).
- JSON API returns `{ type: "bang", redirect_url }` for bang queries.


## [0.4.2] - 2026-06-23

### Added
- *(none)*

### Fixed
- *(none)*

### Changed
- *(none)*


## [0.4.2] - 2026-06-23

### Fixed
- Robots.txt URL now includes port number (non-standard ports were silently hitting default port)
- MutexGuard no longer held across await points in Fetcher (potential deadlock under concurrent use)
- Clippy warnings resolved across the entire codebase (~60 fixes)
- Custom abbaye theme templates removed in favor of built-in defaults (added missing `.browse-link` CSS)

### Changed
- `run_import` now takes `&Config` instead of 12 individual parameters
- `Config` derives `Default` instead of manual implementation
- Fetcher runtime changed from `enable_time()` to `enable_all()` (required for reqwest IO)

### Added
- 3 Fetcher tests with local HTTP server: basic fetch, robots.txt blocking, cache behavior

## [0.4.1] - 2026-06-22

### Fixed
- Progress bar no longer overshoots total during import (separate bar for fetch+tag pass)
- Stack overflow in inner tokio runtime replaced with current-thread runtime + enabled timers
- Mutex poison resilience in Fetcher's `save_cache` and `fetch_async`


## [0.4.0] - 2026-06-21

### Added
- `self-update` CLI command: checks abbaye Atom feed for new releases, downloads and replaces the binary
- `contrib/search-hub-self-update.{service,timer}` for weekly automated updates
- Wikipedia search engine (configurable `lang`, defaults to English)
- MDN Web Docs search engine (configurable `locale`, defaults to en-US)
- Generic HTML-scraped search engine (user-provided URL template + CSS selector)
- Container build (`Containerfile`, `.dockerignore`) and push to `oci.vit.am`
- `docker-compose.yaml` for one-command deployment
- `contrib/search-hub.container` (Podman Quadlet) for systemd-native container management
- SIGHUP reload: re-read config and swap engines without restart

### Changed
- Engine config switched from `HashMap` to `Vec<EngineConfig>` tagged enum
- Config option `enabled_engines` removed (the engine list itself defines what's active)
- `reqwest` switched from `native-tls` to `rustls-tls` (no system OpenSSL required)

### Changed (CLI)
- `release.sh` builds container image with `buildah` as part of release process


## [0.3.0] - 2026-06-19

### Added
- Unit and integration tests for search engines (24 unit + 4 integration)
- `tagging_enabled` config option (default: `false`) to opt into auto-tagging

### Changed
- Search results from multiple engines are now interleaved round-robin
- abbaye.toml: fix `$shema` -> `$schema` typo, add `clone_url` for git UI

### Documentation
- Update README to reflect opt-in auto-tagging


## [0.2.3] - 2026-06-19

### Added
- SearXNG integration (optional, configurable in `[engines.searxng]`)


## [0.2.2] - 2026-06-19

### Fixed
- Align abbaye version_index template with abbaye v0.8 API (dist_files -> dist_categories)
- Add abbaye build and rsync to release script

### Documentation
- Update README with SearXNG mention, binary downloads, and repository links

## [0.2.1] - 2026-06-19

### Added
- Abbaye release site theme matching the search_hub web UI aesthetic
  - Monospace, earthy palette, dark/light mode
  - Covers all 7 Jinja2 templates + markdown

## [0.2.0] - 2026-06-19

### Added
- Release automation script (`contrib/release.sh`) with version bump, test, build, tag
- Engine filter badges with client-side hide/show by engine
- Keyboard shortcuts: `/` focus search, `j`/`↓` next, `k`/`↑` prev, `o`/`Enter` open, `?` toggle help, `Esc` close
- Help overlay showing all shortcuts
- `accesskey="s"` on search input
- `init-config` CLI command to generate config file
- `-c`/`--config` flag for CLI
- Async main with tokio
- Engine config refactored to `[engines.*]` map
- Single-pass import with channel-based error reporting

### Changed
- Results split into side-by-side local/external columns in web UI
- Slogan: "search_hub // personal web index"

## [0.1.0] - 2026-06-17

### Added
- CLI importer for Firefox, Zen, Chrome, Chromium bookmarks
- Web UI with full-text search (FTS5 via SQLite)
- crates.io integration via public JSON API
- Auto-tagging via local ONNX embeddings (fastembed)
- Single-pass import: insert, fetch content, HTML->MD conversion, tagging
- Bookmark database in `~/.local/share/search_hub/bookmarks.db`
- OpenSearch protocol support for Firefox/Zen
- Systemd service and timer for automated Zen imports
