Skip to content

v4.0.3

Choose a tag to compare

@BATEMAN4 BATEMAN4 released this 02 Aug 17:35
· 122 commits to main since this release
289ff24

Added

project_reconcile_plan / project_reconcile_apply / project_reconcile_status — one ordered, resumable flow over the existing toolchain tools.

Every individual operation was already safe; what was missing was the order. An agent had to work out for itself that rokit_status precedes rokit_install, that a Wally install is pointless before the lock validates, and that a sourcemap generated before the packages exist describes a tree that does not.

Reconcile owns that order and nothing else — it composes the same tools behind the same plan / confirm / planHash contract rather than becoming a second, less-reviewed way to run them.

It restores declared state and never invents new state. Installing the exact version rokit.toml pins, or the packages wally.lock already resolved, is a repair. Choosing a version, resolving a new lock, editing the Rojo tree or migrating Aftman is a decision, and each comes back as a blocked step naming the [automation] flag in bloxforge.toml that would permit it — all four off by default.

  • Single-writer lease at .bloxforge/locks/project-reconcile.lock; a second agent gets another_reconcile_is_running rather than a half-applied project, and a lease whose process is gone is treated as stale.
  • Journal at .bloxforge/reconcile/<runId>.json; the same runId resumes an interrupted run instead of repeating finished steps.
  • State is re-read after every mutation rather than precomputed once — rokit_install changes which tools exist, and therefore what the remaining steps should be.
  • Every run finishes on the full strict project verify.

Fixed

  • The Inspector plugin could not load. ClientBroker is packaged in both variants and requires InputHandlers, EvalRuntimeHandlers and BreakpointHandlers, which the reduced Inspector build omits, so the first require failed and the plugin never started. Those three now redirect to Inspector stubs that refuse the endpoint, keeping runtime Luau execution out of the read-only package.
  • InspectorBreakpointHandlers exported the wrong module shape — a default object, where its callers are compiled against the real module's export = and index the module table directly, so BreakpointHandlers.init(plugin) would have been nil even once the module resolved.
  • build-plugin.mjs refuses to package a variant that requires a module it does not ship, and fails when a source rewrite matches nothing. This is the check the assertions on the finished asset cannot make: an omitted module is missing for exactly the reason it is supposed to be missing.
  • The pinned Lune bootstrap caches under the user's home instead of the system temp directory. A cache hit skips the checksum and /tmp is writable by every local account, so the previous path let anyone with an account on the machine have the release gate execute their binary. BLOXFORGE_TOOL_CACHE still overrides it.
  • shapeListResponse no longer promises a pagination block it does not always attach — four of its five paths return the caller's object untouched.

Verified

Full CI green on the released commit, including the real-CLI toolchain matrix on Windows and macOS.

Full changelog: https://github.com/princeofscale/bloxforge/blob/v4.0.3/CHANGELOG.md