• v0.12.0 92b1134ca4

    v0.12.0
    All checks were successful
    E2E / deployment (push) Successful in 1m24s
    Build Web image / Build and push Web image (push) Successful in 3m41s
    Check / fmt + clippy + build + tests (push) Successful in 15m49s
    Build API image / Build and push API image (push) Successful in 23m18s
    Stable

    nrupard released this 2026-08-07 19:06:38 +02:00 | 75 commits to main since this release

    Changelog

    92b1134 Merge pull request 'Release v0.12.0' (#499) from release/v0.12.0 into main
    0db0fe3 Release v0.12.0
    e87ef5d Merge pull request 'ci: run every workflow step under Nushell' (#491) from chore/BUNYIP-489-nushell-workflow-shell into main
    d645134 Merge branch 'main' into chore/BUNYIP-489-nushell-workflow-shell
    5ced1bd Merge pull request 'fix(e2e): report a 2FA-verify 5xx accurately, not as a rejected code' (#498) from fix/BUNYIP-496-e2e-2fa-5xx-diagnostic into main
    fbd1f00 fix(e2e): report a 2FA-verify 5xx accurately, not as a rejected code
    54ad30b Merge pull request 'refactor(events): consume dunite-events, drop bunyip bus + SSE copies' (#497) from feat/DEV-528-consume-events into main
    57df47c refactor(events): consume dunite-events, drop bunyip bus + SSE copies
    4c33799 Merge pull request 'refactor(version): consume dunite-update-check, drop bunyip copy' (#496) from feat/DEV-530-consume-update-check into main
    a2b18e4 refactor(version): consume dunite-update-check, drop bunyip copy
    2cc3145 Merge pull request 'refactor(observability): consume dunite-core error-log + client-IP' (#495) from feat/DEV-529-consume-observability into main
    4c022db refactor(observability): consume dunite-core error-log + client-IP
    6622c91 Merge pull request 'refactor(services): consume dunite-hibp + dunite-webhook, drop bunyip copies' (#494) from feat/DEV-527-consume-hibp-webhook into main
    8024c7c refactor(services): consume dunite-hibp + dunite-webhook, drop bunyip copies
    03fd39e Merge pull request 'refactor(csrf): consume dunite-core OriginGuard, drop bunyip-api copy' (#493) from feat/DEV-526-consume-dunite-csrf into main
    b746094 refactor(csrf): consume dunite-core OriginGuard, drop bunyip-api copy
    28b6ff6 Merge pull request 'ci(e2e): drop the doubled E2E prefix from the published check names' (#481) from fix/BUNYIP-478-e2e-check-name-dedup into main
    7df4eaa Merge pull request 'fix(web): log transport/decode detail suppressed from the user' (#480) from fix/BUNYIP-477-log-suppressed-detail into main
    b4e6be0 Merge pull request 'chore(scripts): rewrite the CI guards and operator scripts in Nushell' (#492) from chore/BUNYIP-490-nushell-ci-guards into main
    e41d6e3 chore(scripts): rewrite the CI guards and operator scripts in Nushell
    3508642 Merge branch 'main' into fix/BUNYIP-477-log-suppressed-detail
    5230768 Merge pull request 'feat(config): consolidate the at-rest keys into APP_ENCRYPTION_KEY' (#483) from chore/BUNYIP-483-single-app-encryption-key into main
    827fefb fix(ci): unblock the Stripe-env gate and point the transitional key layer at its removal
    46f5d6d ci: run every workflow step under Nushell
    651732e Merge branch 'main' into chore/BUNYIP-483-single-app-encryption-key
    19accaf Merge pull request 'fix(web): space the admin stat cards on the page rhythm' (#490) from fix/BUNYIP-367-card-spacing into main
    e533ad7 fix(web): space the admin stat cards on the page rhythm
    22b5ec8 Merge pull request 'fix(web): scroll the sidebar independently of the page' (#489) from fix/BUNYIP-368-sidebar-independent-scroll into main
    f9e0d34 fix(web): scroll the sidebar independently of the page
    65c9a8c Merge pull request 'feat(web): mount the feedback launcher in the admin panel' (#488) from feat/BUNYIP-370-feedback-everywhere into main
    c01c074 feat(web): mount the feedback launcher in the admin panel
    4ec789c Merge pull request 'feat(pricing): drive /pricing from the admin Pricing tiers page' (#487) from feat/BUNYIP-487-admin-driven-pricing into main
    44150e0 feat(pricing): drive /pricing from the admin Pricing tiers page
    54d5f82 Merge pull request 'test(web): cover every primary wash in the contrast guard' (#485) from fix/BUNYIP-485-primary-text-token into main
    c96bfcc test(web): cover every primary wash in the contrast guard
    96cd54f fix(web): split a primary-text token off the fill
    1935111 Merge pull request 'fix(web): focus the first field on every auth card' (#484) from fix/BUNYIP-486-auth-card-autofocus into main
    0366753 fix(web): focus the first field on every auth card
    8a010e7 feat(config): consolidate the at-rest keys into APP_ENCRYPTION_KEY
    b975786 Merge pull request 'feat(stripe): make the database the only source of Stripe config' (#482) from chore/BUNYIP-482-remove-stripe-env-vars into main
    0f24fe2 feat(stripe): make the database the only source of Stripe config
    d85ba61 ci(e2e): drop the doubled E2E prefix from the published check names
    72d990d Merge pull request 'fix(api): return the generic AppError envelope for extractor errors' (#479) from fix/BUNYIP-481-extractor-error-handlers into main
    03ae306 fix(web): log the transport/decode detail suppressed from the user
    43f869a Merge pull request 'ci(e2e): prefix E2E check names so branch protection can match them' (#477) from fix/BUNYIP-478-e2e-check-names into main
    28e5579 fix(api): return the generic AppError envelope for extractor errors
    4d31d51 Merge pull request 'fix(web): collapse backend/transport errors to a generic message' (#478) from fix/BUNYIP-477-simpler-error-messages into main
    190534f fix(web): collapse backend/transport errors to a generic message
    8502ba7 ci(e2e): prefix E2E check names so branch protection can match them
    71426e2 Merge pull request 'fix(e2e): match the destructive error box by class substring' (#476) from fix/BUNYIP-480-e2e-destructive-selector into main
    6039855 fix(e2e): match the destructive error box by class substring
    3c5aa9e Merge pull request 'fix(web): unify auth copy, admin separators, landing title' (#475) from fix/BUNYIP-471-copy-drift into main
    312a201 fix(web): unify auth copy, admin separators, landing title
    ab29a35 Merge pull request 'feat(web): add shared empty_state() and route every list through it' (#474) from fix/BUNYIP-468-empty-state into main
    fb83df3 feat(web): add shared empty_state() and route every list through it
    ba9d503 Merge pull request 'feat(web): a11y wiring - label association, machine-readable time, links' (#473) from fix/BUNYIP-466-a11y-wiring into main
    375bde4 feat(web): a11y wiring - label association, machine-readable time, links
    f829fe8 Merge pull request 'chore(infra): verify + surface two-hop trusted-proxy posture (BUNYIP-476)' (#472) from chore/BUNYIP-476-verify-trusted-proxy into main
    2596a65 chore(infra): verify + surface two-hop trusted-proxy posture (BUNYIP-476)
    598a72d Merge pull request 'feat(web): consolidate shared UI kit across admin/settings/auth' (#471) from fix/BUNYIP-467-shared-kit into main
    73fc2bb feat(web): consolidate shared UI kit across admin/settings/auth
    f1c2a90 Merge pull request 'feat(admin): IP2Proxy/IP2Location dataset refresh + freshness readout (BUNYIP-474)' (#470) from feat/BUNYIP-474-dataset-age-and-refresh into main
    401fcb6 feat(admin): IP2Proxy/IP2Location dataset refresh + freshness readout (BUNYIP-474)
    c2e13c8 Merge pull request 'fix(admin): drag-and-drop application reorder, fix broken swap (BUNYIP-473)' (#468) from fix/BUNYIP-473-app-reorder-dnd into main
    3c577f2 Merge pull request 'fix(web): token + contrast fixes (yellow, destructive reds, indigo dark, muted-foreground)' (#469) from fix/BUNYIP-465-token-contrast into main
    7b8736d fix(admin): drag-and-drop application reorder, fix broken swap (BUNYIP-473)
    d7471bb fix(web): token + contrast fixes (yellow indicator, destructive reds, indigo dark, muted-foreground)
    8f8e66a Merge pull request 'fix(web): spacing/responsive nits (rhythm, grid, overflow, sort cue, ellipsis)' (#467) from fix/BUNYIP-472-spacing-responsive-nits into main
    825f6e3 Merge pull request 'feat(admin): advisory ASN/VPN enrichment of client IPs (BUNYIP-437)' (#466) from feat/BUNYIP-437-ip-enrichment-consumer into main
    a512e55 Merge pull request 'fix(web): Title-case the browser titles to match their page h1s' (#465) from fix/BUNYIP-470-title-casing into main
    f5f0afb Merge pull request 'fix(web): align card-title and page-h1 sizes to the app scale' (#464) from fix/BUNYIP-469-typography-sizes into main
    65be63d fix(web): spacing/responsive/affordance nits (rhythm, grid, overflow, sort cue, ellipsis)
    26d912b feat(admin): advisory ASN/VPN enrichment of client IPs (BUNYIP-437)
    296976c fix(web): Title-case the browser titles to match their page h1s
    6338619 fix(web): align card-title and page-h1 sizes to the app scale
    6418071 Merge pull request 'fix(web): add --destructive-text token for legible dark-mode destructive text' (#463) from fix/BUNYIP-464-destructive-text-token into main
    f9f048f Merge pull request 'fix(web): surface admin API-fetch failures instead of empty/zero state' (#462) from fix/BUNYIP-461-admin-api-error-state into main
    165ca0a Merge pull request 'fix(web): give the warning badge a dark-mode amber pair' (#461) from fix/BUNYIP-463-warning-badge-dark into main
    fabfe2a Merge pull request 'fix(web): render footer brand host from runtime config' (#460) from fix/BUNYIP-462-footer-runtime-domain into main
    e9b39f9 fix(web): add a --destructive-text token for legible dark-mode destructive text
    b07e9fe fix(web): surface admin API-fetch failures instead of empty/zero state
    7c2357d Merge pull request 'fix(admin): realign application edit panel (BUNYIP-460)' (#459) from fix/BUNYIP-460-application-panel-alignment into main
    b9edfd2 fix(web): give the warning badge a dark-mode amber pair
    b8fac53 fix(web): render footer brand host from runtime config
    8add73a fix(admin): realign application edit panel (BUNYIP-460)
    fd2cb2a Merge pull request 'Consume dunite-geoip and dunite-image-upload (DEV-531)' (#458) from refactor/DEV-531-consume-dunite-geoip-image into main
    4af42c9 refactor(avatar): consume dunite-image-upload for the validation (DEV-531)
    cb25933 refactor(geoip): consume dunite-geoip instead of bunyip's copy (DEV-531)

    Downloads