Skip to content

fix(data): replace non-ASCII lookalike characters in reference tables - #3245

Open
CodeRabbit-byte wants to merge 1 commit into
Chain-Love:mainfrom
CodeRabbit-byte:fix-nonascii-lookalikes-references
Open

fix(data): replace non-ASCII lookalike characters in reference tables#3245
CodeRabbit-byte wants to merge 1 commit into
Chain-Love:mainfrom
CodeRabbit-byte:fix-nonascii-lookalikes-references

Conversation

@CodeRabbit-byte

Copy link
Copy Markdown
Contributor

Replaces 153 occurrences of two non-ASCII characters that have no legitimate use in this data, across 79 lines in 7 reference tables.

character occurrences replaced with
U+2011 NON-BREAKING HYPHEN ~105 - (ASCII hyphen)
U+00A0 NO-BREAK SPACE ~63 (ASCII space)
file lines characters
references/offers/bridges.csv 37 83
references/offers/services.csv 24 39
references/offers/security.csv 8 14
references/offers/oracles.csv 5 7
references/offers/platforms.csv 3 7
references/offers/analytics.csv 1 1
references/providers/providers.csv 1 2

This is not a cosmetic change. The clearest case: 28 assetTypes cells in bridges.csv spell the token standard with a non-breaking hyphen — ERC‑20 rather than ERC-20. Every other row in the database uses the ASCII form. A consumer filtering assetTypes for "ERC-20" matches the ASCII rows and silently skips these 28, with no error and nothing in a visual diff to show why: the two characters are visually identical in almost every font.

The same applies to values like Cross‑chain Messaging in technology, Intent‑based in additionalFeatures, and On‑chain Usage Metrics in dataSources. Each is one grep away from being invisible.

U+00A0 is the same class of problem in whitespace: values such as ["NFT Sales Data␣API"] and 0.5 ETH␣ carry a no-break space where a normal space or nothing was meant. It survives .strip() in several languages' default behaviour, so a trailing one quietly defeats trimming and numeric parsing.

Deliberately left alone. Em dashes (U+2014, 12 occurrences) and en dashes (U+2013, 3) are untouched. They occur in prose description fields where they are plausibly intentional typography, and converting them would be an editorial change rather than a correction. Happy to normalise them too if you would rather the data were pure ASCII throughout — that is a house-style decision, not a defect.

Scope and safety. references/ only, 79 lines — the 11 affected lines under listings/specific-networks/ follow in a separate PR so both stay inside the 100-line limit. A scripted diff against upstream/main confirms every changed cell differs from its original solely by these two substitutions: no column width changes, no line-count change, and no other edit. Where removing a no-break space left a doubled or trailing space inside a value, that value is also trimmed. Zero occurrences of either character remain in these files.

validate_csv.py from the json-tools branch: All checks passed.

If it is useful, I can also contribute a validator rule rejecting U+2011 and U+00A0 in future submissions, so this does not accumulate again — it is the kind of thing that is invisible in review and easy to paste in from a vendor page.

Reward address: 0x1589423BeCC3F87EA9406155EaF4D5E04C34Dcf1 (USDC/USDT, Ethereum mainnet)

@github-actions

Copy link
Copy Markdown

Summary

Status Count
🔍 Total 111
🔗 Unique 111
✅ Successful 109
⏳ Timeouts 1
🔀 Redirected 13
👻 Excluded 0
❓ Unknown 0
🚫 Errors 1
⛔ Unsupported 0

Errors per input

Errors in ./references/offers/bridges.csv

Timeouts per input

Timeouts in ./references/offers/bridges.csv

Full Github Actions output

@USS-Supervisor USS-Supervisor left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: REQUEST_CHANGES
Risk: MEDIUM
Summary: The Unicode-normalization part of this PR looks mechanically correct: I parsed all seven changed CSVs, row counts/headers/widths stayed stable, git diff --check is clean, and the touched cells differ only by the stated U+2011 / U+00A0 substitutions plus whitespace cleanup. However, the current review-cycle link-check report found a blocking link issue in a row this PR modifies.

Findings:

  • MEDIUM references/offers/bridges.csv, routerprotocol row, actionButtons: the current-cycle link-check run reported https://routernitro.com/swap as an error, and an independent check also fails DNS resolution for routernitro.com. Because this PR touches the routerprotocol reference row, please replace that Bridge URL with a working official Router Protocol/Nitro URL or remove it if no working bridge URL is currently available. I also saw the run time out once on https://celerscan.com/, but that URL returned HTTP 200 in a follow-up check, so I am not treating it as blocking.

Confidence: HIGH

CodeRabbit-byte pushed a commit to CodeRabbit-byte/chain-love that referenced this pull request Aug 27, 2026
Addresses review on Chain-Love#3245. routernitro.com no longer resolves, so the
Bridge link on the routerprotocol row was dead:

  https://routernitro.com/swap -> https://app.routerprotocol.com/

That is the URL behind every 'Launch App' button on routerprotocol.com.
The /swap and /bridge paths under it both return 404, so the bare app URL
is the correct target. The row's Docs link still returns 200 and is
unchanged.

validate_csv.py: All checks passed.
@CodeRabbit-byte

Copy link
Copy Markdown
Contributor Author

Fixed. The routerprotocol Bridge link now points at https://app.routerprotocol.com/.

Confirming your finding independently: routernitro.com does not resolve at all — not a 404 but a DNS failure, and the same for www.routernitro.com and app.routernitro.com. The domain is gone rather than the path having moved.

For the replacement I used the URL behind every Launch App button on routerprotocol.com itself rather than guessing at a path. Worth noting that https://app.routerprotocol.com/swap and /bridge both return 404, so the bare app URL is the correct target — the app resolves the bridge and swap views client-side. The row's Docs link at docs.routerprotocol.com still returns 200 and is untouched.

I also grepped the whole repository: no other row references routernitro, so this was the only occurrence.

On celerscan.com — agreed, and thank you for re-checking rather than blocking on it. It returned HTTP 200 for me too on a follow-up probe, so it looks like a transient timeout in the run rather than a dead link.

One note on scope, since this PR was otherwise a pure character substitution: this is the only link edit in it, made because you asked and because the row was one this PR already touches. Everything else remains the U+2011 / U+00A0 normalisation described in the description.

Reward address: 0x1589423BeCC3F87EA9406155EaF4D5E04C34Dcf1 (USDC/USDT, Ethereum mainnet)

@CodeRabbit-byte
CodeRabbit-byte force-pushed the fix-nonascii-lookalikes-references branch from 0973857 to c218914 Compare August 29, 2026 13:24
@CodeRabbit-byte

Copy link
Copy Markdown
Contributor Author

The requested change was pushed on 2026-08-29 and this PR has been waiting on a re-review since.

To restate what was asked and what was done: the finding was that references/offers/bridges.csv, routerprotocol row, linked https://routernitro.com/swap, which the link-check reported as an error and which also failed DNS resolution independently.

That Bridge URL is now https://app.routerprotocol.com/, Router Protocol's own application host. Re-checking both just now:

  • https://routernitro.com/ — no DNS resolution, curl exit 6. The original finding still holds.
  • https://app.routerprotocol.com/ — HTTP 200.
  • https://docs.routerprotocol.com/ — HTTP 200, unchanged and untouched.

The branch was also rebuilt on current main at that time, because it had gone genuinely conflicting on bridges.csv and security.csv while GitHub still displayed it as mergeable. It is now a single commit and shows as mergeable, with the required validation passing.

Nothing else changed: the rest of the PR is still only the stated U+2011 to - and U+00A0 to space substitutions, with row counts, headers and column widths stable.

Ready for re-review whenever the cycle allows.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown

Summary

Status Count
🔍 Total 111
🔗 Unique 111
✅ Successful 111
⏳ Timeouts 0
🔀 Redirected 14
👻 Excluded 0
❓ Unknown 0
🚫 Errors 0
⛔ Unsupported 0

Full Github Actions output

USS-Supervisor
USS-Supervisor previously approved these changes Sep 1, 2026

@USS-Supervisor USS-Supervisor left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: APPROVE
Risk: LOW
Summary: The updated reference-table normalization now clears the previous broken Router Protocol link finding. All seven touched reference CSVs parse with stable row widths and no duplicate slugs, required validation is passing, and the current-cycle link-check run 33490784047 completed successfully with 111/111 links and 0 errors, timeouts, or unsupported URLs.
Findings: None.
Confidence: HIGH

Rebuilt on current main. The fix is recomputed from the tree rather than
replayed, so it changes only characters that are still present: 121 cells
across 79 rows, U+2011 to '-' and U+00A0 to a space, with cell trimming.

The routerprotocol Bridge URL is repointed from routernitro.com, which
still fails DNS resolution, to app.routerprotocol.com, which returns 200.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants