)]}'
{
  "log": [
    {
      "commit": "d8ffb569484f8752329978e78dd6595662c0a7b6",
      "tree": "5516c08bb3525445854dc1ac0a7f5f45a71f838f",
      "parents": [
        "684a36849b14f44fb4810b433b0741ba35c506e2",
        "e2553d6062e92c86cdce2c1725906246627c11f2"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 10 11:22:38 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 11:22:38 2026 +0000"
      },
      "message": "Merge pull request #6847 from adamsaghy/fix/loan-cob-skip-batch6\n\nFINERACT-3004: Run COB business steps in the item writer"
    },
    {
      "commit": "684a36849b14f44fb4810b433b0741ba35c506e2",
      "tree": "e1ad047203e9b0e7239d3767891bc6c33e38b76d",
      "parents": [
        "d63beed7ccfeadaffa0c7842b1011bc88451376f",
        "8ec2c6b3087ab82390ffaeaec72a8f1d09f8ef11"
      ],
      "author": {
        "name": "Aman Mittal",
        "email": "32237955+Aman-Mittal@users.noreply.github.com",
        "time": "Tue Nov 10 11:48:59 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 11:48:59 2026 +0530"
      },
      "message": "Merge pull request #6861 from renovate-bot/renovate/com.puppycrawl.tools-checkstyle-14.x\n\nFINERACT-2968: Update dependency com.puppycrawl.tools:checkstyle to v14"
    },
    {
      "commit": "e2553d6062e92c86cdce2c1725906246627c11f2",
      "tree": "48e70ef4355f2fe8b4ce52461e8daab0a2de5e95",
      "parents": [
        "023da8e1ea1a6f6efe269e9ac79562081731cd76"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Mon Nov 09 19:46:52 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Mon Nov 09 19:46:52 2026 +0000"
      },
      "message": "FINERACT-3004: Leave the JDBC transaction-manager change to its own PR\n\nCOB does not depend on ExtendedDataSourceTransactionManager recognising\nan enclosing JPA transaction: the locking service uses a plain\nJdbcTemplate, the lock listener saves errors through the JPA\nrequiresNewTransactionTemplate once the chunk transaction has\ncompleted, and the lock tasklets run outside any JPA transaction. The\nchange affects every jdbcTransactionManager consumer, so it moves to a\npull request of its own, where it can be reviewed and reverted on its\nown.\n\nThe manager keeps only the AfterTransactionWork drain at the end of its\ncleanup. The AfterTransactionWork cases of\nJdbcTransactionInsideJpaTransactionTest move to\nAfterTransactionWorkConnectionTest.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "023da8e1ea1a6f6efe269e9ac79562081731cd76",
      "tree": "1d884543d018c85db0ca32980d727bf9d9f0a594",
      "parents": [
        "52a85803b4a1380da28ad5131363898de0f8ed97"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Mon Nov 09 13:51:39 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Mon Nov 09 13:51:39 2026 +0000"
      },
      "message": "FINERACT-3004: Record a COB error only once the account\u0027s outcome is final\n\nAn error makes a lock overrulable by inline COB. Recording the chunk\nerror before scan mode let inline COB close a healthy account for the\ndate that scan mode then closed again, running its business steps and\nraising their events twice. A chunk that goes into scan mode now records\nnothing; scan mode records the failing account through onSkipInWrite.\n\nThe writer names the account a failure belongs to, so a chunk that is\nnot scanned (inline COB) records the failing account\u0027s own error and\nthe chunk error on the others, and the account that exceeds the skip\nlimit in scan mode, which Batch reports to no item listener, gets its\nerror from onChunkError. The listener implements the listener\ninterfaces, since Batch 6 reads no annotation for onChunkError, and\ndrops the processor callbacks that have no processor to call them.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "8ec2c6b3087ab82390ffaeaec72a8f1d09f8ef11",
      "tree": "e1ad047203e9b0e7239d3767891bc6c33e38b76d",
      "parents": [
        "d63beed7ccfeadaffa0c7842b1011bc88451376f"
      ],
      "author": {
        "name": "Mend Renovate",
        "email": "bot@renovateapp.com",
        "time": "Mon Nov 09 03:50:46 2026 +0000"
      },
      "committer": {
        "name": "Mend Renovate",
        "email": "bot@renovateapp.com",
        "time": "Mon Nov 09 03:50:46 2026 +0000"
      },
      "message": "FINERACT-2968: Update dependency com.puppycrawl.tools:checkstyle to v14\n"
    },
    {
      "commit": "52a85803b4a1380da28ad5131363898de0f8ed97",
      "tree": "bc0224aeb51b56b5f342664eba0842d6def2783e",
      "parents": [
        "3fab25691d0cc9732402ab06b34aa1144cfcde30"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Sat Nov 07 12:57:59 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Sat Nov 07 12:57:59 2026 +0000"
      },
      "message": "FINERACT-3004: Keep deferred COB error saves on their tenant and drop the redundant saveAll\n\nDeferred work now runs in the tenant and data source context it was\nregistered under, and the COB writers drain any work still waiting on\nthe thread when their step ends, so an error save can never land on\nanother tenant\u0027s lock rows or be left behind on a pooled thread.\n\nThe writers no longer saveAll the accounts: they are managed by the\nchunk transaction, so the flush writes them and the merge only cascaded\nthrough the whole account graph.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "3fab25691d0cc9732402ab06b34aa1144cfcde30",
      "tree": "c082650b5c986c0bac18b37d6b0c8d951faa29ff",
      "parents": [
        "241492c20a8227fa51dc943c96bbf28add9e4fa1"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 16:51:27 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 16:51:27 2026 +0000"
      },
      "message": "FINERACT-3004: Credit the failing-business-step scenario to its author\n\nThe integration test\u0027s scenario - a GL closure on the COB date failing\none loan\u0027s accrual beside a loan with no accounting in the same chunk -\ncomes from Piotr Wargulak\u0027s LoanCobBusinessStepFailureTest in\napache/fineract#6753.\n\nCo-authored-by: Piotr Wargulak \u003cpwargulak@soldevelo.com\u003e\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "241492c20a8227fa51dc943c96bbf28add9e4fa1",
      "tree": "04212c69701cf37286161f67b5e28b04513f49c2",
      "parents": [
        "566fcbeff3c1437029b97942c3a1119119ba76b5"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 15:45:42 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 15:45:42 2026 +0000"
      },
      "message": "FINERACT-3004: Close the remaining COB failure paths found in review\n\nRead failures. The readers loaded each account through a repository\nwhose @Transactional marked the chunk transaction rollback-only on any\nfailure, and Spring Batch 6 skips a failed read inside that transaction,\nso the rest of the chunk was written and silently rolled back. The\nreaders now hand out ids only, and the writer loads each account inside\nthe write, where a failure enters scan mode and only that account is\nskipped. This also removes the detached entities scan mode used to\nreload.\n\nLock errors. They are saved once the transaction they were raised in\nhas completed and given back its connection, through the new\nAfterTransactionWork, which the Fineract transaction managers run at the\nend of their cleanup. A failing chunk no longer needs a second pooled\nconnection for its errors, and the error update can no longer wait on\nrow locks its own chunk transaction still holds. An account that went\ndown with its chunk now reads \"was rolled back with its failed chunk\",\nwhile the account that failed keeps \"writing is failed\".\n\nJDBC inside JPA. ExtendedDataSourceTransactionManager now treats the\nconnection the JPA transaction manager exposes as the existing\ntransaction it is: REQUIRED and SUPPORTS join it, and a failed\nparticipant marks the JPA transaction rollback-only; REQUIRES_NEW and\nNOT_SUPPORTED suspend it; NESTED is refused. Before, JDBC work inside a\nJPA transaction began and committed \"its own\" transaction on the JPA\nconnection, committing the JPA work done so far - for example the\nSpring Data JDBC document and image saves. This replaces the guard on\nrequiresNewTransactionJdbcTemplate, which is a plain REQUIRES_NEW\ntemplate again.\n\nTests. CobNoRetryTest now runs both worker steps as their\nconfigurations build them and checks a failing account is attempted\nexactly twice, instead of reading Spring Batch\u0027s private fields.\nLoanCobBusinessStepFailureTest runs inside runAt, restores the charge\naccrual date it found, and cleans up with COB catch-up, asserting that\nthe failing loan is then closed and unlocked.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "566fcbeff3c1437029b97942c3a1119119ba76b5",
      "tree": "c57ca81c47f1a63a61e267587d7750dd1f3e5ec0",
      "parents": [
        "69d7a9cff3a0a818e969e9dc576c6ac39e41f970"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 15:32:56 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 15:32:56 2026 +0000"
      },
      "message": "FINERACT-3004: Drop static imports the test base class already provides\n\nError Prone\u0027s RemoveUnusedImports rejects them: ok, executeVoid and\nassertThat resolve to the inherited FeignIntegrationTest methods.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "69d7a9cff3a0a818e969e9dc576c6ac39e41f970",
      "tree": "e61abfbff940b0288adbd64051c3ebc5a227aefe",
      "parents": [
        "9fbaf85d289a3ec8e106262fdfd6af5a3363ee42"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 14:29:01 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 14:29:01 2026 +0000"
      },
      "message": "FINERACT-3004: Add an integration test for a failing COB business step\n\nTwo loans of one chunk run through Loan COB: the first posts an accrual\njournal entry on the COB date, which a GL closure on that date rejects;\nthe second has no accounting. The job must complete, close the second\nloan and release its lock, and leave the first locked with its own error.\n\nOn develop the job reports success, but neither loan is closed and both\nkeep their locks with no error.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "9fbaf85d289a3ec8e106262fdfd6af5a3363ee42",
      "tree": "2e9cf056220c0f67572f7acb43d306f3cb86bfcd",
      "parents": [
        "aa76e346ccc03008daeb6ff3c78642aff0c81135"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 14:29:00 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 14:29:00 2026 +0000"
      },
      "message": "FINERACT-3004: Refuse a JDBC REQUIRES_NEW transaction inside a JPA one\n\nThe lock error COB tried to save on a failing loan was lost because the\nrequiresNewTransactionJdbcTemplate did not open a new transaction. The\nJPA transaction manager exposes its connection as a ConnectionHolder on\nthe same DataSource but marks it neither active nor synchronised, so the\nJDBC manager saw no existing transaction, suspended nothing and ran on\nthe JPA transaction\u0027s own connection: its commit committed the JPA work\nso far, or, on a rollback-only transaction, rolled that connection back\nand threw UnexpectedRollbackException.\n\nThe bean is now a RequiresNewJdbcTransactionTemplate, which throws\nIllegalTransactionStateException before running anything when a\nconnection holder the JDBC manager did not open is bound to its\nDataSource. Outside a transaction, inside a JDBC one, or where the JPA\ntransaction is suspended, it is a plain REQUIRES_NEW template.\n\nIts callers all run with no JPA transaction open, so none of them\nchanges behaviour: the COB lock tasklets run from\nCobWorkerStepListener.beforeStep on the worker\u0027s poller thread, and the\nstuck job executor runs from ContextRefreshedEvent. The guard is on the\ntemplate only, not on the JDBC transaction manager: the Spring Data JDBC\nrepositories, which use that manager, are called from JPA transactions\nin the document and image write services, and a manager-level guard\nwould fail those.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "aa76e346ccc03008daeb6ff3c78642aff0c81135",
      "tree": "58fe01889bb5f0048a366133ac86db25a1851ee2",
      "parents": [
        "da0714fe5eb9171a9c6691dbee4cec3578bb520f"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 13:57:41 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 13:57:41 2026 +0000"
      },
      "message": "FINERACT-3004: Remove the COB retry limit and pin a single attempt\n\nThe COB worker steps no longer retry, so the retry-limit partitioned job\nproperty had no effect. It is removed with its getter, instead of being\nkept as a setting that does nothing.\n\nA retry must not come back. Spring Batch 5 retried statefully, rolling\nthe chunk back and making the next attempt in a new transaction. Spring\nBatch 6 retries inside the transaction the item failed in, which a COB\nfailure has marked rollback-only. A retry that then succeeds hides the\nfailure: scan mode never starts, and the chunk is rolled back at its end\nwhile being recorded as committed, leaving its loans locked with no\nerror. Scan mode already gives each loan of a failed chunk one more\nattempt in a transaction of its own.\n\nStepRetryPolicyFactory now offers only the no-retry policy and explains\nwhy, and CobNoRetryTest fails if either COB worker step is given a\npolicy that retries.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "da0714fe5eb9171a9c6691dbee4cec3578bb520f",
      "tree": "58f697590c47b31ce147b485196d0ebae697724e",
      "parents": [
        "bc81a40d4c5624e63ef78c9e88a6e8052d0385e7"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 13:33:02 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 13:33:02 2026 +0000"
      },
      "message": "FINERACT-3004: Run COB business steps in the item writer\n\nWhen one loan\u0027s business step failed, Loan COB and Working Capital\nLoan COB lost the whole chunk. The business steps ran in the item\nprocessor and joined the chunk transaction, so a failure marked that\ntransaction rollback-only. Spring Batch 6 skips a failed process inside\nthe chunk transaction and does not replay the chunk, so the healthy\nloans of the chunk were rolled back with the failing one and stayed\nlocked. Saving the error on the lock failed too, because the JDBC\nREQUIRES_NEW template ran on the chunk\u0027s own connection and threw\nUnexpectedRollbackException; Batch 6 calls onProcessError before the\nskip, so that exception failed the step.\n\nThe business steps now run in the writer. A failed write rolls the chunk\nback and enters scan mode, which writes each loan again in a transaction\nof its own: the failing loan is skipped and stays locked with its own\nerror, and every other loan commits its business steps, last closed\nbusiness date and lock release together. A chunk with no failure still\ncommits once.\n\n- AbstractCOBItemWriter replaces AbstractItemProcessor. It loads each\n  loan again before its business steps, so scan mode never runs them\n  over a detached copy changed by the rolled-back attempt, and it\n  flushes before releasing the locks, so an optimistic lock conflict\n  fails the write instead of the commit.\n- The COB processors are removed. The inline writers become job scoped,\n  as the inline processors were.\n- The lock listener saves errors through the JPA REQUIRES_NEW template,\n  never throws, and saves the loan\u0027s own error on a skip in write.\n- The COB worker steps no longer retry. Batch 6 retries inside the\n  doomed chunk transaction, so a retry cannot succeed; the\n  LOAN_COB_RETRY_LIMIT and WC_LOAN_COB_RETRY_LIMIT properties are gone.\n\nA skipped loan is now counted in write_skip_count, not\nprocess_skip_count.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "d63beed7ccfeadaffa0c7842b1011bc88451376f",
      "tree": "04e7b93943ea30b4557d651fd0e6ef6e98f61c0d",
      "parents": [
        "c86b028038cefd9671376b07a46f344fcbd16615",
        "4b11c479d801b45fa2ee285cd85b3e0dc2e11934"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 13:05:40 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 06 13:05:40 2026 +0000"
      },
      "message": "Merge pull request #6834 from rshdhere/FINERACT-3197-legacy-failure-webhook-payload\n\nFINERACT-3197: Send status and response in legacy failure webhooks"
    },
    {
      "commit": "c86b028038cefd9671376b07a46f344fcbd16615",
      "tree": "350cb6c539e9b721b0d415736c095ff618e593cc",
      "parents": [
        "bc81a40d4c5624e63ef78c9e88a6e8052d0385e7",
        "3f4a93578917da26f684c2d67339e7ea6136824c"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 13:04:59 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 06 13:04:59 2026 +0000"
      },
      "message": "Merge pull request #6842 from adamsaghy/FINERACT-3047/fix-savings-job-tests-after-merges\n\nFINERACT-3047: Fix the savings tests that keep develop red"
    },
    {
      "commit": "3f4a93578917da26f684c2d67339e7ea6136824c",
      "tree": "350cb6c539e9b721b0d415736c095ff618e593cc",
      "parents": [
        "94556467a7dc7de88ccb9e9bf5c612f245bffd9f"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 11:39:09 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 11:39:09 2026 +0000"
      },
      "message": "FINERACT-3196: Test the stale snapshot check\u0027s edge cases and its replay\n\nSavingsAccountRepositoryWrapperStaleSnapshotTest covered only an\naccount whose version changed and one that did not. It now also covers\nan account missing from the snapshot, the same account passed twice\nwith a null among the ids, and no ids at all.\n\nThe job replays an instruction that fails the check only because\nStandingInstructionSkipPolicy skips an optimistic lock failure. Nothing\ntested that, so treating concurrency failures as infrastructure\nfailures would have made every lost race fail the step.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "94556467a7dc7de88ccb9e9bf5c612f245bffd9f",
      "tree": "cfa6aa8b531b0df34b64035534acdc2ca0af206f",
      "parents": [
        "745264a228ae54a94cab954f0cceba476fda7f55"
      ],
      "author": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Thu Nov 05 18:49:16 2026 +0530"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 10:32:03 2026 +0000"
      },
      "message": "FINERACT-3196: Fail a savings transfer when its snapshot is older than the lock\n\nA savings-to-savings transfer locks both accounts with SELECT ... FOR\nUPDATE and then loads their transactions with a plain query. Under\nREPEATABLE READ, MySQL, and MariaDB with innodb_snapshot_isolation off\nas Fineract configures it, answer the lock with the latest row even\nwhen the transaction took its snapshot earlier, while the plain query\nstill reads from that snapshot. The Execute Standing Instruction job\nreads before it locks, so when two partitions credited the same account\nat once, the second recomputed the balance from a transaction list\nwithout the first credit, and the update passed the version check\nbecause the version came from the lock. The credit was saved but left\nout of the account balance. PostgreSQL fails such a lock instead.\n\nlockInIdOrder now reads the versions of the locked accounts again with\na plain query and fails with an optimistic locking error when one\ndiffers, so the job replays the instruction in a new transaction. A\ntransaction that read nothing before the lock, such as an API transfer,\ntakes its snapshot with that query and sees the locked versions.\n"
    },
    {
      "commit": "745264a228ae54a94cab954f0cceba476fda7f55",
      "tree": "2c416f6b99d075527b04eb1c1c5d9da94fe35169",
      "parents": [
        "bc81a40d4c5624e63ef78c9e88a6e8052d0385e7"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 21:20:00 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Fri Nov 06 10:32:02 2026 +0000"
      },
      "message": "FINERACT-3047: Fix the savings job tests broken by concurrent merges\n\nTwo savings unit tests failed on develop once several savings changes\nwere merged on the same day. Each PR was green on its own base.\n\nSavingsAccountWritePlatformServiceJpaRepositoryImplTest\n.postInterestForJob_newPosting_getsGlAccountsWithAndWithoutPivotDateConfig\ncame with FINERACT-2916 and expected selectAccountId to give a new\ninterest posting the Interest Payable and Savings Control accounts.\nFINERACT-3047 took interest postings out of selectAccountId: the job\nnow books them from SavingsInterestPostingLegs, and only overdraft\ninterest still takes its accounts from there. The test now checks that\na new overdraft interest posting gets its accounts with and without the\npivot date configuration, which is what FINERACT-2916 still guarantees.\n\nSavingsSchedularInterestPosterJournalEntriesTest\n.aTransactionTypeWithoutAGlRuleFailsTheJobWithAClearError used withhold\ntax as a transaction the job has no GL rule for. FINERACT-2908 made the\njob post withhold tax and book its journal entries, so the job no longer\nfails on it. The test now uses a deposit, which the job never posts.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "bc81a40d4c5624e63ef78c9e88a6e8052d0385e7",
      "tree": "022a806beea2001cb657b676f14131a1dda9e7bf",
      "parents": [
        "405c18dcabfc235325e71616e816290234eead87",
        "7b99d04343ac8352053412250b3da6dd1c38c0b7"
      ],
      "author": {
        "name": "Aman Mittal",
        "email": "32237955+Aman-Mittal@users.noreply.github.com",
        "time": "Fri Nov 06 10:45:48 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 06 10:45:48 2026 +0530"
      },
      "message": "Merge pull request #6802 from renovate-bot/renovate/com.google.googlejavaformat-google-java-format-2.x\n\nFINERACT-2968: Update dependency com.google.googlejavaformat:google-java-format to v2"
    },
    {
      "commit": "405c18dcabfc235325e71616e816290234eead87",
      "tree": "54a51df157f8ed9e4573e96bf8dd50bd9e38af31",
      "parents": [
        "c876ee7909046017a4bcbc060397397f1c4a73db",
        "96436a94fd6024e13b085fdceb29b2c102e2d8ad"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 20:11:37 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 05 20:11:37 2026 +0000"
      },
      "message": "Merge pull request #6798 from ThevinuJ/FINERACT-2982\n\nFINERACT-2982: Add office-hierarchy checks for remaining loan, share account and working capital loan operations"
    },
    {
      "commit": "c876ee7909046017a4bcbc060397397f1c4a73db",
      "tree": "d18eef10fcbefcbf5edf35649f590531f375e4ff",
      "parents": [
        "10adb3c639675f9fe5fec45fdc039168b9821567",
        "8b4a1f9f3ebea55631951d60a5cd1cd51fe79087"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 18:55:24 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 05 18:55:24 2026 +0000"
      },
      "message": "Merge pull request #6836 from openMF/FINERACT-2968/upgrade-activemq-client\n\nFINERACT-2968: Upgrade activemq-client to 6.2.10"
    },
    {
      "commit": "10adb3c639675f9fe5fec45fdc039168b9821567",
      "tree": "24c393d90db8842c45446ad6901a94f744c24d76",
      "parents": [
        "92b2fdd77b2cee7bf8ee438e5636e15752589d6b",
        "66136ebef630b18965d5947a7aa81ae14834e85a"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 18:47:09 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 05 18:47:09 2026 +0000"
      },
      "message": "Merge pull request #6826 from Abhishek6122008/feature/FINERACT-3121-account-transfer-classes-to-core\n\nFINERACT-3121: Move account transfers into a fineract-account-transfer module"
    },
    {
      "commit": "92b2fdd77b2cee7bf8ee438e5636e15752589d6b",
      "tree": "edc11ab768b7df8f481f8d9ff1f3de91524378f8",
      "parents": [
        "687290e197a402ea7c00d7ffbd6cc3a5232658f7",
        "7f4556ae8faf21682b53034f9da6536fac7604d8"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 17:11:49 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 05 17:11:49 2026 +0000"
      },
      "message": "Merge pull request #6614 from Ashutosh-Panda2004/FINERACT-2908\n\nFINERACT-2908: Withhold tax when the Post Interest For Savings job posts interest"
    },
    {
      "commit": "687290e197a402ea7c00d7ffbd6cc3a5232658f7",
      "tree": "8fcf228561a5687ab8d95c0b06dd600f197768ea",
      "parents": [
        "243beba715d9701c5b7b75a91b846a51ef499a9d",
        "a5949fae76de835ec695b7b656de49a0ca039473"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 16:41:22 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 05 16:41:22 2026 +0000"
      },
      "message": "Merge pull request #6825 from Abhishek6122008/feature/FINERACT-3174-savings-interest-calculations\n\nFINERACT-3174: Move the savings interest calculation out of SavingsAccount"
    },
    {
      "commit": "243beba715d9701c5b7b75a91b846a51ef499a9d",
      "tree": "238f9eafb51faa42b767798165aaba5e0b646685",
      "parents": [
        "0e797f852002cce98699054a01428d83551fa4d8",
        "f141a0b230ff3de684068209d8d866a4bcdf5b61"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 16:40:45 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 05 16:40:45 2026 +0000"
      },
      "message": "Merge pull request #6817 from Abhishek6122008/feature/FINERACT-3047-shared-savings-gl-rules\n\nFINERACT-3047: Share the savings interest rules and reverse stored entries"
    },
    {
      "commit": "8b4a1f9f3ebea55631951d60a5cd1cd51fe79087",
      "tree": "1f0b21a6c090f235d68364844364669273b68c4b",
      "parents": [
        "0e797f852002cce98699054a01428d83551fa4d8"
      ],
      "author": {
        "name": "Jose Alberto Hernandez",
        "email": "alberto@art3ch.solutions",
        "time": "Thu Nov 05 11:30:14 2026 -0500"
      },
      "committer": {
        "name": "Jose Alberto Hernandez",
        "email": "alberto@art3ch.solutions",
        "time": "Thu Nov 05 11:30:14 2026 -0500"
      },
      "message": "FINERACT-2968: Upgrade activemq-client to 6.2.10\n"
    },
    {
      "commit": "66136ebef630b18965d5947a7aa81ae14834e85a",
      "tree": "7aa0d9eca3d842993cdb58e050172c7bd285e461",
      "parents": [
        "0e797f852002cce98699054a01428d83551fa4d8"
      ],
      "author": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Thu Nov 05 19:22:12 2026 +0530"
      },
      "committer": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Thu Nov 05 19:22:12 2026 +0530"
      },
      "message": "FINERACT-3121: Move account transfers into a fineract-account-transfer module\n\nAccount transfers and standing instructions lived in fineract-provider.\nThey now have a module of their own on top of fineract-core,\nfineract-loan and fineract-savings, which they build on, the way\nfineract-shares sits on savings and fineract-investor on loan.\n\nThe entities (AccountAssociations, AccountTransferDetails,\nAccountTransferTransaction, AccountTransferStandingInstruction) move\nwith their repositories, most services, the API resources, the command\nhandlers and the Execute Standing Instruction job. The enums,\nPortfolioAccountDTO and the two exceptions that loan and savings code\nuses go to fineract-core instead, so that code can keep using them once\nit moves into its own modules.\n\nNine classes stay in fineract-provider for now, because they use\nSavingsAccountAssembler, LoanAdjustmentService, ClientRepositoryWrapper\nor DropdownReadPlatformService, which are still there, or a class that\ndoes: the transfer and standing instruction write services,\nStandingInstructionReadPlatformServiceImpl, the three assemblers, the\njob\u0027s worker config and writer, and AccountConfiguration.\nAccountNumberGenerator stays too: it numbers clients, loans, savings,\nshares and working capital loans, not transfers.\n\nPackages are unchanged and every class moves as it is. The unit tests\nmove with their classes, except the job tests that share\nStandingInstructionTestData with the writer test.\n"
    },
    {
      "commit": "4b11c479d801b45fa2ee285cd85b3e0dc2e11934",
      "tree": "5de8f8c7bae5d8b75fe5e37f31cb0b4289a99a3b",
      "parents": [
        "0e797f852002cce98699054a01428d83551fa4d8"
      ],
      "author": {
        "name": "raashed",
        "email": "mohammedraashed10@gmail.com",
        "time": "Thu Nov 05 19:16:27 2026 +0530"
      },
      "committer": {
        "name": "raashed",
        "email": "mohammedraashed10@gmail.com",
        "time": "Thu Nov 05 19:16:27 2026 +0530"
      },
      "message": "FINERACT-3197: Send status and response in legacy failure webhooks\n\nSince FINERACT-1744 (5210bf7412), publishHookErrorEvent has passed\ngson.toJson(errorInfo), a String, to publishHookEvent. The ErrorInfo\nbranch there never ran, so failure webhooks went out with no status and\nno response.\n\nA response without an entity serializes to the JSON literal null, which\ngson parses to null without throwing. Passing the ErrorInfo alone would\nthen fail on that map and drop the webhook, so fall back to an empty map.\n"
    },
    {
      "commit": "96436a94fd6024e13b085fdceb29b2c102e2d8ad",
      "tree": "15d53f3edf75140e36cc1204b91684df00826936",
      "parents": [
        "6dff92a77bdcadd79e26cd306b8d505d1cb4623c"
      ],
      "author": {
        "name": "Thevinu Jayasekara",
        "email": "thevinuj2005@gmail.com",
        "time": "Sat Oct 31 08:33:57 2026 +0530"
      },
      "committer": {
        "name": "Thevinu Jayasekara",
        "email": "thevinuj2005@gmail.com",
        "time": "Thu Nov 05 19:06:07 2026 +0530"
      },
      "message": "FINERACT-2982: Add office-hierarchy check for working capital loans\n\nUsers could post monetary transactions on working capital loans\noutside their office hierarchy. Disbursal, repayment, refunds,\ndiscount fees, transaction undo and adjust, charges, charge-off,\nwrite-off and recovery payment now check the loan\u0027s office.\nApproval, rejection, delinquency actions and COB are unchanged.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "6dff92a77bdcadd79e26cd306b8d505d1cb4623c",
      "tree": "39060c2e7bd098c9e904a050e40e7458a64f98bb",
      "parents": [
        "453eceaeeadd395439d17d46344af49cb4e17ceb"
      ],
      "author": {
        "name": "Thevinu Jayasekara",
        "email": "thevinuj2005@gmail.com",
        "time": "Sat Oct 31 08:33:51 2026 +0530"
      },
      "committer": {
        "name": "Thevinu Jayasekara",
        "email": "thevinuj2005@gmail.com",
        "time": "Thu Nov 05 19:06:06 2026 +0530"
      },
      "message": "FINERACT-2982: Add office-hierarchy check for share accounts\n\nUsers could approve, activate, buy, redeem or close share accounts\noutside their office hierarchy. Share account write operations now\nload the account through a new in-user-scope method that checks\nthe client\u0027s office. Dividend posting is unchanged.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "453eceaeeadd395439d17d46344af49cb4e17ceb",
      "tree": "fd6af4fe264b6fdaf31dc24253f02e746efbc968",
      "parents": [
        "06ce07b505459f62c1944b3690cae695a4e503df"
      ],
      "author": {
        "name": "Thevinu Jayasekara",
        "email": "thevinuj2005@gmail.com",
        "time": "Sat Oct 31 08:33:44 2026 +0530"
      },
      "committer": {
        "name": "Thevinu Jayasekara",
        "email": "thevinuj2005@gmail.com",
        "time": "Thu Nov 05 19:06:06 2026 +0530"
      },
      "message": "FINERACT-2982: Add office-hierarchy check for remaining loan operations\n\nBuy-down fee, re-age, re-amortize, interest pause and early\ntermination (contract termination and loan withdrawal) could be\napplied to loans outside the user\u0027s office hierarchy. They now\ncheck the loan\u0027s office, like the operations covered by\nFINERACT-2639. Previews and scheduled jobs are unchanged.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "0e797f852002cce98699054a01428d83551fa4d8",
      "tree": "0c6e23f5750c93f150fdf28e4e2b2e37f8a511fa",
      "parents": [
        "cea3fb67e2cc5bd4daaa6de5f46f97980bc10fc6",
        "d6f04cb52da16f8c8b5a6a65226463fa291b7766"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 13:19:25 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 05 13:19:25 2026 +0000"
      },
      "message": "Merge pull request #6831 from adamsaghy/FINERACT-2916/post-interest-pivot-gl-accounts\n\nFINERACT-2916: Book GL accounts for job interest postings in pivot date mode"
    },
    {
      "commit": "cea3fb67e2cc5bd4daaa6de5f46f97980bc10fc6",
      "tree": "c684eae4e3ea9c0f280976c704f8ac5b4935ec54",
      "parents": [
        "c17d3fe88cda08ba53f14b57b71b25a4edab90ee",
        "abc4378bb38bf4895ac655f1733b8b3d65e04b3f"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 13:08:54 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 05 13:08:54 2026 +0000"
      },
      "message": "Merge pull request #6311 from TECHSERVICES-LIMITED/bugfix/FINERACT-2778\n\nFINERACT-2778: Allow teller and vault financial activity mappings to be updated"
    },
    {
      "commit": "c17d3fe88cda08ba53f14b57b71b25a4edab90ee",
      "tree": "2834f1cd26f7b5f442e2cd319e193feb477d1bbd",
      "parents": [
        "aaa695761cadeebd7e1fac4f0a40a951587ee433",
        "b9eba301aed0a174feb19dc77d788253fd78b2f5"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 13:04:30 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 05 13:04:30 2026 +0000"
      },
      "message": "Merge pull request #6790 from cmandib/FINERACT-2961\n\nFINERACT-2961: Stop treating the current password as a password change"
    },
    {
      "commit": "7f4556ae8faf21682b53034f9da6536fac7604d8",
      "tree": "a5b7ef5be68bf06947a5c3100385ed11480fd64a",
      "parents": [
        "e7f539ceda7fdc4f6d65f31e4091dc5ed87a576f"
      ],
      "author": {
        "name": "Ashutosh Panda",
        "email": "133190480+Ashutosh-Panda2004@users.noreply.github.com",
        "time": "Thu Nov 05 12:47:07 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 12:47:15 2026 +0000"
      },
      "message": "FINERACT-2908: Withhold tax when the Post Interest For Savings job posts interest\n"
    },
    {
      "commit": "aaa695761cadeebd7e1fac4f0a40a951587ee433",
      "tree": "f38890e4402de7b0043cd2d92d0a6424adfa95f2",
      "parents": [
        "459095a1992bd468dadba679a713176e984cf70b",
        "6ae38d6e716b4c0b4e2a4f77add0f56291cc41c0"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 12:44:06 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 05 12:44:06 2026 +0000"
      },
      "message": "Merge pull request #6815 from rshdhere/FINERACT-3036-command-error-webhooks\n\nFINERACT-3036: Publish webhook events when a typed command fails"
    },
    {
      "commit": "d6f04cb52da16f8c8b5a6a65226463fa291b7766",
      "tree": "f4ec1b5e35732e98c99252394cba52b1e49796e3",
      "parents": [
        "459095a1992bd468dadba679a713176e984cf70b"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 11:57:00 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Thu Nov 05 11:57:00 2026 +0000"
      },
      "message": "FINERACT-2916: Book GL accounts for job interest postings in pivot date mode\n\nWith \"allow-backdated-transaction-before-interest-posting\" disabled, the\nPost Interest For Savings job left the debit and credit GL accounts of\nits new postings unset, so the batch journal entry insert failed on\naccount_id NOT NULL for every savings product with accounting. The\nfailure rolled back the whole sub-batch. Until the job reported worker\nfailures it went unnoticed; now it fails the job, which broke the\nClientSavingsIntegrationTest pivot date tests whenever an earlier test\nleft an active savings account with accounting behind.\n\nChoose the GL accounts for new postings in both modes.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "459095a1992bd468dadba679a713176e984cf70b",
      "tree": "b52f921524cd6ca1998a6787d4a8356f581f1b1c",
      "parents": [
        "0245f1df52dfea9bea105e095603aa84536ccd98",
        "d9a24487a103235d67d4e9a3d6986c3eb07d46b8"
      ],
      "author": {
        "name": "Aman Mittal",
        "email": "32237955+Aman-Mittal@users.noreply.github.com",
        "time": "Thu Nov 05 15:57:34 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 05 15:57:34 2026 +0530"
      },
      "message": "Merge pull request #6820 from apache/dependabot/github_actions/gradle/actions/setup-gradle-6.4.1\n\nFINERACT-2968: Bump gradle/actions/setup-gradle from 6.4.0 to 6.4.1"
    },
    {
      "commit": "0245f1df52dfea9bea105e095603aa84536ccd98",
      "tree": "dd5dca8254d519d175d2494cbc78257169ce587c",
      "parents": [
        "06ce07b505459f62c1944b3690cae695a4e503df",
        "9c7d65acd4d1fb4f8e3de06d07c2167bdd194f10"
      ],
      "author": {
        "name": "Aman Mittal",
        "email": "32237955+Aman-Mittal@users.noreply.github.com",
        "time": "Thu Nov 05 15:56:49 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 05 15:56:49 2026 +0530"
      },
      "message": "Merge pull request #6819 from apache/dependabot/github_actions/gradle/actions/wrapper-validation-6.4.1\n\nFINERACT-2968: Bump gradle/actions/wrapper-validation from 6.4.0 to 6.4.1"
    },
    {
      "commit": "abc4378bb38bf4895ac655f1733b8b3d65e04b3f",
      "tree": "c83426f8d1c758b8ca9a9475767de82dcb6810ba",
      "parents": [
        "71281f1772b76fba50abac485709ed19f3002073"
      ],
      "author": {
        "name": "oluexpert99",
        "email": "farooq@techservicehub.io",
        "time": "Tue Nov 03 11:36:41 2026 +0100"
      },
      "committer": {
        "name": "oluexpert99",
        "email": "farooq@techservicehub.io",
        "time": "Thu Nov 05 08:04:04 2026 +0100"
      },
      "message": "FINERACT-2778: Allow teller and vault financial activity mappings to be updated\n\nFinancialActivityAccountDataValidator validates the same parameter against two\nhand-written lists. validateForCreate accepts all seven FinancialActivity\nconstants; validateForUpdate accepted five, omitting CASH_AT_MAINVAULT (101)\nand CASH_AT_TELLER (102). The platform will therefore create a teller or vault\nmapping and then refuse every attempt to change it:\n\n    PUT /financialactivityaccounts/{id} {\"financialActivityId\":102,...}\n    400 validation.msg.financialactivityaccount.financialActivityId\n        .is.not.one.of.expected.enumerations\n        must be one of [ 100, 200, 300, 103, 201 ]\n\nBoth halves write the same column, and the teller module resolves the mapping\nthrough findByFinancialActivityTypeWithNotFoundDetection whichever route\ncreated it, so the two lists have no reason to differ.\n\nThese are the GL accounts the cashier module posts cash against. A deployment\nthat maps them wrongly, which is easy since they are set once at configuration\ntime, has every teller and vault movement landing on the wrong account and no\nsupported way to correct it. The remaining options are to delete the mapping\nand create a replacement, discarding the row and its identity, or to update the\ndatabase directly, bypassing validation and the audit trail.\n\nFinancialActivityAccountsTest exercised the update path only with\nLIABILITY_TRANSFER, and its negative case used activity id 232, which is not in\nthe enum at all. A value that is in the enum, is accepted by create and is\nrefused by update fell between the two cases. The test now creates a\nCASH_AT_TELLER mapping and updates it.\n\nOnly one mapping per financial activity is allowed, and\nAllocateCashToCashierValidationTest created the CASH_AT_MAINVAULT and\nCASH_AT_TELLER mappings in @BeforeAll without deleting them. Run before it on\nthe same server, the new test\u0027s create was refused as a duplicate. The cashier\ntest now deletes the mappings it created in @AfterAll, as AccountTransferTest\ndoes, and leaves alone any that existed before it ran.\n\nSigned-off-by: oluexpert99 \u003cfarooq@techservicehub.io\u003e\n"
    },
    {
      "commit": "a5949fae76de835ec695b7b656de49a0ca039473",
      "tree": "4ada950b7e8d9135150a94163b13915f91b6780e",
      "parents": [
        "06ce07b505459f62c1944b3690cae695a4e503df"
      ],
      "author": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Thu Nov 05 07:40:41 2026 +0530"
      },
      "committer": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Thu Nov 05 07:40:41 2026 +0530"
      },
      "message": "FINERACT-3174: Move the savings interest calculation out of SavingsAccount\n\nSavingsAccount.calculateInterestUsing built the interest posting\nperiods and calculated the interest of each one inside the entity.\nMove that calculation into SavingsAccountInterestCalculator, which\nreads the account and returns the posting periods without changing it.\nThe entity still recalculates its daily balances before the\ncalculation and updates its summary after it, since both change its\nown state, so callers and the deposit account overrides work as before.\n\nSavingsAccountInterestCalculationTest pins the posting periods and\nsummary totals for daily and average daily balance, overdraft interest,\na posting date inside a period, a later interest calculation start\ndate, the pivot date configuration and an account without interest.\nIt was written against the code before the move and passes unchanged\nafter it.\n"
    },
    {
      "commit": "f141a0b230ff3de684068209d8d866a4bcdf5b61",
      "tree": "47a6e4bbe7e482fdcb279c0c87a4e63ac0190547",
      "parents": [
        "fb271cee67f373da619a7c8ccf0d376c8474cd2e"
      ],
      "author": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Thu Nov 05 03:51:16 2026 +0530"
      },
      "committer": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Thu Nov 05 03:51:16 2026 +0530"
      },
      "message": "FINERACT-3047: Book only overdraft interest from the job\u0027s own rule\n\nThe job\u0027s journal entries now cover overdraft interest by name, and any\nother new transaction type, which it has no GL rule for, fails with a\nclear error instead of inserting entries without accounts.\n\nThe savings processors pass false for isReversal explicitly, since every\nreversal now returns early and mirrors the stored entries, and their\ncomments no longer mention reversals. New integration tests undo a\ndeposit, a withdrawal and a withdrawal into overdraft on cash-based and\naccrual products, and check that every GL account nets to zero.\n"
    },
    {
      "commit": "06ce07b505459f62c1944b3690cae695a4e503df",
      "tree": "38abedc6d8865f7915e283b80268a407a76a8aee",
      "parents": [
        "5dc94892bfcf50e523b49e08d8703cf4ab01f0e2",
        "bcae252b70a9a7d3bb6652f7afcbc66a0d0a3679"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 18:25:48 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 18:25:48 2026 +0000"
      },
      "message": "Merge pull request #6805 from AshharAhmadKhan/FINERACT-2959-db-unavailable-503\n\nFINERACT-2959: Answer HTTP 503 with Retry-After when the database is unavailable"
    },
    {
      "commit": "6ae38d6e716b4c0b4e2a4f77add0f56291cc41c0",
      "tree": "d9e278572b7ce43427c90d6f4a78a57d26d3d394",
      "parents": [
        "346535df9265ad036ea528278da279623ba8e3ee"
      ],
      "author": {
        "name": "raashed",
        "email": "mohammedraashed10@gmail.com",
        "time": "Wed Nov 04 23:38:27 2026 +0530"
      },
      "committer": {
        "name": "raashed",
        "email": "mohammedraashed10@gmail.com",
        "time": "Wed Nov 04 23:38:27 2026 +0530"
      },
      "message": "FINERACT-3036: Correct the webhook error hook\u0027s comments\n\nThe Javadoc said the legacy SynchronousCommandProcessingService publishes\nstatus Exception for every command, but legacy failure events have gone\nout without a status since FINERACT-1927.\n\nThe inline comment said the command\u0027s work has always been rolled back,\nbut the dispatcher also reports failures from the after hooks, which run\nonce the handler has committed. Say so, and that the event then reports\nthe error the API returns for a change that was saved.\n"
    },
    {
      "commit": "5dc94892bfcf50e523b49e08d8703cf4ab01f0e2",
      "tree": "50100065c9a04307ea3ed825dc89a95e3045f310",
      "parents": [
        "057b8553e091303ae24f47224eb37f6b57497909",
        "2f3721ff6b3e978f19e9aa4966b548228bc3c2af"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 18:03:00 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 18:03:00 2026 +0000"
      },
      "message": "Merge pull request #6078 from TECHSERVICES-LIMITED/bugfix/FINERACT-2672\n\nFINERACT-2672: Run standing instructions as a partitioned batch job"
    },
    {
      "commit": "057b8553e091303ae24f47224eb37f6b57497909",
      "tree": "8694873860d04a9d5eb9a8f4c8bd284b809b4651",
      "parents": [
        "f5f894053b0c5974768ab6011e87688f4424d4ed",
        "6a1c2ebf3aece596eb72dd15dfd0c7d6ed72ecda"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 18:02:37 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 18:02:37 2026 +0000"
      },
      "message": "Merge pull request #6810 from sanvinaik/FINERACT-3029-fix-read-permissions\n\nFINERACT-3029: Fix read permission resource names"
    },
    {
      "commit": "f5f894053b0c5974768ab6011e87688f4424d4ed",
      "tree": "a3533a76500422bac9e16e7d85d19a5b41058da0",
      "parents": [
        "e7f539ceda7fdc4f6d65f31e4091dc5ed87a576f",
        "8c96165dd6f47281ebc7f2eee6afc9e1bddda854"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 17:53:23 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 17:53:23 2026 +0000"
      },
      "message": "Merge pull request #6816 from openMF/FINERACT-2968/jackson-hv-springdoc-bc-cve\n\nFINERACT-2968: Upgrade Jackson, hibernate-validator, springdoc and Bouncy Castle"
    },
    {
      "commit": "bcae252b70a9a7d3bb6652f7afcbc66a0d0a3679",
      "tree": "c43e258d5ec6c5b2e076a669e9f8a319d2f70f9e",
      "parents": [
        "94f5b1bfbb3780ae474c2812fd2a799b22a753c5"
      ],
      "author": {
        "name": "Ashhar Ahmad Khan",
        "email": "145142826+AshharAhmadKhan@users.noreply.github.com",
        "time": "Mon Nov 02 18:18:56 2026 +0530"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 16:58:40 2026 +0000"
      },
      "message": "FINERACT-2959: Answer HTTP 503 with Retry-After when the database is unavailable\n\nAlso fix AccountTransferOfficeHierarchyAccessIntegrationTest to undo the\naccount transfer transaction instead of the account transfer detail id\nreturned by create; the two only match while their id sequences agree.\n"
    },
    {
      "commit": "e7f539ceda7fdc4f6d65f31e4091dc5ed87a576f",
      "tree": "821eb45cd33a9224a36c45f92621fbdd9ed4b7ab",
      "parents": [
        "94f5b1bfbb3780ae474c2812fd2a799b22a753c5",
        "4db58d0be37635910ed8236824b5b3099cb13e6d"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 16:52:03 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 16:52:03 2026 +0000"
      },
      "message": "Merge pull request #6781 from openMF/FINERACT-2421/fix-backdated-periodic-accrual\n\nFINERACT-2968: Fix backdated periodic accrual after overdue recalculation"
    },
    {
      "commit": "94f5b1bfbb3780ae474c2812fd2a799b22a753c5",
      "tree": "152373624527849d5ca783a409a34829cce02c8a",
      "parents": [
        "5090e6603dd47d02a86bf64bb7434a5e754599b9",
        "5f06718eedbe57ac580fa757d4ea0377877d9550"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 16:47:56 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 16:47:56 2026 +0000"
      },
      "message": "Merge pull request #6792 from openMF/FINERACT-2938/pl-allow-down-payment-fee-amount-to-be-overridden-in-the-loan-disbursement-request\n\nFINERACT-2938: PL - Allow the Down payment fee amount to be overridden in the loan disbursement request"
    },
    {
      "commit": "5090e6603dd47d02a86bf64bb7434a5e754599b9",
      "tree": "d875bac99522c07736fce139a65ef3d277f81acf",
      "parents": [
        "cba851fe1df227cee1c5256a030a5a680c866bbb",
        "4d5300e8175e91e61cbff6c0cf0cbfee4acf42fe"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 16:22:10 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 16:22:10 2026 +0000"
      },
      "message": "Merge pull request #6420 from elnafateh/FINERACT-2639/enforce-office-hierarchy-access-checks\n\nFINERACT-2639: Enforce office hierarchy for loan and savings write operations"
    },
    {
      "commit": "8c96165dd6f47281ebc7f2eee6afc9e1bddda854",
      "tree": "234dd9f504d89366c3a10c60b9fb2a8af9c3867d",
      "parents": [
        "cba851fe1df227cee1c5256a030a5a680c866bbb"
      ],
      "author": {
        "name": "Jose Alberto Hernandez",
        "email": "alberto@art3ch.solutions",
        "time": "Tue Nov 03 16:00:58 2026 -0500"
      },
      "committer": {
        "name": "Jose Alberto Hernandez",
        "email": "alberto@art3ch.solutions",
        "time": "Wed Nov 04 11:05:02 2026 -0500"
      },
      "message": "FINERACT-2968: Upgrade Jackson, hibernate-validator, springdoc and Bouncy Castle\n"
    },
    {
      "commit": "6a1c2ebf3aece596eb72dd15dfd0c7d6ed72ecda",
      "tree": "c866b721df393058b8834d2217f5f361581baa46",
      "parents": [
        "8e80aa6e85445c2a1e248152b4aa1c4d3072e541"
      ],
      "author": {
        "name": "sanvinaik",
        "email": "sanvi.naik0103@gmail.com",
        "time": "Tue Nov 03 11:31:52 2026 +0530"
      },
      "committer": {
        "name": "sanvinaik",
        "email": "sanvi.naik0103@gmail.com",
        "time": "Wed Nov 04 21:31:08 2026 +0530"
      },
      "message": "FINERACT-3029: Fix read permission resource names\n"
    },
    {
      "commit": "2f3721ff6b3e978f19e9aa4966b548228bc3c2af",
      "tree": "b49fef35750ebb46639f369285178b072328a9c1",
      "parents": [
        "e048ee8b2b6a9f4a3b2dec2b79b4dd40ef480d99"
      ],
      "author": {
        "name": "oluexpert99",
        "email": "farooq@techservicehub.io",
        "time": "Wed Nov 04 11:24:45 2026 +0100"
      },
      "committer": {
        "name": "oluexpert99",
        "email": "farooq@techservicehub.io",
        "time": "Wed Nov 04 16:53:19 2026 +0100"
      },
      "message": "FINERACT-2672: Run standing instructions as a partitioned batch job\n\nThe Execute Standing Instruction job ran every due instruction inside a single\ntransaction. The step is wired with the JPA transaction manager and\nAccountTransfersWritePlatformService.transferFunds is @Transactional(REQUIRED),\nso every transfer joined that one transaction. When an instruction failed --\nInsufficientAccountBalanceException from the withdrawal leg being the ordinary\ncase -- Spring marked the shared transaction rollback-only and at step commit\nthe whole run was reverted: every transfer that had succeeded was undone, and\nno history row survived to say so. The tasklet then threw JobExecutionException\nand failed the job. The defect concealed itself, because the record of the\nfailure was rolled back along with the run that produced it.\n\nThe job now follows the model the platform already uses for LOAN_COB. A\npartitioner cuts the due set into ranges of source accounts, workers take a\npartition each, and each worker runs a chunk-oriented step:\n\n  - Partitions are cut over distinct source accounts rather than instructions,\n    so every instruction debiting an account stays in one partition and runs\n    sequentially there, and two partitions never debit the same account. Two\n    can still credit the same destination at once; savings and loan accounts\n    are versioned, so the later write fails optimistic locking inside the\n    writer, and that instruction goes through the replay below.\n\n  - The reader pages through its partition by keyset over (priority, id), so\n    only one page is in memory whatever the size of the due set. Keyset rather\n    than offset because executing an instruction stamps its last_run_date and\n    removes it from the due set; an offset would step over as many instructions\n    as the previous page had committed.\n\n  - A chunk is attempted in one transaction and, if any instruction in it\n    fails, replayed one instruction per transaction. That fallback is Spring\n    Batch\u0027s own. It is what now guarantees what this ticket is about: an\n    instruction that fails cannot leave a sibling reverted, because the sibling\n    is re-executed and committed on the replay.\n\n  - Nothing is retried inside the chunk. A failed instruction has already\n    marked the chunk transaction rollback-only, so a retry that succeeded would\n    still see the chunk rolled back. A failure goes straight to the replay, and\n    an instruction that fails there is skipped and recorded against its\n    mandate. An instruction that loses a lock conflict therefore gets exactly\n    one more attempt, the replay; if that conflicts too, it is recorded as\n    failed and, being still due, runs on the next run.\n\n  - The skip policy accepts any exception from processing or executing an\n    instruction, not only business failures, as the tasklet this replaces did.\n    A failure it rejected would fail the step: the siblings in the chunk would\n    be rolled back with no history row, the rest of the partition would not\n    run, and since the instruction is still due the next day, one bad mandate\n    would stop its partition at the same point every day. Two kinds of failure\n    do fail the step. A page that cannot be read, because the reader cannot\n    move past it and skipping it would run the same query on every chunk; the\n    reader wraps any failure while fetching or advancing to a page in an\n    exception the policy rejects. And the database or its connection being\n    unavailable, which is not the instruction\u0027s fault and could not be\n    recorded either. Skipping is unlimited on purpose: a count-based limit\n    would fail the job on a day when many accounts happen to be short, which\n    is the day it most needs to run.\n\n  - Execution claims the instruction for the business date inside the chunk\n    transaction, by conditionally stamping last_run_date. The claim commits or\n    rolls back with the transfer, so it does not protect the replay; the replay\n    is safe because the rolled-back chunk left nothing behind. What the claim\n    guards against is the job being triggered twice, or two runs overlapping,\n    on the same business date.\n\n  - The worker step runs on the business date. Every remote-partitioning\n    worker message passes through InputChannelInterceptor, which sets the COB\n    action context for the loan COB worker; under it the business date is the\n    COB date, one day behind. A listener puts the worker back in the default\n    context, so the worker checks dues and dates transfers on the same date the\n    partitioner counted the due set on.\n\nChunk size and partition size come from\nfineract.partitioned-job.partitioned-job-properties, so a deployment whose\ninstructions fail often can set the chunk size to 1 and get per-instruction\nbehaviour without a code change. There is deliberately no thread-pool setting,\nfor the reason FINERACT-2621 records against COB: Batch 6\u0027s ChunkOrientedStep\nkeeps the chunk transaction on the step thread and, when a task executor is\npresent, submits the items of a chunk to it. An instruction would then be\ntransferred outside the chunk transaction, which is exactly what the\nchunk-then-single-item replay above depends on. Concurrency comes from\npartitioning instead.\n\nAlso fixed here: the retrieval query sorted ORDER BY atsi.priority DESC while\nthe enum is URGENT(1)..LOW(4), so the job worked through the lowest priorities\nfirst (URGENT now runs first, a visible ordering change). History is now\nwritten through a JPA entity rather than a JDBC INSERT, and a failed run\nrecords an amount of zero rather than the amount attempted, since nothing\nmoved; its execution time is the tenant\u0027s local time rather than the\ndatabase\u0027s now().\n\nTwo features that develop added to the tasklet this replaces are carried into\nthe batch job. Partial transfer (FINERACT-2400) is now done in the writer: an\ninstruction that allows it moves what the source savings account can cover,\nleaving room for the withdrawal fee, and its history row is recorded as\npartial. The month-end rule (FINERACT-2914), where a recurrence day the month\ndoes not have falls on its last day, now decides due-ness in the processor.\n\nThe unit tests cover the partitioner, the keyset reader, the due-ness\nprocessor, the writer\u0027s contract with the chunk, the skip policy, the skip\nlistener\u0027s durable failure record (written once the failing instruction\u0027s\ntransaction has completed, since until then its claim still locks the\ninstruction\u0027s row), the business-date listener, and the claim. The integration\ntests run the real scheduler job: one under-funded instruction among funded\nones, where the successful transfer persists and the failing instruction leaves\na durable failed row; and a run across several partitions, pages and chunks,\nwhere each instruction leaves exactly one history row. The test compose files\nset partition size 1 and chunk size 2, so the integration tests cover more than\none partition and the chunk-then-replay path.\n\nDesign discussed on dev@fineract.apache.org, thread \"[DISCUSS] Scaling\nstanding-instruction batch execution (FINERACT-2672 / PR #6078)\".\n\nSigned-off-by: oluexpert99 \u003cfarooq@techservicehub.io\u003e\n"
    },
    {
      "commit": "cba851fe1df227cee1c5256a030a5a680c866bbb",
      "tree": "1bbc41e37b0300bd0c8cbf98a71edb3a48fb817d",
      "parents": [
        "b99b788b0057ebbfb2c15f0ce207a652f1eb7641",
        "94579feda68ac054ba0aadd07894c2780e197c89"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 15:50:56 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 15:50:56 2026 +0000"
      },
      "message": "Merge pull request #6822 from openMF/FINERACT-2968/account-transfer-undo-it-id\n\nFINERACT-2968: Fix undo transfer id in office access IT"
    },
    {
      "commit": "94579feda68ac054ba0aadd07894c2780e197c89",
      "tree": "ead72c0b8e7255c7d6885656a12269710fbc9c12",
      "parents": [
        "9810180bd2fa6dff177b3cd0cb210578765236b8"
      ],
      "author": {
        "name": "Jose Alberto Hernandez",
        "email": "alberto@art3ch.solutions",
        "time": "Wed Nov 04 09:30:36 2026 -0500"
      },
      "committer": {
        "name": "Jose Alberto Hernandez",
        "email": "alberto@art3ch.solutions",
        "time": "Wed Nov 04 09:35:01 2026 -0500"
      },
      "message": "FINERACT-2968: Fix undo transfer id in office access IT\n"
    },
    {
      "commit": "4db58d0be37635910ed8236824b5b3099cb13e6d",
      "tree": "839407c431af112ac6e468c46efb3c130c994398",
      "parents": [
        "6a8b78a6f12723936ed4c9a8ba5dcf318451795a"
      ],
      "author": {
        "name": "Rustam Zeinalov",
        "email": "truezeynalov@gmail.com",
        "time": "Wed Nov 04 14:28:06 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 14:34:48 2026 +0000"
      },
      "message": "FINERACT-2968: Add tests for backdated periodic accrual after overdue recalculation\n\nUnit test for interest till a historical date of a backdated loan with\noverdue corrections up to maturity. E2E scenarios cover accrual amounts,\nrepayment and maturity boundaries, credited periods, repeated runs,\nrepayments, pay-off, inline COB and the accrual jobs with two active loans.\nThe new \"Admin successfully runs the ... job\" step fails the scenario when\nthe job run does not succeed.\n\nCo-authored-by: Oleksii Novikov \u003calekseeey@gmail.com\u003e\nCo-authored-by: Adam Saghy \u003cadamsaghy@gmail.com\u003e\n"
    },
    {
      "commit": "6a8b78a6f12723936ed4c9a8ba5dcf318451795a",
      "tree": "5504bc8958c565f0e3b6851edae33c642db4932d",
      "parents": [
        "b99b788b0057ebbfb2c15f0ce207a652f1eb7641"
      ],
      "author": {
        "name": "Oleksii Novikov",
        "email": "alekseeey@gmail.com",
        "time": "Wed Nov 04 14:28:05 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 14:34:26 2026 +0000"
      },
      "message": "FINERACT-2968: Fix backdated periodic accrual after overdue recalculation\n\nTruncating a calculation copy at a date removed the interest periods of the\nlater repayment periods but kept the overdue corrections recorded on them.\nReversing those corrections then looked for the last interest period of an\nempty repayment period and failed with NoSuchElementException, which aborted\nthe periodic accrual job for every loan in the batch.\n\nTruncation now goes through the model: corrections on removed interest\nperiods are marked and skipped on reversal, and corrections on a truncated\ninterest period follow its new due date and owning repayment period, so they\nare reversed in place instead of recreating omitted future periods. The\nperiod identity check uses the JDK only, since the embeddable schedule\ngenerator jar does not ship Guava.\n\nThe TEST-only model endpoint now serializes through the existing Gson parser,\nand /v1/internal is excluded from the API backward compatibility check.\n\nCo-authored-by: Adam Saghy \u003cadamsaghy@gmail.com\u003e\n"
    },
    {
      "commit": "5f06718eedbe57ac580fa757d4ea0377877d9550",
      "tree": "06c31a87eaca2234855bd207fc110dcf02ac0c0c",
      "parents": [
        "9810180bd2fa6dff177b3cd0cb210578765236b8"
      ],
      "author": {
        "name": "mariiaKraievska",
        "email": "riaskay3@gmail.com",
        "time": "Wed Nov 04 15:54:00 2026 +0200"
      },
      "committer": {
        "name": "mariiaKraievska",
        "email": "riaskay3@gmail.com",
        "time": "Wed Nov 04 16:26:10 2026 +0200"
      },
      "message": "FINERACT-2938: PL - Allow the Down payment fee amount to be overridden in the loan disbursement request\n"
    },
    {
      "commit": "b99b788b0057ebbfb2c15f0ce207a652f1eb7641",
      "tree": "b84bba42dff486cbae523575a6134c1e595a4a22",
      "parents": [
        "9810180bd2fa6dff177b3cd0cb210578765236b8",
        "fc038c336ea84ba21f057307ead00fb6899bdbf6"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 14:16:25 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 14:16:25 2026 +0000"
      },
      "message": "Merge pull request #6760 from openMF/FINERACT-2968/loan-term-variations-wrong-startdate\n\nFINERACT-2968: Loan Term variations start date validation"
    },
    {
      "commit": "4d5300e8175e91e61cbff6c0cf0cbfee4acf42fe",
      "tree": "586ebd0bbcf5a97ff60829ee83160aaf517e01b5",
      "parents": [
        "9810180bd2fa6dff177b3cd0cb210578765236b8"
      ],
      "author": {
        "name": "elnafateh",
        "email": "elnafatehh@gmail.com",
        "time": "Wed Nov 04 14:00:19 2026 +0000"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 14:00:50 2026 +0000"
      },
      "message": "FINERACT-2639: Enforce office hierarchy for loan and savings write operations\n"
    },
    {
      "commit": "9810180bd2fa6dff177b3cd0cb210578765236b8",
      "tree": "fbb7ae641312518bf283a3e85eceb039b86d2784",
      "parents": [
        "d1fe37c1311f2fa1a43b5e53fea18582741a568d",
        "e8912ccb17838206827ff0c4f10cad6677d429c1"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 13:49:15 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 13:49:15 2026 +0000"
      },
      "message": "Merge pull request #6620 from Abhishek6122008/bugfix/FINERACT-2916-interest-job-failure-reporting\n\nFINERACT-2916: Fail interest jobs when a worker thread fails"
    },
    {
      "commit": "d1fe37c1311f2fa1a43b5e53fea18582741a568d",
      "tree": "fe27043b27e156f8e41cf8eead5566bbf47a8790",
      "parents": [
        "1f0ea0c2926b822206de27f5d7ffa42e5ee8d18e",
        "34cba08c1340362351157a9ada1a30ed04cfc198"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 13:42:58 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 13:42:58 2026 +0000"
      },
      "message": "Merge pull request #6723 from openMF/FINERACT-2938/pl-introduce-down-payment-fee-charge-type\n\nFINERACT-2938: PL - Introduce \"Down payment fee\" charge type"
    },
    {
      "commit": "1f0ea0c2926b822206de27f5d7ffa42e5ee8d18e",
      "tree": "4ab772f32ebdbfe43dcb9c3a4e29eebba5da5786",
      "parents": [
        "315cae8e101c6ce5d5357a09c50d112bb1eaa5e4",
        "985d9482e42f7802a50987fca6bfa315ec309496"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 13:35:00 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 13:35:00 2026 +0000"
      },
      "message": "Merge pull request #6818 from ImalkaPerera/FINERACT-3048-share-requested-shares-greater-than-zero\n\nFINERACT-3048: Validate requestedShares is greater than zero for additional shares"
    },
    {
      "commit": "34cba08c1340362351157a9ada1a30ed04cfc198",
      "tree": "d49f95674f446793d358204bbe09b73bc87b8b06",
      "parents": [
        "455567d15db1c8af067a5ab2663791da229d735e"
      ],
      "author": {
        "name": "Rustam Zeinalov",
        "email": "truezeynalov@gmail.com",
        "time": "Mon Oct 26 14:11:06 2026 +0100"
      },
      "committer": {
        "name": "mariiaKraievska",
        "email": "riaskay3@gmail.com",
        "time": "Wed Nov 04 14:06:45 2026 +0200"
      },
      "message": "FINERACT-2938: updated e2e scenario for validation of PL - Introduce \"Down payment fee\" charge type\n"
    },
    {
      "commit": "455567d15db1c8af067a5ab2663791da229d735e",
      "tree": "fa3f80a90526d45f499c2660e3ef0e0247f73ecd",
      "parents": [
        "315cae8e101c6ce5d5357a09c50d112bb1eaa5e4"
      ],
      "author": {
        "name": "mariiaKraievska",
        "email": "riaskay3@gmail.com",
        "time": "Thu Oct 22 19:18:24 2026 +0300"
      },
      "committer": {
        "name": "mariiaKraievska",
        "email": "riaskay3@gmail.com",
        "time": "Wed Nov 04 14:06:45 2026 +0200"
      },
      "message": "FINERACT-2938: PL - Introduce \"Down payment fee\" charge type\n"
    },
    {
      "commit": "315cae8e101c6ce5d5357a09c50d112bb1eaa5e4",
      "tree": "65e8aa8a7adcabeb0a3293bbea13275875b3fc45",
      "parents": [
        "673ab18fc5851ac56950c5cf7133f601875282f4",
        "96ddb48cbaa6aa5a4b8597472140ac5fddd597fc"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 11:42:28 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 11:42:28 2026 +0000"
      },
      "message": "Merge pull request #6739 from pjj-22/FINERACT-2105\n\nFINERACT-2105: Add payment detail to share purchase and redeem"
    },
    {
      "commit": "673ab18fc5851ac56950c5cf7133f601875282f4",
      "tree": "99f35b5290f15df1c85329845bb46145a4088774",
      "parents": [
        "271d7acfe1ba3b15d3e99aa017863622904cdae5",
        "63961969097300f3b2b1c49771f6aa0f90d4eeae"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 11:42:14 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 11:42:14 2026 +0000"
      },
      "message": "Merge pull request #6811 from Abhishek6122008/feature/FINERACT-3032-link-overdraft-split-periods\n\nFINERACT-3032: Link the two periods of the overdraft interest split"
    },
    {
      "commit": "271d7acfe1ba3b15d3e99aa017863622904cdae5",
      "tree": "fe1d1c4969b4344f9f6d244529b6eda9178f50da",
      "parents": [
        "fee1da55c2dc93cd2531624ab7fc8e81d8f56cb6",
        "8a441875fd1937c69630f96f5fa3a049a21eb84b"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Wed Nov 04 11:39:42 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 11:39:42 2026 +0000"
      },
      "message": "Merge pull request #6808 from ImalkaPerera/FINERACT-3031-free-withdrawal-weeks-years-restart\n\nFINERACT-3031: Fix free withdrawal restart for WEEKS and YEARS"
    },
    {
      "commit": "fee1da55c2dc93cd2531624ab7fc8e81d8f56cb6",
      "tree": "71d337c92925fbb7b1d890d68bc02c9fb42c1901",
      "parents": [
        "e048ee8b2b6a9f4a3b2dec2b79b4dd40ef480d99",
        "9c4d4089fbe4f287bece842745452e07ccab5cc2"
      ],
      "author": {
        "name": "Aman Mittal",
        "email": "32237955+Aman-Mittal@users.noreply.github.com",
        "time": "Wed Nov 04 11:25:15 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 11:25:15 2026 +0530"
      },
      "message": "Merge pull request #6803 from renovate-bot/renovate/com.mysql-mysql-connector-j-26.x\n\nFINERACT-2968: Update dependency com.mysql:mysql-connector-j to v26"
    },
    {
      "commit": "d9a24487a103235d67d4e9a3d6986c3eb07d46b8",
      "tree": "7fcdcc1adda5ce1460740cc35a6ce664a696ab71",
      "parents": [
        "e048ee8b2b6a9f4a3b2dec2b79b4dd40ef480d99"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Nov 04 05:03:31 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 05:03:31 2026 +0000"
      },
      "message": "FINERACT-2968: Bump gradle/actions/setup-gradle from 6.4.0 to 6.4.1\n\nBumps [gradle/actions/setup-gradle](https://github.com/gradle/actions) from 6.4.0 to 6.4.1.\n- [Release notes](https://github.com/gradle/actions/releases)\n- [Commits](https://github.com/gradle/actions/compare/3f5f9adaf7d9fecd50b5935e54106014257a94e6...8da46b539cd8fe6ab27ca75128919a18d757604c)\n\n---\nupdated-dependencies:\n- dependency-name: gradle/actions/setup-gradle\n  dependency-version: 6.4.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "9c7d65acd4d1fb4f8e3de06d07c2167bdd194f10",
      "tree": "2bf42ef4c87d2294cebbee00e2db7045fe3d36f7",
      "parents": [
        "e048ee8b2b6a9f4a3b2dec2b79b4dd40ef480d99"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Nov 04 05:03:10 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 05:03:10 2026 +0000"
      },
      "message": "FINERACT-2968: Bump gradle/actions/wrapper-validation\n\nBumps [gradle/actions/wrapper-validation](https://github.com/gradle/actions) from 6.4.0 to 6.4.1.\n- [Release notes](https://github.com/gradle/actions/releases)\n- [Commits](https://github.com/gradle/actions/compare/3f5f9adaf7d9fecd50b5935e54106014257a94e6...8da46b539cd8fe6ab27ca75128919a18d757604c)\n\n---\nupdated-dependencies:\n- dependency-name: gradle/actions/wrapper-validation\n  dependency-version: 6.4.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "985d9482e42f7802a50987fca6bfa315ec309496",
      "tree": "4b3d7618f6dee76d897386f96d1c776d4b78961f",
      "parents": [
        "e048ee8b2b6a9f4a3b2dec2b79b4dd40ef480d99"
      ],
      "author": {
        "name": "ImalkaPerera",
        "email": "hpsimalkaperera@gmail.com",
        "time": "Wed Nov 04 09:22:22 2026 +0530"
      },
      "committer": {
        "name": "ImalkaPerera",
        "email": "hpsimalkaperera@gmail.com",
        "time": "Wed Nov 04 09:22:22 2026 +0530"
      },
      "message": "FINERACT-3048: Validate requestedShares is greater than zero for additional shares\n"
    },
    {
      "commit": "fb271cee67f373da619a7c8ccf0d376c8474cd2e",
      "tree": "67d032bb0594274574984c69fd04e4b5d7b2ead9",
      "parents": [
        "e048ee8b2b6a9f4a3b2dec2b79b4dd40ef480d99"
      ],
      "author": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Wed Nov 04 07:43:34 2026 +0530"
      },
      "committer": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Wed Nov 04 07:43:34 2026 +0530"
      },
      "message": "FINERACT-3047: Share the savings interest rules and reverse stored entries\n\nSavings interest postings were booked from two copies of the GL rules:\nthe accounting processors for manual postings, and the Post Interest\nFor Savings job, which writes its own journal entries. The copies\ndrifted apart, which is how FINERACT-2909 happened. A reversal did not\nundo the drift either: the processor rebuilt the reversed transaction\u0027s\nentries from its current rules and swapped debit and credit, so a\nposting booked by the job, or under GL mappings changed since, did not\nnet to zero.\n\nSavingsInterestPostingLegs now holds the interest posting rules, and\nboth processors and the job book from it. Overdraft interest postings\nare not part of it: the job and the processors book them to different\naccounts, and that difference needs a fix of its own.\n\nA reversed savings transaction now gets the opposite of every entry\nstored for it, as a reversed loan transaction already does, instead of\nentries rebuilt from the rules. A transaction with nothing booked gets\nno reversal entries.\n"
    },
    {
      "commit": "346535df9265ad036ea528278da279623ba8e3ee",
      "tree": "0e0e4bd311c2612dbba0f8eeaa33bcb9a367035c",
      "parents": [
        "e048ee8b2b6a9f4a3b2dec2b79b4dd40ef480d99"
      ],
      "author": {
        "name": "raashed",
        "email": "mohammedraashed10@gmail.com",
        "time": "Wed Nov 04 01:11:20 2026 +0530"
      },
      "committer": {
        "name": "raashed",
        "email": "mohammedraashed10@gmail.com",
        "time": "Wed Nov 04 01:11:20 2026 +0530"
      },
      "message": "FINERACT-3036: Publish webhook events when a typed command fails\n\nSince FINERACT-2536, commands processed by the new CommandDispatcher can\ndeclare their webhook event through HookableCommand, but\nWebhookCommandHookAfter only notifies webhooks when the command\nsucceeds. The legacy SynchronousCommandProcessingService also publishes\na HookEvent when a command fails, so every command migrated to the new\ninfrastructure loses its failure notifications.\n\nAdd WebhookCommandHookError, which publishes for a failed hookable\ncommand the payload the legacy path is meant to send: status Exception,\nand a response holding the fields of the error body together with its\nerrorCode and statusCode, as mapped by ErrorHandler. The event is\npublished right away, since the command\u0027s work has been rolled back,\nand a failure to build or publish it is logged without masking the\ncommand\u0027s error.\n\nMove the payload building out of WebhookCommandHookAfter into a shared\nWebhookCommandEventPublisher, so the success and failure events keep\nthe same shape.\n"
    },
    {
      "commit": "e048ee8b2b6a9f4a3b2dec2b79b4dd40ef480d99",
      "tree": "942cd0e6e0f868b738983e5e91c83df0a9bb03b9",
      "parents": [
        "3e95c73489e0fd2b51b2d6864fa9cf9b82eafa07",
        "5ae327edc01233138b52ae4cf853135536d1c2d7"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 17:29:04 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 17:29:04 2026 +0000"
      },
      "message": "Merge pull request #6786 from adamsaghy/FINERACT-2967/payment-type-update-validation\n\nFINERACT-2967: Report payment type update errors correctly"
    },
    {
      "commit": "3e95c73489e0fd2b51b2d6864fa9cf9b82eafa07",
      "tree": "4eb6ad9fb3071437113ff6d9b0825eb47f2d6063",
      "parents": [
        "f375431070d487ac46b93b618cbfd5b8dfe2f1a0",
        "d4493e4e43cf652d8fc5910c6077ceecbf5fa197"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 17:28:45 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 17:28:45 2026 +0000"
      },
      "message": "Merge pull request #6761 from Abhishek6122008/bugfix/FINERACT-2909-interest-posting-overdraft-split\n\nFINERACT-2909: Split job interest postings that pay down an overdraft"
    },
    {
      "commit": "f375431070d487ac46b93b618cbfd5b8dfe2f1a0",
      "tree": "e2bba64a49ce010b70af32686cbe1b9c5a177506",
      "parents": [
        "abd2c090be74b2e40bd8be52d282315f768f434d",
        "403bea0da69057585967737b0b4eee05bf99227a"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 17:28:20 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 17:28:20 2026 +0000"
      },
      "message": "Merge pull request #6807 from ThevinuJ/FINERACT-3027\n\nFINERACT-3027: Fix permission check on interest pause write APIs"
    },
    {
      "commit": "8a441875fd1937c69630f96f5fa3a049a21eb84b",
      "tree": "444d842800bcb88103b98e6deede577da925c021",
      "parents": [
        "fd680a2276dde6f2c4837d831f0693fef0fef029"
      ],
      "author": {
        "name": "ImalkaPerera",
        "email": "hpsimalkaperera@gmail.com",
        "time": "Tue Nov 03 22:41:09 2026 +0530"
      },
      "committer": {
        "name": "ImalkaPerera",
        "email": "hpsimalkaperera@gmail.com",
        "time": "Tue Nov 03 22:41:09 2026 +0530"
      },
      "message": "FINERACT-3031: Test the day before the restart date for WEEKS and YEARS\n"
    },
    {
      "commit": "96ddb48cbaa6aa5a4b8597472140ac5fddd597fc",
      "tree": "12f1970000229e7b61469aad2850b966b4a2c847",
      "parents": [
        "1e84eeba8df1a1d2efbe91c573f954cd9ea16413"
      ],
      "author": {
        "name": "Patrick James",
        "email": "patrick.james.dev@gmail.com",
        "time": "Thu Oct 29 19:02:34 2026 -0600"
      },
      "committer": {
        "name": "Patrick James",
        "email": "patrick.james.dev@gmail.com",
        "time": "Tue Nov 03 09:25:42 2026 -0700"
      },
      "message": "FINERACT-2105: Add payment detail to share purchase and redeem\n\nShare purchases and redemptions had nowhere to record how the money\nmoved, and the share accounting bridge passed a null paymentTypeId to\njournal entries (marked FIXME), so payment-type GL routing never applied\nto shares.\n\nAccount creation (the initial purchase), applyadditionalshares,\nredeemshares and close now accept the standard payment detail fields.\nApproving or rejecting additional shares does not, since the payment is\nrecorded when the shares are applied for.\n\nThe share transaction links to the payment detail through a new\npayment_detail_id column (migration 0278). Its payment type now reaches\nthe journal entry, and purchased share transactions return\npaymentDetailData.\n\nRouting also needs a mapping on the product, which share products could\nnot store: paymentChannelToFundSourceMappings was rejected as an\nunsupported parameter, and the mapping code saved share mappings through\nthe savings helper, which would have recorded them as savings product\nmappings. Share products now accept and validate the mappings on create\nand update, and save them as share mappings. Mappings are rejected\nunless the product uses cash-based accounting, and a payment type can\nonly be mapped once.\n\nAssisted-By: claude-opus-5-5\n"
    },
    {
      "commit": "abd2c090be74b2e40bd8be52d282315f768f434d",
      "tree": "6ea70974589d0449276ee5a4b256576b9449c690",
      "parents": [
        "1e84eeba8df1a1d2efbe91c573f954cd9ea16413",
        "f371080743613f1ead2bd55bb52fbc73b5c3c38f"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 16:08:00 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 16:08:00 2026 +0000"
      },
      "message": "Merge pull request #6714 from Eyad-Sharkawy/FINERACT-1283\n\nFINERACT-1283: Fix cannot get a numeric value from a string formula cell in bulk import"
    },
    {
      "commit": "1e84eeba8df1a1d2efbe91c573f954cd9ea16413",
      "tree": "b691aa133fe40f723f61bb5b67ddc01ecc9f3ee9",
      "parents": [
        "8ff469da5102044eb5d998a993619a9850914527",
        "3213863bead0b1bc97fff0eb302df7224900128f"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 15:21:47 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 15:21:47 2026 +0000"
      },
      "message": "Merge pull request #6799 from sanvinaik/FINERACT-2982-capitalized-income\n\nFINERACT-2982: Restrict capitalized income operations by office hierarchy"
    },
    {
      "commit": "8ff469da5102044eb5d998a993619a9850914527",
      "tree": "4e4b1c8cecaf36f195932877e4c46a7655e5cd18",
      "parents": [
        "554428ca6b00160a3a6b91b06d15723ccd2be070",
        "992c65b9d7de02ad64861ee3849e0e6bc8a59cac"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 14:21:49 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 14:21:49 2026 +0000"
      },
      "message": "Merge pull request #6493 from openMF/FINERACT-2684/config-cache-round-trips\n\nFINERACT-2968: Transaction-bound cache clearing and load global configs once per transaction"
    },
    {
      "commit": "554428ca6b00160a3a6b91b06d15723ccd2be070",
      "tree": "0cf9197ea3aa9b5c58d491e376aa79ceb4723b27",
      "parents": [
        "1afb4e43069fdd243fde22c9ffa6dfaba529af43",
        "9fdf73680242b23d25b93c466fc31235e47ddda1"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 13:58:27 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 13:58:27 2026 +0000"
      },
      "message": "Merge pull request #6060 from openMF/FINERACT-1932/modularization-fineract-shares\n\nFINERACT-1932: modularization fineract-shares"
    },
    {
      "commit": "1afb4e43069fdd243fde22c9ffa6dfaba529af43",
      "tree": "7ca8e41fd09d5ed2650e798961c497e5e4c091a6",
      "parents": [
        "4be5b5fb4fb91be9fda9efd8962eb4325ce103d3",
        "84b415fcf5fe857632855adb0a063dda729e02ec"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 13:06:38 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 13:06:38 2026 +0000"
      },
      "message": "Merge pull request #6633 from rshdhere/FINERACT-2536-new-command-webhooks\n\nFINERACT-2536: Publish webhook events for document commands"
    },
    {
      "commit": "4be5b5fb4fb91be9fda9efd8962eb4325ce103d3",
      "tree": "6d36fb4d9fe7967d7461c0554a4f2802b4fbe23d",
      "parents": [
        "cb7d8eeec2b2738dc1b25bf8301f82973037ca8a",
        "a1916d7ce4070699a2467a573d29307901208c65"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 13:05:39 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 13:05:39 2026 +0000"
      },
      "message": "Merge pull request #6800 from ThevinuJ/FINERACT-2982-client-activation\n\nFINERACT-2982: Add office-hierarchy check for client activation"
    },
    {
      "commit": "992c65b9d7de02ad64861ee3849e0e6bc8a59cac",
      "tree": "5bc5695737f451f0311fbe37b0137aecb767a061",
      "parents": [
        "cb7d8eeec2b2738dc1b25bf8301f82973037ca8a"
      ],
      "author": {
        "name": "Jose Alberto Hernandez",
        "email": "alberto@art3ch.solutions",
        "time": "Tue Sep 22 20:53:07 2026 -0500"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 12:57:16 2026 +0000"
      },
      "message": "FINERACT-2968: Transaction-bound cache clearing and load global configs once per transaction\n"
    },
    {
      "commit": "cb7d8eeec2b2738dc1b25bf8301f82973037ca8a",
      "tree": "7a8ca26dc8cf181bfcb5d9a177ea2c276598a39d",
      "parents": [
        "e278dbd9c3de14f21db770d192b539b1e4ed5048",
        "864582b2fc941c363abe6c0e3f7550b9be0b65f2"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 12:54:19 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 12:54:19 2026 +0000"
      },
      "message": "Merge pull request #6801 from openMF/FINERACT-2968/datatable-update-ddl-error\n\nFINERACT-2968: Surface failed DDL in datatable column updates instead of swallowing it"
    },
    {
      "commit": "e278dbd9c3de14f21db770d192b539b1e4ed5048",
      "tree": "8b4105ceb2cb486aa9d5bc6c44b05ae50a5cbceb",
      "parents": [
        "f6ca85ff7b20fbb060ad0d1eaea6239b2d8e278a",
        "766f42167a272a60ede930794d76a299fef5ce28"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 12:44:31 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 12:44:31 2026 +0000"
      },
      "message": "Merge pull request #6727 from openMF/FINERACT-2968/standing-instruction-history-bind-parameters\n\nFINERACT-2968: Use bind parameters for standing instruction history insert"
    },
    {
      "commit": "f6ca85ff7b20fbb060ad0d1eaea6239b2d8e278a",
      "tree": "b615189e75939919ec846acaec803555d3f2ae18",
      "parents": [
        "a8d90159df9330c3c95e78862ed97e6ed6570feb",
        "39467a4c43ac4bffb460098c2a7a1839c147ee93"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 12:39:37 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 12:39:37 2026 +0000"
      },
      "message": "Merge pull request #6780 from danhandev/FINERACT-3018\n\nFINERACT-3018: Number fixed deposit accounts with the savings account number format"
    },
    {
      "commit": "a8d90159df9330c3c95e78862ed97e6ed6570feb",
      "tree": "1804588755556f97ff860e196b15dc69cd5f01e8",
      "parents": [
        "e7d381590b31669b23bc46649f678055e1915eb3",
        "0189970fbdbb0c5cdbc34222f4702586188c79e9"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 12:38:49 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 12:38:49 2026 +0000"
      },
      "message": "Merge pull request #6797 from adamsaghy/FINERACT-2967/finish-feign-migration\n\nFINERACT-2967: Finish feign migration"
    },
    {
      "commit": "e7d381590b31669b23bc46649f678055e1915eb3",
      "tree": "13b60c081f6964a463ca73e2322ab168f98e7726",
      "parents": [
        "2f53256615aecdedee2e65893bc0d1cea58c3142",
        "3fc866bdb34e802135bc58ced5c97f8f3a937b6e"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 12:33:27 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 12:33:27 2026 +0000"
      },
      "message": "Merge pull request #6778 from Bhavya-Sonigra/FINERACT-3019\n\nFINERACT-3019: Disallow cross-currency account transfers"
    },
    {
      "commit": "9fdf73680242b23d25b93c466fc31235e47ddda1",
      "tree": "b126c01c745c6fdc3e5ad4a58ccdbdc2b39a483b",
      "parents": [
        "2f53256615aecdedee2e65893bc0d1cea58c3142"
      ],
      "author": {
        "name": "Jose Alberto Hernandez",
        "email": "alberto@art3ch.solutions",
        "time": "Mon Jun 29 18:56:03 2026 -0500"
      },
      "committer": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 11:33:28 2026 +0000"
      },
      "message": "FINERACT-1932: modularization fineract-shares\n"
    },
    {
      "commit": "2f53256615aecdedee2e65893bc0d1cea58c3142",
      "tree": "03317b22ceb691c86e89aafa1e55d654d3a76280",
      "parents": [
        "71281f1772b76fba50abac485709ed19f3002073",
        "d57d42d1fa8c660edd4b352aaea4b6485e2b4010"
      ],
      "author": {
        "name": "Adam Saghy",
        "email": "adamsaghy@gmail.com",
        "time": "Tue Nov 03 11:15:49 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 11:15:49 2026 +0000"
      },
      "message": "Merge pull request #6813 from openMF/FINERACT-2186-command-parameters-overwrite-response-data-e2e\n\nFINERACT-2186: Keep submitted command identifiers in the audit table"
    },
    {
      "commit": "7b99d04343ac8352053412250b3da6dd1c38c0b7",
      "tree": "2ea88ab588b29f106d7b85c0aa8e88ded015b1aa",
      "parents": [
        "71281f1772b76fba50abac485709ed19f3002073"
      ],
      "author": {
        "name": "Mend Renovate",
        "email": "bot@renovateapp.com",
        "time": "Tue Nov 03 11:11:28 2026 +0000"
      },
      "committer": {
        "name": "Mend Renovate",
        "email": "bot@renovateapp.com",
        "time": "Tue Nov 03 11:11:28 2026 +0000"
      },
      "message": "FINERACT-2968: Update dependency com.google.googlejavaformat:google-java-format to v2\n"
    },
    {
      "commit": "d57d42d1fa8c660edd4b352aaea4b6485e2b4010",
      "tree": "03317b22ceb691c86e89aafa1e55d654d3a76280",
      "parents": [
        "71281f1772b76fba50abac485709ed19f3002073"
      ],
      "author": {
        "name": "Peter Kovacs",
        "email": "peter.kovacs@dpc.hu",
        "time": "Tue Nov 03 09:44:35 2026 +0100"
      },
      "committer": {
        "name": "Peter Kovacs",
        "email": "peter.kovacs@dpc.hu",
        "time": "Tue Nov 03 09:44:35 2026 +0100"
      },
      "message": "FINERACT-2186: Keep submitted command identifiers in the audit table - E2E tests\n"
    },
    {
      "commit": "63961969097300f3b2b1c49771f6aa0f90d4eeae",
      "tree": "86be55960d98731599c1e9541c2d19eaed3b5565",
      "parents": [
        "71281f1772b76fba50abac485709ed19f3002073"
      ],
      "author": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Tue Nov 03 14:04:25 2026 +0530"
      },
      "committer": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Tue Nov 03 14:04:25 2026 +0530"
      },
      "message": "FINERACT-3032: Link the two periods of the overdraft interest split\n\nWith overdraft allowed and an Interest Receivable GL account mapped,\nthe interest posting service builds two periods for each posting\ninterval, one for the days in credit and one for the overdrawn days.\nCompoundInterestHelper calculates them together, but found the pair by\ncomparing the dates of neighbouring periods, which relied on the\nservice adding them one right after the other without saying so.\n\nThe service now links the two periods when it builds them, and the\nhelper pairs them by that link. If the second part does not come right\nafter the first, the helper fails instead of calculating the periods\nout of order.\n"
    },
    {
      "commit": "9c4d4089fbe4f287bece842745452e07ccab5cc2",
      "tree": "5aa8a75186db2e5c6c7d2c33fce97218df6907f8",
      "parents": [
        "71281f1772b76fba50abac485709ed19f3002073"
      ],
      "author": {
        "name": "Mend Renovate",
        "email": "bot@renovateapp.com",
        "time": "Tue Nov 03 06:45:24 2026 +0000"
      },
      "committer": {
        "name": "Mend Renovate",
        "email": "bot@renovateapp.com",
        "time": "Tue Nov 03 06:45:24 2026 +0000"
      },
      "message": "FINERACT-2968: Update dependency com.mysql:mysql-connector-j to v26\n"
    },
    {
      "commit": "d4493e4e43cf652d8fc5910c6077ceecbf5fa197",
      "tree": "a2e0217209a45c13c0ec02fde5f72a04ed9ce232",
      "parents": [
        "18ce75b63b669f31804c3783abef4ab2288c66d4"
      ],
      "author": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Wed Oct 28 06:18:50 2026 +0530"
      },
      "committer": {
        "name": "Abhishek Chaudhary",
        "email": "abhishek.6122008@gmail.com",
        "time": "Tue Nov 03 11:20:10 2026 +0530"
      },
      "message": "FINERACT-2909: Split job interest postings that pay down an overdraft\n\nWhen the Post Interest For Savings job posted interest to an overdrawn\naccount, it credited the whole amount to Savings Control, although\noverdraft_amount_derived already held the part that pays down the\noverdraft. Credit that part to Overdraft Portfolio Control and the rest\nto Savings Control, as the accounting processors do for a manual\nposting. Both parts keep the debit account the job already uses for\nthe product.\n\nReversals don\u0027t go through the job: the accounting processor rebuilds\nthe entries of a reversed posting from its own rules. On accrual\nproducts its overdraft branch debited Interest on Savings, so a job\nposting could not be reversed cleanly and a manual posting booked the\nexpense a second time. It now debits Interest Payable for both parts,\nas for a posting to an account in credit.\n"
    },
    {
      "commit": "fd680a2276dde6f2c4837d831f0693fef0fef029",
      "tree": "e004e662bd44a06b71d569f03b0396c1971a68a0",
      "parents": [
        "71281f1772b76fba50abac485709ed19f3002073"
      ],
      "author": {
        "name": "ImalkaPerera",
        "email": "hpsimalkaperera@gmail.com",
        "time": "Tue Nov 03 09:07:08 2026 +0530"
      },
      "committer": {
        "name": "ImalkaPerera",
        "email": "hpsimalkaperera@gmail.com",
        "time": "Tue Nov 03 09:07:08 2026 +0530"
      },
      "message": "FINERACT-3031: Fix free withdrawal restart for WEEKS and YEARS\n"
    }
  ],
  "next": "403bea0da69057585967737b0b4eee05bf99227a"
}
