← HR Cluster

Changelog

Operational and technical updates to the HR Cluster platform.

Types of changes
Added New functionality or modules.
Updated Improvements or changes to existing functionality.
Core Major architectural, platform-wide, or operational changes.
Deprecated Features scheduled for removal.
Removed Features or functionality removed.
Fixed Bug fixes and issue resolution.
Security Security improvements or vulnerability fixes.

2026

Risk • SJA form and detail polish

The SJA workspace edit form gains a multi-pill participants picker with progressive disclosure for participant rows, replacing the previous single-select control. The mobile readiness stepper was redrawn with cleaner circles and a calmer connector line, and the readiness checkbox primitive plus the operational-selection primitive are now unified across every SJA surface so behaviour and visual weight match end to end. Buttons inside the tinted state card now sit on a solid white background for legibility, and a missing CSS variable that affected the detail view's green tint is restored.

Risk • report an incident directly from an active SJA

Operators can now report an incident straight from an active risk assessment. The SJA stays intact as the operational document; the incident is recorded as a separate event that links back, and one SJA can spawn many incidents over time. The RA detail page gains an Escalation tier in Quick Actions and a Related Incidents sidebar, and the incident detail strip carries a bidirectional Linked risk assessment line.

Risk • public risk-assessment-create tokens converge to lowercase URLs

Public risk-assessment-create links now use a lowercase prefix (racr-). Existing uppercase RACR- links are 301-redirected to the canonical lowercase form, so any previously shared or printed URLs keep working without manual reissue.

Reporting forms • flat operational-path location picker

Every reporting form that asks for a location (public Incident, public SJA, workspace SJA edit) now uses the same flat operational-path picker. Rows are compact single-line entries with the parent prefix muted and the leaf-location name strongly weighted, and search results are sorted parent-first so the venue path reads naturally. The flat picker replaces three separate nested controls and gives reporters one consistent mental model wherever they pick a location.

Incidents • public form converged with SJA style and two-step review

The public Incidents form was rebuilt to match the public SJA visual language end to end. The freetext location input was replaced with the unified location picker (saved location plus a "use custom" fallback), and a two-step review pattern was added so reporters can verify their submission before sending. The redesigned form lands operators in the same visual hierarchy whether they are reporting a hazard or filing an incident, removing the previous style mismatch between the two.

Locations • zones and gates with cascading pickers across SJA and Incidents

Locations now carry two new child entities: zones (operational areas like Backstage, Front of House, Stage Left) and gates (controlled access points like Main Gate, Crew Gate). Both attach to any location, parent or leaf, and a gate can optionally link to a zone within the same location. The workspace and public SJA forms plus the public Incidents form all gained cascading zone and gate pickers below the location picker; selections appear on detail views as a chained Location • Zone • Gate label. The Locations index gets a pill-nav for filtering between Locations, Zones, and Gates, plus a structured detail page where all three children share the same card pattern.

Schedule • single-keystroke shift assignment and unified modal ESC handling

Assigning a worker to a shift now submits on Enter inside the inline picker. Type a name, hit Enter, the shift is assigned without a second click on the Assign button. Modal ESC handling was also consolidated through a single registry so every overlay (shift detail, document viewer, competence review, generic modals) closes consistently and no longer fires during CJK IME composition.

Groups • parent picker in the edit modal with leaf-only safeguards

The group edit modal now exposes a parent-group picker, so a top-level group can be turned into a subgroup, and a subgroup can be moved between parents or promoted back to top level. The picker disables with a hint when the group has its own subgroups (which would push the structure past the two-level cap), and the save handler rejects any move that would either create a third level or relocate users out of a leaf group, matching the same leaf-only rule the create path already enforces.

Users • request national ID number through the missing-info banner

The amber missing-info banner on a user profile now requests the national ID number when it's empty, and the public missing-info request form prompts for it under the Personal section in every supported language. The submitted value is encrypted at rest like every other sensitive ID column.

Sessions • parent-group rollup and local-day attribution

Parent-group session views previously showed zero sessions because the filter required an exact group-id match. Parent groups now roll up their own sessions plus all direct subgroup sessions; leaf groups remain unchanged. The default day filter on group and project session pages also flips from today to All, matching the projects-sessions behaviour. Separately, session day attribution for regular / overtime splits now consistently uses the account-local day instead of the UTC day, so totals match the displayed timestamps on accounts whose local time straddles midnight UTC.

Sessions • clearer Worked-hours summary and unified mobile card grid

Sessions summary cards now show Worked hours as a single top-line total with Regular and Overtime indented underneath, so the breakdown reads as a classification of the same worked total rather than two figures stacked on top of each other. The mobile session list adopts a compact two-row card grid across user, group, and project sessions (name and status pill on row one, date and duration on row two), so the same card pattern is in use everywhere sessions are listed.

Schedule Statistics • time breakdown card and unified ratio tables

