Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1051 commits
Select commit Hold shift + click to select a range
11f1054
DEV: Fix pitchfork stalling on shutdown when using `bin/ember-cli -u`…
Flink Mar 27, 2026
0bddb0b
DEV: Extract `ReleaseUtils` module from release rake file (#38912)
tgxworld Mar 27, 2026
7b39c4c
DEV: Use detached worktrees for release processes (#38918)
davidtaylorhq Mar 27, 2026
42c3556
FIX: Add `@prefixHex` option to FormKit color control (#38920)
ZogStriP Mar 27, 2026
e1a47e7
FIX: Make confirmation phrase matching locale-safe (#38923)
ZogStriP Mar 27, 2026
8afc848
UX: Hide update banner in embed mode (#38922)
derekrushforth Mar 27, 2026
2fb2dcb
FIX: Disable signup CTA in embed mode (#38924)
xfalcox Mar 27, 2026
66a38dc
UX: fix composer menu horizontal overflow (#38929)
awesomerobot Mar 27, 2026
92968f6
FIX: Add MetaIAB to non-crawler user agents (#38926)
davidtaylorhq Mar 27, 2026
467652d
FIX: Call complete callback in moveReactionAnimation during tests (#3…
janzenisaac Mar 27, 2026
c981963
UX: Embed mode styles (#38933)
derekrushforth Mar 27, 2026
713fe49
FIX: Don't change quoted content whe proofreading (#38934)
romanrizzi Mar 27, 2026
ee053ae
FIX: Skip reaction animations in system test environment (#38936)
janzenisaac Mar 27, 2026
d499587
I18N: Update translations (#38894)
discourse-translator-bot Mar 27, 2026
a40aeb0
UX: fix wrapping in chat block button (#38899)
awesomerobot Mar 27, 2026
41f62aa
UX: fix 2FA alignment for email login (#38898)
awesomerobot Mar 27, 2026
544e36f
DEPS: Bump ruby-lsp from 0.26.8 to 0.26.9 (#38946)
dependabot[bot] Mar 28, 2026
c83d656
DEPS: Bump google-protobuf from 4.34.0 to 4.34.1 (#38956)
dependabot[bot] Mar 29, 2026
f5e774d
DEPS: Bump excon from 1.4.1 to 1.4.2 (#38955)
dependabot[bot] Mar 29, 2026
02a5af0
DEPS: Bump @rollup/browser from 4.59.0 to 4.60.0 (#38951)
dependabot[bot] Mar 29, 2026
2ef3141
DEV: Delete the old enable_upcoming_changes setting (#38958)
martin-brennan Mar 30, 2026
9d83f43
DEPS: Bump nokogiri from 1.18.10 to 1.19.2 (#38954)
dependabot[bot] Mar 30, 2026
7e86723
FIX: add missing server-side-only routes to Ember router (#38962)
ZogStriP Mar 30, 2026
2313b7d
UX: align the participant buttons in PM (#38708)
small-lovely-cat Mar 30, 2026
107854b
DEPS: Bump ace-builds from 1.43.5 to 1.43.6 (#37506)
dependabot[bot] Mar 30, 2026
bfb4ea7
DEPS: Bump @swc/core from 1.15.18 to 1.15.21 (#38950)
dependabot[bot] Mar 30, 2026
743ae27
DEPS: Bump trilogy from 2.10.0 to 2.11.0 (#38952)
dependabot[bot] Mar 30, 2026
cbf160f
DEPS: Bump octokit from 5.6.1 to 10.0.0 (#33807)
dependabot[bot] Mar 30, 2026
c08e13f
DEV: Update fastimage to 2.4.1 (#38939)
cvx Mar 30, 2026
b9bf992
DEV: Update rubyzip to 3.x (#38932)
cvx Mar 30, 2026
86046da
DEV: Drop legacy widget-related shims (#38860)
davidtaylorhq Mar 30, 2026
3aba9c6
DEV: Update esbuild to 0.27.4 (#38957)
cvx Mar 30, 2026
afd2707
UX: support middle click to open topic in new tab for Horizon (#38942)
awesomerobot Mar 30, 2026
ce5b822
UX: remove background from Horizon timeline scroller, use outline (#3…
awesomerobot Mar 30, 2026
61da54b
UX: show reply count in Horizon theme when there's 1 reply (#38938)
awesomerobot Mar 30, 2026
dfe6ae5
FIX: restore rrule in more-menu "Add to Calendar" ICS export (#38969)
ZogStriP Mar 30, 2026
67c45e8
DEV: Update prompts for translations (#38965)
nattsw Mar 30, 2026
b9d0abd
I18N: Update translations (#38961)
discourse-translator-bot Mar 30, 2026
18a0a8d
FEATURE: Add AWS Bedrock Converse API provider (#38903)
xfalcox Mar 30, 2026
1bed6d8
DEV: task to update security advisory version info (#38327)
jjaffeux Mar 30, 2026
88b1728
FEATURE: add automated PR security scan workflow (#38972)
janzenisaac Mar 30, 2026
99edc6f
FEATURE: add application inference profile support for AWS Bedrock (#…
xfalcox Mar 30, 2026
ba84ecb
DEV: Squash-merge security fixes in release rake task (#38921)
davidtaylorhq Mar 30, 2026
93ed2ad
FEATURE: Add review queue tools for AI agents (#38928)
xfalcox Mar 30, 2026
8c0a4bb
DEV: Upgrade Patreon plugin to API v2 with v1 backward compatibility …
xfalcox Mar 30, 2026
fe99db7
UX: Fix calendar group event text color (#38979)
sketchius Mar 30, 2026
99a71e7
UX: make sure Horizon makes space for admin changes banner (#38968)
awesomerobot Mar 30, 2026
20405dc
UX: new checkbox design (#38967)
chapoi Mar 30, 2026
02208d5
DEPS: Bump multi_json from 1.18.0 to 1.19.1 (#38183)
dependabot[bot] Mar 30, 2026
18cb41f
DEV: Use raw related/suggested topic data in fixtures (#38982)
cvx Mar 30, 2026
44230ba
DEPS: Bump prosemirror-view from 1.41.6 to 1.41.7 in the prosemirror …
dependabot[bot] Mar 30, 2026
63d79cd
DEPS: Bump @fortawesome/fontawesome-free from 7.1.0 to 7.2.0 (#38182)
dependabot[bot] Mar 30, 2026
726dad4
DEV: Add `commitField` to FormKit (#38944)
megothss Mar 30, 2026
c12e7a2
DEV: Add form reset hooks to category editor (#38945)
megothss Mar 30, 2026
cb13966
DEV: move mobile welcome-header CSS into common file (#38973)
awesomerobot Mar 30, 2026
ccd1e4a
DEV: remove old welcome banner css (#38976)
awesomerobot Mar 30, 2026
822aceb
DEV: remove unused topic map css (#38978)
awesomerobot Mar 30, 2026
bc24ded
DEV: Support running `multisite:migrate` concurrently take 2 (#38484)
tgxworld Mar 31, 2026
b21c363
DEV: Skip forking in `multisite:migrate` for single database (#38996)
tgxworld Mar 31, 2026
123de2c
DEV: Improve API schema validation debugging output (#38997)
martin-brennan Mar 31, 2026
26e689f
FIX: allow event creators to manage invitees (#38966)
ZogStriP Mar 31, 2026
878281a
DEV: Use GHSA IDs for stage_security_fixes rake task (#38987)
davidtaylorhq Mar 31, 2026
a53910e
UX: improve "back to forum" tracking for AI conversations (#38994)
awesomerobot Mar 31, 2026
e75cf45
SECURITY: Restrict group SMTP test to admins and block internal hosts
megothss Mar 31, 2026
e1bb146
SECURITY: Scope sentiment posts endpoint to allowed categories
janzenisaac Mar 31, 2026
c34f2aa
SECURITY: Fixes for discourse-subscriptions
tgxworld Mar 31, 2026
07f6665
SECURITY: Respect group visibility in category chatables when accesse…
jdmartinez1062 Mar 31, 2026
0b4e6ff
SECURITY: Check topic visibility in Oneboxer even when categories match
nattsw Mar 31, 2026
46edb17
SECURITY: Stored XSS via unescaped assignee name
megothss Mar 31, 2026
cac7d61
SECURITY: Stored XSS in discourse-ai shared conversations onebox
janzenisaac Mar 31, 2026
5a00b47
SECURITY: Force regeneration for edit-outdated summaries and block st…
romanrizzi Mar 31, 2026
81fd89e
SECURITY: unauthorized channel membership inference
dbattersby Mar 31, 2026
080408b
SECURITY: Validate sso_destination_url cookie to prevent open redirect
jdmartinez1062 Mar 31, 2026
bf8dbf6
SECURITY: Missing post-level authorization allows whisper metadata di…
janzenisaac Mar 31, 2026
d74ff25
SECURITY: Check topic visibility before allowing poll interactions
janzenisaac Mar 31, 2026
727029a
SECURITY: Prevent moderators from exporting admin-only reports via CSV
janzenisaac Mar 31, 2026
6365ac2
SECURITY: Gate staged user fields on email verification
janzenisaac Mar 31, 2026
05e3da2
SECURITY: XSS on category description update via API
martin-brennan Mar 31, 2026
769f438
SECURITY: Harden chat DM channel creation and expansion
jjaffeux Mar 31, 2026
ad8e51f
SECURITY: Enforce hidden tag visibility in `fetch_tag`
tgxworld Mar 31, 2026
df94d46
DEV: Update tag specs 403 -> 404
davidtaylorhq Mar 31, 2026
fdd750d
DEV: Begin development of v2026.4.0-latest (#39006)
github-actions[bot] Mar 31, 2026
1277244
UX: Add copy button to User API Key display page
ducks Jan 11, 2026
0fd9af2
UX: add tooltips to experimental change badges (#39007)
awesomerobot Mar 31, 2026
1f4d834
FEATURE: Expand AI translation settings to allow choosing specific ca…
nattsw Mar 31, 2026
4a40a40
FIX: debounce on group search not debouncing (#38995)
tannerabread Mar 31, 2026
8a474bb
DEV: Fix linting (#39013)
cvx Mar 31, 2026
fe70d5f
UX: link helpful flags from user profile staff counters (#39011)
awesomerobot Mar 31, 2026
369a5c6
DEV: move mobile user-stream-item css into common (#38977)
awesomerobot Mar 31, 2026
60587a2
I18N: Update translations (#39002)
discourse-translator-bot Mar 31, 2026
3e4db41
DEV: Remove IE-related code, remove isAppleDevice helper (#39008)
cvx Mar 31, 2026
0092d48
DEV: Handle running TemporaryDb as root (#38988)
cvx Mar 31, 2026
f1651f7
DEV: move mobile more-topics css into common (#38981)
awesomerobot Mar 31, 2026
5ff0e66
DEPS: Bump diff from 8.0.3 to 8.0.4 (#38990)
dependabot[bot] Mar 31, 2026
46e769b
DEPS: Bump testem from 3.18.0 to 3.19.0 (#38989)
dependabot[bot] Mar 31, 2026
b85e72d
DEV: move mobile user card styles into common directory (#38984)
awesomerobot Mar 31, 2026
4dcaa7c
DEV: move mobile emoji-picker styles into common file (#38983)
awesomerobot Mar 31, 2026
cbb63ef
FEATURE: Add advanced OAuth options for MCP servers (#38913)
SamSaffron Mar 31, 2026
a8b9dac
DEPS: Bump ember-auto-import from 2.12.1 to 2.13.0 (#39015)
dependabot[bot] Mar 31, 2026
fac1329
DEPS: Bump @faker-js/faker from 10.3.0 to 10.4.0 (#39017)
dependabot[bot] Mar 31, 2026
cfb1435
DEPS: Bump trilogy from 2.11.0 to 2.11.1 (#38991)
dependabot[bot] Mar 31, 2026
f7e3408
DEPS: Bump mcp from 0.8.0 to 0.10.0 (#38993)
dependabot[bot] Mar 31, 2026
78f33e2
DEV: Disable "More Topics" smoke test again (#39021)
cvx Mar 31, 2026
7444562
DEPS: Bump actions/cache from 4 to 5 (#36687)
dependabot[bot] Apr 1, 2026
b54c49c
DEV: Refactor admin search index into a service (#38959)
martin-brennan Apr 1, 2026
f469da1
UX: fix position of reactions panels for RTL languages (#39019)
awesomerobot Apr 1, 2026
dd0da69
DEV: Fix spec cleanup issues for upcoming changes (#39024)
martin-brennan Apr 1, 2026
4d225c4
I18N: Update translations (#39029)
discourse-translator-bot Apr 1, 2026
32e2818
FIX: search autocomplete with multiple tags (#38930)
dbattersby Apr 1, 2026
1fda823
FIX: Show event popup on category calendar click (#38999)
ZogStriP Apr 1, 2026
2790b17
FIX: Add CORS header for all `/assets/*` (#39031)
davidtaylorhq Apr 1, 2026
6b243ff
DEV: Remove Unicorn web server in favor of Pitchfork (#39032)
Flink Apr 1, 2026
7bb9b3b
FEATURE: solved notifications for tracked or watched topics (#38724)
dbattersby Apr 1, 2026
0d0c14d
UX: don't tell users they can reply with questions about a revision i…
awesomerobot Apr 1, 2026
2cf2cbb
UX: Correct topic featured link icon for RTL layouts (#39040)
ZogStriP Apr 1, 2026
92525e4
UX: ensure inviting group to PM enables group inbox (#38919)
awesomerobot Apr 1, 2026
2c9ca26
FIX: Prevent reactions on posts in archived topics (#39038)
ZogStriP Apr 1, 2026
9384391
FEATURE: add setting to opt out of solved notifications (#38730)
dbattersby Apr 1, 2026
81cac8b
DEV: Remove the old non-rollup plugin compiler (#39009)
cvx Apr 1, 2026
2527b2b
FIX: Respect "Notify users" checkbox for group email invitations (#39…
ZogStriP Apr 1, 2026
e59401f
DEV: Use Pitchfork instead of Unicorn in docs (#39041)
Flink Apr 1, 2026
7633f0d
Revert "DEV: Remove the old non-rollup plugin compiler (#39009)" (#39…
cvx Apr 1, 2026
cbff75e
FIX: prevent non-admin group owners from clearing group title (#39043)
keegangeorge Apr 1, 2026
36424c9
FEATURE: Dynamic chart types for data explorer (#39036)
nattsw Apr 1, 2026
6c2d77e
FEATURE: Add full app mode toggle to embedding admin page (#39052)
xfalcox Apr 1, 2026
bbc2fed
FIX: Patreon API pagination bugs causing missing pledges (#39058)
xfalcox Apr 1, 2026
1ada2f3
DEV: promote custom splash screen change to beta (#39045)
awesomerobot Apr 1, 2026
24ac826
DEV: Add an upcoming change toggler in the dev tools sidebar (#39027)
martin-brennan Apr 1, 2026
103408f
DEV: Add sidebar-discovery block outlet to discovery layout (#38937)
megothss Apr 2, 2026
5cb38fa
FIX: Unconfigurable plugin site settings not properly excluded (#39023)
martin-brennan Apr 2, 2026
5df8bb1
UX: Keep navigational items like tags and categories translated (#39030)
nattsw Apr 2, 2026
5080ceb
FIX: resolve localized tag names via ID when creating or editing topi…
nattsw Apr 2, 2026
eb83b41
DEV: Ensure non-existent site setting dependency does not crash (#39068)
nattsw Apr 2, 2026
d69173c
FIX: Respect user's manual topic notification level changes (#39037)
ZogStriP Apr 2, 2026
5f0d95e
FEATURE: Tags get a dedicated settings page (#39057)
nattsw Apr 2, 2026
af870d5
FIX: Skip QAPage schema when topic has no visible answers (#38964)
ZogStriP Apr 2, 2026
a164039
FIX: composer rollback on failed post update (#39071)
dbattersby Apr 2, 2026
96629f6
FIX: show next occurrence for recurring events with show_local_time (…
ZogStriP Apr 2, 2026
6e2f67c
FIX: Parse RRULE before building Google Calendar URL (#39074)
ZogStriP Apr 2, 2026
a6024a8
FIX: new group without page refresh (#39075)
dbattersby Apr 2, 2026
bb5aea0
I18N: Update translations (#39069)
discourse-translator-bot Apr 2, 2026
8803516
DEV: Keep commit author when merging security fixes (#39010)
davidtaylorhq Apr 2, 2026
0b37b99
FEATURE: Allow changing source repo/branch/key for theme after instal…
davidtaylorhq Apr 2, 2026
7413ea4
UX: improve styling of "show post" button in user notes (#39061)
awesomerobot Apr 2, 2026
b1d73bb
DEV: move mobile d-menu styles to common directory (#39049)
awesomerobot Apr 2, 2026
6b4e048
Revert "DEV: Update rubyzip to 3.x (#38932)" (#39078)
cvx Apr 2, 2026
2048952
DEV: move mobile form-kit CSS to common directory (#39053)
awesomerobot Apr 2, 2026
70f9794
DEV: move mobile select-kit CSS to common files (#39055)
awesomerobot Apr 2, 2026
d88286f
DEV: add delayed-hover trigger to float-kit (#39080)
ZogStriP Apr 2, 2026
0dd6e0d
Discourse boosts (#38607)
jjaffeux Apr 2, 2026
1cb3af3
DEV: Use structured output for translations (#39079)
nattsw Apr 3, 2026
8cf0637
DEV: Add the ability to register an AI module for data explorer (#38891)
nattsw Apr 3, 2026
3ed866a
DEV: Add `each` step to service framework for collection iteration (#…
Flink Apr 3, 2026
dba4dc2
I18N: Update translations (#39092)
discourse-translator-bot Apr 3, 2026
3944aaa
UX: Data explorer has a new query page (#39094)
nattsw Apr 3, 2026
7cd42d7
Revert "UX: improve "back to forum" tracking for AI conversations (#3…
OsamaSayegh Apr 3, 2026
2596ab1
UX: Move reply button on empty state in embed mode (#38935)
derekrushforth Apr 3, 2026
9740009
FEATURE: AI-generated queries using user-filled descriptions (#39095)
nattsw Apr 4, 2026
860a7ac
DEV: Restore tag-info model for frontend (#39101)
nattsw Apr 5, 2026
0902cc7
FIX: Add missing Poll plugin title (#39109)
Drenmi Apr 6, 2026
0148a83
UX: improve "back to forum" tracking for AI conversations (#39098)
awesomerobot Apr 6, 2026
438ef32
UX: create combined category and tag settings dropdown (#39099)
awesomerobot Apr 6, 2026
0acfe07
PERF: Add Users to Group Improvements Pt. 2 (#38901)
tannerabread Apr 6, 2026
950b430
UX: Dedicated page when viewing/editing a particular query (#39114)
nattsw Apr 6, 2026
d1be2da
FIX: Log S3 asset deletion errors instead of raising
ducks Mar 24, 2026
8b1ec5a
FEATURE: Locale-specific emoji search aliases (#39089)
xfalcox Apr 6, 2026
8b018c2
UX: improve custom splash centering in PWAs (#39116)
awesomerobot Apr 6, 2026
0ccdd15
DEV: Move 4 upcoming changes to stable (#39066)
martin-brennan Apr 7, 2026
c6db6c8
FEATURE: Support group based category posting review modes (#38707)
tgxworld Apr 7, 2026
b617df4
FEATURE: Cache data explorer responses by query and param for quick r…
nattsw Apr 7, 2026
2ec93c6
FEATURE: Allow acting on all bookmarks in topic footer buttons (#39063)
SamSaffron Apr 7, 2026
cf2f1a7
UX: Show graph by default and compact (#39123)
nattsw Apr 7, 2026
3f44441
FIX: Pin date validation in feature topic modal (#39059)
tgxworld Apr 7, 2026
bd27a6d
FIX: Further fix for Chat-settings/member list failing to scroll on I…
small-lovely-cat Apr 7, 2026
c47498b
FIX: No charts when there are text columns alongside numeric columns …
nattsw Apr 7, 2026
b6202b4
FIX: Regression with numeric tags in RSS feed URL generation (#39113)
pmusaraj Apr 7, 2026
cd64272
FEATURE: A dedicated 'show original' user preferences saved to user o…
nattsw Apr 7, 2026
6e88761
FIX: add missing solved schema microdata (#39131)
dbattersby Apr 7, 2026
b554ecc
FIX: Cakeday birthdate not visible to users with hidden profiles (#39…
ZogStriP Apr 7, 2026
b9dff97
UX: add default button styling to new template button (#39132)
keegangeorge Apr 7, 2026
4359fd7
DEV: Split mobile chat unread indicators by current vs other channels…
chapoi Apr 7, 2026
cb8eaf6
FEATURE: Add parallel post localization backfill jobs (#39134)
xfalcox Apr 7, 2026
aabfc9e
UX: clarify "topic type" options in automation (#39117)
awesomerobot Apr 7, 2026
208a0be
FIX: Ensure saving saves 'show original' user preference (#39135)
nattsw Apr 7, 2026
d3ed978
DEV: Add `d-icon-grid-picker` component (#38943)
megothss Apr 7, 2026
ea53cb3
DEV: Validate upcoming change metadata in settings (#39122)
martin-brennan Apr 7, 2026
d9c0c2d
DEV: add plugin post-migration generator and migration skill (#39125)
SamSaffron Apr 7, 2026
57f9b10
UX: fix RTL overflow scroll in composer controls and other nav (#39141)
awesomerobot Apr 7, 2026
290e519
DEV: Remove redundant line from discourse-migration skill (#39143)
tgxworld Apr 8, 2026
dd8c16c
FEATURE: Allow upcoming changes to control site setting defaults (#38…
martin-brennan Apr 8, 2026
8002700
DEV: Improve migration skill (#39144)
tgxworld Apr 8, 2026
5a5dfc2
FIX: Correct links to docs (#39146)
nattsw Apr 8, 2026
ec39131
DEPS: Bump mime-types-data from 3.2026.0317 to 3.2026.0407 (#39139)
dependabot[bot] Apr 8, 2026
44982c1
FIX: Respect query params like `exclude_tag` in RSS feed endpoints (#…
ZogStriP Apr 8, 2026
d86f2eb
UX: Result controls for data explorer (#39147)
nattsw Apr 8, 2026
379304a
FIX: Better handling of github_folder onebox w/o opengraph tags (#39142)
cvx Apr 8, 2026
0099ed3
I18N: Update translations (#39112)
discourse-translator-bot Apr 8, 2026
d4246c4
DEV: Update rubyzip to 3.x (attempt 2) (#39151)
cvx Apr 8, 2026
6672d35
DEV: Pass transientData and registerValidator to category-custom-sett…
megothss Apr 8, 2026
cfd5b46
FIX: Prevent HTML-encoding of special characters in ICS feeds (#39152)
ZogStriP Apr 8, 2026
57ff455
FIX: Prevent topic timer crashes when publishing to category (#38872)
ZogStriP Apr 8, 2026
57f4de0
UX: Clarify `use_name_for_username_suggestions` setting description (…
ZogStriP Apr 8, 2026
026eae7
FIX: show group Assignments tab based on assignable_level (#39085)
ZogStriP Apr 8, 2026
40ea3cf
FEATURE: Show event description in calendar popup (#39076)
ZogStriP Apr 8, 2026
060f2a3
UX: Skip Horizon card layout for doc-categories simple mode (#38970)
ZogStriP Apr 8, 2026
98048eb
DEPS: Bump ember-auto-import from 2.13.0 to 2.13.1 (#39104)
dependabot[bot] Apr 8, 2026
c8299e6
DEPS: Bump ember-cli-htmlbars from 7.0.0 to 7.0.1 (#39106)
dependabot[bot] Apr 8, 2026
ed1ba0b
DEV: Update sass-embedded to 1.99.0, sassc-embedded to 1.80.8 (#39155)
cvx Apr 8, 2026
001cd7e
DEPS: Bump rb_sys from 0.9.124 to 0.9.126 (#39137)
dependabot[bot] Apr 8, 2026
1e77041
DEPS: Bump trilogy from 2.11.1 to 2.12.0 (#39140)
dependabot[bot] Apr 8, 2026
cf5cd2d
FIX: Bump topic when auto-responding to flag dispositions (#39156)
ZogStriP Apr 8, 2026
14496e1
DEPS: Bump addressable from 2.8.9 to 2.9.0 (#39148)
dependabot[bot] Apr 8, 2026
b38c2d7
FEATURE: Add friendly names to calendar subscription feeds (#39154)
xfalcox Apr 8, 2026
86fa894
DEPS: Bump cbor from 0.5.10.1 to 0.5.10.2 (#39108)
dependabot[bot] Apr 8, 2026
54fc63b
FIX: Make twitter card meta data translatable (#39150)
ZogStriP Apr 8, 2026
25ad879
UX: improve chat drawer placement with composer (#39153)
dbattersby Apr 8, 2026
535c5c1
DEV: Fix `IntersectionObserver`/`rootMargin` flake (#39157)
cvx Apr 8, 2026
0a18269
DEPS: Bump rack from 2.2.22 to 2.2.23 (#39086)
dependabot[bot] Apr 8, 2026
0786d7b
DEPS: Bump ffi from 1.17.3 to 1.17.4 (#39088)
dependabot[bot] Apr 8, 2026
9776b41
UX: retain permission when changing parent for simplified category cr…
awesomerobot Apr 8, 2026
128294a
DEV: Fix flaky (locally) request tracker specs (#39161)
cvx Apr 8, 2026
3804277
DEV: Handle missing urls in prosemirror/image (#39163)
cvx Apr 8, 2026
cca6cd0
FEATURE: Add animated_topic_thumbnails site setting (#39165)
gschlager Apr 8, 2026
c3b381e
DEV: Attempt to fix content_localization_spec flake (#39171)
cvx Apr 9, 2026
5aa8ff0
FEATURE: Add bulk pin/unpin topics (#39025)
tgxworld Apr 9, 2026
fecd069
FIX: Always use absolute URL to load highlightJS bundles (#39175)
davidtaylorhq Apr 9, 2026
8bbdffc
UX: add dot separator mixin (#39178)
chapoi Apr 9, 2026
6096c35
FEATURE: Native Reddit embeds for oneboxes (#39162)
xfalcox Apr 9, 2026
43dfee0
DEPS: Bump parser from 3.3.10.2 to 3.3.11.1 (#39087)
dependabot[bot] Apr 9, 2026
3b7935e
DEPS: Bump json from 2.19.2 to 2.19.3 (#39064)
dependabot[bot] Apr 9, 2026
d92fda5
DEPS: Bump minitest from 6.0.2 to 6.0.3 (#39169)
dependabot[bot] Apr 9, 2026
aa7acf1
DEPS: Bump trilogy from 2.12.0 to 2.12.2 (#39168)
dependabot[bot] Apr 9, 2026
c57305a
DEPS: Bump prosemirror-transform from 1.11.0 to 1.12.0 in the prosemi…
dependabot[bot] Apr 9, 2026
8c0604d
DEPS: Bump @rollup/browser from 4.60.0 to 4.60.1 (#39120)
dependabot[bot] Apr 9, 2026
6600e81
DEPS: Bump testem from 3.19.0 to 3.19.1 (#39107)
dependabot[bot] Apr 9, 2026
2c2f0bd
FIX: bypass source fetch for Reddit oneboxes (#39182)
xfalcox Apr 9, 2026
411eb17
UX: let automation d-editor respect user's editor mode preference (#3…
renato Apr 9, 2026
6f4c1f5
UX: solved styling (#39180)
chapoi Apr 9, 2026
2dde22d
UX: always hide AI summarize text when top replies is present (#39160)
awesomerobot Apr 9, 2026
cba8762
DEV: Update playwright to 1.59.1 (#39183)
cvx Apr 9, 2026
4b2c453
DEV: Convert @decorated macros to getters (#37955)
megothss Apr 10, 2026
5c46221
FIX: Render group_list settings in AI feature editor (#39199)
KrisKotlarek Apr 10, 2026
36e2e8a
FIX: Include banner topics in translation backfill (#39196)
pmusaraj Apr 10, 2026
e9afafb
UX: in header dropdown nav mode, keep AI bot header functionality the…
awesomerobot Apr 10, 2026
6a89829
UX: fix composer overflow when tagging is disabled (#39203)
awesomerobot Apr 10, 2026
b77d708
FIX: make "Solved" text translatable (#39209)
awesomerobot Apr 10, 2026
e019b97
UX: add submenu for post bookmarks (#39172)
SamSaffron Apr 13, 2026
fd833ba
DEV: Delete "prioritize_full_name_in_ux" sitesetting
mtancoigne Feb 24, 2026
2745856
DEV: Replace "prioritize_full_name_in_ux" with "prioritize_username_i…
mtancoigne Feb 24, 2026
29bafda
---WIP this needs review
mtancoigne Feb 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
1 change: 1 addition & 0 deletions .agents/skills
1 change: 1 addition & 0 deletions .claude/skills
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"workspaceFolder": "/workspace/discourse",
"postStartCommand": "./.devcontainer/scripts/start.rb",
"forwardPorts": [
9292, // bin/unicorn
9292, // bin/pitchfork
3000, // bin/rails s
4200, // ember-cli
8025, // mailhog
Expand Down
3 changes: 3 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
Expand Up @@ -85,3 +85,6 @@ e41897a3066199f3b7f4c019fb638615dfe1f007

# remove route-template usage
88d4e242ead238b353f441533a0c4b8ce3fa1f7b

# MT: Switch to nested module style across migrations/ (#38564)
89f26da39d8c977c3dde7ef7e0a5c3f2a4b58e44
9 changes: 4 additions & 5 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ updates:
prefix: "DEPS"
cooldown:
default-days: 7
open-pull-requests-limit: 20
open-pull-requests-limit: 40
versioning-strategy: lockfile-only
allow:
- dependency-type: direct
Expand Down Expand Up @@ -74,10 +74,9 @@ updates:
prefix: "DEPS"
cooldown:
default-days: 7
exclude: [
"@discourse/*"
]
open-pull-requests-limit: 20
exclude:
- "@discourse/*"
open-pull-requests-limit: 40
versioning-strategy: increase
ignore:
- dependency-name: "webpack" # Recent versions have bugs with `/static` loading. We're working to move away from webpack anyway.
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/dependabot-pnpm-dedupe.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ jobs:
token: ${{ secrets.GH_PUSH_TOKEN }}

- name: Set up pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v5

- name: Set up Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: 22

Expand Down
9 changes: 5 additions & 4 deletions .github/workflows/developer-docs-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,14 @@ jobs:

steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1

- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5

- uses: actions/setup-node@v4
- uses: actions/setup-node@v6
with:
cache: "pnpm"
cache-dependency-path: docs/developer-guides/pnpm-lock.yaml
node-version: 24

- name: Install dependencies
run: pnpm install --frozen-lockfile
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/licenses.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
git config --global user.name "Discourse CI"
- name: Bundler cache
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: vendor/bundle
key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,11 @@ jobs:

- name: ESLint
if: ${{ !cancelled() }}
run: pnpm lint:js
run: pnpm lint:js --max-warnings 0

- name: Types
if: ${{ !cancelled() }}
run: pnpm lint:types

- name: Prettier
if: ${{ !cancelled() }}
Expand All @@ -95,7 +99,3 @@ jobs:
- name: English locale lint (core plugins)
if: ${{ !cancelled() }}
run: bundle exec ruby script/i18n_lint.rb "plugins/**/locales/{client,server}.en.yml"

- name: Types
if: ${{ !cancelled() }}
run: pnpm lint:types
31 changes: 27 additions & 4 deletions .github/workflows/migration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ jobs:
run: echo "cpu-cores=$(nproc)" >> $GITHUB_OUTPUT

- name: Fetch app state cache
uses: actions/cache@v4
uses: actions/cache@v5
id: app-cache
with:
path: tmp/app-cache
Expand Down Expand Up @@ -112,12 +112,35 @@ jobs:

- name: Validate IntermediateDB schema
run: |
# Show structured differences between DSL config and database
migrations/bin/cli schema diff --db=intermediate_db || true

# Regenerate schema from DSL config
migrations/bin/cli schema generate --db=intermediate_db

if [ ! -z "$(git status --porcelain migrations/db/intermediate_db_schema/)" ]; then
# Check if generated output matches what's committed
if [ ! -z "$(git status --porcelain migrations/db/intermediate_db_schema/ migrations/lib/database/intermediate_db/ migrations/lib/database/intermediate_db/enums/)" ]; then
echo ""
echo "=========================================="
echo "IntermediateDB schema is not up to date."
echo "---------------------------------------------"
git -c color.ui=always diff migrations/db/intermediate_db_schema/
echo "=========================================="
echo ""
echo "The generated schema files differ from what is committed."
echo "This usually means the schema DSL config or the database"
echo "structure changed without regenerating."
echo ""
echo "To fix:"
echo " 1. Run: migrations/bin/cli schema diff"
echo " to see what changed between config and database"
echo " 2. Update config files in migrations/config/schema/intermediate_db/"
echo " - New tables: migrations/bin/cli schema add <table>"
echo " - Ignore tables: migrations/bin/cli schema ignore <table> --reason '...'"
echo " - New columns: add to the table's include list or ignore with reason"
echo " 3. Run: migrations/bin/cli schema generate"
echo " 4. Commit the updated config and generated files"
echo ""
echo "Generated file diff:"
git -c color.ui=always diff -- migrations/db/intermediate_db_schema/ migrations/lib/database/intermediate_db/ migrations/lib/database/intermediate_db/enums/
exit 1
fi

Expand Down
159 changes: 159 additions & 0 deletions .github/workflows/patch-triage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
# Patch Triage
#
# Runs on every non-draft pull request. Fetches the PR diff and sends it to
# the patch-triage VM for analysis. Results are posted back as a GitHub Check
# Run — staff can click "Details" to see the full review in patch-triage
# (login required).
#
# Also notifies the VM when a PR is closed (merged or not) so patch-triage
# can auto-resolve the associated record.

name: Patch Triage

on:
pull_request:
types: [opened, synchronize, ready_for_review, closed]
workflow_dispatch:
inputs:
pr_number:
description: "PR number to re-scan"
required: true
type: string

permissions:
statuses: write
pull-requests: read

jobs:
pr-closed:
if: ${{ github.event_name == 'pull_request' && github.event.action == 'closed' }}
runs-on: ubuntu-latest

steps:
- name: Notify patch-triage of PR close
env:
GITHUB_SCAN_SECRET: ${{ secrets.SCAN_SECRET }}
VM_SCAN_URL: ${{ secrets.VM_SCAN_URL }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO: ${{ github.repository }}
MERGED: ${{ github.event.pull_request.merged }}
shell: ruby {0}
run: |
require "json"
require "openssl"
require "net/http"

vm_url = ENV["VM_SCAN_URL"].to_s
secret = ENV["GITHUB_SCAN_SECRET"].to_s

if vm_url.empty? || secret.empty?
puts "Security scan not configured — skipping"
exit 0
end

payload = JSON.generate(
pr_number: ENV["PR_NUMBER"],
repo: ENV["REPO"],
merged: ENV["MERGED"] == "true",
)

sig = "sha256=" + OpenSSL::HMAC.hexdigest("SHA256", secret, payload)

uri = URI("#{vm_url}/pr-closed")
req = Net::HTTP::Post.new(uri)
req["Content-Type"] = "application/json"
req["X-Scan-Signature"] = sig
req.body = payload

res = Net::HTTP.start(uri.host, uri.port) { |h| h.request(req) }
abort "VM returned #{res.code}: #{res.body}" unless res.is_a?(Net::HTTPSuccess)

security-scan:
if: ${{ github.event_name == 'workflow_dispatch' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
runs-on: ubuntu-latest

steps:
- name: Resolve PR metadata
id: pr
env:
GH_TOKEN: ${{ github.token }}
INPUT_PR_NUMBER: ${{ github.event.inputs.pr_number }}
EVENT_PR_NUMBER: ${{ github.event.pull_request.number }}
shell: ruby {0}
run: |
require "json"
require "securerandom"

pr_number =
if ENV["GITHUB_EVENT_NAME"] == "workflow_dispatch"
ENV["INPUT_PR_NUMBER"]
else
ENV["EVENT_PR_NUMBER"]
end

pr = JSON.parse(
`gh pr view #{pr_number} --repo #{ENV["GITHUB_REPOSITORY"]} --json title,author,headRefOid,baseRefName`
)

d = SecureRandom.hex(8)
File.open(ENV["GITHUB_OUTPUT"], "a") do |f|
f.puts "number=#{pr_number}"
f.puts "title<<#{d}"; f.puts pr["title"]; f.puts d
f.puts "author<<#{d}"; f.puts pr.dig("author", "login"); f.puts d
f.puts "sha=#{pr["headRefOid"]}"
f.puts "base_branch=#{pr["baseRefName"]}"
end

- name: Fetch PR diff
env:
GH_TOKEN: ${{ github.token }}
run: |
gh pr diff ${{ steps.pr.outputs.number }} \
--repo ${{ github.repository }} > pr.diff

echo "Diff size: $(wc -c < pr.diff) bytes"

- name: Send to security scan
env:
GITHUB_SCAN_SECRET: ${{ secrets.SCAN_SECRET }}
VM_SCAN_URL: ${{ secrets.VM_SCAN_URL }}
PR_NUMBER: ${{ steps.pr.outputs.number }}
PR_TITLE: ${{ steps.pr.outputs.title }}
PR_AUTHOR: ${{ steps.pr.outputs.author }}
PR_SHA: ${{ steps.pr.outputs.sha }}
BASE_BRANCH: ${{ steps.pr.outputs.base_branch }}
REPO: ${{ github.repository }}
shell: ruby {0}
run: |
require "json"
require "openssl"
require "net/http"

vm_url = ENV["VM_SCAN_URL"].to_s
secret = ENV["GITHUB_SCAN_SECRET"].to_s

if vm_url.empty? || secret.empty?
puts "Security scan not configured — skipping"
exit 0
end

payload = JSON.generate(
pr_number: ENV["PR_NUMBER"],
title: ENV["PR_TITLE"],
diff: File.read("pr.diff"),
author: ENV["PR_AUTHOR"],
repo: ENV["REPO"],
sha: ENV["PR_SHA"],
base_branch: ENV["BASE_BRANCH"],
)

sig = "sha256=" + OpenSSL::HMAC.hexdigest("SHA256", secret, payload)

uri = URI("#{vm_url}/scan-pr")
req = Net::HTTP::Post.new(uri)
req["Content-Type"] = "application/json"
req["X-Scan-Signature"] = sig
req.body = payload

res = Net::HTTP.start(uri.host, uri.port) { |h| h.request(req) }
abort "VM returned #{res.code}: #{res.body}" unless res.is_a?(Net::HTTPSuccess)
15 changes: 14 additions & 1 deletion .github/workflows/publish-assets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:
- main
- stable
- release/*
- precompile-asset-improvements
tags:
- beta
- v*
Expand All @@ -20,7 +21,7 @@ jobs:
runs-on: 'cdck-linux-8-core'
container: discourse/discourse_test:release
timeout-minutes: 30

steps:
- name: Install gh cli
run: |
Expand All @@ -46,6 +47,18 @@ jobs:
git config --global user.email "ci@ci.invalid"
git config --global user.name "Discourse CI"

- name: Symlink vendor/bundle from image
run: |
ln -s /var/www/discourse/vendor/bundle vendor/bundle

- name: Setup gems
run: |
bundle config --local path vendor/bundle
bundle config --local deployment true
bundle config --local without development
bundle install --jobs $(($(nproc) - 1))
bundle clean

- name: pnpm install
run: pnpm install --frozen-lockfile

Expand Down
Loading
Loading