RFC-001 Implementation Backlog
March 29, 2026 · View on GitHub
Objective
Translate the findings from RFC-001-Compliance-Checklist into implementable work with priority, dependencies, and verifiable acceptance criteria.
Epic P1 — Robust RFC-001 Conformance
P1-01 — DID Document Evolution (updateDidDocument)
Problem: The RFC requires persistent identity with mutable state, but the SDK did not expose document update/versioning.
Technical Scope:
- Add
updateDidDocument(did, patch)API inAgentIdentity. - Validate that
idremains stable andupdatedchanges. - Allow updates to
agentMetadata(including hashes and capabilities).
Acceptance Criteria:
- Public typed method exists in the SDK.
- Tests cover successful update and rejection for non-existent/revoked DIDs.
resolve(did)returns updated document version.
Dependencies: None.
Status: ✅ Completed.
P1-02 — Multiple verificationMethod Support + Key Rotation
Problem: verifySignature initially used only verificationMethod[0]; no rotation policy existed.
Technical Scope:
- Extend model for multiple active keys.
- Add rotation API (
rotateVerificationMethodor equivalent). - Update verifier to select key by
keyidor controlled fallback.
Acceptance Criteria:
- Verification works for new active key.
- Revoked/obsolete key fails verification.
- Tests cover at least 2 rotation cycles.
Dependencies: P1-01.
Status: ✅ Completed.
P1-03 — Document Anchoring in Registry (documentUri/documentHash)
Problem: The RFC requires an on-chain reference to the document; the contract needed to store it.
Technical Scope:
- Extend
AgentRegistry.solwithdocumentUriordocumentHash. - Update ABI/adapters (
EvmAgentRegistry,EthersAgentRegistryContractClient). - Register reference from
createand update it fromupdateDidDocument.
Acceptance Criteria:
getAgentRecordreturns document reference.- Smoke test verifies create + resolve using on-chain reference.
- ABI compatibility documented (contract versioning).
Dependencies: P1-01.
Status: ✅ Completed.
Epic P2 — Production and Interoperability
P2-01 — Production Universal Resolver (RPC + IPFS + Cache)
Problem: Default in-memory resolver does not meet the operational interoperability objective.
Technical Scope:
- Create
UniversalResolverClientwith:- resolution by DID to on-chain record,
- off-chain document fetch,
- TTL cache.
- Maintain
InMemoryDIDResolverfor tests/local.
Acceptance Criteria:
- Resolution works for DIDs not created in the local process.
- Basic cache metrics (hit/miss) available.
- Integration tests with network mock adapter.
Dependencies: P1-03.
Status: ✅ Completed.
P2-02 — Temporal Normalization (ISO vs Unix)
Problem: SDK uses ISO-8601 and contract uses Unix-string.
Technical Scope:
- Define canonical format (recommended: ISO-8601 in document, Unix in contract with explicit conversion).
- Add utility converters and format validations.
Acceptance Criteria:
- Temporal rule documented in RFC + checklist.
- No ambiguity in SDK types/serialization.
- Serialization/deserialization tests pass.
Dependencies: P1-03.
Status: ✅ Completed.
P2-03 — Automated MUST/SHOULD Conformance Suite
Problem: Conformance was documented but not automated in a pipeline.
Technical Scope:
- Create
conformance:rfc001suite. - Map each MUST to a traceable test case.
- Add summarized compliance output.
Acceptance Criteria:
- Pipeline reports status per control (PASS/PARTIAL/FAIL).
- Suite fails if any MUST fails.
- Execution evidence in local CI or workflow.
Dependencies: P1-01, P1-02, P1-03.
Status: ✅ Completed.
P2-04 — Cross-SDK Canonicalization and Shared Fixtures
Problem: TypeScript and Python reached feature parity, but document reference hashing and timestamp serialization still needed an explicit canonical contract to guarantee deterministic interoperability.
Technical Scope:
- Canonicalize DID-document serialization before computing
documentRefin both SDKs. - Normalize ISO timestamps to a shared UTC
YYYY-MM-DDTHH:mm:ss.SSSZformat. - Move interop vectors to shared repository fixtures consumed by both SDK test suites.
- Clarify local Python commands versus monorepo
npmwrappers.
Acceptance Criteria:
- Equivalent DID documents produce the same
documentRefin TypeScript and Python. - Shared fixtures are consumed by both SDK test suites.
- Documentation explains the canonical Python workflow and the optional root-level wrappers.
Dependencies: P2-01, P2-02, P2-03.
Status: ✅ Completed.
Recommended Execution Order
- P1-01 ✅
- P1-02 ✅
- P1-03 ✅
- P2-01 ✅
- P2-02 ✅
- P2-03 ✅
- P2-04 ✅
- P3-01 ✅
- P3-02 ✅
- P3-03 ✅
- P3-04 ✅
- P3-05 ✅
- P3-06 ✅
Epic P3 — Post-Analysis Remediation
P3-01 — W3C Multibase Conformance
Problem: publicKeyMultibase used z + hex instead of the standard z + multicodec + Base58btc encoding.
Technical Scope:
- Implement
encodePublicKeyMultibase/decodePublicKeyMultibaseusing Ed25519 multicodec prefix0xed01+ Base58btc. - Update
create(),verifySignature(),rotateVerificationMethod()in both TS and Python SDKs. - Update shared interop fixtures.
Status: ✅ Completed.
P3-02 — Atomic Registration
Problem: create() generated identity and stored in registry as two separate steps. A failure between them could leave orphaned identities.
Technical Scope:
- Wrap identity creation + registry storage in atomic operation.
- Rollback on registry failure.
Status: ✅ Completed.
P3-03 — HTTP Anti-Replay Protection
Problem: HTTP signature verification lacked nonce and expiration validation.
Technical Scope:
- Add
created,expires,nonceto HTTP signature headers. - Validate timestamps and reject expired/future signatures.
Status: ✅ Completed.
P3-04 — Historical Signature Verification
Problem: After key rotation, signatures made with old keys could not be verified.
Technical Scope:
- Add
deactivatedfield toVerificationMethod(ISO-8601 timestamp). rotateVerificationMethod()marks old keys as deactivated instead of removing them.- New
verifyHistoricalSignature(did, payload, signature, keyId)searches all methods including deactivated.
Status: ✅ Completed.
P3-05 — Signer Abstraction Layer
Problem: create() returned raw private key hex. Production deployments need KMS/HSM/Vault integration.
Technical Scope:
AgentSignerinterface/protocol withsign()andgetPublicKey().LocalKeySignerwrapping current behavior.create(),signMessage(),signHttpRequest()accept optional signer.- Demo mode (no signer) works as before.
Status: ✅ Completed.
P3-06 — SSRF Hardening
Problem: HTTP validation only checked protocol scheme. No protection against loopback, private networks, or cloud metadata endpoints.
Technical Scope:
validateHttpTarget()helper blocking loopback, private, link-local, metadata, and embedded credentials.allowPrivateTargetsflag for dev/testing.- Integrated into
HttpDIDDocumentSource,JsonRpcDIDDocumentSource,signHttpRequest().
Status: ✅ Completed.
Global Definition of Done
A task is considered closed when:
- Implementation merged into main branch.
- Associated unit/integration tests green.
- Documentation references updated (
RFC,Checklist,README). - Relevant smoke executed without regressions.