Skip to content

Serve existing accounts with private dashboard defaults - #3890

Open
roboclaw-bot wants to merge 3 commits into
steipete:mainfrom
roboclaw-bot:openclaw/codexbar-private-accounts-publish-20260923
Open

roboclaw-bot wants to merge 3 commits into
steipete:mainfrom
roboclaw-bot:openclaw/codexbar-private-accounts-publish-20260923

Conversation

@roboclaw-bot

@roboclaw-bot roboclaw-bot commented Sep 23, 2026 •

Copy link
Copy Markdown

Summary

Follow-up to #3832, addressing the maintainer’s privacy-default and whole-adapter-failure feedback without changing account management or credentials.

  • Add opt-in codexbar serve --all-accounts, projecting existing visible Codex profiles and configured token accounts into dashboard accounts[].
  • Expanded snapshots are private by default regardless of app settings: neutral numbered labels, no identity (including the selected provider row), and generic account/adapter errors. --identity full explicitly restores identities, aliases and error details; --identity redacted retains masked domains/plan labels but not aliases/raw errors.
  • Keep a configured Claude adapter authoritative: failures omit accounts and report accountsError; a successful empty list never falls back to token accounts. Independent provider-level usage remains available.
  • Preserve selected-account projection/cache alignment and healthy siblings at deadlines. Ordinary serve, one-shot dashboard, /usage, /cost, transport/auth and credential-store behavior remain unchanged.

Requested by and co-authored with @VACInc.

Work sessions

Latest follow-up: Claude-swap collection precedence

Source: 418c815. When the enabled Claude adapter owns the dashboard account list, keep ordinary selected/ambient Claude collection for provider-level data, but do not fetch non-selected configured Claude token accounts whose rows would be discarded. Disabling the adapter restores normal opt-in expansion; other providers are unchanged. Adapter failure and successful-empty authority remain unchanged. There is no new UI or JSON shape change.

Actual provider-fetch regression

A compiled regression enters serveUsageOutput, its detached provider coordinator, the real fetchUsageOutputs account loop, and ClaudeUsageFetcher. Task-local synthetic credential/OAuth responses are installed inside the worker, and the actual usage-fetch callback records account IDs. This is collector/provider-path proof, not a new public-HTTP capture or live provider probe. Validation ran in a network-disabled disposable container with test credential/session isolation.

Two synthetic token accounts are configured, with the second active. With the old collection policy (8a2263b plus the test seam), adapter-on expanded collection fetched both accounts and the regression failed: output.payload.count: 2; expected: 1. After the guard, all four combinations pass:

Expanded mode Claude adapter Normal token-account collector queries
Off Off Second/selected account only
Off On Second/selected account only
On Off First and second accounts
On On Second/selected account only; the adapter still supplies the full displayed list

Additional assertions preserve IBM Bob expansion and reject adapter eligibility when Claude is disabled. Existing privacy, adapter-failure/empty-success, inventory and deadline regressions also pass.

Local final verification: 24 focused tests / 4 suites, full 96 selections / 8 groups first-pass with zero retries/timeouts, strict SwiftLint including the new test file, canonical SwiftFormat, and final-follow-up autoreview through P2 passed. Full macOS make check also passed on the exact new source (the local Linux aggregate cannot run macOS plutil).

PASS — exact-source macOS CI: https://github.com/roboclaw-bot/CodexBar/actions/runs/35820172634. Workflow 6159885 checked out source 418c815 explicitly. Full make check, build/discovery, focused regressions/architecture and plugin-engine A/B passed. All 1,338 discovered selections were exercised (683 + 655; 89/89 + 88/88 groups) with zero failures, retries or timeouts. The new Claude-swap collection regression passed on macOS. Earlier runs below apply to their labeled source revisions.

ClawSweeper revision 7, exact source 418c815: no actionable code/security findings; proof accepted. Its merge-readiness status remains blocked pending a maintainer decision accepting the overall serve-only feature scope, separate from the completed collection-guard fix. This does not waive the upstream fork-CI approval gate or constitute merge authorization.

Inventory-warning follow-up (8a2263b)

Source: 8a2263b. Expanded snapshots now warn Account list incomplete if managed Codex inventory is unreadable or configured token-account IDs are missing from the collected rows. Healthy rows remain visible. Represented account failures/timeouts do not masquerade as missing inventory. The warning is generic in every identity mode; ordinary snapshots and raw /usage JSON are unchanged. Configured Claude adapter results still take precedence, including empty success.

Runtime proof

Compared the previous commit d56adea and this commit using the same malformed managed-account store and two synthetic profile homes. The prior server silently returned both visible profiles; the new server returns the same healthy usage plus the inventory warning. The production renderer is unchanged. Both screenshot captures show the normal stale badge because captured snapshots have aged; it is independent of the new warning.

A network-isolated disposable Linux container exercised normal CLI file-discovery paths, with only synthetic homes/accounts and no real credential mounts or Keychain access. Six current-server scenarios passed: healthy inventory, private/full/redacted expansion with corrupt inventory, ordinary selected mode, and corrupt inventory plus a timed-out sibling. Auth401 and no-store were retained; /usage still returned both visible profiles without the internal warning field.

Actual private-mode HTTP response — selected fields, unmodified values
{
  "id": "codex",
  "identity": null,
  "error": null,
  "accountsError": "Account list incomplete",
  "accounts": [
    {
      "label": "Account 1",
      "active": false,
      "identity": null,
      "error": null,
      "windows": [
        {
          "usedPercent": 20,
          "label": "Session",
          "resetAt": "2026-09-23T04:15:10Z",
          "remainingPercent": 80,
          "kind": "session"
        }
      ]
    },
    {
      "label": "Account 2",
      "active": true,
      "identity": null,
      "error": null,
      "windows": [
        {
          "usedPercent": 65,
          "label": "Session",
          "resetAt": "2026-09-23T04:15:10Z",
          "remainingPercent": 35,
          "kind": "session"
        }
      ]
    }
  ]
}

Before

Before: unreadable inventory was silent

After

After: healthy accounts retained with incomplete-inventory warning

Complete new responses, baseline response and provenance

New local proof: all 95 Linux selections / 8 groups passed with no retries or timeouts; 22 focused tests across the three dashboard suites passed, including five new inventory tests with 15 parameterized cases. Canonical SwiftFormat and strict SwiftLint passed, and the complete staged candidate passed independent autoreview through P2.

PASS — inventory-warning head 8a2263b macOS verification: https://github.com/roboclaw-bot/CodexBar/actions/runs/35813570966. Workflow 34c130a explicitly checked out source 8a2263b. Full make check, compilation, focused regressions/architecture, both full-suite shards, and plugin-engine A/B passed. All 1,337 discovered selections were covered (682 + 655; 89/89 and 88/88 groups, no failures, retries or timeouts). The new inventory-warning suite also passed on macOS.

Original feature HTTP evidence (d56adea)

Exact source d56adeae31dbcd869da4cb59424b759d1f243624. These are field projections of actual JSON returned by the compiled HTTP server, not hand-written expected responses. Complete unmodified response bodies and provenance are linked below. All names/emails are synthetic; no real credentials, private paths, hostnames or IP addresses are published.

The server used isolated local fixtures with external networking disabled. Codex used a synthetic OAuth usage endpoint. Claude used a fake executable through the real subprocess reader, parser and dashboard projection, with one configured token account deliberately present as a possible fallback. No activation or real Keychain/provider access occurred.

Assertions passed: five Codex scenarios and nine Claude scenarios; private/full/redacted identity behavior; non-email alias and raw-error suppression; healthy sibling retention; whole-adapter failure omits the accounts key; successful empty adapter results retain accounts: [] without token fallback. Every Claude scenario also checked authenticated HTTP 200, unauthenticated 401 and Cache-Control: no-store.

The excerpts below are retained directly in this PR body. Full-artifact signed links expire on 2026-09-30.

codex-private
{
  "id": "codex",
  "identity": null,
  "error": null,
  "accounts": [
    {
      "id": "codex:af162a5bb1a39dbfc0cc4d404a65f7c20f6c2e583da59ea3662f1a725c1fb986",
      "label": "Account 1",
      "active": false,
      "identity": null,
      "error": null,
      "windows": [
        {
          "usedPercent": 20,
          "kind": "session",
          "label": "Session",
          "remainingPercent": 80,
          "resetAt": "2026-09-22T19:58:27Z"
        }
      ]
    },
    {
      "id": "codex:4ef86dbdc02577ece42b520e66b61bedf56d54d86b2b9720430ff1394b116084",
      "label": "Account 2",
      "active": true,
      "identity": null,
      "error": null,
      "windows": [
        {
          "usedPercent": 65,
          "kind": "session",
          "label": "Session",
          "remainingPercent": 35,
          "resetAt": "2026-09-22T19:58:27Z"
        }
      ]
    }
  ]
}
codex-full
{
  "id": "codex",
  "identity": {
    "accountEmail": "fixture2@example.test",
    "plan": "Plus"
  },
  "error": null,
  "accounts": [
    {
      "id": "codex:af162a5bb1a39dbfc0cc4d404a65f7c20f6c2e583da59ea3662f1a725c1fb986",
      "label": "fixture1@example.test",
      "active": false,
      "identity": {
        "accountEmail": "fixture1@example.test",
        "plan": "Plus"
      },
      "error": null,
      "windows": [
        {
          "kind": "session",
          "usedPercent": 20,
          "resetAt": "2026-09-22T19:58:28Z",
          "label": "Session",
          "remainingPercent": 80
        }
      ]
    },
    {
      "id": "codex:4ef86dbdc02577ece42b520e66b61bedf56d54d86b2b9720430ff1394b116084",
      "label": "fixture2@example.test",
      "active": true,
      "identity": {
        "accountEmail": "fixture2@example.test",
        "plan": "Plus"
      },
      "error": null,
      "windows": [
        {
          "kind": "session",
          "usedPercent": 65,
          "resetAt": "2026-09-22T19:58:28Z",
          "label": "Session",
          "remainingPercent": 35
        }
      ]
    }
  ]
}
codex-redacted
{
  "id": "codex",
  "identity": {
    "accountEmail": "redacted@example.test",
    "plan": "Plus"
  },
  "error": null,
  "accounts": [
    {
      "id": "codex:af162a5bb1a39dbfc0cc4d404a65f7c20f6c2e583da59ea3662f1a725c1fb986",
      "label": "Account 1",
      "active": false,
      "identity": {
        "accountEmail": "redacted@example.test",
        "plan": "Plus"
      },
      "error": null,
      "windows": [
        {
          "usedPercent": 20,
          "resetAt": "2026-09-22T19:58:28Z",
          "label": "Session",
          "remainingPercent": 80,
          "kind": "session"
        }
      ]
    },
    {
      "id": "codex:4ef86dbdc02577ece42b520e66b61bedf56d54d86b2b9720430ff1394b116084",
      "label": "Account 2",
      "active": true,
      "identity": {
        "accountEmail": "redacted@example.test",
        "plan": "Plus"
      },
      "error": null,
      "windows": [
        {
          "usedPercent": 65,
          "resetAt": "2026-09-22T19:58:28Z",
          "label": "Session",
          "remainingPercent": 35,
          "kind": "session"
        }
      ]
    }
  ]
}
codex-timeout
{
  "id": "codex",
  "identity": null,
  "error": {
    "kind": "provider",
    "code": 1,
    "message": "Account usage unavailable"
  },
  "accounts": [
    {
      "id": "codex:af162a5bb1a39dbfc0cc4d404a65f7c20f6c2e583da59ea3662f1a725c1fb986",
      "label": "Account 1",
      "active": false,
      "identity": null,
      "error": null,
      "windows": [
        {
          "label": "Session",
          "remainingPercent": 80,
          "kind": "session",
          "usedPercent": 20,
          "resetAt": "2026-09-22T19:58:29Z"
        }
      ]
    },
    {
      "id": "codex:4ef86dbdc02577ece42b520e66b61bedf56d54d86b2b9720430ff1394b116084",
      "label": "Account 2",
      "active": true,
      "identity": null,
      "error": "Account usage unavailable",
      "windows": []
    }
  ]
}
claude-rows-private
{
  "id": "claude",
  "identity": null,
  "error": {
    "message": "Account usage unavailable",
    "code": 1,
    "kind": "runtime"
  },
  "accounts": [
    {
      "id": "claude-swap:1",
      "label": "Account 1",
      "active": true,
      "identity": null,
      "error": null,
      "windows": [
        {
          "kind": "session",
          "label": "Session",
          "usedPercent": 20,
          "remainingPercent": 80,
          "resetAt": null
        }
      ]
    },
    {
      "id": "claude-swap:2",
      "label": "Account 2",
      "active": false,
      "identity": null,
      "error": "Account usage unavailable",
      "windows": []
    }
  ]
}
claude-rows-full
{
  "id": "claude",
  "identity": null,
  "error": {
    "kind": "runtime",
    "message": "Error: selected source requires web support and is only supported on macOS.",
    "code": 1
  },
  "accounts": [
    {
      "id": "claude-swap:1",
      "label": "Private Team",
      "active": true,
      "identity": {
        "plan": null,
        "accountEmail": "fixture1@example.test"
      },
      "error": null,
      "windows": [
        {
          "remainingPercent": 80,
          "label": "Session",
          "kind": "session",
          "usedPercent": 20,
          "resetAt": null
        }
      ]
    },
    {
      "id": "claude-swap:2",
      "label": "Secret Client",
      "active": false,
      "identity": {
        "plan": null,
        "accountEmail": "fixture2@example.test"
      },
      "error": "Unrecognized claude-swap status: private failure for Private Team fixture2@example.test",
      "windows": []
    }
  ]
}
claude-rows-redacted
{
  "id": "claude",
  "identity": null,
  "error": {
    "code": 1,
    "message": "Account usage unavailable",
    "kind": "runtime"
  },
  "accounts": [
    {
      "id": "claude-swap:1",
      "label": "Account 1",
      "active": true,
      "identity": {
        "plan": null,
        "accountEmail": "redacted@example.test"
      },
      "error": null,
      "windows": [
        {
          "label": "Session",
          "usedPercent": 20,
          "remainingPercent": 80,
          "kind": "session",
          "resetAt": null
        }
      ]
    },
    {
      "id": "claude-swap:2",
      "label": "Account 2",
      "active": false,
      "identity": {
        "accountEmail": "redacted@example.test",
        "plan": null
      },
      "error": "Account usage unavailable",
      "windows": []
    }
  ]
}
claude-failure-private
{
  "id": "claude",
  "identity": null,
  "error": {
    "message": "Account usage unavailable",
    "code": 1,
    "kind": "runtime"
  },
  "accountsError": "Account list unavailable"
}
claude-failure-full
{
  "id": "claude",
  "identity": null,
  "error": {
    "kind": "runtime",
    "code": 1,
    "message": "Error: selected source requires web support and is only supported on macOS."
  },
  "accountsError": "claude-swap reported FixtureError: Private Team fixture2@example.test unavailable"
}
claude-failure-redacted
{
  "id": "claude",
  "identity": null,
  "error": {
    "message": "Account usage unavailable",
    "code": 1,
    "kind": "runtime"
  },
  "accountsError": "Account list unavailable"
}
claude-empty-private
{
  "id": "claude",
  "identity": null,
  "error": {
    "code": 1,
    "kind": "runtime",
    "message": "Account usage unavailable"
  },
  "accounts": []
}
Complete captured HTTP bodies and provenance

