v1.15.2 - #157
Merged
Merged
v1.15.2#157
Conversation
A booking's start and end times describe the reservation -- the window the room is held for, which is what CSC is told. They are not when the body meets: a committee that books 6:00-9:00 to allow for setup still tells its members 6:30. Every member-facing surface reported the reservation window, so every one of them answered the wrong question. Meeting Time is a `time` on the tables that own functional times -- the weekly series, its per-week occurrences, and one-time and tabling sessions. Nullable everywhere, with NULL meaning inherit and resolving in the end to start_time, the same convention weekly_room_occurrences already uses for room, time and status. Nothing needs backfilling and no insert path can break: a booking with no meeting time set reads exactly as it did before the column existed. The Slack committee reminder now states the meeting time alone rather than the reservation window, as the issue asks. My Rooms leads its cards, list rows and calendar entries with it, naming the window only when the two differ so the cards keep the height issue #78 settled on; the detail modal shows both, always. Both booking emails carry it, and a week whose only edit was to move when it meets now counts as moved, so its members are told. Applied to the database as migration `meeting_time`; rollback script included. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Editing the whole series now offers the Location selector. Every upcoming week that can take the move goes to the new space, checked the way a week moved on its own already was -- all of its time is newly claimed there, so overlap, blackouts and advance notice apply. Weeks that can't move keep their time and space and are listed, as with a time change, and the series itself records the new space so weeks added by extending it land there too. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Marking a request Done applies what it asked for, so its reservations become Cancelled or Virtual (#96). That is wrong for a request that cannot be acted on -- most often one made too late for CSC to release the room, so the booking stands. There was no way to close such a request without cancelling the booking. Dismiss closes it as the new 'Dismissed' status and puts the booking back as it was. "Leave the status alone" would not have been enough: submitting a request overwrites every covered row with Pending Cancellation and kept nothing of what was there, so a dismissed booking would have stayed pending -- which is exactly what Auto-Cancel then cancels. A request now records, as it is made, the status each row it writes to held before (cancellation_requests.previous_statuses). That is the row actually written, not always the one the request names: a series-level request on a weekly booking writes the series row, and its weeks inherit from there. A week that was inheriting is recorded as null and goes back to inheriting. Dismissing restores those rows, except any an admin has changed since or that another open request still covers, and the write is guarded on the row still being Pending Cancellation. Requests from before this change recorded nothing; dismissing one closes it and tells the admin the booking still needs setting by hand, rather than guessing. Only an open request can be dismissed: undoing one already Done would reverse a cancellation that has been acted on and emailed. Nothing calendar-side is needed. Pending Cancellation leaves an event as it was (#69), so returning to the status before it changes no one's calendar. Migration applied to production, and named after the version it recorded. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Booking blocks truncated the title to one line whatever their height, so an hour-long booking read "Website Creat" above four empty lines. Half-hour blocks were worse: title and host sat side by side, the host kept its full width, and the title was left with "W.". Each block now works out how many lines fit its height and gives the title as many as it can, wrapping and then clamping. The host's name gets a line of its own only when there is room for both, since the title is what tells one booking from another. Long words break rather than cut off, which matters in the narrow All spaces lanes. Clicking someone else's booking now opens it read-only: the full title, space, day and time, whether it repeats, the host, and the attendees. External guests are counted but not listed by address, as the room display already does (#132). Your own bookings still open the editor, and a click on an empty lane beside a booking still books. Viewing works for people who cannot book too, since it claims no time. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
An audit row held one status, taken from the booking as a whole: the first session of a one-time booking, a comma-joined list for tabling, the series for weekly. Since bookings grew sessions and per-week overrides that answered nothing. Cancelling one week of a series logged the series' "Reserved", and a room change logged the same row as a save that changed nothing. Each entry now names what it is about -- the booking, the weekly series, one week, or one session, by date -- and carries the fields that changed as the same from -> to strings the update email uses. A save touching three weeks writes three entries in one insert, so they share a created_at and the Audit tab shows them as one action under the admin who made it, newest first. - Weekly: an entry for the series if it moved, and one per week whose own overrides moved, including senate session, visibility and event. A week is compared against the new series values on both sides, so one that merely follows a changed series does not repeat the series entry. - One-time: sessions matched by id (stable since #69): updated, added, removed. - Tabling: sessions still get new ids on every save, so they are paired by date in start-time order; one moved to another day reads as removed and added. - Mark as Done and Auto-Cancel log each cancelled week or session, not one row per booking. - Creating a booking and the admin Cancel button are logged; neither was. Entries from before this keep showing as they did, marked as a single booking-wide status. user_alerts still points at one entry per save. Migration applied to production, and named after the version it recorded. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Dismiss restored the statuses a request had overwritten. It should not: a dismissed request leaves its booking at Pending Cancellation, and the admin sets it to whatever fits in the booking editor. What that is depends on why the request could not go ahead, which Chambers cannot infer. Dismiss now only closes the request as 'Dismissed' and logs it. The submit route and pending-cancellations helpers go back to exactly what dev has, and previous_statuses, which only the restore used and which never held data, is dropped from production by its own migration. A dismissed card says the booking is still Pending Cancellation, so a closed request does not read as though nothing is left to do. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ellations Let an admin dismiss a cancellation request (#139)
…format (#120, #139) #144 logged a dismissal the old way, as a single 'Cancellation Dismissed' status for the booking. It is now an entry like every other: aimed at what the request covered (one week or session by its date, or the series or booking as a whole), with action 'dismissed', no changes, and the booking's real status afterwards, Pending Cancellation. No entries were written the old way in production, so nothing needs converting. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Make each audit entry say what changed, and where (#120)
…tting Wrap SGA Space booking text, and let anyone view a booking (#142)
Resolves the conflict #137 predicted: #132 (external attendees) and this branch each added a field to the same series PATCH destructuring, week and series updates, and the modal's series submit body. Both are kept -- space_id from #127 and external_attendees from #132. Every place this branch moved the series onto the new spaceId is unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Two conflicts, both lines each side added to: - tabling PATCH: the previous-sessions select keeps meeting_time (#126) and reservation_code (#120's audit). - weekly route: both the meeting-time and audit imports. The Audit tab's per-week and per-session entries (#120) compare a fixed list of fields, which predates meeting time, so a week whose only edit was its meeting time would have been logged as "Saved with no changes". Meeting time is added to the weekly, one-time and tabling field lists, compared resolved, so a blank value reads as the start time it stands for rather than as a change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…g it (#126) Cards led the time line with the meeting time in bold, run together with the reservation window. That was hard to read. The start time and the reservation now sit on separate labelled lines, "Start Time" and "Reserved", with no bold, and both always show so every card has the same shape. The Senate session badge moves beside the date to make room. The list and calendar rows lose their emphasis too. Where the two times differ they are labelled, since two unmarked times in a row do not say which is which; where they match the row reads as it always did. The detail modal calls the field Start Time, unbolded, as the cards do. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Add a Meeting Time distinct from the reservation window (#126)
…-change Let a whole weekly SGA Space booking change space (#127)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was
linked to
issues
Sep 19, 2026
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…-rename Rename Attendance Manager link to SenatePortal
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.