Skip to content

Releases

v0.4.2

Choose a tag to compare

@VitjanZ VitjanZ released this 03 Nov 12:47
8eed15a

Hello everyone! We are releasing a new version of codeplain - 0.4.2!

Upgrade with uv tool upgrade codeplain.

What's Changed

  • --force-render renders the whole project again, without a question
  • New option --exit-when-done closes the terminal interface when rendering is done
  • Visualize which functionality is being rendered within a module
  • chore(deps): bump pytest from 9.1.1 to 9.2.0
  • ci: give spec-parsing dependencies their own Dependabot PR

Full Changelog: v0.4.1...v0.4.2

v0.4.1

Choose a tag to compare

@NejcS NejcS released this 02 Nov 13:04

Hello everyone! We are releasing a new version of codeplain - 0.4.1!

Upgrade with uv tool upgrade codeplain.

0.4.0 could not start. If you installed it, please upgrade.

Fixes

  • The installed client now asks for plain-parser 0.2.0, the version it needs. 0.4.0 asked for 0.1.4 and stopped with an error before it read anything.

Everything of 0.4.0 arrives with this release

0.4.0 never ran, so this is the first version that gives you what its notes describe. Please read them before you upgrade: https://github.com/Codeplain-ai/codeplain/releases/tag/v0.4.0

In short: test scenarios move into a test plain file of their own, one per functionality, under a tests folder; --render-range and --render-from take the ID of a functionality in place of its number; and a build folder made by an older version cannot be continued.

Full Changelog: v0.4.0...v0.4.1

v0.4.0

Choose a tag to compare

@NejcS NejcS released this 02 Nov 12:18

Hello everyone! We are releasing a new version of codeplain - 0.4.0!

Upgrade with uv tool upgrade codeplain.

Breaking

  • Test scenarios move out of the .plain file into a test plain file of their own, one file per functionality, under a tests folder. Use the add-test-scenarios skill of plain-forge to write them.
  • Every functionality needs a test plain file when a conformance tests script is set. The render stops and names the file to write.
  • --render-range and --render-from take the ID of a functionality, the one you write in its heading, in place of its number.
  • A build folder made by an older version cannot be continued, because it recorded functionalities by number. Remove it and render again.

New

  • --tests-folder names the folder that holds the test plain files. Repeat it for more than one. It defaults to tests beside the .plain file, so a project that follows the convention needs no setting. The tests-folder key of config.yaml does the same.
  • A functionality whose test plain file holds no scenario is rendered without conformance tests. The tests of the functionalities before it still run.
  • The renderer warns when a written scenario got no test, when a test belongs to no scenario, and when one scenario got more than one test.
  • Every message names a functionality as its module and ID, in the progress view, the log and the render report.

Internal

  • plain-parser 0.2.0.

Full Changelog: v0.3.13...v0.4.0

v0.3.13

Choose a tag to compare

@gorandodig gorandodig released this 30 Oct 13:10

Hello everyone! We are releasing a new version of codeplain - 0.3.13!

Upgrade with uv tool upgrade codeplain.

Fixes

  • Generated files always end with a newline.
  • On Windows, generated files keep the server's line endings instead of CRLF.
  • A render stopped by failing unit tests now says why.

Internal

  • .plain parsing moved to the plain-parser package.
  • New --job-tag option labels a render's server requests.
  • Dependency bumps: GitPython, sentry-sdk, dev tools and CI actions.

Full Changelog: v0.3.12...v0.3.13

v0.3.12

Choose a tag to compare

@NejcS NejcS released this 19 Oct 11:54

New release 🎉

Hello everyone! We are releasing a new version of codeplain - 0.3.12!

Run uv tool upgrade codeplain in your terminal to upgrade!

New features & improvements

  • The unit tests fixer now works as an agent. Before, each failed unit test run got one fix attempt that knew nothing about the attempts before it, so on a hard failure the fixer went back and forth between two issues. The fixer now keeps one session for the whole functionality. In the session it reads the code, searches it, changes it and runs the unit tests itself, and every later attempt sees what it already tried and what failed.

Fixes

  • A render no longer waits for an answer that cannot arrive. A call to the render service stays quiet for minutes while the service works on the answer. Some network equipment drops a connection that quiet and tells neither side, which left the client waiting without end. Every connection now sends keepalive probes, through a proxy as well, so a render behind such equipment keeps going.
  • codeplain renders headless when no terminal is attached. Started from a script or an agent, the render TUI read end-of-file in a tight loop, so it used a whole CPU core for the entire render, and a stopped render waited for an Enter nobody could press. Without a terminal, codeplain now does what --headless does: progress on stdout, and exit status 1 when the render stops.

Internal improvements

  • The terminal tests run on Windows again. The two modules that exist only on POSIX are now imported inside the one test that needs them.

v0.3.11

Choose a tag to compare

@NejcS NejcS released this 06 Oct 08:33

New release 🎉

Hello everyone! We are releasing a new version of codeplain - 0.3.11!

Run uv tool upgrade codeplain in your terminal to upgrade!

New features & improvements

  • The render TUI keeps the status in view. A long functionality filled the screen and pushed the rendering status and the testing status out of sight. The TUI now shows only the first line of the functionality. Press ctrl+o to see the full text, and ctrl+o again to collapse it. A functionality that is one line long shows no hint.
  • The unit tests fixer no longer undoes the conformance tests fix. When the conformance tests fixer changed the implementation code, the unit tests failed next, and the unit tests fixer put the implementation back to what the old unit tests asked for. The conformance fixer made the same change again, and the render went in circles. The conformance fixer's changes are now handed to the unit tests fixer, so it keeps the change and adjusts the unit tests instead.
  • --status tells you what to do next. When you have no credits left, the message names your plan and gives the address where you can upgrade. When you still have credits, it gives the address where you can manage your plan. The free plan is now called "Free credits".
  • The client reports the end state of every render to the API, so a render that stopped early is visible on the server side.

Fixes

  • Linked resources are now resolved against the directory of the .plain file that links them. A link that points to no file fails with a clear error.
  • A module that uses requires and has no ***definitions*** section of its own no longer fails to parse.
  • An exported_concepts entry with no definition now fails --dry-run on the module that exports it, instead of appearing later in a module that consumes it. Two cases that used to pass without a word now fail too: exporting a predefined concept, and exporting again a concept that came in through requires.
  • codeplain checks for git before it starts and exits with a clear error when git is missing or does not work. Before, the run failed later with a confusing message.
  • Spec text with square brackets no longer breaks the TUI. A line such as ZLEXCOUNT z [b crashed the whole render TUI, and text such as LPOP key [count] disappeared from the display.
  • Emoji shortcodes are no longer replaced in log text. A concept named :Package: is printed by its name, not as a picture. Names such as Book, Key, Bug, Lock and Link had the same problem.
  • The installer no longer stops without a message when unzip is missing. It says how to install it, a download that is not a zip file is reported as such, and the optional examples step can no longer take the whole installation down.

Internal improvements

  • The test suite for --status agrees with the new out-of-credits message again, so pull requests go green.

v0.3.10

Choose a tag to compare

@zanjonke zanjonke released this 02 Sep 12:47

New release 🎉

Hello everyone! We are releasing a new version of codeplain - 0.3.10!

Run uv tool upgrade codeplain in your terminal to upgrade!

New features & improvements

  • Distribute rendered modules as a single .module archive. A module's build output can now be zipped and consumed directly by another project's requires chain — no need to ship an unpacked plain_modules/<module>/ folder. Archived modules are read from a scratch directory (they stay zipped), and are only unpacked in place when that module is actually re-rendered. If conformance testing is on and a consumed archive has no tests/ folder, you'll be told up front and offered the choice to quit or re-render that module.
  • Conformance-test fixes no longer repeat themselves. Every fix attempt is now recorded in an append-only journal, and each new attempt sees the full history of what was already tried and failed — so it must take a materially different approach. Once all tests for a functionality pass, the journal is distilled once into durable learnings instead of one memory call per attempt (fewer API calls on the happy path, none at all when no fix was needed). Learnings now travel down the requires chain, so later modules inherit what earlier ones learned.
  • Headless mode logs to stdout. --headless previously wrote only to the log file, so a CI job saw nothing until the render ended and a wedged render looked identical to a healthy one. Log records now stream to stdout, flushed per record. Specification text is deliberately excluded from this sink.
  • --dry-run catches unsupported linked resources. A linked PNG, PDF, or ZIP used to pass dry-run and only fail at render time. Dry-run now loads linked resources the same way rendering does, so binary targets, missing files, and oversized resources all fail fast with the same error you'd get at render.
  • Complete set of predefined concepts. Concepts documented as predefined in the language guide are now all recognized as such by the client.

Fixes

  • Syntax errors now report the correct line number from your .plain file — previously the frontmatter block was stripped before counting, so errors pointed too far up the file (line 5 instead of 11). CRLF files are handled correctly too.
  • Log output is no longer recolored by Rich's repr highlighter — error messages and file names like [Errno 8] render exactly as logged instead of with brackets and digits in different colors.
  • Windows installer fixes: install.ps1 no longer fails to parse on PowerShell 5.1; installing under a Restricted execution policy now works; a failed install (e.g. git missing) no longer closes your terminal window mid-sentence; and git is checked before installation is verified.
  • Updated README: build directory renamed (build → dist) and expanded guidance on using different Node package runners.

Internal improvements

  • New CONTRIBUTING.md.
  • Bump dependencies: mistletoe (1.5.1 → 1.6.0), sentry-sdk (2.66.0 → 2.66.1), gitpython (3.1.52 → 3.1.55).

⚠️ Breaking change

The module code-hash format changed to content-only (the absolute build-folder path was dropped), making hashes stable across directories and machines. Existing multi-module projects will see a one-time "required module code changed" prompt on their next render, and any .module archives created before this release must be regenerated.

v0.3.9

Choose a tag to compare

@hisenb3rg hisenb3rg released this 31 Jul 09:48

New release 🎉

Hello everyone! We are releasing a new version of codeplain - 0.3.9!

Run uv tool upgrade codeplain in your terminal to upgrade!

New features & improvements

  • The produced conformance tests now live under the per-module build tree alongside the code/ directory (example with the default plain_modules build folder: plain_modules//tests/).

Internal improvements

  • Module metadata relocated into per-module build tree.
  • Telemetry disabled by default outside of production environment.
  • Slack deploy notifications for release workflows.

v0.3.8

Choose a tag to compare

@zanjonke zanjonke released this 24 Jul 09:05

New release 🎉

Hello everyone! We are releasing a new version of codeplain - 0.3.8!

Run uv tool upgrade codeplain in your terminal to upgrade!

New features & improvements

  • Live credit usage in the TUI. A new usage line (functionalities / used credits / render time) appears beneath the render status while rendering, and freezes on success, failure, and cancellation. Wording now matches the console post-render summary.
  • Color-highlighted log messages. Retry and success messages are highlighted in color in the TUI, while file logs stay plain text.
  • Examples downloaded from a Cloudflare R2 bucket during install, simplifying the install scripts.
  • Windows-compatible date formatting in the status output, plus install-script logging improvements.

Fixes

  • Fixed render time reporting 0 on failure and cancellation — the live elapsed time is now captured on every terminal path so the TUI line and console summary agree.
  • Fixed format_duration_hms mangling whole-second inputs (e.g. 10s rendered as 1s).
  • Elapsed render time now flows through a single RunState.get_live_render_time() accessor, removing duplicated timing logic across log timestamps, the TUI, and the summary.

Internal improvements

  • New root usage_summary.py as the single source of truth for the usage line, shared by the console summary and the TUI (kept at root so the TUI stays independent of cli_output/ and the renderer).
  • Added tests for the TUI usage line, usage summary, RunState, duration formatting, and console log styles.
  • Bump dependencies: mypy (2.1.0 → 2.3.0), sentry-sdk (2.63.0 → 2.66.0), gitpython (3.1.50 → 3.1.52).

v0.3.7

Choose a tag to compare

@zanjonke zanjonke released this 15 Jul 11:56

⚠️ BREAKING CHANGE: Improved Path Resolution

Warning
This release changes how path arguments are resolved. If you use custom
test scripts based on the codeplain templates, you must update them
before upgrading — otherwise renders will stall with an
ImportError: Start directory is not importable error in the test logs.
See the migration section below.

Path arguments (e.g. --build-folder, --conformance-tests-script) are now resolved relative to where they were specified — CLI arguments resolve against the current working directory, config.yaml values against the config file's directory. Previously, some CLI arguments were incorrectly resolved against the config file, causing failures when running codeplain from outside the project root.

Migration: custom test scripts

If you use custom test scripts based on the codeplain templates, update them to write build folders to a temp directory and clean up on exit. Patch files are attached to PR#168.