Gen: pure + seeded in lib/game/crew.ts — 16×22 name combos (unique on ship), 8 roles, 10 good + 10 bad trait pools; starting crew of 2–3 with unique roles
Exploration: ~18% of scans also yield a joining member (CREW_CHANCE constant, pinned by test); appended to the same per-planet rng stream so existing resource/part outcomes are byte-for-byte unchanged and everything stays deterministic per save+planet; no duplicate joins (one scan per body)
API:GET /api/crew; POST /api/explore responses now carry crewFound; OpenAPI updated in code
UI: CREW tab renders live roster cards — name + role, +good / −bad traits, ORIGIN line; refetch on tab open (Radix unmounts inactive tabs), no polling; placeholder crew removed for this tab only
Tests: unit 29→38 (crew gen shape/determinism, find lands with correct origin, never joins twice under known seed), e2e 10→11 (real cards show both traits; roster survives the mid-run container restart via deep-equality snapshot)
Local verification: tsc ✓, vitest 38/38 ✓, playwright --list ✓, next build clean (7 tab triggers present).
Closes #7. Real crew roster — starting crew seeded on new game, members found during exploration join the ship.
- **DB:** `crew` (name, role, trait_good, trait_bad, origin — "STARTING CREW" or "<planet>, <system>")
- **Gen:** pure + seeded in lib/game/crew.ts — 16×22 name combos (unique on ship), 8 roles, 10 good + 10 bad trait pools; starting crew of 2–3 with unique roles
- **Exploration:** ~18% of scans also yield a joining member (CREW_CHANCE constant, pinned by test); appended to the same per-planet rng stream so existing resource/part outcomes are byte-for-byte unchanged and everything stays deterministic per save+planet; no duplicate joins (one scan per body)
- **API:** `GET /api/crew`; POST /api/explore responses now carry `crewFound`; OpenAPI updated in code
- **UI:** CREW tab renders live roster cards — name + role, +good / −bad traits, ORIGIN line; refetch on tab open (Radix unmounts inactive tabs), no polling; placeholder crew removed for this tab only
- **Tests:** unit 29→38 (crew gen shape/determinism, find lands with correct origin, never joins twice under known seed), e2e 10→11 (real cards show both traits; roster survives the mid-run container restart via deep-equality snapshot)
Local verification: tsc ✓, vitest 38/38 ✓, playwright --list ✓, next build clean (7 tab triggers present).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #7. Real crew roster — starting crew seeded on new game, members found during exploration join the ship.
crew(name, role, trait_good, trait_bad, origin — "STARTING CREW" or ", ")GET /api/crew; POST /api/explore responses now carrycrewFound; OpenAPI updated in codeLocal verification: tsc ✓, vitest 38/38 ✓, playwright --list ✓, next build clean (7 tab triggers present).