fix(core): admit list items under per-item text quotas - #25
Merged
Merged
Conversation
Eagerly admitted list items and select options charged their aggregate text to the shared tree budget, so a picker with ~80+ data rows (the /sessions panel in a populated directory) was rejected with "Mayfly UI text exceeds 20000 characters" while larger lists passed untouched through lazy admission. Each item now validates under its own state — the same isolation lazy rows already get — keeping strict eager faults while the tree budget bounds only non-item text. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
/sessionsin a session-heavy directory failed admission withMayfly UI text exceeds 20000 characters, rendered as the overlay's content: eagerly-admittedlist.items(≤200 rows) charged every row'sid/label/detail/searchText/parentIdto the shared tree text budget, so ~80+ session rows (~250 chars each) exhausted it.validationState().listItemnow creates that per-item state itself at all call sites (list.items,formselect/multiselectoptions, lazy rows) — aggregate row text can no longer exhaust the tree budget while each item stays individually capped.uniqueIdsand tree-cycle checks still run on ≤200-item lists.Test plan
MAYFLY_LIMIT_EXCEEDEDpnpm run verify:changed— lint, typecheck, build, 2488 tests, 100% coverage on changed filesdsh --profile mayfly-scroll-perfin a 103-session directory:/sessionsrenders rows, tree disclosure,← currentbadge, filter hints — no quota error/sessionsin your session-heavy directory, plus a nearby picker (/plugin,/model)Generated with Devin