Files
Rpa_Skills/tests/evals/results/handoff/h-packaged-desktop-screens-r3.md
T
VasanthandClaude Opus 5.5 3942fad6cd Add rpa-bot-handoff skill: ops guide for bot handover
The skill scans a bot with subagents (never runs it) and writes
HANDOVER.md, an 11-section ops guide in the operator's order: where is
what, how to run, how long to wait, after the run, how to see an
exception, exception list, how you will know, how to tell us, don'ts,
issues seen before. Dev material (check against 12 failure classes from
Tebra Auto Post, gaps with file:line, incidents) goes to HANDOVER-DEV.md.

Also adds ADR-0004, glossary terms, five fixture bots and a handoff eval
runner (--resume, --regrade) with results from 47 runs of the earlier
13-section version. The grader still expects that structure and must be
updated before the next eval run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 15:01:42 +05:30

21 KiB

LedgerBot - ops handover

Version 3.2.0 · Written 2026-10-23 · Escalation: raise a ticket in the RPA Support queue

1. What the bot does

LedgerBot compares the day's bank statement Excel with the LedgerPro desktop accounting app. Every reference in the statement that LedgerPro does not have is typed into LedgerPro and saved. References whose amount differs are only reported, never changed. It runs once per statement file, when an operator starts it. Input: one bank statement Excel file. Output: one Excel report, data/output/Reconcile_<date>_<time>.xlsx, with one row per statement reference. It drives one desktop app: LedgerPro, by finding its buttons on the screen from pictures and clicking them.

2. How it works

launcher.exe (what you start)
   └─ checks for an update, then starts → LedgerBot.exe ──clicks and types into──> LedgerPro
                                              │                                   (do not touch while it runs)
                                              ├─ reads  → the bank statement Excel you gave it
                                              ├─ reads  → LedgerPro's Excel export (data folder)
                                              ├─ writes → data/output/Reconcile_<date>_<time>.xlsx  (only at the very end)
                                              └─ writes → logs/ledger_<date>.log, and a screenshot when a button is not found
  • launcher.exe looks for a newer LedgerBot version, installs it if found, starts LedgerBot.exe and closes itself.
  • LedgerBot.exe is the bot. It has no window of its own; at most a black console window, which prints a one-line summary of counts at the end.
  • LedgerPro is the accounting app. The bot opens it from the Desktop shortcut and moves the mouse and keyboard in it.
  • The report in the output folder is the only record ops can open.
  • The log and screenshots are in the bot's logs folder. Ops cannot open it; the dev team reads it.

One run, step by step:

  1. The launcher checks for an update and starts the bot with the statement file.
  2. The bot opens LedgerPro from the "LedgerPro" shortcut on the Desktop, then waits a fixed 15 seconds.
  3. It clicks LedgerPro's "Export Excel" button, then waits a fixed 10 seconds for the export file.
  4. It reads the export and the statement, and compares them reference by reference.
  5. For each reference LedgerPro does not have, it clicks "New entry", types the reference, presses Tab, types the amount and clicks "Save".
  6. After the last row it writes the report to the output folder. Nothing is written there before that.

3. Before a run

  • The "LedgerPro" shortcut is on your Desktop or on the Public Desktop, named exactly LedgerPro. Otherwise the bot closes at once with no report (E01).
  • Windows display scaling is 100% and the screen is 1920 x 1080. The button pictures were captured at that setting; at 125% the bot cannot find the buttons (E08, E09).
  • Next to LedgerBot.exe there is a logs folder and a data\output folder. The bot does not create them. Without logs it closes at once (E02); without data\output it posts every entry and then fails to write the report (E12). Ask dev to confirm both at install.
  • LedgerPro opens to the screen that shows the "Export Excel" button, without a login or a popup in front of it. The bot does not sign in and does not close popups.
  • Statement Excel rules:
    • The data is on the sheet that was selected when the file was last saved. The bot reads only that sheet.
    • Row 1 is a header. From row 2: column A = reference, column B = amount. Other columns are ignored.
    • Amount is a plain number. Bad: ₹ 410.00, 410,00, n/a. Good: 410.00. One bad amount stops the whole run with no report (E06).
    • Each reference appears once. If it appears twice, only the last row is used and the other is silently dropped (E07).
    • Type references exactly as LedgerPro stores them, and as text. Bad: 1001 stored as a number when LedgerPro has TX-1001. A reference written differently counts as "not in LedgerPro" and is posted again (E07).
    • A row with an empty column A is skipped.
  • The update check has run and the version is the one dev announced (section 10).

