Proposal type: Modify column; Other (decision on columns reserved for automation)
Affected scope (files/folders/chains): references/offers/sdks.csv (latestKnownVersion, latestKnownReleaseDate, maintainer, license); references/offers/apis.csv (verifiedUptime, verifiedLatency, verifiedBlocksBehindAvg); wiki pages SDKs and APIs
Motivation / problem statement
Seven columns are documented as reserved for the Chain.Love team's automation — the SDKs page says of the four SDK fields "Fields reserved for automation scripts from Chain.Love team - fetching this information from the action buttons link", and the APIs page describes the three verified* columns as kept by the team for provider performance history. Measured on current main, the automation has populated almost none of them:
column real sentinel blank rows
apis verifiedUptime 0 384 NULL 6 390
apis verifiedLatency 0 384 NULL 6 390
apis verifiedBlocksBehindAvg 0 384 NULL 6 390
sdks latestKnownVersion 9 120 TBD 44 173
sdks latestKnownReleaseDate 9 120 TBD 44 173
sdks maintainer 16 113 TBD 44 173
sdks license 23 106 TBD 44 173
The table is the offers master, which is where the reservation is written. The same four columns exist in every network's sdks.csv and carry a further 77 TBD cells at listing level (20 / 20 / 20 / 17), included in the 685 counted in #3557.
So the reservation is doing two things at once: it keeps contributors out of seven columns, and it keeps the columns empty. For 74 of the 173 SDK rows the action-button link is a GitHub repository, where license, the latest release tag and date, and the owning organisation are one API call each — the fields could be filled today, by a script or by hand, and are not.
This is the decision that #2683 (NULL/null) and #3557 (TBD) both stop short of: those normalize the sentinel spelling; this one asks what the columns are for.
What the site publishes
@CodeRabbit-byte measured this in the thread below and I reproduced it at e83cde0 with the json-tools scripts at 5f89146. The four SDK columns are not internal: meta/columns.json defines them as user-facing table columns with labels and filters (Latest Version, Release Date and Maintainer as searchableMultiSelect, License as select). After csv_to_json.py fans the offer rows out across the networks, this is what those facets contain:
published sdks listing rows: 4381, on all 155 networks
column TBD real null TBD share
license 4106 275 0 93.7%
latestKnownVersion 4166 215 0 95.1%
latestKnownReleaseDate 4166 215 0 95.1%
maintainer 3981 400 0 90.9%
In the License filter, TBD outnumbers Apache-2.0 4106 to 244 and MIT 4106 to 26.
The zero in the null column is not the data; it is the converter. tools/csv_to_json.py on json-tools carries SDK_TBD_FIELDS = (latestKnownVersion, latestKnownReleaseDate, maintainer, license) and ensure_sdks_tbd_fields(), called for every network, which writes the string TBD into any of the four that is missing, None or blank (introduced in 74d50e1, #563, February). Traced per published row: 98 TBD per column come from cells that are blank in the CSVs, 17-20 from listing rows, 2 from listing-only rows with no master entry, and the rest from the TBD in the offers master. So the site shows TBD for these four fields whenever a value is absent, however the CSV spells the absence. Two consequences:
The reservation is therefore not holding a field in reserve: it publishes a placeholder as a filter option on 155 networks, the tooling regenerates that placeholder from empty cells, and the wiki forbids contributors from touching the columns. That is the cost of leaving this undecided.
To reproduce: copy tools/ and meta/ from the json-tools branch onto a main checkout, run python tools/csv_to_json.py, and count the values of the four keys under sdks in json/*.json.
Detailed proposal
- Change type: modify column (policy on who fills them); no column added or removed unless option 3 is chosen
One of three, in order of preference:
- Run the automation the reservation promises, on a schedule, and keep the reservation. If the script exists, the 7 columns become the most reliable data in the file; if it does not, the reservation is a note about a plan.
- Drop the reservation on the four SDK fields and let contributors fill them from the action-button link, with the format the existing rows already use (
Apache-2.0, 2.1.0, 2026-02-24, Ava Labs). The three apis verified* columns should stay reserved: they are measurements, not lookups.
- Drop the columns that will not be populated, so the schema stops advertising data it does not hold.
Whichever is chosen, the 120 TBD and 384 NULL cells are then covered by #3557 and #2683 respectively, and the wiki sentence on the SDKs page is updated to match.
Reproduction
import csv, io
for f, cols in (('sdks', ['latestKnownVersion', 'latestKnownReleaseDate', 'maintainer', 'license']),
('apis', ['verifiedUptime', 'verifiedLatency', 'verifiedBlocksBehindAvg'])):
rows = list(csv.reader(io.open(f'references/offers/{f}.csv', encoding='utf-8-sig')))
h = [c.strip() for c in rows[0]]
for c in cols:
v = [r[h.index(c)].strip() for r in rows[1:]]
print(f, c, 'real', sum(1 for x in v if x and x not in ('TBD', 'NULL', 'null')),
'sentinel', sum(1 for x in v if x in ('TBD', 'NULL', 'null')), 'blank', v.count(''))
Rewards address: 0x06f44f4839fd5df4f4670036d028b29dec939363
Proposal type: Modify column; Other (decision on columns reserved for automation)
Affected scope (files/folders/chains):
references/offers/sdks.csv(latestKnownVersion,latestKnownReleaseDate,maintainer,license);references/offers/apis.csv(verifiedUptime,verifiedLatency,verifiedBlocksBehindAvg); wiki pagesSDKsandAPIsMotivation / problem statement
Seven columns are documented as reserved for the Chain.Love team's automation — the
SDKspage says of the four SDK fields "Fields reserved for automation scripts from Chain.Love team - fetching this information from the action buttons link", and theAPIspage describes the threeverified*columns as kept by the team for provider performance history. Measured on currentmain, the automation has populated almost none of them:The table is the offers master, which is where the reservation is written. The same four columns exist in every network's
sdks.csvand carry a further 77TBDcells at listing level (20 / 20 / 20 / 17), included in the 685 counted in #3557.So the reservation is doing two things at once: it keeps contributors out of seven columns, and it keeps the columns empty. For 74 of the 173 SDK rows the action-button link is a GitHub repository, where
license, the latest release tag and date, and the owning organisation are one API call each — the fields could be filled today, by a script or by hand, and are not.This is the decision that #2683 (
NULL/null) and #3557 (TBD) both stop short of: those normalize the sentinel spelling; this one asks what the columns are for.What the site publishes
@CodeRabbit-byte measured this in the thread below and I reproduced it at
e83cde0with thejson-toolsscripts at5f89146. The four SDK columns are not internal:meta/columns.jsondefines them as user-facing table columns with labels and filters (Latest Version,Release DateandMaintainerassearchableMultiSelect,Licenseasselect). Aftercsv_to_json.pyfans the offer rows out across the networks, this is what those facets contain:In the
Licensefilter,TBDoutnumbersApache-2.04106 to 244 andMIT4106 to 26.The zero in the
nullcolumn is not the data; it is the converter.tools/csv_to_json.pyonjson-toolscarriesSDK_TBD_FIELDS = (latestKnownVersion, latestKnownReleaseDate, maintainer, license)andensure_sdks_tbd_fields(), called for every network, which writes the stringTBDinto any of the four that is missing,Noneor blank (introduced in74d50e1, #563, February). Traced per published row: 98TBDper column come from cells that are blank in the CSVs, 17-20 from listing rows, 2 from listing-only rows with no master entry, and the rest from theTBDin the offers master. So the site showsTBDfor these four fields whenever a value is absent, however the CSV spells the absence. Two consequences:TBDcells that [DBIP]TBDacts as a missing-value sentinel in 685 cells across five categories; the Style Guide reserves it for internal use and three wiki examples teach it anyway #3557 holds for this decision would not change one published value: the converter putsTBDback.null(or omit the key) for an absent value, as every other column does, so the facets list real values only. Option 3: delete the four keys fromSDK_TBD_FIELDStogether with the columns.The reservation is therefore not holding a field in reserve: it publishes a placeholder as a filter option on 155 networks, the tooling regenerates that placeholder from empty cells, and the wiki forbids contributors from touching the columns. That is the cost of leaving this undecided.
To reproduce: copy
tools/andmeta/from thejson-toolsbranch onto amaincheckout, runpython tools/csv_to_json.py, and count the values of the four keys undersdksinjson/*.json.Detailed proposal
One of three, in order of preference:
Apache-2.0,2.1.0,2026-02-24,Ava Labs). The threeapisverified*columns should stay reserved: they are measurements, not lookups.Whichever is chosen, the 120
TBDand 384NULLcells are then covered by #3557 and #2683 respectively, and the wiki sentence on theSDKspage is updated to match.Reproduction
Rewards address: 0x06f44f4839fd5df4f4670036d028b29dec939363