Original feature verification (d56adea)

  • Independent full-candidate autoreview: scoped-clean through P2; final review includes lint cleanup/helper relocation.

  • Swift 6.3.3 Linux compilation and make test: 94 discovered selections, all 8 groups passed first attempt; zero failures, retries or timeouts.

  • Focused account/privacy regressions: 17 test methods with parameterized cases, including non-email aliases, selected-account failures, adapter failures in both scopes, successful-empty adapter precedence and warm identity-cache separation.

  • Repository portable/script/JavaScript/type/documentation gates passed. SwiftLint passed all 2,572 configured files and both additional Linux regression files. Canonical SwiftFormat passed 2,573 files (five skipped by repository configuration), plus both new Linux regression files.

  • Real compiled HTTP server with isolated synthetic profiles: selected/private/full/redacted/timeout scenarios passed; unauthorized dashboard requests returned 401; responses retained no-store; /usage kept both account identities. No live provider credentials or Keychain access.

  • Production web renderer with captured HTTP responses at 1200×800 light and 390px dark: private labels, selected marker, no narrow overflow, selected Codex credits shown only on that account.

  • PASS — exact-source macOS verification: https://github.com/roboclaw-bot/CodexBar/actions/runs/35805101500. Workflow commit 6ef2489 checked out source d56adea. Full make check, focused account/deadline/rendering/architecture regressions, both full-suite shards, and provider plugin-engine A/B checks passed. The shards covered all 1,336 discovered selections (681 + 655), with 89/89 and 88/88 groups passing first attempt, no failures, retries or timeouts.

Upstream approval gate

This host is Linux; the macOS-only gates unavailable locally were completed by the exact-source fork run above. Upstream fork CI requires maintainer approval; the fresh head’s workflow status must be checked independently. Independent fork verification does not approve, bypass or replace that gate. No merge has been performed.

Visual evidence

Signed proof image links expire on 2026-09-30.

Production renderer using synthetic responses from the compiled HTTP server; 1200×800/light. The first view is the unchanged selected-account mode; the second is the new private expanded mode.

Before

Before: unchanged selected-account mode

After

After: private expanded accounts with neutral labels

