v0.15.3
Parser stability and harness release.
Added
- C/C++ lexer bridge now accepts
#embeddirective lines and
__has_embed(...)conditional feature-test forms (including parameter
variants) without parse errors. - Scoped Canopy harness runner under
cgo_harness/docker/. The wrapper mounts
the host Canopy binary into the Docker harness, applies memory/CPU/PID caps,
uses a host-side timeout watchdog, and scopes analysis to one package with
generated blobs/worktrees excluded by default.
Changed
ts2gobatch execution is parallelized, reducing generated-grammar
conversion wall time on multi-core machines.- External scanner adaptation now tolerates source/target external-symbol count
mismatches.AdaptExternalScannerByExternalOrdercan match shared symbols by
name, leave unpaired target symbols disabled, and size the source-valid bitmap
to the source scanner rather than assuming equal external lists. - Moved cgo harness sample/profile fixtures under
testdatadirectories and
updated the harness docs and scripts to use the new paths. - GLR stack culling now shares the keyed retention path across full and
incremental parses while preserving the previous incremental tie-breaks. - Parser-result compatibility dispatch is now separated from core tree
assembly, with mixed compatibility shims split into language-owned files and
shared node helpers moved out of language-specific modules. - Parser tests are split by responsibility, public parser-result regression
tests live underparser_result_test, and larger parser-result Python source
fixtures now live undertestdata/parser_result.
Removed
- Dropped unused query matcher rollback compatibility wrappers now that
predicate-aware matching is the only call path. - Removed unused internal parser, reduce, incremental, and parser-result helpers
left behind by recent recovery and normalization rewrites. - Removed stale internal planning/spec docs from the OSS tree.
- Removed unused private grammar and grammargen helper code found by the
maintenance sweep. - Moved ad-hoc grammargen diagnostic tests behind an explicit build tag and
removed the print-only disassembly lexer probe from the normal test suite. - Removed the duplicate legacy GLR stack-retention selector from parser
internals.
Fixed
- Re-landed the arena-retention and repo-cleanup fixes from the recovered
main-line commits after the accidental reset.
Performance
- JavaScript and TypeScript full parses cap merge survivors per key at 4. Large
JS bundles can otherwise keep too many near-equivalent GLR branches alive and
spend most parse time in merge-equivalence checks. Incremental parsing and TSX
keep their existing budgets. - Markdown and markdown_inline full parses use tighter initial GLR stacks and a
higher markdown-specific node budget. Dense inline-heavy markdown now prunes
early without forcing repeated node-limit retries on normal documents.