The page script fails silently: htmx errors show nothing, an expired session fills the table, Back breaks controls, export buttons lock #226
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Postulo/postulo#226
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found in the 2026-09-15 code audit.
1. A failed htmx request shows nothing
app.jshas no listener forhtmx:responseErrororhtmx:sendError; the only htmx config isbase.html:12.hx-indicator, so the.htmx-indicatorrules (assets/css/app.css:689-696) never apply.partials/table/head.html,pagination.html,applications/partials/filters.html,jobs/company_list.html). On a 500, or offline, nothing changes and the filter just looks broken.2. An expired session swaps the sign-in page into the table
HtmxMiddlewareis loaded but nothing sendsHX-Redirect, so htmx follows the login 302 and swaps the whole login page into#…-table.3. Back restores controls that no longer work, and keeps personal data in sessionStorage
hx-push-url, and htmx 2 caches page bodies insessionStorage(historyCacheSize: 10).app.js:1148-1191), Select all (:508) and label chips (:816, 881-913) without their listeners.htmx:historyRestore.sessionStorageafter signing out in the same tab.4. Export buttons stay locked after the first download
The submit-once guard (
app.js:212-242) marks every non-htmx POST form and clears the mark only onpageshow. An attachment download never leaves the page, so after the first click these stayaria-disabled:core/export.html:34→export_download(FileResponse(as_attachment=True));documents/cv_detail.html:18→CVExportView→ redirect to a download.5. Duplication that makes this harder to fix
app.js:96-177and1285-1336).399-405,449-456).tokenFor(head)ignores its argument.afterSwapregistrations and nohistoryRestore.server/logs.html:71).Proposal
role="alert"region inbase.html, with its words in data attributes, filled by a delegatedresponseError/sendErrorhandler.aria-busyon the target, and show an indicator while a request runs.HX-Redirect.onContentReady(fn)helper coveringDOMContentLoaded,afterSwapandhistoryRestore, orhistoryCacheSize: 0, refreshOnHistoryMiss: true(the views already handlehistory_restore_request).data-download), or clear the mark onvisibilitychangeor after a few seconds. Add an e2e test that exports twice.isTyping()and a single drag controller; delete the dead pieces.