+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
>>
>

Reply via email to