chore(deps): tree-sitter 0.25 upgrade readiness monitor with daily Dependabot#847
Merged
Merged
Conversation
…ring Two things Dependabot cannot see on its own: 1. ABI consistency. The tree-sitter runtime supports a known range of grammar ABIs. When a grammar bumps past that range, require() silently fails and fallback paths mask the regression in test coverage. 2. Vendored upstream drift. vendor/tree-sitter-proto is a snapshot of coder3101/tree-sitter-proto regenerated against a pinned cli version. Upstream keeps moving. Nothing notices until a maintainer remembers to look. Dependabot configuration - Added npm ecosystems for gitnexus, gitnexus-web, gitnexus-shared. - Grouped all tree-sitter-* grammar bumps into one PR (ecosystem moves in lockstep, one PR per grammar is noise). - Pinned the tree-sitter runtime itself. Bumping 0.21 to 0.22+ changes which grammar ABIs load and requires coordinated updates to the vendored proto grammar. That stays a deliberate human decision. - Pinned tree-sitter-cli for the same reason (it controls which ABI vendor/tree-sitter-proto/src/parser.c emits when regenerated). Drift check (.github/scripts/check-tree-sitter-drift.py) - Reads the tree-sitter runtime version from gitnexus/package.json. - Walks every installed tree-sitter-* grammar plus the vendored proto and reports its LANGUAGE_VERSION against the runtime's supported ABI range (table maintained in the script; extend when bumping runtime). - Fetches coder3101/tree-sitter-proto main parser.c and compares byte for byte to the vendored copy. Reports the upstream HEAD short SHA and the upstream ABI so a maintainer can act. - Prints a Markdown report; exits 0 when everything is in range and matches upstream, 1 otherwise. - Stdlib only, no external deps. Drift workflow (.github/workflows/tree-sitter-drift-check.yml) - Runs weekly (Mondays 09:00 UTC) to match Dependabot's cadence. - Also runs on PRs that touch the script or workflow itself, where it fails the PR check on drift so the drift gate cannot land broken. - On scheduled runs with drift, opens or updates a single tracking issue labeled tree-sitter-drift. On scheduled runs that come back clean, closes the open tracking issue (if any) with a comment.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
CI Report✅ All checks passed Pipeline Status
Test Results
✅ All 6257 tests passed 97 test(s) skipped — expand for details
Code CoverageTests
📋 View full run · Generated by CI |
…ness monitor
Replace the ABI drift pass/fail gate with a daily upgrade readiness
dashboard that tracks peer-dep compatibility of all 14 grammars with
tree-sitter@0.25.0 and reports which are ready, unreleased, or blocking.
Key changes:
- Rename drift-check → upgrade-readiness (script, workflow, job id)
- Fix P0: pass report via env var, not ${{ }} template interpolation
- Fix P1: npm fetch failure now adds a blocker instead of false-green
- Fix P1: pass GITHUB_TOKEN for authenticated GitHub API calls
- Switch Dependabot to daily for tree-sitter grammars
- Use dict for blockers (no prefix collision), derive TARGET_RUNTIME
constant, reuse GRAMMARS parser_path, normalize CRLF in comparisons
- Reduce per-call HTTP timeout from 15s to 8s for workflow budget
- PR runs warn on blockers instead of hard-failing
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The ci-global-upgrade.yml workflow tested npm global install upgrades over a specific release candidate (1.6.2-rc.8). That RC has shipped and the workflow is no longer needed. Remove it and all references from ci.yml (needs, env vars, gate check). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Each daily run now posts a comment summarizing what changed before updating the issue body. Comments include the ready/blocker counts and a diff of grammar status changes (e.g. tree-sitter-cpp: Unreleased -> Ready). Gives a timeline of how the upgrade unblocks.
github714801013
pushed a commit
to github714801013/GitNexus
that referenced
this pull request
Apr 28, 2026
…pendabot (abhigyanpatwari#847) * chore(deps): add tree-sitter aware Dependabot config and drift monitoring Two things Dependabot cannot see on its own: 1. ABI consistency. The tree-sitter runtime supports a known range of grammar ABIs. When a grammar bumps past that range, require() silently fails and fallback paths mask the regression in test coverage. 2. Vendored upstream drift. vendor/tree-sitter-proto is a snapshot of coder3101/tree-sitter-proto regenerated against a pinned cli version. Upstream keeps moving. Nothing notices until a maintainer remembers to look. Dependabot configuration - Added npm ecosystems for gitnexus, gitnexus-web, gitnexus-shared. - Grouped all tree-sitter-* grammar bumps into one PR (ecosystem moves in lockstep, one PR per grammar is noise). - Pinned the tree-sitter runtime itself. Bumping 0.21 to 0.22+ changes which grammar ABIs load and requires coordinated updates to the vendored proto grammar. That stays a deliberate human decision. - Pinned tree-sitter-cli for the same reason (it controls which ABI vendor/tree-sitter-proto/src/parser.c emits when regenerated). Drift check (.github/scripts/check-tree-sitter-drift.py) - Reads the tree-sitter runtime version from gitnexus/package.json. - Walks every installed tree-sitter-* grammar plus the vendored proto and reports its LANGUAGE_VERSION against the runtime's supported ABI range (table maintained in the script; extend when bumping runtime). - Fetches coder3101/tree-sitter-proto main parser.c and compares byte for byte to the vendored copy. Reports the upstream HEAD short SHA and the upstream ABI so a maintainer can act. - Prints a Markdown report; exits 0 when everything is in range and matches upstream, 1 otherwise. - Stdlib only, no external deps. Drift workflow (.github/workflows/tree-sitter-drift-check.yml) - Runs weekly (Mondays 09:00 UTC) to match Dependabot's cadence. - Also runs on PRs that touch the script or workflow itself, where it fails the PR check on drift so the drift gate cannot land broken. - On scheduled runs with drift, opens or updates a single tracking issue labeled tree-sitter-drift. On scheduled runs that come back clean, closes the open tracking issue (if any) with a comment. * refactor(deps): rewrite drift check as tree-sitter 0.25 upgrade readiness monitor Replace the ABI drift pass/fail gate with a daily upgrade readiness dashboard that tracks peer-dep compatibility of all 14 grammars with tree-sitter@0.25.0 and reports which are ready, unreleased, or blocking. Key changes: - Rename drift-check → upgrade-readiness (script, workflow, job id) - Fix P0: pass report via env var, not ${{ }} template interpolation - Fix P1: npm fetch failure now adds a blocker instead of false-green - Fix P1: pass GITHUB_TOKEN for authenticated GitHub API calls - Switch Dependabot to daily for tree-sitter grammars - Use dict for blockers (no prefix collision), derive TARGET_RUNTIME constant, reuse GRAMMARS parser_path, normalize CRLF in comparisons - Reduce per-call HTTP timeout from 15s to 8s for workflow budget - PR runs warn on blockers instead of hard-failing Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore(ci): remove global-upgrade smoke test workflow The ci-global-upgrade.yml workflow tested npm global install upgrades over a specific release candidate (1.6.2-rc.8). That RC has shipped and the workflow is no longer needed. Remove it and all references from ci.yml (needs, env vars, gate check). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat(ci): add changelog comments to upgrade readiness tracking issue Each daily run now posts a comment summarizing what changed before updating the issue body. Comments include the ready/blocker counts and a diff of grammar status changes (e.g. tree-sitter-cpp: Unreleased -> Ready). Gives a timeline of how the upgrade unblocks. --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces the original ABI drift check with an upgrade readiness dashboard that tracks when all 14 tree-sitter grammars publish versions with peer dependencies compatible with
tree-sitter@0.25.0. Runs daily alongside Dependabot so we catch the moment the upgrade becomes safe.Why
We want to upgrade
tree-sitterfrom 0.21.x to 0.25.x (unlocking ABI 15 and 8 grammar upgrades). But 9 of 14 grammars currently have peer dependencies that won't resolve against 0.25 without--legacy-peer-deps:Dependabot will catch new grammar releases. The readiness script catches what Dependabot can't see: upstream unreleased work, vendored proto drift, and peer-dep compatibility.
What changed
Upgrade readiness script (
.github/scripts/check-tree-sitter-upgrade-readiness.py)Replaces the old
check-tree-sitter-drift.py. Stdlib only, no external deps. Produces a Markdown report with:vendor/tree-sitter-proto/is in sync with upstream, and whether the upstream ABI is within the target runtime rangeSecurity and reliability hardening (from code review):
GITHUB_TOKENfor authenticated GitHub API calls (5000 req/hr vs 60)github-scriptvia env var, not${{ }}interpolation (prevents script injection)TARGET_RUNTIME_MAJOR_MINORderived fromTARGET_RUNTIMEwith startup assertionWorkflow (
.github/workflows/tree-sitter-upgrade-readiness.yml)actions/github-script@v9.0.0with SHA pinDependabot (
.github/dependabot.yml)gitnexus/(was weekly) — catch new grammar releases ASAPtree-sitter) and CLI (tree-sitter-cli) pinned until upgrade is readyCurrent readiness (2026-04-16)
5/14 grammars ready. 9 blockers remaining. See the script output for the full report.
Test plan
dependabot.ymlvalidates via GitHub's schema