feat(identity): WE identity module — agent-scoped DID, devices, guardians, recovery, KEL - #184
Draft
HexaField wants to merge 4 commits into
Draft
feat(identity): WE identity module — agent-scoped DID, devices, guardians, recovery, KEL#184HexaField wants to merge 4 commits into
HexaField wants to merge 4 commits into
Conversation
✅ Deploy Preview for coasys-we ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
…uardians, recovery, KEL Schema-fragment-only module (Tier 1 — no framework imports). Agent-scoped: appears in the module rail everywhere, not tied to any space. Hard boundary: talks only to the agent language, never the perspective DB. Views: - Home: DID banner, backup status, enrolled devices + assistants roster - Detail: full key info, scope tags, revocation with consequences - Guardians: threshold ring, consent status, pending warnings - Recovery: mnemonic + guardian methods, incoming requests (as guardian) - Log: KEL event viewer with sequence/type/summary, JSON export Store exposes data signals (identity, roster, guardians, kelEvents, recoveryState) populated by the host's identity client wiring. Schema fragments degrade gracefully with loading/empty states. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
HexaField
force-pushed
the
feat/identity-module
branch
from
September 3, 2026 06:10
5160f25 to
2c79be5
Compare
- Add identity wiring layer (identityRpc.ts + wireIdentityModule.ts) that connects the executor's identity.* RPC handlers to the module store after auth via BootController.onSessionUnlocked - Transform executor response shapes (nested key.*, Rust Lane enum, numeric seq) into flattened UI entries the schema fragments read - Wire actions: exportKel (file download), revokeKey (+ roster refresh), startBackup (generateMnemonic + confirm), startEnrolment (createEnrolOffer) - Move identity UI from space dock panel to Settings account page (IdentitySettings.schema.ts with tabs: Devices, Guardians, Recovery, Log) - Remove dead dock/launcher/capabilities, panel, and schema fragments from module definition — now a pure data store - Fix dead buttons: Back up, Add device/assistant, Add guardian now have $action handlers - Add e2e test infrastructure (Playwright) with identity module spec (auth bypass, settings navigation, tab interaction, RPC validation) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix: IdentitySettings tab conditions used === (not in the expression grammar); changed to == so tab content actually renders. Tests: 16 e2e tests covering every identity UI state — single/multi device rosters, device detail (active + revoked), guardians (consented, pending, empty), recovery (methods, active progress, incoming requests), KEL event log (populated + empty), backup states (nag banner + secured). Tests inject data via window.__identityStore hook exposed by wireIdentityModule, then take screenshots of every tab and state. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace window.alert() in device enrollment with a proper QR code view:
- Add qrcode package to app-shell for data URL generation
- Add enrolmentOffer signal + dismissEnrolment action to identity module store
- wireIdentityModule generates QR data URL encoding executor URL + offer credentials
- Schema shows QR view (image, instructions, cancel) replacing device list during enrollment
- QR payload: JSON { type: 'adam-enrol', executor, offer: { publicKey, challenge, label } }
- E2e test validates QR rendering, img src, and dismiss flow (2 new screenshots)
- All 17 tests pass
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Goal
Give the agent identity plane a face inside WE. The identity module renders as an agent-scoped dock panel — always available in the module rail, not tied to any space.
Hard boundary (non-negotiable): this module talks ONLY to the agent language (identity client). Zero perspective DB access.
Design
Schema-fragment-only module (Tier 1 — no framework imports). Every piece of UI uses
SchemaNoderegistry keys (Column,we-button,we-tabs,we-avatar, etc.), so the module renders on any framework host without introducing the second-runtime hazard.Views
Store
Data signals (
identity,roster,guardians,kelEvents,recoveryState,backupConfirmed) start empty and the host populates them when the identity RPC client connects. Schema fragments degrade gracefully —$ifguards render loading or empty states until data arrives.Derived values compute device/assistant counts, threshold labels, guardian recovery descriptions, and the selected device detail.
Navigation
$localState— resets to Home on panel reopenDepends on
Screenshots
See PR description — Home, Detail, Guardians, Recovery, and Log views verified via standalone preview.