Repository navigation
Releases: Codeplain-ai/codeplain
Release list
v0.3.12
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
--headlessdoes: 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
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+oto see the full text, andctrl+oagain 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.
--statustells 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
.plainfile that links them. A link that points to no file fails with a clear error. - A module that uses
requiresand has no***definitions***section of its own no longer fails to parse. - An
exported_conceptsentry with no definition now fails--dry-runon 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 throughrequires. - 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 [bcrashed the whole render TUI, and text such asLPOP 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 asBook,Key,Bug,LockandLinkhad the same problem. - The installer no longer stops without a message when
unzipis 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
--statusagrees with the new out-of-credits message again, so pull requests go green.
v0.3.10
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
.modulearchive. A module's build output can now be zipped and consumed directly by another project'srequireschain — no need to ship an unpackedplain_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 notests/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
requireschain, so later modules inherit what earlier ones learned. - Headless mode logs to stdout.
--headlesspreviously 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-runcatches 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
.plainfile — 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.ps1no longer fails to parse on PowerShell 5.1; installing under aRestrictedexecution 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
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
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
0on 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_hmsmangling whole-second inputs (e.g.10srendered as1s). - 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.pyas 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 ofcli_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
⚠️ 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 importableerror 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.
v0.3.5
New release 🎉
Hello everyone! We are releasing a new version of codeplain - 0.3.5!
New features & improvements
- Warn when acceptance tests exist but no conformance-tests script is configured.
- Reject acceptance tests nested under non-functional-spec sections, with heading validation.
- Write rendered files as UTF-8, fixing UnicodeEncodeError on Windows.
- Block base64-encoded image content in .plain files.
Internal improvements
- Improve sentry telemetry.
- Optimize building of PlainModule before passing on to render.
- Refactor state-machine hook logic.
- Source standard_template_library/ as a git subtree from plainlang-examples.
- Bump dependencies: mypy, tiktoken, python-liquid2, sentry-sdk, requests, pytest.
v0.3.4
New release 🎉
Hello everyone! We are releasing a new version of codeplain - 0.3.4!
New features
- Automatic partial rendering — re-renders now resume from the earliest changed functionality instead of rebuilding the whole module, keeping unchanged work intact.
Improvements
- Reject .plain linked resources — .plain files can't be used as linked resources.
v0.3.3
New release 🎉
Hello everyone! We are releasing a new version of codeplain - 0.3.3!
New features
- Sentry crash reporting — reports only unexpected exceptions; opt-out via CODEPLAIN_NO_TELEMETRY=1. No PII; spec/code locals scrubbed.
- Promo credits in --status — shows additive promo_credits from /status.
Improvements
- State-machine cleanup.
- Test updates for promo refactor + date-sensitive fix.
- Render-progress metadata on RunState (module/FRID/state) for crash reporting.
- Scrub raw X-API-Key from Sentry reports; added headers/x-api-key to denylist + recursive scrubbing.
v0.3.2
New release 🎉
Hello everyone! We are releasing a new version of codeplain - 0.3.2!
New features
- Friendly error when git is missing: codeplain now raises a clear
GitNotInstalledError("git is not installed. Please install git and try again.") instead of failing with a confusing import error on machines without git. - More linked resource checks during parsing:
.plainfile parsing now verifies that each linked resource target exists and is a file, surfacing a precise Plain syntax error early instead of failing deep in the render. - "Rendering canceled" post-render output: Canceling a render (e.g. by closing the TUI) now shows a distinct "— rendering canceled" summary, separate from the success (✓) and failure (✗) states.
Improvements
- TUI: removed empty space above the first row in the Test Scripts container for a tighter layout.
- Simplified Windows read-only file deletion using
shutil.rmtree.
Bug Fixes
- Fixed
--render-rangeignoring its upper bound, which could let the renderer continue past the requested range.