Here is where expenses stand this week.
Three pull requests touched expenses between Monday and Thursday. The largest changed who approves them: anything over the $500 limit now routes to the project owner instead of the line manager. Sam opened it, Dana approved it on Tuesday afternoon, and it shipped with the Thursday release.
I re-read the approval policy against the code after that merge, because the doc still named the line manager. It does not any more: the paragraph now matches expenses/limits.py line 64, and the routing table agrees with both. If either one moves again I will flag the doc before it goes stale rather than after.
That check was not only the approvals page. Fourteen other documents mention who signs off on what, and I re-tested all of them against the code on Thursday night. Eleven were already right. Two described a routing rule that has not existed since March. One contradicted itself in consecutive sentences, and I have drafted a correction rather than editing it quietly.
The change had one consequence nobody wrote down. Project owners do not have the finance dashboard, so approvals now arrive by email and come back a few hours slower. Finance thought Wednesday's queue looked stuck. It was not stuck, it was in somebody's inbox. I left a note on the rollout thread so it does not get raised again next month.
Two things are waiting on a person.
Priya's Berlin flight is $1,240, over the $500 limit, so it still needs a human yes. I have matched it to the trip, attached the receipt and filed it against the EU expansion project, and it has been with Dana for two days. Nothing is lost while it waits: the run is parked, not cancelled, and it finishes the moment she answers.
The second is smaller. Someone asked to split a $310 team dinner across two projects, and the policy does not cover split allocations at all. I have not guessed. The request is in the review queue with the relevant clause attached, so whoever picks it up decides once and I follow that decision from then on.
Neither of those is blocking anybody's reimbursement. Priya has been told the claim is approved in principle and is waiting on a signature, and the dinner has an answer promised for Monday. I would rather say that a person is looking at it than invent a policy on their behalf.
Everything else ran without asking. I matched forty-one receipts to projects, chased nine that were missing, and filed sixty-three expenses under the limit, every one inside policy and every one recorded. The audit trail has all of them, including the ones I was allowed to do without asking. Those are the interesting ones, because they are the decisions nobody watched.
One run did not go cleanly. Tuesday's batch lost its connection to the accounting system partway through nineteen claims. It picked up again at the eleventh and finished. None were filed twice, and none were dropped.
That is worth being precise about, because a half-finished batch is worse than none at all. Every claim is recorded before it is sent and reconciled after, so a reconnect resumes at the first unreconciled item rather than at the start. The nineteenth went through at 14:22, four minutes after the connection came back.
Last month cost $412 across 2,140 conversations, about nineteen cents each. Filing was the busiest skill at thirty-eight per cent of every action taken, and the cheapest by far, because most of them end in a single step.
Two people are worth a look. Marcus has filed the same hotel three times in five weeks, which usually means the duplicate warning is not landing. Ines has asked where her reimbursement is four times, which usually means the status email is not arriving.
One recommendation. The gap between the routing change and the split-allocation rule will keep landing in your queue. Decide the split case once and write it down, and I can stop asking — about a fifth of what reaches you now would stop reaching you at all.
Here is where expenses stand this week.
Three pull requests touched expenses between Monday and Thursday. The largest changed who approves them: anything over the $500 limit now routes to the project owner instead of the line manager. Sam opened it, Dana approved it on Tuesday afternoon, and it shipped with the Thursday release.
I re-read the approval policy against the code after that merge, because the doc still named the line manager. It does not any more: the paragraph now matches expenses/limits.py line 64, and the routing table agrees with both. If either one moves again I will flag the doc before it goes stale rather than after.
That check was not only the approvals page. Fourteen other documents mention who signs off on what, and I re-tested all of them against the code on Thursday night. Eleven were already right. Two described a routing rule that has not existed since March. One contradicted itself in consecutive sentences, and I have drafted a correction rather than editing it quietly.
The change had one consequence nobody wrote down. Project owners do not have the finance dashboard, so approvals now arrive by email and come back a few hours slower. Finance thought Wednesday's queue looked stuck. It was not stuck, it was in somebody's inbox. I left a note on the rollout thread so it does not get raised again next month.
Two things are waiting on a person.
Priya's Berlin flight is $1,240, over the $500 limit, so it still needs a human yes. I have matched it to the trip, attached the receipt and filed it against the EU expansion project, and it has been with Dana for two days. Nothing is lost while it waits: the run is parked, not cancelled, and it finishes the moment she answers.
The second is smaller. Someone asked to split a $310 team dinner across two projects, and the policy does not cover split allocations at all. I have not guessed. The request is in the review queue with the relevant clause attached, so whoever picks it up decides once and I follow that decision from then on.
Neither of those is blocking anybody's reimbursement. Priya has been told the claim is approved in principle and is waiting on a signature, and the dinner has an answer promised for Monday. I would rather say that a person is looking at it than invent a policy on their behalf.
Everything else ran without asking. I matched forty-one receipts to projects, chased nine that were missing, and filed sixty-three expenses under the limit, every one inside policy and every one recorded. The audit trail has all of them, including the ones I was allowed to do without asking. Those are the interesting ones, because they are the decisions nobody watched.
One run did not go cleanly. Tuesday's batch lost its connection to the accounting system partway through nineteen claims. It picked up again at the eleventh and finished. None were filed twice, and none were dropped.
That is worth being precise about, because a half-finished batch is worse than none at all. Every claim is recorded before it is sent and reconciled after, so a reconnect resumes at the first unreconciled item rather than at the start. The nineteenth went through at 14:22, four minutes after the connection came back.
Last month cost $412 across 2,140 conversations, about nineteen cents each. Filing was the busiest skill at thirty-eight per cent of every action taken, and the cheapest by far, because most of them end in a single step.
Two people are worth a look. Marcus has filed the same hotel three times in five weeks, which usually means the duplicate warning is not landing. Ines has asked where her reimbursement is four times, which usually means the status email is not arriving.
One recommendation. The gap between the routing change and the split-allocation rule will keep landing in your queue. Decide the split case once and write it down, and I can stop asking — about a fifth of what reaches you now would stop reaching you at all.