Skip to content

rev-share-limit renamed to rev-share-cap#1919

Merged
Goader merged 4 commits intomainfrom
task/rev-share-cap
Apr 14, 2026
Merged

rev-share-limit renamed to rev-share-cap#1919
Goader merged 4 commits intomainfrom
task/rev-share-cap

Conversation

@Goader
Copy link
Copy Markdown
Contributor

@Goader Goader commented Apr 13, 2026

rev-share-limit renamed to rev-share-cap

closes: #1900

Summary

  • rev-share-limit renamed to rev-share-cap both in the filenames, code, and relevant comments/documentation

Why


Testing

  • Automatic CI and manual validation

Pre-Review Checklist (Blocking)

  • This PR does not introduce significant changes and is low-risk to review quickly.
  • Relevant changesets are included (or are not required)

@Goader Goader self-assigned this Apr 13, 2026
Copilot AI review requested due to automatic review settings April 13, 2026 14:35
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Apr 13, 2026

🦋 Changeset detected

Latest commit: 549d55b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 24 packages
Name Type
@namehash/ens-referrals Major
ensapi Major
ensindexer Major
ensadmin Major
ensrainbow Major
fallback-ensapi Major
enssdk Major
enscli Major
enskit Major
ensskills Major
@ensnode/datasources Major
@ensnode/ensrainbow-sdk Major
@ensnode/ensdb-sdk Major
@ensnode/ensnode-react Major
@ensnode/ensnode-sdk Major
@ensnode/ponder-sdk Major
@ensnode/ponder-subgraph Major
@ensnode/shared-configs Major
@docs/ensnode Major
@docs/ensrainbow Major
@docs/mintlify Major
@namehash/namehash-ui Major
@ensnode/enskit-react-example Patch
@ensnode/integration-test-env Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel
Copy link
Copy Markdown
Contributor

vercel bot commented Apr 13, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

3 Skipped Deployments
Project Deployment Actions Updated (UTC)
admin.ensnode.io Skipped Skipped Apr 14, 2026 1:47pm
ensnode.io Skipped Skipped Apr 14, 2026 1:47pm
ensrainbow.io Skipped Skipped Apr 14, 2026 1:47pm

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 13, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 81bfee0c-9242-4ad5-98ba-ee936a28c9de

📥 Commits

Reviewing files that changed from the base of the PR and between 24e7a93 and 549d55b.

📒 Files selected for processing (3)
  • apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/get-referrer-leaderboard-v1.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard.test.ts
  • packages/ens-referrals/src/v1/edition-metrics.ts

📝 Walkthrough

Walkthrough

A systematic rename and migration of the rev-share award-model from rev-share-limitrev-share-cap across types, builders, Zod schemas, serializers, tests, exports, and runtime dispatch; legacy rev-share-limit serialization and page modules were removed and replaced by rev-share-cap implementations.

Changes

Cohort / File(s) Summary
Changeset & Version Bumps
.changeset/swift-cats-glow.md
Added changeset bumping @namehash/ens-referrals (minor) and ensapi (patch) documenting the award-model rename.
ENS API Leaderboard Integration
apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/get-referrer-leaderboard-v1.ts
Dispatch switched to ReferralProgramAwardModels.RevShareCap and now calls buildReferrerLeaderboardRevShareCap; JSDoc adjusted.
Documentation
packages/ens-referrals/README.md
README examples updated to use ReferralProgramAwardModels.RevShareCap.
API Dispatch & Serialization (v1)
packages/ens-referrals/src/v1/api/serialize.ts, packages/ens-referrals/src/v1/api/serialized-types.ts, packages/ens-referrals/src/v1/api/zod-schemas.ts, packages/ens-referrals/src/v1/api/zod-schemas.test.ts
Rewired imports, switch cases, union members and tests to use ...RevShareCap serializers/schemas/types instead of ...RevShareLimit.
Award Model Discriminant
packages/ens-referrals/src/v1/award-models/shared/rules.ts
Renamed discriminant from "rev-share-limit" to "rev-share-cap" (ReferralProgramAwardModels.RevShareCap).
Rev-Share-Cap Core: rules & events
packages/ens-referrals/src/v1/award-models/rev-share-cap/{rules.ts,referral-event.ts}
Renamed rules types, builders, validators and qualification predicate to *RevShareCap; docs updated; added runtime discriminant validation.
Rev-Share-Cap Metrics & Aggregations
packages/ens-referrals/src/v1/award-models/rev-share-cap/{metrics.ts,aggregations.ts}
Renamed metrics/aggregation interfaces, validators and builders from *RevShareLimit*RevShareCap and updated internal schema parse labels.
Rev-Share-Cap Leaderboard & Page
packages/ens-referrals/src/v1/award-models/rev-share-cap/{leaderboard.ts,leaderboard-page.ts,leaderboard.test.ts}
Added/renamed leaderboard and page interfaces and builders to cap variants; tests updated to cap wording and builders.
Rev-Share-Cap Edition Models
packages/ens-referrals/src/v1/award-models/rev-share-cap/{edition-metrics.ts,edition-summary.ts,status.ts}
Renamed edition-level types, builders and status calc to *RevShareCap variants and updated discriminants.
Rev-Share-Cap API Serialization Module
packages/ens-referrals/src/v1/award-models/rev-share-cap/api/{serialize.ts,serialized-types.ts,zod-schemas.ts}
Added cap-specific serialization, serialized-types and Zod schema factories (new exported serializers and serialized interfaces for RevShareCap).
Removed Rev-Share-Limit Modules
packages/ens-referrals/src/v1/award-models/rev-share-limit/{api/serialize.ts,leaderboard-page.ts}
Deleted legacy rev-share-limit serialization and leaderboard-page modules (replaced by rev-share-cap counterparts).
Top-level v1 API & Unions
packages/ens-referrals/src/v1/{index.ts,edition-metrics.ts,edition-summary.ts,leaderboard.ts,leaderboard-page.ts,rules.ts}
Re-exports and public union members updated to reference rev-share-cap modules/types; runtime dispatch switched to ReferralProgramAwardModels.RevShareCap.
Other Wiring
packages/ens-referrals/src/v1/index.ts, packages/ens-referrals/src/v1/leaderboard-page.ts, packages/ens-referrals/src/v1/leaderboard.ts, packages/ens-referrals/src/v1/edition-metrics.ts
Replaced RevShareLimit imports/union arms with RevShareCap variants and updated builders called in switch dispatches.

Sequence Diagram(s)

(omitted)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

ensanalytics

Poem

🐰 I hopped through code with a tiny tap,
Swapped "limit" for "cap" on every map,
Types leapt forward, serializers sang,
Unions lined up in tidy rang,
A carrot-click rename — now time for a nap! 🥕

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main change: renaming rev-share-limit to rev-share-cap, which is the primary objective of the pull request.
Description check ✅ Passed The description follows the template with all required sections (Summary, Why, Testing, Pre-Review Checklist) completed. It clearly states the change, links the related issue, and confirms testing and checklist items.
Linked Issues check ✅ Passed The PR successfully addresses all requirements from issue #1900: renaming rev-share-limit to rev-share-cap throughout filenames, code, comments, and documentation for consistent terminology with existing uncappedAward and cappedAward naming.
Out of Scope Changes check ✅ Passed All changes are directly related to the terminology refactoring objective. The PR consistently renames all occurrences of RevShareLimit to RevShareCap and updates related imports, type references, and documentation without introducing unrelated modifications.
Docstring Coverage ✅ Passed Docstring coverage is 94.74% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task/rev-share-cap

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Renames the referral program award model discriminator from rev-share-limit to rev-share-cap across the @namehash/ens-referrals v1 domain model and the ensapi leaderboard builder, including updated serialization and validation layers.

