def can_fulfil(items, stock):
"""True when every line in the cart is in stock."""
for item in items:
if stock.get(item.sku, 0) >= item.quantity:
return True
return False
An agent’s rewrite can introduce an early return like this one. As soon as the first item is in stock, the function returns True without looking at the rest of the cart, including anything out of stock. This deliberately broken checkout comes from Perch’s example order service.
Find it with a scan
perch scan --filter type=defect,security
These are the checkout findings from the September 20 demo scan:
checkout.py
ID Line Severity Type Confidence Problem Method
bdc67421 15 P1 (0.8) defect 82% wrong_order place_order
ddc5c917 25 P1 (0.9) defect 94% does_not_do_what_it_claims can_fulfil
ddc5c917 25 P1 (0.9) defect 92% wrong_return_value can_fulfil
4f8bf5dc 31 P1 (0.7) defect 70% bad_state_change refund
The full scan output lists all 19 findings. If you scan the example yourself, scores and labels can differ. Pass an issue ID from your own scan to perch issues <id> to inspect it.
Reproduce the bug
Run this with Python 3 from the example project:
$ python3 - <<'PYTHON'
from types import SimpleNamespace as Item
from checkout import can_fulfil
items = [Item(sku="available", quantity=1), Item(sku="missing", quantity=1)]
print(can_fulfil(items, {"available": 1}))
PYTHON
True
The cart has an item that is out of stock, and the function still accepts it.
Fix the stock check
Require every item to be available:
def can_fulfil(items, stock):
"""True when every line in the cart is in stock."""
return all(stock.get(item.sku, 0) >= item.quantity for item in items)
The two-item cart now returns False. An empty cart still returns True; reject it separately if your checkout requires at least one item.
Check the edited function before you commit:
perch check checkout.py::can_fulfil --rules defect
Add a regression test for the cart with one missing item, then commit and scan again.
Run the example
To try this yourself, follow the quick start, then copy the example into a new repository:
git clone https://github.com/lakeday-org/perch.git perch-source
git -C perch-source checkout 50860211516249122087f9da706b99452225c030
mkdir perch-demo
cp perch-source/test/fixtures/order-service/*.py perch-demo/
cd perch-demo
git init
git add '*.py'
git commit -m "Add example order service"
perch scan --filter type=defect,security
The example contains deliberate bugs for testing Perch. Scanning it does not require running the service or installing its Python dependencies.