Skip to content

Conversation

@nikomatsakis
Copy link
Member

This PR adds a live recommendations system that fetches mod recommendations from a central server while also supporting local and workspace-specific recommendations.

Changes

Recommendation Sources

Symposium now loads recommendations from three sources, merged in order:

  1. Remote recommendations - fetched from recommendations.symposium.dev and cached locally for offline use
  2. User local recommendations - from platform-specific config directory
  3. Workspace recommendations - from .symposium/recommendations.toml in the project root

Platform-Specific Config

Configuration moved from ~/.symposium to platform-appropriate locations:

  • Linux: ~/.config/symposium/
  • macOS: ~/Library/Application Support/symposium/
  • Windows: %APPDATA%\symposium\

Workspace Recommendations

Projects can now include a .symposium/recommendations.toml file to declare workspace-specific mods for team members. These support the same when conditions as other recommendations:

[[recommendation]]
source.cargo = "team-internal-mod"

[[recommendation]]
source.cargo = "our-graphql-tools"
when.using-crate = "async-graphql"

Documentation

Expanded user-facing docs with:

  • New Configuration page explaining /symposium:config and config directories
  • Reorganized Recommending Mods page with TL;DR examples for common use cases
  • Reference section for recommendation structure, source types, and conditions
  • Details on cargo binstall installation flow

Other

  • Extract symposium-recommendations crate for external tooling (e.g., recommendations-validator)
  • Bump to v0.1.1

nikomatsakis and others added 7 commits January 30, 2026 06:12
Factor out recommendation types (ComponentSource, Recommendation, When, etc.)
into a separate symposium-recommendations crate. This allows external tools
like the recommendations-validator in the symposium-recommendations repository
to parse and validate recommendation files without depending on the full
symposium-acp-agent crate.

The new crate contains:
- ComponentSource enum with all distribution types
- Recommendation and When types for recommendation definitions
- Parsing utilities for single and multiple recommendation files

Runtime behavior (workspace evaluation, process resolution) remains in
symposium-acp-agent via extension traits.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Move config storage from `~/.symposium` to platform-appropriate locations:
- Linux: `~/.config/symposium/`
- macOS: `~/Library/Application Support/symposium/`
- Windows: `%APPDATA%\symposium\`

Also adds a cache directory for recommendations and other cached data.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add remote_recommendations module that fetches recommendations from
  http://recommendations.symposium.dev/recommendations.toml
- Cache downloaded recommendations locally for offline use
- Fall back to cache if remote fetch fails
- Refuse to start if no recommendations available (no cache + fetch failure)
- Support user local recommendations file that merges with remote
- ConfigAgent::new() is now async to support remote fetching at startup
- Fix TOML serialization to produce compact inline format
- Skip serializing empty/default fields (args, env, version, binary)
- Add 30 second timeout to HTTP requests

Local recommendations can be added at:
- Linux: ~/.config/symposium/config/recommendations.toml
- macOS: ~/Library/Application Support/symposium/config/recommendations.toml
- Windows: %APPDATA%\symposium\config\recommendations.toml

Co-authored-by: Claude <[email protected]>
…ations.toml

Projects can now include a .symposium/recommendations.toml file to
declare workspace-specific mods. These are merged with global and
user recommendations, with the same `when` condition filtering.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
…dations

- Add new Configuration page explaining /symposium:config usage and
  platform-specific config directories
- Reorganize Recommending Mods page with TL;DR section showing quick
  examples for common use cases
- Document all recommendation sources: local, workspace, crate metadata,
  and central registry
- Add reference section explaining recommendation structure, source
  types, and conditions
- Expand Publishing Mods with cargo binstall details and installation
  flow
- Add "Adding Your Own Recommendations" section to Using Symposium page

Co-Authored-By: Claude Opus 4.5 <[email protected]>
@nikomatsakis nikomatsakis marked this pull request as ready for review January 30, 2026 19:43
Adding eprintln statements to understand why test_load_recommendations_merges_local
fails in CI but passes locally. The debug output will show:
- The path being checked
- Whether the file exists
- The file content
- Number of bytes read and mods parsed
In async Rust, the compiler may drop unused variables before await points.
This caused test_load_recommendations_merges_local to fail in CI because
the TempDir was dropped during the HTTP request, deleting the test files
before load_local_recommendations could read them.

Fix by explicitly using temp_dir after the await via drop(), which forces
the compiler to keep it alive across the await point.

Also apply the same fix to test_load_recommendations_caches_result.
@nikomatsakis nikomatsakis merged commit 7fe0c50 into symposium-dev:main Jan 31, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant