Start a character and Level up list only what the character can take; a chosen ancestry feat shows on its step (#1121) #1124
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/1121-relevant-choices"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Items 2 and 3 of the owner's lane 11 review (#1121), with the owner's Q167 answer (b): "list only what can be taken right now". Decision D291; it supersedes D261 for the listing.
What changes
creation.steps; Add closes once the choice is met; the server setsslotandlevel: 1and refuses a second feat for a met choice.category,ancestry_idandclass_id; feats are narrowed by category, level and the ancestry or class they are a trait of, heritages byfields.ancestry. A general or skill feat is never hidden by ownership; an ancestry or class typed by hand (D250) narrows nothing. The narrowing is SQL conditions passed intosearch_service.search(newextra,offset), not a filter over one capped page: an earlier draft filtered the first 100 results and could come back wrongly empty with a large pack. Two tests flood the content with 120 other-ancestry feats that sort first and fail on that draft.optionsomits every featfeat_whyrefuses (another class or ancestry, "From level N", "Needs …", "Already on the sheet.") and pages through the content until it hasOPTIONS_LIMITtakeable feats or runs out. The apply-time refusal stays, so a hidden feat still cannot be forced through the API. The disabled-with-reason rendering is gone from the Level up feat picker; an empty list reads "No feats to take at this level in the loaded content."sources/intro.md, the IS-437 ledger row, andCATALOGUE.mdedited by hand to match (pwshwas not available to runbuild.ps1).Checks
tests/sheetson the dev server: 756 passed. Ruff 0.4.4 format and check: clean.npx vitest run src/pages/sheet: 232 passed. eslint: 0 errors.scripts/changelog.py check,scripts/check_version_sync.py: OK. No/api/bot/*change.e2e/j7-a-character.spec.jsnow picks a heritage and an ancestry feat at creation and asserts an untakeable feat is not listed at level up; CI is its first run.Known limits
🤖 Generated with Claude Code