Automate loan application entry in Frappe Lending
The lending reference: a loan application entered once on Frappe Lending, compiled into model-free replay, and accepted only when a separately authenticated read-only REST session, a direct SQL read-back, and an exact table-delta audit all agree that exactly one application was written.
This workflow runs today, end to end, against the named open-source reference application in the openadapt-flow repository. The steps below are the real demonstrated steps and the verification is the real oracle.
Runs on
Frappe Lending v16.2.0, run locally as a pinned, fully synthetic fixture — every trial restores the same SHA-256-bound database snapshot. Frappe exposes a good REST API, so a real deployment should prefer the API; the browser arm isolates what compiled replay is worth when a UI path is required.
The demonstrated steps
- 1On the Loan Application opened for the fixture customer, enter the applicant contact email
- 2Enter the applicant contact phone
- 3Scroll from the contact inputs to the lower loan controls — the demonstrated navigation is preserved in the compiled program, not hidden
- 4Select the loan product, waiting for the exact visible suggestion before confirming
- 5Enter the loan amount
- 6Enter the number of repayment periods
- 7Save exactly one application
Parameters: email · phone · loan product · amount · repayment periods — recorded values are the defaults; every replay can override them.
How the outcome is verified
Three independent oracles, none of which is the writer: a read-only REST session authenticated as a separate fixture user, a direct SQL read-back of the target fields, and an exact per-table row-count contract — the only accepted change is exactly one new Loan Application row; every other table must stay untouched. A duplicate write, a wrong-customer write, or a collateral insert fails the run loudly. Pixels and actor self-report never establish success.
- separately authenticated read-only REST
- direct SQL read-back
- exact table-delta audit (tabLoan Application: +1, all else +0)
Evidence and scope
6/6 compiled trials correct across the pinned baseline and a cosmetic-drift variant — 0 silent incorrect successes, 0 over-halts, 0 model calls, $0 model cost. An initial engineering matrix, not a publication benchmark; the full comparative matrix (paid agent arm, 10 fresh trials per cell) is still open.
Try it from the command line
The compiler and runtime are open source and MIT licensed. Healthy runs are local and make no model calls.
pip install openadapt-flowInstall the open-source compiler and runtime.
openadapt-flow record --url https://your.app --out recOpen a headed browser on your app and demonstrate the workflow once; Ctrl-C to finish.
openadapt-flow compile rec --out bundle --name my-taskCompile the recording into a deterministic bundle with auto-classified risk per step.
openadapt-flow lint bundle && openadapt-flow certify bundle --policy permissiveSurface coverage gaps, then gate the bundle against a policy before it ever deploys.
openadapt-flow replay bundle --url https://your.app --param name=valueReplay against your app; recorded values are defaults and --param overrides them.
Put this workflow into production
Bring your version of this workflow and the record that proves its outcome. We'll map the deployment, verification, shadow run, and supervised rollout.