@@ -25,26 +25,50 @@ Feature: Parse Match
2525 Given a match is in the "Parsing" state
2626 When OpenDota finishes parsing the match
2727 Then the per-minute CS data is stored
28- Then the per-minute networth data for all 10 players is stored
28+ Then the per-minute gold (gold_t) data for all 10 players is stored
2929 And item purchase timings are stored
3030 And lane role is detected and stored
3131 And the match parse_state changes to "Parsed"
32- And the UI updates to show the "Parsed" state
32+ And the UI updates to show goal result chips for the match
3333
34- Scenario: Match parsing fails
34+ Scenario: Match parsing fails with pending status
3535 Given a match has been requested for parsing
36- When OpenDota returns an error or the match cannot be parsed
36+ When OpenDota has not yet finished processing the match (lh_t/dn_t not available)
3737 Then the match parse_state changes to "Failed"
38- And the UI shows a "Failed" indicator
38+ And the Goals cell shows a grey clock icon (🕐)
39+ And hovering the icon shows "not yet parsed / will be picked up on next sync"
40+
41+ Scenario: Match parsing fails with an unexpected error
42+ Given a match has been requested for parsing
43+ When OpenDota returns a non-recoverable error (network failure, unexpected response)
44+ Then the match parse_state changes to "Failed"
45+ And the Goals cell shows a red warning icon (⚠)
46+ And hovering the icon shows the specific error message
47+
48+ Scenario: Failed match shows Retry button
49+ Given a match has parse_state = Failed
50+ When the user views the match list
51+ Then the Goals cell shows a "↺ Retry" button
52+ And clicking it re-attempts the full parse flow
53+
54+ Scenario: Match visible as parsed on OpenDota but Unparsed locally
55+ Given a match exists in the local database with parse_state = Unparsed
56+ And the match IS fully parsed on OpenDota (lh_t, dn_t and gold_t data available)
57+ When the user clicks "Parse" or auto-parse runs
58+ Then the parse succeeds and the match transitions to parse_state = Parsed
59+ And goal chips are shown in the Goals cell
3960
4061 Scenario: Automatic retry polling
41- Given one or more matches have parse_state = Unparsed
42- Then the application polls every 30 seconds for recent unparsed matches
43- And automatically requests parsing for each unparsed match found
62+ Given one or more matches have parse_state = Unparsed or Failed
63+ Then the application polls every 30 seconds for recent unparsed/failed matches
64+ And automatically requests parsing for each one found
4465```
4566
4667## Notes
4768- Parsing is automatic and does not require manual user action
4869- The UI updates in real-time using a match-state-changed event
4970- Parsed data enables per-minute charts and item timing goals
5071- The poll interval is 30 seconds
72+ - Per-match parse errors are shown inline (icon + tooltip) — no global error banner
73+ - Per-minute gold data is stored from the OpenDota ` gold_t ` field (not ` net_worth ` , which is a scalar)
74+ - A grey clock indicates a transient/pending state; a red warning indicates an actual error
0 commit comments