Skip to content

v1.15.2 - #157

Merged
pataniaeli merged 20 commits into
mainfrom
dev
Sep 19, 2026
Merged

pataniaeli merged 20 commits into
mainfrom
dev

Conversation

@pataniaeli

Copy link
Copy Markdown
Collaborator

No description provided.

pataniaeli and others added 18 commits September 16, 2026 16:42
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>
Its file carried 20260915000000, the version dev's space_booking_series
migration already uses. Production recorded meeting_time as 20260916005401,
so the file is named after that, as #119 and #140 did for theirs. Contents
unchanged.

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>
@pataniaeli pataniaeli self-assigned this Sep 19, 2026
@vercel

vercel Bot commented Sep 19, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
chambers Ready Ready Preview Sep 19, 2026 1:53am UTC

@pataniaeli pataniaeli added bug Something isn't working enhancement New feature or request revision Nothing is broken, but something needs to be resolved labels Sep 19, 2026
pataniaeli and others added 2 commits September 18, 2026 21:49
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…-rename

Rename Attendance Manager link to SenatePortal
@pataniaeli pataniaeli linked an issue Sep 19, 2026 that may be closed by this pull request
@pataniaeli
pataniaeli merged commit 44e82d9 into main Sep 19, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working enhancement New feature or request revision Nothing is broken, but something needs to be resolved

Projects

None yet

1 participant