← 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

User Documents tab

Every user now has a Documents tab listing all uploaded evidence — type, status, expiry, and a download link in one place.

Documents & credentials layer

Competence files now live in a canonical user_documents table with a many-to-many link to competencies. Each document carries a verification status and can be reused across multiple competence claims.

Dashboard and Clockwork auto-refresh

Dashboard KPIs and the Clockwork view now refresh automatically so you see current state without reloading.

No-login request links

Admins can send workers a secure tokenised link to fill in missing information or update competence — no login required. Links expire and are one-time.

Fixed 500 errors on shift creation and signup link creation

Resolved a bind_param type/count mismatch that was returning 500s on both shift creation and signup link creation paths.

Password reset works for users without a user_auth row

Users provisioned before the user_auth table existed can now request a password reset — the flow auto-creates the auth record on first reset.

Removed reCAPTCHA from public registration forms

Public registration no longer routes through reCAPTCHA. Submit handlers were hardened against silent failures as part of the cleanup so a missing third-party dependency cannot strand a submission.

Incident types and categories translated across all four languages

Incident type labels and category names are now available in Norwegian, Swedish, and Danish in addition to English.

Resend appears on contracts where one party has already signed

The Resend action is now available on partially-signed contracts, making it easier to nudge the remaining signer without opening a fresh agreement.

Contract template editor self-hosts Quill 1.3.7

Quill is now bundled rather than CDN-loaded — resolves a loading failure that could leave the template editor blank or non-editable.

Sender counter-signature, signed PDFs, and per-signer audit trail

Sender counter-signature is fully wired up. Signed PDFs include the per-signer audit trail and signature certificate, are attached to the fully-signed notification email, and contract emails carry the sending account's name.

Identity numbers encrypted end-to-end across the platform

Social-security numbers are now encrypted at rest with a per-user salt and account-scoped pepper. Revealing an ID number in the clockwork verify modal goes through a dedicated audit-logged endpoint — every reveal is attributable.

Technical focus: AES-256-GCM • Audit-logged reveal endpoint

Registration forms ship with separate workspace and terminal access toggles

Registration forms now have independent toggles for workspace access and terminal clock-in access. Terminal access is blocked by default on new forms — the more conservative posture.

Public signup provisions a full worker account in one submission

Public registration submissions create the account, send a welcome email containing the PIN and a set-password link, and enforce shift selection on shift-scoped signup links. Removes the manager round-trip for day-of-event onboarding.

Schedule module gains tab navigation, dedicated approvals, group-aware CSV import

Tab navigation surfaces a dedicated Approvals page; shifts now optionally carry a group; CSV import covers group_id and the full current schema. Brings the schedule module up to parity with the rest of the platform.

Live attendance and coverage on the workspace dashboard

Filled slots vs active slots is reported in real time on the workspace dashboard. Replaces the previous "log in to find out" model with operational visibility on landing.

Single background worker for email, automation, and maintenance jobs

Replaces feature-specific cron jobs with a unified worker that polls a shared queue. Stuck-job detection and per-run duration metrics make background work observable end-to-end through one operational surface.

Technical focus: Job queue • Worker coordination • Stuck-job detection

Daily 06:00 crew list and shift overview email per location

Each leaf location can be configured to send a 06:00 crew list and shift overview to its linked users every morning, in the recipient's preferred language.

Per-location crew lists with on-demand PDF, browser, or email export

Workers are linked to one or more leaf locations. Per-location crew lists are produced on demand as PDF, in-browser view, or email — in English, Norwegian, Swedish, or Danish.

PHP error logging enabled in production for faster diagnosis

PHP errors are now logged on production for operator debugging without ever surfacing them to end users.

Login page indexable; the rest of the app stays out of search

Login page is now indexable with a proper canonical URL and meta description. All other pages remain noindex by deliberate policy.

Admin logout now ends the session under the correct cookie path

Admin logout was leaving the session intact due to a cookie path mismatch. Resolved.

Fixed server error on password-reset submission

Hardened HTTP security headers across both web tiers

Permissions-Policy, stricter CSP, and the standard security header set are now enforced consistently at both Apache and Nginx. Eliminates a class of header drift between deployment topologies.

Technical focus: CSP • Permissions-Policy • Apache + Nginx

Dashboard layout polish • flush table edges, accurate shift counts

Cleaned up double borders, fixed shift-time display on the dashboard, and excluded admin-assigned shifts from the approval count.