Skip to content

Add opt-in SSH Codex cost reports - #3538

Open
ECuteri wants to merge 3 commits into
steipete:mainfrom
ECuteri:codex/remote-host-cost-reports
Open

Add opt-in SSH Codex cost reports#3538
ECuteri wants to merge 3 commits into
steipete:mainfrom
ECuteri:codex/remote-host-cost-reports

Conversation

@ECuteri

@ECuteri ECuteri commented Sep 10, 2026

Copy link
Copy Markdown

Codex cost reports currently cover the machine running CodexBar. A Mac therefore cannot show token estimates from a Linux/SSH host. This adds explicit per-host reports to the Codex menu and Usage & Spend, plus codexbar cost --provider codex --remote my-server.

Related to #3036. Ready for maintainer review. Feature-scope sign-off under VISION.md is still required before merge: include opt-in native polling in the first version, or land the one-shot CLI contract first. The current implementation includes native polling so maintainers can review the complete proposed behavior.

  • The remote CLI's new --summary-only --format json mode uses the existing cost scanner and sends numeric summaries, dates, time zone, provenance, and coverage. Native Codex history only; no transcripts, paths, session IDs, or account metadata are transferred.
  • SSH target deduplication preserves case-sensitive usernames while normalizing hostname case; the shared helper also protects live-session targets.
  • Native settings accept up to eight explicit SSH aliases. Reporting defaults off, uses batch SSH and existing host-key trust, refreshes at most every 15 minutes automatically, and keeps reports only in memory. Clearing the setting cancels requests and removes reports.
  • Each host keeps its own pricing, calendar, coverage, and failure state. Local charts, account rows, exports, and totals retain their existing scope. Reports are not summed because histories can overlap. Costs are API-equivalent estimates, not subscription charges.

Both ends need a CLI with summary support. An older/unavailable remote produces its own error while preserving successful reports. The existing cost JSON schema remains unchanged unless one of the new modes is explicitly selected.

Validation:

  • Upstream GitHub Actions currently awaits maintainer approval for this external contribution; the local checks below are independent of that pending CI run.
  • Updated against upstream 4cfb60692bdd8cfbba7a491e94bb121b59a835a5; resolved the exact-line architecture catalog conflict without relaxing its checks and moved the changelog entry to 0.59.1 Unreleased.
  • Current merged-head checks: make check (zero violations) and CODEXBAR_TEST_GROUP_SIZE=48 make test (1,070 selections / 23 groups; zero failures, retries, or timeouts).
  • The SSH fetcher, CLI cost command, remote cost store/view, and target-identity helper are unchanged from the runtime-verified 722cf1ca7; the real SSH and native-control evidence below remains applicable.
  • Final lint: make check (zero violations).
  • Previous feature-revision suite: CODEXBAR_TEST_GROUP_SIZE=48 make test — all 1,060 selections / 23 groups passed on the first attempt; zero retries or timeouts.
  • Linux ARM64: swift build --product CodexBarCLI in the official Swift 6.2.3 / Ubuntu Noble container.
  • Real Mac-to-DGX Spark SSH: successful reports and an unsupported-remote failure captured after the identity fix; see command output below. Original remote CLI restored after the test.
  • Real CLI negative cases: unsupported remote version preserves local output; incompatible flags and unsafe host values are rejected.
  • Native production controls in an isolated XCTest window: Apply, invalid input without losing saved reports, separate host failure, and disconnect verified through UI automation. Screenshot uses synthetic data.
  • Focused regression: 39 tests in four suites pass. New target-identity assertions failed before the shared-helper fix and pass after it.
  • Existing architecture-catalog anchors were relocated without changing their expected references; new Codex-specific branches include scope explanations.

Remote Codex cost controls with synthetic reports

Real SSH transport output after the fix (2026-09-10)

Verified source: 722cf1ca7d77dd96caa1cca8714b4f61a2ba347d. The Mac CLI calls the production RemoteCodexCostFetcher and system SSH. The DGX runs the same updated CLI source on Linux ARM64, built with Swift 6.2.3 / Ubuntu Noble. Both scanners read actual Codex history; there is no injected SSH runner or loader in this check.

Command (my-server substitutes for the private SSH alias):

codexbar cost --provider codex --days 1 --remote my-server --format json

The first invocation used the development CLI remotely and exited 0. The second used the restored remote v0.56.8 CLI and exited 1. Assertions verified two separate successful reports, positive numeric token/cost values, no aggregate, and successful local output retained when the remote failed.

Host labels are substituted and the four token/cost values per summary are redacted below. Other stdout fields are unchanged; the redaction strings are not the transport's actual numeric types.

{
  "success": {
    "exitCode": 0,
    "stdout": [
      {
        "summary": {
          "provenance": "listPriceEstimate",
          "provider": "codex",
          "historyCoverageIsEstablished": false,
          "historyDays": 1,
          "sessionTokens": "<redacted number>",
          "coverage": {
            "unmetered": 0,
            "priced": 1,
            "unpriced": 0,
            "estimated": 0
          },
          "sessionCostUSD": "<redacted number>",
          "currencyCode": "USD",
          "last30DaysTokens": "<redacted number>",
          "updatedAt": "2026-09-10T11:39:01Z",
          "bucketTimeZone": "Europe/Rome",
          "last30DaysCostUSD": "<redacted number>"
        },
        "host": "local-mac",
        "source": "local"
      },
      {
        "summary": {
          "provenance": "listPriceEstimate",
          "provider": "codex",
          "historyDays": 1,
          "historyCoverageIsEstablished": true,
          "sessionTokens": "<redacted number>",
          "coverage": {
            "unpriced": 0,
            "unmetered": 0,
            "estimated": 0,
            "priced": 1
          },
          "sessionCostUSD": "<redacted number>",
          "currencyCode": "USD",
          "last30DaysTokens": "<redacted number>",
          "bucketTimeZone": "Etc/UTC",
          "updatedAt": "2026-09-10T11:39:41Z",
          "last30DaysCostUSD": "<redacted number>"
        },
        "host": "dgx-spark",
        "source": "ssh"
      }
    ]
  },
  "unsupportedRemote": {
    "exitCode": 1,
    "stdout": [
      {
        "source": "local",
        "summary": {
          "sessionCostUSD": "<redacted number>",
          "sessionTokens": "<redacted number>",
          "last30DaysCostUSD": "<redacted number>",
          "historyCoverageIsEstablished": false,
          "coverage": {
            "unpriced": 0,
            "unmetered": 0,
            "priced": 1,
            "estimated": 0
          },
          "provider": "codex",
          "last30DaysTokens": "<redacted number>",
          "bucketTimeZone": "Europe/Rome",
          "historyDays": 1,
          "currencyCode": "USD",
          "updatedAt": "2026-09-10T11:39:42Z",
          "provenance": "listPriceEstimate"
        },
        "host": "local-mac"
      },
      {
        "source": "ssh",
        "error": "Could not read remote costs. Check SSH and that the remote CodexBar CLI supports --summary-only.",
        "host": "dgx-spark"
      }
    ]
  }
}

Captured verification output:

PASS: real Mac CLI -> system SSH -> Linux ARM64 CLI -> native Codex scanner; two successful, separate reports.
PASS: original remote CLI restored.
PASS: older remote CLI produces nonzero exit and a scoped error; successful local summary remains in stdout.
PASS: sanitized command output saved; no credentials, IP addresses, usernames, or conversation content included.

Fresh and upgraded preference initialization stays opt-in

The existing native settings test now initializes the production SettingsStore from dictionary-backed defaults for both cases: empty preferences, and legacy preferences with agent sessions enabled and an existing SSH host. This tests preference loading in isolation; it is not a claim of an OS-level installation or upgrade test.

In both cases the new cost-host setting remains empty, refreshing it (including force refresh) starts no task and leaves no reports, and the legacy session setting is preserved. The existing native UI screenshot above uses a synthetic loader and demonstrates presentation and Apply/disconnect interactions only; transport proof is the real SSH output above.

✔ Test "remote cost settings stay off for fresh and upgraded preferences" with 2 test cases passed after 0.087 seconds.
✔ Test run with 39 tests in 4 suites passed after 0.110 seconds.

Runnable focused checks:

CODEXBAR_SUPPRESS_TEST_KEYCHAIN_ACCESS=1 \
CODEXBAR_TEST_CODEX_FILE_ISOLATION=1 \
CODEXBAR_TEST_SESSION_FILE_ISOLATION=1 \
swift test --filter 'RemoteCodexCostFetcherTests|RemoteCodexCostStoreTests|TailscaleSessionTests|AgentSessionMenuDescriptorTests'

Native Apply regression check on the freshly rebuilt isolated proof app (production editor and store, synthetic cost loader): entering Alice@server, alice@server, Alice@SERVER and pressing Return leaves both distinct accounts visible. The test app's settings/report receipt was:

{"hosts":"Alice@server, alice@server","reports":"2","errors":"0"}

Mac cost reports cannot currently show native Codex history from a remote
Linux or macOS host. Add separate per-host estimates to the native menu and
Usage & Spend, with explicit SSH aliases and a CLI --remote mode.

Reuse the existing cost scanner and send only compact summary JSON. Preserve
host calendars, pricing provenance, unknown costs, and incomplete coverage.
Keep local totals independent, fail per host, and cancel or discard reports
when the configured hosts or history window change. Do not sum overlapping
histories or copy raw transcripts, session identifiers, or account metadata.

Document the opt-in protocol and updated-CLI requirement. Extend existing
tests for validation, scoped failures, cancellation, menu integration, and
native controls; relocate unchanged architecture-catalog source anchors.

Validation: make check passed with zero violations; make test passed all
89 groups without retries or timeouts. Linux ARM64 CLI build, real Mac-to-DGX
SSH reports, and native Apply/error/disconnect interactions also passed.

Requires updated CodexBar on the remote host. Reports remain API-equivalent
estimates and deliberately do not combine overlapping host histories.

Refs: steipete#3036
@clawsweeper

clawsweeper Bot commented Sep 10, 2026

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added 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. labels Sep 10, 2026
@clawsweeper

clawsweeper Bot commented Sep 10, 2026

Copy link
Copy Markdown

Codex review: blocked before merge. Reviewed September 11, 2026, 6:08 AM ET / 10:08 UTC (Revision 3).

ClawSweeper review

What this changes

Adds opt-in SSH reports for remote Codex cost estimates in the CLI, menu, and Usage & Spend, keeping each host separate from local totals.

Merge readiness

Blocked before merge - 4 items remain

Keep open: this remains a distinct, useful contribution with sufficient SSH runtime proof. One refresh defect remains, and the native polling scope still requires product approval.

Priority: P2
Reviewed head: 145eb1ed538489b252207c4bfa6bf3a9df1cbe4c
Owner decision: Required. See Decision needed.

Review scores

Measure Result What it means
Overall readiness 🦐 gold shrimp (3/6) Strong transport proof supports the feature, but the confirmed forced-refresh defect keeps implementation readiness below the normal mergeable tier.
Proof confidence 🦞 diamond lobster (5/6) Sufficient (terminal): The supplied real Mac-to-Linux SSH transcript exercises the production fetcher and both native-history scanners, showing separate successful summaries and preserved local output on unsupported-remote failure. Those production paths are unchanged from the verified revision; the inspected synthetic native screenshot and preference tests are supplemental.
Patch quality 🦐 gold shrimp (3/6) 1 actionable review finding remain.

Verification

Check Result Evidence
Real behavior Verified Sufficient (terminal): The supplied real Mac-to-Linux SSH transcript exercises the production fetcher and both native-history scanners, showing separate successful summaries and preserved local output on unsupported-remote failure. Those production paths are unchanged from the verified revision; the inspected synthetic native screenshot and preference tests are supplemental.
Evidence reviewed 8 items Repository policy: Read the full root AGENTS.md and VISION.md. No nested AGENTS.md or maintainer-notes directory was found for the changed paths. Applied provider isolation, settings safety, concurrency, and focused-validation guidance; builds and tests were not executed during this read-only review.
Feature approval boundary: VISION.md requires sign-off for new features. The owner favors a narrow one-shot starting point in #3036 (comment) and explicitly defers persistent app/background behavior pending approval in #1566 (comment). The current PR body acknowledges that approval remains outstanding.
Introduced forced-refresh defect: The active-task guard returns before considering force. Dashboard Refresh passes force=true, but an already running automatic request retains force=false and no follow-up is scheduled. This corroborates #3538 (comment).
Findings 1 actionable finding [P2] [P2] Preserve forced refresh requests during an active poll
Security None None.

