Skip to content

[DBIP] Reject duplicate actionButtons destinations within the same cell #3969

Description

@naief9961-tech

Proposal type

Other — data validation / normalization

Affected scope

All CSV categories that expose an actionButtons column, including references/offers/*.csv and listings/**/**/*.csv; CSV validation.

Motivation / problem statement

At current main commit a51107a7, actionButtons is stored as a JSON array of Markdown links, but there is no rule preventing two buttons in the same cell from pointing to the exact same destination.

A repository-wide scan of parseable actionButtons cells found 38 rows with duplicate normalized destination URLs:

  • 7 canonical offer rows under references/offers/
  • 31 listing rows under listings/

Examples:

  • references/offers/mcpservers.csv — base-docs-mcp: Website and Docs both point to https://docs.base.org/get-started/docs-mcp
  • references/offers/mcpservers.csv — circle-codegen-mcp: Website and Docs both point to https://developers.circle.com/ai/mcp
  • references/offers/bridges.csv — universalx: Site and Docs both point to https://universalx.app
  • listings/specific-networks/stellar/explorers.csv — steexp-mainnet: Explore and Docs both point to https://steexp.com/

In a rendered UI this produces multiple buttons that are semantically different but operationally identical. It can also imply that a dedicated docs endpoint exists when only a general product/network page is known.

I searched open issues for actionButtons duplicate URL, duplicate action button URL, actionButtons same URL, and actionButtons validator; I did not find an equivalent proposal.

Detailed proposal

Add a validator rule for actionButtons:

  1. Parse the JSON array.
  2. Parse each Markdown-link item into label + destination.
  3. Normalize trivial URL spelling differences for comparison (at minimum trailing slash; optionally lowercase scheme/host).
  4. Reject duplicate normalized destination URLs inside the same cell.
  5. Error output should name the file, row/slug, repeated URL, and the colliding labels.
  6. Do not guess a replacement URL. The contributor must either replace one button with a verified distinct official destination, or remove the redundant button when no distinct destination exists.
  7. Relative internal Chain.Love actions and mailto: links remain valid; this proposal is only about duplicate destinations within one cell.

Suggested error:

Duplicate actionButtons destination in references/offers/mcpservers.csv (base-docs-mcp):
https://docs.base.org/get-started/docs-mcp is used by both "Website" and "Docs".

Why this is useful

This makes actionButtons mean distinct user actions rather than distinct labels over the same URL, prevents redundant UI controls, and stops the same data-quality issue from spreading when contributors copy neighboring rows.

No bulk migration is required as part of the DBIP itself. Existing rows can be corrected in bounded follow-up PRs after maintainers decide whether each repeated destination is redundant or whether a better official docs/product URL exists.

Validation evidence

Repository-wide scan at a51107a7:

  • duplicate-URL rows: 38
  • canonical offers: 7
  • listings: 31

The scan parsed CSV with Python's csv.DictReader, parsed actionButtons as JSON, parsed each Markdown link, stripped trailing slashes for comparison, and flagged only cells where two entries reduced to the same destination.

AI assistance disclosure

The repository-wide census, duplicate search, and drafting were performed with AI assistance. The counts were computed directly from the current repository checkout. No payout is assumed unless the DBIP is approved through the official Chain.Love compensation process.

Rewards address

Will provide an Ethereum-mainnet ERC-20 USDC/USDT address upon approval if required.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions