feat(schema): flip pattern validator to strict v2#156
Conversation
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ 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 (4)
WalkthroughThis PR enforces strict v2 semantics for IPTF pattern frontmatter and structure. The JSON schema removes v1 aliases and deprecated fields, while the validator converts v2 mismatches to hard errors. Sixteen pattern markdown files are updated to v2 structure and reference cleanup. ChangesCore V2 Schema and Validator Enforcement
Pattern Documentation Migration to V2
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related issues
Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 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 |
Schema: drop rollout-plan property; validator promotes top-level additionalProperties errors to errors (was warnings). Patterns: drop rollout-plan from eil and focil-eip7805. Minimal v1->v2 frontmatter and section migration on social-recovery and zk-wrappers (authored in #153 before the migration sweep landed; missed by #154 and #155). Patterns: remove internal repo links from See also across 11 cards; drop inline pattern link from threshold-encrypted-mempool body prose. Cross-references preserved via related_patterns. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
805518b to
451f3c4
Compare
…wrappers Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
patterns/pattern-zk-wrappers.md (1)
1-21: 🧹 Nitpick | 🔵 Trivial | ⚖️ Poor tradeoffOptional: lift post-quantum and related-patterns context into structured frontmatter.
The card already discusses PQ exposure in Trade-offs (line 55) and lists implementations/related patterns in See also (lines 65-68). The v2 schema accepts structured
post_quantum,related_patterns, andopen_source_implementationsblocks (see the template and the sibling threshold-encrypted-mempool card). Promoting these from prose to frontmatter would make this card consistent with the rest of the v2 migration without changing semantics.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@patterns/pattern-zk-wrappers.md` around lines 1 - 21, The frontmatter should be extended to include structured keys for post-quantum context and related/implementation references instead of leaving them as prose; add post_quantum (string/array), related_patterns (array of pattern slugs like zk-tls, threshold-encrypted-mempool), and open_source_implementations (array) to the YAML frontmatter at the top of patterns/pattern-zk-wrappers.md and migrate the PQ discussion from the Trade-offs section and the entries from the See also section into those new keys (preserve wording), ensuring the existing semantics and values remain unchanged and that the new keys follow the v2 schema used by sibling cards.scripts/validate-patterns.js (1)
397-418:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winSchema enum violations are still demoted to warnings — intentional?
Line 412 routes any AJV
enumkeyword failure tofileWarnings, except where it falls under/crops_profileand is rescued byisRequiredField. Net effect: a malformedlayer,type,context, orpost_quantum.riskvalue will warn but not error, which contradicts the "strict v2" framing for those fields. The high-value enums (maturity,status,crops_profile.{cr,o,p,s}) are already covered by explicit error paths, so this is a gap rather than a regression — worth a quick decision before merge.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@scripts/validate-patterns.js` around lines 397 - 418, AJV enum violations are currently routed to fileWarnings (in the validatePatternSchema.errors loop), which lets invalid values for fields like layer, type, context, or post_quantum.risk slip through as warnings; change the logic so enum failures are treated as errors (push to fileErrors) for strict-v2 fields. Specifically, modify the branch handling error.keyword === 'enum' so it pushes to fileErrors instead of fileWarnings (or conditionally pushes to fileErrors when error.instancePath matches the strict fields such as /layer, /type, /context, /post_quantum/risk, and crops_profile paths), keeping the existing crops_profile additionalProperties and isRequiredField handling intact. Ensure you reference validatePatternSchema.errors, error.keyword === 'enum', isRequiredField, fileErrors, fileWarnings, and error.instancePath when making the change.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Line 7: The changelog entry under [Unreleased] for "feat(schema): flip pattern
validator to strict v2..." is missing a markdown link to the changed file(s);
update that entry to include a markdown link to the relevant file(s) (e.g.,
validate-patterns.js and pattern.json or whichever schema file was modified)
alongside the PR reference (`#156`) so it follows the rule "include a markdown
link to the changed file, reference the PR number, and use a semantic prefix";
ensure the entry format matches the sibling entries that link to
validate-patterns.js and pattern.json.
In `@patterns/pattern-social-recovery.md`:
- Around line 15-21: The frontmatter currently sets "context: both" but lacks
the required "context_differentiation" field; add a top-level
"context_differentiation" entry that contains explicit "i2u" and "i2i"
descriptions (lift the I2U vs I2I text from the body—the user trust graph vs
institutional MPC quorum/governance policy—into the frontmatter) so the file
complies with the rule that when context is both you must supply differentiation
for both i2u and i2i.
In `@patterns/pattern-zk-wrappers.md`:
- Around line 15-21: The front matter sets "context: both" but omits the
required "context_differentiation" entries; update the YAML to include a
"context_differentiation" mapping with keys for "i2i" and "i2u" and provide the
appropriate differentiation values for each (e.g., brief descriptions or flags)
so the validator accepts the file; ensure the block is added alongside the
existing "context: both" and "crops_profile" entries to satisfy the rule that
both i2i and i2u must be filled.
In `@scripts/validate-patterns.js`:
- Around line 366-385: The validation currently checks the expected CROPS
single-letter keys via cropsFields (and pushes errors into fileErrors) but
doesn't explicitly flag v1 alias keys (e.g., "os", "privacy", "security") with a
targeted migration hint; update the block that reads cp =
frontmatter.crops_profile to also scan cp for any known v1 aliases and, if
found, push a specific fileErrors entry like "crops_profile: found deprecated v1
key '<alias>'; use '<newKey>' (cr/o/p/s) instead" so contributors get a clear
migration hint; use the existing cropsFields and cp/fileErrors variables to
locate and implement this check.
---
Outside diff comments:
In `@patterns/pattern-zk-wrappers.md`:
- Around line 1-21: The frontmatter should be extended to include structured
keys for post-quantum context and related/implementation references instead of
leaving them as prose; add post_quantum (string/array), related_patterns (array
of pattern slugs like zk-tls, threshold-encrypted-mempool), and
open_source_implementations (array) to the YAML frontmatter at the top of
patterns/pattern-zk-wrappers.md and migrate the PQ discussion from the
Trade-offs section and the entries from the See also section into those new keys
(preserve wording), ensuring the existing semantics and values remain unchanged
and that the new keys follow the v2 schema used by sibling cards.
In `@scripts/validate-patterns.js`:
- Around line 397-418: AJV enum violations are currently routed to fileWarnings
(in the validatePatternSchema.errors loop), which lets invalid values for fields
like layer, type, context, or post_quantum.risk slip through as warnings; change
the logic so enum failures are treated as errors (push to fileErrors) for
strict-v2 fields. Specifically, modify the branch handling error.keyword ===
'enum' so it pushes to fileErrors instead of fileWarnings (or conditionally
pushes to fileErrors when error.instancePath matches the strict fields such as
/layer, /type, /context, /post_quantum/risk, and crops_profile paths), keeping
the existing crops_profile additionalProperties and isRequiredField handling
intact. Ensure you reference validatePatternSchema.errors, error.keyword ===
'enum', isRequiredField, fileErrors, fileWarnings, and error.instancePath when
making the change.
🪄 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: 0e216dfa-cffa-4a96-bb60-26b5242097c0
📒 Files selected for processing (18)
CHANGELOG.mdpatterns/pattern-eil.mdpatterns/pattern-focil-eip7805.mdpatterns/pattern-l2-privacy-evaluation.mdpatterns/pattern-mpc-custody.mdpatterns/pattern-native-account-abstraction.mdpatterns/pattern-pretrade-privacy-encryption.mdpatterns/pattern-privacy-l2s.mdpatterns/pattern-private-shared-state-cosnark.mdpatterns/pattern-private-transaction-broadcasting.mdpatterns/pattern-social-recovery.mdpatterns/pattern-tee-zk-settlement.mdpatterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-user-controlled-viewing-keys.mdpatterns/pattern-zk-tls.mdpatterns/pattern-zk-wrappers.mdscripts/schemas/pattern.jsonscripts/validate-patterns.js
💤 Files with no reviewable changes (12)
- patterns/pattern-native-account-abstraction.md
- patterns/pattern-eil.md
- patterns/pattern-l2-privacy-evaluation.md
- patterns/pattern-pretrade-privacy-encryption.md
- patterns/pattern-privacy-l2s.md
- patterns/pattern-private-transaction-broadcasting.md
- patterns/pattern-focil-eip7805.md
- patterns/pattern-user-controlled-viewing-keys.md
- patterns/pattern-mpc-custody.md
- patterns/pattern-tee-zk-settlement.md
- patterns/pattern-private-shared-state-cosnark.md
- patterns/pattern-zk-tls.md
📜 Review details
🧰 Additional context used
📓 Path-based instructions (2)
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
patterns/pattern-*.md
⚙️ CodeRabbit configuration file
patterns/pattern-*.md: This is a pattern card.Structure & frontmatter: Validate against the template at
patterns/_template.md.
File naming rules are inpatterns/README.md. Filename must start withpattern-in kebab-case.
Pattern names must be vendor-neutral (no vendor-specific names like aztec, nightfall, railgun, etc.).CROPS alignment (CRITICAL):
crops_profilewith all four fields (cr,os,privacy,security) is required — CI will reject patterns missing it.
Exception: meta/evaluation patterns that do not implement privacy directly may setcrops_profile: "n/a"— flag if this is used on a pattern that clearly does implement a privacy primitive.
Valid enum values are defined inCONTRIBUTING.md § CROPS Evaluationand enforced by the JSON schema atscripts/schemas/pattern.json.Your job is to review CROPS scores for plausibility, which CI cannot check:
- A pattern requiring a centralized operator should not claim
cr: high.- If the pattern involves I2U context, check that the CR score accounts for user escape paths per the CR rubric in CONTRIBUTING.md.
- A pattern using proprietary components should not claim
os: yes.- A pattern where the operator sees all user operations should not claim
privacy: full.Word limits: warn > 800, error > 1500.
Tone: factual and neutral per house style. No marketing language.
Files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
🧠 Learnings (12)
📚 Learning: 2026-03-18T09:21:53.725Z
Learnt from: rymnc
Repo: ethereum/iptf-map PR: 116
File: patterns/pattern-private-set-intersection-dh.md:38-40
Timestamp: 2026-03-18T09:21:53.725Z
Learning: In the ethereum/iptf-map repository, pattern documentation should keep the Protocol section high-level and concise. Do not include granular implementation steps (e.g., explicit point-validation sub-steps). If such concerns must be mentioned, use lightweight callouts in a separate Security Notes or Caveats section. Apply this guideline to all pattern docs under the patterns directory.
Applied to files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
📚 Learning: 2026-03-20T05:29:08.871Z
Learnt from: rymnc
Repo: ethereum/iptf-map PR: 120
File: patterns/pattern-private-set-intersection-circuit.md:19-23
Timestamp: 2026-03-20T05:29:08.871Z
Learning: When reviewing Ethereum iPTF-Map pattern documentation, distinguish clearly between **censorship** and **liveness**: treat censorship as the operator blocking user inputs from being processed (this impacts CR score), while treat liveness as the operator withholding outputs after protocol participation (this does not directly affect CR score). For garbled-circuit PSI patterns specifically, if the **garbler withholds the output decoding table**, classify this as a **liveness** concern—not censorship—and therefore **do not** flag it as a “CR justification gap.”
Applied to files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
📚 Learning: 2026-05-04T14:49:47.740Z
Learnt from: Meyanis95
Repo: ethereum/iptf-map PR: 154
File: patterns/pattern-lean-ethereum.md:4-4
Timestamp: 2026-05-04T14:49:47.740Z
Learning: In ethereum/iptf-map, pattern card markdown files under `patterns/` use v2 front-matter for the `maturity` field. When reviewing these files, treat `maturity` as a v2 enum and only consider it valid if it is one of: `research`, `concept`, `testnet`, or `production`. Do not flag `research` as invalid.
Applied to files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
📚 Learning: 2026-05-04T14:50:03.967Z
Learnt from: Meyanis95
Repo: ethereum/iptf-map PR: 154
File: patterns/pattern-privacy-l2s.md:4-4
Timestamp: 2026-05-04T14:50:03.967Z
Learning: In ethereum/iptf-map pattern cards using schema v2 (introduced in PR `#152`), validate the `maturity` field against the v2 enum values only: `research | concept | testnet | production`. The v1 enum (`PoC | pilot | prod`) is no longer applicable to v2-migrated pattern cards. When reviewing v2 pattern files, do not flag `production` as non-canonical (it is a valid v2 value).
Applied to files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
📚 Learning: 2026-05-04T14:50:03.935Z
Learnt from: Meyanis95
Repo: ethereum/iptf-map PR: 154
File: patterns/pattern-mixnet-anonymity.md:4-4
Timestamp: 2026-05-04T14:50:03.935Z
Learning: In this repo’s pattern files under `patterns/`, the IPtF map schema maturity enum must use the v2 values only: `research | concept | testnet | production`. The legacy v1 values `PoC | pilot | prod` are invalid after the v2 schema migration (PR `#152`). Therefore, when reviewing `patterns/**/*.md`, do not flag `testnet` or `production` as invalid maturity values; instead, flag any remaining usage of the old v1 enum values (`PoC`, `pilot`, `prod`) as incorrect.
Applied to files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
📚 Learning: 2026-05-04T14:50:06.756Z
Learnt from: Meyanis95
Repo: ethereum/iptf-map PR: 154
File: patterns/pattern-compliance-monitoring.md:4-4
Timestamp: 2026-05-04T14:50:06.756Z
Learning: In ethereum/iptf-map, for v2 pattern cards under the `patterns/` directory, validate the `maturity` field against the v2 enum only: `research | concept | testnet | production`. Do not treat `testnet` or `production` as invalid maturity values for v2 pattern cards (the v1 enum `PoC | pilot | prod` is obsolete for content migrated to v2).
Applied to files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
📚 Learning: 2026-05-04T14:50:06.734Z
Learnt from: Meyanis95
Repo: ethereum/iptf-map PR: 154
File: patterns/pattern-private-contract-dsl.md:4-4
Timestamp: 2026-05-04T14:50:06.734Z
Learning: For ethereum/iptf-map v2 pattern cards in the `patterns/` directory, validate the `maturity` field against the v2 enum defined in `scripts/schemas/pattern.json`: `research`, `concept`, `testnet`, `production`. Do NOT flag `maturity: production` as non-standard in v2 pattern files. Conversely, do not accept the v1 enum values (`PoC`, `pilot`, `prod`) for v2 pattern cards.
Applied to files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
📚 Learning: 2026-05-04T19:17:00.734Z
Learnt from: Meyanis95
Repo: ethereum/iptf-map PR: 155
File: patterns/pattern-private-stablecoin-shielded-payments.md:38-43
Timestamp: 2026-05-04T19:17:00.734Z
Learning: In this repo’s IPtF map pattern Markdown files, the v2 frontmatter key `visibility:` is part of the approved schema (defined by `patterns/_template.md`). It encodes the four-slot visibility matrix (counterparty, chain, regulator, public) for transaction-level pattern cards. Do not flag `visibility` as an unknown/ad-hoc/non-schema frontmatter key in `patterns/**/*.md`; only treat it as an issue if it violates the expected schema/format.
Applied to files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
📚 Learning: 2026-03-19T10:42:48.438Z
Learnt from: rymnc
Repo: ethereum/iptf-map PR: 120
File: patterns/pattern-private-set-intersection-circuit.md:5-7
Timestamp: 2026-03-19T10:42:48.438Z
Learning: In ethereum/iptf-map, when reviewing documentation files in the `patterns/` directory (e.g., `patterns/*.md`), do not flag frontmatter fields `layer`, `privacy_goal`, or `assumptions` as invalid/non-schema fields. These fields are explicitly defined as valid properties in `scripts/schemas/pattern.json` with the expected types/constraints: `layer` (enum: L1, L2, offchain, hybrid), `privacy_goal` (string, maxLength 200), and `assumptions` (string or array of strings).
Applied to files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
📚 Learning: 2026-05-04T14:49:53.905Z
Learnt from: Meyanis95
Repo: ethereum/iptf-map PR: 154
File: patterns/pattern-co-snark.md:4-4
Timestamp: 2026-05-04T14:49:53.905Z
Learning: In ethereum/iptf-map, for pattern markdown files under `patterns/` that use the v2 schema (introduced in PR `#152`), the `maturity` field must be one of: `research | concept | testnet | production`. Do not flag `testnet` or `production` as invalid in these v2-migrated pattern cards, and treat the old v1 values (`PoC | pilot | prod`) as not valid for v2 patterns.
Applied to files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
📚 Learning: 2026-05-04T14:49:53.905Z
Learnt from: Meyanis95
Repo: ethereum/iptf-map PR: 154
File: patterns/pattern-co-snark.md:4-4
Timestamp: 2026-05-04T14:49:53.905Z
Learning: When reviewing `patterns/*.md` in the `ethereum/iptf-map` repository that have been migrated to schema v2, interpret and validate the `maturity` field using the v2 enum values: `research | concept | testnet | production` (and do not accept legacy values `PoC | pilot | prod`). Also verify that `maturity` describes the repository’s Ethereum integration readiness (e.g., readiness of the native Ethereum execution-client integration represented in the repo), not the general real-world production readiness of the underlying technology.
Applied to files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
📚 Learning: 2026-05-04T14:50:02.790Z
Learnt from: Meyanis95
Repo: ethereum/iptf-map PR: 154
File: patterns/pattern-icma-bdt-data-model.md:4-4
Timestamp: 2026-05-04T14:50:02.790Z
Learning: When reviewing `maturity` fields in v2 pattern-card files under `patterns/` (v2 schema introduced in PR `#152` for `ethereum/iptf-map`), use the v2 enum values only: `research | concept | testnet | production`. Do not flag `production` as non-conformant in v2 pattern files, and do not recommend replacing `production` with the v1 value `prod` (v1 enum `PoC | pilot | prod` is obsolete for v2).
Applied to files:
patterns/pattern-threshold-encrypted-mempool.mdpatterns/pattern-social-recovery.mdpatterns/pattern-zk-wrappers.md
🪛 GitHub Actions: CI Quality Gates / 2_Validate Documentation Patterns.txt
patterns/pattern-social-recovery.md
[error] 1-1: Pattern validation failed: context is 'both' but context_differentiation is missing. Add both i2i and i2u strings.
patterns/pattern-zk-wrappers.md
[error] 1-1: Pattern validation failed: context is 'both' but context_differentiation is missing. Add both i2i and i2u strings.
🪛 GitHub Actions: CI Quality Gates / Validate Documentation Patterns
patterns/pattern-social-recovery.md
[error] 1-1: Pattern validation failed: context is 'both' but context_differentiation is missing. Add both i2i and i2u strings.
patterns/pattern-zk-wrappers.md
[error] 1-1: Pattern validation failed: context is 'both' but context_differentiation is missing. Add both i2i and i2u strings.
🔇 Additional comments (4)
patterns/pattern-threshold-encrypted-mempool.md (1)
59-59: LGTM on the cryptographic-sub-pattern framing.The added paragraph cleanly disambiguates this card from the trust-based private-relay variant, and the cross-reference via
related_patterns.requireskeeps the v2 frontmatter as the single source of truth instead of duplicating an inline link.scripts/schemas/pattern.json (1)
1-215: Schema tightening looks consistent with the strict-v2 intent.
additionalProperties: falseat the top level plus the nestedcrops_profile,crops_context,related_patterns,open_source_implementations,sub_patterns,visibility,post_quantum, andcontext_differentiationobjects gives the validator a clean rejection surface for v1 aliases. Thecrops_profileoneOf("n/a" | strict object withcr/o/p/s) is the right shape for the meta-pattern exception.scripts/validate-patterns.js (2)
287-337: Strict-v2 routing throughfileErrorslooks correct.Threading
fileErrorsintovalidateV2Fields(line 445) and pushing all four checks —context: bothshape,type: meta↔sub_patternsconsistency, missingrelated_patternsslugs, missingsub_patternsslugs — into the error collector matches the changelog promise. Two pattern files in this PR are already failing CI on thecontext: bothbranch, which confirms the wiring works end-to-end.
426-431: Maturity strict-v2 check looks right.The dedicated
V2_MATURITY_VALUEScheck correctly rejects the v1 enum (PoC/pilot/prod/experimental) as errors, independent of the AJV enum branch. Matches the changelog claim on line 7 ofCHANGELOG.md.
…ROPS aliases) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
@CodeRabbit approve |
✅ Actions performedComments resolved and changes approved. |
Fourth and final PR for #150. Removes all v1 aliases from schema and validator. Requires #154 and #155 to merge first. Stacked on #155.
Summary by CodeRabbit