v0.9.67

Budibase/budibasev0.9.67Sep 23, 2026by safishamsi

Upgrading?

AI Summary

This release focuses on fixing regressions in Python scanning and improving the stability of exports and secret redaction, while adding support for PHP closures in the graphify engine.

Key Highlights

  • Fixes Windows console-script launcher failures for update/extract/cluster/label commands.
  • PHP closures are now extracted and named semantically (e.g., route definitions).
  • Absolute Python package imports now resolve correctly to local modules.
  • Terraform secrets are now redacted from nested list values.
  • Wiki and Obsidian exports now skip unchanged pages to prevent unnecessary syncs.

New Features

  • PHP closure extraction with semantic naming
  • Improved absolute Python package import resolution
  • Enhanced Terraform secret redaction

Full Release Notes


- Fix: the PYTHONHASHSEED determinism pin (0.9.66) now re-execs via `python -m graphify` instead of replaying `argv[0]`, fixing a Windows regression where `update`/`extract`/`cluster-only`/`label` failed to re-launch through the console-script `.exe` launcher (#3780, thanks @ayushcodes10).
- Feature: PHP closures are now extracted — an anonymous `function(){…}`, an arrow `fn()=>…`, or a closure passed as an argument now produces a node and its inner calls are captured, in all positions including file scope. Route-definition closures get a semantic `VERB /path` name (composing nested `group()` prefixes); other closures get a stable per-scope ordinal (#3461, #3409, thanks @nikhilsaxena04).
- Fix: absolute Python package imports (`import pkg.sub`, `from pkg.sub import x`) now resolve to the local package/module node within the scan root, reusing the canonical resolver (bounded walk, PEP 420 namespace handling); an ambiguous module name across scanned trees fails closed rather than binding arbitrarily (#3729, thanks @Ha1baraA11).
- Fix: a package/module name collision (`pkg/` package alongside a `pkg.py` module) no longer produces a phantom import cycle — the spurious provisional edge is retracted while genuine package-init and submodule edges are preserved (#3784, #3777, thanks @hopstreax).
- Fix: Terraform secret redaction now also covers secrets nested inside list values (`configs = [{ password = "…" }]`), not just maps (#3762, #3644 follow-up, thanks @abhay-codes07).
- Fix: `export` no longer rewrites unchanged wiki/Obsidian pages on every run — a page whose content is identical is left untouched (stable mtimes, clean git/Obsidian sync), while changed and new pages still write and orphaned pages are still swept (#3760, #3060, thanks @abhay-codes07).

Related Repositories