All notable changes to FAVA Trails are documented here.
- CI lint passing: Added
ruffto dev dependencies (was configured but not installed in CI). Fixed all lint warnings (import ordering, unused f-strings, unused variables).
- Quick-start guidance: CLI help now shows numbered setup steps for all missing prerequisites (JJ binary + data repo), silent when fully configured
- Install-jj discoverability: CLI help now shows "Quick start: run 'fava-trails install-jj'" when JJ is not installed
fava-trails install-jjsubcommand (TICK 14-001): Downloads JJ binary from GitHub releases β eliminates the adoption cliff betweenpip install fava-trailsand a working system. Supports Linux (x86_64, aarch64), macOS (x86_64, arm64), Windows (winget guidance). Version-aware skip, regex version match, zsh-aware PATH hint.- All "jj not found" error messages now reference
fava-trails install-jjinstead ofscripts/install-jj.sh - CI dogfoods the
install-jjCLI command
- README refresh for public launch: PyPI badges, dual install paths (PyPI primary),
fava-trails bootstrapCLI, updated MCP configs, refreshed architecture diagram - Docs cleanup: Removed stale internal references from AGENTS.md, AGENTS_USAGE_INSTRUCTIONS.md, CONTRIBUTING.md, FAQ, and onepager; updated all bootstrap instructions to CLI command
- Removed orphaned
.architect-role.md
- JJ push defense-in-depth (TICK 1b-003): Repair skips immutable commits via
mutable()revset; per-commit error isolation prevents one failure from blocking the entire push
- Defense-in-depth against JJ push failures (TICK 1b-003): Three-layer defense β prevention (
ui.default-descriptionconfig), repair (_repair_undescribed_commits()before every push), fallback (--allow-empty-descriptionflag)
- Trust Gate JSON parsing (TICK 3-001): LLM responses wrapped in markdown code fences are now correctly parsed
- Data repo bootstrap: Template files (
.gitignore, config) included infava-trails bootstrap
- Phantom empty JJ commits (TICK 1b-002):
commit_files()andnew_change()always pass-mto prevent undescribed commits that blockjj git push - Docs filenames updated to plural FAVA Trails
- Removed stale compat shims and upgrade guide
- Rebrand: Project renamed from
fava-trailtofava-trails(package, module, entry point) - OSS readiness: Apache 2.0 license declared in pyproject.toml, CONTRIBUTING.md, CHANGELOG.md, SECURITY.md
- GitHub Actions CI: Automated test + lint on every push and pull request
- Issue templates: Bug report template with JJ/OS/Python version fields
- PyPI publishing workflow: Added Trusted Publishing GitHub Actions workflow for tag-based releases (
pip install fava-trailsavailable after first publish) - Full pyproject.toml metadata: license, authors, readme, classifiers, project URLs
- Version bumped to 0.4.0 (first public release post-rebrand)
- Scope discovery reliability:
.fava-trails.yamlnow correctly propagates scope to.envfor all agents in a project - CLI spec improvements for
fava-trails-serverstartup behavior
get_usage_guideMCP tool: returns full protocol reference on-demand- MCP server
instructionsfield: auto-injects core usage guidance at session start for all MCP clients that support it
- Multi-scope search in
recall:trail_namesparameter accepts glob patterns (e.g.,mw/eng/*) - Preferences auto-surface: user preference thoughts automatically included in relevant recall results
- Storage substrate amendments: monorepo support for shared FAVA Trails data repos
- Conflict interception: JJ conflicts in data repos are detected and surfaced to agents before they cause silent data loss
- Trust Gate: recalled thoughts pass through a configurable trust review before being returned to agents
- Hierarchical scoping: trail names use slash-separated paths (e.g.,
org/project/epic) with inheritance
- Initial release: 15 MCP tools for agent memory management
- VCS-backed storage using Jujutsu (JJ) colocated git repos
- Draft/promoted thought lifecycle (
save_thoughtβpropose_truth) - Full thought lineage tracking (who wrote it, when, why it changed)
- Engine/Fuel split architecture: stateless MCP server + separate user-controlled data repo