feat(approach|use-case): add resilient identity continuity approach and use case#145
feat(approach|use-case): add resilient identity continuity approach and use case#145
Conversation
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 21 minutes and 35 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (2)
WalkthroughAdded new "Resilient Identity Continuity" use case documentation that specifies an issuer-hostile threat model for on-chain identity attribute proofs. Expanded the existing "Private Identity" approach documentation to include issuer-independent enrollment via distributed OPRF and updated planning phases. Updated CHANGELOG to reflect these additions. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes 🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@approaches/approach-resilient-identity-continuity.md`:
- Around line 1-241: The document "Approach: Resilient Identity Continuity"
exceeds the 2000-word guideline; shorten it to under 2000 words by trimming
non-essential bulk (move vendor recommendation tables, long vendor lists,
detailed PoC links, extensive example scenarios, and large prior-art lists into
a separate appendix or external resources), condense architecture sections into
concise summaries (keep core problem, constraints, approach A/B/C, and TLDRs),
and add a short "Read more" link to the moved content; update any front-matter
or header note to reflect the new word count and where the extended material now
lives so the file (Approach: Resilient Identity Continuity) complies with the
"Word limits" rule.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
Run ID: c04574b6-fdd5-44c7-aa5c-cb63fa7117ed
📒 Files selected for processing (2)
approaches/approach-resilient-identity-continuity.mduse-cases/resilient-identity-continuity.md
📜 Review details
🧰 Additional context used
📓 Path-based instructions (2)
use-cases/**/*.md
⚙️ CodeRabbit configuration file
use-cases/**/*.md: This is a use case card.Structure & frontmatter: Validate against the template at
use-cases/_template.md.
Rules and scope are inuse-cases/README.md.Check that
primary_domainmatches one of the domains listed indomains/README.md.
Use cases should stay on a single page — flag if the content is excessively long or duplicates linked docs.Warn if section
## 2) Additional Business Contextcontains anything that looks like confidential
information (specific organization names, pilot scopes, committed volumes) — these belong incontext/files.
Files:
use-cases/resilient-identity-continuity.md
approaches/**/*.md
⚙️ CodeRabbit configuration file
approaches/**/*.md: This is an approach card.Structure: Validate against the template at
approaches/_template.md.
File naming and conventions are inapproaches/README.md. Filename must start withapproach-in kebab-case.Approach cards MUST link to both the use case they address and the patterns they combine.
Flag if no pattern or use case cross-references are present.Word limits: warn > 2000, error > 3000.
Files:
approaches/approach-resilient-identity-continuity.md
🧠 Learnings (1)
📓 Common learnings
Learnt from: rymnc
Repo: ethereum/iptf-map PR: 116
File: patterns/pattern-private-set-intersection-dh.md:38-40
Timestamp: 2026-03-18T09:22:00.023Z
Learning: In the ethereum/iptf-map repository, pattern documentation (e.g., patterns/pattern-private-set-intersection-dh.md) is intentionally kept high-level and concise. Avoid suggesting granular implementation-level steps (e.g., explicit point-validation sub-steps) inside the Protocol section of pattern docs; prefer lightweight callouts in a separate Security Notes or Caveats section if the concern must be mentioned at all.
🪛 GitHub Check: vale
use-cases/resilient-identity-continuity.md
[warning] 70-70: [vale] use-cases/resilient-identity-continuity.md#L70
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
approaches/approach-resilient-identity-continuity.md
[warning] 70-70: [vale] approaches/approach-resilient-identity-continuity.md#L70
[IPTF.Marketing] Avoid marketing language: 'unique'. Use neutral, factual terms.
[warning] 167-167: [vale] approaches/approach-resilient-identity-continuity.md#L167
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
[warning] 168-168: [vale] approaches/approach-resilient-identity-continuity.md#L168
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
[warning] 183-183: [vale] approaches/approach-resilient-identity-continuity.md#L183
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
[warning] 195-195: [vale] approaches/approach-resilient-identity-continuity.md#L195
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
[warning] 214-214: [vale] approaches/approach-resilient-identity-continuity.md#L214
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
[warning] 229-229: [vale] approaches/approach-resilient-identity-continuity.md#L229
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
| **Primary Pattern:** [Private MTP Authentication](../patterns/pattern-private-mtp-auth.md) | ||
| **Supporting Patterns:** [vOPRF Nullifiers](../patterns/pattern-voprf-nullifiers.md), [Selective Disclosure](../patterns/pattern-regulatory-disclosure-keys-proofs.md), [Verifiable Attestation](../patterns/pattern-verifiable-attestation.md) | ||
|
|
||
| Holders prove real-world identity ownership (passport NFC, national ID, email DKIM, TLS transcript, biometric, community attestation) and obtain a deterministic evaluation from a distributed OPRF network. The OPRF output produces an enrollment nullifier (one per real-world identity) and a leaf commitment inserted into an on-chain incremental Merkle tree. After enrollment, the on-chain root is the sole trust anchor. |
There was a problem hiding this comment.
TLS proving is already mapped. It'd be cool to add zk-wrappers as a pattern (signature verification in a ZKP).
There was a problem hiding this comment.
zk wrappers in follow up pr
There was a problem hiding this comment.
In general best to add it now, as it's in scope. i.e., defining a building block that is part of the approach.
I think it should at least lead to an open issue, otherwise we will lose track of it.
| **Recovery:** | ||
|
|
||
| - **Threshold (Shamir):** Secret split across devices or custodians (t-of-n). Recovered secret produces the same proofs. No on-chain transaction required. | ||
| - **Social (guardian-based):** Quorum of guardians authorizes key rotation under same enrollment. Anti-coercion mechanism is an open design question. |
There was a problem hiding this comment.
Same here, social recovery is a strong primitive that we could map as a pattern.
|
|
||
| ## 2) Additional Business Context | ||
|
|
||
| **Confidential context:** Available in private IPTF repo |
There was a problem hiding this comment.
Not sure, we should keep this mention here.
There was a problem hiding this comment.
addressed in 44f2bce. its part of the template
There was a problem hiding this comment.
Same feedback as in group chat.
I think this approach could be consolidated with the existing approach-private-identity, that way the survive track will not be a side track but will harden current approach doc assumptions.
There was a problem hiding this comment.
Actionable comments posted: 5
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
approaches/approach-private-identity.md (1)
1-383:⚠️ Potential issue | 🟠 MajorApproach card exceeds hard word limit and currently fails CI.
This file is 3461 words; split or trim content to get under 3000 words (e.g., move deep scenario details/trade-off expansions to a linked companion doc).
As per coding guidelines, approach cards have an error threshold above 3000 words.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@approaches/approach-private-identity.md` around lines 1 - 383, The approach card "Approach: Private Identity" exceeds the 3000-word limit and fails CI; reduce the document to under 3000 words by trimming or relocating verbose sections. Specifically, remove or move deep scenario descriptions (Scenario 1–7), extensive vendor/links lists, long "More Details" and "Trade-offs" tables, and large example blocks into a companion document, condense the "Overview", "Key Constraints", "TLDR for Different Personas" and "Architecture and Design Choices" to concise bullets, and ensure the resulting content (headers like "A. Registry-Based Membership Proofs", "F. Issuer-Independent Enrollment via Distributed OPRF", "Open Questions") remains a focused summary under 3000 words so CI will pass.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@approaches/approach-private-identity.md`:
- Line 158: The markdown contains marketing/superlative phrasing in the table
row and other flagged lines (e.g., the cells "One enrollment per source
credential" and "Source credentials are unique and unforgeable"); replace those
terms with neutral, factual alternatives (for example: "One enrollment per
source credential" -> "One enrollment per source credential (per-source
binding)" or "One enrollment per source credential" -> "Single enrollment
associated with each source credential" and "Source credentials are unique and
unforgeable" -> "Source credentials are tied to issuance and protected against
forgery" or similar neutral wording) and apply the same tone change to the other
flagged occurrences that match the same phrasing patterns so the prose lint and
repository tone requirements are satisfied.
In `@use-cases/resilient-identity-continuity.md`:
- Line 70: Replace the phrase "with only the on-chain trust anchor and a ZK
proof. No external calls." with neutral wording such as "with the on-chain trust
anchor and a ZK proof, without external service calls" in the sentence
describing verification in issuer-hostile settings; update the sentence in the
paragraph containing "Verification in existing private identity systems often
requires contacting a registry operator or issuer for revocation checks or
credential status" so it reads that verification must work "with the on-chain
trust anchor and a ZK proof, without external service calls."
- Around line 90-97: The "Open Questions" section currently uses a numbered
list; update the section headed "## 6) Open Questions" so each item is a
bullet-form question (use leading "-" or "*" per markdown) and append a
reference link for each question (e.g., "[link text](URL)") pointing to relevant
issue/PR or spec; ensure the header remains "Open Questions" and convert each of
the five numbered entries into separate bullet questions (preserve wording like
"minimum guardian set size for social recovery" and "production path for private
predicate parameters") with a short descriptive link for context attached to
each bullet.
- Line 26: Convert the dense inline actor sentence into an explicit bulleted
"Actors" list in the use-case card: replace the single-line string that
currently lists Holder, Identity Source, Enrollment Operator, Verifier, Auditor
/ Regulator, and Governance Operator with a markdown section titled "Actors"
followed by separate bullet entries for each actor (Holder, Identity Source,
Enrollment Operator, Verifier, Auditor / Regulator, Governance Operator),
ensuring each actor is its own list item and keeping the existing descriptions
(e.g., "Holder (identity owner: enrolls once, proves attributes at will)")
intact so the template structure and readability requirements are met.
- Line 3: Update the YAML frontmatter key primary_domain in
use-cases/resilient-identity-continuity.md from the incorrect value "identity"
to the canonical domain "Identity & Compliance" (matching domains/README.md and
other use-cases like private-identity.md and private-registry.md) so the file
references the correct domain.
---
Outside diff comments:
In `@approaches/approach-private-identity.md`:
- Around line 1-383: The approach card "Approach: Private Identity" exceeds the
3000-word limit and fails CI; reduce the document to under 3000 words by
trimming or relocating verbose sections. Specifically, remove or move deep
scenario descriptions (Scenario 1–7), extensive vendor/links lists, long "More
Details" and "Trade-offs" tables, and large example blocks into a companion
document, condense the "Overview", "Key Constraints", "TLDR for Different
Personas" and "Architecture and Design Choices" to concise bullets, and ensure
the resulting content (headers like "A. Registry-Based Membership Proofs", "F.
Issuer-Independent Enrollment via Distributed OPRF", "Open Questions") remains a
focused summary under 3000 words so CI will pass.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
Run ID: 9e6a36b8-0700-41fc-a645-5e46228018bd
📒 Files selected for processing (3)
CHANGELOG.mdapproaches/approach-private-identity.mduse-cases/resilient-identity-continuity.md
📜 Review details
🧰 Additional context used
📓 Path-based instructions (3)
CHANGELOG.md
⚙️ CodeRabbit configuration file
CHANGELOG.md: Entries must go under[Unreleased], include a markdown link to the changed file,
reference the PR number(#NNN), and use a semantic prefix (feat(pattern):,feat(vendor):,fix:,docs:, etc.).
Files:
CHANGELOG.md
approaches/**/*.md
⚙️ CodeRabbit configuration file
approaches/**/*.md: This is an approach card.Structure: Validate against the template at
approaches/_template.md.
File naming and conventions are inapproaches/README.md. Filename must start withapproach-in kebab-case.Approach cards MUST link to both the use case they address and the patterns they combine.
Flag if no pattern or use case cross-references are present.Word limits: warn > 2000, error > 3000.
Files:
approaches/approach-private-identity.md
use-cases/**/*.md
⚙️ CodeRabbit configuration file
use-cases/**/*.md: This is a use case card.Structure & frontmatter: Validate against the template at
use-cases/_template.md.
Rules and scope are inuse-cases/README.md.Check that
primary_domainmatches one of the domains listed indomains/README.md.
Use cases should stay on a single page — flag if the content is excessively long or duplicates linked docs.Warn if section
## 2) Additional Business Contextcontains anything that looks like confidential
information (specific organization names, pilot scopes, committed volumes) — these belong incontext/files.
Files:
use-cases/resilient-identity-continuity.md
🧠 Learnings (3)
📚 Learning: 2026-03-18T09:22:00.023Z
Learnt from: rymnc
Repo: ethereum/iptf-map PR: 116
File: patterns/pattern-private-set-intersection-dh.md:38-40
Timestamp: 2026-03-18T09:22:00.023Z
Learning: In the ethereum/iptf-map repository, pattern documentation (e.g., patterns/pattern-private-set-intersection-dh.md) is intentionally kept high-level and concise. Avoid suggesting granular implementation-level steps (e.g., explicit point-validation sub-steps) inside the Protocol section of pattern docs; prefer lightweight callouts in a separate Security Notes or Caveats section if the concern must be mentioned at all.
Applied to files:
CHANGELOG.mdapproaches/approach-private-identity.md
📚 Learning: 2026-03-19T10:42:51.310Z
Learnt from: rymnc
Repo: ethereum/iptf-map PR: 120
File: patterns/pattern-private-set-intersection-circuit.md:5-7
Timestamp: 2026-03-19T10:42:51.310Z
Learning: In the ethereum/iptf-map repository, the frontmatter fields `layer` (enum: L1, L2, offchain, hybrid), `privacy_goal` (string, maxLength 200), and `assumptions` (string or array of strings) are all explicitly defined as valid properties in `scripts/schemas/pattern.json`. Do not flag these as invalid or non-schema fields in pattern documents under the `patterns/` directory.
Applied to files:
CHANGELOG.md
📚 Learning: 2026-03-20T05:29:10.507Z
Learnt from: rymnc
Repo: ethereum/iptf-map PR: 120
File: patterns/pattern-private-set-intersection-circuit.md:19-23
Timestamp: 2026-03-20T05:29:10.507Z
Learning: In ethereum/iptf-map pattern reviews, distinguish between **censorship** (operator blocks user inputs from being processed — affects CR score) and **liveness** (operator withholds output after protocol participation — does not directly affect CR score). For garbled-circuit PSI patterns, the garbler withholding the output decoding table is a liveness concern, not censorship; do not flag it as a CR justification gap.
Applied to files:
CHANGELOG.md
🪛 GitHub Actions: CI Quality Gates
approaches/approach-private-identity.md
[error] 1-1: Content too long: 3461 words (max 3000). approach/private pattern validation failed.
🪛 GitHub Check: vale
approaches/approach-private-identity.md
[warning] 158-158: [vale] approaches/approach-private-identity.md#L158
[IPTF.Marketing] Avoid marketing language: 'unique'. Use neutral, factual terms.
[warning] 251-251: [vale] approaches/approach-private-identity.md#L251
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
[warning] 252-252: [vale] approaches/approach-private-identity.md#L252
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
[warning] 304-304: [vale] approaches/approach-private-identity.md#L304
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
[warning] 316-316: [vale] approaches/approach-private-identity.md#L316
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
[warning] 360-360: [vale] approaches/approach-private-identity.md#L360
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
use-cases/resilient-identity-continuity.md
[warning] 70-70: [vale] use-cases/resilient-identity-continuity.md#L70
[IPTF.Marketing] Avoid marketing language: 'only'. Use neutral, factual terms.
🔇 Additional comments (2)
CHANGELOG.md (1)
9-9: Changelog entry format is compliant.This line meets the repository changelog requirements (section placement, semantic prefix, linked files, and PR reference).
As per coding guidelines,
CHANGELOG.mdentries must be under[Unreleased], include markdown links to changed files, reference(#NNN), and use a semantic prefix.approaches/approach-private-identity.md (1)
3-3: Required cross-references are present and clear.The approach links back to use cases and explicitly references combined patterns, matching approach-card conventions.
As per coding guidelines, approach cards must link to the addressed use case and the patterns they combine.
Also applies to: 135-137, 379-379
What are you adding?
Description
closes part of #136
This pull request introduces comprehensive documentation for the "Resilient Identity Continuity" use case and its corresponding approach. It defines the requirements, challenges, and solutions for maintaining on-chain identity proofs when the original credential issuer is unavailable or adversarial. The update includes both a high-level use case description and a detailed technical approach, covering architecture, recovery mechanisms, sybil resistance, and trade-offs.
Key additions and changes:
Use Case Definition and Context:
use-cases/resilient-identity-continuity.md) outlining the need for identity proofs that survive issuer failure, detailing business context, actors, core problems, and requirements. It also summarizes related work, open questions, and links to standards and prior art.Technical Approach and Architecture:
approaches/approach-resilient-identity-continuity.md) that:Open Questions and Future Considerations:
Links to Related Work and Standards:
Checklist
Summary by CodeRabbit
Release Notes