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

archetech / archon / 31834816549
95%

Build:
DEFAULT BRANCH: main
Ran 14 Aug 2026 07:50PM UTC
Jobs 1
Files 88
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

14 Aug 2026 07:46PM UTC coverage: 94.125% (-0.03%) from 94.157%
31834816549

push

github

web-flow
feat: Separate acknowledging DIDComm messages from retrieving them (#884)

* feat: Separate acknowledging DIDComm messages from retrieving them

receiveDidComm deleted messages from the mailbox as soon as it could
decrypt them, treating "I could decrypt it" as "I have it safely". It
persists nothing itself, so a message was retrieved, removed server-side,
and left to exist only in the caller's memory. A caller that crashed,
declined to store it, or simply printed and exited lost it permanently.

Two clients on the same DID could not both receive either, since whoever
polled first drained the mailbox.

Add an `ack` option (default true, so existing callers are unaffected) and
a separate ackDidComm(ids). Each unpacked result now carries its mailbox
id, so a caller can retrieve with ack: false, store the messages, and
acknowledge them afterwards. This matches DIDComm Pickup 3.0, where
messages-received is a client-driven ack sent once the client has stored
what it fetched.

Nothing accumulates as a result: the relay already enforces a message TTL
(ARCHON_DIDCOMM_MESSAGE_TTL_MS, 7 days by default) in both the memory and
redis stores, which remains the backstop for anything never acknowledged.

Applied across every surface that carries the receive/remove pair: JS
keymaster, client + types, CLI (--no-ack, ack-didcomm), MCP server, REST
router (POST /didcomm/ack), the pure-Python keymaster port and its CLI,
and the Python SDK.

mediateDidComm is deliberately left alone. Once a mediator has relayed an
envelope onward, deleting it is the correct behaviour, so it keeps the
current semantics rather than inheriting the flag.

Closes #883

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* test: Add unit coverage for the DIDComm ack split

The first pass exercised the new behaviour through the e2e relay, the
client, MCP and the Python SDK, but not the Keymaster class directly.
Add unit tests in the existing mocked-gateway style:

- receiveDidCom... (continued)

3629 of 4089 branches covered (88.75%)

Branch coverage included in aggregate %.

33 of 34 new or added lines in 4 files covered. (97.06%)

8274 of 8557 relevant lines covered (96.69%)

689.6 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
91.71
-0.05% packages/keymaster/src/keymaster.ts
Jobs
ID Job ID Ran Files Coverage
1 31834816549.1 14 Aug 2026 07:50PM UTC 176
95.15
GitHub Action Run
Source Files on build 31834816549
  • Tree
  • List 88
  • Changed 74
  • Source Changed 4
  • Coverage Changed 74
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #31834816549
  • 56d095a5 on github
  • Prev Build on main (#31712460295)
  • Next Build on main (#31838413435)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc