Files
Laith Weinberger 10acad0712 harness agent: stop the done gate destroying partial answers, steer to extract(query=)
Smoke on 6 tasks browser-use won: timeouts gone, 5/6 now finish with real
answers, but 0/6 pass and one fix backfired.
- the completeness gate refused at step 30 on j755nf; the agent spent its last
  steps collecting and ended with an EMPTY answer, worse than the partial it
  had. Both done gates now stand down when fewer than 6 steps remain.
- it also read a prose answer listing three findings as 'about 1'. _count_items
  returns None for unstructured prose instead of guessing, so no refusal.
- traces showed the agent scrolling and re-reading rather than using the new
  extract(query=). Promoted it in the system prompt and the action description
  as the default way to gather data.
2026-08-24 19:37:33 -07:00
..
2026-07-11 11:28:12 -07:00
2026-07-07 10:27:38 -07:00
2026-07-11 11:28:12 -07:00
…
…
2026-06-08 13:35:20 -07:00

Codebase Structure

The code structure inspired by https://github.com/Netflix/dispatch.

Very good structure on how to make a scalable codebase is also in this repo.

Just a brief document about how we should structure our backend codebase.

Code Structure

src/
/<service name>/
models.py
services.py
prompts.py
views.py
utils.py
routers.py

    	/_<subservice name>/

Service.py

Always a single file, except if it becomes too long - more than ~500 lines, split it into _subservices

Views.py

Always split the views into two parts

# All
...

# Requests
...

# Responses
...

If too long → split into multiple files

Prompts.py

Single file; if too long → split into multiple files (one prompt per file or so)

Routers.py

Never split into more than one file