Projects / ENG
Engineering
The engineering backlog: epics, stories, bugs and tech debt for identity-service, portal and notifier.
Lead: Lukas Brandt · 269 issues
| Key | Summary | Status | Assignee | Updated |
|---|---|---|---|---|
| ENG-1842 | Access report PDF: umlauts in depot names print as boxes again (new reports layout) | To Do | Aiko Tanaka | 28 Oct 2026 |
| ENG-1829 | Textbridge: send Dutch, Belgian and German numbers in E.164 | Done | Elif Yildiz | 28 Oct 2026 |
| ENG-1838 | Duplicate people after the first single sign-on when the imported email differs from the Entra ID UPN | Open | Jonas Berg | 28 Oct 2026 |
| ENG-1841 | Access report PDF: lay out a large depot page by page | In Progress | Jonas Berg | 28 Oct 2026 |
| ENG-1840 | Onboarding: the region summary shows 'eu-central' instead of 'EU (Frankfurt)' | In Review | Jonas Berg | 28 Oct 2026 |
| ENG-1806 | identity-service: PHP 8.4 → 8.5 | In Progress | Jonas Berg | 27 Oct 2026 |
| ENG-1833 | Regression tests for the pilot weekend's sign-ins | Done | Hanna Virtanen | 27 Oct 2026 |
| ENG-1804 | Keep Halden's data in the EU (mirrored from ACM-296) | Done | Lukas Brandt | 27 Oct 2026 |
| ENG-1828 | 'Requests moved to you' email lists a request twice after two changes within a minute | Done | Jonas Berg | 27 Oct 2026 |
| ENG-1831 | People: search on the server for clients with thousands of people | Done | Aiko Tanaka | 27 Oct 2026 |
| ENG-1839 | Notice for moved requests opens the request as it was before the move | To Do | Aiko Tanaka | 27 Oct 2026 |
| ENG-1827 | SAML: match the email whatever its case (Kelderby's Entra ID sends it capitalised) | Done | Jonas Berg | 26 Oct 2026 |
| ENG-1824 | Count only failed sign-ins per address, so a depot's shared PCs aren't locked out at shift start | Done | Mira Holm | 26 Oct 2026 |
| ENG-1769 | Remove the depot approvers flag and the old admin-only path after two clean weeks | To Do | Marek Nowak | 26 Oct 2026 |
| ENG-1837 | Pen test 2026: the four low findings | Backlog | Unassigned | 26 Oct 2026 |
| ENG-1836 | Pen test M3: changing a password doesn't end the person's other sessions | Selected for Development | Marek Nowak | 26 Oct 2026 |
| ENG-1835 | Pen test M2: administrator invitations can be re-sent without a limit | Selected for Development | Marek Nowak | 26 Oct 2026 |
| ENG-1834 | Pen test M1: the sign-in page reveals which email domains use single sign-on | Selected for Development | Marek Nowak | 26 Oct 2026 |
| ENG-1825 | EU mail account: hard bounces don't reach identity-service | Done | Elif Yildiz | 23 Oct 2026 |
| ENG-1809 | Kelderby: engineering on the first rehearsals, and a switch-back rehearsal | Done | Jonas Berg | 22 Oct 2026 |
| ENG-1805 | Waiting requests follow their depot's approver (mirrored from ACM-320) | Done | Lukas Brandt | 22 Oct 2026 |
| ENG-1826 | Brakeline: who a moved request waited on before, in the audit log export | Backlog | Unassigned | 22 Oct 2026 |
| ENG-1823 | Tell the person when their request closes after 14 days | Backlog | Unassigned | 21 Oct 2026 |
| ENG-1799 | Access report prints ö and other letters as empty boxes | Done | Aiko Tanaka | 20 Oct 2026 |
| ENG-1820 | Single sign-on for every depot at once (mirrored from ACM-293) | In Progress | Lukas Brandt | 20 Oct 2026 |
| ENG-1819 | Portal in German and Dutch (mirrored) | In Progress | Lukas Brandt | 19 Oct 2026 |
| ENG-1818 | Reminders for EU clients still go through the US mail account | Done | Elif Yildiz | 19 Oct 2026 |
| ENG-1735 | Q3 GitHub access review, with the evidence kept (ISO 27001 minor finding 2) | Done | Rafael Duarte | 16 Oct 2026 |
| ENG-1793 | Region on every log line and metric | Done | Oskar Lund | 16 Oct 2026 |
| ENG-1807 | All requests, depot view: only the first 50 waiting requests load | Done | Aiko Tanaka | 16 Oct 2026 |
| ENG-1581 | Reminders: remind the administrators when a request waits unassigned | Done | Elif Yildiz | 15 Oct 2026 |
| ENG-1803 | Phone codes: numbers written with 00 instead of + are refused | Done | Jonas Berg | 15 Oct 2026 |
| ENG-1791 | Phone number with spaces is refused silently and the page says 'Saved' | Done | Aiko Tanaka | 15 Oct 2026 |
| ENG-1802 | Release checks for portal 4.13 | Done | Hanna Virtanen | 15 Oct 2026 |
| ENG-1800 | Name the client's region in every event, for the notifier's mail accounts | Done | Elif Yildiz | 14 Oct 2026 |
| ENG-1784 | Limit administrators' sign-in to a client's own addresses | Backlog | Unassigned | 13 Oct 2026 |
| ENG-1576 | Access report by depot: CSV export (cut from the first release) | Closed | Unassigned | 12 Oct 2026 |
| ENG-1801 | Phone-code screen: tell people to use the newest text | To Do | Aiko Tanaka | 12 Oct 2026 |
| ENG-1796 | Resend a phone code on Textbridge's second UK route when no receipt comes in 90 s | To Do | Elif Yildiz | 12 Oct 2026 |
| ENG-1770 | Kelderby: load test approvals at Kelderby's size before go-live | Done | Jonas Berg | 9 Oct 2026 |
| ENG-1785 | Composer and npm advisories, October | Done | Jonas Berg | 9 Oct 2026 |
| ENG-1786 | Reports: new layout with the filters beside the report | Done | Aiko Tanaka | 8 Oct 2026 |
| ENG-1790 | Ridgeway: send access decisions to our warehouse system | Closed | Unassigned | 8 Oct 2026 |
| ENG-1720 | Lock message says when the person can try again | Done | Aiko Tanaka | 8 Oct 2026 |
| ENG-1782 | Approvals list: a depot manager at two depots sees only the first depot's requests | Done | Aiko Tanaka | 8 Oct 2026 |
| ENG-1774 | Depot manager sees Approve and Refuse on their own request | Done | Aiko Tanaka | 6 Oct 2026 |
| ENG-1767 | Access report takes 190 s for Vossberg and times out | Done | Jonas Berg | 6 Oct 2026 |
| ENG-1765 | portal: merge patch updates of dev dependencies on their own when CI is green | Done | Aiko Tanaka | 2 Oct 2026 |
| ENG-1492 | Brakeline: depot leads approve their own drivers (SUP-955) | Done | Unassigned | 1 Oct 2026 |
| ENG-1352 | Site managers approve their own staff (Northgate, SUP-702) | Done | Unassigned | 1 Oct 2026 |
| ENG-1728 | Depot managers approve their own people (mirrored from ACM-247) | Done | Lukas Brandt | 1 Oct 2026 |
| ENG-1766 | Release checks for portal 4.12 (depot approver screens) | Done | Hanna Virtanen | 1 Oct 2026 |
| ENG-1758 | Inbox tests for decided requests and the depot filter | Done | Hanna Virtanen | 30 Sep 2026 |
| ENG-1714 | identity-service: PHP 8.4 → 8.5 | Done | Jonas Berg | 29 Sep 2026 |
| ENG-1741 | Phone codes: Belgian mobile numbers starting +32 46 are refused | Done | Elif Yildiz | 29 Sep 2026 |
| ENG-1754 | After a merge, phone codes go to the merged-away record's number | Done | Marek Nowak | 29 Sep 2026 |
| ENG-1764 | Greenhollow: phone codes by voice call for people without a mobile | Backlog | Unassigned | 28 Sep 2026 |
| ENG-1710 | Vossberg depot import | Done | Marek Nowak | 25 Sep 2026 |
| ENG-1733 | portal: Vite 5 → 7 and Node 22 in CI | Done | Aiko Tanaka | 25 Sep 2026 |
| ENG-1713 | Run Vossberg's file on staging and check it against people's home depots | Done | Jonas Berg | 24 Sep 2026 |
| ENG-1750 | Merge dialog: Merge is clickable before both people have loaded | Done | Aiko Tanaka | 24 Sep 2026 |
| ENG-1712 | Dry run: depots added and updated, and every problem | Done | Aiko Tanaka | 23 Sep 2026 |
| ENG-1738 | Phone-code screen: 'Resend' stays greyed out after 60 s when the phone was locked | Done | Aiko Tanaka | 23 Sep 2026 |
| ENG-1715 | Depot import never touches a depot's single sign-on | Done | Marek Nowak | 22 Sep 2026 |
| ENG-1711 | Depots › Import: CSV with code, name, address, country and replaces | Done | Marek Nowak | 22 Sep 2026 |
| ENG-1688 | Merge duplicate people | Done | Marek Nowak | 22 Sep 2026 |
| ENG-1749 | Phone codes: move to Textbridge's EU processing when their EU contract exists | Backlog | Elif Yildiz | 22 Sep 2026 |
| ENG-1691 | Portal: duplicates list and side-by-side merge | Done | Aiko Tanaka | 21 Sep 2026 |
| ENG-1692 | Every merge written to the audit log with both records | Done | Marek Nowak | 18 Sep 2026 |
| ENG-1690 | Merge two people into one | Done | Marek Nowak | 18 Sep 2026 |
| ENG-1740 | Merge: moved requests come back as new | Done | Marek Nowak | 18 Sep 2026 |
| ENG-1737 | Merging moves waiting requests but drops who they wait on | Done | Marek Nowak | 18 Sep 2026 |
| ENG-1731 | Lockout tells an attacker which email addresses have accounts | Done | Jonas Berg | 17 Sep 2026 |
| ENG-1732 | Depot import accepts a file that isn't UTF-8 and mangles the names | Done | Marek Nowak | 17 Sep 2026 |
| ENG-1736 | Personal agent tokens in the Q4 access review (ISO 27001 observation 3) | To Do | Rafael Duarte | 17 Sep 2026 |
| ENG-1709 | Audit log export: a local-time column next to UTC | Done | Jonas Berg | 16 Sep 2026 |
| ENG-1729 | Unlocking a person doesn't reset their failed attempts | Done | Jonas Berg | 16 Sep 2026 |
| ENG-1716 | Depot PCs behind one address hit the per-address limit at shift change | Done | Jonas Berg | 16 Sep 2026 |
| ENG-1717 | Single sign-on loops on iPhones and Macs: Safari drops the session cookie on the SAML POST | Done | Jonas Berg | 15 Sep 2026 |
| ENG-1722 | Duplicates: match phone numbers however they are written | Done | Marek Nowak | 15 Sep 2026 |
| ENG-1708 | Refuse known-breached passwords when a password is set or reset | Backlog | Unassigned | 15 Sep 2026 |
| ENG-1689 | People › Possible duplicates | Done | Marek Nowak | 11 Sep 2026 |
| ENG-1702 | Sign-in lockout and rate limits | Done | Marek Nowak | 10 Sep 2026 |
| ENG-1706 | Alarms: failed sign-ins and lockouts | Done | Oskar Lund | 10 Sep 2026 |
| ENG-1703 | identity-service: limit sign-in attempts per address | Done | Jonas Berg | 10 Sep 2026 |
| ENG-1705 | Lock an account's password sign-in for 15 minutes after ten failed passwords in 15 minutes | Done | Marek Nowak | 9 Sep 2026 |
| ENG-1660 | Okta: home depot taken from the first of two depot codes | Done | Marek Nowak | 9 Sep 2026 |
| ENG-1680 | The bell shows the same notice three times when a request is edited | Done | Elif Yildiz | 9 Sep 2026 |
| ENG-1704 | Administrators see who is locked, get a notice, and can unlock | Done | Aiko Tanaka | 9 Sep 2026 |
| ENG-1707 | At most five phone codes an hour per number | Done | Elif Yildiz | 9 Sep 2026 |
| ENG-1666 | Import dry run doesn't catch duplicate phone numbers within the file | Done | Marek Nowak | 9 Sep 2026 |
| ENG-1628 | Load test on a full-size copy of the EU database | Done | Hanna Virtanen | 4 Sep 2026 |
| ENG-1671 | notifier: one folder per notice in templates/, remove unused templates | Done | Elif Yildiz | 4 Sep 2026 |
| ENG-1693 | Composer and npm advisories, September | Done | Marek Nowak | 4 Sep 2026 |
| ENG-1673 | Composer and npm advisories, August | Done | Marek Nowak | 31 Aug 2026 |
| ENG-1655 | Notice email subjects garble names with umlauts | Done | Elif Yildiz | 31 Aug 2026 |
| ENG-1652 | Check every public TLS certificate daily; renewal failures page on-call | Done | Oskar Lund | 27 Aug 2026 |
| ENG-1665 | Metadata upload refuses Kelderby's file (XML comment before the root element) | Done | Marek Nowak | 26 Aug 2026 |
| ENG-1643 | People import accepts a trunk 0 after the country code (+353 0…) | Done | Marek Nowak | 26 Aug 2026 |
| ENG-1670 | CI: cache npm, and build the image on every pull request | Done | Oskar Lund | 26 Aug 2026 |
| ENG-1662 | Data export: include the approvals audit log | Done | Marek Nowak | 24 Aug 2026 |
| ENG-1601 | Data export for leaving customers | Done | Marek Nowak | 24 Aug 2026 |
| ENG-1605 | Runbook: an export at the end of a contract, and deletion 30 days later | Done | Oskar Lund | 24 Aug 2026 |
| ENG-1606 | Portal: Settings › Export your data | Done | Aiko Tanaka | 21 Aug 2026 |
| ENG-1651 | Times in the export are UTC without saying so | Done | Marek Nowak | 21 Aug 2026 |
| ENG-1604 | Download link valid 7 days, behind an administrator sign-in, logged | Done | Marek Nowak | 21 Aug 2026 |
| ENG-1647 | Export over 2 GB fails | Done | Marek Nowak | 21 Aug 2026 |
| ENG-1603 | Settings: export your data | Closed | Unassigned | 21 Aug 2026 |
| ENG-1602 | Export everything for a client as CSV files in a ZIP, with a README | Done | Marek Nowak | 20 Aug 2026 |
| ENG-1597 | People import: detect a tab separator from the header row | Done | Elif Yildiz | 20 Aug 2026 |
| ENG-1639 | Audit log shows 'System' as the approver for bundle decisions | Done | Marek Nowak | 19 Aug 2026 |
| ENG-1630 | Audit log CSV opens as one column in Excel | Done | Aiko Tanaka | 18 Aug 2026 |
| ENG-1522 | SAML metadata upload | Done | Marek Nowak | 18 Aug 2026 |
| ENG-1526 | Uploaded metadata stays pending until a test sign-in passes | Done | Marek Nowak | 17 Aug 2026 |
| ENG-1611 | Textbridge delivery logs by country, four weeks: what a second provider would need | Done | Elif Yildiz | 17 Aug 2026 |
| ENG-1523 | Administrators upload a depot's metadata, or copy it from another depot | Done | Aiko Tanaka | 17 Aug 2026 |
| ENG-1627 | Release checklist: no backfills or bulk jobs between 06:00 and 09:00, every region | Done | Oskar Lund | 17 Aug 2026 |
| ENG-1620 | notifier: page when any country's median receipt lag passes 2 minutes over 10 minutes | Done | Elif Yildiz | 14 Aug 2026 |
| ENG-1625 | Metadata with two signing certificates: only the first is kept | Done | Marek Nowak | 14 Aug 2026 |
| ENG-1584 | Audit log backfill from request history | Done | Marek Nowak | 14 Aug 2026 |
| ENG-1626 | Audit log backfill holds locks on access requests: commit every 5,000 rows | Done | Elif Yildiz | 13 Aug 2026 |
| ENG-1510 | Approvals audit log | Done | Marek Nowak | 13 Aug 2026 |
| ENG-1612 | Outside check also sends a phone code to a UK number | Done | Oskar Lund | 13 Aug 2026 |
| ENG-1598 | Warn two minutes before the session ends, with "Stay signed in" | Done | Aiko Tanaka | 13 Aug 2026 |
| ENG-1586 | notifier: page on-call when Mailcrest takes more than 5 minutes to deliver | Done | Elif Yildiz | 12 Aug 2026 |
| ENG-1524 | identity-service checks uploaded metadata | Done | Marek Nowak | 12 Aug 2026 |
| ENG-1514 | Portal: Settings › Audit log with filters | Done | Aiko Tanaka | 12 Aug 2026 |
| ENG-1517 | Export the audit log: a date range as CSV, or a daily file | Done | Aiko Tanaka | 12 Aug 2026 |
| ENG-1621 | Audit log export stops at 10,000 rows without saying so | Done | Aiko Tanaka | 12 Aug 2026 |
| ENG-1579 | Certificate expiry warnings link straight to the upload | Done | Elif Yildiz | 10 Aug 2026 |
| ENG-1520 | Log changes to roles, depots, single sign-on settings and administrators | Done | Marek Nowak | 7 Aug 2026 |
| ENG-1544 | Portal accessibility (WCAG 2.1 AA) | Done | Aiko Tanaka | 7 Aug 2026 |
| ENG-1609 | Bell: read notices still count as unread in another tab | Done | Aiko Tanaka | 7 Aug 2026 |
| ENG-1610 | Bell: a notice for an expired request opens "page not found" | Done | Aiko Tanaka | 7 Aug 2026 |
| ENG-1564 | Screen readers: names on icon buttons, the bell announced, table headers | Done | Aiko Tanaka | 7 Aug 2026 |
| ENG-1613 | Run axe checks in the page tests | Done | Hanna Virtanen | 6 Aug 2026 |
| ENG-1567 | Accessibility statement for procurement | Done | Sofie Jansen | 6 Aug 2026 |
| ENG-1511 | Log every decision on an access request | Done | Marek Nowak | 6 Aug 2026 |
| ENG-1569 | People import screens: labels, and errors read out | Done | Aiko Tanaka | 6 Aug 2026 |
| ENG-1599 | Focus goes to the top of the page after closing the approve/decline dialog | Done | Aiko Tanaka | 5 Aug 2026 |
| ENG-1513 | Keep audit entries 400 days, then delete them nightly | Done | Marek Nowak | 5 Aug 2026 |
| ENG-1562 | Keyboard: every action reachable, focus always visible, skip link | Done | Aiko Tanaka | 4 Aug 2026 |
| ENG-1495 | In-app notices in the portal | Done | Aiko Tanaka | 4 Aug 2026 |
| ENG-1537 | A bell in the portal header with the unread count | Done | Aiko Tanaka | 3 Aug 2026 |
| ENG-1582 | Unread count only updates after a reload | Done | Aiko Tanaka | 3 Aug 2026 |
| ENG-1563 | Contrast: text, buttons and status chips at 4.5:1 | Done | Aiko Tanaka | 3 Aug 2026 |
| ENG-1561 | People who turn emails off still get notices in the bell | Done | Elif Yildiz | 3 Aug 2026 |
| ENG-1565 | Piet's last week: hand the Textbridge and Mailcrest code in notifier to Elif | Done | Piet de Vries | 31 Jul 2026 |
| ENG-1527 | portal: React 18 → 19 | Done | Aiko Tanaka | 31 Jul 2026 |
| ENG-1594 | Mark every notice read at once | Done | Elif Yildiz | 31 Jul 2026 |
| ENG-1556 | Mark one or all notices read; keep notices 90 days | Done | Aiko Tanaka | 31 Jul 2026 |
| ENG-1557 | Import dry run doesn't warn about files that aren't UTF-8 | Done | Marek Nowak | 31 Jul 2026 |
| ENG-1583 | The day reasons shipped, 'request waiting' emails had no reason for 40 minutes | Done | Elif Yildiz | 31 Jul 2026 |
| ENG-1580 | A 'Customer note' field on ENG issues for the release notes draft | Done | Lukas Brandt | 31 Jul 2026 |
| ENG-1596 | Run the nightly backup on one server | Done | Oskar Lund | 31 Jul 2026 |
| ENG-1493 | Access request bundles per depot | Done | Marek Nowak | 30 Jul 2026 |
| ENG-1555 | notifier writes a notice for everything it emails | Done | Elif Yildiz | 30 Jul 2026 |
| ENG-1568 | Import dry run doesn't check rows against each other | Done | Marek Nowak | 30 Jul 2026 |
| ENG-1566 | Approving a bundle grants an item removed from the bundle after the request was made | Done | Marek Nowak | 29 Jul 2026 |
| ENG-1498 | Notices token for the portal's bell | Done | Rafael Duarte | 29 Jul 2026 |
| ENG-1549 | The pipeline rolls a region back when its smoke tests fail | Done | Oskar Lund | 29 Jul 2026 |
| ENG-1540 | Reason required on access requests | Done | Marek Nowak | 29 Jul 2026 |
| ENG-1554 | Bundles show in the Access report as their items | Done | Aiko Tanaka | 29 Jul 2026 |
| ENG-1543 | Approvers see the reason in the inbox and the email | Done | Aiko Tanaka | 28 Jul 2026 |
| ENG-1560 | Reminders go out at 02:00 UTC for every client | Done | Elif Yildiz | 28 Jul 2026 |
| ENG-1553 | People import refuses semicolon-separated files | Done | Marek Nowak | 28 Jul 2026 |
| ENG-1538 | Portal: bundle editor in depot settings and bundle picker on the request form | Done | Aiko Tanaka | 28 Jul 2026 |
| ENG-1552 | The reason goes into the audit log entry for the decision | Done | Marek Nowak | 28 Jul 2026 |
| ENG-1546 | Requests made before the change show "No reason given" | Done | Aiko Tanaka | 27 Jul 2026 |
| ENG-1542 | Pellham: one-off export of all their data before they leave | Done | Piet de Vries | 24 Jul 2026 |
| ENG-1506 | Ask for a bundle: one request, one decision | Done | Marek Nowak | 24 Jul 2026 |
| ENG-1548 | Migrations on large tables never take a lock that stops writes | Done | Marek Nowak | 24 Jul 2026 |
| ENG-1541 | A reason is required on every new access request | Done | Marek Nowak | 24 Jul 2026 |
| ENG-1489 | Approver reminders | Done | Elif Yildiz | 22 Jul 2026 |
| ENG-1550 | Ridgeway: read Okta's location_code as text, so 014 stays 014 | Done | Marek Nowak | 21 Jul 2026 |
| ENG-1516 | Remind the approver 24 hours after a request starts waiting, then daily | Done | Elif Yildiz | 20 Jul 2026 |
| ENG-1545 | Audit the portal: automated checks plus a keyboard-only and screen-reader walk | Done | Sofie Jansen | 17 Jul 2026 |
| ENG-1525 | Reminders stop when the request is decided or closed | Done | Elif Yildiz | 17 Jul 2026 |
| ENG-1551 | Reminder job fails for a whole client when a request has nobody to remind | Done | Elif Yildiz | 17 Jul 2026 |
| ENG-1460 | People import from a spreadsheet | Done | Aiko Tanaka | 16 Jul 2026 |
| ENG-1528 | Client setting: switch reminders off for the organisation | Done | Aiko Tanaka | 15 Jul 2026 |
| ENG-1547 | Brakeline Hull: the depot's PDF is missing its last page | Done | Aiko Tanaka | 15 Jul 2026 |
| ENG-1461 | People › Import: upload a CSV, dry run first | Done | Aiko Tanaka | 15 Jul 2026 |
| ENG-1509 | Administrators can give a person a one-time code when phone codes are late | Done | Marek Nowak | 15 Jul 2026 |
| ENG-1539 | Import of 1,200 rows times out after 60 s | Done | Marek Nowak | 14 Jul 2026 |
| ENG-1474 | Error file: the rejected rows, with the reason in a last column | Done | Aiko Tanaka | 14 Jul 2026 |
| ENG-1462 | identity-service: POST /api/people/import with a dry run and row errors | Done | Marek Nowak | 10 Jul 2026 |
| ENG-1494 | Administrators define access bundles per depot | Done | Marek Nowak | 10 Jul 2026 |
| ENG-1501 | Faster portal start | Done | Aiko Tanaka | 10 Jul 2026 |
| ENG-1535 | Access report blank after a deploy (old chunk gone from the server) | Done | Aiko Tanaka | 9 Jul 2026 |
| ENG-1452 | Access report by depot | Done | Aiko Tanaka | 8 Jul 2026 |
| ENG-1518 | Drop moment.js and the full icon set | Done | Aiko Tanaka | 7 Jul 2026 |
| ENG-1536 | Sign-in settings show the old session length after saving | Done | Aiko Tanaka | 7 Jul 2026 |
| ENG-1504 | Load each part of the portal when it is opened | Done | Aiko Tanaka | 6 Jul 2026 |
| ENG-1454 | Access report: download one depot as a PDF | Done | Aiko Tanaka | 6 Jul 2026 |
| ENG-1521 | Access report shows the date in UTC | Done | Aiko Tanaka | 6 Jul 2026 |
| ENG-1519 | Fewer calls before the first screen: keep /api/me and client settings for the session | Done | Marek Nowak | 3 Jul 2026 |
| ENG-1453 | Depot filter on the Access report | Done | Aiko Tanaka | 3 Jul 2026 |
| ENG-1505 | Phone-code screen says when codes are arriving late | Done | Aiko Tanaka | 3 Jul 2026 |
| ENG-1515 | Depot filter leaves out people from other depots who hold access at the chosen depot | Done | Aiko Tanaka | 3 Jul 2026 |
| ENG-1512 | Okta: when the depot attribute is empty, use the person's home depot and log it | Done | Marek Nowak | 2 Jul 2026 |
| ENG-1497 | Status page and incident updates | Done | Oskar Lund | 1 Jul 2026 |
| ENG-1507 | Portal shows a banner while an incident is open on the status page | Done | Aiko Tanaka | 1 Jul 2026 |
| ENG-1508 | Status page: email subscriptions for customers' IT | Done | Oskar Lund | 1 Jul 2026 |
| ENG-1475 | CSV limits: UTF-8, up to 5,000 rows or 2 MB | Done | Piet de Vries | 30 Jun 2026 |
| ENG-1436 | Okta sign-in for Vossberg | Done | Marek Nowak | 26 Jun 2026 |
| ENG-1455 | identity-service: depot parameter on GET /api/access-report | Done | Marek Nowak | 26 Jun 2026 |
| ENG-1503 | Okta depot codes are matched case-sensitively | Done | Marek Nowak | 25 Jun 2026 |
| ENG-1502 | Measure first load on a depot-PC profile, in CI | Done | Aiko Tanaka | 25 Jun 2026 |
| ENG-1488 | Page on-call when refused or undelivered texts pass 5% in 10 minutes | Closed | Elif Yildiz | 24 Jun 2026 |
| ENG-1496 | Page on-call when SMS delivery receipts lag more than five minutes | Done | Elif Yildiz | 24 Jun 2026 |
| ENG-1490 | Request emails say which depot the person is from | Done | Elif Yildiz | 24 Jun 2026 |
| ENG-1499 | Run the container as the unprivileged node user | Done | Oskar Lund | 23 Jun 2026 |
| ENG-1500 | Pilot evening: switch 12 Vossberg depots around Hanover to Okta | Done | Oskar Lund | 22 Jun 2026 |
| ENG-1459 | Load each Vossberg depot's Okta metadata | Done | Marek Nowak | 19 Jun 2026 |
| ENG-1440 | Depot from an attribute: check people sign in at their own depot | Done | Piet de Vries | 16 Jun 2026 |
| ENG-1431 | MFA for administrators | Done | Marek Nowak | 11 Jun 2026 |
| ENG-1491 | Administrators at single sign-on depots asked to set up an authenticator | Done | Marek Nowak | 11 Jun 2026 |
| ENG-1433 | Portal: set-up screen with QR code and recovery codes | Done | Rafael Duarte | 10 Jun 2026 |
| ENG-1473 | Require MFA enrolment before an administrator's first token | Done | Marek Nowak | 9 Jun 2026 |
| ENG-1483 | TOTP codes refused when the phone's clock is 40 s off | Done | Marek Nowak | 8 Jun 2026 |
| ENG-1439 | Okta as a depot's identity provider | Done | Marek Nowak | 5 Jun 2026 |
| ENG-1432 | Administrators who sign in with a password set up an authenticator app | Done | Marek Nowak | 5 Jun 2026 |
| ENG-1481 | Recovery codes can be used twice | Done | Marek Nowak | 5 Jun 2026 |
| ENG-1435 | Enforcement date, an email a week before, and a banner | Done | Marek Nowak | 4 Jun 2026 |
| ENG-1418 | Phone codes for depot workers without email | Done | Marek Nowak | 4 Jun 2026 |
| ENG-1434 | An administrator can reset another administrator's MFA | Done | Piet de Vries | 3 Jun 2026 |
| ENG-1476 | Decide: do imported people get the welcome email? | Done | Noor Haddad | 3 Jun 2026 |
| ENG-1446 | Access report freezes the browser for large organisations | Done | Marek Nowak | 2 Jun 2026 |
| ENG-1466 | Phone numbers saved without a country code: Textbridge refuses them and nobody sees it | Done | Marek Nowak | 29 May 2026 |
| ENG-1438 | Support can see the last 20 SMS sent to a number, with delivery status | Done | Piet de Vries | 25 May 2026 |
| ENG-1422 | Textbridge production account and sender names for IE, UK, NL and DE | Done | Piet de Vries | 25 May 2026 |
| ENG-1419 | Sign in with a phone number and a code sent by SMS | Done | Marek Nowak | 22 May 2026 |
| ENG-1448 | Password reset links say 'expired' before people open them (mail scanners use them up) | Done | Marek Nowak | 22 May 2026 |
| ENG-1421 | Portal: a person's mobile number and the Phone code sign-in | Done | Rafael Duarte | 21 May 2026 |
| ENG-1427 | People: phone number field and sign-in methods column | Done | Piet de Vries | 21 May 2026 |
| ENG-1437 | SAML: accept Okta as a depot's identity provider | Done | Piet de Vries | 21 May 2026 |
| ENG-1420 | notifier: send the code by SMS through Textbridge and keep delivery receipts | Done | Piet de Vries | 20 May 2026 |
| ENG-1441 | Local SAML test IdP gets an Okta profile | Done | Marek Nowak | 20 May 2026 |
| ENG-1424 | Notice emails show times in Berlin time for every client | Done | Marek Nowak | 19 May 2026 |
| ENG-1423 | People on phone codes can't be administrators | Done | Marek Nowak | 19 May 2026 |
| ENG-1428 | Phone codes: wait 15 minutes after five wrong tries | Done | Marek Nowak | 19 May 2026 |
| ENG-1361 | Access report takes minutes for clients over 3,000 people | Closed | Unassigned | 18 May 2026 |
| ENG-1362 | Marlow: require a second factor for administrators | Closed | Unassigned | 12 May 2026 |
| ENG-1425 | Decision email says 'approved' for a refused request when the approver adds a note | Done | Piet de Vries | 11 May 2026 |
| ENG-1402 | notifier: Node 20 → 22 (Node 20 goes out of support this week) | Done | Piet de Vries | 8 May 2026 |
| ENG-1400 | All requests: depot filter resets after approving a request | Done | Piet de Vries | 29 Apr 2026 |
| ENG-1401 | Send people of a depot on single sign-on to their identity provider when they try a password | Done | Marek Nowak | 29 Apr 2026 |
| ENG-1396 | Composer and npm advisories, April | Done | Marek Nowak | 28 Apr 2026 |
| ENG-1387 | notifier: stop mailing addresses that hard-bounce | Done | Piet de Vries | 24 Apr 2026 |
| ENG-1386 | Spike: Okta as identity provider for a depot (Vossberg asked) | Done | Marek Nowak | 23 Apr 2026 |
| ENG-1368 | Spike: SMS provider for phone-code sign-in | Done | Rafael Duarte | 17 Apr 2026 |
| ENG-1323 | After Laravel 13: SAML sign-ins refused with 'Destination mismatch' | Done | Marek Nowak | 14 Apr 2026 |
| ENG-1200 | Upgrade identity-service from Laravel 12 to 13 | Done | Marek Nowak | 14 Apr 2026 |
| ENG-1314 | PHP 8.2 → 8.4 on identity-service hosts and CI | Done | Piet de Vries | 13 Apr 2026 |
| ENG-1377 | All requests: page 2 repeats the last row of page 1 | Done | Piet de Vries | 9 Apr 2026 |
| ENG-1348 | Depot SAML config shows the certificate's subject and fingerprint, and warns on a reused one | Done | Piet de Vries | 26 Mar 2026 |
| ENG-1288 | Brakeline: depot SAML configs for 9 depots, a rehearsal sign-in from each | Done | Marek Nowak | 23 Mar 2026 |
| ENG-1344 | portal: React 18.3 and TypeScript 5.7; drop the class components in people/ | Done | Rafael Duarte | 20 Mar 2026 |
| ENG-1328 | Depot SAML config accepts two signing certificates during a rollover | Done | Piet de Vries | 6 Mar 2026 |
| ENG-1337 | SAML response refused: NotBefore 40 s in the future (Brakeline York) | Done | Piet de Vries | 4 Mar 2026 |
| ENG-1273 | Rotate the service-provider certificates of 31 depots that expire in February | Done | Marek Nowak | 27 Feb 2026 |
| ENG-1208 | US region (Virginia) for Ridgeway Freight | Done | Rafael Duarte | 12 Jan 2026 |
| ENG-1212 | US region: nightly backups in the US only | Done | Marek Nowak | 18 Dec 2025 |
| ENG-1210 | A client can be placed in the US region at onboarding | Done | Piet de Vries | 12 Dec 2025 |
| ENG-1217 | notifier: read US clients' events from the US queue | Done | Piet de Vries | 10 Dec 2025 |
| ENG-1216 | Portal shows "United States (Virginia)" on Deployment settings | Done | Rafael Duarte | 5 Dec 2025 |
| ENG-1232 | ExpireRequests closed 14 requests after 13 days | Done | Marek Nowak | 3 Dec 2025 |
| ENG-1209 | US region: database, queue and file storage in Virginia | Done | Marek Nowak | 28 Nov 2025 |