Scope notes

The one-shot dashboard command gets no new flag. Existing provider fetching is reused; most added lines are regression tests. Stable public IDs are correlation handles, not an anonymity promise. Browser snapshots previously served with explicit identity remain client-held data; signing out clears the built-in browser cache.


View the OpenClaw team session

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
@clawsweeper

clawsweeper Bot commented Sep 23, 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 23, 2026
@clawsweeper

clawsweeper Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

Codex review: blocked before merge. Reviewed September 23, 2026, 2:15 AM ET / 06:15 UTC (Revision 8).

ClawSweeper review

What this changes

Adds opt-in multi-account HTTP dashboard snapshots with private labels, selected-account metrics, inventory warnings, and preservation of healthy results when another account times out.

Merge readiness

⛔ Blocked before merge - 2 items remain

Keep open: the feature remains absent from main and the latest release, the predecessor’s concrete objections are addressed, and no blocking implementation defect was found. Repository policy excludes automatic closure.

Priority: P2
Reviewed head: 418c8152567bf4585ce323c8f9278271e57239fd
Owner decision: Required. See Decision needed.

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A focused implementation with convincing runtime evidence and substantial regression coverage; no actionable code defect remains.
Proof confidence 🦞 diamond lobster (5/6) Sufficient (live_output): Source-identified compiled-server captures exercise account discovery, privacy projection, adapter failures and deadline handling through the production HTTP path in an isolated synthetic setup, showing retained healthy rows and correct private output. The final collection guard has supplemental provider-path regression coverage. No stored-data contract changes require migration.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Verified Sufficient (live_output): Source-identified compiled-server captures exercise account discovery, privacy projection, adapter failures and deadline handling through the production HTTP path in an isolated synthetic setup, showing retained healthy rows and correct private output. The final collection guard has supplemental provider-path regression coverage. No stored-data contract changes require migration.
Evidence reviewed 11 items Repository policy: Read the complete root AGENTS.md; no nested AGENTS.md or maintainer-notes directory was present. Applied account isolation, concurrency, and Keychain-safe validation guidance. No builds, tests, or provider probes were executed.
Introduced scope: Reviewed the pinned merge-base-to-head changes across all 18 files. The original head is 418c815; endpoint drift and the host-marked stale test merge were not treated as PR introduction evidence.
Maintainer feedback on predecessor: The owner’s comment at #3832 (comment) required private expanded identities, aliases and errors, plus omission of accounts on whole-adapter failure. It explicitly states that no predecessor code was adopted and leaves the broader scope for maintainer follow-up.
Findings None None.
Security None None.

How this fits together

CodexBar’s HTTP dashboard collects usage from locally configured accounts and presents authenticated JSON snapshots and browser cards. This change expands account collection while retaining the existing provider fetchers and dashboard transport.

flowchart TD
  A[Local accounts and profiles] --> B[Selected or expanded collection]
  C[Authenticated dashboard request] --> B
  B --> D[Provider fetches and Claude adapter]
  D --> E[Completed usage and account errors]
  E --> F[Privacy and selected-account projection]
  F --> G[JSON snapshot and browser cards]
Loading

Decision needed

Question Recommendation
Should the narrowed serve-only --all-accounts feature be accepted at its current scope? Accept the serve-only scope: Support the opt-in expansion now that privacy defaults and adapter-failure behavior follow the owner’s requirements.

Why: The predecessor’s closure established concrete requirements and raised scope concerns; satisfying those requirements does not itself establish acceptance of this larger follow-up.

Before merge

  • Complete next step (P2) - Confirm acceptance of the serve-only account expansion at its current scope.
  • Resolve maintainer decision - Resolve the maintainer decision shown above before merge.
Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Production and test delta Production +380/-90; tests +906/-8; docs +50/-2 Production growth implements account projection and partial-result handling, with most added lines devoted to regression coverage.

Technical review

Best possible solution:

Support a serve-only, explicitly enabled account projection with private defaults, existing credential discovery, and unchanged selected-account behavior.

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

Not applicable as a new capability; current-main source confirms the missing expansion, and supplied compiled-server captures demonstrate the proposed behavior.

Is this the best way to solve the issue?

Yes, technically: reusing existing account discovery and the shared snapshot pipeline is a focused approach that preserves current defaults; product acceptance remains separate.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 1c8657a083d5.

Labels

Label changes:

No label changes.

