Config loader
Status: Supported
Milestone: 1 — Journal + module core
Spec: Configuration §10
Package: internal/config
Goal
Load and validate Trove TOML configuration: journal path, blob settings, module paths, remote listener, and HTTP gateway listen address.
Interfaces
[journal]
path = "/data/trove.db"
[blobs]
backend = "filesystem"
path = "/data/blobs"
[modules]
paths = ["/usr/local/lib/trove/modules", "~/.local/lib/trove/modules"]
[modules.config]
mqtt-source = "/etc/trove/mqtt.toml"
[modules.settings.mqtt-source]
broker = "tcp://mosquitto:1883"
[modules.remote]
listen = "tailscale:trove"
[http]
listen = ":8080"
[mcp].listen is removed; MCP is provided by the mcp-query module at
POST /mcp on [http].listen.
Go struct with sensible defaults for development.
Implementation notes
- Use a TOML library (e.g.
BurntSushi/tomlorpelletier/go-toml) - Expand
~in paths - Validate required fields for enabled subsystems
- Flag:
-config /path/to/trove.tomlincmd/trove - Optional
[modules.settings]inline overlays and[modules.config]external file paths — serialized toTROVE_MODULE_SETTINGSfor each module subprocess
Acceptance criteria
- [x] Parses example config from spec
- [x] Returns clear errors on missing/invalid fields
- [x]
mainloads config before starting journal/modules - [x] Optional per-module settings overlays from
trove.toml
Dependencies
- Blocks: journal (db path), module runtime (paths), MCP (listen)
- Blocked by: none
Open questions
- Default config file location (XDG?
/etc/trove/config.toml?)