Build Report · Week 41 · the week the wallet became the key

Sign in with a tap, not a password

196 changes this week, down from Week 40's 302. Most of them landed on two days, Monday and Sunday. Two stories carry it. First, your wallet is now how you sign in. A website shows a link, your browser wallet checks it, you approve, and you're in. No password is involved and your key never leaves the wallet. This arrived in the community, its new member portal, the operator console and the identity-log host. Until now, ordinary members could not sign in to their community anywhere. Second, the first real steps toward accepting credentials from European government wallets (Switzerland's swiyu and the EU's digital identity wallet): reading the keys they use, checking whether a credential has been revoked, and an identity the community can present to those wallets. Around those two: the community app shipped 0.5.0, which walks applicants and vetters through hidden vetting step by step. Two real-world messaging outages were fixed. And your agent now signs git commits itself, so the signing key never has to leave it.

📅 October 5 → October 11, 2026 · 10 projects scanned, 7 shipped
196
changes shipped across seven of the ten projects in scope
23
changes building wallet sign-in, across three projects
+922
new automated checks (16,979 → 17,901), like-for-like across the same eight projects
65
changes on the busiest day, Sunday October 11
The Big Picture

Six things changed this week

Last week settled who may run a community. This week was about getting people in: members signing in with their wallets, wallets from outside our own ecosystem being understood, and applicants able to see where they are in the joining process.

🔗

Wallet sign-in by link

A site shows a sign-in link. The browser wallet reads and checks it. You approve, and your agent signs a short-lived note saying “this browser may act as me on this site until a set time”. The community console, a new member portal and the identity-log host all accept it. A session can't outlive that note, and the console shows roughly where the request came from.

🇪🇺

European wallets, first steps

The community can now verify credentials signed with the key types swiyu and EU wallets use, and check a credential against a published revocation list. Members whose keys sit in a phone's secure chip can sign as members. The community also has a separate, sealed verifier identity to present to those wallets, and the developer kit has the core of the matching protocol.

🧭

Hidden vetting you can follow

The community app's 0.5.0 turns joining and vetting into a journey: every step, where you are, and why. Monday alone brought 39 changes, most of them fixes found by walking those journeys. In the admin console, hidden vetting can now be seen, run and switched off, and every refusal says why.

✍️

Git signing without handing over the key

The git-signing tool used to export the signing key from the agent on every commit. Now the agent signs the commit itself, and its signature is only valid as a git signature. The key stays where it lives. The community app turned this on, and the git bridge can now require N approving reviews before a merge.

📡

Two outages, two fixes

On October 5, admin sessions stopped receiving replies because unreadable messages piled up in an inbox until it was full. On October 11, after a DNS outage, agents couldn't hold a connection for over an hour. Both causes were found and fixed the same week. The browser wallet now also falls back to a direct connection when its message hub goes quiet, and tells you it has.

🗂️

Files, accounts and a new console

Encrypted files in data rooms, stored on disk, S3 or Google Cloud. The agent can act as key holder for cloud accounts, handing out short-lived credentials. The admin console's redesign reached its dashboard, members, access lists and a command palette. The trust backbone also adopted named releases and cut its first under the new scheme, “Eucalyptus”.

Why It Matters

What this means, in plain terms

🙋

Members get a front door

Until this week a community's sign-in admitted administrators only, so an ordinary member had nowhere to log in. They now have a portal of their own, kept separate from the admin console by the server itself, not just by what each page displays. They sign in with the same wallet they already use, and there is no password to steal.

🌍

Talking to the wider world

Until now our tools understood only credentials made by our own tools. Being able to read what government-backed wallets issue, and to check whether it has been revoked, is the start of a community accepting a real-world ID. It isn't finished: the full request-and-present exchange with a swiyu wallet is designed but not yet running end to end.

🔐

Fewer copies of every key

Signing git commits used to mean copying the key out of the agent every time. Cloud-account secrets now stay inside the agent and are left out of portable backups. A swiyu verifier key is passed over in a sealed hand-off and never joins the community's own signing keys. Across the week, keys moved less often.

196
changes across 7 of 10 projects. Busiest day: 65 on Sunday October 11
+922
new automated checks (16,979 → 17,901), a thirteenth consecutive rise
+142.6k
lines added (−18.4k removed) across 1,042 files, mostly new features this time, not removals
0
changes on Thursday and Friday across all ten projects. The week ran Monday–Wednesday, then Saturday–Sunday
★ Big outcome #1 · The week's headline

Your wallet is now how you sign in

Think of a boarding pass. The airline issues it, it names one flight, and it stops working after departure. The gate agent doesn't need your password, only a pass they can check came from the airline. Wallet sign-in works the same way. Your agent issues the pass, it names one website, and it expires. The website checks it and lets you in.

