# Tuist Elixir Review

Project-specific PR-review rules for the tuist/tuist Elixir codebases (server, cache...

- Repository: https://github.com/tuist/tuist (5859 stars)
- Category: Git and review
- License: see repository
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add tuist/tuist --skill tuist-elixir-review -g -a claude-code -y`
Codex: `npx skills add tuist/tuist --skill tuist-elixir-review -g -a codex -y`
Cursor: `npx skills add tuist/tuist --skill tuist-elixir-review -g -a cursor -y`
Gemini CLI: `npx skills add tuist/tuist --skill tuist-elixir-review -g -a gemini-cli -y`

## Description

Project-specific PR-review rules for the tuist/tuist Elixir codebases (server, cache, processor, xcode_processor, tuist_common, noora). Focuses on the things only this repo knows, authorization invariants, tenancy, write-only ClickHouse, Mimic placement, migration timestamptz, data-export updates, marketing changelog entries, and i18n.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Tuist Elixir Review

This skill is intentionally narrow. **Generic Elixir style, naming, pipe
chains, formatting, nesting depth, and `String.to_atom/1`-style hygiene
are already covered by `mix format` and `credo` in CI, do not flag
those.** Focus on the rules below; they catch real bugs.

For each finding, cite `path:line` (or `Module.function/arity`) and
quote the relevant snippet.

Only report findings whose cited snippet is present in the PR diff. If
the concern comes from unchanged context, do not emit a finding, do not
mention it as a note, and do not create a "findings outside this PR's
diff" section. If every possible concern is outside the diff, return no
findings.

Do not infer violations from nearby lines. A Mimic finding requires the
exact token `Mimic.copy(` on the cited changed line. A migration
timestamp finding requires the cited changed line to contain
`timestamps()` without `type: :timestamptz` or a timestamp column without
`:timestamptz`.

---

## 1. Authorization, `lib/tuist/authorization.ex` + `AuthorizationPlug`

The policy DSL is `LetMe.Policy`. Categories are declared via `object
:foo do ... end` blocks. The API plug at
`server/lib/tuist_web/plugs/api/authorization/authorization_plug.ex`
hard-codes which categories are project-scoped:

```elixir
@project_categories [:run, :bundle, :cache, :preview, :test, :build, :automation_alert]
```

### Flag

The rest: https://github.com/tuist/tuist/blob/HEAD/.blick/skills/tuist-elixir-review/SKILL.md