Label justifications:

  • P2: This is a bounded, opt-in dashboard improvement without evidence of an urgent existing-user regression.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): Source-identified compiled-server captures exercise account discovery, privacy projection, adapter failures and deadline handling through the production HTTP path in an isolated synthetic setup, showing retained healthy rows and correct private output. The final collection guard has supplemental provider-path regression coverage. No stored-data contract changes require migration.
  • proof: sufficient: Contributor real behavior proof is sufficient. Source-identified compiled-server captures exercise account discovery, privacy projection, adapter failures and deadline handling through the production HTTP path in an isolated synthetic setup, showing retained healthy rows and correct private output. The final collection guard has supplemental provider-path regression coverage. No stored-data contract changes require migration.

Evidence

What I checked:

  • Repository policy: Read the complete root AGENTS.md; no nested AGENTS.md or maintainer-notes directory was present. Applied account isolation, concurrency, and Keychain-safe validation guidance. No builds, tests, or provider probes were executed. (AGENTS.md:1, 418c8152567b)
  • Introduced scope: Reviewed the pinned merge-base-to-head changes across all 18 files. The original head is 418c815; endpoint drift and the host-marked stale test merge were not treated as PR introduction evidence. (418c8152567b)
  • Maintainer feedback on predecessor: The owner’s comment at Add opt-in multi-account dashboard snapshots #3832 (comment) required private expanded identities, aliases and errors, plus omission of accounts on whole-adapter failure. It explicitly states that no predecessor code was adopted and leaves the broader scope for maintainer follow-up.
  • Privacy and adapter precedence: Expanded collection defaults to no identity independently of app preferences; non-full modes use neutral labels and generic errors. An explicit Claude adapter remains authoritative on failure and empty success. Focused privacy and inventory tests cover these cases. (Sources/CodexBarCLI/DashboardSnapshotBuilder.swift:134, 418c8152567b)
  • Collection and deadline behavior: The account collector publishes completed siblings with account-local timeout placeholders. Partial results remain scoped to their operation generation. The latest guard avoids querying non-selected Claude token accounts when the configured adapter supplies the displayed account list. (Sources/CodexBarCLI/DashboardAccountCollector.swift:17, 418c8152567b)
  • Security and compatibility boundary: Dashboard authentication precedes configuration loading, collection and cache access. Identity and collection scope separate cache keys; ordinary serve, one-shot dashboard and raw usage encoding retain their defaults. No dependencies, permissions, credential formats or persisted schema are changed. (Sources/CodexBarCLI/CLIServeCommand.swift:1000, 418c8152567b)

Likely related people:

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

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 (7 earlier review cycles)
  • reviewed 2026-09-23T01:16:17.967Z sha d56adea :: needs real behavior proof before merge. :: none
  • reviewed 2026-09-23T01:34:30.992Z sha d56adea :: needs maintainer review before merge. :: none
  • reviewed 2026-09-23T01:53:09.468Z sha d56adea :: needs maintainer review before merge. :: none
  • reviewed 2026-09-23T03:19:44.358Z sha 8a2263b :: needs real behavior proof before merge. :: none
  • reviewed 2026-09-23T03:31:05.083Z sha 8a2263b :: needs maintainer review before merge. :: none
  • reviewed 2026-09-23T04:04:35.523Z sha 8a2263b :: blocked before merge. :: none
  • reviewed 2026-09-23T04:59:38.577Z sha 418c815 :: blocked before merge. :: none

@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 23, 2026
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
@clawsweeper clawsweeper Bot added 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. and removed proof: sufficient Contributor real behavior proof is sufficient. 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 23, 2026
@roboclaw-bot

Copy link
Copy Markdown
Author

Added exact-head compiled-server evidence for 8a2263b: the same malformed managed-account store is silent at d56adea but now yields a generic inventory warning while keeping both healthy profiles. Private/full/redacted, ordinary selected mode, and combined inventory/timeout scenarios passed. Complete sanitized responses, provenance, permanent JSON excerpt and before/after captures are in the PR body. @clawsweeper re-review

@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. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Sep 23, 2026
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
@steipete

Copy link
Copy Markdown
Owner

Thanks @roboclaw-bot. Head 418c8152567b has the intended server boundary: startup-only dashboard expansion, opaque account IDs, selected generic /usage, and preserved Codex enumeration. The patch applies cleanly. This triage pass stopped at its assigned change-size limit and did not compile or execute the candidate, so this is not merge-readiness confirmation. Account, privacy, timeout, cache, and route behavior still need maintainer verification before adoption.

This branch has not been deployed

No deployments
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: 🐚 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants