• v.0.9.0-alpha 9178bad434

    v.0.9.0-alpha Pre-release

    abiwab released this 2026-06-07 19:16:56 +02:00 | 473 commits to main since this release

    Release Notes - v0.9.0-alpha

    Cleaning up the Kitchen: Scopes & Architecture

    This release focuses heavily on restructuring the project to make it sustainable, modular, and ready for long-term development.

    Wait... Where did v0.8.0 go?

    If you were looking for the v0.8.0 release notes, don't blink—you didn't miss them! In the process of setting up Changesets to automate my workflow, the tool looked at the sheer volume of updates, structural revamps, and package migrations, and essentially said: "This is too big for a single step, we are skipping straight to v0.9.0." Consider it a kitchen accident where the dough rose twice as fast as expected. Let's call it a feature, not a bug!

    Moving to Scoped Packages

    All packages have now been migrated under a unified npm scope: @gram/. Whether you are using the parser, the compiler, or the playground, everything is now cleanly organized under @gram/parser, @gram/compiler, etc.

    A Major Architectural Split: Introducing @gram/analyzer

    In the previous release, I reclassified features like mass unification, yield management, and nutritional information calculation as experimental. Taking this a step further, I realized that bundling this complex analytical logic directly inside the core compiler was a mistake.

    To keep the compiler fast and lean, I have extracted all analyzer logic into its own dedicated package: @gram/analyzer.

    🚨 Breaking Change: The core compiler no longer ships with a built-in ingredients database. If you rely on nutritional estimation, mass normalization, or yield management, you will now need to explicitly provide your own ingredients data to the new analyzer package.


    What's New

    Refining the Syntax & "Mise en Place"

    • Removing Ingredient States: I have decided to remove the ingredient states syntax (@ingredient:state{}). While the original intent was to help organize a richer ingredients database, real-world usage proved it was far too confusing and verbose to write.
    • Cleaner Section Summaries: Pure flow instructions—like mentioning an ingredient just to say "remove from heat" or "re-insert"—without quantities (@&ingredient{}) are now excluded from section-level ingredient summaries. This keeps your section-level mise en place lists perfectly clean while preserving separate measured portions.
    • Semantic Temperatures: The GRAM syntax now natively accepts semantic temperatures. You can now write intuitive instructions like Cook on !{low heat} without being forced to specify exact Celsius or Fahrenheit degrees.
    • French Culinary Units: Unit resolution has been improved to seamlessly handle French kitchen aliases (e.g., translating tsp to càc).

    Under the Hood Improvements

    • Mass Calculation Fixes: Fixed multiple edge-case bugs with mass calculations. Following up on the previous release, explicitly empty ingredient masses now safely count as exactly 0 to avoid breaking total weight equations.
    • Streamlined Maintenance: I have completely stripped out /dist folders from the main repository tracking and migrated the entire project's versioning workflow to Changesets. This will make tracking modifications, maintaining a clean root changelog, and shipping predictable updates significantly easier going forward.
    Downloads