Two files, one repository
opf/openproject ships 2 formats across 8 indexed files. The question worth asking is whether the second one says anything the first does not.
| Dimension | Shared | Only in A | Only in B | Overlap |
|---|---|---|---|---|
| Sections | 1 | 16 | 5 | 5% |
| Commands | 0 | 8 | 0 | 0% |
| Section tags | 1 | 6 | 1 | 13% |
What each file covers
Sections
1 shared · 16 only in A · 5 only in B- − OpenProject AI Coding Agent Instructions
- − Repository Overview
- − Critical Setup Requirements
- − Local Development Setup
- − Access at http://localhost:3000
- − Docker Development Setup
- − Project Structure
- − Key Directories
- − Configuration Files
- − Linting (Run Before Committing)
- − JavaScript/TypeScript
- − ERB Templates
- − Install Git Hooks (recommended)
- − JavaScript and TypeScript Copyright Headers
- − Commit Messages
- − Additional Documentation
- + App
- + Directory Structure
- + Code Style Guidelines
- + Templates
- + Translations
- Ruby
Commands
0 shared · 8 only in A · 0 only in B- − bundle install
- − bundle exec rails db:migrate
- − bundle exec rubocop
- − bundle exec lefthook install
- − docker/dev/AGENTS.md
- − docker/dev/
- − rake copyright:update_typescript
- − rake copyright:update_js
Section tags
1 shared · 6 only in A · 1 only in B- − setup
- − lint-format
- − types
- − git-pr
- − agent-behaviour
- − docs
- + code-style
- architecture
Line diff
opf/openproject · AGENTS.md
@@ −1 @@
1# OpenProject AI Coding Agent Instructions
2
3> **Note for developers**: You can create `AGENTS.local.md` (or `CLAUDE.local.md`) in this directory to add your own custom instructions or preferences for AI coding agents. These files are git-ignored and will not be committed to the repository.
4
5## Repository Overview
6
7**OpenProject** is a web-based, open-source project management software written in Ruby on Rails with PostgreSQL for data persistence.
8
9- **Size**: Large monorepo (~840MB, ~1M+ lines of code)
10- **Backend**: Ruby 3.4.7, Rails ~8.0.3
11- **Frontend**: Node.js 24.x (>= 24.15.0), npm 11.x, TypeScript
12- **Database**: PostgreSQL (required)
13- **Architecture**: Server-rendered HTML with Hotwire (Turbo + Stimulus). Legacy Angular components exist and are being migrated to custom elements. Uses GitHub's Primer Design System via ViewComponent.
14- **Editions**: Community, Enterprise (SSO, LDAP, SCIM), and BIM (construction industry, code in `modules/bim/`)
15
16## Critical Setup Requirements
17
18**ALWAYS verify versions before building:**
19- Ruby: `3.4.7` (see `.ruby-version`)
20- Node: `^24.15.0` (see `package.json` engines)
21- Bundler: Latest 2.x
22
23### Local Development Setup
24
25```bash
26bundle install # Install Ruby gems
27cd frontend && npm ci && cd .. # Install Node packages
28bundle exec rails db:migrate # Setup database
29bin/dev # Start all services (Rails, frontend, Good Job worker)
30# Access at http://localhost:3000
31```
32
33### Docker Development Setup
34
35See [`docker/dev/AGENTS.md`](docker/dev/AGENTS.md) for full Docker setup and commands.
36
37## Project Structure
38
39### Key Directories
40
41- `app/` — Rails application code
42- `config/` — Rails configuration, routes, locales
43- `db/` — Database migrations and seeds
44- `docker/dev/` — Docker development environment
45- `frontend/` — TypeScript/Angular/Stimulus frontend
46- `lib/` — Ruby libraries and extensions
47- `lookbook/` — ViewComponent previews (<https://qa.openproject-edge.com/lookbook/>)
48- `modules/` — OpenProject plugin modules
49- `spec/` — RSpec test suite
50
51### Configuration Files
52
53- `.ruby-version` - Ruby version
54- `.rubocop.yml` - Ruby linting rules
55- `.erb_lint.yml` - ERB template linting
56- `frontend/eslint.config.mjs` - JavaScript/TypeScript linting
57- `Gemfile` - Ruby dependencies
58- `package.json` / `frontend/package.json` - Node.js dependencies
59- `lefthook.yml` - Git hooks configuration
60
61### Linting (Run Before Committing)
62
63```bash
64# Ruby
65bundle exec rubocop # Check all files
66bin/dirty-rubocop --uncommitted # Check only uncommitted changes
67
68# JavaScript/TypeScript
69cd frontend && npx eslint src/ && cd ..
70
71# ERB Templates
72erb_lint {files}
73
74# Install Git Hooks (recommended)
75bundle exec lefthook install
76```
77
78### JavaScript and TypeScript Copyright Headers
79
80All first-party JavaScript and TypeScript files must use the canonical compact
81line-comment copyright header generated from `COPYRIGHT_short`:
82
83```typescript
84//-- copyright
85// OpenProject is an open source project management software.
86// ...
87//++
88
89```
90
91Use `//-- copyright` and `//++` exactly as shown. Prefix non-empty body lines
92with `// `, prefix empty body lines with `//`, and leave one blank line between
93the header and the source code. Do not compose or reformat the header manually.
94
95Run `rake copyright:update_typescript` to add or repair headers in `.ts` and
96`.tsx` files. Run `rake copyright:update_js` for `.js`, `.mjs`, and `.cjs`
97files. Both commands accept an optional path argument.
98
99## Commit Messages
100- First line: < 72 characters, then blank line, then detailed description
101- Reference work packages when applicable
102- Merge strategy: "Merge pull request" (not squash), except single-commit PRs can use "Rebase and merge"
103
104## Additional Documentation
105
106- `docs/development/` — Development documentation
107- `docs/development/running-tests/` — Testing guide
108- `docs/development/code-review-guidelines/` — Code review standards
109- `CONTRIBUTING.md` — Contribution workflow
110- `.github/copilot-instructions.md` — Extended agent instructions with troubleshooting
111
opf/openproject · app/AGENTS.md
@@ +1 @@
1# App
2
3## Directory Structure
4
5- `app/components/` - ViewComponent-based UI components (Ruby + ERB)
6- `app/contracts/` - Validation and authorization contracts
7- `app/controllers/` - Rails controllers
8- `app/models/` - ActiveRecord models
9- `app/services/` - Service objects (business logic)
10- `app/workers/` - Background job workers
11
12## Code Style Guidelines
13
14### Ruby
15- Follow [Ruby community style guide](https://github.com/bbatsov/ruby-style-guide)
16- Use service objects for complex business logic (return `ServiceResult`)
17- Use contracts for validation and authorization
18- Keep controllers thin, models focused
19- Document with [YARD](https://yardoc.org/)
20- Write RSpec tests for all new features
21- **Work package identifiers**: `WorkPackage.find("PROJ-42")` resolves semantic identifiers transparently. Use `find_by_display_id` only when input could legitimately be numeric OR semantic (controllers, URL-driven components, macro resolvers). Low-level code (queries, filters, services) should stick to `find_by(id:)` with primary keys. See `app/models/work_package/semantic_identifier/finder_methods.rb`.
22
23### Templates
24- Use ERB for server-rendered views
25- Use ViewComponents for reusable UI (with Lookbook previews)
26- Lint with erb_lint before committing
27
28## Translations
29
30- UI strings must use translation keys (never hard-coded)
31
@@ −1 +1 @@
1−# OpenProject AI Coding Agent Instructions
1+# App
22
3−> **Note for developers**: You can create `AGENTS.local.md` (or `CLAUDE.local.md`) in this directory to add your own custom instructions or preferences for AI coding agents. These files are git-ignored and will not be committed to the repository.
3+## Directory Structure
44
5−## Repository Overview
5+- `app/components/` - ViewComponent-based UI components (Ruby + ERB)
6+- `app/contracts/` - Validation and authorization contracts
7+- `app/controllers/` - Rails controllers
8+- `app/models/` - ActiveRecord models
9+- `app/services/` - Service objects (business logic)
10+- `app/workers/` - Background job workers
611
7−**OpenProject** is a web-based, open-source project management software written in Ruby on Rails with PostgreSQL for data persistence.
12+## Code Style Guidelines
813
9−- **Size**: Large monorepo (~840MB, ~1M+ lines of code)
10−- **Backend**: Ruby 3.4.7, Rails ~8.0.3
11−- **Frontend**: Node.js 24.x (>= 24.15.0), npm 11.x, TypeScript
12−- **Database**: PostgreSQL (required)
13−- **Architecture**: Server-rendered HTML with Hotwire (Turbo + Stimulus). Legacy Angular components exist and are being migrated to custom elements. Uses GitHub's Primer Design System via ViewComponent.
14−- **Editions**: Community, Enterprise (SSO, LDAP, SCIM), and BIM (construction industry, code in `modules/bim/`)
14+### Ruby
15+- Follow [Ruby community style guide](https://github.com/bbatsov/ruby-style-guide)
16+- Use service objects for complex business logic (return `ServiceResult`)
17+- Use contracts for validation and authorization
18+- Keep controllers thin, models focused
19+- Document with [YARD](https://yardoc.org/)
20+- Write RSpec tests for all new features
21+- **Work package identifiers**: `WorkPackage.find("PROJ-42")` resolves semantic identifiers transparently. Use `find_by_display_id` only when input could legitimately be numeric OR semantic (controllers, URL-driven components, macro resolvers). Low-level code (queries, filters, services) should stick to `find_by(id:)` with primary keys. See `app/models/work_package/semantic_identifier/finder_methods.rb`.
1522
16−## Critical Setup Requirements
23+### Templates
24+- Use ERB for server-rendered views
25+- Use ViewComponents for reusable UI (with Lookbook previews)
26+- Lint with erb_lint before committing
1727
18−**ALWAYS verify versions before building:**
19−- Ruby: `3.4.7` (see `.ruby-version`)
20−- Node: `^24.15.0` (see `package.json` engines)
21−- Bundler: Latest 2.x
28+## Translations
2229
23−### Local Development Setup
24−
25−```bash
26−bundle install # Install Ruby gems
27−cd frontend && npm ci && cd .. # Install Node packages
28−bundle exec rails db:migrate # Setup database
29−bin/dev # Start all services (Rails, frontend, Good Job worker)
30−# Access at http://localhost:3000
31−```
32−
33−### Docker Development Setup
34−
35−See [`docker/dev/AGENTS.md`](docker/dev/AGENTS.md) for full Docker setup and commands.
36−
37−## Project Structure
38−
39−### Key Directories
40−
41−- `app/` — Rails application code
42−- `config/` — Rails configuration, routes, locales
43−- `db/` — Database migrations and seeds
44−- `docker/dev/` — Docker development environment
45−- `frontend/` — TypeScript/Angular/Stimulus frontend
46−- `lib/` — Ruby libraries and extensions
47−- `lookbook/` — ViewComponent previews (<https://qa.openproject-edge.com/lookbook/>)
48−- `modules/` — OpenProject plugin modules
49−- `spec/` — RSpec test suite
50−
51−### Configuration Files
52−
53−- `.ruby-version` - Ruby version
54−- `.rubocop.yml` - Ruby linting rules
55−- `.erb_lint.yml` - ERB template linting
56−- `frontend/eslint.config.mjs` - JavaScript/TypeScript linting
57−- `Gemfile` - Ruby dependencies
58−- `package.json` / `frontend/package.json` - Node.js dependencies
59−- `lefthook.yml` - Git hooks configuration
60−
61−### Linting (Run Before Committing)
62−
63−```bash
64−# Ruby
65−bundle exec rubocop # Check all files
66−bin/dirty-rubocop --uncommitted # Check only uncommitted changes
67−
68−# JavaScript/TypeScript
69−cd frontend && npx eslint src/ && cd ..
70−
71−# ERB Templates
72−erb_lint {files}
73−
74−# Install Git Hooks (recommended)
75−bundle exec lefthook install
76−```
77−
78−### JavaScript and TypeScript Copyright Headers
79−
80−All first-party JavaScript and TypeScript files must use the canonical compact
81−line-comment copyright header generated from `COPYRIGHT_short`:
82−
83−```typescript
84−//-- copyright
85−// OpenProject is an open source project management software.
86−// ...
87−//++
88−
89−```
90−
91−Use `//-- copyright` and `//++` exactly as shown. Prefix non-empty body lines
92−with `// `, prefix empty body lines with `//`, and leave one blank line between
93−the header and the source code. Do not compose or reformat the header manually.
94−
95−Run `rake copyright:update_typescript` to add or repair headers in `.ts` and
96−`.tsx` files. Run `rake copyright:update_js` for `.js`, `.mjs`, and `.cjs`
97−files. Both commands accept an optional path argument.
98−
99−## Commit Messages
100−- First line: < 72 characters, then blank line, then detailed description
101−- Reference work packages when applicable
102−- Merge strategy: "Merge pull request" (not squash), except single-commit PRs can use "Rebase and merge"
103−
104−## Additional Documentation
105−
106−- `docs/development/` — Development documentation
107−- `docs/development/running-tests/` — Testing guide
108−- `docs/development/code-review-guidelines/` — Code review standards
109−- `CONTRIBUTING.md` — Contribution workflow
110−- `.github/copilot-instructions.md` — Extended agent instructions with troubleshooting
30+- UI strings must use translation keys (never hard-coded)
11131
