Skip to content

Add daily cost and plan usage history for OpenCode Go#2296

Merged
steipete merged 10 commits into
steipete:mainfrom
kentoku24:claude/opencode-go-usage-graph-05a8a1
Jul 18, 2026
Merged

Add daily cost and plan usage history for OpenCode Go#2296
steipete merged 10 commits into
steipete:mainfrom
kentoku24:claude/opencode-go-usage-graph-05a8a1

Conversation

@kentoku24

@kentoku24 kentoku24 commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds a "Plan Usage" row (hover-expands into 5-hour / weekly / monthly rate-limit history, 3 tabs) for the OpenCode Go provider, matching Codex/Claude's structure.
  • Adds a "Cost" row (hover-expands into a daily $ spend chart, reusing the same CostHistoryChartMenuView Codex/Claude use) sourced from the local opencode-go SQLite history at ~/.local/share/opencode/opencode.db.
  • The web-sourced fetch strategy best-effort enriches its rolling/weekly percentages with the local daily buckets, since opencode.ai's web API has no daily-granularity endpoint — but skips that local read when the user explicitly selects Web-only source mode, so that choice is actually honored.
  • Fixes a couple of latent bugs found while wiring this up: the merged "Overview" row was showing the Cost chart instead of Plan Usage for OpenCode Go, and the daily chart's request count could overcount turns whose cost is split across multiple step-finish parts.

Screenshots

Plan usage pane
スクリーンショット 2026-07-17 1 47 34
Cost pane
スクリーンショット 2026-07-17 1 47 28
Inline graph
スクリーンショット 2026-07-18 22 59 51

Test plan

  • swift build (CodexBar, CodexBarCore, CodexBarCLI) — clean
  • New unit tests: local SQLite day-bucketing/window clamp, request-count dedup, Overview-row submenu routing, Plan Usage series for opencodego, menu row ordering (Usage pane → Plan Usage → Cost)
  • Full swift test suite — all tests touching the changed files pass; the only failures are pre-existing timing-sensitive PTY/Keychain tests unrelated to this diff
  • swiftformat --lint / swiftlint clean on all touched files
  • Manually verified in a packaged, signed CodexBar.app build against a real opencode-go local database

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal priority bug or improvement with limited blast radius. labels Jul 18, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d6c1a90b91

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

case .mistral:
snapshot?.mistralUsage?.toCostUsageTokenSnapshot(historyDays: self.settings.costUsageHistoryDays)
case .opencodego:
snapshot?.opencodegoUsage?.toCostUsageTokenSnapshot(historyDays: self.settings.costUsageHistoryDays)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Suppress empty OpenCode Go cost snapshots

When OpenCode Go comes from the web strategy in explicit Web mode, or when the local database has no cost rows, opencodegoUsage is still present but daily is empty because no local cost history was read. This new provider-derived projection is non-nil anyway, so refreshTokenUsage records it as a successful token snapshot and the menu can render a Cost row with only “Today: — / Last N days: —” while makeCostHistorySubmenu returns nil. Gate this on !opencodegoUsage.daily.isEmpty or surface the no-data state so Web-only/no-history users do not get a dead Cost row.

Useful? React with 👍 / 👎.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Jul 18, 2026
@clawsweeper

clawsweeper Bot commented Jul 18, 2026

Copy link
Copy Markdown

Codex review: needs real behavior proof before merge. Reviewed July 18, 2026, 4:22 PM ET / 20:22 UTC.

Summary
Adds OpenCode Go plan-utilization history and local SQLite-backed daily cost history to provider fetching, menu rendering, tests, and documentation.

Reproducibility: not applicable. This PR adds a provider capability rather than reporting a broken existing contract. The remaining validation question is whether the new source-mode behavior runs as documented in a packaged app.

Review metrics: 2 noteworthy metrics.

  • Patch surface: 21 files affected; 778 added, 71 removed. The provider feature spans fetching, persisted snapshot plumbing, menu behavior, tests, and documentation, so source-mode proof is more valuable than another unit-only check.
  • Review follow-ups: 10 commits; 4 prior review comments addressed. The branch incorporated targeted fixes for empty history, inline-only display, menu routing, and source-history isolation.

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🦐 gold shrimp
Patch quality: 🦞 diamond lobster
Result: blocked until stronger real behavior proof is added.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P2] Add redacted packaged-app proof for Auto local fallback and explicit Web-only mode, including diagnostics that establish whether the local database was read.

Proof guidance:

  • [P1] Needs stronger real behavior proof before merge: The attached screenshots convincingly show populated Plan Usage, Cost, and inline UI, but they do not show the required after-fix source-mode behavior: Auto fallback with local data and explicit Web mode suppressing the local read. Add redacted packaged-app screenshots plus terminal output or logs for those paths; updating the PR body should trigger re-review, or a maintainer can comment @clawsweeper re-review. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Risk before merge

  • [P2] The attached screenshots do not verify that explicit Web mode avoids local SQLite reads or that Auto fallback keeps device-wide local history separate from workspace-scoped web history; a regression here could change what existing source-mode users see.

