Implementation Status

As-of: 2026-05-09. Source: direct code inspection of passkey-shell repo, file-by-file verification. Status values: Done (shipped, tested) / In progress (partial) / Stubbed (code-ready, not wired) / Not started / Deprecated.


Backend — Core Services

ComponentStatusCode PathTest CoverageBlockersNotes
Vault read service (KSM SDK)Doneservices/vault-read.service.tsvault.factory.test.tsNoneReal impl (RealVaultReadService) uses @keeper-security/secrets-manager-core. Mock has test helpers for revision bumps, orphan simulation.
Vault share service (Commander)Doneservices/vault-share.service.tsvault.factory.test.tsKSM Application IP lock needs uncheckingThree impls: RealVaultShareService (Commander subprocess), StubVaultShareService (staging), MockVaultShareService (local).
Commander subprocess wrapperDoneservices/commander.tsIndirect via share service testsNonerunCommander() shells out to python3 -m keepercommander. Error classification: transient/persistent/terminal.
Vault factory (mode switching)Doneservices/vault.factory.tsvault.factory.test.tsNoneMaps VAULT_DEPLOYMENT_MODE → service pairs. Legacy shim for v1 callers during convergence.
Governance serviceDoneservices/governance.service.tsgovernance.service.test.tsNoneResource/authority sync, approver resolution, policy context building, decision trace append.
Authority service (INV-1)Doneservices/authority.service.tsauthority.service.test.tsNoneAppend-only authority history. Assign/revoke/replace operations. Drift reporting against vault state. INV-1 enforced by Postgres BEFORE UPDATE trigger.
Approval serviceDoneservices/approval.service.tsapproval.service.test.tsNoneApproval/denial workflow with policy engine evaluation and decision trace.
Lease serviceDoneservices/lease.service.tsIntegration testsNonestartLease, releaseLease, expireLease, promptRenewal. Sync-first/async-fallback issuance pattern.
Issuance serviceDoneservices/issuance.service.tsissuance.service.test.tsNoneToken generation, constant-time verification, rate-limit predicate, INV-5 guard (rejects URL-shaped hashes).
Revocation serviceDoneservices/revocation.service.tsrevocation.service.test.tsNoneBatch revocation of issuance events by request ID. Calls vaultShareService.removeOneTimeShare.
Request serviceDoneservices/request.service.tsrequest-status.test.tsNoneCRUD operations on Request model.
Record serviceDoneservices/record.service.tsIndirectNoneRecord CRUD with vault sync metadata.
Notification serviceDone (mock)services/notification.service.tsnotification.service.test.tsBot registration needed for realMock writes to Prisma Notification table. Real impl (Bot Framework Adaptive Cards) is interface-only. Share link no longer embedded in notification body — deep link to /requests/:id#issue instead.
Identity service (Entra ID)Doneservices/identity.service.tsIndirect via auth middlewareNoneJWT validation via jose, Entra tenant/audience/issuer config, group caching (5 min TTL).
Permission serviceDoneservices/permission.service.tsIndirectNoneResolves permissions from Vault folder ACLs + Entra groups. 5-minute cache in UserPermissionCache.
Audit serviceDoneservices/audit.service.tsIndirect via integration testsNone27-action audit enum. Writes AuditEvent rows.
Telemetry serviceDoneservices/telemetry.service.tstelemetry.service.test.ts, telemetry-fixtures.test.ts, telemetry.types.test.tsNoneOpenTelemetry spans + metrics. Application Insights export.
Probe serviceDoneservices/probe.service.tsprobe.service.test.tsNoneGovernance probe execution with event audit logging.
Serialization serviceDoneservices/serialization.service.tsserialization.service.test.tsNoneRequest/record serialization for API responses.
Auth status serviceDoneservices/auth-status.service.tsIndirectNoneResolves authentication status from request headers.
Commander health serviceDoneservices/commander-health.service.tsIndirectNoneHealth check for Commander subprocess availability.
Log redaction middlewareDonemiddleware/log-redaction.middleware.tslog-redaction.middleware.test.tsNoneDefense-in-depth: scrubs share URLs from console output. Installed before any other import in server.ts.

Backend — Policy Engine

ComponentStatusCode PathTest CoverageBlockersNotes
Policy engine (pure evaluator)Donepolicy/engine.tsengine.test.tsNoneDENY short-circuits, TRIAGE > ROUTE > AUTO_APPROVE. No side effects.
Self-approval block ruleDonepolicy/rules/self-approval-block.tsself-approval-block.test.tsNone
Sensitivity escalation ruleDonepolicy/rules/sensitivity-escalation.tssensitivity-escalation.test.tsNone
Visibility ruleDonepolicy/rules/visibility.tsvisibility.test.tsNone
Duration caps ruleDonepolicy/rules/duration-caps.tsduration-caps.test.tsNoneCovers INITIAL, EXTENSION, RENEWAL request kinds.
Request state ruleDonepolicy/rules/request-state.tsrequest-state.test.tsNoneValidates transitions on 9-state machine.
Authority routing ruleDonepolicy/rules/authority-routing.tsauthority-routing.test.tsNone
Access policy typesDonepolicy/access-policy.tsaccess-policy.test.tsNonePolicyActor, PolicySubject, GovernedResourcePolicyContext types.
Context builderDonepolicy/context-builder.tscontext-builder.test.tsNone
Inputs hashDonepolicy/inputs-hash.tsinputs-hash.test.tsNoneSHA-256 of canonicalized policy context.
Replay contextDonepolicy/replay-context.tsreplay-context.test.tsNone
Rule compositionDonepolicy/rules/index.tscomposition.test.tsNoneStandard rule chain wiring.

Backend — Background Jobs

ComponentStatusCode PathTest CoverageBlockersNotes
Lease schedulerDonejobs/lease-scheduler.tsIndirectNone60s interval. Expires leases, prompts renewals.
Vault sync jobDonejobs/vault-sync.job.tsIndirectNoneSyncs vault record metadata, detects rotations/orphans.
Permission sync jobDonejobs/permission-sync.job.tsIndirectNoneRe-resolves vault folder permissions, invalidates caches.
Discovery jobDonejobs/discovery.job.tsIndirectNoneDiscovers new vault records not registered in Postgres.
Issuance retry jobDonejobs/issuance-retry.job.tsIndirectNoneRetries failed issuances. Budget N=3, backoff [30s, 1m, 2m, 4m].
Commander rotation checkDonejobs/commander-rotation-check.job.tsIndirectNoneFlags records where rotation is due.

Backend — Integration Tests

ComponentStatusCode PathTest CoverageBlockersNotes
Approve-then-issue flowDoneintegration/approve-then-issue.test.tsNoneEnd-to-end: request → approve → issue → verify INV-5 (no URLs in DB).
Governance snapshotDoneintegration/governance-snapshot.test.tsNone
Issuance cap traceDoneintegration/issuance-cap-trace.test.tsNoneVerifies maxIssuances enforcement.
Replay harnessDoneintegration/replay-harness.test.tsNoneDecision replay verification.

Backend — Routes

ComponentStatusCode PathTest CoverageBlockersNotes
Auth routesDoneroutes/auth.routes.tsIndirectNone
Records routesDoneroutes/records.routes.tsIndirectNone
Requests routesDoneroutes/requests.routes.tsIndirectNone
Leases routesDoneroutes/leases.routes.tsIndirectNone
Audit routesDoneroutes/audit.routes.tsIndirectNone
Notifications routesDoneroutes/notifications.routes.tsIndirectNone
Admin routesDoneroutes/admin.routes.tsIndirectNoneADMIN role required. Vault sync, permission sync, discovery, record registration, folder listing.
Probe routesDoneroutes/probe.routes.tsIndirectNone
Authority routesDoneroutes/authority.routes.tsIndirectNone
Governance routesDoneroutes/governance.routes.tsgovernance.routes.test.tsNone
Issuance routesDoneroutes/issuance.routes.tsissuance.routes.test.tsNonePOST /api/requests/:id/issue — token-exchange endpoint.
Vault webhooks routesDoneroutes/vault-webhooks.routes.tsIndirectNone
Commander health routesDoneroutes/commander-health.routes.tsIndirectNone

Frontend

ComponentStatusCode PathTest CoverageBlockersNotes
React app (Fluent UI 9 + Tailwind)Donefrontend/src/MinimalNoneFull UI with routing, auth store, settings.
Teams theme hookDonefrontend/src/hooks/useTeamsTheme.tsNoneNone
Active lease hookDonefrontend/src/hooks/useMyActiveLease.tsNoneNone
Countdown hookDonefrontend/src/hooks/useCountdown.tsNoneNone
Resizable width hookDonefrontend/src/hooks/useResizableWidth.tsNoneNone
API serviceDonefrontend/src/services/api.tsNoneNone
Probe API serviceDonefrontend/src/services/probe-api.tsNoneNone
Teams serviceDonefrontend/src/services/teamsService.tsNoneNone
Auth store (Zustand)Donefrontend/src/stores/auth.store.tsNoneNone
Frontend test runner (vitest)Stubbedfrontend/tests/governance.spec.ts, frontend/src/components/RequestIssuancePanel.test.tsx2 test files existvitest not in package.json scriptsTest files exist but no test script in frontend/package.json. Cannot run tests.

Infrastructure & Deployment

ComponentStatusCode PathTest CoverageBlockersNotes
Staging deploy scriptDonedeploy/deploy-staging.ps1ManualNone9-step PowerShell: build → package → zip deploy → smoke test.
Prod deploy scriptDonedeploy/deploy-prod.ps1ManualNoneSame 9 steps + confirmation prompt.
Staging app settingsDonedeploy/appsettings-staging.jsonManualNoneVAULT_DEPLOYMENT_MODE=staging.
Prod app settingsIn progressdeploy/appsettings-prod.jsonManualEntra values are placeholdersENTRA_APP_ID_HERE etc. not yet populated.
Staging App ServiceDoneAzure: app-passkey-stg-ben-6b2f/healthz 200NoneB1 Linux, Node 22.
Prod App ServiceNot startedAzure: app-passkey-prod-1353Not deployedEntra config, VNet setup, NAT GatewayProvisioned but not serving traffic.
Prisma migration chainIn progressbackend/prisma/Incomplete baselineUsed db push for staging. Need baseline migration before next environment.
KSM Application setupIn progressExternal (Keeper Console)IP lock checked at creationKSM Application created. IP lock must be unchecked or application recreated. Folders not yet granted.
Bot Framework registrationNot startedM365 admin needednotification.service.ts and card templates exist. No bot registered. No BOT_REGISTERED flag.
getFolderPermissions() in Real implStubbedvault-read.service.tsKSM SDK doesn’t expose folder ACLInterface method defined. RealVaultReadService throws “not supported by KSM SDK.” Zero callers in production code.
VNet + NAT Gateway (prod)Not startedAzure: rg-passkey-prodProd deploy decisionnatgw-passkey-prod referenced in CLAUDE.md but not provisioned.
Hand-linked SQL (Postgres ↔ Keeper UIDs)Tacticalseed-definition.ts, manualDiscovery rebuildWorks but needs reconciliation or reset for v3.
Custom domain (pazzkey.com for portal)Not startedDNS + SSL certNo custom domain binding on any App Service.

Seed & Fixtures

ComponentStatusCode PathTest CoverageBlockersNotes
Seed definition (single source)Doneseed/seed-definition.tsUsed by testsNoneCanonical record/user/folder/authority shapes.
Postgres seed emitterDoneseed/emit-postgres-seed.tsNone
Vault fixture emitterDoneseed/emit-vault-fixture.tsNone
Governance fixturesDonebackend/seed/governance-fixtures.tsNone