Repository source: docs/plans/event_time/event_time_step1_solution_assessment.md
Original Query
Please add event time and duration to the event framework. If you think this fits within the context of one theme, please add a date/time selector for the event form. Please write Step 1 of docs/fdp/FEATURE_DEVELOPMENT_PROCESS.md. [Before approving Step 1, the user narrowed scope: "Let's leave duration out of it for now."]
Understood Intent
Scope is now event time only; duration is explicitly out for this feature and may come later as its own slice.
"If you think this fits within the context of one theme" asks the assistant to judge whether the richer date/time picker should be
mitrapclub-only or general. Checked before writing this: the existing event framework (event_date/event_location/event_link) is not theme-scoped today — it was deliberately made available to any site profile inevent_feature_gating(docs/plans/event_feature_gating/event_feature_gating_step1_solution_assessment.md), gated only by the site-mutableFORUM_EVENT_SUPPORT_ENABLEDflag, and the single compose-form partial (templates/partials/thread_compose_form.php) that renders the event fields has no profile-specific branch anywhere in it. Judgment: no, it does not fit within one theme — it should extend the same way the rest of the framework already works, for every profile with event support enabled, not forked formitrapclubalone.Checked the current code before writing this:
event_dateis validated and stored as a strictYYYY-MM-DDstring (no time component) in both the canonicalEvent-Date:header and the read-modelthreads.event_datecolumn; the compose form's date field is a plaintype="text"input with aYYYY-MM-DDplaceholder, not a native picker.
Problem Statement
A posted event captures only a date, location, and link — never a start time — and the compose form's date field is a bare text box with no native picker.
Solution Options
Option A: One new additive field (
event_time), general scope, native pickers for every profile. Addevent_timealongside the existing three event fields, following the same header/column/validator/template pattern already established forevent_date/event_location/event_link; swap the compose form's event-date input to nativetype="date"and add a nativetype="time"input forevent_time, in the one sharedthread_compose_form.phppartial, so every profile with event support enabled gets the improvement.Pros: consistent with the framework's existing general-purpose architecture; purely additive — no change to the already-shipped
Event-Dateheader/column, no data migration, no fork of the shared compose form; native pickers are a real UX improvement wherever events are used, not just for one profile.Cons: a shared-template change, so a markup regression would affect every profile's compose flow, not just
mitrapclub(bounded by the existing smoke-test coverage of that partial).
Option B: Same new field, but native pickers only for
mitrapclub. Identical data model to Option A, but gate the nativetype="date"/type="time"markup behind a presentation-slot check so onlymitrapclubgets the richer widgets; other profiles keep today's plain text inputs.Pros: literally answers "fits within one theme" by making the picker itself theme-scoped.
Cons: forks the compose-form partial for the first time ever — a structural change larger than the payoff justifies, since a native date/time input is strictly better for any profile using events, not a
mitrapclub-specific aesthetic choice; inconsistent with Cycle 4's deliberate decision to keep the framework general.
Option C: Replace
event_datewith a combinedevent_datetimefield. Merge date and time into one ISO-8601 field with a nativetype="datetime-local"input.Pros: one field/one picker is a slightly simpler mental model than separate date+time.
Cons: breaking change to the already-shipped
Event-Datecanonical header and read-model column that every existing event thread already uses in date-only form — needs a migration or dual-format parsing path, neither of which exists anywhere in this codebase today; conflicts with the process guardrail to avoid schema changes/lean on existing models where feasible.
Recommendation
Option A. It directly resolves the "one theme" question: no — the framework is already general-purpose, so the new field and the native pickers should ship the same way, for every profile, not forked for mitrapclub. It's also the smallest change: one new nullable column/header, zero changes to the already-shipped date/location/link fields, and no data migration for threads that already have an event date but no time.
Vertical-slice viability: Yes. Entry is any member composing a thread on a profile with event support enabled; outcome is an event thread that can optionally carry a start time, entered through native browser date/time controls, validated the same way the existing event fields are, and rendered in the event block alongside date/location/link. Recovery is trivial: the new field is optional, so omitting it changes nothing, and every already-posted event thread (time absent) continues to render exactly as it does today.
Waiting for "Approved Step 1" before drafting Step 2.