=begin rakudoc

=TITLE Changelog

=SUBTITLE User-visible changes by release

=head1 Overview

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

=head1 Unreleased

=head1 0.0.10 - 2026-08-08

=head2 Added

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

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

=item File locations implement C<read-pull> and C<open-sink-push>.

=item C<Qwiratry::Format::NDJSONdemo> reference format with whole-value and
pull parse/render.

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

=item Topic slang (L<Qwiratry::Query::Slang::Topic>) injects lexical C<$_> into
universe operators (C<⩃> / C<⩂> / C<⊙> / C<⊡> / C<∁>) and bare navigation
prefixes, so C<given> works under C<subtest> without NQP caller digs. Load Topic
B<after> L<Qwiratry::Query::Slang> (operator categoricals must settle first).
Operator implementations live in L<Qwiratry::Query::Slang::Ops>. See
L<Other Extensions|../Extending/Other-Extensions> for extender notes.

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

=head2 Changed

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

=item Walkable/pull/push rename of format and location base contracts:
C<Parse>/C<parse> → C<ParseWalkable>/C<parse-walkable>,
C<StreamingParse>/C<parse-chunks> → C<ParsePull>/C<parse-pull>,
and the matching render/source/destination renames (see
L<Streaming-Qwiratry-Proposal.md>). Factory C<:type> labels remain
C<Parse>/C<Render>/C<Source>/C<Destination>.

=head1 0.0.9 - 2026-07-23

=head2 Added

=item The parse operator (C<↱>) slurps an C<IO::Handle> left-hand side (such as
C<$*IN>) before invoking the format parser; the handle is left open.

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

=item Selection alias C<𜸈>, named navigation aliases (C<child>, C<parent>,
C<descendant>, C<attribute>, C<data-root>), and ancestor C<:reference> support.

=item Universe-based set operators C<⩃>, C<⩂>, C<⊙>, and C<⊡>, plus unary
complement C<∁> (universe from caller C<$_>).

=item Equijoin C<▷=◁>, natural join C<≜>, and named join recall C<▵> via
C<Qwiratry::Query::NamedJoins>.

=item Following/preceding-sibling C<Int> RHS counts how many sibling rows to
return.

=head2 Changed

=item Set difference is canonical C<⊟> (U+229F), with C<∖> kept as an alias;
set-difference complement is C<⊡> (U+22A1). Circled C<⊖>/C<⊙> remain the
symmetric-difference pair.

=item C<query-ast> builds Qwiratry nodes for C<⊖> and C<≡> on C<Positional>
operands instead of losing to Raku core set/Bool dispatch.

=head1 0.0.8 - 2026-07-22

=head2 Fixed

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

=head1 0.0.7 - 2026-07-21

=head2 Added

=item Filesystem tree navigation for C<IO::Path> directory roots returned by
C<⮳>, including a dedicated C<Qwiratry::Tree::Navigator::Filesystem>.

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

=head2 Changed

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

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

=head2 Fixed

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

=item Query slang C<».> now preserves C<MapOperator> for explicit
C<query-ast { ... }> construction while plain evaluated data uses normal map
behaviour.

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

=head1 0.0.6 - 2026-07-02

=head2 Added

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

=item Integration tests that query operators evaluate directly in normal use instead of
returning C<OperatorBase> AST nodes.

=head2 Changed

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

=item Bumped C<Implementation::Loader> dependency to C<0.0.9+> so location backend
discovery uses distribution C<provides> keys.

=item Updated C<META6.json> module description.

=head2 Fixed

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

=item Row rename evaluation uses C<DELETE-KEY> instead of the non-existent
C<Hash.delete> method.

=head1 0.0.5 - 2026-06-30

=head2 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.

=head2 Changed

=item 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.

=head2 Fixed

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

=item 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.

=head1 0.0.4 - 2026-06-29

=head2 Added

=item C<givenroot $root { ... }> syntax for temporarily binding the active
query data root while evaluating navigation expressions.

=item A sigil-less C<root> term for query code that needs to refer to the
currently bound data root.

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

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

=head2 Changed

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

=item Updated table navigation examples to use C<givenroot> instead of the older
query-origin helper style.

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

=head2 Fixed

=item RakuAST ancestor navigation now falls back to origin-based parent lookup
when a node exposes a C<parent> method that returns C<Nil>.

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

=head1 0.0.3 - 2026-06-29

=head2 Added

=item RakuAST tree navigation support through C<Qwiratry::Tree::Navigator::RakuAST>.

=item A dedicated tree navigator namespace, registry, and base role under
C<Qwiratry::Tree::Navigator>.

=item Documentation for adding tree navigators and for the release process.

=head2 Changed

=item Moved tree navigator discovery and registration out of C<Qwiratry::Format>.
Formats now stay focused on parse and render implementations.

=item RakuAST navigation no longer appears as a navigator-only format. It now
lives under C<Qwiratry::Tree::Navigator::RakuAST>.

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

=head2 Fixed

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

=head1 0.0.2 - 2026-06-24

=head2 Changed

=item Aligned operator precedence documentation with the implemented query
operators.

=head2 Fixed

=item Fixed local package installation behavior.

=head1 0.0.1 - 2026-06-24

=head2 Added

=item Initial public release of Qwiratry.

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

=item Tree and table walker infrastructure with lazy C<QueryIterator> execution,
walker planning, strategy hooks, and traversal context support.

=item Transformer and mold infrastructure, including mold matching, C<make>,
C<NextMold>, wrapper hooks, ordering, traits, and tree rewrite support.

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

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

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

=head2 Changed

=item Renamed the original template terminology to molds across the transformer
system.

=item Reorganized modules into the current C<Qwiratry::Format>,
C<Qwiratry::Walker>, C<Qwiratry::Strategy>, C<Qwiratry::Transformer>, and
C<Qwiratry::Query> namespaces.

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

=head2 Fixed

=item Stabilized zef testing and test layout under C<t/>.

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

=item Improved mold diagnostics, exception placement, and package metadata.

=end rakudoc
