Files
pages/CLAUDE.md
aecsocket 39f2b0ecb6 Technical review queue (#4775)
* chore: fix typo in status message

* feat(labrinth): overhaul malware scanner report storage and routes

* chore: address some review comments

* feat: add Delphi to Docker Compose `with-delphi` profile

* chore: fix unused import Clippy lint

* feat(labrinth/delphi): use PAT token authorization with project read scopes

* chore: expose file IDs in version queries

* fix: accept null decompiled source payloads from Delphi

* tweak(labrinth): expose base62 file IDs more consistently for Delphi

* feat(labrinth/delphi): support new Delphi report severity field

* chore(labrinth): run `cargo sqlx prepare` to fix Docker build errors

* tweak: add route for fetching Delphi issue type schema, abstract Labrinth away from issue types

* chore: run `cargo sqlx prepare`

* chore: fix typo on frontend generated state file message

* feat: update to use new Delphi issue schema

* wip: tech review endpoints

* wip: add ToSchema for dependent types

* wip: report issues return

* wip

* wip: returning more data

* wip

* Fix up db query

* Delphi configuration to talk to Labrinth

* Get Delphi working with Labrinth

* Add Delphi dummy fixture

* Better Delphi logging

* Improve utoipa for tech review routes

* Add more sorting options for tech review queue

* Oops join

* New routes for fetching issues and reports

* Fix which kind of ID is returned in tech review endpoints

* Deduplicate tech review report rows

* Reduce info sent for projects

* Fetch more thread info

* Address PR comments

* fix ci

* fix postgres version mismatch

* fix version creation

* Implement routes

* fix up tech review

* Allow adding a moderation comment to Delphi rejections

* fix up rebase

* exclude rejected projects from tech review

* add status change msg to tech review thread

* cargo sqlx prepare

* also ignore withheld projects

* More filtering on issue search

* wip: report routes

* Fix up for build

* cargo sqlx prepare

* fix thread message privacy

* New tech review search route

* submit route

* details have statuses now

* add default to drid status

* dedup issue details

* fix sqlx query on empty files

* fixes

* Dedupe issue detail statuses and message on entering tech rev

* Fix qa issues

* Fix qa issues

* fix review comments

* typos

* fix ci

* feat: tech review frontend (#4781)

* chore: fix typo in status message

* feat(labrinth): overhaul malware scanner report storage and routes

* chore: address some review comments

* feat: add Delphi to Docker Compose `with-delphi` profile

* chore: fix unused import Clippy lint

* feat(labrinth/delphi): use PAT token authorization with project read scopes

* chore: expose file IDs in version queries

* fix: accept null decompiled source payloads from Delphi

* tweak(labrinth): expose base62 file IDs more consistently for Delphi

* feat(labrinth/delphi): support new Delphi report severity field

* chore(labrinth): run `cargo sqlx prepare` to fix Docker build errors

* tweak: add route for fetching Delphi issue type schema, abstract Labrinth away from issue types

* chore: run `cargo sqlx prepare`

* chore: fix typo on frontend generated state file message

* feat: update to use new Delphi issue schema

* wip: tech review endpoints

* wip: add ToSchema for dependent types

* wip: report issues return

* wip

* wip: returning more data

* wip

* Fix up db query

* Delphi configuration to talk to Labrinth

* Get Delphi working with Labrinth

* Add Delphi dummy fixture

* Better Delphi logging

* Improve utoipa for tech review routes

* Add more sorting options for tech review queue

* Oops join

* New routes for fetching issues and reports

* Fix which kind of ID is returned in tech review endpoints

* Deduplicate tech review report rows

* Reduce info sent for projects

* Fetch more thread info

* Address PR comments

* fix ci

* fix ci

* fix postgres version mismatch

* fix version creation

* Implement routes

* feat: batch scan alert

* feat: layout

* feat: introduce surface variables

* fix: theme selector

* feat: rough draft of tech review card

* feat: tab switcher

* feat: batch scan btn

* feat: api-client module for tech review

* draft: impl

* feat: auto icons

* fix: layout issues

* feat: fixes to code blocks + flag labels

* feat: temp remove mock data

* fix: search sort types

* fix: intl & lint

* chore: re-enable mock data

* fix: flag badges + auto open first issue in file tab

* feat: update for new routes

* fix: more qa issues

* feat: lazy load sources

* fix: re-enable auth middleware

* feat: impl threads

* fix: lint & severity

* feat: download btn + switch to using NavTabs with new local mode option

* feat: re-add toplevel btns

* feat: reports page consistency

* fix: consistency on project queue

* fix: icons + sizing

* fix: colors and gaps

* fix: impl endpoints

* feat: load all flags on file tab

* feat: thread generics changes

* feat: more qa

* feat: fix collapse

* fix: qa

* feat: msg modal

* fix: ISO import

* feat: qa fixes

* fix: empty state basic

* fix: collapsible region

* fix: collapse thread by default

* feat: rough draft of new process/flow

* fix labrinth build

* fix thread message privacy

* New tech review search route

* feat: qa fixes

* feat: QA changes

* fix: verdict on detail not whole issue

* fix: lint + intl

* fix: lint

* fix: thread message for tech rev verdict

* feat: use anim frames

* fix: exports + typecheck

* polish: qa changes

* feat: qa

* feat: qa polish

* feat: fix malic modal

* fix: lint

* fix: qa + lint

* fix: pagination

* fix: lint

* fix: qa

* intl extract

* fix ci

---------

Signed-off-by: Calum H. <contact@cal.engineer>
Co-authored-by: Alejandro González <me@alegon.dev>
Co-authored-by: aecsocket <aecsocket@tutanota.com>

---------

Signed-off-by: Calum H. <contact@cal.engineer>
Co-authored-by: Alejandro González <me@alegon.dev>
Co-authored-by: Calum H. <contact@cal.engineer>
2025-12-20 11:43:04 +00:00

3.3 KiB

Architecture

Use TAB instead of spaces.

Frontend

There are two similar frontends in the Modrinth monorepo, the website (apps/frontend) and the app frontend (apps/app-frontend).

Both use Tailwind v3, and their respective configs can be seen at tailwind.config.ts and tailwind.config.js respectively.

Both utilize shared and common components from @modrinth/ui which can be found at packages/ui, and stylings from @modrinth/assets which can be found at packages/assets.

Both can utilize icons from @modrinth/assets, which are automatically generated based on what's available within the icons folder of the packages/assets directory. You can see the generated icons list in generated-icons.ts.

Both have access to our dependency injection framework, examples as seen in packages/ui/src/providers/. Ideally any state which is shared between a page and it's subpages should be shared using this dependency injection framework.

Website (apps/frontend)

Before a pull request can be opened for the website, pnpm web:fix and pnpm web:intl:extract must be run, otherwise CI will fail.

To run a development version of the frontend, you must first copy over the relevant .env template file (prod, staging or local, usually prod) within the apps/frontend folder into apps/frontend/.env. Then you can run the frontend by running pnpm web:dev in the root folder.

App Frontend (apps/app-frontend)

Before a pull request can be opened for the website, you must CD into the app-frontend folder; pnpm fix and pnpm intl:extract must be run, otherwise CI will fail.

To run a development version of the app frontend, you must first copy over the relevant .env template file (prod, staging or local, usually prod) within packages/app-lib into packages/app-lib/.env. Then you must run the app itself by running pnpm app:dev in the root folder.

Localization

Refer to .github/instructions/i18n-convert.instructions.md if the user asks you to perform any i18n conversion work on a component, set of components, pages or sets of pages.

Labrinth

Labrinth is the backend API service for Modrinth.

Testing

Before a pull request can be opened, run cargo clippy -p labrinth --all-targets and make sure there are ZERO warnings, otherwise CI will fail.

Use cargo test -p labrinth --all-targets to test your changes. All tests must pass, otherwise CI will fail.

To prepare the sqlx cache, cd into apps/labrinth and run cargo sqlx prepare. Make sure to NEVER run cargo sqlx prepare --workspace.

Read the root docker-compose.yml to see what running services are available while developing. Use docker exec to access these services.

When the user refers to "performing pre-PR checks", do the following:

  • Run clippy as described above
  • DO NOT run tests unless explicitly requested (they take a long time)
  • Prepare the sqlx cache

Clickhouse

Use docker exec labrinth-clickhouse clickhouse-client to access the Clickhouse instance. We use the staging_ariadne database to store data in testing.

Postgres

Use docker exec labrinth-postgres psql -U labrinth -d labrinth -c "SELECT 1" to access the PostgreSQL instance, replacing the SELECT 1 with your query.

Guidelines

  • Do not create new non-source code files (e.g. Bash scripts, SQL scripts) unless explicitly prompted to.