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

archetech / archon / 28184231850
92%

Build:
DEFAULT BRANCH: main
Ran 25 Jun 2026 04:18PM UTC
Jobs 1
Files 51
Run time 1min
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

25 Jun 2026 04:15PM UTC coverage: 85.682% (+0.03%) from 85.653%
28184231850

push

github

web-flow
feat: node capability manifest + client gating for optional services (Option C) (#648)

* feat: node capability manifest + client gating for optional services

DIDComm (and Lightning, names) are optional node services — the relay/backend may
not be deployed. Previously a client only discovered absence by attempting an op and
interpreting a transport failure (404/502/`fetch failed`), and publishDidComm would
advertise a DIDCommMessaging endpoint nothing could service.

Drawbridge now advertises a capability manifest:
- GET /api/v1/capabilities → { didcomm, lightning, names }, each true when the
  downstream URL is configured. Source of truth is node *intent* (config), not live
  health; a configured-but-crashed service still surfaces a runtime error.
- Off-switch: set a service's URL empty (e.g. ARCHON_DIDCOMM_URL=) to disable it.
  config.ts uses `??` (not `||`) so an explicit empty disables while unset keeps the
  default. The corresponding proxy mount (/didcomm, /lightning, /names) then 501s.

keymaster (JS + Python, in parity) fetches the manifest once (memoized, 5s timeout /
httpx timeout → fail-fast-permissive) and gates the verbs:
- send/receive/mediate/publishDidComm on `didcomm`; all Lightning ops on `lightning`
  via the single getLightningConfig chokepoint.
- A node that explicitly disables a service → clear "this node does not offer …".
- A node with NO manifest (older node / bare gatekeeper) is permissive — the op
  proceeds and fails lazily, so existing nodes never regress.
- publishDidComm on a DIDComm-less node publishes key-only (no dead endpoint).
- Folds in clear transport errors: an unreachable gateway now reports "could not
  reach the DIDComm gateway at …" instead of undici's bare "fetch failed".

Wallet/CLI UI feature-gating off the manifest is a tracked follow-up.

Tests: keymaster gating (JS + Python) for blocked/permissive paths; lightning suite
presets the memoized manifest (stub gatekeeper url is a black hole). Validated: JS... (continued)

2655 of 3292 branches covered (80.65%)

Branch coverage included in aggregate %.

18 of 39 new or added lines in 2 files covered. (46.15%)

5382 of 6088 relevant lines covered (88.4%)

880.62 hits per line

Uncovered Changes

Lines Coverage ∆ File
21
87.57
0.05% packages/keymaster/src/keymaster.ts
Jobs
ID Job ID Ran Files Coverage
1 28184231850.1 25 Jun 2026 04:18PM UTC 102
86.68
GitHub Action Run
Source Files on build 28184231850
  • Tree
  • List 51
  • Changed 47
  • Source Changed 2
  • Coverage Changed 47
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #28184231850
  • 1cec3d1f on github
  • Prev Build on main (#28143747602)
  • Next Build on main (#28189298403)
  • 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