Maintainer options:

  1. Add source-mode runtime proof (recommended)
    Capture redacted packaged-app evidence or diagnostic output showing Auto fallback with local history and explicit Web mode without a local database read before merge.
  2. Accept the source-mode proof gap
    Merge based on the focused tests and visible screenshots while accepting that the two compatibility-sensitive runtime paths were not independently demonstrated.

Next step before merge

  • [P1] The remaining blocker is contributor-supplied real-runtime compatibility proof, not a narrow mechanical repair ClawSweeper can perform.

Security
Cleared: The diff reads a user-local SQLite usage database and changes Swift provider/menu code, but introduces no dependency, workflow, permission, secret-handling, or supply-chain change.

Review details

Best possible solution:

Keep the documented source boundary: expose local daily cost only from the local fallback path, preserve Web-only behavior without local reads, and merge once packaged-app proof demonstrates both paths.

Do we have a high-confidence way to reproduce the issue?

Not applicable: this PR adds a provider capability rather than reporting a broken existing contract. The remaining validation question is whether the new source-mode behavior runs as documented in a packaged app.

Is this the best way to solve the issue?

Yes in design: reusing the established plan-history and cost-chart surfaces while keeping workspace-scoped web data separate from device-wide local history is the narrow maintainable path. The final runtime boundary still needs direct evidence.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 841de0de552c.

Label changes

Label justifications:

  • P2: This is a provider-specific usage and cost-history feature with a concrete compatibility-sensitive source-mode boundary but limited blast radius.
  • merge-risk: 🚨 compatibility: The PR changes how existing OpenCode Go Auto and Web source modes obtain and display history, so an incorrect boundary could alter established user-visible behavior.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦐 gold shrimp and patch quality is 🦞 diamond lobster.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: The attached screenshots convincingly show populated Plan Usage, Cost, and inline UI, but they do not show the required after-fix source-mode behavior: Auto fallback with local data and explicit Web mode suppressing the local read. Add redacted packaged-app screenshots plus terminal output or logs for those paths; updating the PR body should trigger re-review, or a maintainer can comment @clawsweeper re-review. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The attached screenshots convincingly show populated Plan Usage, Cost, and inline UI, but they do not show the required after-fix source-mode behavior: Auto fallback with local data and explicit Web mode suppressing the local read. Add redacted packaged-app screenshots plus terminal output or logs for those paths; updating the PR body should trigger re-review, or a maintainer can comment @clawsweeper re-review.
Evidence reviewed

What I checked:

  • Provider capability implementation: The branch enables OpenCode Go token-cost support and supplies a no-data message that identifies the local OpenCode database path used for daily history. (Sources/CodexBarCore/Providers/OpenCodeGo/OpenCodeGoProviderDescriptor.swift:33, ee5d6d1b779b)
  • Source-isolation follow-up: A final corrective commit explicitly isolates OpenCode Go history semantics after the review raised the risk of connecting workspace-scoped web samples with device-wide local samples. (Sources/CodexBarCore/Providers/OpenCodeGo/OpenCodeGoUsageSnapshot.swift:10, 825e2f868d31)
  • Documented source boundary: The updated OpenCode documentation states that successful web usage stays workspace-scoped, local device-wide costs are not blended into it, and explicit Web mode does not read the local database. (docs/opencode.md:32, e62270fc812c)
  • Review continuity: The prior review's concrete submenu and empty-history findings were addressed by follow-up commits; the current outstanding gate is real-runtime proof for the source-mode boundary rather than a remaining line-level defect. (Sources/CodexBar/UsageStore+TokenCost.swift:403, c2e0bbdcab50)
  • Attached UI evidence: The PR includes three screenshots showing populated Plan Usage, Cost, and inline graph views, which support the visible menu result but do not demonstrate explicit Web-mode local-read suppression or Auto fallback source separation. (ee5d6d1b779b)

