Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
335eeb6
Add try_files directive comments to nginx.conf (#37866)
BedrockDigger Feb 17, 2026
1618c28
Update dependency dotenv to v17.3.1 (#37855)
renovate[bot] Feb 17, 2026
2cb8471
Update doorkeeper i18n for invalid code challenge method (#37827)
mjankowski Feb 17, 2026
7f28dd1
Use validation matchers for `FollowLimitValidator` spec (#37792)
mjankowski Feb 17, 2026
0a6412f
New Crowdin Translations (automated) (#37884)
github-actions[bot] Feb 17, 2026
4a6d17a
Fix hashtag matching by replacing negative lookbehind with positive l…
ClearlyClaire Feb 17, 2026
0b66e74
Add `GET /api/v1/donation_campaigns` (#37880)
ClearlyClaire Feb 17, 2026
438602c
Upgrade `rubocop` from `v1.84.0` to `v1.84.2`, update config, and cor…
larouxn Feb 17, 2026
371946f
Use validation matchers for `LanguageValidator` spec (#37886)
mjankowski Feb 17, 2026
4b1f664
Profile editing: Add initial route (#37885)
ChaosExAnima Feb 17, 2026
3c3a1b1
Use separate rules with same `groupName` for playwright updates (#37809)
mjankowski Feb 17, 2026
61b9bc4
Update dependency rspec-rails to v8.0.3 (#37888)
renovate[bot] Feb 18, 2026
f95cd68
Use validation matchers for `NoteLengthValidator` spec (#37891)
mjankowski Feb 18, 2026
b62ba9e
New Crowdin Translations (automated) (#37896)
github-actions[bot] Feb 18, 2026
079f861
Profile redesign: Design fixes (#37892)
ChaosExAnima Feb 18, 2026
bd64ca2
Add new profile settings (#37890)
ClearlyClaire Feb 18, 2026
488e0b2
Add collection detail page (#37897)
diondiondion Feb 18, 2026
9e40d3e
Use validation matchers for `ReactionValidator` spec (#37900)
mjankowski Feb 18, 2026
a411b7e
Use validation matchers for `PollOptionsValidator` spec (#37901)
mjankowski Feb 18, 2026
e8ecf17
Use validation matchers for `StatusPinValidator` spec (#37904)
mjankowski Feb 18, 2026
66052e3
Use validation matchers for `StatusLengthValidator` spec (#37905)
mjankowski Feb 18, 2026
3df8fb8
Fix visibility of video overlay controls in light mode (#37906)
diondiondion Feb 18, 2026
093528e
New Crowdin Translations (automated) (#37915)
github-actions[bot] Feb 19, 2026
f48a299
Use validation matchers for `UrlValidator` spec (#37911)
mjankowski Feb 19, 2026
238d0f8
Update dependency devise to v5.0.2 (#37903)
renovate[bot] Feb 19, 2026
6f85936
Update dependency rack to v3.2.5 (#37895)
renovate[bot] Feb 19, 2026
e288bf6
Show reported collections in moderation interface (#37898)
oneiros Feb 19, 2026
40f92f3
Use validation matchers for `UnreservedUsernameValidator` spec (#37910)
mjankowski Feb 19, 2026
1575836
Use validation matchers for `UniqueUsernameValidator` spec (#37909)
mjankowski Feb 19, 2026
ed4787c
Profile editing: Name and bio (#37907)
ChaosExAnima Feb 19, 2026
c118ff7
Merge collection settings into single editor page (#37916)
diondiondion Feb 19, 2026
2a9de97
Use validation matchers for `UserEmailValidator` spec (#37908)
mjankowski Feb 19, 2026
7eb4b90
New Crowdin Translations (automated) (#37918)
github-actions[bot] Feb 19, 2026
39ff07b
Only suggest `discoverable` accounts in collection account editor (#3…
diondiondion Feb 19, 2026
8e7c397
Remove conditional check for timeline data (#37922)
ChaosExAnima Feb 19, 2026
e24737c
Replace `prettier` with `oxfmt` (#37893)
renchap Feb 19, 2026
cc1e65d
Add `GET /api/v1/profile` (#37912)
ClearlyClaire Feb 20, 2026
4d2ca8c
New Crowdin Translations (automated) (#37924)
github-actions[bot] Feb 20, 2026
68a7cd4
Require following accounts before being able to add them to a collect…
diondiondion Feb 20, 2026
3d33294
Collection accounts editor: Show info badge on accounts that haven't …
diondiondion Feb 20, 2026
7b85d21
Re-use custom socket class for FASP requests (#37925)
oneiros Feb 20, 2026
6ba6285
Reject unconfirmed FASPs (#37926)
oneiros Feb 20, 2026
5fc2be5
Update dependency rspec-sidekiq to v5.3.0 (#37938)
renovate[bot] Feb 23, 2026
6bd4d79
New Crowdin Translations (automated) (#37940)
github-actions[bot] Feb 23, 2026
1d51396
Remove unneeded haml-lint problem matcher (#37930)
mjankowski Feb 23, 2026
f9c18ba
Fix overly large avatars in report modal (#37950)
diondiondion Feb 23, 2026
b785f05
Add coverage for `StatusBatchAction` (#37949)
oneiros Feb 23, 2026
e0cc3a3
Allow displaying icon in `TextInput` component (#37951)
diondiondion Feb 23, 2026
e2aecd0
Collapse posts/collections in moderation interface (#37929)
oneiros Feb 23, 2026
ef6405a
Profile editing: Featured tags (#37952)
ChaosExAnima Feb 23, 2026
96bff0e
Update dependency omniauth-saml to v2.2.5 (#37944)
renovate[bot] Feb 24, 2026
c5b6881
New Crowdin Translations (automated) (#37956)
github-actions[bot] Feb 24, 2026
49bcaba
Update dependency postcss-preset-env to v11.2.0 (#37945)
renovate[bot] Feb 24, 2026
3ed1648
Profile editing: Add singular to translated string (#37958)
ChaosExAnima Feb 24, 2026
43ef9f6
Add `PATCH /api/v1/profile` (#37934)
ClearlyClaire Feb 24, 2026
1e87bd1
Bump version to v4.5.7 (#37965)
ClearlyClaire Feb 24, 2026
72406a1
Refactor: Introduce admin base action class (#37960)
oneiros Feb 24, 2026
919b1e6
Add collection report modal (#37961)
diondiondion Feb 24, 2026
01bdbbe
Merge remote-tracking branch 'parent/main' into kb_development
kmycode Feb 24, 2026
66f8115
Fix lint
kmycode Feb 24, 2026
fb84ded
Fix web cli error
kmycode Feb 25, 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
  •  
  •  
  •  
12 changes: 9 additions & 3 deletions .github/renovate.json5
Original file line number Diff line number Diff line change
Expand Up @@ -154,9 +154,15 @@
groupName: 'opentelemetry-ruby (non-major)',
},
{
// Group Playwright Ruby & JS deps in the same PR, as they need to be in sync
matchManagers: ['bundler', 'npm'],
matchPackageNames: ['playwright-ruby-client', 'playwright'],
// The ruby portion of the Playwright group
matchManagers: ['bundler'],
matchPackageNames: ['playwright-ruby-client'],
groupName: 'Playwright',
},
{
// The node portion of the Playwright group
matchManagers: ['npm'],
matchPackageNames: ['playwright'],
groupName: 'Playwright',
},
// Add labels depending on package manager
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/format-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ jobs:
- name: Set up Javascript environment
uses: ./.github/actions/setup-javascript

- name: Check formatting with Prettier
- name: Check formatting
run: yarn format:check
17 changes: 0 additions & 17 deletions .github/workflows/haml-lint-problem-matcher.json

This file was deleted.

1 change: 0 additions & 1 deletion .github/workflows/lint-haml.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,4 @@ jobs:

- name: Run haml-lint
run: |
echo "::add-matcher::.github/workflows/haml-lint-problem-matcher.json"
bin/haml-lint --reporter github
92 changes: 92 additions & 0 deletions .oxfmtrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"singleQuote": true,
"jsxSingleQuote": true,
"printWidth": 80,
"ignorePatterns": [
"/tmp",
"/coverage",
"/public/assets",
"/public/emoji",
"/public/packs",
"/public/packs-test",
"/public/system",
"/public/vite*",

"*.html",
"docker-compose.override.yml",

// Ignore config YAML files that include ERB/ruby code
"config/email.yml",

// Vendored CSS
"app/javascript/styles/mastodon/reset.scss",

// Automatically generated
"/app/javascript/mastodon/features/emoji/emoji_map.json",
"/app/javascript/mastodon/features/emoji/emoji_data.json",
"AUTHORS.md",
"/app/javascript/mastodon/locales/*.json",
"/config/locales",
".storybook/static/mockServiceWorker.js",

// do not reformat JS files as this will change too many files and cause merge conflicts with open PRs and forks
"app/javascript/**/*.js",
"app/javascript/**/*.jsx",
"streaming/**/*.js"
],
"experimentalSortPackageJson": false,
"experimentalSortImports": {
"groups": [
["builtin"],
["react"],
["react-intl"],
["react-utils"],
["redux"],
["external", "type-external"],
["internal", "type-internal"],
["mastodon-internals"],
["parent", "type-parent"],
["sibling", "type-sibling", "index", "type-index"],
["side_effect"]
],
"customGroups": [
{
"groupName": "react",
"elementNamePattern": [
"react",
"react-dom",
"react-dom/client",
"prop-types"
]
},
{
"groupName": "react-intl",
"elementNamePattern": ["react-intl", "intl-messageformat"]
},
{
"groupName": "react-utils",
"elementNamePattern": [
"classnames",
"react-helmet",
"react-router",
"react-router-dom"
]
},
{
"groupName": "redux",
"elementNamePattern": [
"immutable",
"@reduxjs/toolkit",
"react-redux",
"react-immutable-proptypes",
"react-immutable-pure-component"
]
},
{
"groupName": "mastodon-internals",
"elementNamePattern": ["mastodon/**", "@/**"]
}
]
}
}
86 changes: 0 additions & 86 deletions .prettierignore

This file was deleted.

4 changes: 0 additions & 4 deletions .prettierrc.js

This file was deleted.

3 changes: 3 additions & 0 deletions .rubocop/layout.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ Layout/FirstHashElementIndentation:

Layout/LineLength:
Max: 300 # Default of 120 causes a duplicate entry in generated todo file

Layout/MultilineMethodCallIndentation:
EnforcedStyle: indented
3 changes: 2 additions & 1 deletion .storybook/preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@ import { reducerWithInitialState } from '@/mastodon/reducers';
import { defaultMiddleware } from '@/mastodon/store/store';
import { mockHandlers, unhandledRequestHandler } from '@/testing/api';

import { modes } from './modes';

import '../app/javascript/styles/application.scss';
import './styles.css';
import { modes } from './modes';

const localeFiles = import.meta.glob('@/mastodon/locales/*.json', {
query: { as: 'json' },
Expand Down
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,26 @@

All notable changes to this project will be documented in this file.

## [4.5.7] - 2026-02-24

### Security

- Reject unconfirmed FASPs (#37926 by @oneiros, [GHSA-qgmm-vr4c-ggjg](https://github.com/mastodon/mastodon/security/advisories/GHSA-qgmm-vr4c-ggjg))
- Re-use custom socket class for FASP requests (#37925 by @oneiros, [GHSA-46w6-g98f-wxqm](https://github.com/mastodon/mastodon/security/advisories/GHSA-46w6-g98f-wxqm))

### Added

- Add `--suspended-only` option to `tootctl emoji purge` (#37828 and #37861 by @ClearlyClaire and @mjankowski)

### Fixed

- Fix emoji data not being properly cached (#37858 by @ChaosExAnima)
- Fix delete & redraft of pending posts (#37839 by @ClearlyClaire)
- Fix processing separate key documents without the ActivityStreams context (#37826 by @ClearlyClaire)
- Fix custom emojis not being purged on domain suspension (#37808 by @ClearlyClaire)
- Fix users without special permissions being able to stream disabled timelines (#37791 by @ClearlyClaire)
- Fix processing of object updates with duplicate hashtags (#37756 by @ClearlyClaire)

## [4.5.6] - 2026-02-03

### Security
Expand Down
14 changes: 7 additions & 7 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ GEM
irb (~> 1.10)
reline (>= 0.3.8)
debug_inspector (1.2.0)
devise (5.0.1)
devise (5.0.2)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 7.0)
Expand Down Expand Up @@ -470,7 +470,7 @@ GEM
net-smtp (0.5.1)
net-protocol
nio4r (2.7.5)
nokogiri (1.19.0)
nokogiri (1.19.1)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oj (3.16.15)
Expand All @@ -488,7 +488,7 @@ GEM
omniauth-rails_csrf_protection (2.0.1)
actionpack (>= 4.2)
omniauth (~> 2.0)
omniauth-saml (2.2.4)
omniauth-saml (2.2.5)
omniauth (~> 2.1)
ruby-saml (~> 1.18)
omniauth_openid_connect (0.8.0)
Expand Down Expand Up @@ -631,7 +631,7 @@ GEM
activesupport (>= 3.0.0)
raabro (1.4.0)
racc (1.8.1)
rack (3.2.4)
rack (3.2.5)
rack-attack (6.8.0)
rack (>= 1.0, < 4)
rack-cors (3.0.0)
Expand Down Expand Up @@ -741,21 +741,21 @@ GEM
rspec-mocks (3.13.7)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-rails (8.0.2)
rspec-rails (8.0.3)
actionpack (>= 7.2)
activesupport (>= 7.2)
railties (>= 7.2)
rspec-core (~> 3.13)
rspec-expectations (~> 3.13)
rspec-mocks (~> 3.13)
rspec-support (~> 3.13)
rspec-sidekiq (5.2.0)
rspec-sidekiq (5.3.0)
rspec-core (~> 3.0)
rspec-expectations (~> 3.0)
rspec-mocks (~> 3.0)
sidekiq (>= 5, < 9)
rspec-support (3.13.7)
rubocop (1.84.0)
rubocop (1.84.2)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
Expand Down
6 changes: 3 additions & 3 deletions app/chewy/public_statuses_index.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ class PublicStatusesIndex < Chewy::Index
settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: ChewyConfig.instance.public_statuses

index_scope ::Status.unscoped
.kept
.indexable
.includes(:media_attachments, :preloadable_poll, :tags, :account, preview_cards_status: :preview_card)
.kept
.indexable
.includes(:media_attachments, :preloadable_poll, :tags, :account, preview_cards_status: :preview_card)

root date_detection: false do
field(:id, type: 'long')
Expand Down
22 changes: 22 additions & 0 deletions app/controllers/admin/collections_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# frozen_string_literal: true

module Admin
class CollectionsController < BaseController
before_action :set_account
before_action :set_collection, only: :show

def show
authorize @collection, :show?
end

private

def set_account
@account = Account.find(params[:account_id])
end

def set_collection
@collection = @account.collections.includes(accepted_collection_items: :account).find(params[:id])
end
end
end
4 changes: 2 additions & 2 deletions app/controllers/admin/fasp/debug/callbacks_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ def index
authorize [:admin, :fasp, :provider], :update?

@callbacks = Fasp::DebugCallback
.includes(:fasp_provider)
.order(created_at: :desc)
.includes(:fasp_provider)
.order(created_at: :desc)
end

def destroy
Expand Down
Loading
Loading