Goal
Move the AnnouncePolicy struct from torrust-tracker-configuration into torrust-tracker-primitives, reversing an inverted dependency where a primitives package depends on a configuration package. After the move, torrust-tracker-configuration depends on torrust-tracker-primitives for AnnouncePolicy, which is the natural direction.
Background
AnnouncePolicy (min/max announce intervals) is a domain concept — it describes the peer communication policy for the BitTorrent announce cycle. Domain concepts belong in primitives, not in configuration, which should be concerned only with config-file parsing and environment variable wiring.
The coupling analysis (F-03) found that torrust-tracker-primitives imports torrust_tracker_configuration::AnnouncePolicy — meaning a primitives package depends on a configuration package. This is an inverted dependency: primitives should sit at the bottom of the dependency graph, with configuration depending on it, not the reverse.
Moving AnnouncePolicy to primitives fixes the inversion:
- Before:
primitives → configuration (for AnnouncePolicy)
- After:
configuration → primitives (for AnnouncePolicy, among other types)
Both packages are published to crates.io. Removing AnnouncePolicy from torrust-tracker-configuration is a semver breaking change for that crate; it will require a major version bump when published. Within this workspace, at version 3.0.0-develop, the change is expected and planned.
This is subissue SI-04 of EPIC #1669 (Overhaul: Packages).
Scope
In Scope
- Move the
AnnouncePolicy struct (and any directly associated types or impl blocks) from packages/configuration/src/ to packages/primitives/src/announce.rs.
- Remove
torrust-tracker-configuration as a dependency of torrust-tracker-primitives; torrust-tracker-primitives must not depend on torrust-tracker-configuration.
- Update
packages/configuration to import AnnouncePolicy from torrust-tracker-primitives; keep a #[deprecated] re-export in configuration for external consumers.
- Update all other workspace files that import
AnnouncePolicy from torrust_tracker_configuration to import it from torrust_tracker_primitives.
- Remove
torrust-tracker-configuration from packages/http-protocol/Cargo.toml (only usage was AnnouncePolicy in test code).
- Verify the workspace builds and all tests pass.
Out of Scope
- Any rename of
AnnouncePolicy or changes to its fields.
- Publishing a new crates.io version; the semver bump is handled in the release cycle.
- Extracting
torrust-tracker-primitives to a standalone repository (a later subissue).
Implementation Plan
| ID |
Task |
| T1 |
Locate all definition and usage sites of AnnouncePolicy across the workspace |
| T2 |
Move AnnouncePolicy definition to packages/primitives/src/announce.rs |
| T3 |
Remove AnnouncePolicy from packages/configuration/src/; add deprecated re-export pointing to torrust_tracker_primitives |
| T4 |
Add torrust-tracker-primitives as a dep of packages/configuration/Cargo.toml |
| T5 |
Remove torrust-tracker-configuration dep from packages/primitives/Cargo.toml |
| T6 |
Update all workspace files that import AnnouncePolicy from torrust_tracker_configuration to use torrust_tracker_primitives |
| T7 |
Remove torrust-tracker-configuration from packages/http-protocol/Cargo.toml |
| T8 |
Run cargo build --workspace and cargo test --workspace |
| T9 |
Run linter all and cargo machete |
Acceptance Criteria
Part of EPIC #1669.
Goal
Move the
AnnouncePolicystruct fromtorrust-tracker-configurationintotorrust-tracker-primitives, reversing an inverted dependency where aprimitivespackage depends on aconfigurationpackage. After the move,torrust-tracker-configurationdepends ontorrust-tracker-primitivesforAnnouncePolicy, which is the natural direction.Background
AnnouncePolicy(min/max announce intervals) is a domain concept — it describes the peer communication policy for the BitTorrent announce cycle. Domain concepts belong inprimitives, not inconfiguration, which should be concerned only with config-file parsing and environment variable wiring.The coupling analysis (F-03) found that
torrust-tracker-primitivesimportstorrust_tracker_configuration::AnnouncePolicy— meaning aprimitivespackage depends on aconfigurationpackage. This is an inverted dependency:primitivesshould sit at the bottom of the dependency graph, withconfigurationdepending on it, not the reverse.Moving
AnnouncePolicytoprimitivesfixes the inversion:primitives→configuration(forAnnouncePolicy)configuration→primitives(forAnnouncePolicy, among other types)Both packages are published to crates.io. Removing
AnnouncePolicyfromtorrust-tracker-configurationis a semver breaking change for that crate; it will require a major version bump when published. Within this workspace, at version3.0.0-develop, the change is expected and planned.This is subissue SI-04 of EPIC #1669 (Overhaul: Packages).
Scope
In Scope
AnnouncePolicystruct (and any directly associated types or impl blocks) frompackages/configuration/src/topackages/primitives/src/announce.rs.torrust-tracker-configurationas a dependency oftorrust-tracker-primitives;torrust-tracker-primitivesmust not depend ontorrust-tracker-configuration.packages/configurationto importAnnouncePolicyfromtorrust-tracker-primitives; keep a#[deprecated]re-export inconfigurationfor external consumers.AnnouncePolicyfromtorrust_tracker_configurationto import it fromtorrust_tracker_primitives.torrust-tracker-configurationfrompackages/http-protocol/Cargo.toml(only usage wasAnnouncePolicyin test code).Out of Scope
AnnouncePolicyor changes to its fields.torrust-tracker-primitivesto a standalone repository (a later subissue).Implementation Plan
AnnouncePolicyacross the workspaceAnnouncePolicydefinition topackages/primitives/src/announce.rsAnnouncePolicyfrompackages/configuration/src/; add deprecated re-export pointing totorrust_tracker_primitivestorrust-tracker-primitivesas a dep ofpackages/configuration/Cargo.tomltorrust-tracker-configurationdep frompackages/primitives/Cargo.tomlAnnouncePolicyfromtorrust_tracker_configurationto usetorrust_tracker_primitivestorrust-tracker-configurationfrompackages/http-protocol/Cargo.tomlcargo build --workspaceandcargo test --workspacelinter allandcargo macheteAcceptance Criteria
packages/primitives/src/announce.rsdefinesAnnouncePolicyand exports it publicly.packages/primitives/Cargo.tomldoes not listtorrust-tracker-configurationas a dependency.packages/configuration/src/no longer definesAnnouncePolicy; it re-exports fromtorrust-tracker-primitiveswith a deprecation notice.AnnouncePolicyfromtorrust_tracker_configurationdirectly (all usetorrust_tracker_primitives).cargo build --workspacesucceeds with zero errors.cargo test --workspacepasses with zero failures.linter allexits with code0.cargo machetereports no unused dependencies.Part of EPIC #1669.