+1 thank you Adam and Aleks. Newcomers - please do this! GSOC candidates - please start here!
On Wed, Nov 4, 2026 at 12:53 PM Erioluwa Adeodu <[email protected]> wrote: > this is great, accelerates on-boarding imo > > On Wed, Nov 4, 2026, 7:58 PM Ádám Sághy <[email protected]> wrote: > >> Hi all, >> >> We have opened a large batch of well-scoped tickets aimed at new and >> returning contributors. (Thank you Aleks!). >> >> Each one is small enough for a single pull request and describes where to >> look and when it is done. >> They are all labelled "beginner" and "beginner-friendly", so you can find >> them with: >> >> >> https://issues.apache.org/jira/issues/?jql=project%3DFINERACT%20AND%20labels%3Dbeginner-friendly%20AND%20statusCategory%3D%22To%20Do%22 >> >> The stories were built from a clean build of develop and a review of the >> codebase. The warning counts, module and file lists in each sub-task come >> straight from the build output. >> >> >> 1. Fix compiler, Error Prone and Gradle warnings in the build >> https://issues.apache.org/jira/browse/FINERACT-3092 (15 sub-tasks) >> >> A clean build prints about 2,280 unique warnings. They hide new >> problems, and most of them are mechanical to fix. One sub-task per >> warning category: EffectivelyPrivate, arrow switches, BooleanLiteral, >> Javadoc, deprecated APIs, unchecked casts, Locale in toLowerCase, >> pattern-matching instanceof, the generated Feign client templates >> and Gradle 10 deprecations. >> >> >> 2. Re-enable the Error Prone checks disabled in build.gradle >> https://issues.apache.org/jira/browse/FINERACT-3108 (8 sub-tasks) >> >> build.gradle disables several checks with a "TODO fix remaining >> usages" note (UnusedVariable, EmptyBlockTag, MissingSummary, >> DirectInvocationOnMock, ReturnValueIgnored, ...). Fix the usages, >> then switch the check back on so the problem can't come back. One >> sub-task covers a crash in Error Prone 2.49 that the UnusedVariable >> check hits on two of our classes. >> >> >> 3. Move shared code out of fineract-provider so feature modules can be >> split >> https://issues.apache.org/jira/browse/FINERACT-3117 (6 sub-tasks) >> >> Loan and savings code can't leave fineract-provider while it depends >> on notes, calendars, holidays, working days, account transfers and >> interest rate charts that live only there. These sub-tasks move them >> to fineract-core, or put interfaces in core. >> >> >> 4. Move loan code out of fineract-provider >> https://issues.apache.org/jira/browse/FINERACT-3124 (13 sub-tasks) >> >> 208 loan classes are still in fineract-provider. About 160 of them >> don't depend on anything else in provider, so they can move first: >> product mix, COB steps, jobs, external event serializers, batch >> strategies, read and write services, API resources. Targets are >> fineract-loan, fineract-progressive-loan and fineract-cob. >> >> >> 5. Move savings, deposit and charge code out of fineract-provider and >> fineract-core >> https://issues.apache.org/jira/browse/FINERACT-3138 (8 sub-tasks) >> >> 170 savings and deposit classes are still in fineract-provider, >> including 86 command handlers, plus savings and charge classes in >> fineract-core. Targets are fineract-savings and fineract-charge. >> >> >> 6. Split large service classes by functionality >> https://issues.apache.org/jira/browse/FINERACT-3147 (15 sub-tasks) >> >> Fifteen sub-tasks across 13 services of 1,000 to 3,700 lines. >> LoanWritePlatformServiceJpaRepositoryImpl (3,735 lines, 44 public >> methods) is split into 3 sub-tasks: disbursement, repayments and >> adjustments, and closing/write-off/transfer. Each sub-task suggests >> how to split the class. The rule is extract, don't rewrite: no >> behaviour change. >> >> >> 7. Move business logic out of JPA entities >> https://issues.apache.org/jira/browse/FINERACT-3163 (11 sub-tasks) >> >> 66 of our 253 entities take a JsonCommand, 23 run request validation >> themselves, and SavingsAccount (3,840 lines) and Loan (1,884 lines) >> contain calculations. Entities should only hold state and the >> methods that change it. Parsing, validation and calculations move to >> services, validators and calculators. >> >> >> 8. Return typed objects from API resources instead of serialized Strings >> https://issues.apache.org/jira/browse/FINERACT-3175 (14 sub-tasks) >> >> 449 methods in 75 *ApiResource classes build their JSON by hand and >> return a String. They should return the response DTO and let >> JAX-RS/Jackson serialize it, as the fineract-accounting resources >> already do. The JSON clients receive, the OpenAPI spec and the >> generated client method names must not change. >> >> >> 9. Type-safe native SQL queries (QueryDSL) >> https://issues.apache.org/jira/browse/FINERACT-2022 (51 sub-tasks so >> far) >> >> Fineract builds about 500 native SQL queries as strings, so a >> renamed or dropped column only fails at runtime. FINERACT-2022 (see >> also FSIP-6) replaces them with QueryDSL SQL queries, whose query >> classes are generated from the schema. A broken column reference >> then fails the build instead of production. >> >> - The first 50 sub-tasks (SQL 001 to SQL 050) each cover one query. >> They start with the accounting module, which is the pilot, and >> continue into locking, currencies, tenants, external events, >> arrears ageing and loan reschedule. >> - Each sub-task names the class and line, for example >> "[SQL 001] Retrieve all GL closures >> (GLClosureReadPlatformServiceImpl:78)". >> - The QueryDSL infrastructure (dependencies, Q-type generation, a >> short developer guide) is not on develop yet. Please follow >> FINERACT-2022 and wait for it to land before you pick up an SQL >> sub-task. >> - More sub-tasks will be added as the migration moves on module by >> module. >> >> >> *How to get started* >> >> - Pick a sub-task and comment on it to say you are working on it. >> - Please don't pick up more than 3 at the same time >> - One sub-task per pull request. Start the PR title with the ticket >> key, e.g. "FINERACT-3093: Fix EffectivelyPrivate warnings in >> DepositAccountReadPlatformServiceImpl". >> - Behaviour must not change. Run ./gradlew build -x test before you >> push, and the tests that cover your change. CONTRIBUTING.md and the >> skills under .agents/skills explain how to test. >> - Some tickets depend on others (the modularisation ones on the shared >> code story, for example). The ticket says so where it matters. >> - Questions are welcome here on the list or on the ticket. >> >> These are good first contributions. Each one makes the codebase safer and >> easier to work on for everyone who comes after you. >> >> Thanks, >> Adam S >> >
