-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathgreptile.json
More file actions
72 lines (72 loc) · 3.57 KB
/
Copy pathgreptile.json
File metadata and controls
72 lines (72 loc) · 3.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
{
"commentTypes": ["logic", "syntax", "style"],
"instructions": "Enforce project-specific review guidelines - see docs/review-guidelines.md for complete checklist",
"customContext": {
"rules": [
{
"scope": ["src/**"],
"rule": "Package dependencies must follow core → hooks → ui dependency order"
},
{
"scope": ["src/**"],
"rule": "Always use workspace:* protocol for internal dependencies"
},
{
"scope": ["src/**"],
"rule": "Schema-first: All types defined in schemas/*.ts using Zod"
},
{
"scope": ["packages/**", ".changeset/**"],
"rule": "Unified versioning: All packages must maintain exact same version. This change will happen automatically any time a single package is updated via changeset."
},
{
"scope": ["packages/core/src/**"],
"rule": "Zero React: Pure TypeScript, no React dependencies"
},
{
"scope": ["packages/hooks/src/context/**"],
"rule": "Context and Provider in separate files, exported via context/index.ts"
},
{
"scope": ["packages/ui/src/**"],
"rule": "Auto-injected styles: index.ts calls injectStyles() on module load"
},
{
"scope": ["packages/ui/src/components/**"],
"rule": "No hardcoded user-facing strings: use t() or Trans/i18nKey for aria-label, title, placeholder, alt, and visible copy. ESLint i18next/no-literal-string enforces this."
},
{
"scope": ["packages/ui/src/i18n/locales/**"],
"rule": "Locale JSON is upstream-owned (platform-localization). CI locale-ownership job fails any PR that edits packages/ui/src/i18n/locales/ unless its author is platform-localization-pr-bot[bot]. The branch name is deliberately not part of the check (see docs/adr/0003-locale-ownership-gate-keys-on-pr-author.md). Add English in sources/common/en.json (react.*); translations arrive via Crowdin sync PRs."
},
{
"scope": ["*"],
"rule": "Conventional PR titles: the PR title must follow Conventional Commits because it becomes the squash-merge commit on main. Ticket references like YPE-1234 belong in the branch name and PR body, not the title. See docs/release-hardening-decisions.md (Decision 1)."
},
{
"scope": [".husky/**"],
"rule": "Git hooks should invoke the package manager via `corepack pnpm ...` when corepack is available (so the repo-pinned pnpm runs regardless of PATH), falling back to `pnpm` where corepack isn't present (Node 25+ no longer bundles it). See docs/release-hardening-decisions.md (Decision 2)."
},
{
"scope": ["package.json", "packages/**/package.json"],
"rule": "New devDependencies must support the consumer engines.node floor (>=22.13). Do not lower the floor to escape a dependency constraint without a deliberate decision. See docs/release-hardening-decisions.md (Decision 3)."
},
{
"scope": ["*"],
"rule": "Every PR must include a changeset. For a genuine no-release change (CI, docs, tooling) add an intentional empty changeset via `pnpm changeset --empty`. See docs/release-hardening-decisions.md (Decision 4)."
}
],
"files": [
{
"scope": ["*"],
"path": "docs/review-guidelines.md",
"description": "Comprehensive review checklist for all pull requests"
},
{
"scope": ["packages/ui/**"],
"path": "docs/i18n-guidelines.md",
"description": "Localization workflow: platform-localization source, Crowdin, and downstream sync"
}
]
}
}