Sychic
46d07163cd
feat(labrinth): user preferences ( #7177 )
...
* feat(labrinth): initial preferences structure
* feat(labrinth): use partially to derive partial structs
* feat(labrinth): preference defaults
* fix(labrinth): derive debug
* feat(labrinth): user preferences db setup
* feat(labrinth): user preferences routes
* fix(labrinth): nested partial structs
* fix(labrinth): serialize enums as snake case
* refactor(labrinth-derive): rename to component-derive
* feat(component-derive): nested components
* refactor(component-derive): change suffixes to prefixes
* refactor(component-derive): rename edit to partial
* feat(component-derive): skip serializing empty option
* refactor(labrinth): wrap errors
* feat(component-derive): diff function
* style(labrinth): fmt
* refactor(labrinth): use component derive and only store overrides
* chore: update query cache
* docs(labrinth): add preferences to openapi
* fix(labrinth): lock row for update
* remove: partially
* refactor(component-derive): split impls to separate functions
* feat(component-derive): wrap impls to isolate naming
* refactor(labrinth): split out auth conditions
* feat(labrinth): store auto
* feat(labrinth): store hosting privacy
* style(labrinth): cargo fmt
2026-08-17 17:57:57 +00:00
aecsocket
b3b0b85691
fix: change incremental search indexing operation set ( #7179 )
...
* use ro_pool for search indexing again
* adjust incremental indexing operations
2026-08-17 17:00:12 +00:00
François-Xavier Talbot
b0ec93f8ab
chore(labrinth): paypal webhook changes ( #7157 )
...
feat(labrinth): make paypal webhook de errors 500 instead of 400, make payout ID optional
2026-08-15 06:01:43 +00:00
Michael H.
cf50e28dda
feat: email whitelist
2026-08-14 16:00:05 +02:00
755825b09a
project disclosures frontend ( #6955 )
...
* begin project disclosures
* new project settings header
* begin disclosure settings, edit content rules
* togglecards
* update phrasing of the rules, prepr
* more disclosure settings structuring
* add functionality toggle
* implement functionality with staging api
* improve project settings head titles
* feat(labrinth): project disclosures model
* feat(labrinth): project disclosures database model
* feat(labrinth): project disclosures get endpoint
* feat(labrinth): censor user ids if set by moderator
* feat(labrinth): wrap disclosures in struct
* feat(labrinth): edit project disclosures endpoint
* style(labrinth): cargo fmt
* style(labrinth): fix typo
* feat(labrinth): add fields for ai content disclosure
* fix(labrinth): field typo
* chore(labrinth): update query cache
* feat(labrinth): index disclosures in search
* refactor(labrinth): use enum instead of bools
* feat(labrinth): trigger incremental index on disclosure change
* feat(labrinth): change archived status to disclosure
* feat(labrinth): use disclosure for archival status
* fix(labrinth): error type for deserialization
* fix(labrinth): migration timestamp
* fix(labrinth): add disclosures to elasticsearch schema
* disclosures in search
* update photosensitivity warning copy
* update archiving, move general project settings to v3 (start redesign there), use project id lookups for stable cache keys, advanced in server search
* blue archive banner
* display AI use types
* improve labels
* add modrinth to link
* add placeholder missing disclosure report type
* add AI metadata checking to block image uploads with notice
* update copy
* update section 4 of rules
* Update rule 6 layout
* fix(labrinth): don't remove archival disclosure when changing status via v3 api
* feat(labrinth): derive str for ai usages and telemtry consent
* feat(labrinth): include ai usages and telemetry consent in disclosure types
* Update moderation checklist (#7056 )
* fix: missing delphi severity (#7054 )
* Utils nav, new disclosures stage, ai button in rules
* add prefix to collect
* Finish up new disclosures stage
* update r4 messages
* new r4 msg, update showcase clarity message
* fix: version upload failing to detect mrpack loader (#7063 )
* fix: mrpack exporting with zip64 (#7064 )
* fix: action bar max width (#7048 )
* fix: action bar max width
* fix: width
* changelog
* Rule placeholders with subsections & anchors, update messages.
* update new messages to account for new rule and placeholder layout
* Add nag for content disclosures
---------
Co-authored-by: ThatGravyBoat <gravy@thatgravyboat.tech >
Co-authored-by: chyzman <chyzalt@gmail.com >
Co-authored-by: Truman Gao <106889354+tdgao@users.noreply.github.com >
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com >
* prepr
* refactor(labrinth): move disclosure parsing to document creation
* fix(labrinth): prevent removing moderator added archival disclosures
* fix(labrinth): dedupe ai usages
* fix(labrinth): auth logic on archived disclosure removal
* feat(labrinth): add interactions field
* style(labrinth): cargo fmt
* feat(labrinth): granular disclosure locking
* add 5.8, move 5.9, update messages and placeholders accordingly.
* move disclosures stage earlier
* include consent model info in telemetry disclosure msgs
* prepr + update date
* typo
* qa pass
* search suboptions
* add empty state
* checkboxes in column
* persistent advanced filters
* blog draft
* prepr
* support soft deletion
* reload instead of optimistically updating
* update blog
* TOS update + minor verbiage adjustment
* 45 day grace
---------
Co-authored-by: sychic <47618543+Sychic@users.noreply.github.com >
Co-authored-by: coolbot <76798835+coolbot100s@users.noreply.github.com >
Co-authored-by: ThatGravyBoat <gravy@thatgravyboat.tech >
Co-authored-by: chyzman <chyzalt@gmail.com >
Co-authored-by: Truman Gao <106889354+tdgao@users.noreply.github.com >
2026-08-13 09:01:18 -07:00
Sychic
e087e571f3
fix(labrinth): disclosure modification attribution ( #7121 )
2026-08-13 14:51:22 +00:00
Sychic
9ecbe8eaa6
feat(labrinth): granular disclosure locking ( #7108 )
...
* feat(labrinth): granular disclosure locking
* chore(labrinth): update query cache
2026-08-12 17:26:15 -07:00
Sychic
549b333eb2
feat(labrinth): project disclosures ( #6945 )
...
* feat(labrinth): project disclosures model
* feat(labrinth): project disclosures database model
* feat(labrinth): project disclosures get endpoint
* feat(labrinth): censor user ids if set by moderator
* feat(labrinth): wrap disclosures in struct
* feat(labrinth): edit project disclosures endpoint
* style(labrinth): cargo fmt
* style(labrinth): fix typo
* feat(labrinth): add fields for ai content disclosure
* fix(labrinth): field typo
* chore(labrinth): update query cache
* feat(labrinth): index disclosures in search
* refactor(labrinth): use enum instead of bools
* feat(labrinth): trigger incremental index on disclosure change
* feat(labrinth): change archived status to disclosure
* feat(labrinth): use disclosure for archival status
* fix(labrinth): error type for deserialization
* fix(labrinth): migration timestamp
* fix(labrinth): add disclosures to elasticsearch schema
* fix(labrinth): don't remove archival disclosure when changing status via v3 api
* feat(labrinth): derive str for ai usages and telemtry consent
* feat(labrinth): include ai usages and telemetry consent in disclosure types
* refactor(labrinth): move disclosure parsing to document creation
* fix(labrinth): prevent removing moderator added archival disclosures
* fix(labrinth): dedupe ai usages
* fix(labrinth): auth logic on archived disclosure removal
* feat(labrinth): add interactions field
* style(labrinth): cargo fmt
* feat(labrinth): soft delete disclosures
* feat(labrinth): return soft-deleted disclosures
* fix(labrinth): update disclosure on removal
---------
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com >
2026-08-12 17:26:14 -07:00
Prospector
2fd4495104
rejected projects go to ghost on delete ( #7107 )
...
* draft: rejected projects go to ghost on delete
* don't free slug
* fix sqlx
* free slugs but different
* add auto reject for processing items given to ghost, as well as send thread messages with a little info on who it came from
2026-08-12 23:54:57 +00:00
François-Xavier Talbot
552bc3f739
fix(labrinth): webhook scopes ( #7114 )
...
fix(labrinth): scope paypal & tremendous webhooks in payout scope
2026-08-12 18:34:33 +02:00
aecsocket
c34bd26f87
fix: search indexing and schema changes ( #7090 )
...
* fix: incremental indexing uses latest db data
* dependent search fields
2026-08-12 11:54:35 -04:00
aecsocket
f8f05ce91b
fix: expose raw icon URL in project response ( #7086 )
...
* fix: expose raw icon URL in project response
* remove unnecessary test
2026-08-10 15:48:23 +00:00
aecsocket
07bac8ffde
fix: v3 environment fields in all v2 endpoints ( #7082 )
2026-08-10 15:42:56 +00:00
Calum H.
e8aee15664
chore: cleanup standards ( #6970 )
...
* chore: cleanup standards & skills
* remove: figma mcp doc, not needed anymore
2026-08-10 15:15:44 +00:00
ThatGravyBoat
b78dd9bf1b
fix: missing delphi severity ( #7054 )
2026-08-07 18:16:13 -07:00
aecsocket
3fa6905006
refactor: labrinth ApiError and error reporting ( #6981 )
...
* refactor: labrinth `ApiError` and error reporting
* fix clippy
* fix ci
2026-08-07 15:47:54 +00:00
aecsocket
c57e88ecd4
fix: improve analytics dependents query ( #7025 )
...
* fix: improve analytics dependents query
* fix up compose
2026-08-07 10:33:15 -04:00
Calum H.
bca8b1a02b
fix: moderation queue endpoint regression ( #7003 )
...
fix: regression caused by 2308ac1 changes
2026-08-05 10:47:06 +00:00
aecsocket
5148e8ec35
feat: use postcard for redis serde ( #6956 )
...
* redo error handling in xredis
* give proper types to metadata fields
* add round-trip tests
* inline loader enum metadata fields
* postcard roundtrips
* prepare
* bump redis key version
* serde-binhum
* clippy
* fix
* fix frontend checking existence of component fields rather than non-null-ness
* prepare
2026-08-05 10:36:05 +00:00
aecsocket
6715a9c679
fix: global traces QA notes ( #6977 )
...
* updated at cols + search by path
* speed up scanning
* migration does not auto-set updated_at
* merge migrations
2026-08-03 18:15:13 +00:00
aecsocket
c3249ee51d
feat: ElasticSearch backend ( #6903 )
...
* (do not merge) search test branch
* perf
* fix up search pagination
* more parity and perf work
* expand what parity does
* fix author query
* approach parity even without explicit parity enabled
* remove old parity code
* fix shear
* fix
* fmt
2026-08-03 17:14:07 +00:00
Michael H.
18b0b2848d
feat: labrinth argo
2026-07-31 13:10:58 +02:00
Michael H.
c5ce5bc9b3
fix: create clickhouse db in tests only
2026-07-30 20:08:49 +02:00
Michael H.
572b8027ff
fix: clickhouse migrations should not run normally
2026-07-30 19:23:10 +02:00
aecsocket
0a53211389
fix: analytics event endpoint ( #6938 )
...
* fix: analytics event endpoint
* split admin-only routes into internal
* fix pr comment
2026-07-30 04:40:52 +00:00
Michael H.
06262e7bb1
feat: clickhouse partitioning and header TTL
2026-07-29 22:10:20 +02:00
Calum H.
82348fe40a
qa: shared instances post release ( #6893 )
...
* fix: 20 user cap
* qa: invite modal dropdown + other + clamp limits
* fix: hide filters if just one type
* feat: update req banner
* feat: invite management frontend
* fix: moderation issues with shared instances
* feat: instance icon improvements
* fix: better offline handling
* fix: lint
* feat: show avatar in install to play modal
* feat: smaller qa points
* fix: fmt
* fix: fmt
* fix: yeet svg
* fix: 50 user limit
2026-07-28 14:10:12 +00:00
Sychic
ebc7cac8b0
feat(labrinth): user blocking ( #6837 )
...
* feat(labrinth): user blocking
still wip, nothing is hooked up
* style(labrinth): cargo fmt
* refactor(labrinth): move block/unblock routes to public api
* feat(labrinth): block friend requests if blocked
* feat(labrinth): remove friend/request on block
* feat(labrinth): get blocked users endpoint
2026-07-27 19:41:57 +00:00
François-Xavier Talbot
224c28f29d
feat: more details linked account info for support/moderation ( #6897 )
...
* feat: show discord + steam ID + github profile in "Show details" user modal
* pnpm intl:extract
2026-07-27 19:20:38 +00:00
aecsocket
e192f6a0af
feat: define default search vars in env ( #6902 )
...
* feat: define default search vars in env
* fix
2026-07-27 19:17:14 +00:00
François-Xavier Talbot
20adb0f16a
fix(labrinth): let through emails when neverbounce hangs or fails ( #6898 )
...
* fix(labrinth): let through emails when neverbounce hangs or fails
* chore(ci): stack size
2026-07-27 18:10:54 +00:00
aecsocket
158de019a6
fix: search indexing performance and batching ( #6521 )
...
* Add consume batching delay
* maybe fix
* max batch size
* more logging
* parallelize remove tasks
* delete/upsert project/version messages
* prepare
* more logging
* log number of docs
* try more targeted, homogenous version change ops
* ensure only necessary fields are serialized into typesense
* disable index background task
* wip: script changes
* don't facet by project id
* fix
* fix clippy
* batch by document and dedup loaders
* fix test
* wip: projects/versions collections
* clean up SearchBackend interface
* cleanup pass
* cleanup pass 2
* standardise fn names
* cleanup pass
* fix compile
* factor out filter rewriting
* query perf
* put categories into the project doc
* wip: search filter AST
* doc comment
* more AST normalization
* (temp) convert search request errors into internal errors
* implement unary NOT
* tombi fmt
* fix tests
* revert request error
* try increase stack size
2026-07-26 14:55:00 +00:00
François-Xavier Talbot
944f99a14e
chore(labrinth): add extra logging on muralpay failed txn ( #6870 )
2026-07-24 23:53:37 +02:00
aecsocket
a6d9bb7b3e
feat: allow bulk deleting attribution groups for moderators ( #6839 )
...
* feat: allow bulk deleting attribution groups for moderators
* prepr
2026-07-24 13:42:36 +00:00
Calum H. and sychic
e58af98f21
feat: instance sharing thru shared-instances service ( #6569 )
...
* feat: implement instance share page + search_users backend call
* feat: invite players modal
* feat: use tanstack queries for friends sync across app pages
* feat: base shared instances implementation
* fix: admon style
* feat: impl instance admonitions like server panel
* fix: impl get + del usage
* feat: support modpack links
* feat: invite notif accepting
* fix: lint + fmt
* feat: impl install to play
* feat: impl usage of UpdateToPlayModal
* feat: warnings on deleting/disabling shared-instance version content
* fix: send instance name
* feat: align with backend
* feat: shared instances qa
* feat: wrong account protection
* feat: qa
* fix: smartly apply updates
* fix: install bug
* fix: 401/404 differentiation
* fix: fmt+prepr
* feat: qa
* feat: qa
* fix: signing out messes up revoke/deleted checks
* feat: qa
* fix: fmt + lint
* feat: lock content if part of shared instance
* fix: lint
* [do not merge] feat: rough invite links impl temp (#6666 )
* fix: wrong cmd
* feat: invite page
* fix: server-manager DTO mismatch
* fix: drop anonymous invite link acceptance
* refactor: structured shared-instance unavailable errors
* refactor: centralise error presentations
* refactor: dedupe shared instance diff detection
* fix: logging in reqwests
* refactor: move app.vue shared instances into handler
* refactor: break up Share.vue
* refactor: split up shared instances state outside of instance index
* refactor: dedicated shared instances install/update modals + split up page
* refactor: centralized managed content
* refactor: split up install shared to own runner + shared.rs split up
* refactor: dedupe sql for instance metadata enrichmnt
* refactor: friends composable + dedupe friends logic across usages
* chore: reduced unused code
* fix: align with backend
* fix: lint
* fix: file sha changes
* fix: invite links not working due to icon signed
* feat: qa
* feat: reporting frontend dummy
* fix: try use header
* remove: file hash field
* fix: pin box
* feat: malware warning for shared instances
* fix: cache rule
* feat: config files syncing
* feat: disable config sharing
* fix: header
* fix: use mark ready
* fix: dont cause push update for configs
* fix: lint
* feat: sharing page in settings
* feat: move config + change flow
* fix: qa
* fix: lint prepr
* feat: proxy file upload thru shared instances backend
* fix: use collapisible
* fix: push config
* fix: config
* feat: swap out sign in modal for new one
* fix: report flow
* fix: exclude configs.zip from external warnings
* fix: nuxi init
* fix: config bundle downloading
* fix: error notif
* fix: polling
* fix: qa
* fix: lint + prepr
* feat: shared instances moderation frontend + hook up report flow
* fix: report copy
* fix: lint
* fix: lint
* fix: modrinth ids being undefined
* feat: instance quarantining
* fix: prepr + fmt
* fix: quarantined -> locked terminology
* fix: missing endpoint impls + fmt
* fix: missing api in build.rs
* fix: share tab jittery
* fix: fmt
*PT bug
* fix: invites count as users even if pending
* fix: prepr
* fix: invite page owner in users list
* fix: lint
* fix: qa
* fix: lint
* fix: members stale not clearing
* fix: invite use joined_at field
* fix: lint
* fix: qa
---------
Co-authored-by: sychic <47618543+Sychic@users.noreply.github.com >
2026-07-24 13:06:38 +00:00
Michael H.
508b96c27f
chore: skip neverbounce for oauth
2026-07-24 02:15:16 +02:00
Sychic
95f97a44ec
feat(labrinth): shared instances moderation ( #6784 )
...
* feat(labrinth): shared instance report type
* style(labrinth): cargo fmt
* feat(labrinth): check that instance exists when reporting
* style(labrinth): cleanup unused import
* feat(labrinth): store version id for shared instance reports
* style(labrinth): satisfy clippy
* fix(labrinth): use string id instead of int
2026-07-23 20:20:25 +00:00
François-Xavier Talbot
b4d681e713
feat(labrinth): Redis Cluster ( #6771 )
...
* chore(labrinth): bump to redis 1.4.1
* feat(labrinth): redis cluster
* chore: cleanup
* feat(labrinth): cache locking
* fix(labrinth): clippy
* chore(labrinth): cleanup env, remove postcard support
* chore(ci): fix test env for labrinth
* chore(labrinth): bump all key versions
* chore(labrinth): improve redis key identities handling
* chore(labrinth): simplify deadline handling
* chore(labrinth): remove unused lease tracking
* chore(labrinth): remove distributed cache locking for now
* chore(labrinth): improve redis backend init error
* feat(labrinth): expose redis read replica strategy
* chore(ci): remove other connection mode tests
* chore: split xredis crate
* feat(xredis): primaries routing
* chore: tombi fmt
* chore: clippy
* chore: update query cache
2026-07-23 11:35:02 +02:00
François-Xavier Talbot
96e2d95d02
feat(labrinth): route to update subscriptions for archon ( #6811 )
...
* feat(labrinth): add /_internal/billing/subscriptions/manager/update_many
* chore: fixes
* chore: clippy
* chore: fixes
2026-07-22 16:18:08 +00:00
aecsocket
07fd4fae5f
fix: make Redis key TTL variable ( #6821 )
2026-07-22 14:43:39 +00:00
aecsocket
ee2ad5f05b
feat: block disposable email addresses ( #6783 )
...
* feat: block disposable email addresses
* fix typos
* remove test
2026-07-20 17:57:36 +00:00
Michael H.
e52ae416a8
feat: email blacklist ( #6779 )
...
* feat: email blacklist
* feat: wildcard support
2026-07-20 14:02:55 +02:00
François-Xavier Talbot
6319832465
feat: email bounce check ( #6774 )
...
* feat: neverbounce API client
* feat(labrinth): integrate neverbounce
* chore: tombi
* chore: typo
* chore: clippy
* chore: remove unused dep
* chore: cleanup
2026-07-20 10:58:46 +02:00
François-Xavier Talbot
7144f08f0f
feat: require verified email to publish, to prevent spam ( #6777 )
...
* feat: require verified email to create projects, collections and organizations
* fix(labrinth): fix tests
* chore: fmt
* chore: intl
2026-07-20 02:51:16 +00:00
François-Xavier Talbot
c579925f03
feat: honeypot signup field ( #6776 )
...
feat: account consent
2026-07-19 21:54:23 +00:00
François-Xavier Talbot
6b569e4ee4
redis compression ( #6769 )
...
* feat(labrinth): encode/decode redis values with postcard, add version in namespaces
* chore(labrinth): split cache ex special cases without version
* chore(labrinth): simplify get_many
* fix: tombi
* feat(labrinth): compression support
* chore(labrinth): cleanup redis ser/de
* fix(labrinth): use get_deserialized in tests
2026-07-19 01:25:00 +02:00
François-Xavier Talbot
6b62e3b480
fix(labrinth): register debug routes ( #6766 )
2026-07-19 01:24:52 +02:00
Sychic
543cb42210
remove(labrinth): old shared instances impl ( #6760 )
2026-07-17 19:27:38 +00:00
aecsocket and Prospector
86c6fb8239
fix: global trace and tech review improvements ( #6699 )
...
* remaining globally safe/unsafe buttons
* tweak global traces layout
* deterministic local trace ordering
* fix preview
* ignore severity for ordering
* show globally resolved traces toggle
* minor frontend changes
* prepr
---------
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com >
2026-07-17 15:08:59 +00:00
aecsocket
dad5970e8d
fix: attribution list route permissions ( #6731 )
...
* fix: attribution list route permissions
* proper auth
2026-07-15 14:38:08 +00:00