This release includes 2 security fixes for security teams reviewing exposed deployments.
Affected surfaces
ReleasePort's take
Moderate signalThe release upgrades Django to 5.2.16 and click to 8.4.2, patching three security vulnerabilities (PYSEC-2026‑2090, ‑2091, ‑2092) and one additional vulnerability (PYSEC-2026‑2132).
Why it matters: Patch Django 5.2.15 → 5.2.16 and click 8.2.1 → 8.4.2 to remediate three high‑severity PYSEC vulnerabilities.
Summary
AI summaryUpdates fix, feat, and PYSEC-2026-2090/2091/2092 across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Critical |
Upgraded Django 5.2.15 → 5.2.16 to patch three known vulnerabilities (PYSEC-2026-2090, PYSEC-2026-2091, PYSEC-2026-2092). Upgraded Django 5.2.15 → 5.2.16 to patch three known vulnerabilities (PYSEC-2026-2090, PYSEC-2026-2091, PYSEC-2026-2092). Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Security | High |
Upgraded click 8.2.1 → 8.4.2 to patch PYSEC-2026-2132 vulnerability. Upgraded click 8.2.1 → 8.4.2 to patch PYSEC-2026-2132 vulnerability. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Feature | Medium |
Added `PATCH /organization-admin/{slug}/membership-tiers/reorder` endpoint to set display order of membership tiers. Added `PATCH /organization-admin/{slug}/membership-tiers/reorder` endpoint to set display order of membership tiers. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Feature | Medium |
Exposed `membership_grace_period_days` and `membership_refund_policy` fields on org-admin detail/edit schemas, requiring `manage_subscriptions` permission to change. Exposed `membership_grace_period_days` and `membership_refund_policy` fields on org-admin detail/edit schemas, requiring `manage_subscriptions` permission to change. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Feature | Medium |
Public `OrganizationRetrieveSchema` now includes `membership_refund_policy` for prospective and active subscribers. Public `OrganizationRetrieveSchema` now includes `membership_refund_policy` for prospective and active subscribers. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Feature | Medium |
Public organization-token preview (`GET /organizations/tokens/{token_id}`) now includes inviting organization's name, slug, logo URL, and granted membership tier name. Public organization-token preview (`GET /organizations/tokens/{token_id}`) now includes inviting organization's name, slug, logo URL, and granted membership tier name. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Feature | Medium |
Public event-token preview (`GET /events/tokens/{token_id}`) now includes event name, slug, organization slug, start time, and cover URL. Public event-token preview (`GET /events/tokens/{token_id}`) now includes event name, slug, organization slug, start time, and cover URL. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Feature | Low |
Any organization staff member can list members via `GET /organization-admin/{slug}/members` without needing `manage_members` permission. Any organization staff member can list members via `GET /organization-admin/{slug}/members` without needing `manage_members` permission. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
— |
| Feature | Low |
`PUT /organization-admin/{slug}` now echoes the full admin representation, including updated subscription‑policy and billing/VAT fields. `PUT /organization-admin/{slug}` now echoes the full admin representation, including updated subscription‑policy and billing/VAT fields. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
— |
| Bugfix | Medium |
Search results no longer contain duplicates when matching on multiplying relations (e.g., tags). Search results no longer contain duplicates when matching on multiplying relations (e.g., tags). Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Bugfix | Medium |
Membership request approval and rejection notifications are now reliably sent to applicants. Membership request approval and rejection notifications are now reliably sent to applicants. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Bugfix | Medium |
Organization staff with appropriate permissions can now delete resources and manage discount codes via org‑admin routes. Organization staff with appropriate permissions can now delete resources and manage discount codes via org‑admin routes. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Bugfix | Medium |
Public token previews (`GET /events/tokens/{token_id}` and `GET /organizations/tokens/{token_id}`) return 410 Gone with a machine‑readable `reason` for expired or used‑up tokens, and include minimal display fields; unknown token IDs now return 404. Public token previews (`GET /events/tokens/{token_id}` and `GET /organizations/tokens/{token_id}`) return 410 Gone with a machine‑readable `reason` for expired or used‑up tokens, and include minimal display fields; unknown token IDs now return 404. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
— |
| Bugfix | Medium |
Attendees can change or withdraw RSVP on full events (yes→no/maybe, maybe→no) without `event_is_full` rejection; seat freeing triggers waitlist processing. Attendees can change or withdraw RSVP on full events (yes→no/maybe, maybe→no) without `event_is_full` rejection; seat freeing triggers waitlist processing. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
— |
Full changelog
Added
- Membership tiers now carry a persistable display order: a new
PATCH /organization-admin/{slug}/membership-tiers/reorderendpoint sets the order,display_orderis exposed on the tier schema, and newly created tiers append at the bottom — enabling drag-to-reorder in the org-admin UI. Existing tiers are backfilled in their current alphabetical order on deploy. - Organization subscription-policy fields
membership_grace_period_daysandmembership_refund_policyare now exposed on the org-admin detail and edit schemas, so the org-admin UI can display and edit them. Changing them requires themanage_subscriptionspermission (consistent with the rest of the subscription management surface); staff with onlyedit_organizationcannot alter subscription policy. - The public organization schema (
OrganizationRetrieveSchema) now includesmembership_refund_policy, so prospective and active subscribers can read the refund policy before requesting or paying for a membership (the grace period stays admin-internal). - Public organization-token preview (
GET /organizations/tokens/{token_id}) now includes the inviting organization'sorganization_name,organization_slug,organization_logo_url, and the grantedmembership_tier_name, so the pre-claim join page can show which organization (and tier) is inviting. - Public event-token preview (
GET /events/tokens/{token_id}) now includesevent_name,event_slug,organization_slug,event_start, andevent_cover_url, so the pre-claim join page can render the event instead of "Join undefined".
Changed
- Any organization staff member can now list members (
GET /organization-admin/{slug}/members); this previously required themanage_memberspermission, so staff who could already create RSVPs on behalf of a user had no way to look them up. - Public token previews (
GET /events/tokens/{token_id}andGET /organizations/tokens/{token_id}) now return 410 Gone with a machine-readablereason(expiredorused_up) plus minimal display fields for tokens that exist but are no longer servable, instead of a generic 404 — so the join pages can distinguish an expired invitation from a used-up one. A 404 is now returned only for genuinely unknown token ids.
Fixed
- Search results no longer contain duplicates when the search term matches on a multiplying relation (e.g. tags): an event with 3 matching tags used to appear 3× in events, event-series, organization, dashboard, and questionnaire listings.
- Membership request approval and rejection notifications are no longer silently dropped — approved and rejected applicants now receive their in-app/email notification (the notification context previously failed schema validation).
- Organization staff granted the relevant permissions can now use org-admin routes that previously denied every non-owner staff member regardless of their grants: deleting organization resources (requires
edit_organization) and managing discount codes (requiresmanage_tickets). Revenue & VAT report endpoints are now explicitly owner-only. - Attendees can now change or withdraw their RSVP on a full event: a
yes → no/maybe, amaybe → no, or a new decline are no longer rejected withevent_is_full— capacity is only enforced on seat-claiming (a newyes) writes. Freeing a seat this way triggers waitlist processing for the next person in line. PUT /organization-admin/{slug}now echoes the full admin representation (the same schema asGET), so a successful edit returns every updated field — including the subscription-policy and billing/VAT fields it previously omitted — instead of forcing a follow-upGET.
Security
- Upgraded Django 5.2.15 → 5.2.16 to patch three known vulnerabilities (
PYSEC-2026-2090,PYSEC-2026-2091,PYSEC-2026-2092). - Upgraded click 8.2.1 → 8.4.2 to patch
PYSEC-2026-2132.
What's Changed
- docs: document macOS GDAL/WeasyPrint native-lib fix by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/658
- fix: bootstrap seeding gaps blocking E2E journeys (#659–#662) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/663
- fix: make bootstrap global-ban seeding idempotent (#665) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/666
- fix: de-duplicate search results across M2M joins (#664) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/667
- fix: bump django to 5.2.16 (PYSEC-2026-2090/2091/2092) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/669
- test(#670) attempt-burn regression guard + docs(#671) silk E2E deadlock by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/672
- fix: stop swallowing membership request approval/rejection notifications (#673) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/674
- feat: expose org name/slug/logo on public org-token preview (#675) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/676
- feat: enrich public org/event token previews (#677, #679) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/680
- fix: 410 + rejection reason for expired/used-up token previews (#681) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/682
- fix: guard org-admin routes on real PermissionMap keys (#683) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/685
- feat: prod-like E2E run target with PgBouncer by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/688
- feat: let any org staff list members (#686) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/689
- feat: add display_order + reorder endpoint for membership tiers (#687) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/690
- fix: allow RSVP no/maybe on full events (#691) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/692
- fix(e2e): stop macOS fork crash; expose org subscription-policy fields by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/696
- fix: PUT /organization-admin/{slug} echoes the full admin schema (#697) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/698
- feat(orgs): expose membership_refund_policy on public org schema (FE #633) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/699
- chore(release): v1.70.0 by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/678
Full Changelog: https://github.com/letsrevel/revel-backend/compare/v1.69.0...v1.70.0
Security Fixes
- Upgraded Django from 5.2.15 to 5.2.16 to patch CVEs PYSEC-2026-2090, PYSEC-2026-2091, and PYSEC-2026-2092.
- Upgraded click from 8.2.1 to 8.4.2 to patch CVE PYSEC-2026-2132.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Related context
Related tools
Earlier breaking changes
- v1.72.1 Makes payment base fields (`amount`, `currency`, `platform_fee`) read-only
- v1.72.1 Restricts organization ownership transfer to superusers only
- v1.71.0 Checkout flow now uses a two-step reserve then session creation process.
- v1.68.0 check-in endpoint path renamed to use ticket code (UUID or series:<uuid>) instead of ticket ID.
Beta — feedback welcome: [email protected]