Summary
Wire the projection contract and forecast-capable progress bar API into the actual usage rows so forecast becomes visible in the menu card and provider detail UI.
This issue is the end-to-end integration step. It decides when forecast is shown on real rows, but it must consume the outputs from #6, #5, and #4 instead of recreating them.
Scope
- Use the projection contract from
#6 when a RateWindow has both windowMinutes and resetsAt.
- Feed forecast data into shared metric rows using the fields/helpers introduced in
#4.
- Show the forecast overlay using the progress bar API introduced in
#5.
- Show compact forecast copy next to the row without regressing existing pace information.
- Skip forecast for providers / rows that only expose textual reset descriptions and do not have enough timing info.
Non-goals
- No new forecast math.
- No new forecast formatting helpers.
- No new progress bar drawing primitives beyond using the API from
#5.
Files likely involved
Sources/CodexBar/MenuCardView.swift
Sources/CodexBar/PreferencesProviderDetailView.swift
Sources/CodexBar/StatusItemController+Menu.swift if shared wiring needs adjustment
Acceptance Criteria
- Forecast appears on real usage rows when timing info is available.
- Rows without concrete reset timing do not show guessed forecast.
- Forecast and pace can coexist without copy collisions or ambiguous semantics.
- Menu card and provider detail stay visually aligned.
Summary
Wire the projection contract and forecast-capable progress bar API into the actual usage rows so forecast becomes visible in the menu card and provider detail UI.
This issue is the end-to-end integration step. It decides when forecast is shown on real rows, but it must consume the outputs from
#6,#5, and#4instead of recreating them.Scope
#6when aRateWindowhas bothwindowMinutesandresetsAt.#4.#5.Non-goals
#5.Files likely involved
Sources/CodexBar/MenuCardView.swiftSources/CodexBar/PreferencesProviderDetailView.swiftSources/CodexBar/StatusItemController+Menu.swiftif shared wiring needs adjustmentAcceptance Criteria