How this fits together

CodexBar estimates token costs from locally recorded usage history. This change asks an explicitly configured SSH host to run its own scanner and returns compact summaries for display alongside local usage.

flowchart LR
  A[Explicit SSH hosts] --> B[CLI request or native refresh]
  B --> C[System SSH authentication]
  C --> D[Remote Codex history scanner]
  D --> E[Validate compact summary]
  E --> F[Separate host estimates or errors]
  G[Local usage history] --> H[Unchanged local totals]
Loading

Decision needed

Question Recommendation
Should the first SSH cost release include recurring native polling, or be narrowed to explicitly invoked CLI reports? Approve CLI-first scope: Land the compact one-shot reporting contract after narrowing the branch, and defer persistent native polling.

Why: VISION.md requires feature sign-off, and the owner's related discussion specifically deferred persistent native behavior; runtime proof cannot resolve that product choice.

Before merge

  • [P2] Preserve forced refresh requests during an active poll (P2) - Opening the dashboard starts a non-forced poll. If the user clicks Refresh while that request is running, this guard returns before considering force, so the remote CLI never receives --refresh and may return cached data despite the explicit action. Queue a forced follow-up or cancel and restart, with coverage for a blocked in-flight loader. This was also visible at the previous reviewed revision and was missed in that review.
  • Resolve merge risk (P1) - Persisted host preferences enable recurring SSH commands after opt-in; approval of this native polling scope remains unresolved.
  • Complete next step (P2) - Obtain approval for CLI-only versus native polling scope; if retaining native polling, fix forced refresh during an active request and add focused regression coverage.
  • Resolve maintainer decision - Resolve the maintainer decision shown above before merge.

Findings

  • [P2] [P2] Preserve forced refresh requests during an active poll — Sources/CodexBar/RemoteCodexCostStore.swift:52-53
Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Production and test delta Production +537/-4 lines; tests +408/-32 lines The stated feature spans transport, CLI, native settings, and presentation, with regression coverage and test-catalog relocation.

Root-cause cluster

Relationship: fixed_by_candidate
Canonical: #3036
Summary: This branch implements the requested per-host CLI reporting direction while proposing additional native polling.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge-risk options

Maintainer options:

  1. Decide the mitigation before merge
    Prefer an approved CLI-first summary contract with separate host estimates; include native polling only with explicit scope approval and reliable forced-refresh handling.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Technical review

Best possible solution:

Prefer an approved CLI-first summary contract with separate host estimates; include native polling only with explicit scope approval and reliable forced-refresh handling.

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

Yes, by source inspection of the PR: start an automatic poll, then request force=true before it finishes; the active-task guard discards the forced request. No execution was performed.

Is this the best way to solve the issue?

Partly: compact summaries reuse the scanner and avoid raw-log retention and double-counting, but the scheduler must preserve explicit refresh requests and the native scope needs approval.

Full review comments:

  • [P2] [P2] Preserve forced refresh requests during an active poll — Sources/CodexBar/RemoteCodexCostStore.swift:52-53
    Opening the dashboard starts a non-forced poll. If the user clicks Refresh while that request is running, this guard returns before considering force, so the remote CLI never receives --refresh and may return cached data despite the explicit action. Queue a forced follow-up or cancel and restart, with coverage for a blocked in-flight loader. This was also visible at the previous reviewed revision and was missed in that review.
    Confidence: 0.99
    Late finding: first raised on code an earlier review cycle already covered.

Overall correctness: patch is incorrect
Overall confidence: 0.96

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 4cfb60692bdd.

Labels

