v0.26.1 Mobile UI HotfixiPhone menus + modal reachabilityCurrent beta
- Fixed the mobile Week actions menu so it opens to the right of its button and remains inside the phone viewport instead of overflowing off the left edge.
- Fixed Data & Sync, Changelog, Feedback and other full-screen dialogs on mobile so their top edge and close button remain reachable with Safari's dynamic browser chrome.
- Made dialog headers sticky while their contents scroll, preserving an always-reachable close control on long panels.
- Banked O/T remains a future feature pending confirmation of the exact payroll rules; no payroll calculation rules changed in this hotfix.
- Cloud encryption/sync, personal-data schema v4 and locked roster/payroll datasets remain unchanged.
v0.26.0 Hosted Tester Releaserosterbot.work deployment
- Embedded the public Supabase project URL and publishable browser key so users at rosterbot.work can create an account or sign in without developer connection setup.
- Connection settings remain available only as an off-domain developer fallback; no secret/service-role credential is included.
- Includes the validated encrypted Cloud Sync, trusted-device, recovery-key and atomic key-management stack from v0.25.2a/v0.25.2b, plus the v0.26.0 RC tester polish.
- Locked roster/payroll rules and personal-data schema v4 remain unchanged.
v0.26.0 Hosted Tester ReleaseStabilised encrypted Cloud Sync + diary polish
- Promoted the validated local-first Cloud Sync stack for real tester use: persistent account sessions, automatic two-device sync, safe conflict handling, AES-256-GCM cloud encryption, trusted-device/session-only unlocks, passphrase rotation and recovery-key replacement.
- Includes the corrected Supabase key-management backend used in the successful credential-revocation tests; payroll and official roster logic remain unchanged.
- Fixed the desktop day-editor PDT control so its label receives the full drawer width instead of wrapping in a narrow half-column.
- Added 1000-character limits to daily diary notes and fortnight notes, plus a 120-character limit to custom claim descriptions, to keep personal sync payloads reasonably bounded without affecting normal notes.
- Cleaned tester-facing Cloud Sync setup wording while retaining manual public project URL/publishable-key configuration on fresh devices.
- Banked overtime and live calendar subscription are intentionally not included yet; both are being specified separately so they do not disturb this stabilised release.
v0.25.2 Encryption Key ManagementPassphrase rotation + recovery-key replacement
- Added Change encryption passphrase for an already-unlocked encrypted cloud. It re-wraps the existing 256-bit master key; the master key, keyed sync fingerprint and encrypted roster body remain unchanged.
- Added Replace recovery key, generating a fresh
RBK1-… secret and requiring the new key to be saved before commit. - Key-management changes use a new atomic Supabase RPC that creates the new wrapper revision and deletes older cloud revision history in the same database transaction. This is intentional: retaining old revisions would retain old passphrase/recovery wrappers and defeat credential revocation.
- Key-management is permitted only when encrypted cloud is unlocked and Safe Sync is Up to date. Server expected-revision checks still block races.
- Trusted-device/session-only behavior from v0.25.1a, AES-256-GCM roster encryption, HMAC-SHA-256 sync fingerprints, local-first operation, schema v4 and locked payroll/roster logic remain unchanged.
v0.25.1a Session Unlock hotfixPreserve session-only encryption unlocks
- Hotfix: repeated session/UI refreshes no longer reload the cloud key from persistent storage when the same account is already active. This fixes session-only unlocks being immediately discarded after unlocking with “Remember on this device” turned off.
- Trusted-device persistence still reloads the remembered key on a fresh page/browser start and after a later sign-in.
- Lock & forget still removes the remembered key; signing out still retains a trusted key by design; encrypted Safe Sync, automatic sync and payroll/roster logic are otherwise unchanged.
v0.25.1 Trusted Device polishPersistent cloud-key UX + safer local clearing
- Makes the existing “remember this device” encryption-key persistence visible in the normal Cloud Encryption card: trusted devices identify themselves explicitly, session-only unlocks can be promoted to trusted without re-entering a passphrase, and the lock action clearly forgets the saved key.
- Signing out continues to remove the Supabase login session while deliberately retaining the trusted encryption key for that account on this browser. Signing back in can therefore resume encrypted automatic sync without another encryption unlock.
- “Clear saved data” now also forgets remembered cloud encryption keys and local crypto-profile metadata on this browser while leaving the encrypted cloud copy untouched. This matches the privacy meaning of clearing local RosterBot data.
- Trusted-device copy now warns that private browsing/site-data clearing can discard the remembered key and that anyone with access to the trusted browser profile may use the locally remembered cloud key.
- v0.25.0 AES-256-GCM payload encryption, PBKDF2 passphrase wrapping, recovery-key unlock, HMAC fingerprints, encrypted conflict handling, v0.24.3d sync readiness/CAS protection, locked payroll/roster components and personal schema v4 remain unchanged.
v0.25.0 Encrypted Cloud SyncClient-side encryption + recovery key
- Added optional client-side encryption for Cloud Sync. Personal roster/pay payloads are encrypted in the browser with AES-256-GCM before upload; Supabase stores an encrypted envelope rather than readable diary JSON.
- A random 256-bit master key protects the roster payload. The master key is wrapped separately by a user encryption passphrase (PBKDF2-SHA-256) and by a random recovery key, so resetting the Supabase account password does not change the roster encryption key.
- Encrypted Safe Sync uses an HMAC-SHA-256 fingerprint keyed by the master key, preserving revision/conflict detection without publishing a plain hash of the personal payload.
- Added new-device unlock by encryption passphrase or recovery key, optional “remember this device”, and a cloud-key lock control. Local browser data remains local-first and readable on the device; this release encrypts the cloud copy, not browser localStorage or manual .rosterbot exports.
- Encryption migration uploads and re-downloads an encrypted revision, verifies that it decrypts back to the current local state, and only then calls the guarded backend cleanup RPC to purge older unencrypted revision history.
- v0.24.3d persistent login, iPad/Safari automatic-sync readiness, conflict/CAS protections, revision history, locked payroll/roster components and personal schema v4 remain unchanged.
v0.24.3d Startup readiness race hotfixMake readiness establish before the first network refresh
- Hotfix: readiness is now probed from the last safe local fingerprint immediately after the persistent session loads, before the first cloud-status network refresh. This removes a startup race where a quick edit could change the fingerprint before the baseline check ran and leave Safari showing “On · waiting”.
- Trusted form input/change activity is now remembered briefly; if a synchronized local-storage change follows that real user interaction while readiness is still pending, RosterBot treats it as an explicit user edit and safely wakes the sync engine. Startup/recovery writes do not get this trusted-user shortcut.
- The existing diary-ready event/flag remains the preferred fast path; the new baseline-match path is a conservative fallback rather than a replacement for IndexedDB recovery.
- Persistent sign-in, password recovery, 10-second cloud timeout, conflict/CAS rules, revision history, locked payroll/roster components and personal schema v4 remain unchanged.
v0.24.3a Account & Session hotfixFix recovery-mode startup ReferenceError
- Hotfix: declared the recovery-mode state before Cloud Sync UI initialization, fixing the
Can't find variable: recoveryMode error that could make an existing signed-in session appear logged out and break sign-in rendering. - Cloud sign-in survives browser/tab restarts by storing only the Supabase session tokens on this device; RosterBot never stores the account password.
- Expired access tokens refresh automatically using Supabase refresh-token rotation; signing out removes the persisted session from this browser.
- Added Forgot password and in-app recovery-link handling, plus a 10-second cloud request timeout.
v0.24.2 Auto Sync readiness hotfixiPad/Safari readiness + explicit app change signals
- Hardened automatic-sync startup so it no longer depends on a single one-shot
rosterbot:local-ready event. The diary now leaves a persistent ready flag and the sync engine recovers if the event is missed. - Added explicit syncable-change notifications from RosterBot's own data-write helpers, so notes/day/week edits can wake the sync engine even when browser storage interception is unreliable.
- Local fingerprint probes can directly wake automatic sync once the diary is ready; opening/refreshing Data & Sync also retries a pending local-only change.
- Added Advanced diagnostics for Auto engine state and the last automatic attempt, making mobile failures visible instead of silently leaving a yellow Local changes state.
- All Safe Sync conflict rules, server revision CAS protection, first-sync manual requirement, account isolation, locked payroll/roster components and personal schema v4 remain unchanged.
v0.24.1 Mobile Auto Sync hotfixBrowser-independent local-change detection
- Added a lightweight local SHA-256 change probe while the app is visible, so automatic sync no longer depends solely on intercepting
localStorage.setItem() calls — important for iPad/Safari-style browser behavior. - Removed the
navigator.onLine pre-check; automatic sync now attempts the real Supabase request and treats an actual request failure as offline, matching manual Sync now behavior more closely. - Failed automatic requests back off briefly instead of repeatedly hammering the network; focus, visibility and reconnect events can trigger a retry.
- All v0.24.0 Safe/Automatic Sync conflict rules, manual first-sync requirement, revision CAS protection and local-first saves remain unchanged.
- Locked roster/payroll components and personal schema v4 remain unchanged.
v0.24.0 Automatic SyncLocal-first background synchronization
- After a device has a safe sync baseline, meaningful diary/pay edits are saved locally first and automatically uploaded after a short debounce.
- RosterBot checks the cloud when the app becomes ready, returns online, regains focus and periodically while visible; cloud-only changes can be applied automatically when the local copy is unchanged.
- First backup/link, cleared-data recovery, incompatible payloads and any two-sided conflict remain manual. Server expected-revision checks still block upload races.
- Backup import, historical revision restore and undo-restore pause automatic sync until the user explicitly reviews and presses Sync now.
- Volatile navigation fields and derived shared-settings are excluded from sync fingerprints/payloads, preventing harmless device navigation from causing cloud revisions or conflicts.
- Locked roster/payroll components and personal schema v4 remain unchanged.
v0.23.1 Auth CallbackEmail confirmation returns to the exact RosterBot page
- Signup now supplies the exact current HTTP/HTTPS RosterBot page as Supabase
redirect_to, so localhost confirmation links return to the app instead of the web-server directory root. - Confirmation callbacks are detected on return; RosterBot immediately removes Supabase auth tokens/errors from the URL fragment before showing a confirmation result.
- For this beta the confirmation callback deliberately does not persist the returned session tokens: after verification, RosterBot asks the user to sign in normally.
- Safe Sync, account isolation, RLS, revision history, payroll/data locks and personal schema v4 are unchanged.
v0.23.0 Account UXCreate account + normal sign-in experience
- Added in-app email/password account creation without changing the local-first model or automatically uploading roster data.
- Added sign-in/create-account tabs, email-confirmation guidance, account verification status and a simpler account card for signed-in users.
- Moved raw Supabase project configuration into a closed Developer / connection settings section; existing saved beta connections continue working.
- Passwords are never persisted by RosterBot; the current beta session remains browser-session scoped while Safe Sync stays manual.
- Kept v0.22.2 Safe Sync conflict handling, canonical SHA-256 fingerprints, server revision checks, locked roster/payroll components and personal schema v4 unchanged.
v0.22.2 Safe Sync hotfixFingerprint-aware manual synchronization
- Hotfix: legacy v0.22.0 cloud payloads are fingerprinted using the current sync-key scope, so old device-only preferences such as theme/view mode cannot create a false two-sided conflict after upgrading.
- Added a single Sync now workflow that compares canonical SHA-256 fingerprints before choosing an upload, download prompt, no-op, or conflict stop.
- Distinguishes local-only changes, cloud-only changes, identical copies, first-device linking and genuine two-sided conflicts without silently overwriting either side.
- Protects a deliberately cleared browser from being mistaken for an automatic cloud-deletion request.
- Moved raw upload/restore/revision controls under Advanced / Recovery while keeping cloud history and one-step local restore safety.
- Server-side expected-revision checks remain the final race-condition guard. No automatic/background sync is enabled yet; locked roster/payroll data and personal schema v4 are unchanged.
v0.22.0 sync proof-of-conceptOptional local-first Supabase sync
- Added an optional Data & Sync workspace while preserving fully local operation and manual
.rosterbot backups. - Uses Supabase email/password authentication with the publishable browser key only; passwords are never written to RosterBot storage.
- Added manual upload, cloud-to-device restore, cloud revision history, per-device base revisions and server-enforced stale-write conflict handling.
- Cloud restores keep a one-step local safety snapshot so the previous local state can be recovered.
- No automatic upload occurs in this prototype. The v0.20.6 payroll/data rules and locked datasets are unchanged.
Combined beta v0.21.2Fortnight progress ticker + HHMM search
- Replaced the single month-level edit/check dots with one diary marker and one payslip marker for every pay fortnight ending in that month.
- Diary markers are filled only when both weeks of that fortnight are locked; payslip markers are filled only when that fortnight has a saved pay check. Hollow markers show incomplete work.
- Supports months containing three pay-fortnight end dates, not just two.
- Universal search now understands four-digit HHMM sign-on/sign-off searches without a colon, so 1349 finds 13:49.
- Kept all v0.20.6 payroll/data rules unchanged. Personal-data schema remains v4.
Combined beta v0.21.1Diary workflow polish
- Fixed Week actions menus being clipped by the week card, including nested leave choices.
- Widened and stabilised the actual-duty live-search field in the day-editor drawer.
- Added autosaved notes to every pay fortnight; fortnight notes are backed up and included in universal search.
- Added a visible legend for year-strip month dots: accent = diary edits, yellow = saved pay check.
- Month selection now displays every complete pay cycle intersecting that month, while days outside the selected month are dimmed rather than omitted.
- Kept all v0.20.6 payroll/data rules unchanged. Personal-data schema remains v4.
Combined beta v0.21.0Unified RosterBot workspace
- Made the personal roster the diary home screen, defaulting to the current pay fortnight with previous/next/today navigation and a year/month jump strip.
- Folded PayBot into RosterBot: pay summaries, breakdowns and day-by-day detail now open inline without a second editable PayBot page.
- Converted the day editor into a desktop side drawer/mobile bottom sheet and added full roster-book shift text for the selected actual/rostered duty.
- Replaced separate week buttons with a compact Week actions menu and a generic Mark as leave workflow supporting annual, personal and unpaid leave.
- Added universal search across diary dates/notes, supplied duty codes/details and saved pay-check variances.
- Added a home summary for next shift, expected pay, PH-credit movement and checked pay variances. Personal-data schema remains v4 and older backups remain compatible.
Combined beta v0.20.6Full-year audit corrections
- Separated PB205 entitlement APR from the rate ADP happened to apply before later backpay corrections; expected pay now follows the entitlement chronology while payroll-applied rates remain available for reconciliation.
- Made roster-book Hrs authoritative for rostered payable duration. Early release cannot reduce rostered pay; a genuine extension beyond the rostered duty can still add overtime.
- Fixed rostered-OFF public holidays so PH Gazette occupies 8h of the 80h fortnight guarantee instead of being added on top.
- Fixed worked-OFF public-holiday shifts crossing midnight so base pay covers the full payable shift while the 0.5 premium follows the calendar classification minute by minute.
- Added Rostered AV: called and worked as an explicit PH diary state; it uses the established rostered-ON/worked pay treatment and accrues the PH credit.
- Carried forward the confirmed FP67 SP215 correction to 15:34–23:34 / 8h00 and added audit regressions for the supplied 2026 cases. Personal-data schema remains v4.
Combined beta v0.20.5Annual-leave payroll correction
- Changed diary annual-leave weeks to a fixed 40 ordinary paid hours per week, independent of the underlying master-roster duty lengths, weekends and >8h shifts.
- Suppressed rostered weekend, public-holiday and overtime penalties while the week is on annual leave.
- A gazetted public holiday inside annual leave now replaces 8h of annual leave with an 8h PH Gazette payment, preserving the 40h weekly / 80h fortnight total.
- Added a permanent 08–21 Mar 2026 regression target: 72h Annual Leave + 8h PH Gazette at $83.0400 = $6,643.20, with no WEROSPEN, PHA, >8hrs RST or WEUNRPEN.
- Kept all locked official roster, roster-book, holiday and verified payroll-rate datasets byte-for-byte unchanged.
Combined beta v0.20.4Fortnight ordinary-hour allocation + per-shift durations
- Changed worked-OR handling so PayBot first fills any unmet ordinary fortnight obligation before classifying an OR-day shift as genuine additional OTUnrShft/WEUNRPEN.
- A moved shift therefore does not create extra pay merely because it landed on an originally rostered OR day; a true 11th shift still receives the additional-shift treatment.
- Kept individual >8h treatment independent: once an OR-day shift is filling ordinary hours, only time beyond 8h receives >8hrs RST plus WEUNRPEN.
- Moved worked/shift duration onto each RosterBot Calendar and Compact shift (for example 8h00 or 8h24) and removed the fortnight WORKED TIME total.
- Kept all locked official roster, roster-book, holiday and verified payroll-rate datasets byte-for-byte unchanged.
Combined beta v0.20.3Fortnight claims + roster workflow polish
- Added worked-time totals to each RosterBot pay-fortnight footer.
- Added Save & close beside the day-editor close control, while keeping Wasted Meal as the shift-linked allowance.
- Added persistent fortnight-level claims for Rest Job Meals, T&I Meals, T&I Beds and a manual travel/other claim.
- Locked public-holiday day editing to date-detected PH controls and automatic conversion defaults such as rostered-on Job / worked.
- Changed expected-gross summation to add payroll element values after cent rounding, matching the supplied ADP payslip presentation.
- Kept all locked official roster, roster-book, holiday and verified payroll-rate datasets byte-for-byte unchanged.
Combined beta v0.20.2ADP tenth-hour rounding refinement
- Refined payroll rounding from always-up to the rule demonstrated by supplied payslips: any positive time class has a 0.1h minimum, then values round to the nearest 0.1h.
- Added the 8h07 regression case: 0.1167h overtime now rounds to 0.1h (not 0.2h), while an 8h02/8h03 excess still receives the 0.1h minimum.
- Kept the over-8-hours split introduced in v0.20.1: excess time receives >8hrs RST plus WEUNRPEN rather than remaining in the rostered/PH premium class.
- Kept all locked roster, roster-book, holiday and verified payroll-rate datasets byte-for-byte unchanged.
Combined beta v0.20.1Payroll rounding hotfix
- Changed payroll time-class handling from nearest-0.1h rounding to always rounding UP to the next 0.1h, matching supplied payslip evidence.
- Corrected rostered shifts over 8 hours so the excess portion receives the unrostered/overtime 0.5 premium rather than remaining inside the rostered/PH premium class.
- Updated the visible PayBot beta version from the stale v0.18 label.
- Kept all locked roster, roster-book, holiday and verified payroll-rate datasets byte-for-byte unchanged.
Combined beta v0.20Modular data freeze + payroll anchors
- Split validated official roster, roster-book, holiday and payroll data into locked build components while preserving the single-file offline release.
- Replaced PB205 date inference with exact payslip-verified APR anchors from Apr 2024 through the current $86.8122 rate.
- Added live numeric duty search: typing 613 finds SP613 first and also fuzzy-matches duty numbers containing 6…1…3 in order; 0613 remains a sign-on-time search.
- Kept personal-data schema v4 unchanged for direct v0.19 compatibility.
Combined beta v0.19Historical roster + PH conversion engine
- Added effective-dated FP64–FP68 official roster data, SCS and supplied outstations, with depot-aware diary anchors.
- Added official public-holiday conversion notices for 2025–2026; converted PH jobs/AV/PH states now resolve before PayBot.
- Fixed public-holiday defaults so rostered work defaults to worked and rostered OR defaults to not required.
- Added PH highlighting, clearer amended-day originals, one-click annual-leave weeks, Save & close in Advanced Builder, and date-correct live duty search.
- Fixed backup export to trigger directly from the user click. FP68 Grand Final 25/09/2026 remains flagged as photo-unverified until its photographed table is verified.
Combined beta v0.18Roster + Pay fusion controls
- Added a compact pay-cycle calendar navigator with month/year controls, previous/next month arrows and 14-day pay-cycle highlighting.
- Clicking any calendar date instantly jumps the roster view to that pay fortnight.
- Expanded the retrospective day editor with shift lookup, +8h, PDT, public-holiday treatment and all currently supported PayBot allowances.
- Diary allowances/PDT/PH treatment now flow directly into PayBot when the fortnight is calculated.
- Changed the day-note prompt to “Daily roster change/any notes regarding shift”.
- Fixed the Quick-mode pay-preview TypeError, Terminal experience-selector text overlap, and Advanced Roster Builder dialog padding.
Combined beta v0.17Quick + Personal Diary architecture
- Split RosterBot into two flexible experiences over one roster engine: Quick / Basic for lightweight planning and Personal Diary / Advanced for long-term history and audit.
- Quick mode no longer commits a roster timeline automatically; users can later convert the current quick setup into their personal diary with one action.
- Advanced Roster Builder now works independently of Basic Setup and accepts periods in any order: earlier than existing history, inserted in the middle, or later than the current final period.
- Saved periods are self-contained anchors, so back-filling older history does not move or recalculate later roster-change anchors.
- Separated personal-diary annual leave from temporary Quick / Basic scenarios and added diary leave management inside Advanced Builder.
- Added edit/remove controls for every saved roster period, earlier/later helpers, and clearer timeline layout.
- Fixed the Advanced Builder roster summary spacing/layout issue where labels such as CONTINUOUS ROSTER and A1 could run together.
Combined beta v0.16Diary-first navigation
- RosterBot now opens as a personal diary: returning users land on the current week, with date-range, current-week and pay-fortnight navigation.
- Replaced the old display-weeks workflow with selectable From / To dates while keeping multi-year history and forecasts available.
- Grouped roster weeks into pay fortnights and added an expected-gross summary plus one-click PayBot details for each fortnight.
- Added week locking to protect completed historical facts from accidental edits while keeping PayBot calculations free to recalculate.
- Added pay-cycle checking with actual payslip gross, difference tracking and calculation snapshots for audit history.
- Basic setups are migrated into the roster timeline so changing the diary view no longer shifts the underlying roster anchor.
Combined beta v0.15Personal roster diary foundation
- Added Advanced Roster Builder with chronological roster arrangements: continuous roster, replace one alternating track while preserving the other, or start a new permanent swap.
- Added retrospective day editing with actual duty/times, status and private notes while preserving the original rostered duty underneath.
- Added one-week roster/line overrides without disturbing the underlying rotation, named public holidays in RosterBot, +1/+4 week annual-leave entry, and removed the old 26-week display cap.
- Added local personal-database storage, backup-age reminders and clearer privacy/data-responsibility messaging. Roster/pay diary data is not stored in a RosterBot account or backend.
- PayBot now consumes RosterBot actual-day records when present and keeps rostered versus actual times visible for audit.
Combined beta v0.14Full Terminal theme
- Rebuilt Design 7 as Terminal: the entire app now uses one 16px system-monospace typeface, including headings, forms, results and controls.
- Removed card styling, rounded controls, coloured status pills and decorative UI from Terminal mode so the page reads like a command-line screen.
- Actions render as bracketed text commands and compact editor rows are reduced to plain aligned text with bracket-style time fields.
- Kept 16px editable fields to preserve the no-auto-zoom behaviour on iPhone.
Combined beta v0.13ASCII / Plain Text theme
- Added Design 7: a high-contrast monospaced ASCII-style theme for RosterBot and PayBot.
- Removed visible card and button boxes in this theme; actions render as bracketed text or simple arrows.
- Inputs use open square-bracket corners instead of full boxes, while keeping 16px mobile input text to avoid iPhone focus zoom.
- Compact roster and PayBot views are flattened into dense terminal-like rows, and payslip/day-by-day views read like a plain-text printout.
Combined beta v0.12Real-payslip reconciliation + workflow polish
- Added a This pay cycle button and stopped input-method changes from clearing the loaded fortnight until Load fortnight is pressed.
- Public holidays are now detected from the date only; the manual PH checkbox has been removed.
- PH credit leave now appears as PH Days Leave and is shown as its own payslip element.
- Payroll time classes are rounded per shift/day to 0.1h before fortnight totals, matching the latest supplied payslip evidence.
- Gross pay keeps full four-decimal rate precision through the calculation and rounds the final dollar total at the end, while displayed line items remain shown to cents.
- Day-by-day view now shows ordinary base or paid leave as well as overtime, penalties and allowances, with a total payment for each day.
- Improved shift-code lookup so master-rotation duties such as SP615, SP616 and SP913 can still be found when roster-book lookup is incomplete.
- Sign-on fields now understand quick text shortcuts such as PH, AL, SL, UL and OR when a full keyboard or paste is available.
- The Data panel now checks browser storage and can request persistent storage where supported.
Combined beta v0.11Tighter mobile compact editor
- Repacked Compact mode into a denser two-row phone layout with day, duty, status and expand controls on one line.
- Reduced card padding and control spacing while keeping sign-on and sign-off directly editable.
- PayBot mobile inputs now use a 16px control font to prevent Safari from auto-zooming when a time field is tapped.
- Shortened the compact Skip control and removed redundant manual-entry sublabels to keep the fortnight easy to scan.
Combined beta v0.10Fast compact entry
- Compact PayBot rows now let you edit sign-on and sign-off times without expanding the day.
- Manual-entry days show empty HHMM fields immediately, with +8h available from the compact row.
- Added Skip → to move to the next day while leaving the current day unchanged; untouched manual days are shown as OR not worked.
- Status badges now use short, readable labels and are no longer squeezed into a tiny pill.
Combined beta v0.9.1Current payroll rate hotfix
- Updated locomotive operating grade calculations to use the cumulative 2% temporary allowance from the pay period starting 26 Jul 2026.
- PB205 now uses the supplied payroll rate of $86.8122 from 26 Jul 2026 while earlier fortnights keep their historical rate.
- Future scheduled grade rates retain the same cumulative temporary allowance until the temporary arrangement ends.
Combined beta v0.9Quick-entry workflow
- Manual sign-on entry now automatically changes an OFF/unknown day to a worked shift so the finish can be entered straight away.
- Added optional Auto next day in Compact mode to move through a fortnight with fewer taps.
- The duty box can now search by sign-on time, such as 0613, and show matching shift codes for that date.
Combined beta v0.8Job details + compact PayBot editor
- Expanded RosterBot compact shifts now show the full roster-book job description when available.
- Added Full / Compact editor layouts to PayBot, with Compact designed for quick phone use.
- Compact PayBot rows show the essentials at a glance and expand into the full editing controls.
Combined beta v0.7Compact roster view
- Added Calendar / Compact view switching to RosterBot.
- Compact view is designed for phones, keeps sign-on and sign-off together, and expands for more detail.
- Phones default to Compact on first use; the chosen view is remembered.
Combined beta v0.6Faster time entry + day-by-day PDT
- Added a +8h button beside every editable shift so sign-off can be filled instantly.
- Current-scheme PDT can now be selected day by day instead of for the whole fortnight.
- PDT days automatically use A704 for weekday hours and A705 for weekend hours.
- Kept legacy appointed PDT handling separate.
Combined beta v0.5Autosave, backup and polish
- Added local autosave plus export/import backup controls.
- Updated Cyan / Green to the clearer early PayBot palette.
- Matched the Annual Leave colour in the legend and roster display.
- Cleaned up PayBot wording and clarified WEUNRPEN.
v1.9Railway colour erasCurrent
- Kept Cyan / Green as the default and Mono as Design 2.
- Added VR Blue & Gold (1937–1981).
- Added V/Line Orange (1983–1994), V/Line Red & Blue (2000–2006) and V/Line Purple (2014–Present).
- Retired Purple Hell and the previous Heritage V/Line theme.
v1.8iPhone calendar export + changelog
- Added separate Add to Calendar and Share / Save actions for each .ics file.
- Added Share / Save all plus a ZIP download containing all prepared calendar files.
- Added this in-app changelog so users can see what has changed between versions.
v1.7Theme refresh
- Cyan / Green became the default theme.
- Added Heritage V/Line colours.
- Renamed the original purple theme to Purple Hell.
v1.6Flexible calendar exports + annual leave
- Added alternating Week A / Week B .ics files.
- Added optional separate OR and Annual Leave .ics files.
- Added user-entered Annual Leave weeks to the web roster and calendar.
- Calendar event titles now begin with sign-on time, e.g. 11:40 - SP038 - A7.
v1.5Feedback
- Added the feedback form with optional diagnostics and Formspree delivery.
v1.4Mobile layout
- Improved iPhone sizing for the header and date controls.
- Made all seven roster days fit on a phone screen without horizontal scrolling.
v1.3Accurate sign-off times
- Added roster-book matching by shift number, weekday and sign-on time.
- Added accurate shift finish times, including non-8-hour and overnight shifts.
- Added 8-hour Spare handling and retained shift-book details for calendar descriptions.
v1.2RosterBot + themes
- Renamed the project to RosterBot 🤖.
- Added switchable visual themes while keeping roster functionality separate from styling.
v1.1Standalone build
- Moved the app, roster data and styling into one standalone HTML file to fix local loading issues.
v1.0First working roster generator
- A/B/C/D/Flex rotations, date-based roster display, permanent swaps and .ics export.