v14.4.1
Patch. v14.4.0 was tagged while the qs_browser test layer was red — the
Phase DK/DL overnight refactors had fallout that an exit-247 watchdog
hang was masking. This cut fixes the user-facing App2 bugs that surfaced
and stabilizes the CI suite. No new features.
Fixed — App2 (self-hosted dashboards)
- Literal
'in descriptions. Sheet/visual descriptions with a
quoted code span (e.g. L1 Pending Aging's`status='Pending'`)
rendered a literal'instead of'._render_inline_markdown
over-escaped the apostrophe withhtml.escape(quote=True)before the
markdown pass, which python-markdown then re-escaped inside the code
span. Fixed viaquote=False(prose is text content, never an HTML
attribute). The DK.11 literal-entity scanner now also pierces
<code>/<pre>for the quote family so a recurrence fails a test. - Cross-sheet drills widen the destination date window again. Drilling
"View Transactions for this transfer" (Pending / Unbundled Aging,
Supersession Audit → Transactions) onto an OLD transfer landed on an
empty table — App2 was dropping the drill'sDrillStaticDateTime
date-widen writes (the assumption "App2's date filter defaults to all
rows" went false at the DK data-anchor refactor). App2 now applies
static-value drill writes, restoring App2↔QS parity.
Test / CI stabilization (Phase DP)
- Picker anchors + drill guardrails now exercise VALID rows instead of
_spine_plantplanted-error markers (which surfaced as picker anchors
and drill rows after DL.3's marker sweep), eliminating the exit-247
hang that had painted main red since the v14.4.0 cut. - The QS embed driver's empty-state read converts from a fixed 800ms
one-shot to a bounded paint-poll, fixing the flaky
dropdown_pickers_inverse_excludes_anchor[qs-*]restore step under
concurrent-worker load.
(The original DL.3 leaf-drift → Daily-Statement picker-shape fix — drill
writing account_id vs the picker's account_display — shipped in
v14.4.0; v14.4.1 fixes the regressions the same overnight sweep layered
on top, now guarded by the parametrized cross-sheet-drill suite.)