getUsage() decided [options] by method-parameter arithmetic, which lied in both directions: absent when a command's only options came from interceptors or @options beans (SYNOPSIS denied an OPTIONS section rendered directly below it), and present for purely-positional beans with no options at all. The empty format slot also left a double space in option-less usage lines.
[options] is now derived from the post-link option spec — the same spec that feeds the OPTIONS section, so the two can never disagree — and usage assembles by joining non-empty segments.
Proven by JavadocHelpSynopsisTest (interceptor-only options → 'pull [options] String'; option-less → 'charge String'); 29 fixture goldens corrected accordingly.
getUsage() decided [options] by method-parameter arithmetic, which lied in both directions: absent when a command's only options came from interceptors or @options beans (SYNOPSIS denied an OPTIONS section rendered directly below it), and present for purely-positional beans with no options at all. The empty format slot also left a double space in option-less usage lines.
[options] is now derived from the post-link option spec — the same spec that feeds the OPTIONS section, so the two can never disagree — and usage assembles by joining non-empty segments.
Proven by JavadocHelpSynopsisTest (interceptor-only options → 'pull [options] String'; option-less → 'charge String'); 29 fixture goldens corrected accordingly.