The Build tab lets a list get a 21st item or one over 60 characters, then rolls it back with a cryptic error

オープン
#784 コメント 0 件 リアクション 0 件 担当者 1 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@richshaw がすでに取り組んでいます。

2026年11月3日 から。

  • #789 @richshaw による — オープン

評価

この issue はまだ評価されていません。

説明

bug pipeline:building pipeline:ux

What happens

A List field allows at most MAX_CHOICES (20) items, each at most CHOICE_MAX_LENGTH (60) characters (ChoiceSchema and the enum config in src/schemas/slot-fields.ts). The Build tab's list picker doesn't enforce either limit:

  • EnumPicker (src/components/build-wysiwyg/EnumPicker.tsx): "Add to list" is always shown, the "New option name" input has no maxLength, and commitNew only trims the text and checks it isn't empty.
  • onAddEnumOption in BuildWysiwyg.tsx (also used by WysiwygGroup.tsx) skips duplicates only, and sends [...choices, value] with no count check.

Example: an organizer running a potluck with 20 dishes types "Dish 21" and adds it.

  1. The cell shows "Dish 21" straight away.
  2. The field save is refused ("Array must contain at most 20 element(s)").
  3. The slot save behind it goes out anyway and is refused too.
  4. The cell rolls back.

What stays on the save rail is the slot refusal, "dish" must be one of: Dish 1, Dish 2, … Dish 20. Nothing says a list holds 20 items. A 61-character item goes the same way.

sanitizeEnumChoices caps the list at 20, but only when a field is first created.

Fix, in outline

  • Export CHOICE_MAX_LENGTH (and MAX_CHOICES, if it isn't already) from src/schemas/slot-fields.ts and import them on the client. Don't type the numbers.
  • In EnumPicker:
    • put maxLength={CHOICE_MAX_LENGTH} on the new-item input;
    • when the list already has MAX_CHOICES items, hide the "Add to list" footer and show a short line in its place, such as "A list holds up to 20 items."
  • In onAddEnumOption, return early at the cap as a backstop.

Watch for

  • Both pickers. The slot editor and the group header use the same component and handler. Check both.
  • Existing tests. BuildWysiwyg.test.tsx covers Enter and blur-to-add (#656, #692). Keep those passing.
  • Help pages. Run the help-pages skill's affected-articles.mjs. If an article describes adding list items, mention the limit and update its UI list if a control's name changes.
  • Out of scope: the slot save still runs after a failed field save. That's a separate change.

Done when

  • An EnumPicker test: with 20 options, there is no "Add to list" and the limit line shows. With 19, "Add to list" is there.
  • A test that the new-item input caps at 60 characters.
  • pnpm lint && pnpm typecheck && pnpm knip && pnpm test pass.

Found by the pipeline's bugs scout in the Build tab's list picker (src/components/build-wysiwyg), at 8e63fab. Checked by an independent verifier with a scratch component test: "Add to list" stayed enabled at 20 items, both saves were refused, and the rail ended on the "must be one of" message. https://claude.ai/code/session_016YZ9SUw2vvaNxfSUsArR5B

主要言語
TypeScript
スター
19
フォーク
4
平均マージ
19時間 38分
マージ済み PR(30日)
197

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

richshaw/OpenSignup のほかの issue

richshaw/OpenSignup の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。