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:
- Add a field-specific validation rule that rejects an
actionButtons array with more than two elements in canonical offers and explicit listing overrides.
- 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.
- Do not change the JSON/Markdown representation and do not remove link-target validation; cardinality is an additional invariant.
- 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
Proposal type
Modify column, Other
Affected scope (files/folders/chains)
actionButtonsinreferences/offers/*.csv,listings/all-networks/*.csv, andlistings/specific-networks/**/*.csv; the validation schema/checks;Common-Columnsdocumentation.Motivation / problem statement
Common-Columnsalready definesactionButtonsas 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:references/offers/apis.csv:envio-*(3),goldrush-*(3),goldsky-*(3), andrpcfast-*(2);references/offers/mcpservers.csv:debridge-mcp,filecoin-onchain-cloud-mcp, andtatum-blockchain-mcp;rpcfast-one-free-recent-statein Arbitrum andrpcfast-mainnet-free-recent-statein 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
actionButtonsactionButtonsminItems: 0;maxItems: 2; each non-empty item must continue to satisfy the existing Markdown-link rules[]["[Docs](https://example.com/docs)"]["[Website](https://example.com)","[Docs](https://example.com/docs)"]["[Website](https://example.com)","[Docs](https://example.com/docs)","[Pricing](https://example.com/pricing)"]Implementation and migration guidance:
actionButtonsarray with more than two elements in canonical offers and explicit listing overrides.maxItems.Acceptance criteria:
actionButtonsvalue with more than two elements.Common-Columnsremains the canonical definition and explicitly matches the validator.Audit method: every CSV was parsed with PowerShell
Import-Csv; each non-blankactionButtonsvalue was parsed withConvertFrom-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