A slot whose date changes keeps its old place, so a date-ordered list falls out of order
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 75/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- typescript
- 領域
- backend
調査の方向性
Start by reading updateSlot in src/services/slots.ts and SLOT_DISPLAY_ORDER in src/services/locks.ts to see how slots are ordered. Implement conditional renumbering via writeSlotOrder as reorderSlots does, then run src/services/slots.db.test.ts and pnpm checks. Done when date-ordered signups auto-move the edited slot and hand-ordered ones stay put.
索引モデルが issue の本文から書いたものです。
説明
Needs your OK: this changes the order slots appear in, for organizers and participants, after a slot's date changes. Swap pipeline:proposed for pipeline:ready to have it built.
What happens
When an organizer corrects a slot's date, the slot keeps its old place in the list. On a signup with "Setup crew, Sat Nov 21" and "Cleanup crew, Sun Nov 22", moving Setup crew to Nov 28 leaves it first, so the public page and the builder both read Nov 28, then Nov 22. A participant scanning down the list by date meets the later day first, and nothing tells the organizer the list is now out of order.
Slots are shown by sortOrder first and their date second (SLOT_DISPLAY_ORDER in src/services/locks.ts). updateSlot in src/services/slots.ts sets the new slotAt but leaves sortOrder alone. Keeping the organizer's own order is deliberate, since they can drag rows; the gap is the case where the list was in date order and one edit broke it.
Fix, in outline
- In
updateSlot, when a slot'sslotAtchanges and the signup's other slots were already in date order (byslotAt, with the moved slot in its old place), give the moved slot the place that keeps date order, renumbering throughwriteSlotOrderasreorderSlotsdoes. - When the list wasn't in date order before the edit, change nothing: the organizer arranged it by hand.
- Slots with no date stay where they are.
- The builder shows the row in its new place after the save, not only after a reload.
Choices this makes
- Move it automatically, only when the list was already in date order. Default: yes. A list sorted by date is almost always meant to be, and a list arranged by hand is left alone. The alternative, a "Sort by date" button, adds a control and still leaves the list wrong until someone notices.
- The same rule for the AI tools. Default: yes, since
update_slotcalls the same service.
Watch for
src/services/slots.db.test.tsand the capacity and reschedule tests: the moved slot'sslot.rescheduledrow and its commitments must not change.- Signups grouped by date: the moved slot must land in its new day's group, and the groups must stay in date order.
- The row's position moving under the organizer's mouse right after Done. If that's jarring in the builder, keep the move but don't animate it.
- CHANGELOG entry.
Done when
- On a date-ordered signup, changing one slot's date moves it to its date's place, in the builder and on
/s/[slug], with its sign-ups unchanged. - On a hand-ordered signup, changing a date moves nothing.
- A DB test pins both cases.
pnpm lint && pnpm typecheck && pnpm knip && pnpm test && pnpm test:dbpass.
Found by the UX walkthrough, scenario O4, on opensignup-prod main at 651da5b (this repo at 208a077). Checked against SLOT_DISPLAY_ORDER and updateSlot at 208a077.
Generated by Claude Code
- 主要言語
- TypeScript
- スター
- 19
- フォーク
- 4
- 平均マージ
- 19時間 27分
- マージ済み PR(30日)
- 199
環境構築
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
richshaw/OpenSignup のほかの issue
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
richshaw/OpenSignup#794 ·
メンテナーはふだん 1 日以内に返信
-
enhancement pipeline:proposed pipeline:ux
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
richshaw/OpenSignup#654 ·
メンテナーはふだん 1 日以内に返信
-
Slot times are shown with their own copy of the HH:MM rule that saving them checks対応中かも @novakzx が 1 日前に担当しました。 オープンenhancement good first issue pipeline:ready
難易度 2/5 1〜3時間 初心者へのやさしさ 25/100
richshaw/OpenSignup#805 ·
メンテナーはふだん 1 日以内に返信
-
The sign-up dialog decides "See alternatives" with its own copy of the rule behind "Pick another slot."対応中かも @dafeiyupola が 1 日前に担当しました。 オープンenhancement good first issue pipeline:ready
難易度 2/5 1〜3時間 初心者へのやさしさ 25/100
richshaw/OpenSignup#803 ·
メンテナーはふだん 1 日以内に返信
-
A failed database query logs its parameters, so OAuth tokens and participant details can end up in the logs対応中かも @richshaw が 2 日前に担当しました。 オープンbug pipeline:building
richshaw/OpenSignup#800 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
richshaw/OpenSignup の issue をすべて見る
似ている issue
-
twilio.webhook() rejects valid requests when the query string has an encoded `?` and a `+` spaceオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
twilio/twilio-node#1232 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
メンテナーはふだん 1 日以内に返信
-
Tiling managers are not destroyed in disable(), so window-created handlers keep running (Gio.Settings constructed without schema)対応中かも @gnacho が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
domferr/tilingshell#641 ·
メンテナーはふだん 3 日以内に返信
-
🐛 bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
LibreChat-AI/LibreChat#17887 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100