Problem or opportunity
domain/src/player.rs defines a Position enum with 18 football variants (Goalkeeper, Defender, Midfielder, Forward, RightBack, CenterBack, etc.). This is completely wrong for a League of Legends manager. The core data model does not reflect the game.
Current workaround: src/lib/lolIdentity.ts maps Position → Role in the frontend. This is technical debt and confusing.
Proposed solution
-
Create new Role enum in domain/src/player.rs:
ust pub enum Role { Top, Jungle, Mid, ADC, Support, }
-
Keep Position enum temporarily with #[serde(alias)] for backwards compatibility.
-
Add conversion method:
ust impl Position { pub fn to_lol_role(&self) -> Role { ... } }
-
Update Player struct to use Role for primary position, while keeping Position as a fallback/deprecated field.
UX impact
- Frontend can drop lolIdentity.ts mapping workaround once Rust types are correct.
oleIcons.ts and components already expect LoL roles — they will align naturally.
- Scripts (generate-lec-world.mjs) must output LoL roles directly.
Acceptance criteria
Scope
Data / provenance
Problem or opportunity
domain/src/player.rs defines a Position enum with 18 football variants (Goalkeeper, Defender, Midfielder, Forward, RightBack, CenterBack, etc.). This is completely wrong for a League of Legends manager. The core data model does not reflect the game.
Current workaround: src/lib/lolIdentity.ts maps Position → Role in the frontend. This is technical debt and confusing.
Proposed solution
Create new Role enum in domain/src/player.rs:
ust pub enum Role { Top, Jungle, Mid, ADC, Support, }Keep Position enum temporarily with #[serde(alias)] for backwards compatibility.
Add conversion method:
ust impl Position { pub fn to_lol_role(&self) -> Role { ... } }Update Player struct to use Role for primary position, while keeping Position as a fallback/deprecated field.
UX impact
oleIcons.ts and components already expect LoL roles — they will align naturally.
Acceptance criteria
ole: Role
Scope
Data / provenance