• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lsm / neokai / 27726046174
82%

Build:
DEFAULT BRANCH: dev
Ran 17 Jun 2026 11:22PM UTC
Jobs 28
Files 605
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

17 Jun 2026 11:21PM UTC coverage: 81.696% (-3.8%) from 85.501%
27726046174

push

github

web-flow
fix(credentials): keychain error UX + encrypted file fallback for screen/SSH (#2115)

* fix(providers): surface keychain guidance on create/update credential writes

Previously only `providers.delete` caught `KeychainUnavailableError`. When a
locked macOS Keychain blocked `providers.create` or `providers.update` (e.g.
daemon launched over SSH / headless), the tagged error propagated raw to the
RPC caller with no log entry and no normalisation.

Extract `rethrowKeychainError(err, action, providerId)` so all three mutation
handlers share one place that:
  - emits a structured `log.warn` (operators can correlate the failed action),
  - rethrows `new Error(KEYCHAIN_UNAVAILABLE_MESSAGE)` so the RPC layer
    serialises actionable UX guidance to the client.

`providers.create` keeps its existing compensating-delete behaviour: the
orphan provider row is removed before the actionable error surfaces, so
retries don't fail with 'already exists'. `providers.update` leaves the DB
row untouched when the credential write fails, so `authType` doesn't flip to
`api_key` while the key wasn't actually stored.

Adds two unit tests covering the create rollback + update no-op paths and
locking the existing delete path to the shared helper.

* feat(credentials): auto-fall back to encrypted file when macOS Keychain locked

Matches the credential-storage pattern used by Codex CLI (`~/.codex/auth.json`)
and Claude Code (`~/.claude/.credentials.json`): try the OS keychain first, fall
back to a 0600 encrypted file when the keychain is unavailable. Both peers do
this because the macOS `login.keychain-db` rejects writes from non-GUI security
sessions with `errSecInteractionNotAllowed` (exit code 36) — the same wall our
daemon hits when launched from screen / SSH / launchd. Native keychain APIs do
not bypass this; only GUI apps with bundle IDs get pre-authorized ACL access.

Behaviour changes:

1. `KeychainStatusCredentialStore` now accepts an optional `fallback` store
   and an op... (continued)

10714 of 15625 branches covered (68.57%)

Branch coverage included in aggregate %.

160 of 160 new or added lines in 3 files covered. (100.0%)

90977 of 108850 relevant lines covered (83.58%)

293.53 hits per line

Jobs
ID Job ID Ran Files Coverage
1 daemon-5-space-runtime-a - 27726046174.1 17 Jun 2026 11:23PM UTC 122
40.08
GitHub Action Run
2 daemon-4-space-migrations-a - 27726046174.2 17 Jun 2026 11:22PM UTC 72
38.44
GitHub Action Run
3 daemon-4-space-migrations-b - 27726046174.3 17 Jun 2026 11:24PM UTC 48
52.98
GitHub Action Run
4 daemon-online-space-2 - 27726046174.4 17 Jun 2026 11:23PM UTC 351
31.54
GitHub Action Run
5 daemon-online-coordinator - 27726046174.5 17 Jun 2026 11:23PM UTC 340
7.68
GitHub Action Run
6 daemon-online-convo - 27726046174.6 17 Jun 2026 11:24PM UTC 351
21.58
GitHub Action Run
7 daemon-5-space-runtime-b - 27726046174.7 17 Jun 2026 11:23PM UTC 175
46.57
GitHub Action Run
8 daemon-online-rpc-2 - 27726046174.8 17 Jun 2026 11:24PM UTC 351
22.75
GitHub Action Run
9 daemon-4-space-storage - 27726046174.9 17 Jun 2026 11:23PM UTC 156
54.97
GitHub Action Run
10 daemon-online-rpc-1 - 27726046174.10 17 Jun 2026 11:23PM UTC 351
18.76
GitHub Action Run
11 daemon-online-websocket - 27726046174.11 17 Jun 2026 11:24PM UTC 351
17.7
GitHub Action Run
12 daemon-online-sdk - 27726046174.12 17 Jun 2026 11:23PM UTC 351
21.68
GitHub Action Run
13 daemon-online-git - 27726046174.13 17 Jun 2026 11:23PM UTC 351
18.49
GitHub Action Run
14 daemon-1-core - 27726046174.14 17 Jun 2026 11:22PM UTC 357
35.09
GitHub Action Run
15 daemon-0-shared-handlers-workflow - 27726046174.15 17 Jun 2026 11:22PM UTC 324
34.84
GitHub Action Run
16 daemon-5-space-agent-other - 27726046174.16 17 Jun 2026 11:23PM UTC 276
26.11
GitHub Action Run
17 daemon-online-space-1 - 27726046174.17 17 Jun 2026 11:23PM UTC 351
31.75
GitHub Action Run
18 daemon-online-rpc-3 - 27726046174.18 17 Jun 2026 11:23PM UTC 351
19.11
GitHub Action Run
19 daemon-online-rewind-1 - 27726046174.19 17 Jun 2026 11:25PM UTC 351
21.8
GitHub Action Run
20 daemon-online-features-1 - 27726046174.20 17 Jun 2026 11:22PM UTC 351
22.39
GitHub Action Run
21 daemon-online-agent-sdk - 27726046174.21 17 Jun 2026 11:23PM UTC 351
21.67
GitHub Action Run
22 daemon-online-components - 27726046174.22 17 Jun 2026 11:23PM UTC 351
17.6
GitHub Action Run
23 daemon-online-features-2 - 27726046174.23 17 Jun 2026 11:23PM UTC 351
22.01
GitHub Action Run
24 daemon-online-rpc-4 - 27726046174.24 17 Jun 2026 11:23PM UTC 351
22.42
GitHub Action Run
25 daemon-online-lifecycle - 27726046174.25 17 Jun 2026 11:23PM UTC 351
22.05
GitHub Action Run
26 daemon-online-rewind-2 - 27726046174.26 17 Jun 2026 11:23PM UTC 351
22.21
GitHub Action Run
27 web - 27726046174.27 17 Jun 2026 11:24PM UTC 244
73.86
GitHub Action Run
28 daemon-online-mcp - 27726046174.28 17 Jun 2026 11:23PM UTC 351
17.94
GitHub Action Run
Source Files on build 27726046174
  • Tree
  • List 605
  • Changed 16
  • Source Changed 5
  • Coverage Changed 16
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #27726046174
  • 90438d5f on github
  • Prev Build on dev (#27716672778)
  • Next Build on dev (#27729217056)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc