Skip to content

chore(deps): Bump github.com/odvcencio/gotreesitter from 0.20.5 to 0.47.0#62

Merged
townsendmerino merged 1 commit into
mainfrom
dependabot/go_modules/github.com/odvcencio/gotreesitter-0.47.0
Jul 24, 2026
Merged

chore(deps): Bump github.com/odvcencio/gotreesitter from 0.20.5 to 0.47.0#62
townsendmerino merged 1 commit into
mainfrom
dependabot/go_modules/github.com/odvcencio/gotreesitter-0.47.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 23, 2026

Copy link
Copy Markdown
Contributor

Bumps github.com/odvcencio/gotreesitter from 0.20.5 to 0.47.0.

Release notes

Sourced from github.com/odvcencio/gotreesitter's releases.

v0.47.0 — generalized incremental correctness

This release closes the generalized incremental-correctness campaign: capability-based scanner admission, exact checkpoint receipts for stateful GSS forest reuse, strict ownership and fail-closed boundaries, JavaScript/TypeScript incremental scheduling work, and broader stateless-scanner admission. It also refreshes repository and release hygiene. See CHANGELOG.md for the complete evidence and residuals. This is the final planned off-cadence minor; planned minor releases move to Thursdays in America/Los_Angeles.

v0.46.0 — compact admission and editor contracts

Highlights

  • Compact parser admission is ratcheted at 166 byte-exact routes out of 206 fixtures, with 35 fail-closed fallbacks and 5 token-source skips.
  • Certified collapsed named leaves now materialize natively; compatibility passes have explicit ownership, witnesses, and retirement criteria.
  • The editor gate now covers Go, JavaScript, TypeScript, Python, and CSS across insert, delete, and replace edits at start, middle, and end for roughly 20 KiB and 137 KiB sources, plus a manual 1 MiB tier.
  • JavaScript and TypeScript transient-error deletes have deterministic parser-work, retry, stack, node, and memory bounds while remaining structurally equal to fresh parses.
  • All 119 registered external scanners have a published, drift-tested incremental-reuse contract. SQL, HTML, and Markdown explicitly fail closed to the production full-parse path after the narrow token-invariant leaf exception declines.
  • Incremental documentation now states the measured cost model: cheap edited-region parse work plus linear coordinate maintenance for affected trailing siblings, not an absolute O(edit) guarantee.

Evidence

Known limits

  • Uncertified or explicitly opted-out external scanners retain the documented production full-parse fallback.
  • JavaScript and TypeScript leading-prefix splice proof remains conservative for some middle and end edits; the new gates bound this behavior rather than claiming it is eliminated.
  • Performance improvement beyond the ratcheted correctness and memory band remains ongoing work rather than a release gate.

v0.45.0

Fixed

  • TypeScript arrow functions with a return-type annotation no longer collapse to ERROR as a const/let initializer (issue #402, PR #409). Example: const f = (a: A): B => { ... }. The typed-arrow and destructured-arrow-return-type detectors added in PR #389 did not cover this shape. Neither required the arrow to be immediately preceded by ). A typed, non-destructured parameter list combined with an explicit return-type annotation fell through both. This fix adds a dedicated detector for that shape. It widens the merge budget to two survivors, matching the typed-arrow and default-parameter cases. TSX was unaffected; its wider JSX conflict set already kept a second survivor alive. The detector also covers parenthesized return types: (a: A): (B) => a, (a: A): (string | number) => a, and (a: A): (() => B) => a. Its backward colon scan now balances parentheses, so a colon nested inside the return type is not mistaken for the top-level boundary. This is the third source-heuristic merge-width detector guarding the same root cause as the PR #389 default-parameter fix. That root cause: the GLR engine's steady-state merge budget discards a live fork by score before any structural comparison runs. The structural cure — comparing candidate forks structurally before falling back to score at the merge site — remains tracked, in active

... (truncated)

Changelog

Sourced from github.com/odvcencio/gotreesitter's changelog.

[0.47.0] - 2026-07-22

Changed

  • Stateful GSS forest trees now enter incremental reuse through exact checkpoint receipts. Admission requires the scanner's generic checkpoint and incremental-reuse capabilities, then authenticates non-empty start and end snapshots at every reachable token boundary. A missing endpoint declines the forest as scanner_checkpoint_unavailable instead of letting distinct unrepresentable states collide as empty snapshots. A length-changing stateful witness requires actual subtree reuse and deep fresh-tree equality; a synthetic absent-checkpoint scanner locks the fail-closed path.

  • GSS forest trees now use capability-based incremental admission. Forest construction records exact pre-goto ownership for every reusable subtree, and the reuse cursor requires that ownership before transferring top-level nodes. Languages without an external scanner, plus scanners with an explicit stateless/failure-preserving proof, can therefore reuse forest-built trees without a language-name allowlist. AWK, KDL, Nix, Squirrel, and Uxntal are newly admitted through a shared multi-position and 137 KiB fresh-tree differential.

  • JavaScript, TypeScript, and TSX leading incremental reuse is admitted. The generic byte-identity, fragility, and scanner gates now govern unchanged leading siblings without a language-name holdback. Exhaustive clean byte-edit sweeps compare the complete incremental tree directly with a fresh parse, and the 20 KiB/137 KiB latency gate plus its opt-in 1 MiB tier lock middle and end edits to small, size-independent work counters. Transient-error insert/delete/replace edits retain separate recovery and memory bounds.

  • TypeScript and TSX now parse import-type queries in generic call type arguments. Forms such as foo<typeof import("module")>() and foo<import("module").Name>() use a pinned upstream grammar overlay that is applied identically during ts2go generation and C-oracle parity builds. Ordinary dynamic import() expressions remain call expressions.

  • Eight additional stateless scanners are certified for changed-edit reuse: Comment, Dhall, DTD, Foam, Godot Resource, Kconfig, Odin, and RON. Each passes the shared multi-position 4 KiB edit matrix and a 137 KiB changed-length fresh-tree differential with actual subtree reuse. Kconfig's deliberately small 16-byte macro floor keeps its parser-level ownership residual visible without treating performance as a correctness gate.

  • Twelve more stateless scanners are certified for changed-edit reuse: EditorConfig, Fennel, Fish, GN, Janet, Julia, Less, Liquid, Pkl, Racket, TableGen, and Yuck. The shared fresh-tree matrix enforces real reuse across edit classes and positions, with measured 137 KiB floors that preserve low ownership-reuse cases as visible performance residuals.

  • **The stateless-scanner admission matrix now also covers Gleam, Move, Tcl,

... (truncated)

Commits
  • 000ae6c Merge pull request #452 from odvcencio/codex/release-cadence
  • f03fdba release(release): release v0.47.0 and document release cadence
  • dc4cd83 Merge pull request #451 from odvcencio/codex/stateful-checkpoint-contract
  • 15e1926 fix(glr forest): restrict checkpoint capture to grammars with external scanners
  • 8c5d47c improve(parser): Admit stateful scanners via exact checkpoint receipts
  • cefdf91 Merge pull request #449 from odvcencio/codex/gss-incremental-admission
  • 45b3d0a Merge pull request #450 from odvcencio/codex/issue429-scheduler-reuse
  • b602584 update(test): skip external scanner checkpoint fields in test
  • 167f40f test: zero checkpoint slot counters in test comparison
  • 51ac420 refactor(test): consolidate scanner unquiescent liveness verification
  • Additional commits viewable in compare view

@dependabot dependabot Bot added dependencies Pull requests that update a dependency go Pull requests that update Go module dependencies labels Jul 23, 2026
@dependabot
dependabot Bot force-pushed the dependabot/go_modules/github.com/odvcencio/gotreesitter-0.47.0 branch from e1fc69d to 446476a Compare July 24, 2026 14:08
@townsendmerino

Copy link
Copy Markdown
Owner

@dependabot rebase

Bumps [github.com/odvcencio/gotreesitter](https://github.com/odvcencio/gotreesitter) from 0.20.5 to 0.47.0.
- [Release notes](https://github.com/odvcencio/gotreesitter/releases)
- [Changelog](https://github.com/odvcencio/gotreesitter/blob/main/CHANGELOG.md)
- [Commits](odvcencio/gotreesitter@v0.20.5...v0.47.0)

---
updated-dependencies:
- dependency-name: github.com/odvcencio/gotreesitter
  dependency-version: 0.47.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot force-pushed the dependabot/go_modules/github.com/odvcencio/gotreesitter-0.47.0 branch from 446476a to a418068 Compare July 24, 2026 23:11
@townsendmerino
townsendmerino merged commit b416e5b into main Jul 24, 2026
6 checks passed
@dependabot
dependabot Bot deleted the dependabot/go_modules/github.com/odvcencio/gotreesitter-0.47.0 branch July 24, 2026 23:15
townsendmerino added a commit that referenced this pull request Jul 25, 2026
…uspect

Rework the campaign doc's problem statement to the three structural facts,
adding the one that reframes the whole investigation:

3. The 256.6s bench ran ken v1.1.x (gotreesitter 0.20.5). The 0.20.x line
   silently disabled the hand-written repeat-boundary conflict resolvers for
   PHP (per the 0.21.0 changelog), causing GLR stack-forking blowups, and used
   pre-engine error recovery. We bumped to 0.47.0 on 2026-07-24 (PR #62) — the
   C-faithful engine + conflict-resolver fix + ~18% recovery throughput +
   non-quadratic cap-eviction. The bench predates the bump, so the parser is a
   prime suspect for ken being ~1.8x slower per file than the Python baseline.

Adds an M0(a) sub-question + before/after table: index wall at v1.1.1 (0.20.5)
vs HEAD (0.47.0), isolated to the dep, to quantify what the bump alone
recovers. Notes the tension worth resolving: HEAD profiling STILL shows ~21%
CPU in gotreesitter GLR retry on PHP, so the bump likely helped but didn't
eliminate it. Also records the golden-drift risk (error-tree shapes changed in
0.21.0) that Task 2 audits, and reflects the M1 snapshot infra already landed
(ADR-039).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
townsendmerino added a commit that referenced this pull request Jul 25, 2026
…e shape

Task 2 of the cold-start campaign: audit PHP/tree-sitter goldens after the
gotreesitter 0.20.5 → 0.47.0 bump (PR #62, 2026-07-24).

Audit result: the full test suite is GREEN at 0.47.0 — no golden diffs to
verify or regenerate. But every structural extractor test used deliberately
well-formed source (the JS test comment even says so), so ken had ZERO
malformed-input coverage for ANY language — a 0.21.0-style error-tree shape
change (the changelog: PHP static named functions now explicitly named,
conflict resolvers restored, C-faithful engine) could have ridden in
unnoticed. This closes that gap for PHP, the language the 256.6 s bench
exercised.

Add TestBuild_PhpTruncatedController: a truncated Yii-style controller (cut
off mid-expression, class body brace never closed) fed through Build. It pins
the gotreesitter 0.47.0 error-recovery SHAPE as a bump guard:
- robustness invariant (load-bearing): Build must not panic/error on
  truncated input, and the file is still indexed via error recovery;
- complete method before the truncation (actionIndex) is recovered + named;
- the truncated method (actionLogin) is NOT recovered as a function;
- the unterminated class body yields no class;
- clean imports before the truncation parse (Controller).

Any future diff here means the grammar's error-tree shape changed — the test's
doc comment directs the reader to verify against the changelog (C-oracle
shapes) BEFORE re-baselining, per the campaign doc's golden-drift risk.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
townsendmerino added a commit that referenced this pull request Jul 25, 2026
…rse ~2.7x

Task 3: timed `ken perf index --mode bm25` on a yii2 corpus (1,184 .php /
12,349 chunks), median of 5, temp binaries at each ref (GOWORK=off, own pins),
M1 Pro / 16 GB, 2026-07-25. KEN_ENRICH=off is the control (removes the
tree-sitter parse).

  enrich on : v1.1.1 (0.20.5) 1598ms  vs  HEAD (0.47.0) 3455ms  = 2.16x slower
  enrich off: v1.1.1          537ms   vs  HEAD          557ms   = ~equal

The enrich-off control is flat across versions, so the ENTIRE on/off delta is
the gotreesitter parse: the 0.47.0 C-faithful engine is ~2.7x slower on
well-formed PHP than 0.20.5's conflict-resolver-disabled engine.

This overturns fact (3)'s hypothesis. The 256.6s bench ran the FASTER parser;
0.20.5's GLR blowup is input-specific and yii2 doesn't trigger it enough to
lose the well-formed-code speed — so the parser was not the bench bottleneck we
suspected. And the correctness bump (PR #62) carries a real, previously
unmeasured cold-start regression on typical PHP. Re-weights the campaign toward
the caching levers (M1/M2 + the shipped lazy-structural win) and promotes
"upstream the PHP parse cost" to a real target: get 0.47.0 correctness without
its ~2.7x well-formed-PHP parse cost. M1 must land before the external rebench.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency go Pull requests that update Go module dependencies

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant