Skip to content

FIX: expert mode option handling and add a Lodestar heap size dropdown - #2315

Merged
NeoPlays merged 1 commit into
stereum-dev:mainfrom
NeoPlays:fixes
Sep 7, 2026
Merged

NeoPlays merged 1 commit into
stereum-dev:mainfrom
NeoPlays:fixes

Conversation

@NeoPlays

@NeoPlays NeoPlays commented Sep 7, 2026

Copy link
Copy Markdown
Member

Flag placement bug (src/share/serviceYaml.js)

The "flag is not in the config yet, append it" path scanned the whole file for the last -- token. Since env: comes after command:, for Lodestar the last one is inside NODE_OPTIONS: --max-old-space-size=8192, and that is where the new flag went. Lodestar is the only client affected. Teku's JAVA_OPTS: -Xmx6g has a single dash.

The same block was copy-pasted in four places (two Nethermind pruning defaults, the toggle write, the text write). It is now addCommandEntry() in the new src/share/serviceYaml.js, which:

  • searches only the command: block
  • inserts by index, so flags containing dots are not treated as regex
  • keeps the list indentation
  • returns null when there is no command list, which the toggle path previously crashed on

Six tests, including the Lodestar case as a regression test.

Lodestar max heap size dropdown

The free-text "Node Options" field is gone. Both Lodestar entries now carry an inline Max Heap Size select using Teku's exact GB list.

  • The conversion is a new unitFactor on select options. ExpertWindow divides on read and multiplies on write, so the dropdown speaks whole GB while the flag keeps Node's MB.
  • The pattern captures only the number, so anything else in NODE_OPTIONS survives a write.
  • Configs that do not carry the setting are handled by setEnvFlag() in the same helper module: it appends the flag to an existing NODE_OPTIONS, or adds the variable to the env block, turning env: {} into a block mapping first. This is not hypothetical. The beacon's 8 GB default only arrived in FIX: run restart tasks in parallel, some smaller bugs #2254, and the validator ships with an empty env, so the old free-text field silently did nothing on a validator.

Detect button placement and feedback (ExpertWindow.vue)

The row is a one-row grid and the button had justify-self: end but no align-self, so a fixed-height <img> sat at the top of the 40px row. The title icon two rules below already centered itself that way. Added align-self: center to .toggleTextBox .buttonOn and its .buttonOff twin.

The spinner became a blink: animate-spin to animate-pulse animate-duration-1000. animate-pulse is the app's own idiom, used by the skeleton loaders, and the explicit duration matters because tailwindcss-animated redefines pulse with a 2s cycle, longer than a detect usually takes, so the icon would barely dim before finishing. Confirmed in the compiled CSS that the duration utility lands after .animate-pulse and so actually overrides it.

Verification

  • 285 tests across 37 suites pass
  • eslint over all of src, prettier and npm run build clean

@NeoPlays
NeoPlays merged commit 6bd7cbc into stereum-dev:main Sep 7, 2026
5 checks passed
@NeoPlays
NeoPlays deleted the fixes branch September 10, 2026 10:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant