{"data":{"kind":"file","path":"README.md","version_id":"zggxljreaoldnzvkjhbcx1r5","entry":{"name":"README.md","path":"README.md","is_directory":false,"size":2036,"modified_at":"2026-07-15T17:26:57.137000","content_hash":"92c53ba3d346c462683e1cb617395f62f8f3a90b4f2ca3c0efcf550451fc0282"},"entries":[],"content":"# fs-review\n\nReview a full set of financial statements the way an auditor does — as one interlinked whole — and flag where the numbers don't tie out.\n\nEach task shows a complete mini statement set: an income statement, a retained-earnings reconciliation, a balance sheet, and a cash-flow summary. Some sets are clean; others hide a single defect that only surfaces when you check the statements against each other, not line by line. The model reads all of it and reports what's wrong.\n\n## Defects\n\nEvery set is built to tie out first, then one of three cross-statement errors is planted:\n\n- `unbalanced_balance_sheet` — total assets ≠ total liabilities + equity\n- `retained_earnings_mismatch` — opening RE + net income − dividends ≠ closing RE\n- `cash_mismatch` — cash on the balance sheet ≠ closing cash on the cash-flow statement\n\nSince each set is internally consistent apart from the one planted flaw, the answer key is unambiguous.\n\n## Dataset\n\n8 synthetic statement sets defined in `fs_review.py` (no external download): 2 clean, plus 2 each of the three defects. It's deliberately small — enough to prototype the loop and see reward spread. To grow it, add rows to `STATEMENTS`.\n\n## Task\n\n- **Type:** single-turn\n- **Output:** a JSON object — `{\"findings\": [{\"issue_type\": ..., \"explanation\": ...}]}`, with an empty list when the statements are clean. `issue_type` must be one of the three defect names above.\n\n## Reward\n\n| Function | Weight | What it measures |\n| --- | --- | --- |\n| `findings_f1` | 1.0 | Set-overlap (F1) between reported and planted defects. Rewards catching real issues, penalizes inventing ones. |\n| `valid_json` | 0.2 | Whether the reply parses as findings JSON at all. |\n\nThe F1 term gives partial credit and punishes over-flagging, so \"report everything\" doesn't win — which keeps the reward honest as a training signal.\n\n## Quickstart\n\n```bash\nprime env install martian56/fs-review\nprime eval run fs-review -m openai/gpt-4o-mini -p openrouter -n 8\n```\n\nNo environment arguments.\n","encoding":"utf-8","truncated":false,"total_bytes":2036},"status":null}