Changes:

  • Replaces the RevShareLimit award model constant/type variants with RevShareCap throughout v1 rules/leaderboard/page/metrics/status flows.
  • Moves/duplicates the rev-share award-model implementation under award-models/rev-share-cap/* and updates v1 serialization + Zod schemas accordingly.
  • Updates ensapi v1 leaderboard dispatch to build the rev-share leaderboard under the new award model.

Reviewed changes

Copilot reviewed 29 out of 30 changed files in this pull request and generated no comments.

Show a summary per file
File Description
packages/ens-referrals/src/v1/rules.ts Updates the ReferralProgramRules union to reference the rev-share-cap rules type.
packages/ens-referrals/src/v1/leaderboard.ts Updates the ReferrerLeaderboard union to use the rev-share-cap variant.
packages/ens-referrals/src/v1/leaderboard-page.ts Switches leaderboard-page building to the RevShareCap award model branch.
packages/ens-referrals/src/v1/index.ts Re-exports rev-share-cap award-model modules (replacing rev-share-limit exports).
packages/ens-referrals/src/v1/edition-summary.ts Switches edition summary building to the RevShareCap branch and types.
packages/ens-referrals/src/v1/edition-metrics.ts Switches edition metrics building to the RevShareCap branch and types.
packages/ens-referrals/src/v1/award-models/shared/rules.ts Renames the award-model constant entry to RevShareCap: "rev-share-cap".
packages/ens-referrals/src/v1/award-models/rev-share-limit/leaderboard-page.ts Removes the rev-share-limit leaderboard-page implementation.
packages/ens-referrals/src/v1/award-models/rev-share-limit/api/serialize.ts Removes the rev-share-limit serialization implementation.
packages/ens-referrals/src/v1/award-models/rev-share-cap/status.ts Provides calcReferralProgramEditionStatusRevShareCap and updates docs/types.
packages/ens-referrals/src/v1/award-models/rev-share-cap/sort-referral-events.ts Adds helper for deterministic chronological ordering of referral events by id.
packages/ens-referrals/src/v1/award-models/rev-share-cap/rules.ts Renames rev-share rules types/builders/validators to the RevShareCap naming.
packages/ens-referrals/src/v1/award-models/rev-share-cap/referral-event.ts Updates model documentation to rev-share-cap terminology.
packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts Renames rev-share metrics types/builders/validators to the RevShareCap naming.
packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard.ts Renames the sequential race leaderboard builder/type to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard.test.ts Updates tests to target buildReferrerLeaderboardRevShareCap and new constants.
packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard-page.ts Adds the rev-share-cap leaderboard page type + builder.
packages/ens-referrals/src/v1/award-models/rev-share-cap/edition-summary.ts Renames rev-share edition summary type/builder/validator to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/edition-metrics.ts Renames rev-share edition metrics variant types to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/api/zod-schemas.ts Renames rev-share-cap Zod schema builders and updates literals to rev-share-cap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/api/serialized-types.ts Renames serialized type interfaces/unions to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/api/serialize.ts Adds rev-share-cap serialization functions (rules/metrics/pages/summaries).
packages/ens-referrals/src/v1/award-models/rev-share-cap/aggregations.ts Renames aggregated metrics types/builders/validators to RevShareCap.
packages/ens-referrals/src/v1/api/zod-schemas.ts Wires the v1 API discriminated unions to the rev-share-cap schema builders.
packages/ens-referrals/src/v1/api/zod-schemas.test.ts Updates v1 API schema tests to use ReferralProgramAwardModels.RevShareCap.
packages/ens-referrals/src/v1/api/serialized-types.ts Updates top-level serialized unions to use rev-share-cap variants.
packages/ens-referrals/src/v1/api/serialize.ts Updates top-level v1 serializers’ dispatch to RevShareCap.
packages/ens-referrals/README.md Updates README examples to check for RevShareCap award model.
apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/get-referrer-leaderboard-v1.ts Updates server-side leaderboard builder dispatch to RevShareCap.
.changeset/swift-cats-glow.md Adds a changeset documenting the award-model rename.
Comments suppressed due to low confidence (3)

packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard.test.ts:145

  • The test description uses “uncapped pool”, but this award model is explicitly pool-capped; here it looks like the intent is “cap doesn’t bind because the pool is large”. Consider renaming the test case text/comment to something like “large pool” / “non-binding cap” to avoid confusion.
    packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard.test.ts:189
  • Same wording issue as above: “uncapped pool” in the test name reads like the model has no pool cap. Using “large pool” / “non-binding cap” would be clearer and consistent with the rev-share-cap terminology.
    packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard.test.ts:344
  • The comment “Pool = $1000 (uncapped for this test)” is a bit misleading in a pool-capped model; it’s really a large pool where the cap doesn’t constrain results. Consider updating the comment wording to match the rev-share-cap terminology.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
packages/ens-referrals/src/v1/award-models/rev-share-cap/rules.ts (1)

77-118: ⚠️ Potential issue | 🟠 Major

Reject mismatched awardModel values in the runtime validator.

validateReferralProgramRulesRevShareCap validates the cap-specific fields, but it never asserts rules.awardModel === ReferralProgramAwardModels.RevShareCap. At runtime, a structurally similar object with "pie-split" or "unrecognized" can still pass this validator and then be dispatched incorrectly by downstream code that trusts the discriminator.

Suggested fix
 export const validateReferralProgramRulesRevShareCap = (
   rules: ReferralProgramRulesRevShareCap,
 ): void => {
+  if (rules.awardModel !== ReferralProgramAwardModels.RevShareCap) {
+    throw new Error(
+      `ReferralProgramRulesRevShareCap: awardModel must be "${ReferralProgramAwardModels.RevShareCap}", got ${rules.awardModel}.`,
+    );
+  }
+
   makePriceUsdcSchema("ReferralProgramRulesRevShareCap.awardPool").parse(rules.awardPool);
 
   makePriceUsdcSchema("ReferralProgramRulesRevShareCap.minBaseRevenueContribution").parse(
     rules.minBaseRevenueContribution,
   );
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/ens-referrals/src/v1/award-models/rev-share-cap/rules.ts` around
lines 77 - 118, Add an explicit runtime check in
validateReferralProgramRulesRevShareCap to ensure the input is the expected
discriminator: verify rules.awardModel ===
ReferralProgramAwardModels.RevShareCap and throw a descriptive Error if not;
place this check near the top of validateReferralProgramRulesRevShareCap (before
other field validations) so structurally similar objects with awardModel
"pie-split" or "unrecognized" are rejected early.
packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts (1)

27-42: ⚠️ Potential issue | 🟡 Minor

Validate totalBaseRevenueContribution as a PriceUsdc before comparing amounts.

This validator only checks .amount against the derived value. A plain object with a matching amount would still pass, unlike the other monetary fields in this module.

Suggested fix
 export const validateReferrerMetricsRevShareCap = (
   metrics: ReferrerMetricsRevShareCap,
   rules: ReferralProgramRulesRevShareCap,
 ): void => {
   validateReferrerMetrics(metrics);
+  makePriceUsdcSchema("ReferrerMetricsRevShareCap.totalBaseRevenueContribution").parse(
+    metrics.totalBaseRevenueContribution,
+  );
 
   const expectedTotalBaseRevenueContribution = priceUsdc(
     (rules.baseAnnualRevenueContribution.amount * BigInt(metrics.totalIncrementalDuration)) /
       BigInt(SECONDS_PER_YEAR),
   );
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts` around
lines 27 - 42, The validator validateReferrerMetricsRevShareCap currently
compares only totalBaseRevenueContribution.amount to the computed expected
amount, which allows non-PriceUsdc-shaped objects to pass; update the check to
first validate/construct totalBaseRevenueContribution as a PriceUsdc (like
calling priceUsdc on metrics.totalBaseRevenueContribution or otherwise asserting
its shape) and then compare the resulting PriceUsdc.amount to
expectedTotalBaseRevenueContribution.amount so totalBaseRevenueContribution is
enforced to be a proper PriceUsdc before performing the equality check.
packages/ens-referrals/src/v1/edition-metrics.ts (1)

36-45: 🛠️ Refactor suggestion | 🟠 Major

Drop the redundant @returns tag here.

It doesn't add anything beyond the summary and signature.

Suggested cleanup
 /**
  * Get the edition metrics for a specific referrer from the leaderboard.
  *
  * Returns a {`@link` ReferrerEditionMetricsPieSplit} or {`@link` ReferrerEditionMetricsRevShareCap}
  * with `type: "ranked"` if the referrer is on the leaderboard, or `type: "unranked"` otherwise.
  *
  * `@param` referrer - The referrer address to look up
  * `@param` leaderboard - The referrer leaderboard to query
- * `@returns` The appropriate {`@link` ReferrerEditionMetrics}
  */

As per coding guidelines, "Do not add JSDoc @returns tags that merely restate the method summary; remove such redundancy during PR review."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/ens-referrals/src/v1/edition-metrics.ts` around lines 36 - 45,
Remove the redundant JSDoc `@returns` tag in the comment block that begins "Get
the edition metrics for a specific referrer from the leaderboard" (the JSDoc
above the function that returns a ReferrerEditionMetricsPieSplit or
ReferrerEditionMetricsRevShareCap); leave the summary, params, and type links
intact but delete the `@returns` line so the docblock no longer restates the
signature.
apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/get-referrer-leaderboard-v1.ts (1)

12-23: 🛠️ Refactor suggestion | 🟠 Major

Trim the redundant @returns tag in this JSDoc.

That line only restates the signature, and while you're touching this block the summary should say ReferrerLeaderboard, not ReferralLeaderboard.

Suggested cleanup
 /**
- * Builds a `ReferralLeaderboard` from the database using the provided referral program rules (V1 API).
+ * Builds a `ReferrerLeaderboard` from the database using the provided referral program rules (V1 API).
  *
  * Dispatches to the appropriate model-specific builder based on `rules.awardModel`:
  * - PieSplit: uses aggregated referrer metrics (GROUP BY query).
  * - RevShareCap: uses raw referral events (no GROUP BY) for the sequential race algorithm.
  *
  * `@param` rules - The referral program rules for filtering registrar actions
  * `@param` accurateAsOf - The {`@link` UnixTimestamp} of when the data used to build the {`@link` ReferrerLeaderboard} was accurate as of.
- * `@returns` A promise that resolves to a {`@link` ReferrerLeaderboard}
  * `@throws` Error if the database query fails
  */

As per coding guidelines, "Do not add JSDoc @returns tags that merely restate the method summary; remove such redundancy during PR review."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/get-referrer-leaderboard-v1.ts`
around lines 12 - 23, Update the JSDoc for the top-level builder in
get-referrer-leaderboard-v1.ts: change the summary text from
"ReferralLeaderboard" to "ReferrerLeaderboard" and remove the redundant `@returns`
tag that merely restates the function signature; keep parameter and throws tags
intact for the function that builds the ReferrerLeaderboard (the function
documented in this block — the V1 dispatcher for rules.awardModel).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In
`@apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/get-referrer-leaderboard-v1.ts`:
- Around line 12-23: Update the JSDoc for the top-level builder in
get-referrer-leaderboard-v1.ts: change the summary text from
"ReferralLeaderboard" to "ReferrerLeaderboard" and remove the redundant `@returns`
tag that merely restates the function signature; keep parameter and throws tags
intact for the function that builds the ReferrerLeaderboard (the function
documented in this block — the V1 dispatcher for rules.awardModel).

In `@packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts`:
- Around line 27-42: The validator validateReferrerMetricsRevShareCap currently
compares only totalBaseRevenueContribution.amount to the computed expected
amount, which allows non-PriceUsdc-shaped objects to pass; update the check to
first validate/construct totalBaseRevenueContribution as a PriceUsdc (like
calling priceUsdc on metrics.totalBaseRevenueContribution or otherwise asserting
its shape) and then compare the resulting PriceUsdc.amount to
expectedTotalBaseRevenueContribution.amount so totalBaseRevenueContribution is
enforced to be a proper PriceUsdc before performing the equality check.

In `@packages/ens-referrals/src/v1/award-models/rev-share-cap/rules.ts`:
- Around line 77-118: Add an explicit runtime check in
validateReferralProgramRulesRevShareCap to ensure the input is the expected
discriminator: verify rules.awardModel ===
ReferralProgramAwardModels.RevShareCap and throw a descriptive Error if not;
place this check near the top of validateReferralProgramRulesRevShareCap (before
other field validations) so structurally similar objects with awardModel
"pie-split" or "unrecognized" are rejected early.

In `@packages/ens-referrals/src/v1/edition-metrics.ts`:
- Around line 36-45: Remove the redundant JSDoc `@returns` tag in the comment
block that begins "Get the edition metrics for a specific referrer from the
leaderboard" (the JSDoc above the function that returns a
ReferrerEditionMetricsPieSplit or ReferrerEditionMetricsRevShareCap); leave the
summary, params, and type links intact but delete the `@returns` line so the
docblock no longer restates the signature.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 10058140-6042-423b-9317-949dd3866f04

📥 Commits

Reviewing files that changed from the base of the PR and between d5225c0 and db6e761.

📒 Files selected for processing (30)
  • .changeset/swift-cats-glow.md
  • apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/get-referrer-leaderboard-v1.ts
  • packages/ens-referrals/README.md
  • packages/ens-referrals/src/v1/api/serialize.ts
  • packages/ens-referrals/src/v1/api/serialized-types.ts
  • packages/ens-referrals/src/v1/api/zod-schemas.test.ts
  • packages/ens-referrals/src/v1/api/zod-schemas.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/aggregations.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/api/serialize.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/api/serialized-types.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/api/zod-schemas.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/edition-metrics.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/edition-summary.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard-page.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard.test.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/referral-event.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/rules.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/sort-referral-events.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/status.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-limit/api/serialize.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-limit/leaderboard-page.ts
  • packages/ens-referrals/src/v1/award-models/shared/rules.ts
  • packages/ens-referrals/src/v1/edition-metrics.ts
  • packages/ens-referrals/src/v1/edition-summary.ts
  • packages/ens-referrals/src/v1/index.ts
  • packages/ens-referrals/src/v1/leaderboard-page.ts
  • packages/ens-referrals/src/v1/leaderboard.ts
  • packages/ens-referrals/src/v1/rules.ts
💤 Files with no reviewable changes (2)
  • packages/ens-referrals/src/v1/award-models/rev-share-limit/leaderboard-page.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-limit/api/serialize.ts

@Goader Goader marked this pull request as ready for review April 13, 2026 16:48
@Goader Goader requested a review from a team as a code owner April 13, 2026 16:48
Copilot AI review requested due to automatic review settings April 13, 2026 16:48
@vercel vercel bot temporarily deployed to Preview – ensrainbow.io April 13, 2026 16:48 Inactive
@vercel vercel bot temporarily deployed to Preview – ensnode.io April 13, 2026 16:48 Inactive
@vercel vercel bot temporarily deployed to Preview – admin.ensnode.io April 13, 2026 16:48 Inactive
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Apr 13, 2026

Greptile Summary

This PR renames the rev-share-limit award model to rev-share-cap throughout the codebase — covering file renames, type/interface/function identifier renames, the awardModel discriminant string literal, and all related comments and documentation. The rename is thorough and consistent: no stale RevShareLimit identifiers remain, the old rev-share-limit/ directory is fully removed, and two additional defensive validation checks were added opportunistically (awardModel guard in validateReferralProgramRulesRevShareCap, and makePriceUsdcSchema parse in validateReferrerMetricsRevShareCap).

The one concern worth addressing is the changeset version bump: @namehash/ens-referrals is at 1.9.0, and the awardModel wire value changes from \"rev-share-limit\" to \"rev-share-cap\", which is a breaking API change that should be versioned as major under SemVer rather than minor.

Confidence Score: 4/5

Safe to merge after addressing the changeset version bump — the rename itself is thorough and correct.

The rename is complete and consistent — no stale RevShareLimit identifiers remain, tests are updated, and the old directory is fully removed. The one P1 finding is the minor bump in the changeset for a breaking wire-value change ("rev-share-limit" → "rev-share-cap") in a 1.9.0 package. If all consumers are internal and kept in-sync, the practical risk is low, but the versioning signal is incorrect under SemVer.

.changeset/swift-cats-glow.md — version bump should be major, not minor.

Important Files Changed

Filename Overview
.changeset/swift-cats-glow.md Marks @namehash/ens-referrals as minor, but the awardModel wire value change ("rev-share-limit" → "rev-share-cap") is a breaking change requiring major for a 1.9.0 package.
packages/ens-referrals/src/v1/award-models/shared/rules.ts Core discriminant enum updated: RevShareLimit → RevShareCap with new string value "rev-share-cap". Clean and correct.
packages/ens-referrals/src/v1/award-models/rev-share-cap/rules.ts All types, validators, and builders renamed; new awardModel guard added to validateReferralProgramRulesRevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts Renamed correctly; new makePriceUsdcSchema validation added for totalBaseRevenueContribution.
packages/ens-referrals/src/v1/api/zod-schemas.ts Imports and schema composition updated to use RevShareCap variants; discriminated union schemas correct.
packages/ens-referrals/src/v1/api/zod-schemas.test.ts Test fixtures, variable names, and assertions all updated to RevShareCap; test descriptions match new terminology.
apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/get-referrer-leaderboard-v1.ts Dispatch switch case and function call updated from RevShareLimit to RevShareCap; correct.

Reviews (1): Last reviewed commit: "review applied" | Re-trigger Greptile

Comment thread .changeset/swift-cats-glow.md
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Renames the referral award model identifier and related types from rev-share-limit to rev-share-cap across the @namehash/ens-referrals v1 API surface and the ensapi v1 leaderboard builder dispatch, aligning terminology with prior “capped/uncapped” language.

Changes:

  • Renamed the award model discriminant string to "rev-share-cap" and updated all v1 unions/switch dispatch to use RevShareCap.
  • Moved/renamed the rev-share award-model implementation directory/files to rev-share-cap and updated related types, serializers, and zod schemas.
  • Updated ensapi v1 leaderboard builder dispatch and added a changeset for versioning.

Reviewed changes

Copilot reviewed 29 out of 30 changed files in this pull request and generated no comments.

Show a summary per file
File Description
packages/ens-referrals/src/v1/rules.ts Updates rules union to reference RevShareCap variant.
packages/ens-referrals/src/v1/leaderboard.ts Updates leaderboard union to include RevShareCap variant.
packages/ens-referrals/src/v1/leaderboard-page.ts Switches page builder dispatch to RevShareCap.
packages/ens-referrals/src/v1/index.ts Re-exports rev-share implementation from rev-share-cap/* paths.
packages/ens-referrals/src/v1/edition-summary.ts Switches edition summary dispatch to RevShareCap.
packages/ens-referrals/src/v1/edition-metrics.ts Switches edition metrics dispatch/types to RevShareCap.
packages/ens-referrals/src/v1/award-models/shared/rules.ts Renames award model constant key/value to RevShareCap / "rev-share-cap".
packages/ens-referrals/src/v1/award-models/rev-share-limit/leaderboard-page.ts Removes old rev-share-limit leaderboard page implementation.
packages/ens-referrals/src/v1/award-models/rev-share-limit/api/serialize.ts Removes old rev-share-limit serialization implementation.
packages/ens-referrals/src/v1/award-models/rev-share-cap/status.ts Renamed status calculator to rev-share-cap variant.
packages/ens-referrals/src/v1/award-models/rev-share-cap/sort-referral-events.ts Adds sorting helper for rev-share-cap event ordering.
packages/ens-referrals/src/v1/award-models/rev-share-cap/rules.ts Renames rules interface/builders/validators to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/referral-event.ts Updates documentation to rev-share-cap terminology.
packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts Renames rev-share metrics types/functions to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard.ts Renames leaderboard types/builder to RevShareCap and updates imports.
packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard.test.ts Updates tests to use RevShareCap builder/types.
packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard-page.ts Adds rev-share-cap leaderboard page implementation.
packages/ens-referrals/src/v1/award-models/rev-share-cap/edition-summary.ts Renames edition summary types/builders to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/edition-metrics.ts Renames edition metrics types to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/api/zod-schemas.ts Renames rev-share zod schema builders to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/api/serialized-types.ts Renames serialized types to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/api/serialize.ts Adds rev-share-cap serialization implementation.
packages/ens-referrals/src/v1/award-models/rev-share-cap/aggregations.ts Renames aggregation types/builders to RevShareCap.
packages/ens-referrals/src/v1/api/zod-schemas.ts Updates top-level discriminated unions to point at RevShareCap schemas.
packages/ens-referrals/src/v1/api/zod-schemas.test.ts Updates schema tests to use RevShareCap discriminant.
packages/ens-referrals/src/v1/api/serialized-types.ts Updates top-level serialized unions to RevShareCap.
packages/ens-referrals/src/v1/api/serialize.ts Updates top-level serializer dispatch to RevShareCap.
packages/ens-referrals/README.md Updates documentation examples to check RevShareCap.
apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/get-referrer-leaderboard-v1.ts Updates v1 leaderboard dispatch to use RevShareCap.
.changeset/swift-cats-glow.md Adds changeset describing the rename and bumps versions.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts (1)

176-186: 🛠️ Refactor suggestion | 🟠 Major

Keep only the cap-specific invariants in this field doc.

The “valid PriceUsdc with amount between 0 and …” wording repeats the generic non-negative invariant that already belongs on PriceUsdc. This field doc should keep only the rev-share-cap-specific constraints, such as the awardPool upper bound and the zero-when-unqualified/disqualified cases.

Based on learnings, prefer placing invariants on type aliases only when the invariant is context-independent or reused across multiple fields.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts` around
lines 176 - 186, Edit the doc comment for the field describing "The referrer's
(tentative) capped USDC award" to remove the generic non-negative/“valid
PriceUsdc” invariant and keep only rev-share-cap-specific constraints: the
upper-bound by ReferralProgramRulesRevShareCap.awardPool.amount, the invariant
Always <= uncappedAward.amount, and the zero-when conditions (amount equals 0
when isAdminDisqualified is true and when isQualified is false); move the
generic non-negative/valid-PriceUsdc wording to the PriceUsdc type alias if not
already present.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts`:
- Around line 190-240: validateAwardedReferrerMetricsRevShareCap currently does
not enforce that uncappedAward equals the rules-derived formula
(maxBaseRevenueShare × totalBaseRevenueContribution), allowing inconsistent
records; fix by either (A) computing uncappedAward inside
buildAwardedReferrerMetricsRevShareCap instead of accepting it from the caller
(derive using rules.maxBaseRevenueShare and
referrer.totalBaseRevenueContribution and set uncappedAward before calling
validateAwardedReferrerMetricsRevShareCap), or (B) add a check inside
validateAwardedReferrerMetricsRevShareCap that computes the expected uncapped
amount from rules.maxBaseRevenueShare and the referrer fields (e.g., from
RankedReferrerMetricsRevShareCap.totalBaseRevenueContribution) and throws if
metrics.uncappedAward !== expected; update any error messages to include the
expected and actual values.

---

Outside diff comments:
In `@packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts`:
- Around line 176-186: Edit the doc comment for the field describing "The
referrer's (tentative) capped USDC award" to remove the generic
non-negative/“valid PriceUsdc” invariant and keep only rev-share-cap-specific
constraints: the upper-bound by
ReferralProgramRulesRevShareCap.awardPool.amount, the invariant Always <=
uncappedAward.amount, and the zero-when conditions (amount equals 0 when
isAdminDisqualified is true and when isQualified is false); move the generic
non-negative/valid-PriceUsdc wording to the PriceUsdc type alias if not already
present.
🪄 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: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: def357a3-e889-4e8d-b129-977210dc6b67

📥 Commits

Reviewing files that changed from the base of the PR and between db6e761 and 24e7a93.

📒 Files selected for processing (2)
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts
  • packages/ens-referrals/src/v1/award-models/rev-share-cap/rules.ts

Comment thread packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts
Copy link
Copy Markdown
Contributor

@vercel vercel bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional Suggestions:

  1. Redundant JSDoc @returns tag that merely restates the function signature
  1. JSDoc comment contains a typo (ReferralLeaderboard instead of ReferrerLeaderboard) and a redundant @returns tag

Fix on Vercel

@vercel vercel bot temporarily deployed to Preview – ensrainbow.io April 13, 2026 17:39 Inactive
@vercel vercel bot temporarily deployed to Preview – ensnode.io April 13, 2026 17:39 Inactive
@vercel vercel bot temporarily deployed to Preview – admin.ensnode.io April 13, 2026 17:39 Inactive
Comment thread packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts
Copy link
Copy Markdown
Member

@lightwalker-eth lightwalker-eth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Goader Looks good 👍 Shared very small comments please take the lead to merge 👍


describe("Scenario C — already qualified, claims incremental uncapped award per event", () => {
it("qualified referrer claims incremental award on subsequent events (unlimited pool)", () => {
it("qualified referrer claims incremental award on subsequent events (non-binding pool cap)", () => {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
it("qualified referrer claims incremental award on subsequent events (non-binding pool cap)", () => {
it("qualified referrer claims incremental award on subsequent events (uncapped)", () => {


describe("Scenario B — referrer just qualifies, claims all accumulated uncapped award", () => {
it("claims all accumulated uncapped award when qualifying (unlimited pool)", () => {
it("claims all accumulated uncapped award when qualifying (non-binding pool cap)", () => {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
it("claims all accumulated uncapped award when qualifying (non-binding pool cap)", () => {
it("claims all accumulated uncapped award when qualifying (uncapped)", () => {

Copilot AI review requested due to automatic review settings April 14, 2026 13:47
@vercel vercel bot temporarily deployed to Preview – ensnode.io April 14, 2026 13:47 Inactive
@vercel vercel bot temporarily deployed to Preview – ensrainbow.io April 14, 2026 13:47 Inactive
@vercel vercel bot temporarily deployed to Preview – admin.ensnode.io April 14, 2026 13:47 Inactive
Comment thread .changeset/swift-cats-glow.md
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR standardizes referral award-model terminology by renaming the rev-share-limit award model to rev-share-cap across the @namehash/ens-referrals v1 API surface and the ensapi integration, keeping types, discriminants, filenames, and related docs/tests aligned.

Changes:

  • Renames the award model discriminant from "rev-share-limit" to "rev-share-cap" and updates all dependent v1 types/unions/switches.
  • Moves/updates rev-share model implementation modules (rules, leaderboard, metrics, serialization, zod schemas) and removes remaining rev-share-limit modules.
  • Updates ensapi v1 leaderboard builder dispatch + adds a changeset for versioning.

Reviewed changes

Copilot reviewed 29 out of 30 changed files in this pull request and generated no comments.

Show a summary per file
File Description
packages/ens-referrals/src/v1/rules.ts Updates top-level rules union/docs to rev-share-cap.
packages/ens-referrals/src/v1/leaderboard.ts Updates leaderboard union to rev-share-cap.
packages/ens-referrals/src/v1/leaderboard-page.ts Switches leaderboard page builder dispatch to RevShareCap.
packages/ens-referrals/src/v1/index.ts Updates v1 barrel exports to rev-share-cap modules.
packages/ens-referrals/src/v1/edition-summary.ts Switches edition summary builder dispatch to RevShareCap.
packages/ens-referrals/src/v1/edition-metrics.ts Switches edition metrics dispatch/types to RevShareCap.
packages/ens-referrals/src/v1/award-models/shared/rules.ts Renames ReferralProgramAwardModels key/value to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-limit/leaderboard-page.ts Removes old rev-share-limit leaderboard page module.
packages/ens-referrals/src/v1/award-models/rev-share-limit/api/serialize.ts Removes old rev-share-limit serialization module.
packages/ens-referrals/src/v1/award-models/rev-share-cap/status.ts Renames status calculator types/docs to rev-share-cap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/sort-referral-events.ts Adds event sorting helper for deterministic chronological ordering.
packages/ens-referrals/src/v1/award-models/rev-share-cap/rules.ts Renames rev-share rules + builders/validators to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/referral-event.ts Updates model docs to rev-share-cap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/metrics.ts Renames metrics types/functions to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard.ts Renames leaderboard builder/types to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard.test.ts Updates test suite naming/expectations to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/leaderboard-page.ts Adds rev-share-cap leaderboard page type + builder.
packages/ens-referrals/src/v1/award-models/rev-share-cap/edition-summary.ts Renames edition summary types/builders to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/edition-metrics.ts Renames edition metrics types to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/api/zod-schemas.ts Renames zod schemas and discriminants to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/api/serialized-types.ts Renames serialized type interfaces to RevShareCap.
packages/ens-referrals/src/v1/award-models/rev-share-cap/api/serialize.ts Adds rev-share-cap serializers to match renamed types.
packages/ens-referrals/src/v1/award-models/rev-share-cap/aggregations.ts Renames aggregated metrics types/builders to RevShareCap.
packages/ens-referrals/src/v1/api/zod-schemas.ts Wires v1 API parsing to RevShareCap schemas.
packages/ens-referrals/src/v1/api/zod-schemas.test.ts Updates v1 API parsing tests to RevShareCap.
packages/ens-referrals/src/v1/api/serialized-types.ts Updates top-level serialized unions to RevShareCap.
packages/ens-referrals/src/v1/api/serialize.ts Updates top-level serializers dispatch to RevShareCap.
packages/ens-referrals/README.md Updates README usage examples to RevShareCap.
apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/get-referrer-leaderboard-v1.ts Updates ensapi v1 builder dispatch to RevShareCap.
.changeset/swift-cats-glow.md Versions @namehash/ens-referrals (minor) + ensapi (patch) for rename.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@Goader Goader merged commit 319d619 into main Apr 14, 2026
21 of 22 checks passed
@Goader Goader deleted the task/rev-share-cap branch April 14, 2026 13:59
@github-actions github-actions bot mentioned this pull request Apr 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Further refine referral system terminology

3 participants