What changed. The agent can now sign a sign-in grant: “let this browser key act as me at this site until this time.” A device can register a user-verification key when it enrols, either a phone's secure chip or the browser wallet's passkey. Each site publishes what it supports in its public identity document. The browser wallet reads sign-in links strictly to the specification, refuses malformed ones, and can now offer to join an unknown community or trust an unknown identity host straight from a sign-in code. On the community side, a member portal at /members admits only active members. The check runs at sign-in, on every refresh and on every request, and a session ends when its grant does. The operator console's login page uses the same link. The identity-log host gained wallet sign-in on Sunday, and checks itself to confirm its public identity lists everything a wallet needs.

🔗
The site shows a link
A sign-in link or code on the member portal, the operator console or the identity-log host.
🧐
The wallet checks it
The browser wallet reads it strictly, names the site, and offers to join or trust it if it's new.
✅
You approve
Your agent signs a grant for this browser, this site, until a set time. The key stays put.
⏱️
A session, bounded
The site opens a session that cannot outlive the grant, even across refreshes.
★ Big outcome #2 · Beyond our own ecosystem

First steps toward accepting European ID wallets

Switzerland's swiyu and the EU's digital identity wallet issue and present credentials in their own standard format, signed with different kinds of keys from ours. Nine changes this week, six in the trust backbone and three in the developer kit, all filed against one goal: a community that can ask one of those wallets for a credential and trust the answer.

🔏 Read their signatures

The community, the agent and the shared identity resolver could verify only one kind of signature. They now also verify the two kinds these wallets use, from issuers published on the web. The check is strict: the issuer's key decides the algorithm, and nothing in the credential can choose a weaker one.

🚫 Check for revocation

Support for the new IETF Token Status List standard: a compact list an issuer publishes to say which credentials it has revoked. The community reads it, but only after confirming the credential's own issuer signed it.

📱 Members with phone-chip keys

A member whose key lives in a phone's secure chip or an EU wallet can now sign requests, rotate keys and receive credentials as a member. Before, all of it assumed one key type.

🪪 A verifier identity

A swiyu wallet answers only a verifier listed in the Swiss registry. The community now gets a separate verifier identity. Its key arrives by a sealed hand-off and is never mixed with the keys that sign the community's own credentials. The agent has a ready-made template for creating that identity.

Still to come. The developer kit now has the protocol core for requesting and decrypting a presentation (OpenID4VP 1.0), and the design for the community acting as a verifier was written this week. The full exchange with a real swiyu wallet has not yet been run, and this page doesn't claim it has.

The Quality Delta · last report → now

How much healthier is it than a week ago?

Counted the same way as the previous twelve reports, across the same eight Rust projects. Every starting figure below matches the ending figure Week 40 published. The browser wallet and the phone approver are written in TypeScript and Swift, so they add nothing to these counts. Their changes are included in the headline totals above.

Automated checks (run on every change; same eight projects)
16,979→17,901
▲ +922 checks (+5.4%), a thirteenth consecutive rise. The trust backbone added 455, the community app 273, the developer kit 92 and the identity-log host 83
Test stand-ins (fakes that let a component be tested without the rest of the system)
1,164→1,181
▲ +17 (+1.5%). Trust backbone +11, community app +6
Future-proofed interfaces (surfaces that can gain a field without breaking everyone downstream)
578→602
▲ +24. Trust backbone +13, developer kit +7, community app +2, identity-log host +2
Unused-code markers (lower is better, and this one moved the wrong way again)
159→162
▲ +3, worse, for a fifth week running. The smallest rise yet, but still not falling. Developer kit +2, trust backbone +1

In one line: fewer changes, more of them new features, and checks still rising steadily. Three honest notes. First, 196 against 302 is a real fall, with the same ten projects and the same method. No project changed at all on Thursday or Friday. Second, this week mostly added. Only 18.4k lines were removed, against 93.8k last week, when old web routes were retired. Third, the stand-in count rose much less than last week (+17 against +61). The new work leaned on full tests more than on fakes. And one about the reading itself: this was generated on Sunday evening, while work was still landing. Anything merged after these figures were taken is picked up by Week 42, which starts from exactly where this one stopped. Two local copies were behind the published line (trust backbone by 1, identity-log host by 2). Every figure here comes from origin/main.

The Detail · 10 Projects in Scope

What changed, project by project

The published report tracks around eleven projects. This page covers the ten held locally, so the totals here are a minimum rather than the whole picture. Seven of the ten shipped something this week.

The trust backbone ★

ENGINE
The engine room: identities, communities, credentials, and the agent a person runs. (verifiable-trust-infrastructure)
  • Wallet sign-in: signed sign-in grants, device verification keys, a member portal, the operator console login, sessions bounded by the grant, and an approximate location for each sign-in request, looked up locally.
  • European wallets: verifies credentials signed with the key types swiyu and EU wallets use, reads revocation lists, supports members with phone-chip keys, and gives the community a separate verifier identity with a sealed key hand-off.
  • Hidden vetting in the console: visible, runnable and switchable. Each refusal says why, and changing the vouching rate no longer voids earlier vouches.
  • New capabilities: git signing without exporting the key, encrypted files in data rooms (disk, S3, Google Cloud), the agent as key holder for cloud accounts, and direct admission of a member under an admission policy.
  • Operations: the agent's web server now uses every CPU inside its secure enclave (it was capped at one). Fewer storage reads per signature. Named release branches, with “Eucalyptus” cut. A node that stops collecting its messages is now noticed.