4. During a run

  • Hands off the machine. Don't move the mouse or type. The bot clicks wherever it sees a matching button on the screen and types into whatever has focus, so a moved window or a click from you sends its typing into the wrong place.
  • Keep only LedgerPro open. Close other windows that could show a similar "New entry" or "Save" button, and don't let anything cover LedgerPro.
  • Moving the mouse into a corner of the screen stops the bot immediately (a built-in safety switch). Don't do this by accident.
  • To stop the bot: move the mouse into the top-left corner of the screen, or end LedgerBot.exe in Task Manager. Closing the launcher does not stop it; closing LedgerPro does not stop it either - it keeps clicking for each remaining row. Any way you stop it, no report is written, and entries already saved stay in LedgerPro (E13).
  • A run looks stuck when the mouse has not moved for more than about 1 minute. There is no watchdog: the bot never gives up on its own except by failing a button search (20 seconds per button). If nothing moves for 2 minutes, stop it as above and raise a ticket.

5. Where to look when something goes wrong

Question Where to look
Did the run finish? Output folder: a new Reconcile_<date>_<time>.xlsx with the run's start date and time. No new file = the run did not finish (E01-E06, E12, E13). The console window, if shown, prints a summary of counts at the very end.
Which items failed? The report, Result column = Error (failed) or Mismatch (amounts differ).
Why did one item fail? The report, Note column. For anything deeper, raise a ticket - the log and screenshots are in a folder ops cannot open.
Did the bot already retry? It does not retry. Each button is searched for up to 20 seconds, once (section 8).
Which version is running? Ops cannot see it today (section 10). Ask in the ticket.
What was actually posted? LedgerPro itself. The report says Posted when the bot clicked Save, not when LedgerPro confirmed it (E10).

6. Statuses

The report is plain Excel with no colours. Columns: Reference, Amount, Result, Note.

Result - Note Colour Meaning What ops does
OK - (empty) none LedgerPro has this reference with the same amount (within 0.01). nothing
Missing - Posted none LedgerPro did not have it, and the bot typed it in and clicked Save. Despite the word "Missing", this is the row the bot posted. Save was not confirmed. Spot-check a few in LedgerPro (E10).
Mismatch - LedgerPro has <amount> none LedgerPro has the reference with a different amount. The bot changed nothing. Needs follow-up: correct it by hand in LedgerPro, or with the finance team (E11).
Error - Button new_entry.png not found on screen none The bot could not open a new entry. Not posted. E08
Error - Button save_btn.png not found on screen none The bot typed the entry but could not click Save. Probably not saved; the entry form may still be open. Check LedgerPro first (E09).
Missing - Not in LedgerPro - posting none Never appears in a finished report: the bot always replaces it with Posted or turns the row into Error. If you see it, raise a ticket.
(no report at all) - The run stopped before the end. E01-E06, E12, E13

References that are in LedgerPro but not in the statement are not listed anywhere. The bot ignores them.

7. Exception catalogue

"Raise a ticket" always means a ticket in the RPA Support queue with the items in section 11.

ID What you see How the bot identifies it Where it is recorded Type Who acts What to do Escalate when
E01 Bot closes at once, LedgerPro never opens, no report It looks for a "LedgerPro" shortcut on your Desktop and the Public Desktop; if neither has one, it stops Console window only (message "LedgerPro shortcut not found on the Desktop"); not in the log System Ops Put a shortcut named exactly LedgerPro on the Desktop, run again The shortcut is there and it still happens. Send: time, machine name.
E02 Bot closes at once, nothing happens, no report It cannot open its log file because the logs folder next to it is missing Nowhere ops can see System Dev Raise a ticket Always. Send: time, machine name.
E03 LedgerPro opens, nothing is clicked, bot ends, no report It looks for the "Export Excel" button for 20 seconds; if it is not on screen, it saves a screenshot and stops Screenshot in the logs folder; console message "Button export_excel.png not found on screen" System Ops, then Dev Check: display scaling 100%, LedgerPro fully open with no popup or login in front, nothing covering it. Run again. It happens again. Send: time, machine name, and say the screenshot is there.
E04 LedgerPro export runs, then the bot ends, no report It reads LedgerPro's export file from its data folder after a fixed 10 s; if the file is not there or not readable, it stops Nowhere ops can see System Dev Raise a ticket. Do not re-run repeatedly. Always. Send: time, machine name.
E05 Entries posted twice in LedgerPro; the report shows Posted for references LedgerPro already had Not identified. If LedgerPro's export did not refresh the export file in 10 s, the bot compares against the previous run's file and treats today's existing entries as missing Nowhere System Ops, then Dev After every run, check that the number of Posted rows looks right for the day. If it is suspiciously high, check those references in LedgerPro for duplicates and remove them by hand. Any duplicate found. Send: report file, time, machine name.
E06 LedgerPro opens and exports, then the bot ends, no report, no entries posted It cannot read the statement: wrong file, or an amount cell that is not a number Console window only Business Ops Check the statement against the rules in section 3 (plain numbers in column B, data on the selected sheet), fix, run again The file follows the rules and it still happens. Send: time, machine name, statement attached to the ticket (not in chat).
E07 A statement line missing from the report, or a reference posted although LedgerPro already had it under another spelling Not identified. Duplicate references keep only the last row; references are compared as exact text Nowhere Business Ops Remove duplicates and write references exactly as in LedgerPro before the run. If a duplicate entry was posted, delete it by hand in LedgerPro. -
E08 Row Error - "Button new_entry.png not found on screen" It looks for LedgerPro's "New entry" button for 20 seconds after each row; not found = Error, next row Report, Result and Note columns; screenshot in logs folder System Ops Not posted. Check display scaling (100%) and that LedgerPro is still open and in front. Run again - the next run posts it if it is still missing. Several rows in one run, or again on the next run. Send: report file, time.
E09 Row Error - "Button save_btn.png not found on screen" It typed the reference and amount, then looked for "Save" for 20 seconds; not found = Error, next row Report, Result and Note columns; screenshot in logs folder System Ops Check LedgerPro first. The entry form may still be open with this row's data, and the following rows may have been typed into it. Close or cancel any open entry form, confirm whether this reference exists in LedgerPro, then run again. Expect the rows after it to also fail. Rows after it show Posted but are not in LedgerPro. Send: report file, time.
E10 Row Missing - Posted, but the entry is not in LedgerPro (or has a wrong amount) Not identified. The bot writes Posted right after clicking Save; it does not wait for LedgerPro to confirm Report says Posted System Ops Spot-check posted rows in LedgerPro. A missing one is posted by the next run; a wrong amount must be fixed by hand. More than one per run. Send: report file, references concerned (in the ticket, not chat).
E11 Row Mismatch - "LedgerPro has " The reference exists in LedgerPro but the amounts differ by more than 0.01 Report, Result and Note columns Business Ops Decide which amount is right with finance and correct it by hand. The bot never changes existing entries and will report it again until fixed. -
E12 The bot clicks through every row, then ends with no report It writes the report to data\output only at the end; if the folder is missing, it fails there Nowhere ops can see System Dev Entries were posted. Do not re-run until dev creates the folder. Check today's entries in LedgerPro. Always. Send: time, machine name.
E13 Run stopped midway (you stopped it, the PC locked, or it crashed); no report Any problem other than a row's button search stops the whole run Nowhere ops can see System Ops Entries saved before the stop stay in LedgerPro. Check the last entries in LedgerPro, close any open entry form, then run again with the same statement. It stops again at the same point. Send: time, machine name.
E14 A new version was announced but the bot behaves as before The launcher hides every update error (no internet, untrusted certificate) and silently runs the old version Nowhere System Dev Raise a ticket; ops cannot check the version (section 10) Always. Send: machine name, date of the announced update.

8. What the bot recovers by itself

Problem What the bot does Limit After the limit
A button is not on screen yet Looks again every second 20 seconds per button "New entry" or "Save": row = Error, next row. "Export Excel": whole run stops, no report.
LedgerPro slow to open Waits a fixed time, does not check 15 seconds Continues anyway; usually ends in E03
Export slow Waits a fixed time, does not check 10 seconds Continues anyway; ends in E04 or silently in E05
Anything else Nothing. No retries, no restarts, no resume. - Run stops, no report

Ops never has to wait for a hidden retry: if the mouse has stopped for 2 minutes, nothing more will happen.

9. Known incidents

From the repository history. Each fix below is recorded in the history, but the change kept in the code is only a note, so treat every fix as unconfirmed until dev confirms it.

When / version What ops saw Cause What to do now Ops could handle?
Before 3.2.0 The bot never found its buttons (assets missing in the built exe) The packaging file did not include the button pictures Raise a ticket if every run ends at E03 straight after an update No
Before 3.2.0 Clicks missed "Save" on laptops set to 125% display scaling Button pictures captured at 100% Keep display scaling at 100% (section 3) Yes
Before 3.2.0 Two laptops never received updates The launcher hid the certificate error from the update server Still possible today (E14). Raise a ticket when an update does not arrive. Partly
2026-09-05 One row Error "Button save_btn.png not found on screen" in the same run as OK and Mismatch rows Save button not found within 20 s Follow E09 Yes

10. Releases and version check

  • How an update arrives: every time you start launcher.exe, it asks the update server for the latest version and, if different, downloads and installs it over the bot's folder before starting the bot.
  • How to confirm it applied: ops cannot today. The bot shows its version nowhere (it has no window title, and the report does not include it). Ask dev in the ticket.
  • If an update did not arrive: raise a ticket (E14). Don't copy files over the bot's folder yourself.
  • Start the bot only through launcher.exe, never LedgerBot.exe directly, so updates are applied.