The Statistics page gains a Time breakdown card that buckets the planned / filled / clocked triplet by time (2-hour buckets up to 30 hours, daily beyond that), making coverage gaps surface against the actual hour of day. Both stats tables now share two ratio columns: Coverage (filled / planned) and Clocked (clocked / filled), with a consistent 50 / 80 / 100 severity ladder. Manual datetime edits in the toolbar now wait 1500ms before submitting and correctly de-activate the preset pill, fixing a long-standing edit-on-every-keystroke bug.

Schedule • day-board layout with global-modal shift detail and location filter

Schedule's three timed views (1-Day, 3-Days, Week) now share a single lane-based board layout with vertical guide rails per day, anchored to a shared visual bottom so the board reads as a coherent grid regardless of shift count. Shift detail moves from an inline-expanding panel to a global modal with structured header, Assigned and Staffing sections, and Open-details / Edit-shift actions; the same surface renders on every viewport. The toolbar gains a location filter (when the locations module is on), the "Today" label is renamed to "1 Day", and mobile reflows the date picker and Add shift onto a single row above the filter grid.

Crew List • email a PDF of the day's crew and shifts

Operators can email the day's crew roster as a PDF directly from the Crew List view. The recipient field uses the standard user typeahead, and delivery routes through the shared email template system so wording and language follow each recipient's resolved preference rather than the sender's session language. Export, email, and print actions now share one equal-width mobile action row.

Scheduling • unified toolbar system across Schedule, Crew List, and Statistics

Schedule, Crew List, and Statistics now share the same toolbar layout. Date controls, filter pills, and period navigation land on one row at typical desktop widths and stack predictably on phones. Role-based filter pills replace the search field on the main Schedule view, and the "Add shift" CTA only appears where it makes sense (the main Schedule view, not Crew List or Statistics).

User import • admin language no longer leaks to imported accounts

Importing users while signed in as an admin no longer writes the admin's session language onto the new user records. Imported users now inherit the account default and resolve their own preferred language on first interaction, matching the recipient-language rule the rest of the platform already follows.

Users • food allergy confirmation modal redesigned

The food allergy confirm modal now uses a clear title plus body layout, and the request action moves up to the card header so the most common operation is reachable without expanding the card.

Risk • workspace polish for live operations

Risk assessment detail pages now use a card-grid hazard layout with severity-driven tints and a clearer event hierarchy. Live SJAs expose an expanded controls section so operators can act on safety measures during the work itself, not only after the fact. The public risk form hides the submitter block for signed-in visitors so backend users do not re-enter their own details.

Dashboard • project and location scope filtering

Dashboard widgets now scope to a chosen project and location. Filters are resolved server-side and cached per scope key, so switching scope reloads the matching widget set without a full page reset. The scope controls only render when more than one project or location is enabled, keeping single-scope accounts uncluttered.

Staffing chart • clocked-in series now the primary operational signal

The staffing chart now prioritizes live attendance as the primary operational signal, with scheduled coverage rendered behind it for comparison. Chart readability was improved across dense overlap scenarios, and NOW indicators now hide automatically outside the active time window. Mobile and desktop rendering were tuned for clearer visual separation between planned and live staffing levels.

Schedule • date-range staffing statistics with per-location breakdown

A new Statistics page under Schedule charts staffing across a configurable date range, with stats split by location and presets (today, week, month, custom). The chart adapts x-axis labels to the range, renders localized headers, and exports cleanly to PDF (embedded SVG) and CSV. Preset chips stay lit across prev/next period navigation, and the mobile layout flattens the location list into one card-per-row hierarchy that extends up to tablet widths.

Comms • live-linked supplier contacts and pre-flight import counts

Suppliers can be added to contact lists as live-linked entries. Renaming a supplier or editing its contact details propagates to every list that includes it. The import modal now previews how many entries are new, already present, or missing required contact info before the operator confirms.

Workspace • incidents and risk assessments aligned

Both modules now share a stable reference scheme (IR-YYYY-NNN for incidents, equivalent for risk assessments), the same list column layout, identical filter chips, and matching detail-page hierarchy. The reference column is first and stays visible on mobile. Filtering by status, group, or owner now behaves the same in both modules.

Incidents • convert directly to a linked risk assessment

Any incident can now be converted to a risk assessment in one action. The incident's basics, location, and reporter prefill the SJA edit form so the operator lands straight in editing. The original incident keeps a permanent link to the resulting SJA so the audit trail stays intact across both modules.

Risk • public SJA workflow with phased form and v2 taxonomies

A public risk-assessment form is now available per account. The form steps through five phases (basics, hazards, controls, participants, readiness) with mandatory-field gating between phases. Hazard and control taxonomies group under six operational domains so every SJA pulls from the same vocabulary. Submitting from the readiness step lands the assessment in logged status without an extra approval click.