Skip to content

v0.6.0: The Architecture & Execution Hardening Update

Choose a tag to compare

@JacksonFergusonDev JacksonFergusonDev released this 08 Mar 22:02
· 717 commits to main since this release

Summary

This release focuses on deep architectural decoupling, bulletproofing the execution phase, and ensuring the configuration state remains predictable and firmly tracked. We’ve rebuilt the core orchestration engine to cleanly separate state manifestation from disk I/O, hardened the TOML parsers against edge-case mutations, and shifted our benchmarking to capture true out-of-process cold starts.

🏗️ Core Architecture & DAG Lifecycles

  • State vs. Execution Split: The monolithic orchestrator has been decoupled. Orchestrator now acts strictly as a state machine for manifest aggregation, while the new SystemExecutor handles all highly-volatile filesystem I/O and subprocess execution.
  • DAG Execution Ordering Fix: Resolved a critical execution ordering bug by introducing a post_install_tasks queue. Virtual environment binaries (like pre-commit and direnv) are now strictly guaranteed to execute after the dependency resolution phase completes.
  • Dynamic CLI Routing: Extracted abstraction leaks by pushing iteration logic into the PresetModule and BootstrapModule base classes. Tooling modules and presets now evaluate dynamically, meaning future language additions require zero modifications to the core parser.

🛡️ Configuration & Injection Safety

  • Runtime Type Validation: The configuration parser now uses typing.get_type_hints to gracefully reject malformed TOML inputs and fall back to safe defaults, entirely avoiding the import overhead of Pydantic.
  • Strict Scope Boundaries: Hard-enforced the partition between global initializations and local workspace generation. The orchestrator now actively strips [env], [presets], and [dev] blocks from local .protostar.toml files to prevent configuration drift.
  • Deterministic AST Merges: TOML injections now utilize structural parity guards (e.g., ensuring a Table only merges with a Table), and plain-text injections are protected by MD5 payload hashes to ensure idempotency even if users modify the generated logic.
  • O(1) Config Loading: Implemented an in-memory class-level cache to eliminate repeated disk I/O when loading configurations across the CLI lifecycle.

📉 Graceful Degradation & Telemetry

  • Partial Success States: If a package manager (uv or pip) encounters a fatal error like a network timeout, the orchestrator no longer crashes. It degrades gracefully, trapping the stderr payload and surfacing a PARTIAL SUCCESS warning, preserving the 99% of the environment that was successfully scaffolded.
  • Rich OSC 8 Hyperlinks: The crash reporter UI has been upgraded. Massive URL-encoded GitHub issue payloads are now hidden behind clean, clickable terminal hyperlinks.
  • Subprocess Security: $EDITOR environment variables are now safely tokenized using shlex.split(), preventing FileNotFoundError crashes for complex arguments (e.g., export EDITOR="code --wait").

🧪 Benchmarking & Test Infrastructure

  • True Cold-Start Benchmarks: Migrated from pytest-benchmark to hyperfine. Latency benchmarking now executes entirely out-of-process to capture true Python boot times and CLI initialization overhead, natively integrated into our CI pipeline to gate regressions.
  • 95% Test Coverage: Completely overhauled the test suite to execute true E2E subprocesses within tmp_path sandboxes. XDG base directories are now actively isolated during testing to prevent host-machine configuration leakage.
  • Strict Local Enforcement: Expanded Ruff linting rules (RUF, N, RET) and configured a hard fail_under = 90 coverage floor for local execution, ensuring high standards before code ever hits the cloud.