Skip to content

[DBIP] Enforce the documented two-button maximum for actionButtons #3495

Description

@reprocraftlatam

Proposal type

Modify column, Other

Affected scope (files/folders/chains)

actionButtons in references/offers/*.csv, listings/all-networks/*.csv, and listings/specific-networks/**/*.csv; the validation schema/checks; Common-Columns documentation.

Motivation / problem statement

Common-Columns already defines actionButtons as a JSON list and says “Max 2 buttons.” The repository does not currently enforce that invariant.

At repository commit 1a386f86a416ff6a4678df09dd1c11805eae4ce0, a clean parse of every CSV found 16 rows with three buttons. All 16 values are valid JSON, so ordinary JSON validation does not catch the contradiction:

  • 11 canonical API offers in references/offers/apis.csv: envio-* (3), goldrush-* (3), goldsky-* (3), and rpcfast-* (2);
  • 3 canonical MCP server offers in references/offers/mcpservers.csv: debridge-mcp, filecoin-onchain-cloud-mcp, and tatum-blockchain-mcp;
  • 2 network-specific API listings: rpcfast-one-free-recent-state in Arbitrum and rpcfast-mainnet-free-recent-state in Polygon.

The current values use combinations such as Website + Docs + Pricing, or Website + Docs + NPM. A consumer that reserves space for the documented maximum must either truncate a valid stored value or render an unplanned third action. Contributors also receive conflicting guidance: the wiki says two, while accepted rows demonstrate three.

This is distinct from #1954, which concerns whether link targets are resolvable, and #11, which introduced the JSON-array-of-Markdown-links representation. Neither establishes or validates array cardinality.

Detailed proposal

  • Category/table: all offer and listing tables that contain actionButtons
  • Column name: actionButtons
  • Change type: modify (formalize and validate the existing documented constraint)
  • Updated definition: an optional JSON array containing at most two Markdown links
  • Value type and allowed values: JSON array of strings; minItems: 0; maxItems: 2; each non-empty item must continue to satisfy the existing Markdown-link rules
  • Examples:
    • valid: []
    • valid: ["[Docs](https://example.com/docs)"]
    • valid: ["[Website](https://example.com)","[Docs](https://example.com/docs)"]
    • invalid: ["[Website](https://example.com)","[Docs](https://example.com/docs)","[Pricing](https://example.com/pricing)"]

Implementation and migration guidance:

  1. Add a field-specific validation rule that rejects an actionButtons array with more than two elements in canonical offers and explicit listing overrides.
  2. Audit the 16 current rows and retain the two links most useful for the specific offer. This should be a factual, row-by-row choice rather than a bulk “drop the last item” rewrite. For example, an Enterprise plan may need Docs + Contact, while a self-hosted MCP server may need Docs + GitHub.
  3. Do not change the JSON/Markdown representation and do not remove link-target validation; cardinality is an additional invariant.
  4. Add a regression fixture demonstrating that three valid Markdown links still fail because of maxItems.

Acceptance criteria:

  • CI rejects every explicit actionButtons value with more than two elements.
  • CI still accepts blank values and arrays of zero, one, or two valid links.
  • The 16 current violations are resolved using relevant live links, without mechanically deleting a required Contact/Docs action.
  • A repository-wide scan returns zero arrays above the documented maximum.
  • Common-Columns remains the canonical definition and explicitly matches the validator.

Audit method: every CSV was parsed with PowerShell Import-Csv; each non-blank actionButtons value was parsed with ConvertFrom-Json, and array lengths were counted. The scan was repeated after fast-forwarding to the commit above. This proposal was prepared with automated assistance; the evidence is repository-local and reproducible, and it makes no external provider claims.

Contact: GitHub @reprocraftlatam

Contact (optional)

https://github.com/reprocraftlatam

Rewards address (optional)

0x935F9988dD6039548b90841B7776c9F8C4F7757c

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

    DBIPFor database improvement proposals

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions