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:
- Parse the JSON array.
- Parse each Markdown-link item into label + destination.
- Normalize trivial URL spelling differences for comparison (at minimum trailing slash; optionally lowercase scheme/host).
- Reject duplicate normalized destination URLs inside the same cell.
- Error output should name the file, row/slug, repeated URL, and the colliding labels.
- 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.
- 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.
Proposal type
Other — data validation / normalization
Affected scope
All CSV categories that expose an
actionButtonscolumn, includingreferences/offers/*.csvandlistings/**/**/*.csv; CSV validation.Motivation / problem statement
At current
maincommita51107a7,actionButtonsis 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
actionButtonscells found 38 rows with duplicate normalized destination URLs:references/offers/listings/Examples:
references/offers/mcpservers.csv—base-docs-mcp: Website and Docs both point tohttps://docs.base.org/get-started/docs-mcpreferences/offers/mcpservers.csv—circle-codegen-mcp: Website and Docs both point tohttps://developers.circle.com/ai/mcpreferences/offers/bridges.csv—universalx: Site and Docs both point tohttps://universalx.applistings/specific-networks/stellar/explorers.csv—steexp-mainnet: Explore and Docs both point tohttps://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, andactionButtons validator; I did not find an equivalent proposal.Detailed proposal
Add a validator rule for
actionButtons:mailto:links remain valid; this proposal is only about duplicate destinations within one cell.Suggested error:
Why this is useful
This makes
actionButtonsmean 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:The scan parsed CSV with Python's
csv.DictReader, parsedactionButtonsas 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.