Shift planning tool#143
Merged
Merged
Conversation
Satellite shifts: - Shifts can now have a linked satellite shift with its own location; only primary slots appear in the availability survey - Admin shift planning tab renders satellite shifts inline below their primary, with add/remove controls - Generation resolves satellite availability transparently through the primary shift's survey response Anchor seminar days: - Period creation/edit lets shift managers declare candidate anchor seminar dates - New anchors (wantsAnchor=true, no anchor role yet) select which seminar dates they can attend; the mix/only-anchor radio is hidden for them since they always receive exactly one opening + one closing shift - Responses overview shows a per-date vote table (can attend / cannot attend) with the most-voted day highlighted - Responses individual view shows the user's seminar day selections read-only - Generation excludes new anchor phase-2 slots that fall before the most-voted seminar date or belong to mandatory-party events Role-aware participation survey: - Passive-role members see targeted options (become active / apply to stay passive / become legacy / leave) with a §29.1 constitutional warning when staying passive - Legacy-role members see only two options (stay legacy / leave) - All others see renamed options (Active member / Passive member / Legacy member / Implicit member) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix stale-closure bug in ExistingUsersTab role multi-select: save was triggered in onOpenChange which read outdated state; moved save into onChange using the committed value argument so removals persist correctly - Grant anchor roles to new anchors in a separate committed write before the bulkWriter that creates engagements, ensuring roles are in place when downstream logic reads them; remove the now-unnecessary informational alert from the availability survey Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ShiftPlanningResponsesPage (810 → 400 lines): - Extract useResponseEditor hook: encapsulates all editor state, load effect, and submit handler for the individual-response editor panel ShiftAvailabilityPage (779 → 415 lines): - Extract SemesterParticipationCard: role-aware participation radio groups with passive §29.1 alert - Extract AnchorPreferenceCard: anchor yes/no toggle, mix/only radio, and seminar day checkboxes - Extract EventAvailabilityGrid: event can/cannot cards with per-shift checkboxes - Deduplicate the submit-disabled condition into a single isSubmitDisabled variable ShiftManagement (769 → 490 lines): - Extract usePeriodForm hook: period create/edit form state, validation, and API calls ShiftPlanningTab: - Remove explanatory comment that restated what the code already expresses Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- createShiftPlanningPeriod: write anchorSeminarDays to Firestore (field was missing from addDoc call) - useResponseEditor: pass anchorSeminarDays through admin submit so member selections aren't overwritten with [] - ShiftPlanningTab: correct Popconfirm description — generation adds to unassigned slots, existing engagements are kept Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ount - createShiftPlanningPeriod: persist anchorSeminarDays to Firestore (was silently dropped from addDoc) - useResponseEditor: pass anchorSeminarDays through admin submit so member selections aren't overwritten with [] - ShiftPlanningTab: correct Popconfirm description — generation fills unassigned slots, existing engagements are kept - Remove replacedEngagementCount: was always hardcoded to 0 and never read by any caller Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…s, clean up result type - Remove the early-exit HttpsError for !allSubmitted && !afterDeadline; generation now always proceeds. Non-submitters are treated as participationStatus 'leave' so they receive no shift assignments. - Warn shift manager in the Popconfirm when N members have not submitted, making clear they will be treated as leaving the bar. - Convert unmetMandatory entries into structured 'mandatory_assignment_not_met' warnings so they appear in the generation warning list instead of being silently returned and ignored. - Remove dead result fields: afterDeadline, allSubmitted, missingSubmissionUserIds, unmetMandatoryCount, unmetMandatory. Update warning code union on frontend to match. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…chor grants Instead of only granting Role.ANCHOR to new anchors, generation now computes a unified role update per user: strips passive/legacy, adds anchor if applicable, then adds back passive or legacy based on participationStatus. All applied in one write per user before the engagement bulkWriter, eliminating the previous two-step anchor-only grant. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bumps [mailgun.js](https://github.com/mailgun/mailgun.js) from 12.9.0 to 13.0.0. - [Release notes](https://github.com/mailgun/mailgun.js/releases) - [Changelog](https://github.com/mailgun/mailgun.js/blob/master/CHANGELOG.md) - [Commits](mailgun/mailgun.js@v12.9.0...v13.0.0) --- updated-dependencies: - dependency-name: mailgun.js dependency-version: 13.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
…nctions/dev/mailgun.js-13.0.0 Bump mailgun.js from 12.9.0 to 13.0.0 in /functions
Shift Planning module
Scroll-Bar
approved these changes
Apr 30, 2026
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.
No description provided.