Likely related people:

  • steipete: Authored the final source-isolation, request-count, documentation, and spend-source follow-up commits on the branch, making them the strongest routing candidate for the current OpenCode Go behavior. (role: recent area contributor; confidence: high; commits: e62270fc812c, 9f82b769f2f6, 825e2f868d31; files: Sources/CodexBarCore/Providers/OpenCodeGo/OpenCodeGoProviderDescriptor.swift, Sources/CodexBarCore/Providers/OpenCodeGo/OpenCodeGoUsageSnapshot.swift, Sources/CodexBarCore/Providers/OpenCodeGo/OpenCodeGoLocalUsageReader.swift)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (8 earlier review cycles)
  • reviewed 2026-07-18T12:17:06.604Z sha d6c1a90 :: needs real behavior proof before merge. :: [P2] Suppress empty OpenCode Go cost snapshots
  • reviewed 2026-07-18T12:42:22.851Z sha d6c1a90 :: needs real behavior proof before merge. :: [P2] Suppress empty OpenCode Go cost snapshots
  • reviewed 2026-07-18T12:52:07.303Z sha c2e0bbd :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-18T13:50:40.925Z sha 5451723 :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-18T14:02:58.825Z sha 5451723 :: needs real behavior proof before merge. :: [P2] Preserve Groq’s reachable Cost submenu
  • reviewed 2026-07-18T14:12:32.091Z sha 2583854 :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-18T15:00:34.867Z sha 59897de :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-18T20:06:08.856Z sha 825e2f8 :: needs real behavior proof before merge. :: none

Mirrors the Codex/Claude menu structure: the top rate-limit pane stays
submenu-free, a "Plan Usage" row hover-expands into 5-hour/weekly/monthly
history tabs, and a "Cost" row hover-expands into a daily $ chart sourced
from the local opencode-go SQLite history (~/.local/share/opencode/opencode.db).

The web-sourced fetch strategy best-effort enriches its rolling/weekly
percentages with the local daily buckets (opencode.ai has no daily-
granularity endpoint), but skips that local read entirely when the user
explicitly selects Web-only source mode.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@clawsweeper clawsweeper Bot added proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. labels Jul 18, 2026
Web-only source mode and machines without a readable local database
leave opencodegoUsage present but daily empty, which previously still
produced a non-nil CostUsageTokenSnapshot and surfaced a Cost row with
no history to show. Return nil until daily entries exist instead.

Addresses PR review feedback on steipete#2296.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@kentoku24
kentoku24 force-pushed the claude/opencode-go-usage-graph-05a8a1 branch from d6c1a90 to c2e0bbd Compare July 18, 2026 12:49

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c2e0bbdcab

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines 168 to 169
tokenCostMenuSectionEnabled: !UsageMenuCardView.Model.usesProviderCostHistoryAsPrimaryDashboard(target) &&
self.settings.costSummaryShowsSubmenu(for: target),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Include OpenCode Go in inline cost rendering

When the user has Cost summary set to Inline only, costSummaryShowsSubmenu(for:) is false, so this new gate disables the generic Cost row for OpenCode Go even when opencodegoUsage.daily is populated. The only remaining inline cost renderer is the allow-list in InlineUsageDashboardContent.inlineUsageDashboard ([.codex, .claude, .vertexai, .bedrock, .cursor]), which does not include .opencodego, so OpenCode Go cost history disappears entirely until the user switches to Submenu/Both. Add OpenCode Go to the inline cost dashboard path or keep its cost row enabled in inline-only mode.

Useful? React with 👍 / 👎.

opencodego was missing from the shared CostUsageTokenSnapshot inline
dashboard path (matching Codex/Claude/Vertex/Bedrock/Cursor), so users
with Cost summary set to "Inline only" saw no OpenCode Go cost data at
all: the Cost row is suppressed in that style, and there was no inline
fallback either. Adds opencodego to that path so it now matches those
providers exactly, including showing both the Cost row and the inline
chart together in "Both" style.

Addresses PR review feedback on steipete#2296.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Jul 18, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 54517230ac

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

// dedicated top-pane submenu (openai/mistral) skip the generic "Cost" row; other
// `tokenCostRequiresProviderSnapshot` providers (e.g. opencodego) show real rate-limit
// bars in the top pane instead and need the dedicated row to surface cost at all.
tokenCostMenuSectionEnabled: !UsageMenuCardView.Model.usesProviderCostHistoryAsPrimaryDashboard(target) &&

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep Groq's cost submenu reachable

When the selected provider is Groq and Cost summary is set to Submenu/Both with daily history, this predicate is false because usesProviderCostHistoryAsPrimaryDashboard(.groq) returns true. Groq is not handled by the top-pane submenu path in makeUsageSubmenu (it only special-cases OpenAI/Mistral/Zai), so the sectioned menu gets tokenUsage == nil, no menuCardCost row is added, and the standalone Cost item is skipped because the web items were already handled; the Groq cost history chart becomes unreachable. Keep Groq out of this gate or route its usage row to makeCostHistorySubmenu.

Useful? React with 👍 / 👎.

@clawsweeper clawsweeper Bot added the merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. label Jul 18, 2026
kentoku24 and others added 6 commits July 18, 2026 23:09
tokenCostMenuSectionEnabled reused usesProviderCostHistoryAsPrimaryDashboard
to exclude openai/mistral from the generic "Cost" row. That predicate is
shared with an unrelated concern (inline-dashboard eligibility) and later
gained .groq for its own reasons, which would have silently excluded groq
from this row too. Replace it with an explicit openai/mistral check so this
gate no longer tracks membership changes made for other purposes.

In practice groq's tokenCost.supportsTokenCost is false, so its Cost row
was already unreachable independent of this gate — verified with a test
locking in that groq's cost data stays visible via the inline dashboard
regardless of how this predicate is defined.

Addresses PR review feedback on steipete#2296.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The name implied a provider-native top-pane submenu (matching
hasOpenAIAPIUsageSubmenu's naming), but opencodego satisfies this via
its collapsible "Cost" row, not a top-pane submenu. Unlike the two
predicate-reuse bugs fixed earlier in this PR, this reuse of
tokenCostRequiresProviderSnapshot is intentional: any provider whose
cost is sourced by projecting a UsageSnapshot field can only render
that cost through addMenuCardSections's sectioned layout, so the two
concepts are genuinely coupled here. Renamed to say what it actually
gates and documented why the reuse is safe, so a future reader doesn't
mistake it for the same bug class.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 825e2f868d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

private func shouldRecordPlanUtilizationHistory(for provider: UsageProvider) -> Bool {
switch provider {
case .codex, .claude, .antigravity:
case .codex, .claude, .antigravity, .opencodego:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Scope OpenCode Go history by source and workspace

When Auto mode falls back from workspace-scoped web usage to the device-wide local estimate, or the configured workspace changes, these samples are all persisted because both OpenCode Go paths produce UsageSnapshots with identity: nil; resolvePlanUtilizationAccountKey therefore puts them in the same unscoped bucket. The Plan Usage chart consequently connects percentages belonging to different scopes/accounts. Attach a stable workspace/source owner to the snapshot, or avoid recording identityless OpenCode Go samples.

Useful? React with 👍 / 👎.

@Chipagosfinest Chipagosfinest left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adversarial release-gate verdict: keep this separate from #2307 and do not merge the current head yet. The latest unresolved source/workspace ownership finding at #2296 (comment) can connect plan-history samples from different scopes because both OpenCode Go paths persist identityless snapshots into the same bucket. The earlier UI regressions appear addressed, but this ownership boundary plus the Auto-mode local-enrichment decision and Web-only/Inline-only runtime proof should be closed before merge. Exact-head macOS CI is also still queued.

@Chipagosfinest

Chipagosfinest commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Update for current head ee5d6d1b: the deterministic dashboard source-contract failure is fixed by test: include OpenCode Go in spend sources; its replacement CI is pending. The source/workspace ownership finding still applies to plan-utilization history: both web and local OpenCode Go snapshots retain identity: nil, and recordPlanUtilizationHistorySample therefore reads/writes providerBuckets.histories(for: nil). Commit 825e2f86 correctly stops blending local daily cost into successful web snapshots, but Auto can still append workspace-scoped web percentages and later device-wide local percentages to the same unscoped plan series. That semantic boundary, plus packaged Auto/Web runtime proof, remains the merge hold.

@steipete
steipete merged commit f2145b2 into steipete:main Jul 18, 2026
9 checks passed
@steipete

Copy link
Copy Markdown
Owner

Merged as f2145b2943b6935afa496a88d2bfc3a3081097c2.

Verification:

  • Reviewed the full untrusted diff and follow-up maintainer changes. Network access remains limited to the existing official opencode.ai hosts; no new dependency, executable, telemetry, or credential path was added.
  • swift test --filter 'OpenCodeGo|UsageStorePlanUtilizationTests|PlanUtilizationHistoryChartMenuViewTests': 156 tests in 9 suites passed.
  • swift test --filter OpenCodeGoLocalUsageReaderTests: 10 tests passed, including multi-step request counting and device-local midnight bucketing.
  • swift test --filter SpendDashboardModelTests: 28 tests passed after adding OpenCode Go to the cost-capable provider contract.
  • make check: passed; SwiftFormat reported 0 files requiring formatting and SwiftLint reported 0 violations.
  • Final whole-branch autoreview: no accepted/actionable findings.
  • Exact-head CI run 29659508844 for ee5d6d1b779b57f571f19fa99a7b7c67257756e9: lint, Linux arm64/x64/musl, both macOS test shards, aggregate gate, and GitGuardian all passed.

Maintainer fixes preserve step-level request timestamps, keep successful workspace-scoped web snapshots free of device-wide local cost data, and store the monthly plan lane under the provider-neutral monthly series rather than Claude's opus series.

Live OpenCode Go account/database verification was unavailable, as expected for this review. No real provider probe or Keychain-backed signed-bundle test was run; parser, SQLite fixture, snapshot, menu-model, plan-history, and full CI coverage were used instead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P2 Normal priority bug or improvement with limited blast radius. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants