SKILL.md
Character Creator Steps
Use this skill to modify the multi-step character creation flow. Focus on the reducer-driven step map, render switch, and sidebar config so navigation, backtracking, and visibility stay consistent.
Entry Points
src/components/CharacterCreator/state/characterCreatorState.tsforCreationStep, reducer transitions,stepDefinitions,GO_BACKresets, and step gating helpers.src/components/CharacterCreator/CharacterCreator.tsxforrenderStep()and step-level handlers.src/components/CharacterCreator/config/sidebarSteps.tsfor sidebar labels, grouping, visibility, and completion summaries.src/components/CharacterCreator/CreationSidebar.tsxif sidebar layout or grouping behavior changes.src/components/CharacterCreator/CharacterCreator.README.mdandsrc/components/CharacterCreator/state/characterCreatorState.README.mdfor state/flow notes.tests/character-creator-flow.spec.tsandsrc/components/CharacterCreator/state/tests/characterCreatorReducer.test.tsfor flow coverage.
Workflow
- Map the change: Identify whether the update is add, remove, reorder, or conditional. Note the current step order and dependencies (race, class, ability scores, feats).
- Update the state model:
- Add/remove the CreationStep enum entry. - Add any new CharacterCreationState fields and action types. - Update determineNextStepAfterRace, getNextStep, and any gating helpers (canOfferFeatAtLevelOne, getFeatStepOrReview, getPreviousStepBeforeFeat) if the path changes.
- Wire reducer transitions:
- Add new case handlers in characterCreatorReducer. - Update stepDefinitions for back navigation. - Update getFieldsToResetOnGoBack to clear the data captured by the step.
- Render the step UI:
- Add a renderStep() branch in CharacterCreator.tsx. - Ensure navigation (SETSTEP, GOBACK, NAVIGATETOSTEP) keeps the user in valid state.
- Keep the sidebar honest:
- Add/update entries in SIDEBAR_STEPS with label, group, visibility, and selection summary. - Update isStepCompleted for the new step.
- Validate flow:
- Update Playwright flow if the screen order changes. - Add/adjust reducer tests for step transitions and backtracking. - Confirm docs still match current behavior.
Change Patterns
Add a new step
- Add enum + reducer action + state field.
- Insert into forward path (e.g., after
AbilityScoresor beforeClassFeatures) and update thestepDefinitionsprevious step mapping. - Add sidebar config and completion logic.
- Add test coverage for forward and back navigation.
Remove a step
- Remove enum, reducer case, and related state fields.
- Remove from
stepDefinitions,SIDEBAR_STEPS, and completion logic. - Collapse adjacent steps to keep the flow continuous.
- Prune tests that depended on the removed step.
Reorder steps
- Update
stepDefinitionsfor back navigation and forward flow helpers. - Audit all
SET_STEPtransitions that assume the old order. - Update sidebar grouping order if needed.
Conditional steps
- Gate visibility in
SIDEBAR_STEPS.isVisible. - Gate the transition in reducer logic (often in
SELECT*orSETABILITY_SCORES). - Ensure
GO_BACKresets the conditional data if the step is skipped or revisited.
Guardrails
- Prefer inline race variant selection in
RaceDetailPaneunless a step must block forward progress (see existing centaur/changeling patterns). - Keep
NAVIGATETOSTEPconservative: it must not allow jumping past incomplete data. - If the step affects stats, sync with
useCharacterAssemblyso preview and final assembly match.
Completion Criteria
Before concluding any character creator step task, you must satisfy the following checklist:
- State Preservation: Confirm that when the user clicks the "Go Back" button from the modified step, all newly captured data for that step is correctly cleared (resets in
getFieldsToResetOnGoBackare executed). - Navigation Gating: Verify that the step flow transitions and gating helpers (
determineNextStepAfterRace,getNextStep, etc.) prevent jumping past incomplete required steps. - Sidebar Alignment: Confirm that the sidebar visibility and completion indicator (
isStepCompleted) are updated to reflect the new step's active state. - Integration Tests: Verify that the Playwright flow tests (
tests/character-creator-flow.spec.ts) and reducer tests run and pass without failures. - No Compilation Errors: Verify the code compiles without TypeScript errors.