3.11.20
release: v3.11.20 — Frond filter + property access chain fix
Templates like {{ details | first.groupSummary }} were handing the
whole string "first.groupSummary" to the filter lookup, finding
nothing, and silently returning the unfiltered input. The
.groupSummary property access was lost.
Fix: before applying a filter segment, split on the first . that
sits outside parens + quotes. The part before is the filter call
(with any args), the part after is a property path resolved on the
filter result via a synthetic context so we reuse _eval_expr's
dotted + bracket resolution rather than writing a second traversal.
New helper _split_filter_name_and_path() tracks paren/bracket/
brace depth and quote state so filter-argument dots and format-
string dots don't false-split.
Applied at all three filter-application sites: the main
_eval_var_inner path, the autoescape-off _no_escape_eval_var path,
and the apply-filters-to-value utility.
Parity release with tina4-php 3.11.21. 4 regression tests mirror
the PHP suite's coverage: single property, chained property,
last-filter aggregator, and dots-in-args guard.
Full suite: 2300 pass, 28 skipped.