Phase 7 (Core): chemistry v2, expanded card pool & search filters
CI / Build, lint & test (push) Failing after 1m46s

- Chemistry v2: FUT-style link scoring with per-player breakdown
  (club +3/link cap 6, league +1/link cap 4, nation +1/link cap 3;
   player cap 10, team cap 100); chemistry response now includes
   per-player breakdown with club/league/nation link counts and pts
- Card pool: 34 new cards across Premier League, La Liga, Bundesliga
  with overlapping clubs/nations for meaningful chemistry testing
- Card search: extended GET /cards with nation, league, club,
  min_overall, max_overall, limit query params; results sorted by
  overall descending
- Match opponent: added "ultimate" difficulty band (85+ OVR);
  random formation selection from 6 tactical formations; falls back
  to lower OVR pool when not enough cards at the requested band
- Tests: 9 new integration tests (28 total, all passing)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-06-25 16:31:56 -07:00
parent 1ef2c436ab
commit 8fa125cfd6
7 changed files with 867 additions and 77 deletions
+172
View File
@@ -0,0 +1,172 @@
[
{
"id": "card_bl_001",
"name": "Klaus Berger",
"overall": 84,
"position": "ST",
"nation": "Germany",
"league": "Bundesliga",
"club": "Röder FC",
"pace": 82,
"shooting": 87,
"passing": 72,
"dribbling": 80,
"defending": 36,
"physical": 84,
"rarity": "gold",
"image_path": null
},
{
"id": "card_bl_002",
"name": "Felix Hartmann",
"overall": 83,
"position": "CM",
"nation": "Germany",
"league": "Bundesliga",
"club": "Röder FC",
"pace": 74,
"shooting": 74,
"passing": 86,
"dribbling": 80,
"defending": 72,
"physical": 76,
"rarity": "gold",
"image_path": null
},
{
"id": "card_bl_003",
"name": "Matteo Ricci",
"overall": 82,
"position": "CAM",
"nation": "Italy",
"league": "Bundesliga",
"club": "Röder FC",
"pace": 76,
"shooting": 80,
"passing": 85,
"dribbling": 84,
"defending": 42,
"physical": 66,
"rarity": "gold",
"image_path": null
},
{
"id": "card_bl_004",
"name": "Jan Schreiber",
"overall": 81,
"position": "CB",
"nation": "Germany",
"league": "Bundesliga",
"club": "Röder FC",
"pace": 74,
"shooting": 40,
"passing": 66,
"dribbling": 56,
"defending": 85,
"physical": 87,
"rarity": "gold",
"image_path": null
},
{
"id": "card_bl_005",
"name": "Lucas Fonseca",
"overall": 83,
"position": "LW",
"nation": "Brazil",
"league": "Bundesliga",
"club": "Blau Stern München",
"pace": 90,
"shooting": 78,
"passing": 77,
"dribbling": 88,
"defending": 32,
"physical": 66,
"rarity": "gold",
"image_path": null
},
{
"id": "card_bl_006",
"name": "Stefan Wolf",
"overall": 82,
"position": "CDM",
"nation": "Germany",
"league": "Bundesliga",
"club": "Blau Stern München",
"pace": 72,
"shooting": 64,
"passing": 78,
"dribbling": 74,
"defending": 85,
"physical": 82,
"rarity": "gold",
"image_path": null
},
{
"id": "card_bl_007",
"name": "Marco Bauer",
"overall": 80,
"position": "RB",
"nation": "Germany",
"league": "Bundesliga",
"club": "Blau Stern München",
"pace": 82,
"shooting": 54,
"passing": 74,
"dribbling": 74,
"defending": 80,
"physical": 76,
"rarity": "gold",
"image_path": null
},
{
"id": "card_bl_008",
"name": "Henri Delacroix",
"overall": 84,
"position": "ST",
"nation": "France",
"league": "Bundesliga",
"club": "Rhein United",
"pace": 86,
"shooting": 87,
"passing": 73,
"dribbling": 82,
"defending": 38,
"physical": 80,
"rarity": "gold",
"image_path": null
},
{
"id": "card_bl_009",
"name": "Tobias Kohl",
"overall": 80,
"position": "GK",
"nation": "Germany",
"league": "Bundesliga",
"club": "Rhein United",
"pace": 56,
"shooting": 16,
"passing": 60,
"dribbling": 30,
"defending": 82,
"physical": 82,
"rarity": "gold",
"image_path": null
},
{
"id": "card_bl_010",
"name": "Nicolas Braun",
"overall": 81,
"position": "LB",
"nation": "Germany",
"league": "Bundesliga",
"club": "Rhein United",
"pace": 78,
"shooting": 52,
"passing": 74,
"dribbling": 72,
"defending": 81,
"physical": 78,
"rarity": "gold",
"image_path": null
}
]
+206
View File
@@ -0,0 +1,206 @@
[
{
"id": "card_ll_001",
"name": "Carlos Mendez",
"overall": 85,
"position": "ST",
"nation": "Spain",
"league": "La Liga",
"club": "Atletico Fuego",
"pace": 86,
"shooting": 89,
"passing": 72,
"dribbling": 84,
"defending": 36,
"physical": 82,
"rarity": "gold",
"image_path": null
},
{
"id": "card_ll_002",
"name": "Pablo Serrano",
"overall": 83,
"position": "CAM",
"nation": "Spain",
"league": "La Liga",
"club": "Atletico Fuego",
"pace": 78,
"shooting": 80,
"passing": 86,
"dribbling": 86,
"defending": 46,
"physical": 70,
"rarity": "gold",
"image_path": null
},
{
"id": "card_ll_003",
"name": "Rodrigo Vidal",
"overall": 82,
"position": "CM",
"nation": "Spain",
"league": "La Liga",
"club": "Atletico Fuego",
"pace": 74,
"shooting": 70,
"passing": 84,
"dribbling": 80,
"defending": 72,
"physical": 74,
"rarity": "gold",
"image_path": null
},
{
"id": "card_ll_004",
"name": "Andrés Torres",
"overall": 81,
"position": "CB",
"nation": "Spain",
"league": "La Liga",
"club": "Atletico Fuego",
"pace": 73,
"shooting": 38,
"passing": 68,
"dribbling": 58,
"defending": 84,
"physical": 86,
"rarity": "gold",
"image_path": null
},
{
"id": "card_ll_005",
"name": "Gabriel Costa",
"overall": 84,
"position": "LW",
"nation": "Brazil",
"league": "La Liga",
"club": "Real Viento",
"pace": 92,
"shooting": 80,
"passing": 78,
"dribbling": 90,
"defending": 32,
"physical": 64,
"rarity": "gold",
"image_path": null
},
{
"id": "card_ll_006",
"name": "Javier Ruiz",
"overall": 83,
"position": "CDM",
"nation": "Spain",
"league": "La Liga",
"club": "Real Viento",
"pace": 72,
"shooting": 62,
"passing": 80,
"dribbling": 76,
"defending": 86,
"physical": 82,
"rarity": "gold",
"image_path": null
},
{
"id": "card_ll_007",
"name": "Miguel Ángel Prieto",
"overall": 80,
"position": "RB",
"nation": "Spain",
"league": "La Liga",
"club": "Real Viento",
"pace": 80,
"shooting": 52,
"passing": 76,
"dribbling": 74,
"defending": 80,
"physical": 74,
"rarity": "gold",
"image_path": null
},
{
"id": "card_ll_008",
"name": "Diego Reyes",
"overall": 82,
"position": "ST",
"nation": "Argentina",
"league": "La Liga",
"club": "Valencia Azul",
"pace": 85,
"shooting": 84,
"passing": 70,
"dribbling": 82,
"defending": 36,
"physical": 78,
"rarity": "gold",
"image_path": null
},
{
"id": "card_ll_009",
"name": "Marc Gutiérrez",
"overall": 80,
"position": "GK",
"nation": "Spain",
"league": "La Liga",
"club": "Valencia Azul",
"pace": 54,
"shooting": 14,
"passing": 62,
"dribbling": 28,
"defending": 81,
"physical": 80,
"rarity": "gold",
"image_path": null
},
{
"id": "card_ll_010",
"name": "Emilio Navarro",
"overall": 81,
"position": "LB",
"nation": "Spain",
"league": "La Liga",
"club": "Valencia Azul",
"pace": 79,
"shooting": 52,
"passing": 74,
"dribbling": 72,
"defending": 82,
"physical": 76,
"rarity": "gold",
"image_path": null
},
{
"id": "card_ll_011",
"name": "Thiago Drummond",
"overall": 83,
"position": "CB",
"nation": "Brazil",
"league": "La Liga",
"club": "Atletico Fuego",
"pace": 76,
"shooting": 38,
"passing": 68,
"dribbling": 62,
"defending": 86,
"physical": 88,
"rarity": "gold",
"image_path": null
},
{
"id": "card_ll_012",
"name": "Fran Molina",
"overall": 82,
"position": "RW",
"nation": "Spain",
"league": "La Liga",
"club": "Real Viento",
"pace": 87,
"shooting": 76,
"passing": 76,
"dribbling": 85,
"defending": 34,
"physical": 66,
"rarity": "gold",
"image_path": null
}
]
+206
View File
@@ -0,0 +1,206 @@
[
{
"id": "card_pl_001",
"name": "James Caldwell",
"overall": 84,
"position": "ST",
"nation": "England",
"league": "Premier League",
"club": "Northgate United",
"pace": 84,
"shooting": 87,
"passing": 70,
"dribbling": 80,
"defending": 36,
"physical": 82,
"rarity": "gold",
"image_path": null
},
{
"id": "card_pl_002",
"name": "Danny Walsh",
"overall": 82,
"position": "CM",
"nation": "England",
"league": "Premier League",
"club": "Northgate United",
"pace": 74,
"shooting": 72,
"passing": 84,
"dribbling": 79,
"defending": 70,
"physical": 74,
"rarity": "gold",
"image_path": null
},
{
"id": "card_pl_003",
"name": "Reece Okafor",
"overall": 83,
"position": "LW",
"nation": "England",
"league": "Premier League",
"club": "Northgate United",
"pace": 91,
"shooting": 78,
"passing": 75,
"dribbling": 88,
"defending": 34,
"physical": 68,
"rarity": "gold",
"image_path": null
},
{
"id": "card_pl_004",
"name": "Tom Briggs",
"overall": 80,
"position": "CB",
"nation": "England",
"league": "Premier League",
"club": "Northgate United",
"pace": 72,
"shooting": 36,
"passing": 62,
"dribbling": 52,
"defending": 83,
"physical": 86,
"rarity": "gold",
"image_path": null
},
{
"id": "card_pl_005",
"name": "Pierre-Marc Dubois",
"overall": 84,
"position": "CAM",
"nation": "France",
"league": "Premier League",
"club": "Southfield City",
"pace": 79,
"shooting": 80,
"passing": 87,
"dribbling": 85,
"defending": 44,
"physical": 70,
"rarity": "gold",
"image_path": null
},
{
"id": "card_pl_006",
"name": "Kwame Asante",
"overall": 85,
"position": "ST",
"nation": "Ghana",
"league": "Premier League",
"club": "Southfield City",
"pace": 88,
"shooting": 88,
"passing": 70,
"dribbling": 84,
"defending": 38,
"physical": 86,
"rarity": "gold",
"image_path": null
},
{
"id": "card_pl_007",
"name": "Liam Foster",
"overall": 81,
"position": "CDM",
"nation": "England",
"league": "Premier League",
"club": "Southfield City",
"pace": 74,
"shooting": 62,
"passing": 78,
"dribbling": 74,
"defending": 84,
"physical": 80,
"rarity": "gold",
"image_path": null
},
{
"id": "card_pl_008",
"name": "Sergio Rojas",
"overall": 83,
"position": "RW",
"nation": "Argentina",
"league": "Premier League",
"club": "Westbrook FC",
"pace": 89,
"shooting": 80,
"passing": 78,
"dribbling": 90,
"defending": 30,
"physical": 62,
"rarity": "gold",
"image_path": null
},
{
"id": "card_pl_009",
"name": "Ben Archer",
"overall": 79,
"position": "GK",
"nation": "England",
"league": "Premier League",
"club": "Westbrook FC",
"pace": 52,
"shooting": 14,
"passing": 62,
"dribbling": 28,
"defending": 80,
"physical": 80,
"rarity": "gold",
"image_path": null
},
{
"id": "card_pl_010",
"name": "Nathan Cross",
"overall": 80,
"position": "RB",
"nation": "England",
"league": "Premier League",
"club": "Westbrook FC",
"pace": 81,
"shooting": 50,
"passing": 74,
"dribbling": 72,
"defending": 80,
"physical": 76,
"rarity": "gold",
"image_path": null
},
{
"id": "card_pl_011",
"name": "Marco Silva Jr.",
"overall": 83,
"position": "CB",
"nation": "Brazil",
"league": "Premier League",
"club": "Westbrook FC",
"pace": 77,
"shooting": 40,
"passing": 66,
"dribbling": 60,
"defending": 86,
"physical": 88,
"rarity": "gold",
"image_path": null
},
{
"id": "card_pl_012",
"name": "Erik Strand",
"overall": 82,
"position": "LB",
"nation": "Norway",
"league": "Premier League",
"club": "Northgate United",
"pace": 80,
"shooting": 54,
"passing": 76,
"dribbling": 74,
"defending": 82,
"physical": 78,
"rarity": "gold",
"image_path": null
}
]