Changelog¶
All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¶
0.7.1 - 2026-04-22¶
Changed¶
- Shortened the
__init__.pyimodule docstring.
0.7.0 - 2026-04-22¶
Added¶
comment_inline,comment_before,blank_lines_beforeproperties onYamlScalar.loads/loads_all/iter_loads_allaccept UTF-8bytes/bytearray.YamlScalar.valueand.to_python()apply!!binaryand!!timestamptag handling.
Changed¶
- Breaking: per-key / per-index metadata accessors removed from
YamlMappingandYamlSequence; useparent.node(key).<field>instead. - Breaking: mixed Python / Rust layout — extension is now
yarutsk._yarutsk, stubs moved topython/yarutsk/__init__.pyi.
0.6.3 - 2026-04-20¶
Changed¶
pyo3/extension-moduleis now gated behind a cargo feature forcargo check/ IDE ergonomics.- Consolidated the scattered
Emitterimpl blocks insrc/core/emitter.rsinto a single block.
Fixed¶
DocumentationURL inpyproject.tomlnow points to the mkdocs site.
0.6.2 - 2026-04-19¶
Fixed¶
- Plain scalars containing
,[]{}inside flow containers are now quoted on emit.
0.6.1 - 2026-04-19¶
Fixed¶
- Plain scalars with leading or trailing whitespace are now quoted on emit so they survive round-trip; previously the parser stripped the surrounding whitespace and tab-only strings came back as
null.
0.6.0 - 2026-04-18¶
Breaking API refresh: every per-key/per-index accessor is now a get_/set_ pair.
Added¶
YamlSequence.node(index)andYamlSequence.nodes().get_scalar_style/set_scalar_style,get_container_style/set_container_styleonYamlMappingandYamlSequence.get_blank_lines_before/set_blank_lines_beforeonYamlMappingandYamlSequence.get_aliasonYamlMappingandYamlSequence(replacesalias_name).
Changed¶
set_container_styleraisesTypeErroron scalar children (previously silent no-op).
Removed¶
- Setter-only
scalar_style(key, style)andcontainer_style(key, style)— useset_scalar_style/set_container_style. - Overloaded
blank_lines_before,comment_inline,comment_before— use the explicitget_/set_pairs. alias_name— renamed toget_alias.- No-op
comments=andblank_lines=keyword arguments onYamlScalar.format(scalars have no comments or blank lines to reset).
0.5.4 - 2026-04-18¶
Changed¶
- Cache
datetime.datetime/datetime.dateimports for faster!!timestampround-trip. - Streaming parser buffer switched to
String+ byte cursor (less memory for ASCII). - Inline scalar emit skips the per-call
Stringallocation. - Sort comparators (
sort_keys,sort) issue one Python rich-compare per step instead of two.
Fixed¶
- UTF-8 codepoints straddling an 8 KB stream-chunk boundary no longer raise a decode error.
0.5.3 - 2026-04-18¶
Added¶
idempotent_emitfuzz target andhypothesisproperty tests forSchema.
Fixed¶
- Phantom blank lines before empty plain scalars (null sequence items, empty mapping keys) on re-parse.
- Percent-decoded tag characters now re-encoded on emit so whitespace, control chars, and non-ASCII in tags round-trip correctly.
- Inline comments after quoted scalars in sequences were silently dropped.
- Inline comments on null sequence items under a mapping value were misclassified as before-comments on re-parse.
0.5.2 - 2026-04-18¶
Changed¶
- Reduce
.clone()calls across builder, mapping, and sequence hot paths. - Enable
clippy::pedantic(warn) and fix its diagnostics.
0.5.1 - 2026-04-18¶
Fixed¶
- Quote plain scalars with value
---/...so they don't re-parse as document markers. - Indent root-level block scalar content so it doesn't collide with comment / document-marker syntax.
0.5.0 - 2026-04-18¶
Added¶
AnchorGuardRAII helper that clears thread-local anchor state on drop, protecting against leaks if emit paths panic or early-return.cargo-fuzzscaffold infuzz/withscanner,parser, androundtriptargets, plus aseed_corpus.shhelper that populates corpora fromyaml-test-suite. Not wired into CI — run locally withcargo +nightly fuzz run <target>.- Strict Ruff lint selection (
E,W,F,I,UP,B,SIM,RUF) and a[lints.clippy] all = "deny"entry inCargo.toml. CHANGELOG.md,CONTRIBUTING.md, issue/PR templates,.editorconfig, and adeny.tomlforcargo-deny(licenses, advisories, bans).- Dependabot configuration for weekly Cargo, pip, and GitHub Actions updates.
- MSRV declaration (
rust-version = "1.85") inCargo.toml. - Sdist build runs on every pull request, not just on tag push.
- MkDocs documentation site under
docs/, published to https://theyugin.github.io/yarutsk/ via a newDocsGitHub Actions workflow that builds on pull requests and deploys on version tags. docs/integrations.mdpage covering pydantic / msgspec / cattrs integration patterns (tag-based and whole-document).
Changed¶
- CI toolchain pinned to stable Rust (was
nightly) across all platform jobs and thematurin-actionwheel builds. - Per-document metadata in the
Builderconsolidated into a singleVec<DocMetadata>(previously four parallelVecs). - Emit helpers in
src/lib.rsextracted into a sharedextract_doc_and_metapath used by both string and stream emit, and bydump_all/dumps_all. README.mdminimised to a landing page — the authoritative reference is now the mkdocs site.CLAUDE.mdandCONTRIBUTING.mdsync-target guidance updated accordingly (editdocs/api.md+yarutsk.pyi, not the README, when changing the public API).- Prominent AI-authored notice moved to the top of the README and the docs landing page (previously a trailing
## Disclaimersection).
0.4.2 - 2026-04-18¶
Changed¶
- Replaced
to_dictwithto_python, which collapses anyYamlMapping,YamlSequence, orYamlScalarto plain Pythondict/list/primitive trees (dropping all style metadata).
0.4.1 - 2026-04-18¶
Changed¶
- Internal refactors to reduce line count; no behavioural changes.
0.4.0 - 2026-04-17¶
Added¶
- Revised direct-construction API for
YamlMapping,YamlSequence, andYamlScalar, allowing style metadata to be specified at construction time.
0.3.7 - 2026-04-17¶
Changed¶
- Broader accepted-input set for
dump/dumps/dump_all/dumps_all.
0.3.6 - 2026-04-17¶
Fixed¶
- Python stub file (
yarutsk.pyi) corrections.
0.3.5 - 2026-04-17¶
Changed¶
- Internal refactors; no behavioural changes.
0.3.4 - 2026-04-17¶
Added¶
- Streaming load/dump via Python IO objects (
load(stream),dump(doc, stream),iter_load_all(stream)).
0.3.3 - 2026-04-17¶
Fixed¶
- Various compatibility fixes.
0.3.2 - 2026-04-17¶
Fixed¶
- Self-referential structures no longer cause infinite recursion during serialisation.
0.3.1 - 2026-04-17¶
Added¶
- API additions for style manipulation.
0.3.0 - 2026-04-16¶
Changed¶
- Significant internal refactor of the Rust data model and PyO3 bindings.