Skip to content

[DBIP] Validate canonical column sets and ordering across category CSVs #3597

Description

@jairozapat

Proposal type

Other

Affected scope (files/folders/chains)

references/offers/.csv; listings/all-networks/.csv; listings/specific-networks//.csv; validation workflow

Motivation / problem statement

The same category currently has multiple incompatible header orders, and some listing files omit or reposition fields relative to their canonical offer schema. A local census of the current main branch found variants in six categories: analytics (2), apis (3), bridges (6), explorers (3), faucets (4), and oracles (3). This makes spreadsheet edits error-prone, allows positional CSV tooling to shift values silently, and repeatedly requires one-off cleanup DBIPs. Contributors and downstream consumers benefit from one machine-enforced invariant.

Detailed proposal

Proposal type: Other (schema validation)

Add a validation rule that derives the canonical header for each category from references/offers/<category>.csv, then requires every listing header to equal that ordered column set plus the listing-only chain column in one documented position. Allow an explicit per-category exception file only where a field is intentionally listing-only.

Implementation outline:

  • Parse headers with a CSV parser, not string splitting.
  • Compare field names, duplicates, omissions, additions, and order.
  • Report the exact file and first differing index.
  • Normalize existing drift category by category in small PRs before making the check blocking.
  • Add fixtures for a missing field, an extra field, and an order-only mismatch.

Measured evidence from current main: 28 listing files use minority header variants across bridges (11), explorers (6), faucets (8), oracles (3), plus one order-only API outlier. The rule prevents recurrence rather than opening a separate DBIP for every category.

AI disclosure: AI assisted with the repository-wide census and drafting; all counts were computed directly from the downloaded current main branch and checked against the project style guide.

Contact (optional)

No response

Rewards address (optional)

0xc2633a3baf513319b2bc9cec7d5ac65a8103fbbe

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