Skip to content

Releases: yottacore/shcl

v2.0.0

Choose a tag to compare

@jim-collier jim-collier released this 26 Aug 20:06

Major version bump. Two things change compatibly for some edge cases (that aren't currently in use):

  • Field names now resolve their escapes, so "a\"b" and 'a"b' are one field where they used to be two, and the C++ veneer's read_datetime returns the structured value every other binding's does, with the text form moving to read_datetime_str.

  • Canonical output also moves for a few things where the old output lost something or wouldn't settle, so a file reformatted by 2.0 can differ from the same file reformatted by 1.2.

Go consumers import github.com/jim-collier/shcl/source/go/v2; Rust and Python consumers change a version constraint and nothing else.

New: a file tier in every binding - load_file/save_file beside the text entry points, an atomic temp-file-and-rename write, and a load status that tells missing apart from unreadable and from parsed-with-errors. On top of it a save gate: save_file refuses to write a document that lost content on load, and save_file_lossy is the stated override. Also AuthoredName, the _or convenience tier, reopen: true in schemas, a man page and bash/zsh completions, --lossy and -v on the CLI, set --write creating a file that is not there yet, and installers that can uninstall. Windows executables carry the icon and version metadata, and release builds are reproducible on the pinned toolchain, so the published checksums can be re-derived rather than trusted.

Parsing takes less time and memory in every binding. A 100 MiB document went from 3.8 GB to 2.1 GB in Rust and from 7.0 GB to 3.0 GB in C, with byte-identical output.

Fixed:

  • Several round-trip bugs (a whitespace-only line inside a raw block

  • A raw block with no non-blank line growing an indent level on every pass

  • A trailing carriage-return run, merged output that was not a formatter fixpoint

  • The C binding following the host locale for numbers

  • The three ports disagreeing with the reference on a rare quoted-selector fallback

  • set --write deleting unreadable lines in silence

  • Windows in-place writes dropping ACLs and alternate data streams

  • The PowerShell wrapper needing PowerShell 7 (not a bug per-se).

Removed: go install .../source/go/cmd/shcl. The Go module is the library alone now; the Rust binary is the CLI this project distributes, and it is what the packages, the installers and cargo install shcl all deliver.

Releases are signed. shcl-2.0.0-sha256sums.txt.sig is a detached signature over the checksums file, and both install scripts verify it before trusting any checksum. The public key is at shcl-signing.pub in the repo.

See the changelog for the full list of changes since v1.2.0.

v1.2.0

Choose a tag to compare

@jim-collier jim-collier released this 05 Aug 01:51

Third stable release. Additive, with nothing source-breaking.

New: shcl about and shcl donate on the command line, each also spelled --about and --donate the way help and version already are. Also Lines(path), the plural of Line(path) - a repeated field, the case that most wants a citable line and the one the singular returns 0 for, now yields every binding's line in file order.

A schema fault no longer suppresses data validation wholesale. Faults are still reported first and still fail check --schema, but the constraints that parsed cleanly now check the document too, so a typo in one constraint cannot hide a real violation of another.

Fixed: a block header whose children were all commented out got those comments back one indent level shallow from the formatter, and the C command line treated an informational flag inside a --set-literal value as a request for that output.

Releases are signed. shcl-1.2.0-sha256sums.txt.sig is a detached signature over the checksums file, and both install scripts verify it before trusting any checksum. The public key is at shcl-signing.pub in the repo.

See the changelog for the full list of changes since v1.1.0.

v1.1.0

Choose a tag to compare

@jim-collier jim-collier released this 04 Aug 18:00

Second stable release, additive apart from two source-breaking items noted below.

New: name-position wildcards (indicators.*.period) in both lookups and schemas, schema fragments for reusable and recursive shapes, --set and --set-literal writes straight from the command line, Children, Line, QuoteSegment, WriteReason, a one-shot LoadAndValidate, and a footer on generated starter configs naming the format and pointing at its spec.

Two changes are source-breaking despite the minor version. generate gained a no_banner argument, so Rust, Go and C callers must pass it (Python and the C++ veneer default it). The C++ veneer's read_datetime_raw now returns Read<shcl::Datetime> rather than Read<shcl_datetime>, which fixes it handing back a pointer into a freed arena.

Releases are signed. shcl-1.1.0-sha256sums.txt.sig is a detached signature over the checksums file, and both install scripts verify it before trusting any checksum. The public key is at shcl-signing.pub in the repo.

See the changelog for the full list of changes since v1.0.0.

v1.0.0

Choose a tag to compare

@jim-collier jim-collier released this 28 Jul 20:45

First stable release. The language, the read and write APIs, and the diagnostic codes are now covered by semantic versioning.

Bindings are published: cargo add shcl, pip install shcl, and go get github.com/jim-collier/shcl/source/go. Versions move in lockstep across all of them.

Releases are signed. shcl-1.0.0-sha256sums.txt.sig is a detached signature over the checksums file, and both install scripts verify it before trusting any checksum. The public key is at shcl-signing.pub in the repo.

See the changelog for the full list of changes since v1.0.0-rc1.

v1.0.0-rc1

v1.0.0-rc1 Pre-release
Pre-release

Choose a tag to compare

@jim-collier jim-collier released this 26 Jul 21:45

First release candidate. Adds schema validation, layered loading, schema-driven config generation, and native packages, on top of the beta2 read/write surface.

Full notes: changelog.md

Verify a download against shcl-1.0.0-rc1-sha256sums.txt.

v1.0.0-beta2

v1.0.0-beta2 Pre-release
Pre-release

Choose a tag to compare

@jim-collier jim-collier released this 22 Jul 05:21

Added

  • Writer API in every binding (typed set_*, array and _default forms, set_raw, remove, comments, empty-doc constructor) plus a shcl set CLI subcommand driven by a tab-delimited ops script.
  • Comments are preserved through the canonical formatter as node trivia rather than being discarded.
  • Stable diagnostic codes (E###/H###) on check, printed as line N: severity: CODE on stdout with human prose on stderr.
  • Convenience read tier with whole-value fallbacks (get_*_or / default=) across the bindings.
  • --rawinfo accessor for a raw block's info string.
  • Per-slot statuses on wildcard array reads, plus --slots and per-slot --default on the CLI.

Changed

  • check exits nonzero whenever any error diagnostic is present, not only on strict-load failure.
  • Value options accept both --opt=VALUE and the space-separated --opt VALUE spelling; help and version are also accepted as subcommands.
  • Uniform behavior across bindings for broken-pipe exit, invalid argument encoding, and out-of-memory.
  • Dogfood install is now atomic (stage to a temp file in the destination, then rename over the target).

Fixed

  • Hex integer bounds now read i64::MIN correctly and reject out-of-range magnitudes.
  • Merge keys made injective so distinct arrays and raw blocks can no longer collide.
  • Large-document formatting no longer risks a stack overflow (iterative emit).

v1.0.0-beta1

v1.0.0-beta1 Pre-release
Pre-release

Choose a tag to compare

@jim-collier jim-collier released this 16 Jul 01:19

First tagged pre-release. See changelog.md.