Skip to content

feat: integrate public labels - #779

Draft
Seranged wants to merge 13 commits into
developmentfrom
feat/public-labels-v3-integration
Draft

Seranged wants to merge 13 commits into
developmentfrom
feat/public-labels-v3-integration

Conversation

@Seranged

@Seranged Seranged commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Use V3-only hosted labels or an explicit operator-owned static source through one shared server snapshot. Lite consumes published metadata and live visibility/geo policies, retaining last-known-good rules when refreshes fail.

Requires the paired SDK implementation from feat/public-labels-v3-sdk. The committed dependency remains published SDK 3.1.0; Railway installs the paired SDK branch for this preview. Publish the SDK first, update Lite's dependency, and rerun ordinary CI before release.

Breaking changes and migration actions

Change Impact / required action
Hosted V3 labels are the default. LABELS_SOURCE defaults to v3; there is no automatic GitHub labels fallback. Deployments must have a working V3 labels source or explicitly select static mode. ONCHAIN_SDK_CHAINS changes quantitative reads but does not bypass the hosted labels adapter's V3 inventory dependency.
Legacy labels env variables are removed. NUXT_PUBLIC_CONFIG_LABELS_REPO, NUXT_PUBLIC_CONFIG_LABELS_REPO_BRANCH and NUXT_PUBLIC_CONFIG_LABELS_BASE_URL no longer select the source. For file-backed deployments, set LABELS_SOURCE=static and STATIC_LABELS_BASE_URL to the full HTTP(S) directory URL, including the chosen Git branch path if applicable. There is no implicit repository/branch default in static mode.
Raw internal labels routes are removed. /api/internal/labels/{file} and /api/internal/labels/{chainId}/{file} are replaced by /api/internal/public-labels?chainId=…. Internal consumers must consume the aggregate bundle; it is not the old individual-file response shape. Public /api/public/is-known and /api/public/metadata remain available, but their results use the selected source and its verification rules.
Hosted membership and discovery follow V3 verdicts. A legacy file entry alone no longer grants hosted membership. Hidden/pending or missing verdicts can exclude previously listed vaults. Standalone Earn verification requires a declared V3 manager and matching owner. Existing governor/router/owner checks remain during comparison; visible/warning membership is not by itself a full verified badge. Known V3 data-parity differences are a separate backend/rollout concern, not all new client bugs.
Hosted geo semantics use live V3 policies. Matching policies accumulate across scopes using countriesResolved. Hosted mode does not use legacy override-replacement semantics or local country-alias expansion. Backend-authored restrictions, including broader restrictions than the files, apply. Static mode retains authored legacy semantics. Unavailable policy blocks new exposure; explicitly supported, acknowledged exit-only flows remain separately handled.
Hosted remote label images must use https://token-images.euler.finance. Other hosted label-image origins are rejected. Static mode additionally accepts images on its configured source origin, including authored filenames resolved beneath /logo/.
SDK 3.1.0 does not expose the APIs used here. Standard installation is not release-ready until the paired SDK is published and Lite's package/lockfile are updated. The branch-installed Railway preview does not remove this release requirement.

Deployment configuration

Hosted defaults:

LABELS_SOURCE=v3
LABELS_V3_SET=public
LABELS_V3_VERSION=latest

LABELS_V3_SET selects an existing published metadata dataset. LABELS_V3_VERSION accepts latest or a published key, including timestamp keys and named keys such as test-2026-06-30. latest resolves within the selected set; unknown sets/publications fail rather than falling back to public. Draft/current selectors are not supported. The explicit internal endpoint version query overrides the deployment version default for diagnostics; the set is server-controlled. Restart after env changes.

These selectors do not create an isolated branch of the whole system: geo policies, visibility, governance addresses and live platform fields remain live within the configured V3 backend. Metadata caches separate upstream, set, chain and version.

File-backed forks:

LABELS_SOURCE=static
STATIC_LABELS_BASE_URL=https://labels.example.com

Static mode ignores the V3 label selectors and retains the five-file authoring format plus global asset rules. Missing files are supported: HTTP 403/404 yields {} for products/entities and [] for points/Earn/assets. Missing chain rules do not remove global rules, or vice versa. Other HTTP errors, network failures and malformed data retain the complete prior snapshot or fail on a cold start. Unlike the original per-file cache, static mode applies a 403/404 empty result immediately rather than serving a cached file for a grace period. See the static authoring guide.

Changes

  • Share SDK-normalized labels across the browser, vault snapshots and public metadata/is-known APIs; render managing entities, display-only co-brands, notices, campaigns, tags and deprecation.
  • Refresh open tabs and invalidate membership as live verdicts change.
  • Validate and checkpoint complete geo collections with timestamps. Failed geo refreshes retain the last valid collection without an age cutoff; successful empty collections clear rules. Metadata has a separate bounded cache. Cold starts without usable geo do not publish a hosted snapshot.
  • Preserve bounded pattern matching, asset-only wrap/same-asset exemptions and existing sanctions checks.
  • Allow acknowledged simple exits during labels outages in both forms and final reviewed policy; borrowing/swaps and mixed acquisition batches still require usable labels.
  • Keep static authoring independent of V3 visibility, with complete-snapshot validation and recovery.

Validation

  • Lite: 230 test files / 2,246 tests pass, including production bundle checks. Build and typecheck pass against the paired SDK; lint has 0 errors and 6 existing warnings.
  • Paired SDK: 641 tests pass; build/typecheck/lint pass with existing warnings.
  • All 15 legacy chain directories load unchanged. Built static-mode collections match live production on Ethereum and Unichain after excluding production's extra country/VPN transport fields.
  • Built-server env tests select a historical public publication without a query override and resolve test-instance / latest to test-2026-06-30, retaining 255 live geo policies.
  • Tests cover metadata set/version isolation, unavailable selections, static-mode independence, cumulative geo scopes, product reassignment, chain isolation, country expansion, acquisition/exit guards, missing files, restart recovery and malformed/partial responses.
  • Railway reports a successful deployment for the current head. Standard GitHub typecheck/test remain blocked by the committed published SDK lacking the paired APIs; lint passes.

Remaining rollout work

  • Resolve the hosted labels strategy for enabled on-chain fallback chains whose V3 inventories return CHAIN_NOT_SUPPORTED (146, 239, 60808, 80094). Also resolve the three Securitize labels without inventory visibility records before sign-off.
  • Run the temporary migration comparison outside the production repositories, accept or resolve differences, and agree the verification contract before retiring hosted governance checks. The source switch is deployment-wide; per-chain/public-API-last cutover is not implemented.
  • Fresh containers without preserved disk state fetch rules from the upstream, matching the original deployment dependency. This is accepted for now. A persistent GEO_POLICY_CACHE_DIR, dedicated geo alerts and a canary are optional deferred hardening, not required migration checkoffs.
  • Publish SDK, update Lite's dependency and complete cutover validation. SDK default file-adapter consumers and other repository users must migrate separately before archiving the labels repo.

@railway-app

railway-app Bot commented Aug 5, 2026

Copy link
Copy Markdown

🚅 Deployed to the euler-lite-pr-779 environment in euler-lite(dev,PR previews)

Service Status Web Updated
dev-build ✅ Success (View Logs) Web Sep 14, 2026 at 2:08 pm UTC

@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 August 5, 2026 08:24 Destroyed
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

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

Load versioned Public Labels V3 content while preserving compatibility visibility rules. Keep co-brand rendering and campaign metadata independent of manager-profile functionality.
@Seranged
Seranged force-pushed the feat/public-labels-v3-integration branch from 63297af to d1702c5 Compare August 5, 2026 08:35
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 August 5, 2026 08:35 Destroyed
@Seranged
Seranged changed the base branch from feature/lite-256-dedicated-profile-page-for-curators-risk-managers to development August 5, 2026 08:35
Route all display labels through one version-pinned V3 aggregate and remove the legacy browser and SDK label endpoints. Keep unresolved effective visibility policy server-side with bounded caching and deployment-compatible configuration.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 August 5, 2026 09:46 Destroyed
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 August 5, 2026 10:30 Destroyed
Use the SDK feature branch for Public Labels transport, normalization, types, and branding helpers while retaining Lite's temporary effective-policy compatibility layer. Validate the paired branch in CI and Railway without changing the committed SDK version.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 August 5, 2026 11:06 Destroyed
Remove the temporary SDK branch environment and install steps from GitHub CI. Railway remains responsible for injecting the preview branch during Docker builds.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 August 5, 2026 11:32 Destroyed
Merge the current Lite base while preserving public-labels ingestion, label retry behavior, and current oracle and cache configuration.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 September 14, 2026 10:39 Destroyed
Consume the updated SDK contract and prevent compatibility policy from reopening hidden or pending vaults. Refresh fixtures and document the current migration boundary.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 September 14, 2026 10:45 Destroyed
Refresh aged labels on a timer and tab return, expire verification after prolonged refresh failures, and prevent cached registry flags from overriding hosted revocations.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 September 14, 2026 11:09 Destroyed
Evaluate current V3 scopes and resolved countries, persist last-known-good policies, and deny acquisition while compliance data is unavailable.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 September 14, 2026 11:25 Destroyed
Remove hosted GitHub compatibility reads, retain atomic static authoring for forks, and close owner-verification, image-host and outage-exit gaps.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 September 14, 2026 11:41 Destroyed
Preserve legacy 403/404 empty collections while retaining snapshots on transient failures. Cover missing asset scopes and document static source behavior.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 September 14, 2026 12:53 Destroyed
Apply deployment label-set and version defaults to shared server reads and isolate metadata caches by source and selection.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-779 September 14, 2026 13:10 Destroyed
Verify SDK fallback verdicts preserve membership and listing decisions through the shared server source, with stale snapshot recovery and cold-start failure coverage.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant