Release History¶
This page mirrors the project CHANGELOG.md.
The format follows Keep a Changelog, and the project adheres
to Semantic Versioning.
Unreleased¶
Added¶
- Portable conformance testing across the reference modules.
kpointer-corenow drives its own tests from the portableconformance/syntax/*fixtures, andkpointer-adapterfromconformance/algorithm/*, each against its own public API. A green 100% koverGate on either module is therefore a proxy for "every branch is exercised by a portable fixture." The:kpointer-conformancemodule has been retired; its syntax/relative tests were already covered by:kpointer-core. - Public canonical error mapping. The mapping from
KPointerExceptionsubtypes (inkpointer-core) andKpaAccessErrorsubtypes (inkpointer-adapter) to canonicalerrorKindstrings is now public API ascanonicalErrorKind(), reused by the conformance runners. - Typed error taxonomy for conformance. A sealed
KPointerExceptionfamily (parse/relative) and a sealedKpaAccessErrorfamily (resolve/mutate), each subtype extending the standard-library exception it replaces so existingcatchsites are unaffected. Conformance fixtures gain a normativeerrorKindon everyerrorexpectation.KpaList.get(pointer)now returnsnull(absent) for an out-of-range index, matchingKpaStruct.get. RebuildableKpaStruct/RebuildableKpaListinterfaces, each extending their read-only counterpart with afactoryproperty. Themutate {}DSL now targets these interfaces, so calling.mutate {}on a read-only adapter (e.g. a ksoup adapter) is a compile error rather than a silent runtime mistake. Mutation-capable families (kxs, yamlkt) implement them; read-only ksoup implements the plain read interfaces.- Shared abstractions for adapter implementors:
BackedKpaElement<B>(singlebackingproperty plus arequireBacking<B>()unwrapper),AbstractKpaList<E>andAbstractKpaStructMap<E>(delegate the read members to a backing collection), andStringKpaPrimitive(fixes all type flags to the string case). See Writing a Custom Adapter. - Typed read-access extensions for
KpaStructandKpaList:stringAt,booleanAt,longAt,doubleAt,primitiveAt,structAt, andlistAt, each accepting aKPointeror aStringpath and returning the typed value ornullon absence/shape mismatch. kpointer-ksoupsynthetic accessors. An=-prefixed path-segment syntax for reaching text and markup (=ownText,=text,=wholeText,=wholeOwnText,=html,=outerHtml), forcing a child element (=child:NAME), and a shape-stable child list (=children:NAME), each with matching…Atextensions. Synthetic keys are resolvable by navigation but are not listed inkeys/toMap(). See Working with XML and HTML.- New
kpointer-ksoupmodule: read-only adapters exposing KSoup HTML/XML documents as pointer-addressableKpaStructtrees. Elements map to structs keyed by attribute names and distinct child tag names; attributes win on a clash; a repeated child tag becomes aKpaList. Text nodes and mutation are not supported in this release. Targets JVM, Android, iOS, Linux x64, and JS.
Changed¶
KpaStruct/KpaListno longer declarefactory; it moved to theRebuildable*sub-interfaces. The internal mutation helpers now thread the factory from the root, so nested elements need not be rebuildable.Rebuildable*.mutatenow returns theRebuildable*type, enabling chained mutations without a cast.kpointer-kxsandkpointer-yamlktadapter classes now implement theRebuildable*interfaces and extend the sharedAbstract*base classes, removing duplicated delegation boilerplate; theirtoJsonElement()/toYamlElement()conversions collapse to a singlerequireBacking(...)call.kpointer-ksoupadapters now implement the plain read interfaces and its string-only primitives extendStringKpaPrimitive; calling.mutate {}on a ksoup adapter is now a compile error.
0.2.0 — 2026-06-15¶
Added¶
KpaPrimitivegained typed accessors (isString,isBoolean,isNumber,isNull,stringOrNull,booleanOrNull,doubleOrNull,longOrNull) andrenderedString()for inspecting and unwrapping leaf values without depending on a concrete adapter type.- New
kpointer-yamlktmodule: adapters for YamlKtYamlMap,YamlList, andYamlPrimitive, enabling read and mutation via JSON Pointer. Primitive typing follows the YAML 1.2 core schema; non-literal map keys are filtered from pointer addressing. Targets JVM, Android, iOS, Linux x64, and JS — not wasmJs (YamlKt publishes no wasmJs artifact).
Changed¶
YamlPrimitiveAdapternow derivesisNumber,doubleOrNull, andlongOrNullfrom a singlenumericLiteralContenthelper — an internal change that preserves all observable semantics and lets:kpointer-yamlktclear the 100% coverage gate.
0.1.0 — 2026-06-14¶
Added¶
Initial release, after migration from the original cw-json project.