Changelog

User-visible changes by release

=begin rakudoc

Overview

This changelog follows the shape of Keep a Changelog, adapted to Rakudoc. Versions use the META6.json version number and release tags use the release-x.y.z convention.

Unreleased

0.0.10 - 2026-08-08

Added

  • Optional pull/sink capability roles on format and location bases: ParsePull, RenderPull, SourcePull, and DestinationPush, using pull Iterator text chunks (and a destination sink for incremental writes).

  • Adaptor operators preserve streaming when both sides support pull, with whole-value (walkable) fallback otherwise. Pull render no longer forces a lazy Seq into a list.

  • File locations implement read-pull and open-sink-push.

  • Qwiratry::Format::NDJSONdemo reference format with whole-value and pull parse/render.

  • Generic WalkCursor / Sector / Axis (lib/WalkCursor.rakumod) and Qwiratry::QueryCursor with fetch-*/move-* movement; Tree plans expose .cursor; Strategy hooks accept optional WalkCursor :$cursor; Tree Navigators gain multi-step sector helpers and walk-local caches (invalidated on TreeRewrite via $*QWIRATRY-WALK-NAVIGATOR); Navigation Evaluator delegates ancestor / descendant / sibling helpers to those APIs; QueryCursor.iterator bridges to Plan.iterator.

  • Topic slang (Qwiratry::Query::Slang::Topic) injects lexical $_ into universe operators (โฉƒ / โฉ‚ / โŠ™ / โŠก / โˆ) and bare navigation prefixes, so given works under subtest without NQP caller digs. Load Topic after Qwiratry::Query::Slang (operator categoricals must settle first). Operator implementations live in Qwiratry::Query::Slang::Ops. See Other Extensions for extender notes.

  • TypedIterator (lib/TypedIterator.rakumod) adds .of for pull-stream element types (default Mu = untyped). File read-pull returns TypedIterator with .of = Str. Parse/Destination text adaptors reject non-text advertised .of and non-Str elements when .of is Mu (X::Qwiratry::IO::ElementType). QueryIterator does TypedIterator, so QueryCursor.iterator / Plan.iterator are TypedIterators (default .of = Mu).

Changed

  • Qwiratry::Query::Selector.is-type-object uses !DEFINITE so defined string name selectors are not treated as type objects (fixes demo-tree tree-child-results / descendant name matching on some Rakudo builds).

  • Walkable/pull/push rename of format and location base contracts: Parse/parse โ†’ ParseWalkable/parse-walkable, StreamingParse/parse-chunks โ†’ ParsePull/parse-pull, and the matching render/source/destination renames (see Streaming-Qwiratry-Proposal.md). Factory :type labels remain Parse/Render/Source/Destination.

0.0.9 - 2026-07-23

Added

  • The parse operator (โ†ฑ) slurps an IO::Handle left-hand side (such as $*IN) before invoking the format parser; the handle is left open.

  • Bare navigation operators (no LHS) use the caller topic $_, matching the documented sector behaviour. A missing or undefined topic is an error.

  • Selection alias ๐œธˆ, named navigation aliases (child, parent, descendant, attribute, data-root), and ancestor :reference support.

  • Universe-based set operators โฉƒ, โฉ‚, โŠ™, and โŠก, plus unary complement โˆ (universe from caller $_).

  • Equijoin โ–ท=โ—, natural join โ‰œ, and named join recall โ–ต via Qwiratry::Query::NamedJoins.

  • Following/preceding-sibling Int RHS counts how many sibling rows to return.

Changed

  • Set difference is canonical โŠŸ (U+229F), with โˆ– kept as an alias; set-difference complement is โŠก (U+22A1). Circled โŠ–/โŠ™ remain the symmetric-difference pair.

  • query-ast builds Qwiratry nodes for โŠ– and โ‰ก on Positional operands instead of losing to Raku core set/Bool dispatch.

0.0.8 - 2026-07-22

Fixed

  • Selection (ฯƒ) and reduce (โŒฟ) now bind bare topic blocks the same way map does: callables with .count = 1> receive the item argument, so predicates and reducers written as { ... } get a defined $_ instead of OUTER::<$_> (often Any).

0.0.7 - 2026-07-21

Added

  • Filesystem tree navigation for IO::Path directory roots returned by โฎณ, including a dedicated Qwiratry::Tree::Navigator::Filesystem.

  • Final-segment glob support for file locations, plus focused tests for filesystem navigation and tilde-expanded paths.

Changed

  • File locations now expand ~, ~/, and ~user/ paths, and source reads return IO::Path for directories instead of slurping them as text.

  • Query selector matching now understands basename globs and regexes for filesystem navigation, reusing the shared selector machinery.

Fixed

  • Navigation evaluators now resolve adaptor subjects before walking tree sectors, so chained source-then-navigation expressions work correctly.

  • Query slang ยป. now preserves MapOperator for explicit query-ast { ... } construction while plain evaluated data uses normal map behaviour.

  • Location errors now report the resolved filesystem path and current working directory, making relative-path failures easier to diagnose.

0.0.6 - 2026-07-02

Added

  • query-ast { ... } in query slang for building raw operator AST when planners, molds, or explicit runtime calls need unevaluated query trees.

  • Integration tests that query operators evaluate directly in normal use instead of returning OperatorBase AST nodes.

Changed

  • Query slang set, map-reduce, relational, and I/O operators now evaluate immediately and return Seq results or adaptor outcomes. Wrap expressions in query-ast { ... } to preserve AST construction.

  • Bumped Implementation::Loader dependency to 0.0.9+ so location backend discovery uses distribution provides keys.

  • Updated META6.json module description.

Fixed

  • Map-reduce evaluation treats Seq and Iterator subjects as collections, fixing I/O pipelines where upstream operators return lazy sequences.

  • Row rename evaluation uses DELETE-KEY instead of the non-existent Hash.delete method.

0.0.5 - 2026-06-30

Added

Add a release-time provides/package checker that compares META6.json's provides entries with the Fez bundle manifest or an existing archive. This catches cases where Fez's gitignore handling excludes files that still exist in the source tree, and updates the release process to run the check before publishing.

Changed

  • Add explicit URI scheme registration for location backends so file:// locations resolve to the discovered File backend rather than a lower-cased module name. This keeps backend lookup consistent whether callers provide a backend name directly or arrive through a URI scheme.

Fixed

  • Updated RakuAST tests to avoid say 1 * 3, which current Rakudo folds to say 3, so there is no infix node to find.

  • Fixed mixed mold when handling by recognizing topic hash-key predicates like .<value>:exists after query/predicate splitting, and preserving reliable topic invocation for manual Mold.new predicates.

0.0.4 - 2026-06-29

Added

  • givenroot $root { ... } syntax for temporarily binding the active query data root while evaluating navigation expressions.

  • A sigil-less root term for query code that needs to refer to the currently bound data root.

  • Type-object selectors for query navigation, allowing expressions such as RakuAST::IntLiteral and RakuAST::Call to match nodes directly by type.

  • Focused tests for data-root binding, type-object selectors, table foreign-key navigation with a bound data root, and RakuAST ancestor lookup.

Changed

  • Renamed the dynamic query origin concept to data root in the query slang runtime API and documentation.

  • Updated table navigation examples to use givenroot instead of the older query-origin helper style.

  • Expanded the release process documentation with install verification, clearer release step grouping, and explicit fez/GitHub verification steps.

Fixed

  • RakuAST ancestor navigation now falls back to origin-based parent lookup when a node exposes a parent method that returns Nil.

  • Descendant navigation now treats type objects as explicit selectors instead of ignoring them as non-path values.

0.0.3 - 2026-06-29

Added

  • RakuAST tree navigation support through Qwiratry::Tree::Navigator::RakuAST.

  • A dedicated tree navigator namespace, registry, and base role under Qwiratry::Tree::Navigator.

  • Documentation for adding tree navigators and for the release process.

Changed

  • Moved tree navigator discovery and registration out of Qwiratry::Format. Formats now stay focused on parse and render implementations.

  • RakuAST navigation no longer appears as a navigator-only format. It now lives under Qwiratry::Tree::Navigator::RakuAST.

  • Transformer default traversal now treats navigator-backed roots, including RakuAST roots, as trees instead of inline scalar values.

Fixed

  • Calling a transformer on a RakuAST root now walks descendant RakuAST nodes without requiring an explicit descendant query iterator.

0.0.2 - 2026-06-24

Changed

  • Aligned operator precedence documentation with the implemented query operators.

Fixed

  • Fixed local package installation behavior.

0.0.1 - 2026-06-24

Added

  • Initial public release of Qwiratry.

  • RakuAST-backed query operators and query slang for navigation, set, map-reduce, relational, and IO-style query expressions.

  • Tree and table walker infrastructure with lazy QueryIterator execution, walker planning, strategy hooks, and traversal context support.

  • Transformer and mold infrastructure, including mold matching, make, NextMold, wrapper hooks, ordering, traits, and tree rewrite support.

  • Table navigation support, schema discovery, ordered-row navigation, and foreign-key style relationship traversal.

  • Format, location, and IO implementation factories and demo parse/render formats.

  • Rakudoc documentation for the architecture, operators, extension points, and required Raku support.

Changed

  • Renamed the original template terminology to molds across the transformer system.

  • Reorganized modules into the current Qwiratry::Format, Qwiratry::Walker, Qwiratry::Strategy, Qwiratry::Transformer, and Qwiratry::Query namespaces.

  • Converted service-style modules to singleton facade classes where appropriate.

Fixed

  • Stabilized zef testing and test layout under t/.

  • Fixed lazy set operators, relation row equality, topic binding, wrapper collection, and iterator exhaustion behavior.

  • Improved mold diagnostics, exception placement, and package metadata.

=end rakudoc

Qwiratry v0.10.0

Declarative query and data-walking architecture for Raku, with transformers, molds, walkers, and I/O pipelines.

Authors

  • Tim Nelson

License

Dependencies

SlangifyImplementation::Loader:ver<0.0.9+>Glob::Grammar

Test Dependencies

Provides

  • Qwiratry
  • Qwiratry::Context
  • Qwiratry::Format
  • Qwiratry::Format::Base
  • Qwiratry::Format::CSVdemo
  • Qwiratry::Format::JSONdemo
  • Qwiratry::Format::NDJSONdemo
  • Qwiratry::Location
  • Qwiratry::Location::Base
  • Qwiratry::Location::File
  • Qwiratry::Mold
  • Qwiratry::Mold::Compiler
  • Qwiratry::Mold::Registry
  • Qwiratry::Mold::Slang
  • Qwiratry::Operator::Capability
  • Qwiratry::Operator::IO
  • Qwiratry::Operator::MapReduce
  • Qwiratry::Operator::Navigation
  • Qwiratry::Operator::Set
  • Qwiratry::Query::Evaluator::Eager
  • Qwiratry::Query::Evaluator::Filter
  • Qwiratry::Query::Evaluator::Join
  • Qwiratry::Query::Evaluator::Lazy
  • Qwiratry::Query::Evaluator::MapReduce
  • Qwiratry::Query::Evaluator::Navigation
  • Qwiratry::Query::Evaluator::Relational
  • Qwiratry::Query::Evaluator::Row
  • Qwiratry::Query::Evaluator::Set
  • Qwiratry::Query::Evaluator::Union
  • Qwiratry::Query::Extract
  • Qwiratry::Query::NamedJoins
  • Qwiratry::Query::RelationCommon
  • Qwiratry::Query::Runtime
  • Qwiratry::Query::Selector
  • Qwiratry::Query::Slang
  • Qwiratry::Query::Slang::Ops
  • Qwiratry::Query::Slang::Topic
  • Qwiratry::Query::Specificity
  • Qwiratry::Query::Topic
  • Qwiratry::QueryCursor
  • Qwiratry::QueryIterator
  • Qwiratry::QueryMatch
  • Qwiratry::Setup
  • Qwiratry::Strategy
  • Qwiratry::Strategy::ControlSignal
  • Qwiratry::Strategy::FinishResult
  • Qwiratry::Strategy::RewriteSpec
  • Qwiratry::Strategy::Traversal
  • Qwiratry::Suggest
  • Qwiratry::Table
  • Qwiratry::Table::Schema
  • Qwiratry::Transformer
  • Qwiratry::Transformer::Copy
  • Qwiratry::Transformer::TreeRewrite
  • Qwiratry::Tree::Navigator
  • Qwiratry::Tree::Navigator::Base
  • Qwiratry::Tree::Navigator::Filesystem
  • Qwiratry::Tree::Navigator::Match
  • Qwiratry::Tree::Navigator::RakuAST
  • Qwiratry::Tree::Replace
  • Qwiratry::Walker
  • Qwiratry::Walker::Capabilities
  • Qwiratry::Walker::Factory
  • Qwiratry::Walker::Implementation::Table
  • Qwiratry::Walker::Implementation::Tree
  • Qwiratry::Walker::Master
  • Qwiratry::Walker::Providing
  • TypedIterator
  • WalkCursor
  • X::Qwiratry

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.

Built with Podlite โ€” the markup and publishing tools behind this site.