Skip to content

fix(docs): stop the node validator eating underscores in identifiers - #1973

Merged
kgarg2468 merged 1 commit into
fix/docsfrom
fix/validator-underscore-identifiers
Aug 15, 2026
Merged

fix(docs): stop the node validator eating underscores in identifiers#1973
kgarg2468 merged 1 commit into
fix/docsfrom
fix/validator-underscore-identifiers

Conversation

@kgarg2468

@kgarg2468 kgarg2468 commented Aug 15, 2026

Copy link
Copy Markdown
Collaborator

One-function fix, kept separate from the batch PRs so it can be reviewed as code.

The bug

table_col stripped [*_`] from every table cell to remove markdown decoration before comparing names against services*.json.

Underscores are markdown emphasis — but they are also legal characters in the identifiers that function exists to compare. So the strip silently corrupted them. A README documenting lane `_source` had it reduced to source, which then failed to match the lane that declared it.

How it surfaced

tool_pipe failed with:

FAIL: Lanes rows match declared lanes — missing lane-in: ['_source']

Its README lists _source correctly. The README was right; the validator was wrong.

Why it matters beyond one node

Thirteen nodes carry an underscore in a lane, connection, or profile name. The LLM family is worst affected, and it is the largest batch still ahead:

node names
llm_gemini gemini-3_1-pro-preview, gemini-3_1-flash-image-preview
llm_ollama llama3_3, llama3_1-8b, llama3_1-70b
llm_bedrock ai21_jamba-1_5-large, amazon_titan-text-express
llm_vision_ollama llama3_2-vision-11b, qwen2_5vl-3b
anomaly_detector z_score, rolling_avg
core, telegram, tool_pipe _source

Left unfixed this would have produced a wave of false failures right as the check became blocking.

Profiles partly masked it: their comparison falls back to fuzzy containment across two columns, so a corrupted name often still matched something. Lanes and connections compare strictly, so they failed outright — which is why this showed up on a lane first.

The fix

Emphasis is only stripped when a pair of underscores wraps the entire cell, which is the only case where an underscore is decoration rather than part of a name. Backticks and asterisks are still removed unconditionally.

Verification

input expected result
`_source` _source pass
*`z_score`* z_score pass
`gemini-2_5-flash` gemini-2_5-flash pass
`streamable_http` streamable_http pass
Claude Sonnet 4.6 _(default)_ Claude Sonnet 4.6 pass
**Weaviate cloud** *(default)* Weaviate cloud pass
_emphasised_ emphasised pass

Both *(default)* and _(default)_ markers are already in use in migrated READMEs; both still parse. Corpus pass count unchanged, and tool_pipe goes from FAIL to PASS with no edit to its README.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Improved Markdown table formatting validation.
    • Preserved underscores in identifiers and names, including _source, gemini-2_5-flash, and streamable_http.
    • Continued normalizing unnecessary cell formatting without altering valid identifier text.

`table_col` stripped `[*_`]` from every table cell to remove markdown
decoration before comparing names against services*.json. Underscores are
markdown emphasis, but they are also legal in the identifiers this
function exists to compare, so the strip silently corrupted them:
`_source` became `source` and no longer matched the lane that declared it.

Caught on tool_pipe, whose README was correct and failed anyway. Thirteen
nodes carry an underscore in a lane, connection, or profile name, and the
LLM family is the worst affected — `gemini-2_5-flash`, `llama3_2-vision-11b`,
`ai21_jamba-1_5-large` — so this would have produced a wave of false
failures on the largest batch still to come.

Profiles masked the bug because their comparison falls back to fuzzy
containment across two columns; lanes and connections compare strictly,
so they failed outright.

Emphasis is now only removed when a pair of underscores wraps the whole
cell, which is the only case where an underscore is decoration rather than
part of a name. Verified against `_source`, `z_score`, `gemini-2_5-flash`,
`streamable_http`, `_emphasised_`, and both the `*(default)*` and
`_(default)_` markers already in use. No change to the corpus pass count.
@github-actions github-actions Bot added the builder Node builder tooling and ./builder workflows label Aug 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor
🤖 Internal: Discord sync marker

Auto-managed by the Discord notification workflow. Stores the linked Discord message ID and forum thread ID. Do not edit or delete.

@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 518b5374-46e8-428a-9943-25f0e9d7cac6

📥 Commits

Reviewing files that changed from the base of the PR and between 5e10152 and 2f0d370.

📒 Files selected for processing (1)
  • scripts/validate-node-readme.py

📝 Walkthrough

Walkthrough

The README validator now centralizes Markdown table-cell cleanup. It removes Markdown formatting markers and standalone (default) text while preserving underscores inside identifiers.

Changes

README validation

Layer / File(s) Summary
Cell normalization and validation wiring
scripts/validate-node-readme.py
Adds _clean_cell for Markdown table-cell normalization. table_col uses it while preserving internal identifier underscores such as _source, gemini-2_5-flash, and streamable_http.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 2f0d3

This localized validator fix preserves underscores in identifiers while continuing to remove markdown decoration, preventing false documentation validation failures. No actionable merge-blocking risk remains beyond normal checks.

Suggested reviewers: jmaionchi, stepmikhaylov, rod-christensen

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main fix: preserving underscores in identifiers during Node README validation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/validator-underscore-identifiers

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@kgarg2468
kgarg2468 merged commit 178466f into fix/docs Aug 15, 2026
10 checks passed
@kgarg2468
kgarg2468 deleted the fix/validator-underscore-identifiers branch August 15, 2026 01:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

builder Node builder tooling and ./builder workflows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant