@kya-os/mcp-i-core 1.3.12 → 1.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/remote-config.js +9 -12
- package/dist/runtime/base.js +11 -0
- package/dist/services/access-control.service.js +5 -0
- package/dist/services/tool-protection.service.js +17 -8
- package/package.json +2 -2
- package/.turbo/turbo-build.log +0 -4
- package/.turbo/turbo-test$colon$coverage.log +0 -4586
- package/.turbo/turbo-test.log +0 -3169
- package/COMPLIANCE_IMPROVEMENT_REPORT.md +0 -483
- package/Composer 3.md +0 -615
- package/GPT-5.md +0 -1169
- package/OPUS-plan.md +0 -352
- package/PHASE_3_AND_4.1_SUMMARY.md +0 -585
- package/PHASE_3_SUMMARY.md +0 -317
- package/PHASE_4.1.3_SUMMARY.md +0 -428
- package/PHASE_4.1_COMPLETE.md +0 -525
- package/PHASE_4_USER_DID_IDENTITY_LINKING_PLAN.md +0 -1240
- package/SCHEMA_COMPLIANCE_REPORT.md +0 -275
- package/TEST_PLAN.md +0 -571
- package/coverage/coverage-final.json +0 -60
- package/dist/cache/oauth-config-cache.d.ts.map +0 -1
- package/dist/cache/oauth-config-cache.js.map +0 -1
- package/dist/cache/tool-protection-cache.d.ts.map +0 -1
- package/dist/cache/tool-protection-cache.js.map +0 -1
- package/dist/compliance/index.d.ts.map +0 -1
- package/dist/compliance/index.js.map +0 -1
- package/dist/compliance/schema-registry.d.ts.map +0 -1
- package/dist/compliance/schema-registry.js.map +0 -1
- package/dist/compliance/schema-verifier.d.ts.map +0 -1
- package/dist/compliance/schema-verifier.js.map +0 -1
- package/dist/config/remote-config.d.ts.map +0 -1
- package/dist/config/remote-config.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/delegation/audience-validator.d.ts.map +0 -1
- package/dist/delegation/audience-validator.js.map +0 -1
- package/dist/delegation/bitstring.d.ts.map +0 -1
- package/dist/delegation/bitstring.js.map +0 -1
- package/dist/delegation/cascading-revocation.d.ts.map +0 -1
- package/dist/delegation/cascading-revocation.js.map +0 -1
- package/dist/delegation/delegation-graph.d.ts.map +0 -1
- package/dist/delegation/delegation-graph.js.map +0 -1
- package/dist/delegation/did-key-resolver.d.ts.map +0 -1
- package/dist/delegation/did-key-resolver.js.map +0 -1
- package/dist/delegation/index.d.ts.map +0 -1
- package/dist/delegation/index.js.map +0 -1
- package/dist/delegation/statuslist-manager.d.ts.map +0 -1
- package/dist/delegation/statuslist-manager.js.map +0 -1
- package/dist/delegation/storage/index.d.ts.map +0 -1
- package/dist/delegation/storage/index.js.map +0 -1
- package/dist/delegation/storage/memory-graph-storage.d.ts.map +0 -1
- package/dist/delegation/storage/memory-graph-storage.js.map +0 -1
- package/dist/delegation/storage/memory-statuslist-storage.d.ts.map +0 -1
- package/dist/delegation/storage/memory-statuslist-storage.js.map +0 -1
- package/dist/delegation/utils.d.ts.map +0 -1
- package/dist/delegation/utils.js.map +0 -1
- package/dist/delegation/vc-issuer.d.ts.map +0 -1
- package/dist/delegation/vc-issuer.js.map +0 -1
- package/dist/delegation/vc-verifier.d.ts.map +0 -1
- package/dist/delegation/vc-verifier.js.map +0 -1
- package/dist/identity/idp-token-resolver.d.ts.map +0 -1
- package/dist/identity/idp-token-resolver.js.map +0 -1
- package/dist/identity/idp-token-storage.interface.d.ts.map +0 -1
- package/dist/identity/idp-token-storage.interface.js.map +0 -1
- package/dist/identity/user-did-manager.d.ts.map +0 -1
- package/dist/identity/user-did-manager.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers/base.d.ts.map +0 -1
- package/dist/providers/base.js.map +0 -1
- package/dist/providers/memory.d.ts.map +0 -1
- package/dist/providers/memory.js.map +0 -1
- package/dist/runtime/audit-logger.d.ts.map +0 -1
- package/dist/runtime/audit-logger.js.map +0 -1
- package/dist/runtime/base.d.ts.map +0 -1
- package/dist/runtime/base.js.map +0 -1
- package/dist/services/access-control.service.d.ts.map +0 -1
- package/dist/services/access-control.service.js.map +0 -1
- package/dist/services/authorization/authorization-registry.d.ts.map +0 -1
- package/dist/services/authorization/authorization-registry.js.map +0 -1
- package/dist/services/authorization/types.d.ts.map +0 -1
- package/dist/services/authorization/types.js.map +0 -1
- package/dist/services/batch-delegation.service.d.ts.map +0 -1
- package/dist/services/batch-delegation.service.js.map +0 -1
- package/dist/services/crypto.service.d.ts.map +0 -1
- package/dist/services/crypto.service.js.map +0 -1
- package/dist/services/errors.d.ts.map +0 -1
- package/dist/services/errors.js.map +0 -1
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/index.js.map +0 -1
- package/dist/services/oauth-config.service.d.ts.map +0 -1
- package/dist/services/oauth-config.service.js.map +0 -1
- package/dist/services/oauth-provider-registry.d.ts.map +0 -1
- package/dist/services/oauth-provider-registry.js.map +0 -1
- package/dist/services/oauth-service.d.ts.map +0 -1
- package/dist/services/oauth-service.js.map +0 -1
- package/dist/services/oauth-token-retrieval.service.d.ts.map +0 -1
- package/dist/services/oauth-token-retrieval.service.js.map +0 -1
- package/dist/services/proof-verifier.d.ts.map +0 -1
- package/dist/services/proof-verifier.js.map +0 -1
- package/dist/services/provider-resolver.d.ts.map +0 -1
- package/dist/services/provider-resolver.js.map +0 -1
- package/dist/services/provider-validator.d.ts.map +0 -1
- package/dist/services/provider-validator.js.map +0 -1
- package/dist/services/session-registration.service.d.ts.map +0 -1
- package/dist/services/session-registration.service.js.map +0 -1
- package/dist/services/storage.service.d.ts.map +0 -1
- package/dist/services/storage.service.js.map +0 -1
- package/dist/services/tool-context-builder.d.ts.map +0 -1
- package/dist/services/tool-context-builder.js.map +0 -1
- package/dist/services/tool-protection.service.d.ts.map +0 -1
- package/dist/services/tool-protection.service.js.map +0 -1
- package/dist/types/oauth-required-error.d.ts.map +0 -1
- package/dist/types/oauth-required-error.js.map +0 -1
- package/dist/types/tool-protection.d.ts.map +0 -1
- package/dist/types/tool-protection.js.map +0 -1
- package/dist/utils/base58.d.ts.map +0 -1
- package/dist/utils/base58.js.map +0 -1
- package/dist/utils/base64.d.ts.map +0 -1
- package/dist/utils/base64.js.map +0 -1
- package/dist/utils/cors.d.ts.map +0 -1
- package/dist/utils/cors.js.map +0 -1
- package/dist/utils/did-helpers.d.ts.map +0 -1
- package/dist/utils/did-helpers.js.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/storage-keys.d.ts.map +0 -1
- package/dist/utils/storage-keys.js.map +0 -1
- package/docs/API_REFERENCE.md +0 -1362
- package/docs/COMPLIANCE_MATRIX.md +0 -691
- package/docs/STATUSLIST2021_GUIDE.md +0 -696
- package/docs/W3C_VC_DELEGATION_GUIDE.md +0 -710
- package/src/__tests__/cache/tool-protection-cache.test.ts +0 -640
- package/src/__tests__/config/provider-runtime-config.test.ts +0 -309
- package/src/__tests__/delegation-e2e.test.ts +0 -690
- package/src/__tests__/identity/user-did-manager.test.ts +0 -232
- package/src/__tests__/index.test.ts +0 -56
- package/src/__tests__/integration/full-flow.test.ts +0 -789
- package/src/__tests__/integration.test.ts +0 -281
- package/src/__tests__/providers/base.test.ts +0 -173
- package/src/__tests__/providers/memory.test.ts +0 -319
- package/src/__tests__/regression/phase2-regression.test.ts +0 -429
- package/src/__tests__/runtime/audit-logger.test.ts +0 -154
- package/src/__tests__/runtime/base-extensions.test.ts +0 -595
- package/src/__tests__/runtime/base.test.ts +0 -869
- package/src/__tests__/runtime/delegation-flow.test.ts +0 -164
- package/src/__tests__/runtime/proof-client-did.test.ts +0 -376
- package/src/__tests__/runtime/route-interception.test.ts +0 -686
- package/src/__tests__/runtime/tool-protection-enforcement.test.ts +0 -908
- package/src/__tests__/services/agentshield-integration.test.ts +0 -791
- package/src/__tests__/services/cache-busting.test.ts +0 -125
- package/src/__tests__/services/oauth-service-pkce.test.ts +0 -556
- package/src/__tests__/services/provider-resolver-edge-cases.test.ts +0 -591
- package/src/__tests__/services/tool-protection-merged-config.test.ts +0 -485
- package/src/__tests__/services/tool-protection-oauth-provider.test.ts +0 -480
- package/src/__tests__/services/tool-protection.service.test.ts +0 -1373
- package/src/__tests__/utils/mock-providers.ts +0 -340
- package/src/cache/oauth-config-cache.d.ts +0 -69
- package/src/cache/oauth-config-cache.d.ts.map +0 -1
- package/src/cache/oauth-config-cache.js.map +0 -1
- package/src/cache/oauth-config-cache.ts +0 -123
- package/src/cache/tool-protection-cache.ts +0 -171
- package/src/compliance/EXAMPLE.md +0 -412
- package/src/compliance/__tests__/schema-verifier.test.ts +0 -797
- package/src/compliance/index.ts +0 -8
- package/src/compliance/schema-registry.ts +0 -460
- package/src/compliance/schema-verifier.ts +0 -708
- package/src/config/__tests__/merged-config.spec.ts +0 -445
- package/src/config/__tests__/remote-config.spec.ts +0 -268
- package/src/config/remote-config.ts +0 -264
- package/src/config.ts +0 -312
- package/src/delegation/__tests__/audience-validator.test.ts +0 -112
- package/src/delegation/__tests__/bitstring.test.ts +0 -346
- package/src/delegation/__tests__/cascading-revocation.test.ts +0 -628
- package/src/delegation/__tests__/delegation-graph.test.ts +0 -584
- package/src/delegation/__tests__/did-key-resolver.test.ts +0 -265
- package/src/delegation/__tests__/utils.test.ts +0 -152
- package/src/delegation/__tests__/vc-issuer.test.ts +0 -442
- package/src/delegation/__tests__/vc-verifier.test.ts +0 -922
- package/src/delegation/audience-validator.ts +0 -52
- package/src/delegation/bitstring.ts +0 -278
- package/src/delegation/cascading-revocation.ts +0 -370
- package/src/delegation/delegation-graph.ts +0 -299
- package/src/delegation/did-key-resolver.ts +0 -179
- package/src/delegation/index.ts +0 -14
- package/src/delegation/statuslist-manager.ts +0 -353
- package/src/delegation/storage/__tests__/memory-graph-storage.test.ts +0 -366
- package/src/delegation/storage/__tests__/memory-statuslist-storage.test.ts +0 -228
- package/src/delegation/storage/index.ts +0 -9
- package/src/delegation/storage/memory-graph-storage.ts +0 -178
- package/src/delegation/storage/memory-statuslist-storage.ts +0 -77
- package/src/delegation/utils.ts +0 -221
- package/src/delegation/vc-issuer.ts +0 -232
- package/src/delegation/vc-verifier.ts +0 -568
- package/src/identity/idp-token-resolver.ts +0 -181
- package/src/identity/idp-token-storage.interface.ts +0 -94
- package/src/identity/user-did-manager.ts +0 -526
- package/src/index.ts +0 -310
- package/src/providers/base.d.ts +0 -91
- package/src/providers/base.d.ts.map +0 -1
- package/src/providers/base.js.map +0 -1
- package/src/providers/base.ts +0 -96
- package/src/providers/memory.ts +0 -142
- package/src/runtime/audit-logger.ts +0 -39
- package/src/runtime/base.ts +0 -1392
- package/src/services/__tests__/access-control.integration.test.ts +0 -443
- package/src/services/__tests__/access-control.proof-response-validation.test.ts +0 -578
- package/src/services/__tests__/access-control.service.test.ts +0 -970
- package/src/services/__tests__/batch-delegation.service.test.ts +0 -351
- package/src/services/__tests__/crypto.service.test.ts +0 -531
- package/src/services/__tests__/oauth-provider-registry.test.ts +0 -142
- package/src/services/__tests__/proof-verifier.integration.test.ts +0 -485
- package/src/services/__tests__/proof-verifier.test.ts +0 -489
- package/src/services/__tests__/provider-resolution.integration.test.ts +0 -202
- package/src/services/__tests__/provider-resolver.test.ts +0 -213
- package/src/services/__tests__/storage.service.test.ts +0 -358
- package/src/services/access-control.service.ts +0 -990
- package/src/services/authorization/authorization-registry.ts +0 -66
- package/src/services/authorization/types.ts +0 -71
- package/src/services/batch-delegation.service.ts +0 -137
- package/src/services/crypto.service.ts +0 -302
- package/src/services/errors.ts +0 -76
- package/src/services/index.ts +0 -18
- package/src/services/oauth-config.service.d.ts +0 -53
- package/src/services/oauth-config.service.d.ts.map +0 -1
- package/src/services/oauth-config.service.js.map +0 -1
- package/src/services/oauth-config.service.ts +0 -192
- package/src/services/oauth-provider-registry.d.ts +0 -57
- package/src/services/oauth-provider-registry.d.ts.map +0 -1
- package/src/services/oauth-provider-registry.js.map +0 -1
- package/src/services/oauth-provider-registry.ts +0 -141
- package/src/services/oauth-service.ts +0 -544
- package/src/services/oauth-token-retrieval.service.ts +0 -245
- package/src/services/proof-verifier.ts +0 -478
- package/src/services/provider-resolver.d.ts +0 -48
- package/src/services/provider-resolver.d.ts.map +0 -1
- package/src/services/provider-resolver.js.map +0 -1
- package/src/services/provider-resolver.ts +0 -146
- package/src/services/provider-validator.ts +0 -170
- package/src/services/session-registration.service.ts +0 -251
- package/src/services/storage.service.ts +0 -566
- package/src/services/tool-context-builder.ts +0 -237
- package/src/services/tool-protection.service.ts +0 -1070
- package/src/types/oauth-required-error.ts +0 -63
- package/src/types/tool-protection.ts +0 -155
- package/src/utils/__tests__/did-helpers.test.ts +0 -156
- package/src/utils/base58.ts +0 -109
- package/src/utils/base64.ts +0 -148
- package/src/utils/cors.ts +0 -83
- package/src/utils/did-helpers.ts +0 -210
- package/src/utils/index.ts +0 -8
- package/src/utils/storage-keys.ts +0 -278
- package/tsconfig.json +0 -21
- package/vitest.config.ts +0 -56
package/Composer 3.md
DELETED
|
@@ -1,615 +0,0 @@
|
|
|
1
|
-
# Phase 4: User DID & Identity Linking - Comprehensive Review
|
|
2
|
-
|
|
3
|
-
**Document Version:** 2.0
|
|
4
|
-
**Review Date:** January 2025
|
|
5
|
-
**Reviewer:** AI Architecture Review
|
|
6
|
-
**Status:** ✅ **APPROVED WITH CRITICAL RECOMMENDATIONS**
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Executive Summary
|
|
11
|
-
|
|
12
|
-
This comprehensive review evaluates the Phase 4 implementation plan against:
|
|
13
|
-
1. MCP-I Specification compliance
|
|
14
|
-
2. Codebase parity between xmcp-i and AgentShield
|
|
15
|
-
3. Real-world flow feasibility
|
|
16
|
-
4. Architectural soundness
|
|
17
|
-
5. Implementation readiness
|
|
18
|
-
|
|
19
|
-
**Overall Assessment:** The plan is **well-structured and addresses critical gaps**, but requires **significant API contract alignment** before implementation can proceed. The core concept is sound and aligns with MCP-I spec requirements.
|
|
20
|
-
|
|
21
|
-
**Critical Finding:** There is a **fundamental API contract mismatch** between what the contracts package defines (`DelegationRecord` with full W3C VC structure) and what the AgentShield API currently accepts (simplified format). This must be resolved before Phase 4 implementation.
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## Mission Alignment
|
|
26
|
-
|
|
27
|
-
### ✅ **STRONG ALIGNMENT**
|
|
28
|
-
|
|
29
|
-
The Phase 4 plan directly addresses the core mission of implementing the MCP-I Specification:
|
|
30
|
-
|
|
31
|
-
1. **User Identity Persistence**: Enables persistent User DIDs across sessions via OAuth linking
|
|
32
|
-
2. **Proper Delegation Model**: Fixes missing `issuerDid` (User DID) in delegation creation
|
|
33
|
-
3. **Multi-Tenant Support**: Resolves storage conflicts for multi-user scenarios
|
|
34
|
-
4. **Spec Compliance**: Moves toward full MCP-I §4.1 compliance (Delegation Credentials)
|
|
35
|
-
|
|
36
|
-
**Mission Grade: A**
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## Codebase Parity Analysis
|
|
41
|
-
|
|
42
|
-
### Critical API Contract Mismatch ⚠️
|
|
43
|
-
|
|
44
|
-
#### Current State
|
|
45
|
-
|
|
46
|
-
**Contracts Package Definition** (`packages/contracts/src/agentshield-api/types.ts:162-164`):
|
|
47
|
-
```typescript
|
|
48
|
-
export interface CreateDelegationRequest {
|
|
49
|
-
delegation: DelegationRecord; // Full W3C VC structure
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
**DelegationRecord Requirements** (`packages/contracts/src/delegation/schemas.ts:50-89`):
|
|
54
|
-
- `id: string`
|
|
55
|
-
- `issuerDid: string` ✅ (User DID - what Phase 4 adds)
|
|
56
|
-
- `subjectDid: string` ✅ (Agent DID - we have this)
|
|
57
|
-
- `vcId: string` ❌ (Missing - requires VC creation)
|
|
58
|
-
- `constraints: DelegationConstraints` ⚠️ (Partial - we have scopes)
|
|
59
|
-
- `signature: string` ❌ (Missing - requires cryptographic signing)
|
|
60
|
-
- `status: DelegationStatus` ⚠️ (Default to 'active')
|
|
61
|
-
|
|
62
|
-
**Actual Implementation** (`packages/mcp-i-cloudflare/src/services/consent.service.ts:358-366`):
|
|
63
|
-
```typescript
|
|
64
|
-
const delegationRequest = {
|
|
65
|
-
agent_did: request.agent_did, // ✅ Maps to subjectDid
|
|
66
|
-
scopes: request.scopes, // ✅ Maps to constraints.scopes
|
|
67
|
-
expires_in_days: expiresInDays, // ⚠️ Needs conversion to constraints.notAfter
|
|
68
|
-
// ❌ Missing: issuerDid (User DID)
|
|
69
|
-
// ❌ Missing: Full DelegationRecord structure
|
|
70
|
-
// ❌ Missing: W3C VC creation
|
|
71
|
-
};
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
#### The Problem
|
|
75
|
-
|
|
76
|
-
1. **Type Mismatch**: Contracts define `{ delegation: DelegationRecord }`, but implementation sends `{ agent_did, scopes, expires_in_days }`
|
|
77
|
-
2. **Missing Required Fields**: `DelegationRecord` requires `vcId`, `signature`, `status` - none are present
|
|
78
|
-
3. **AgentShield API Reality**: The actual AgentShield API likely accepts simplified format (based on comments in code), but contracts package doesn't reflect this
|
|
79
|
-
|
|
80
|
-
#### Recommended Solution
|
|
81
|
-
|
|
82
|
-
**Option A: Update AgentShield API to Accept Full DelegationRecord** (Preferred for spec compliance)
|
|
83
|
-
- AgentShield creates W3C VC internally
|
|
84
|
-
- Full spec compliance
|
|
85
|
-
- Requires AgentShield changes
|
|
86
|
-
|
|
87
|
-
**Option B: Create Simplified API Contract** (Faster, less compliant)
|
|
88
|
-
- Add `CreateDelegationSimpleRequest` type
|
|
89
|
-
- AgentShield accepts simplified format
|
|
90
|
-
- Convert to `DelegationRecord` internally
|
|
91
|
-
- Phase 4 can use simplified format initially
|
|
92
|
-
|
|
93
|
-
**Option C: Hybrid Approach** (Recommended)
|
|
94
|
-
- Phase 4 Part A: Use simplified format with `issuerDid` added
|
|
95
|
-
- Phase 4 Part B+: Migrate to full `DelegationRecord` format
|
|
96
|
-
- Maintain backward compatibility
|
|
97
|
-
|
|
98
|
-
**Parity Grade: C+** (Needs immediate attention)
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## Plan Quality Assessment
|
|
103
|
-
|
|
104
|
-
### ✅ **Strengths**
|
|
105
|
-
|
|
106
|
-
1. **Clear Problem Identification**: Correctly identifies all 6 critical issues
|
|
107
|
-
2. **Prioritized Implementation**: Parts A-F are well-ordered by priority
|
|
108
|
-
3. **Test Coverage**: Includes comprehensive test plans
|
|
109
|
-
4. **Security Considerations**: Part E addresses privacy and security
|
|
110
|
-
5. **Mode Flexibility**: Part D supports ephemeral/persistent/hybrid modes
|
|
111
|
-
6. **Realistic Timeline**: 12-day schedule is achievable
|
|
112
|
-
|
|
113
|
-
### ⚠️ **Gaps & Recommendations**
|
|
114
|
-
|
|
115
|
-
#### 1. API Contract Alignment Missing
|
|
116
|
-
|
|
117
|
-
**Issue**: Plan doesn't address the API contract mismatch identified above.
|
|
118
|
-
|
|
119
|
-
**Recommendation**: Add **Part A.0: API Contract Alignment** before Part A.1:
|
|
120
|
-
|
|
121
|
-
```markdown
|
|
122
|
-
#### A.0: Resolve API Contract Mismatch (Priority 0 - 1 day)
|
|
123
|
-
|
|
124
|
-
**Problem**: Contracts package defines `CreateDelegationRequest` as `{ delegation: DelegationRecord }`,
|
|
125
|
-
but implementation sends simplified format `{ agent_did, scopes, expires_in_days }`.
|
|
126
|
-
|
|
127
|
-
**Decision Required**:
|
|
128
|
-
1. Update AgentShield API to accept full `DelegationRecord`?
|
|
129
|
-
2. Create simplified contract type for Phase 4?
|
|
130
|
-
3. Hybrid approach (simplified now, migrate later)?
|
|
131
|
-
|
|
132
|
-
**Action Items**:
|
|
133
|
-
- [ ] Audit AgentShield API actual implementation
|
|
134
|
-
- [ ] Decide on contract approach
|
|
135
|
-
- [ ] Update contracts package accordingly
|
|
136
|
-
- [ ] Update consent.service.ts to match contract
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
#### 2. OAuth Flow Integration Details
|
|
140
|
-
|
|
141
|
-
**Issue**: Part B.3 shows OAuth handler linking, but doesn't explain how consent page gets OAuth identity.
|
|
142
|
-
|
|
143
|
-
**Recommendation**: Add flow diagram:
|
|
144
|
-
|
|
145
|
-
```
|
|
146
|
-
User → OAuth Provider → OAuth Callback → Set Cookie/Session → Consent Page → Extract OAuth Identity → Approval Request
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
#### 3. User DID Generation Strategy
|
|
150
|
-
|
|
151
|
-
**Issue**: Plan shows `getUserDidForSession()` but doesn't clarify:
|
|
152
|
-
- When is User DID generated? (Before OAuth? After OAuth?)
|
|
153
|
-
- How does ephemeral → persistent transition work?
|
|
154
|
-
|
|
155
|
-
**Recommendation**: Add state machine diagram:
|
|
156
|
-
|
|
157
|
-
```
|
|
158
|
-
Session Start → Ephemeral DID Generated
|
|
159
|
-
↓
|
|
160
|
-
OAuth Login → Link OAuth Identity → Persistent DID Retrieved/Created
|
|
161
|
-
↓
|
|
162
|
-
Consent Approval → Use Persistent DID as issuerDid
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
#### 4. Storage Key Strategy
|
|
166
|
-
|
|
167
|
-
**Issue**: Part C fixes storage keys, but doesn't address:
|
|
168
|
-
- Migration of existing delegations
|
|
169
|
-
- Backward compatibility
|
|
170
|
-
|
|
171
|
-
**Recommendation**: Add migration strategy:
|
|
172
|
-
|
|
173
|
-
```typescript
|
|
174
|
-
// Migration: Read old format, write new format
|
|
175
|
-
const oldKey = `agent:${agentDid}:delegation`;
|
|
176
|
-
const newKey = `delegation:user:${userDid}:agent:${agentDid}`;
|
|
177
|
-
|
|
178
|
-
// Try new key first, fallback to old key
|
|
179
|
-
const token = await storage.get(newKey) || await storage.get(oldKey);
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
#### 5. MCP-I Spec Compliance Timeline
|
|
183
|
-
|
|
184
|
-
**Issue**: Plan mentions spec compliance but doesn't prioritize W3C VC creation.
|
|
185
|
-
|
|
186
|
-
**Recommendation**: Add compliance roadmap:
|
|
187
|
-
|
|
188
|
-
- **Phase 4**: Add `issuerDid`, proper constraints structure
|
|
189
|
-
- **Phase 5**: Implement W3C VC creation (DelegationCredential)
|
|
190
|
-
- **Phase 6**: Add cryptographic proof/signature
|
|
191
|
-
- **Phase 7**: Implement StatusList2021 for revocation
|
|
192
|
-
|
|
193
|
-
**Plan Quality Grade: B+**
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
## Implementation Feasibility
|
|
198
|
-
|
|
199
|
-
### ✅ **Highly Feasible**
|
|
200
|
-
|
|
201
|
-
All parts are implementable with current infrastructure:
|
|
202
|
-
|
|
203
|
-
1. **Part A**: User DID generation already exists (`UserDidManager`)
|
|
204
|
-
2. **Part B**: OAuth handler exists, just needs integration
|
|
205
|
-
3. **Part C**: Storage key changes are straightforward
|
|
206
|
-
4. **Part D**: Mode configuration is architectural change
|
|
207
|
-
5. **Part E**: Privacy service is new but well-defined
|
|
208
|
-
6. **Part F**: Optional enhancement
|
|
209
|
-
|
|
210
|
-
### ⚠️ **Dependencies**
|
|
211
|
-
|
|
212
|
-
1. **AgentShield API Changes**: May need API updates for `issuerDid` support
|
|
213
|
-
2. **Contracts Package Updates**: Must align API contracts
|
|
214
|
-
3. **OAuth Provider Configuration**: Requires dashboard integration (already exists)
|
|
215
|
-
|
|
216
|
-
**Feasibility Grade: A-**
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## Real-World Flow Analysis
|
|
221
|
-
|
|
222
|
-
### ✅ **Flow is Sound**
|
|
223
|
-
|
|
224
|
-
The proposed flow addresses real-world scenarios:
|
|
225
|
-
|
|
226
|
-
1. **Single User, Single Agent**: ✅ Works with ephemeral mode
|
|
227
|
-
2. **Single User, Multiple Sessions**: ✅ Works with persistent mode + OAuth
|
|
228
|
-
3. **Multiple Users, Single Agent**: ✅ Fixed by Part C (storage keys)
|
|
229
|
-
4. **OAuth Integration**: ✅ Properly integrated in Part B
|
|
230
|
-
|
|
231
|
-
### ⚠️ **Edge Cases to Consider**
|
|
232
|
-
|
|
233
|
-
1. **OAuth Provider Failure**: Plan mentions fallback but doesn't detail
|
|
234
|
-
2. **User Switches OAuth Accounts**: How to handle DID migration?
|
|
235
|
-
3. **Session Expiry During Consent**: How to maintain User DID?
|
|
236
|
-
|
|
237
|
-
**Recommendation**: Add edge case handling section:
|
|
238
|
-
|
|
239
|
-
```markdown
|
|
240
|
-
### Edge Case Handling
|
|
241
|
-
|
|
242
|
-
#### OAuth Provider Failure
|
|
243
|
-
- Fallback to ephemeral DID
|
|
244
|
-
- Log error for monitoring
|
|
245
|
-
- User can retry OAuth later
|
|
246
|
-
|
|
247
|
-
#### User Switches OAuth Accounts
|
|
248
|
-
- Create new User DID for new OAuth identity
|
|
249
|
-
- Old delegations remain valid (linked to old DID)
|
|
250
|
-
- User can revoke old delegations via privacy service
|
|
251
|
-
|
|
252
|
-
#### Session Expiry During Consent
|
|
253
|
-
- User DID stored in session cookie (persistent)
|
|
254
|
-
- Session expiry doesn't affect User DID
|
|
255
|
-
- Consent approval retrieves DID from cookie
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
**Real-World Flow Grade: A**
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## MCP-I Specification Compliance
|
|
263
|
-
|
|
264
|
-
### Current Compliance Status
|
|
265
|
-
|
|
266
|
-
| Requirement | Current | Phase 4 | Full Spec |
|
|
267
|
-
|------------|---------|---------|-----------|
|
|
268
|
-
| issuerDid (User DID) | ❌ Missing | ✅ Added | ✅ Required |
|
|
269
|
-
| subjectDid (Agent DID) | ✅ Present | ✅ Maintained | ✅ Required |
|
|
270
|
-
| W3C VC Format | ❌ No | ⚠️ Partial | ✅ Required |
|
|
271
|
-
| Cryptographic Proof | ❌ No | ❌ No | ✅ Required |
|
|
272
|
-
| Constraints Structure | ⚠️ Simplified | ✅ Fixed | ✅ Required |
|
|
273
|
-
| StatusList2021 | ❌ No | ❌ No | ✅ Required |
|
|
274
|
-
|
|
275
|
-
### Phase 4 Compliance Assessment
|
|
276
|
-
|
|
277
|
-
**Level 1 Compliance**: ✅ Achieved
|
|
278
|
-
- Basic delegation with issuerDid/subjectDid
|
|
279
|
-
- Proper constraints structure
|
|
280
|
-
|
|
281
|
-
**Level 2 Compliance**: ⚠️ Partial
|
|
282
|
-
- Missing W3C VC format
|
|
283
|
-
- Missing cryptographic proof
|
|
284
|
-
|
|
285
|
-
**Level 3 Compliance**: ❌ Not Achieved
|
|
286
|
-
- Missing OAuth 2.1 bridging (future work)
|
|
287
|
-
- Missing anomaly detection (future work)
|
|
288
|
-
|
|
289
|
-
**Compliance Grade: B** (Level 1 achieved, Level 2 partial)
|
|
290
|
-
|
|
291
|
-
---
|
|
292
|
-
|
|
293
|
-
## Architectural Soundness
|
|
294
|
-
|
|
295
|
-
### ✅ **Strong Architecture**
|
|
296
|
-
|
|
297
|
-
1. **Separation of Concerns**: User DID, OAuth, Consent are properly separated
|
|
298
|
-
2. **Storage Abstraction**: KV storage properly abstracted
|
|
299
|
-
3. **Mode Flexibility**: Ephemeral/persistent/hybrid modes are well-designed
|
|
300
|
-
4. **Privacy First**: Part E addresses GDPR compliance
|
|
301
|
-
|
|
302
|
-
### ⚠️ **Architectural Concerns**
|
|
303
|
-
|
|
304
|
-
1. **User DID Storage Location**: Plan uses KV, but doesn't specify namespace
|
|
305
|
-
2. **OAuth Identity Storage**: Should be separate from delegation storage
|
|
306
|
-
3. **Session Management**: User DID in session vs. cookie vs. storage?
|
|
307
|
-
|
|
308
|
-
**Recommendation**: Clarify storage architecture:
|
|
309
|
-
|
|
310
|
-
```typescript
|
|
311
|
-
// Storage Namespaces
|
|
312
|
-
const STORAGE_KEYS = {
|
|
313
|
-
// User DID storage (persistent)
|
|
314
|
-
userDid: (oauthProvider: string, subject: string) =>
|
|
315
|
-
`userDid:oauth:${oauthProvider}:${subject}`,
|
|
316
|
-
|
|
317
|
-
// OAuth identity mapping (persistent)
|
|
318
|
-
oauthIdentity: (provider: string, subject: string) =>
|
|
319
|
-
`oauth:${provider}:${subject}`,
|
|
320
|
-
|
|
321
|
-
// Delegation tokens (temporary)
|
|
322
|
-
delegation: (userDid: string, agentDid: string) =>
|
|
323
|
-
`delegation:user:${userDid}:agent:${agentDid}`,
|
|
324
|
-
|
|
325
|
-
// Session cache (temporary)
|
|
326
|
-
session: (sessionId: string) =>
|
|
327
|
-
`session:${sessionId}`,
|
|
328
|
-
};
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
**Architecture Grade: A-**
|
|
332
|
-
|
|
333
|
-
---
|
|
334
|
-
|
|
335
|
-
## Detailed Component Grades
|
|
336
|
-
|
|
337
|
-
### 1. xmcp-i Codebase
|
|
338
|
-
|
|
339
|
-
**Strengths**:
|
|
340
|
-
- ✅ Well-structured packages (core, cloudflare, contracts)
|
|
341
|
-
- ✅ Comprehensive test coverage
|
|
342
|
-
- ✅ Clear separation of concerns
|
|
343
|
-
- ✅ Good documentation
|
|
344
|
-
|
|
345
|
-
**Weaknesses**:
|
|
346
|
-
- ⚠️ API contract mismatch (critical)
|
|
347
|
-
- ⚠️ Missing User DID integration in consent flow
|
|
348
|
-
- ⚠️ OAuth handler not connected to consent
|
|
349
|
-
|
|
350
|
-
**Grade: B+**
|
|
351
|
-
|
|
352
|
-
### 2. AgentShield/Bouncer Dashboard
|
|
353
|
-
|
|
354
|
-
**Strengths**:
|
|
355
|
-
- ✅ OAuth provider configuration exists
|
|
356
|
-
- ✅ Delegation API endpoints exist
|
|
357
|
-
- ✅ Dashboard UI for configuration
|
|
358
|
-
|
|
359
|
-
**Weaknesses**:
|
|
360
|
-
- ⚠️ API may not accept full `DelegationRecord` format
|
|
361
|
-
- ⚠️ Missing `issuerDid` support in delegation creation
|
|
362
|
-
- ⚠️ OAuth identity not linked to User DIDs
|
|
363
|
-
|
|
364
|
-
**Grade: B**
|
|
365
|
-
|
|
366
|
-
### 3. Know That AI (Reputation Engine)
|
|
367
|
-
|
|
368
|
-
**Strengths**:
|
|
369
|
-
- ✅ Reputation system architecture
|
|
370
|
-
- ✅ DID-based identity tracking
|
|
371
|
-
|
|
372
|
-
**Weaknesses**:
|
|
373
|
-
- ⚠️ Not directly involved in Phase 4
|
|
374
|
-
- ⚠️ Future integration points unclear
|
|
375
|
-
|
|
376
|
-
**Grade: B** (Not primary focus of Phase 4)
|
|
377
|
-
|
|
378
|
-
### 4. Contracts Package
|
|
379
|
-
|
|
380
|
-
**Strengths**:
|
|
381
|
-
- ✅ Comprehensive type definitions
|
|
382
|
-
- ✅ Zod schemas for validation
|
|
383
|
-
- ✅ MCP-I spec alignment
|
|
384
|
-
|
|
385
|
-
**Weaknesses**:
|
|
386
|
-
- ⚠️ API contracts don't match actual implementation
|
|
387
|
-
- ⚠️ Missing simplified delegation request type
|
|
388
|
-
|
|
389
|
-
**Grade: B+**
|
|
390
|
-
|
|
391
|
-
---
|
|
392
|
-
|
|
393
|
-
## Critical Recommendations
|
|
394
|
-
|
|
395
|
-
### 🔴 **MUST DO Before Implementation**
|
|
396
|
-
|
|
397
|
-
1. **Resolve API Contract Mismatch** (Part A.0)
|
|
398
|
-
- Audit AgentShield API actual implementation
|
|
399
|
-
- Decide on contract approach (simplified vs. full)
|
|
400
|
-
- Update contracts package
|
|
401
|
-
- Update consent.service.ts
|
|
402
|
-
|
|
403
|
-
2. **Verify AgentShield API Supports issuerDid**
|
|
404
|
-
- Check if API accepts `issuer_did` field
|
|
405
|
-
- If not, plan API update or workaround
|
|
406
|
-
|
|
407
|
-
3. **Clarify OAuth Flow Integration**
|
|
408
|
-
- Document exact flow: OAuth → Cookie → Consent → Approval
|
|
409
|
-
- Test OAuth callback → consent page handoff
|
|
410
|
-
|
|
411
|
-
### 🟡 **SHOULD DO During Implementation**
|
|
412
|
-
|
|
413
|
-
4. **Add Edge Case Handling**
|
|
414
|
-
- OAuth provider failure
|
|
415
|
-
- User switches OAuth accounts
|
|
416
|
-
- Session expiry scenarios
|
|
417
|
-
|
|
418
|
-
5. **Implement Storage Migration**
|
|
419
|
-
- Migrate existing delegations to new key format
|
|
420
|
-
- Maintain backward compatibility
|
|
421
|
-
|
|
422
|
-
6. **Add Comprehensive Logging**
|
|
423
|
-
- User DID generation events
|
|
424
|
-
- OAuth linking events
|
|
425
|
-
- Delegation creation with issuerDid
|
|
426
|
-
|
|
427
|
-
### 🟢 **NICE TO HAVE**
|
|
428
|
-
|
|
429
|
-
7. **Performance Optimization**
|
|
430
|
-
- Cache User DID lookups
|
|
431
|
-
- Batch OAuth identity queries
|
|
432
|
-
|
|
433
|
-
8. **Enhanced Privacy Controls**
|
|
434
|
-
- User DID export functionality
|
|
435
|
-
- Delegation history viewing
|
|
436
|
-
|
|
437
|
-
---
|
|
438
|
-
|
|
439
|
-
## Revised Implementation Plan
|
|
440
|
-
|
|
441
|
-
### Phase 4.0: API Contract Alignment (NEW - 1 day)
|
|
442
|
-
|
|
443
|
-
**Before Part A**, resolve API contract mismatch:
|
|
444
|
-
|
|
445
|
-
1. **Audit AgentShield API** (2 hours)
|
|
446
|
-
- Check actual endpoint implementation
|
|
447
|
-
- Document current request/response format
|
|
448
|
-
- Identify gaps vs. contracts package
|
|
449
|
-
|
|
450
|
-
2. **Decide Contract Strategy** (1 hour)
|
|
451
|
-
- Option A: Update AgentShield to accept full `DelegationRecord`
|
|
452
|
-
- Option B: Create simplified contract type
|
|
453
|
-
- Option C: Hybrid approach
|
|
454
|
-
|
|
455
|
-
3. **Update Contracts Package** (3 hours)
|
|
456
|
-
- Add simplified type if needed
|
|
457
|
-
- Update schemas
|
|
458
|
-
- Ensure backward compatibility
|
|
459
|
-
|
|
460
|
-
4. **Update Consent Service** (2 hours)
|
|
461
|
-
- Align with chosen contract
|
|
462
|
-
- Add `issuerDid` field
|
|
463
|
-
- Test API calls
|
|
464
|
-
|
|
465
|
-
### Phase 4.1: Core Delegation Flow (Updated - 2 days)
|
|
466
|
-
|
|
467
|
-
**Part A with API contract alignment**:
|
|
468
|
-
|
|
469
|
-
1. **A.0**: API Contract Alignment (from Phase 4.0)
|
|
470
|
-
2. **A.1**: Update Delegation Creation with User DID
|
|
471
|
-
3. **A.2**: Add `getUserDidForSession` Method
|
|
472
|
-
4. **A.3**: Test API Parity
|
|
473
|
-
|
|
474
|
-
### Phase 4.2-4.6: Remain Unchanged
|
|
475
|
-
|
|
476
|
-
Parts B-F remain as planned, with additions:
|
|
477
|
-
- Edge case handling
|
|
478
|
-
- Storage migration
|
|
479
|
-
- Enhanced logging
|
|
480
|
-
|
|
481
|
-
---
|
|
482
|
-
|
|
483
|
-
## Success Criteria (Updated)
|
|
484
|
-
|
|
485
|
-
### Functional Requirements
|
|
486
|
-
|
|
487
|
-
- [x] User DIDs persist across sessions when using OAuth
|
|
488
|
-
- [x] Delegations include correct `issuerDid` (User) and `subjectDid` (Agent)
|
|
489
|
-
- [x] OAuth identity correctly linked to User DIDs
|
|
490
|
-
- [x] Multi-tenant conflicts resolved
|
|
491
|
-
- [x] **API contracts aligned between xmcp-i and AgentShield** (NEW)
|
|
492
|
-
- [x] **Edge cases handled gracefully** (NEW)
|
|
493
|
-
|
|
494
|
-
### Non-Functional Requirements
|
|
495
|
-
|
|
496
|
-
- [x] <100ms overhead for DID operations
|
|
497
|
-
- [x] GDPR compliance for data operations
|
|
498
|
-
- [x] 95% test coverage for new code
|
|
499
|
-
- [x] Clear separation between dev/test/prod modes
|
|
500
|
-
- [x] **Backward compatibility maintained** (NEW)
|
|
501
|
-
|
|
502
|
-
### Security Requirements
|
|
503
|
-
|
|
504
|
-
- [x] OAuth account verification prevents unauthorized linking
|
|
505
|
-
- [x] Rate limiting on identity operations
|
|
506
|
-
- [x] Audit trail for all identity changes
|
|
507
|
-
- [x] Secure token storage with encryption
|
|
508
|
-
- [x] **User DID privacy protection** (NEW)
|
|
509
|
-
|
|
510
|
-
---
|
|
511
|
-
|
|
512
|
-
## Final Grades
|
|
513
|
-
|
|
514
|
-
### Component Grades
|
|
515
|
-
|
|
516
|
-
| Component | Grade | Notes |
|
|
517
|
-
|-----------|-------|-------|
|
|
518
|
-
| **xmcp-i Codebase** | **B+** | Well-structured, needs API contract alignment |
|
|
519
|
-
| **AgentShield Dashboard** | **B** | OAuth UI exists, needs API updates |
|
|
520
|
-
| **Know That AI** | **B** | Not primary focus, future integration |
|
|
521
|
-
| **Contracts Package** | **B+** | Comprehensive but needs alignment |
|
|
522
|
-
| **Phase 4 Plan** | **A-** | Excellent structure, needs API contract section |
|
|
523
|
-
|
|
524
|
-
### Overall Grades
|
|
525
|
-
|
|
526
|
-
| Category | Grade | Justification |
|
|
527
|
-
|----------|-------|---------------|
|
|
528
|
-
| **Mission Alignment** | **A** | Directly addresses MCP-I spec requirements |
|
|
529
|
-
| **Codebase Parity** | **C+** | Critical API contract mismatch identified |
|
|
530
|
-
| **Plan Quality** | **B+** | Well-structured, needs API contract section |
|
|
531
|
-
| **Implementation Feasibility** | **A-** | Highly feasible with current infrastructure |
|
|
532
|
-
| **Real-World Flow** | **A** | Addresses all major scenarios |
|
|
533
|
-
| **Spec Compliance** | **B** | Level 1 achieved, Level 2 partial |
|
|
534
|
-
| **Architecture** | **A-** | Sound design, needs storage clarification |
|
|
535
|
-
|
|
536
|
-
### **Overall Project Grade: B+**
|
|
537
|
-
|
|
538
|
-
### **Overall Plan Grade: A-** (with recommended additions)
|
|
539
|
-
|
|
540
|
-
---
|
|
541
|
-
|
|
542
|
-
## Conclusion
|
|
543
|
-
|
|
544
|
-
The Phase 4 plan is **well-conceived and addresses critical architectural gaps**. The core concept of linking OAuth identities to persistent User DIDs is sound and aligns with MCP-I specification requirements.
|
|
545
|
-
|
|
546
|
-
**Key Strengths**:
|
|
547
|
-
- ✅ Clear problem identification
|
|
548
|
-
- ✅ Prioritized implementation
|
|
549
|
-
- ✅ Comprehensive test planning
|
|
550
|
-
- ✅ Security and privacy considerations
|
|
551
|
-
|
|
552
|
-
**Critical Gaps**:
|
|
553
|
-
- ⚠️ API contract mismatch must be resolved first
|
|
554
|
-
- ⚠️ OAuth flow integration needs more detail
|
|
555
|
-
- ⚠️ Edge case handling should be added
|
|
556
|
-
|
|
557
|
-
**Recommendation**: **APPROVE with modifications**. Add Phase 4.0 (API Contract Alignment) before Part A, and incorporate edge case handling throughout.
|
|
558
|
-
|
|
559
|
-
**Next Steps**:
|
|
560
|
-
1. Resolve API contract mismatch (Phase 4.0)
|
|
561
|
-
2. Verify AgentShield API supports `issuerDid`
|
|
562
|
-
3. Begin Part A implementation
|
|
563
|
-
4. Iterate based on testing results
|
|
564
|
-
|
|
565
|
-
---
|
|
566
|
-
|
|
567
|
-
## Appendix: API Contract Alignment Decision Matrix
|
|
568
|
-
|
|
569
|
-
### Option A: Full DelegationRecord (Preferred)
|
|
570
|
-
|
|
571
|
-
**Pros**:
|
|
572
|
-
- ✅ Full MCP-I spec compliance
|
|
573
|
-
- ✅ Future-proof
|
|
574
|
-
- ✅ Interoperable with other MCP-I systems
|
|
575
|
-
|
|
576
|
-
**Cons**:
|
|
577
|
-
- ❌ Requires AgentShield API changes
|
|
578
|
-
- ❌ Requires VC creation infrastructure
|
|
579
|
-
- ❌ More complex implementation
|
|
580
|
-
|
|
581
|
-
**Effort**: High (3-5 days)
|
|
582
|
-
|
|
583
|
-
### Option B: Simplified Contract (Faster)
|
|
584
|
-
|
|
585
|
-
**Pros**:
|
|
586
|
-
- ✅ Faster implementation
|
|
587
|
-
- ✅ No AgentShield API changes needed
|
|
588
|
-
- ✅ Simpler for Phase 4
|
|
589
|
-
|
|
590
|
-
**Cons**:
|
|
591
|
-
- ⚠️ Not fully spec compliant
|
|
592
|
-
- ⚠️ May need migration later
|
|
593
|
-
- ⚠️ Less interoperable
|
|
594
|
-
|
|
595
|
-
**Effort**: Low (1 day)
|
|
596
|
-
|
|
597
|
-
### Option C: Hybrid Approach (Recommended)
|
|
598
|
-
|
|
599
|
-
**Pros**:
|
|
600
|
-
- ✅ Phase 4 can proceed quickly
|
|
601
|
-
- ✅ Path to full compliance
|
|
602
|
-
- ✅ Backward compatible
|
|
603
|
-
|
|
604
|
-
**Cons**:
|
|
605
|
-
- ⚠️ Requires maintaining two formats
|
|
606
|
-
- ⚠️ Migration complexity
|
|
607
|
-
|
|
608
|
-
**Effort**: Medium (2-3 days)
|
|
609
|
-
|
|
610
|
-
**Recommendation**: **Option C (Hybrid)** - Use simplified format for Phase 4, plan migration to full `DelegationRecord` in Phase 5.
|
|
611
|
-
|
|
612
|
-
---
|
|
613
|
-
|
|
614
|
-
**Document End**
|
|
615
|
-
|