Releases: fame0528/savant-bot
Release list
savant-bot v0.0.2 — Ship openrouter/free default fix
savant-bot v0.0.2 — Patch release
Ships the openrouter/auto → openrouter/free default-model fix from v0.0.1. No code or API changes; only default value, documentation, and version bumps. Wire-compatible with v0.0.1.
Fixed
- Default LLM model (src/config.rs): llm_default_model default corrected from openrouter/auto to openrouter/free. The earlier default was a wrong-interpretation bug (operator's original URL had openrouter/free as the literal model slug, not a navigation hint).
- README.md intro line: Updated to reference openrouter/free (was openrouter/auto).
Audit
- Verified unchanged: all src/*.rs source files, .env.example, migrations. ECHO Protocol conformity still v0.1.3 (this release bumps app version only).
- Validated: all 6 ECHO validation commands PASS; 25/25 unit tests pass.
- FID-151 N/A: no new pub fn introduced this release.
- Spec consistency: Cargo.toml v0.0.2 ↔ protocol.config.yaml project.version v0.0.2 ↔ CHANGELOG.md ↔ README.md v0.0.2.
- Tracked by: FID-2026-0616-011 (archived in dev/fids/archive/).
Upgrade path
�ash git pull origin main cargo build --release
Users who set LLM_DEFAULT_MODEL explicitly are unaffected. Users relying on the v0.0.1 default now get the corrected openrouter/free.
Dual-versioning note
This release bumps the app version (�.0.2). The protocol version (used for ECHO Protocol conformity tracking via VERSION + protocol.config.yaml:protocol.version) remains �.1.3 — the protocol itself did not change this release. See CHANGELOG.md preamble for the rule.
Full Changelog: �0.0.1...v0.0.2
SAVANT-BOT v0.0.1 - Initial Public Release
SAVANT-BOT v0.0.1 — Initial Public Release
Sister project to SAVANT-TRADING under the SAVANT umbrella, built under SAVANT-PROTOCOL (ECHO) v0.1.3.
Highlights
- Rust-native Discord bot on Poise 0.6 + Serenity 0.12 + Tokio
- 3 commands:
/ping(smoke test),/ask(LLM chat),/mute(moderation, requiresMODERATE_MEMBERS) - LLM features (OpenRouter-backed): defer-then-edit, token-bucket rate limiting, exponential backoff on 429, sliding-window context
- Moderation features: SQLite poller for temp-punishments (restart-survival)
- 25 unit tests, all 6 validation commands PASS
- ~1,800 lines of Rust across 18 files in
src/+ 1 SQL migration
Implementation (10 FIDs)
All FIDs implemented and archived to dev/fids/archive/. Highlights:
- FID-008 (Provider):
Providertrait +OpenRouterProvider+MockProviderfor tests. UsesX-OpenRouter-Titleheader perdev/docs/openrouter-llms.md. - FID-005 (Defer):
defer_and_runhelper using Poise 0.6'sctx.defer()+ctx.say()pattern. - FID-006 (Rate Limit):
governortoken-bucket (GCRA) + exponential backoff with ±20% jitter. - FID-007 (Context): Sliding-window LLM context, 20 messages/channel/1h TTL.
- FID-004 (Poller): SQLite
moderation_cases+ 60s background poller. - FID-010 (Skeleton): Cargo baseline + Poise framework setup.
Audit Results (release-time)
- All 6 validation commands PASS:
cargo build,cargo check,cargo clippy --all-targets -- -D warnings,cargo fmt --check,cargo test(25/25),cargo clean - Zero
unwrap()/expect()in non-test code - Zero
TODO/FIXME/todo!/unimplemented!insrc/ - Zero secrets in tracked files (
.envproperly gitignored) - All
pub fnwired to consumers (FID-151 call-graph reachability verified)
Configuration (verified at release)
| Field | Value | Source |
|---|---|---|
project.version |
0.0.1 |
Cargo.toml, protocol.config.yaml |
protocol.version |
0.1.3 |
matches VERSION file |
language |
rust |
config |
quality.max_file_lines |
300 |
coding-standards/rust.md |
quality.max_function_lines |
50 |
coding-standards/rust.md |
quality.max_line_length |
100 |
coding-standards/rust.md |
perfection_loop.max_iterations |
10 |
ECHO.md Rule #5 |
perfection_loop.change_threshold |
0.10 |
ECHO.md Rule #1 |
perfection_loop.convergence_threshold |
0.02 |
ECHO.md Rule #3 |
session.autonomy_level |
3 (Autonomous) |
ECHO default |
Known Limitations → v1.0
/muterecords the case but does NOT call the Discord API to actually apply the mute (schema hasrole_idready for v2)- LLM context is in-process only; lost on bot restart (SQLite persistence is v1.1)
- Process-wide rate limiter (per-user keyed limiting is v1.1)
- No streaming SSE for long LLM responses (v2)
Roadmap (per README)
- v1.1:
/muteactually mutes, context persistence, more moderation commands, per-user rate limiting - v2.0: Full SAVANT memory integration (CortexaDB), soul/personality system, A2A delegation, multi-server sharding, voice channel support, custom skills