Label changes:

  • add rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • add status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (terminal): The supplied real Mac-to-Linux SSH transcript exercises the production fetcher and both native-history scanners, showing separate successful summaries and preserved local output on unsupported-remote failure. Those production paths are unchanged from the verified revision; the inspected synthetic native screenshot and preference tests are supplemental.
  • remove status: 👀 ready for maintainer look: Current PR status label is status: ⏳ waiting on author.
  • remove rating: 🐚 platinum hermit: Current PR rating is rating: 🦐 gold shrimp, so this older rating label is no longer current.

Label justifications:

  • P2: This is a bounded opt-in feature with a normal-priority refresh defect and no demonstrated outage of existing workflows.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (terminal): The supplied real Mac-to-Linux SSH transcript exercises the production fetcher and both native-history scanners, showing separate successful summaries and preserved local output on unsupported-remote failure. Those production paths are unchanged from the verified revision; the inspected synthetic native screenshot and preference tests are supplemental.
  • proof: sufficient: Contributor real behavior proof is sufficient. The supplied real Mac-to-Linux SSH transcript exercises the production fetcher and both native-history scanners, showing separate successful summaries and preserved local output on unsupported-remote failure. Those production paths are unchanged from the verified revision; the inspected synthetic native screenshot and preference tests are supplemental.

Evidence

What I checked:

Likely related people:

  • steipete: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)
  • Yuxin Qiao: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)

Rank-up moves

Optional improvements that raise the rating; they are not merge blockers.

  • Preserve a forced refresh requested during an active automatic poll and add a regression that holds the first loader open.

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
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.

Workflow

  • 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.

History

Review history (2 earlier review cycles)
  • reviewed 2026-09-10T11:20:33.092Z sha f1af39d :: needs real behavior proof before merge. :: [P2] Preserve case-sensitive usernames when deduplicating SSH targets
  • reviewed 2026-09-10T11:56:38.500Z sha 722cf1c :: blocked before merge. :: none

Remote cost configuration reused whole-target lowercase deduplication, so
Alice@server and alice@server collapsed into one account. Normalize only
the hostname in the shared SSH helper, preserving distinct usernames for
both remote cost reports and live sessions.

Extend the existing target checks to retain both accounts while still
deduplicating hostname case variants. Exercise empty and legacy stored
preferences to confirm remote costs require separate opt-in and preserve
existing agent-session settings.

Validation: the two identity regressions failed before the fix and pass
after it; 39 focused tests, make check, Linux ARM64 CLI build, real Mac-to-DGX
SSH success/failure checks, and native Apply persistence all pass.
Full make test (group size 48): all 1,060 selections / 23 groups passed
on the first attempt, with no retries or timeouts.

The PR remains a draft pending maintainer approval of the CLI/native
polling scope. No production app or remote CLI was permanently replaced.
@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Sep 10, 2026
Resolve the architecture catalog conflict by retaining upstream's current
constructs and relocating unchanged source anchors for the remote-cost
additions. Preserve every existing expectation and suppression rule.

Move the pending feature's changelog entry to the new unreleased version.
Group observation reads using the existing tuple pattern so the combined
UsageStore changes stay within the repository's file-length limit.

Validation: make check passes with zero violations. The full serial
make test run passes all 1070 selections across 23 groups on the first
attempt, without retries or timeouts.

The remote transport and opt-in contract remain unchanged. Maintainer
feature-scope approval is still required before merging upstream.
@ECuteri
ECuteri marked this pull request as ready for review September 11, 2026 09:57
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 11, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-11T10:03:44.125562Z 145eb1e Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@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: 145eb1ed53

ℹ️ 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".

self.hosts = hosts
self.historyDays = historyDays
}
guard !hosts.isEmpty, self.task == nil else { return }

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 Honor forced refreshes while a poll is running

When the menu-open or dashboard-appearance poll is still in progress, clicking Usage & Spend’s Refresh button calls this method with force: true, but this guard returns before examining force because self.task is non-nil. The in-flight loader was started with force: false, so it does not pass --refresh to the remote CLI and may return cached scan data despite the explicit refresh; queue a forced follow-up or cancel and restart the current poll.

Useful? React with 👍 / 👎.

@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Sep 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal priority bug or improvement with limited blast radius. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant