fix(openworlds): add aasimar lineage to RACES (Closes #375) - #389
fix(openworlds): add aasimar lineage to RACES (Closes #375)#389100yenadmin wants to merge 1 commit into
Conversation
PR #369 added Dame Aylin to PORTRAIT_GALLERY with `race: "aasimar"`, but "aasimar" was not a valid RACES key (11 races shipped; aasimar was missing). Result: the race-filter at screen-create.jsx:548 never matched her entry, leaving her unreachable from any race selection — PR #369's body acknowledged this as intentional "lore-only via the filter," but it's a visible drift that the --ui-gate `gallery_per_race` probe (PR #386) surfaces as `unknownRaces: ["aasimar"]`. Fix per option (1) in #375 — add aasimar as a first-class lineage. Why option (1) and not option (2) (re-tag Aylin → human) ------------------------------------------------------- Aasimar IS a canonical 5e lineage (PHB-adjacent, Volo's Guide, also in BG3 lore as a planetouched lineage). Players coming from D&D Beyond / Kingmaker / BG3 will expect it on a character-creation screen. Re-tagging Aylin would patch the drift but cost real CRPG- canon fidelity. 5e canon mapping ---------------- - Size: Medium - Life: ~160 years (Volo's: "live longer than humans") - ASI: CHA +2, WIS +1 — matches Protector tradition (the most common Aasimar subrace in BG3 lore + the closest fit for the existing flat-RACES bonus style). Subraces (Protector / Scourge / Fallen) deferred to #377 (subrace handling). Smoke test (post-fix, against the new RACES table) -------------------------------------------------- $ node -e '<the #386 regex against the patched file>' Counts per race: human 4 halfling 0 ← still empty (next PR — #379 empty-state) dwarf 0 ← still empty elf 2 half 2 tiefling 1 dragonborn 0 ← still empty drow 1 githyanki 1 gnome 0 ← still empty half-orc 0 ← still empty aasimar 1 ← Dame Aylin now reachable ✓ Unknown race tags: [] ← drift CLOSED ✓ Out of scope ------------ - Empty galleries for dwarf / halfling / gnome / dragonborn / half-orc (#379 — separate PR with empty-state fallback) - Subrace handling (#377) - Aasimar trait set beyond ability bonuses (Celestial Resistance, Healing Hands, Light cantrip) — defer until traits land for the other 11 races - Updating CREATE_RACE_IDS in qa/ui_gate_probe.js — that lives on the #386 branch (unmerged); will rebase that branch to include 'aasimar' once this lands. Refs: #375 (this fix), #386 (the gate that surfaces this drift class), PR #369 (introduced the drift)
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThe PR adds the ChangesAasimar race definition
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~2 minutes Possibly related issues
Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
Comment |
Dame Aylin's PORTRAIT_GALLERY entry tags her race:"aasimar", but "aasimar" was not a key in RACES. Because StepRace renders Object.entries(RACES), no selectable hero.race could ever equal "aasimar", so the portrait filter (p.race === hero.race) never matched and Dame Aylin was unreachable from the picker for any lineage. Add aasimar as a first-class lineage in RACES (CHA +2, WIS +1 per 5e canon Protector tradition), retroactively validating her existing gallery tag. Additive only: removes nothing, modifies no existing entry. Subraces deferred. Regression guard: test_openworlds_create_portrait_gallery_races_are_valid_races_keys parses RACES keys + PORTRAIT_GALLERY race tags from the served screen-create.jsx and asserts every gallery race tag resolves to a RACES key (with aasimar pinned + Dame Aylin's tag resolved). Verified RED without the fix, GREEN with it. Closes #375. Revives PR #389. Co-authored-by: Eva <arncalso@gmail.com>
|
Superseded by #653 — a fresh re-implementation off current main with a RED→GREEN regression guard (this stale branch was 4–8 days behind). Closing the stale PR. |
TL;DR
Adds
aasimaras a first-class lineage inRACES(CHA +2, WIS +1 per 5e canon Protector tradition), retroactively validating Dame Aylin's existingPORTRAIT_GALLERYentry (race: "aasimar"). Closes the race-tag drift the--ui-gate gallery_per_raceprobe (PR #386) flags asunknownRaces: ["aasimar"].Closes / addresses
gallery_per_race ≥ 1gate that detects this class of drift)What this lands
One additive entry at
viewer/openworlds/screen-create.jsx:866:Why option (1), not option (2)
#375 offered two paths:
Picked (1). Aasimar IS a canonical 5e lineage (PHB-adjacent, Volo's Guide) AND a canonical BG3 lore lineage (planetouched). Re-tagging Aylin would patch the drift but cost real CRPG-canon fidelity. Players coming from D&D Beyond / Kingmaker / BG3 will expect Aasimar on a character-creation screen.
5e canon mapping
Subraces (Protector / Scourge / Fallen) and full trait set (Celestial Resistance, Healing Hands, Light cantrip) deferred — same pattern as the other 11 races, which don't yet expose subraces or full trait sets either.
Smoke test (post-fix, regex from #386 against patched file)
Acceptance criteria (per #375)
--ui-gate gallery_per_raceunknownRacesset is now empty (verified)Out of scope (intentionally)
CREATE_RACE_IDSinqa/ui_gate_probe.js— that lives on PR feat(qa): ui_gate_probe — gallery_per_race ≥ 1 check (Addresses #382) #386 (unmerged); will rebase feat(qa): ui_gate_probe — gallery_per_race ≥ 1 check (Addresses #382) #386 to include'aasimar'once this landsCollision audit
viewer/openworlds/screen-create.jsxlast touched on main by PR fix(openworlds): create — #277 #281 #315 #369 (fix(openworlds): create — #277 #281 #315). Adding a single RACES entry at the end of the table doesn't conflict with any open PR's surface.fix(dm,viewer): cold-open delivers a real 2nd-person opening— DM/cold-open territory, zero overlap.DO NOT MERGE yet
Per owner direction. Ready for review.
Summary by CodeRabbit
New Features