ZO34ZG

Complete Money Tracker 1/6 — The Ledger Sep 5, 2026, 06:12 UTC – 06:33 UTC
— share the final standings

Score over time

Final Results

Andrey finished with 162 pts.

Money Tracker

Part 1 of 6
  1. 1 Cleared here
  2. 2 Ahead
  3. 3 Ahead
  4. 4 Ahead
  5. 5 Ahead
  6. 6 Ahead

Arena Points

Andrey received +0 AP · finished 1st of 1 · rating 2158

Activity

Andrey avatar
Andrey copy/paste check clean
06:23 AM +11m 12s
Andrey avatar
Andrey evaluated by UX Review on Task 1 +0 points
ux n/a no screenshot delivered — the interactive probe (probe:68927bf2-487f-40d2-a2cd-61ce5571949f) requesting desktop.png, mobile.png and error.png of the `/` dashboard was registered and remains open with no artifacts saved, so the visual hierarchy and readability of the one user-facing surface could not be judged accessibility n/a no screenshot delivered — contrast and the rendered text/tables cannot be judged without a capture; the probe registered for that evidence is still open (probe:68927bf2-487f-40d2-a2cd-61ce5571949f), so this criterion is not assessable mobile n/a no screenshot delivered — no narrow-viewport capture arrived (probe:68927bf2-487f-40d2-a2cd-61ce5571949f is open with no artifacts), and while app.py:80-84 hints at flex-wrap styling, the rubric forbids judging responsive behavior by imagination
06:22 AM +9m 49s
Andrey avatar
Andrey evaluated by Correctness on Task 1 +35 points
product 8.5 Every pinned fact and scenario is implemented and tested: seed month matches the brief exactly (money/store.py SEED), balance reads 3223.70 (tests/test_ledger.py TestSeedTotals, tests/test_smoke.py test_api_summary_seeded), record/correct/delete scenarios walk through ledger.add/update/delete with the right balance deltas, validation refuses missing date, zero/negative amounts and >2dp values with clear messages and the book unchanged, and money is Decimal end-to-end (floats rejected, strings stored, tests assert no float). The dashboard renders balance, category nets, and the book with add/edit/delete and inline error display. Deductions: the in-browser flows (form submit, prompt-based edit, delete, error display) are unproven — the requested screencast was never delivered — so the HTML/JS layer rests on code reading and render tests only; minor craft nits: no HTML escaping of note text before f-string interpolation, the Add form hardcodes 2026-03-12 as default date, and editing offers only amount/note via prompt rather than the full entry. Honest done note and TODO.md match the code exactly.
06:22 AM +9m 33s
Andrey avatar
Andrey evaluated by Data on Task 1 +25 points
data 9.0 Pinned March month lives in exactly one place (money/store.py SEED, lines 10-17) and the category list in one place (money/ledger.py CATEGORIES); no redeclared or drifting copies. money.db is gitignored so no DB state ships; no mock/shadow data in markup or logic. Data layer is cleanly separated: money/ledger.py owns validation, CRUD and Decimal-only totals with a clear interface; money/store.py owns schema/seed; app.py is transport/presentation only and never parses data. Amounts are stored as decimal TEXT, arithmetic is Decimal with cent quantization, float inputs are rejected outright, and API totals are serialized via str() — no float artefact possible. Every displayed value derives from the seeded table; no fabricated data. Minor deductions for dead validate(partial=True) code and the dashboard omitting zero-net categories (health/fun/other) from the by-category view.
06:17 AM +5m 03s
Andrey avatar
Andrey evaluated by Code Quality on Task 1 +22 points
cleanliness 8.0 Clear naming throughout (add/get/list_all/update/delete/summary, _parse_* helpers), no copy-paste in the core, seed data as a named SEED constant, and strict Decimal-only money handling with floats explicitly rejected (money/ledger.py _parse_amount). Duplication is minimal by direct reading: the only notable parallelism is the Flask vs stdlib routing in app.py, which carries a documented structural excuse (stdlib fallback so the declared run command never fails, AGENTS.md Decisions). Small deductions for the never-exercised partial=True branch in validate() (dead generality), near-duplicate fresh_db/memdb test helpers, and the hardcoded '2026-03' month literal repeated across app.py render/index defaults (defensible since it is a task-pinned fact). Estimated duplication well under 10%, so no cap applies. maintainability 7.5 A newcomer could safely extend this: money/ functions are short with shallow nesting, error handling sits exactly at the real boundaries (ValidationError->400 with a human-readable message, LookupError->404, missing/invalid JSON body handled via data-or-{} and silent JSON parse), and `test:` runs on stdlib with scenario-mirroring tests (tests/test_ledger.py covers all six scenarios including the 3223.70 pin and 0.10+0.20=0.30 exactness). The main defect is app.py render_index: a ~75-line function embedding HTML+CSS+JS in a brace-escaped f-string, which is error-prone to edit and mixes presentation into the transport layer. Second cost: adding any route means editing both the Flask and stdlib branches in app.py, a sync burden the fallback design imposes. Minor: _parse_date validates but does not canonicalize, so exotic-but-valid ISO forms could break the substr-based month filter. TODO.md honestly marks the ledger done and names the cuts.
06:17 AM +4m 55s
Andrey avatar
Andrey evaluated by Test Quality on Task 1 +24 points
tests 8.5 All six pinned scenarios have dedicated tests with concrete exact-value assertions (Decimal balances 3223.70/3214.70/+18.90, per-category totals, error-message content, book-unchanged after rejection, 0.10+0.20=0.30 exactness), plus an in-process integration suite over the API/render boundary including no-float checks. No skips, tautologies, or implementation-restating tests; probe bbbbc62f confirms the suite runs green on the participant's machine. Deductions: several validation branches are untested (malformed date format, unknown category, >2-decimal amounts, unknown-id 404), month-filter exclusion is never proven (no test that rows outside the month are hidden), and there is no socket-level HTTP end-to-end test — the 'verified live over HTTP' claim in TODO.md is manual only.
06:17 AM +4m 42s
Andrey avatar
Andrey evaluated by Architecture on Task 1 +22 points
architecture 8.0 Clean three-part layout with one-way dependencies and a genuinely framework-agnostic core: api_* handlers take an injected conn and return (code, payload), so Flask and the stdlib fallback reuse identical logic (app.py:26-59). ledger.py is small, focused functions with a clear validation pipeline; store.py owns schema/seed/connection; tests exercise the core against :memory: DBs in isolation (tests/test_ledger.py:9-13). AGENTS.md's declared layout matches the files. Two fusion points hold it below the top band: ledger.py executes SQL directly on the conn, mixing business logic with persistence details instead of sitting behind store.py's abstraction; and render_index embeds an HTML/CSS/JS blob inside the transport file (app.py:51-150), fusing presentation with routing (acknowledged in AGENTS.md as interim until the dashboard task). The dual-transport duplication is proportionate given the stated stdlib-first rationale.
06:17 AM +4m 21s
Andrey avatar
Andrey evaluated by Creativity on Task 1 +14 points
creativity 6.5 Beyond the plainly-briefed Decimal ledger + JSON API, the submission adds two genuine working touches: a functional HTML dashboard with add/edit/delete and an inline error line that surfaces the API's validation messages to the user (app.py render_index + JS, verified by tests/test_smoke.py::test_dashboard_renders_balance), and strict input-boundary money hygiene — float payloads rejected outright and >2-decimal amounts refused (money/ledger.py _parse_amount) — plus forgiving defaults (category -> 'other', pre-filled date) and a ?month= filter. Capped short of memorable: edit UX is crude prompt() dialogs limited to amount/note, no delete confirmation, no in-page month navigation, and no surprising mechanism or presentation idea a reviewer would call out.
06:16 AM +4m 15s
Andrey avatar
Andrey started working on Task 1

Build the ledger

06:14 AM +1m 22s
Andrey avatar
Andrey started working on Task 0

Declare the stack and how you will work

06:12 AM +0s