Skip to content

fix(kiro): Add direct API fetch for enterprise/IdC accounts#2164

Open
stormrise wants to merge 3 commits into
steipete:mainfrom
stormrise:fix/kiro-enterprise-usage-api
Open

fix(kiro): Add direct API fetch for enterprise/IdC accounts#2164
stormrise wants to merge 3 commits into
steipete:mainfrom
stormrise:fix/kiro-enterprise-usage-api

Conversation

@stormrise

Copy link
Copy Markdown

Problem

Kiro usage fetching fails for enterprise/IdC accounts because passes to the legacy REST API, causing a error.

Root Cause

Enterprise credentials have a that gets resolved via . When this ARN is passed to , the Kiro 0.9.2 version of the API rejects it as malformed. The same issue was fixed in kiro.rs v0.6.11.

Solution

Added a new that:

  • Reads credentials directly from kiro-cli's SQLite database ()
  • Makes direct HTTP calls to AWS Q API
  • Uses fixed version in User-Agent (the version that doesn't require )
  • **Does NOT pass ** - this is the key fix
  • Falls back to CLI strategy if API fails

Changes

  • New file: - Direct API fetch strategy
  • Modified: - Added API strategy as primary, CLI as fallback

Testing

  • Code compiles successfully
  • Test with enterprise/IdC account (needs testing by maintainer)

Reference

@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: bb3fa52536

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

}
defer { sqlite3_close(db) }

let query = "SELECT value FROM auth_kv WHERE key = 'kirocli:odic:token'"

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 Query the actual Kiro CLI auth keys

For current Kiro CLI logins the token row is stored under kirocli:social:token (and IdC/OIDC installs use kirocli:oidc:token); this query only looks for the misspelled kirocli:odic:token. In those environments resolveCredentials() returns nil, so the new API strategy is marked unavailable and auto mode falls straight back to the old CLI path, leaving the enterprise/IdC failure this change is meant to fix. Please try the real key names and keep the typo only as a fallback if needed.

Useful? React with 👍 / 👎.

Comment on lines +35 to +36
pipeline: ProviderFetchPipeline(resolveStrategies: { _ in
[KiroAPIFetchStrategy(), KiroCLIFetchStrategy()]

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 Respect explicit Kiro source modes

Because the resolver ignores context.sourceMode, selecting Kiro's CLI source still returns the API strategy first; if the SQLite token is present the app will make the direct HTTP request even though the user requested CLI. The opposite can also happen after an API failure because KiroAPIFetchStrategy.shouldFallback always returns true, so an explicit API refresh can report a CLI result. Please switch on the source mode here and limit cross-source fallback to .auto.

Useful? React with 👍 / 👎.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. 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. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. merge-risk: 🚨 auth-provider 🚨 Merging this PR could break OAuth, tokens, provider routing, model choice, or credentials. labels Jul 14, 2026
@clawsweeper

clawsweeper Bot commented Jul 14, 2026

Copy link
Copy Markdown

Codex review: needs real behavior proof before merge. Reviewed July 16, 2026, 10:49 PM ET / July 17, 2026, 02:49 UTC.

Summary
The PR adds a direct AWS Q usage-fetch path for affected Kiro enterprise and IdC credentials, including credential decoding, token refresh, API/CLI source routing, fallback behavior, and focused tests.

Reproducibility: no. high-confidence live reproduction is available in the maintainer environment. The source path, upstream profileArn incompatibility, linked report, and before screenshot support the failure, but the exact enterprise credential class was not demonstrated.

Review metrics: 2 noteworthy metrics.

  • Changed surface: 5 files: 3 added source files, 1 provider descriptor changed, 1 test file added. The change introduces a new credential and network execution path rather than a narrow URL adjustment.
  • Diff size: 1,274 additions, 4 deletions. The comparatively large authentication-sensitive implementation warrants focused architecture and runtime verification before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #1814
Summary: This PR is presented as the candidate implementation for the Kiro enterprise/IdC usage failure tracked by the linked issue.

Members:

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

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦪 silver shellfish
Patch quality: 🦐 gold shrimp
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:

  • Move Kiro credential-store access behind a host-owned injectable credential API.
  • Update the Kiro provider/source documentation for API, automatic, and fallback behavior.
  • Post redacted current-head proof covering enterprise/IdC or external-IdP selection and an expired-token refresh.

Proof guidance:

  • [P1] Needs stronger real behavior proof before merge: The screenshots show a visible before/after result but do not prove the latest head with an identified enterprise/IdC or external-IdP account, API source selection, token expiry, or successful refresh. Add a redacted app recording, terminal capture, or runtime logs showing those facts; remove tokens, account identifiers, private endpoints, and other private data. Updating the PR body should trigger a fresh 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

  • [P1] The provider-local SQLite reader keeps credential discovery and raw authentication-store access inside the Kiro implementation rather than behind a host-owned credential boundary.
  • [P1] The screenshots do not establish that IdC and external-IdP refresh behavior works on the latest head, so existing enterprise users could still fall back to the failing CLI path after token expiry.
  • [P1] Adding an explicit API source and API-first automatic path changes provider routing; incomplete documentation or unproven account-class parity could surprise users selecting or upgrading to the new behavior.

Maintainer options:

  1. Repair the boundary and prove enterprise auth (recommended)
    Move credential-store access behind a host-owned injectable API, document the new source behavior, and provide redacted current-head proof for IdC and external-IdP refresh flows before merge.
  2. Retain the existing CLI-only implementation
    Pause or close the direct API change if the credential boundary and representative enterprise proof cannot be completed safely.

Next step before merge

  • [P1] The contributor should repair the remaining credential-boundary defect, update the source documentation, and supply proof from their enterprise setup; automation cannot provide the required account-specific evidence.

Security
Needs attention: The latest head improves machine-identity handling and transport injection, but direct provider access to the credential SQLite store remains a concrete credential-isolation concern.

Review findings

  • [P1] Route Kiro credential reads through a host-owned API — Sources/CodexBarCore/Providers/Kiro/KiroCLICredentialStore.swift:20
  • [P3] Document Kiro's new API source contract — Sources/CodexBarCore/Providers/Kiro/KiroProviderDescriptor.swift:34
Review details

Best possible solution:

Keep automatic API use narrowly limited to the affected enterprise credential classes, obtain credentials through a host-owned injectable boundary, preserve explicit CLI behavior and safe fallback, document the source contract, and verify fresh and expired IdC and external-IdP accounts with redacted runtime evidence.

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

No high-confidence live reproduction is available in the maintainer environment. The source path, upstream profileArn incompatibility, linked report, and before screenshot support the failure, but the exact enterprise credential class was not demonstrated.

Is this the best way to solve the issue?

No, not yet. A narrowly scoped direct API path is reasonable, but the credential store should be host-owned and the latest authentication and refresh behavior needs account-specific runtime proof before this is the safest maintainable solution.

Full review comments:

  • [P1] Route Kiro credential reads through a host-owned API — Sources/CodexBarCore/Providers/Kiro/KiroCLICredentialStore.swift:20
    The refactor makes the credential store injectable, but the provider implementation still resolves the user's home directory and opens Kiro CLI's credential-bearing SQLite database itself. This leaves the previously identified provider/host boundary unresolved and makes credential access harder to centrally constrain and audit; inject decoded credentials or a host-owned credential reader instead.
    Confidence: 0.88
  • [P3] Document Kiro's new API source contract — Sources/CodexBarCore/Providers/Kiro/KiroProviderDescriptor.swift:34
    Adding .api to Kiro's advertised source modes exposes a new selectable behavior, while the existing provider documentation still describes Kiro as CLI-only. Update the provider/source documentation so users understand when API, automatic fallback, and social-account behavior apply.
    Confidence: 0.9

Overall correctness: patch is incorrect
Overall confidence: 0.84

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🦐 gold shrimp. Replaced prior rating: 🧂 unranked krab.
  • remove rating: 🧂 unranked krab: Current PR rating is rating: 🦪 silver shellfish, so this older rating label is no longer current.

Label justifications:

  • P2: This addresses a real but provider-specific enterprise usage failure with limited blast radius outside Kiro.
  • merge-risk: 🚨 compatibility: The PR adds API-first automatic routing and a new explicit source mode, which can change existing Kiro refresh and fallback behavior after upgrade.
  • merge-risk: 🚨 auth-provider: The new path decodes, refreshes, and routes multiple Kiro credential classes, so incorrect classification or refresh handling can break authenticated usage retrieval.
  • merge-risk: 🚨 security-boundary: The provider directly locates and opens a credential-bearing SQLite store, making credential isolation and error handling merge-critical.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🦐 gold shrimp. Replaced prior rating: 🧂 unranked krab.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: The screenshots show a visible before/after result but do not prove the latest head with an identified enterprise/IdC or external-IdP account, API source selection, token expiry, or successful refresh. Add a redacted app recording, terminal capture, or runtime logs showing those facts; remove tokens, account identifiers, private endpoints, and other private data. Updating the PR body should trigger a fresh 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 screenshots show a visible before/after result but do not prove the latest head with an identified enterprise/IdC or external-IdP account, API source selection, token expiry, or successful refresh. Add a redacted app recording, terminal capture, or runtime logs showing those facts; remove tokens, account identifiers, private endpoints, and other private data. Updating the PR body should trigger a fresh review, or a maintainer can comment @clawsweeper re-review.
Evidence reviewed

Security concerns:

  • [medium] Provider directly opens the authentication store — Sources/CodexBarCore/Providers/Kiro/KiroCLICredentialStore.swift:20
    The Kiro provider derives and opens the CLI SQLite database containing OAuth material instead of consuming credentials through a host-owned access boundary, increasing the sensitive surface that must correctly enforce storage, logging, and testing constraints.
    Confidence: 0.88

What I checked:

  • Current-head authentication improvements: The updated fetcher refreshes expired credentials before usage requests and adds explicit external-IdP handling, addressing major findings from the previous review cycle. (Sources/CodexBarCore/Providers/Kiro/KiroAPIUsageFetcher.swift:29, 27dc2457d680)
  • Credential boundary remains provider-local: The new credential store derives its database path from FileManager and opens Kiro CLI's SQLite authentication store directly rather than receiving credential material through a host-owned credential API. (Sources/CodexBarCore/Providers/Kiro/KiroCLICredentialStore.swift:20, 27dc2457d680)
  • Focused tests added: The latest head adds credential-key, source-selection, refresh, external-IdP, response-decoding, and transport-oriented test coverage that was absent from the earlier reviewed head. (Tests/CodexBarTests/KiroAPIUsageFetcherTests.swift:1, 27dc2457d680)
  • New public source behavior: Kiro now advertises API as an explicit provider source and uses API-first routing in automatic mode for eligible credentials, making source and upgrade behavior part of the user-facing provider contract. (Sources/CodexBarCore/Providers/Kiro/KiroProviderDescriptor.swift:34, 27dc2457d680)
  • Maintainer review direction: The repository owner validated the no-profileArn endpoint shape but required safe credential boundaries, complete authentication lifecycle behavior, focused tests, and account-specific redacted proof before merge. (0af8d2adf945)
  • Proof does not cover the current head: The posted before-and-after screenshots show a timeout followed by usage data, but do not establish the credential class, selected source, external-IdP header, expiry handling, or refresh behavior; they also predate the latest force-pushed implementation. (27dc2457d680)

Likely related people:

  • steipete: Reviewed the direct Kiro API approach, validated the upstream endpoint behavior, and defined the credential, refresh, privacy, testing, and proof requirements for this change. (role: recent reviewer; confidence: high; files: Sources/CodexBarCore/Providers/Kiro/KiroAPIUsageFetcher.swift, Sources/CodexBarCore/Providers/Kiro/KiroCLICredentialStore.swift, Sources/CodexBarCore/Providers/Kiro/KiroProviderDescriptor.swift)
  • neror: Repository release history credits this contributor with introducing the original Kiro CLI-based usage provider, making them relevant to the intended provider boundary and behavior. (role: feature introducer; confidence: medium; files: Sources/CodexBarCore/Providers/Kiro/KiroProviderDescriptor.swift)
  • chadneal: Repository history credits this contributor with hardening Kiro CLI idle handling, connecting them to existing fallback and reliability behavior in the affected provider. (role: reliability contributor; confidence: medium; files: Sources/CodexBarCore/Providers/Kiro/KiroProviderDescriptor.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 (2 earlier review cycles)
  • reviewed 2026-07-14T14:11:28.424Z sha bb3fa52 :: needs real behavior proof before merge. :: [P1] Respect the selected Kiro source mode | [P2] Query the current Kiro credential keys
  • reviewed 2026-07-16T02:09:30.857Z sha 0af8d2a :: needs real behavior proof before merge. :: [P1] Refresh expired Kiro tokens before calling the API | [P2] Accept string-form Kiro reset dates | [P1] Route Kiro credential and network access through host APIs

@stormrise

Copy link
Copy Markdown
Author

before:
image

after fix:
image

to fix this issue
#1814

@stormrise

Copy link
Copy Markdown
Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 15, 2026

Copy link
Copy Markdown

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@stormrise

Copy link
Copy Markdown
Author

@chatgpt-codex-connector re-review

@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: 0af8d2adf9

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +100 to +103
guard let data = jsonString.data(using: .utf8),
let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
let accessToken = json["access_token"] as? String,
!accessToken.isEmpty

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Refresh expired Kiro CLI tokens before API calls

When the SQLite credential's access_token has expired, this strategy still sends it because it only reads access_token and ignores the row's expiry/refresh credentials. The API will return 401 and, in auto mode, falls back to the CLI path that this change is specifically trying to bypass, so enterprise/IdC usage stops working again after the cached token ages out unless the user manually logs in to refresh it.

Useful? React with 👍 / 👎.

// MARK: - API Response Models

struct KiroUsageLimitsResponse: Decodable {
let nextDateReset: Double?

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 Decode Kiro reset dates as strings too

When getUsageLimits includes nextDateReset as an ISO-8601 string, the synthesized decoder for this Double? throws before usage can be parsed; the dateDecodingStrategy set on the decoder does not apply because the model is not a Date. That makes otherwise successful 200 responses fail and fall back to the broken CLI path for the affected Kiro responses.

Useful? React with 👍 / 👎.

@clawsweeper clawsweeper Bot added proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. labels Jul 16, 2026
@steipete

Copy link
Copy Markdown
Owner

Thanks for finding the upstream profileArn incompatibility and for pointing to kiro.rs v0.6.11. I verified that the AWS Q endpoint and the no-profileArn URL shape are legitimate. This implementation is not safe to merge yet, though:

  1. External-IdP enterprise auth is incomplete. queryCredentials retains only access_token, region, and start_url; the request then explicitly does nothing with start_url. The referenced kiro.rs implementation sends tokentype: EXTERNAL_IDP for external-IdP credentials and says that header is required. This branch cannot identify that auth method or send the header, so part of the target enterprise population can still fail.
  2. Token lifecycle is missing. The strategy sends the cached access token without reading expiry or refresh material. After expiry, automatic mode falls back to the same CLI path this change is intended to bypass. Please define and test fresh, expiring, expired, refresh-success, and refresh-failure behavior for IdC, social, and external-IdP credentials.
  3. The new automatic path is too broad. It prefers the API for social credentials too, replacing the existing CLI behavior for ordinary users while dropping CLI-only context usage and login-method data. Restrict the direct path to the affected credential classes, or prove intentional parity for every account type.
  4. Credential/privacy boundaries need repair. docs/provider.md forbids provider strategies from directly using FileManager; this strategy opens the CLI SQLite store itself and hard-wires URLSession.shared, which also prevents isolated tests. More seriously, generateMachineId() reads the raw Mac platform UUID and sends it to AWS. The referenced implementation uses a Kiro credential/config machine ID or a derived value, not the raw hardware UUID. Please use injectable credential/HTTP seams and never transmit the hardware UUID.
  5. Error and reliability handling are incomplete. The raw upstream response body is placed in the user-facing error, while the referenced v0.6.11 code explicitly hides sensitive upstream bodies. The new API-first network path also lacks focused timeout/retry/redaction tests.
  6. There are no tests for any new behavior. The existing KiroStatusProbeTests exercise only the CLI path. Required coverage: credential-key/auth-method decoding, source selection, URL without profileArn, tokentype, region fallback, expiry/refresh, response mapping, fallback policy, transport timeout, and error redaction.

Local verification on exact head 0af8d2adf945b49d689eefa8173e0d7ad27491f2:

  • swift build: passed, with unused-value warnings in the new parser.
  • swift test --filter KiroStatusProbeTests: 55 passed; none cover the new API strategy.
  • swiftformat --lint ...: failed; 29 formatting findings.
  • swiftlint lint --strict ...: failed; 5 errors.
  • Structured autoreview could not run because its secret scanner correctly refused to bundle the credential-bearing diff; no bypass was used.

The screenshots show timeout-before and usage-after, but do not establish account type, selected source, token-refresh behavior, or the external-IdP header. Live enterprise/IdC verification is unavailable in this maintainer environment. Please add redacted proof for those facts after the source/test blockers above are fixed. Leaving the PR open for revision.

…sage

Fixes Kiro usage fetching for enterprise/IdC accounts where kiro-cli
fails because it passes profileArn to the legacy REST API, causing
a 400 error.

The fix adds a new KiroAPIFetchStrategy that:
- Reads credentials directly from kiro-cli's SQLite database
- Makes direct HTTP calls to AWS Q getUsageLimits API
- Uses fixed KiroIDE-0.9.2 version (doesn't require profileArn)
- Falls back to CLI strategy if API fails

This is the same approach used by kiro.rs (v0.6.11) which correctly
handles enterprise accounts by NOT passing profileArn to usage APIs.

Reference: https://github.com/ZyphrZero/kiro.rs/issues/XX
Root cause: Enterprise credentials have a profileArn that gets resolved
via ListAvailableProfiles. When passed to getUsageLimits, it causes
'Improperly formed request' 400 error.
- Add source mode handling: auto (API+CLI), api (API only), cli (CLI only)
- Support multiple credential keys: kirocli:odic:token, kirocli:oidc:token, kirocli:social:token
- shouldFallback only in auto mode, not when explicit source selected
Refactor the direct fetch path into injectable credential and HTTP seams, add token refresh and EXTERNAL_IDP handling, narrow auto mode to enterprise credentials, and cover the new behavior with focused tests.
@stormrise
stormrise force-pushed the fix/kiro-enterprise-usage-api branch from 0af8d2a to 27dc245 Compare July 17, 2026 02:44
@stormrise

Copy link
Copy Markdown
Author

@clawsweeper @chatgpt-codex-connector re-review

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

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

Labels

merge-risk: 🚨 auth-provider 🚨 Merging this PR could break OAuth, tokens, provider routing, model choice, or credentials. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. P2 Normal priority bug or improvement with limited blast radius. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. 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.

2 participants