Wallet sign-inEU walletsRoom filesEucalyptus 79 changes · +76.8k

OpenVTC, the community app ★

APP
The app a person uses to hold identities and join communities. (openvtc)
  • Release 0.5.0: joining and vetting as step-by-step journeys for both applicant and vetter, with what each step is for.
  • Joining that holds up: 39 changes on Monday alone. A refused join says why instead of sitting at “Pending”, a lost enrolment is asked for again, a vetter can give a reason for declining, and an applicant can consent to registry listing and review what will be sent.
  • Fewer assumptions: no built-in message hub (it comes from your agent), readable in terminals without full colour (--monochrome), and a repository can choose which forge account it uses.
  • Every device in step: account state is now kept at your agent, so archiving a community on one machine shows on the others. Private keys never sync.
0.5.0JourneysDevice sync 55 changes · +29.5k

The browser wallet ★

APP
The wallet that lives in the browser. (pnm-browser-plugin)
  • Sign-in by link: reads sign-in links to the specification, registers each install as a device first, and can offer to join an unknown community or trust an unknown identity host.
  • Keeps working when the hub doesn't: falls back to a direct connection when an agent stops replying through its message hub, and says so. A connection that died during sleep is no longer reused.
  • Diagnostics: a real round trip per connection type in the self-test, and every failed background request logged.
Sign-in linksFallback 25 changes · +15.3k

The developer kit

SDK
The shared toolkit every project here builds on, and the message hub itself. (affinidi-tdk-rs)
  • European-wallet groundwork: the encryption those wallets use, the core of the OpenID4VP 1.0 verifier, stricter credential-presentation checks, and revocation lists.
  • Both outages fixed: unreadable messages are cleared instead of filling an inbox, and a reconnected socket is no longer killed by heartbeats it missed while offline.
  • Hub secrets in one place: the message hub keeps all its secrets in a single stored secret, with a migration checked at every step. A follow-up fixed hubs on Vault that wouldn't start after upgrading.
OID4VP coreOutage fixesOne secret 13 changes · +10.1k

Git signing

TOOL
Signs and verifies git commits by identity, and governs forges. (verifiable-git-infrastructure)
  • The agent signs, the key stays (0.17.0), and the tool falls back cleanly when a credential isn't allowed to.
  • Required approvals (0.18.0): a pull request needs N approving reviews before it merges.
  • Kept current: finds its credential on Linux the way the community app does, and took the new shared dependency set (0.19.0).
Key stays putN approvals 15 changes · +1.5k

The identity-log host

SERVICE
Publishes and witnesses identity histories. (affinidi-webvh-service)
  • Wallet sign-in, all six changes landing on Sunday: sign in with a link, replies signed so the wallet can trust them, and the match number shown as soon as a request is claimed.
  • A self-check that the server's public identity lists everything wallet sign-in needs.
Wallet sign-inSelf-check 6 changes · +8.1k

The trust registry

SERVICE
Answering “is this party trusted?” (affinidi-trust-registry-rs)
  • Release 0.23.0 supports the newer message hub, and 0.24.0 took the new shared dependency set on Sunday.
Kept current 3 changes · +1.4k

The quiet projects

3 SHIPPED NOTHING
Scanned and unchanged, recorded so “unchanged” can be told apart from “not looked at”. (vta-mobile-agent-ios, vti-message-bridge, affinidi-keri-rs)
  • The phone approver shipped nothing for a fourth week running. This week sharpens the gap: wallet sign-in now has a slot for a phone's secure-chip key, built with this app in mind, and the browser wallet already signs in.
  • The chat bridge: quiet after last week's single fix.
  • The KERI library: a seventh quiet week, as a stable dependency. Unchanged since 23 August.
ScannedApprover must followStable dependency 0 changes
★ What's next · From sign-in to a real foreign credential

The door is built. Now put more devices and more wallets through it.

Bring the phone approver into sign-in. Four quiet weeks now, while wallet sign-in added a slot built for a phone's secure chip. It is the standing risk on this page. Run one exchange with a real swiyu wallet. The signatures, revocation check, verifier identity and protocol core are all in place. Next is an end-to-end request and presentation, on test data. Move the community app to the new dependency set. Git signing and the trust registry moved on Sunday; the community app's move is on a branch, not yet merged and not counted here. Get the proof library reviewed. Hidden vetting is now easy to follow in the app, which makes the independent review of its research library more pressing, not less. And stop the unused-code rise. +3 is the smallest rise yet, but it is the fifth in a row.

📱
The approver follows
Four quiet weeks. Sign-in has a place waiting for the phone's secure-chip key.
🇨🇭
One real exchange
Ask a swiyu wallet for a credential and verify the answer, end to end, on test data.
🔬
Review the proofs
Hidden vetting is now visible in the app. An independent review of the proof library is the gate.
🧹
Give the slip an owner
Unused-code markers are up five weeks running, +3 this week.