Feature: Cost Budget Model Coverage Additional scenarios that exercise previously uncovered code paths in the cost_budget domain model (SessionCostBudget, OrgCostAccumulator, ThreadSafeOrgCostAccumulator). Background: Given the cost budget module is imported # ── SessionCostBudget ────────────────────────────────────────────── Scenario: Session utilization returns None when max_cost_usd is zero Given a session budget with max cost USD 0.0 When I query the session utilization Then the session utilization should be None Scenario: Session can_afford returns True when budget is unlimited Given a session budget with no spending cap When I check if the session can afford 999.99 Then the session can_afford result should be True Scenario: Session can_afford returns True when cost fits within budget Given a session budget with max cost USD 10.0 When I check if the session can afford 5.0 Then the session can_afford result should be True Scenario: Session can_afford returns False when cost exceeds budget Given a session budget with max cost USD 10.0 And I record a session cost of 8.0 When I check if the session can afford 5.0 Then the session can_afford result should be False Scenario: Session reset clears accumulated cost to zero Given a session budget with max cost USD 100.0 And I record a session cost of 42.5 When I reset the session budget Then the session total cost should be 0.0 # ── OrgCostAccumulator ───────────────────────────────────────────── Scenario: Org utilization returns None when max_cost_usd is zero Given an org accumulator for "org-zero" with max cost USD 0.0 When I query the org utilization Then the org utilization should be None Scenario: Org can_afford returns True when budget is unlimited Given an org accumulator for "org-unlimited" with no spending cap When I check if the org can afford 999.99 Then the org can_afford result should be True Scenario: Org can_afford returns True when cost fits within budget Given an org accumulator for "org-fits" with max cost USD 50.0 When I check if the org can afford 25.0 Then the org can_afford result should be True Scenario: Org can_afford returns False when cost exceeds budget Given an org accumulator for "org-over" with max cost USD 50.0 And I record an org cost of 45.0 When I check if the org can afford 10.0 Then the org can_afford result should be False Scenario: Org reset clears accumulated cost to zero Given an org accumulator for "org-reset" with max cost USD 100.0 And I record an org cost of 73.0 When I reset the org accumulator Then the org total cost should be 0.0 # ── ThreadSafeOrgCostAccumulator ─────────────────────────────────── Scenario: Thread-safe wrapper exposes org_id property Given a thread-safe org accumulator for "org-tsafe" When I read the thread-safe org_id Then the thread-safe org_id should be "org-tsafe" Scenario: Thread-safe wrapper allows setting max_cost_usd Given a thread-safe org accumulator for "org-setter" When I set the thread-safe max_cost_usd to 200.0 Then the thread-safe max_cost_usd should be 200.0 Scenario: Thread-safe can_afford delegates correctly Given a thread-safe org accumulator for "org-canafford" with max cost USD 30.0 When I check if the thread-safe accumulator can afford 15.0 Then the thread-safe can_afford result should be True Scenario: Thread-safe can_afford returns False when over budget Given a thread-safe org accumulator for "org-canafford2" with max cost USD 30.0 And I record a thread-safe cost of 28.0 When I check if the thread-safe accumulator can afford 5.0 Then the thread-safe can_afford result should be False Scenario: Thread-safe reset delegates correctly Given a thread-safe org accumulator for "org-tsreset" with max cost USD 100.0 And I record a thread-safe cost of 60.0 When I reset the thread-safe accumulator Then the thread-safe total cost should be 0.0