11. Escalating to dev

Raise a ticket in the RPA Support queue. Send: the exception ID from section 7, the date and time of the run, the machine name, the report file from the output folder if there is one, and a screenshot of LedgerPro as it was left. Say which statement file was used; attach it to the ticket only, never paste it into chat. Dev collects the log and screenshots from the bot's logs folder. Never send: passwords, the settings file, bank or customer details in chat.

12. Failure-class check

  • F1 covered in section 3 (shortcut, display scaling, logs and data\output folders, LedgerPro screen) and E01, E02, E12; packaging gap in section 13.
  • F2 covered in section 4 (hands off, only LedgerPro open) and section 13 #9.
  • F3 covered in E03, E04, E08, E09, section 8 (fixed 15 s / 10 s waits, 20 s button search), screen rule in section 3.
  • F4 covered in section 3 input rules, E06, E07.
  • F5 covered in E05 (stale export makes already-posted items look missing) and E10; section 13 #1, #2.
  • F6 covered in E09, E10 (check LedgerPro before re-running).
  • F7 covered in section 6 (Missing actually means posted; Mismatch needs follow-up; LedgerPro-only entries never reported) and section 13 #7, #16.
  • F8 not applicable: the bot has no auto-rerun, no restart and no watchdog; it runs each row once and ends.
  • F9 covered in section 4 (corner of the screen or Task Manager; closing the launcher or LedgerPro does not stop it).
  • F10 not applicable: there is no batch, queue or lock; each run stands alone and one failed row never blocks another run. (A failed Save can make the following rows fail in the same run - covered in E09.)
  • F11 covered in section 5 (report only) and section 13 #3, #5, #6.
  • F12 covered in E14, section 10, section 13 #10-#13.

13. Fix before handover (dev team)

# Gap Why it hurts ops Where (file:line)
1 Posted is written right after clicking Save, with no check that LedgerPro saved it Report shows posted when it may not be app.py:65-70, app.py:90
2 Bot reads data/ledger_export.xlsx without checking it was refreshed this run (fixed sleep(10), no timestamp check, old file never deleted) Stale export → existing entries posted twice, silently app.py:77-79
3 Report is written only at the end; any unhandled error loses the whole report although entries were posted Ops cannot tell what was posted app.py:82-96
4 logs/ and data/output/ are not created by the code Instant crash (logs) or crash after posting everything (output) app.py:24, app.py:96
5 Crash errors go to the console only, not to the log (only RuntimeError inside posting is caught) Cause lost once the console closes app.py:86-95, app.py:100-101
6 Log and not-found screenshots are in logs/, which ops cannot open; report Note has only the picture file name Ops cannot see causes themselves app.py:24, app.py:45, app.py:92
7 Posted rows keep Result Missing; the "Not in LedgerPro - posting" note is dead text Confusing status for ops app.py:58, app.py:87-90
8 Fixed sleep(15) / sleep(10) instead of waiting for LedgerPro / the export file Slow machine → E03/E04/E05 app.py:76, app.py:78
9 No window focus or check that LedgerPro is in front; pyautogui.write types into whatever has focus Typing into the wrong window app.py:37-46, app.py:65-70
10 Launcher still swallows every update error (the "fix" commit only added a comment); version compare is != so an older server build would be installed; download has no timeout or integrity check Machines silently stay on, or roll back to, a different version launcher.py:16-20, launcher.py:25-29
11 VERSION comment says it is in the window title, but nothing displays it; not in the report either Ops cannot confirm an update app.py:15, app.py:96
12 ledgerbot.spec is entirely commented out; asset inclusion cannot be verified from the repo Repeat of the "assets missing in exe" incident ledgerbot.spec:2
13 Fix commits b235445 and ba4c1aa changed only a comment line; recaptured 100% button images are not in that commit Fixes listed in history may not be in the build app.py:102, launcher.py:35
14 .env is tracked in git (and the code does not read it) Possible secret exposure .env
15 Statement reads the active sheet only; duplicate references collapse silently; a non-numeric amount crashes the run; references compared as raw str() (number vs text) Silent skips or duplicate posts app.py:52, app.py:80-81
16 LedgerPro entries not in the statement are never reported Ops cannot see extras in the ledger app.py:55-62
17 After a Save-not-found error the entry form is left open and the next row is typed into it One failure cascades app.py:88-92
18 Mouse in a screen corner (pyautogui fail-safe) aborts the run with no report Accidental stop loses the report app.py:12 (default FAILSAFE)