djust 0.7.4rc1

Pre-releaseReleased

Documentation

  • Check-authoring guide + PR review checklist additions (v0.7.4, closes #1017, #1018, #1019, #1020) — four retro follow-ups from v0.7.2 + v0.7.3 milestones bundled into a single docs PR. New file docs/development/check-authoring.md documents two reusable patterns surfaced during the v0.7.x check-refinement work:

    • Whitespace-preserving redaction for line-number-aware regex scanners (canonical: _strip_verbatim_blocks from PR #1014). Reusable for any future check that scans template source as raw text and needs to ignore a region ({% verbatim %}, {% comment %}, <script>, fenced markdown blocks). Replace body with whitespace, preserve newlines for line-number accuracy.
    • Config-driven check scope helper extraction (canonical: _contrast_check_scope / _presets_to_check from PR #1015). When a check's behavior depends on a user-configurable scope, extract the decision into a named helper so the four-branch test seam (default / opt-in-all / missing-scope-target / unknown-value) is testable without dragging in the full Django settings stack. Documents the safe-default contract: unknown config values fall back to the signal-preserving option.

    PR review checklist (docs/PULL_REQUEST_CHECKLIST.md) gains two new bullets:

    • Misleading existing tests are part of the bug — when fixing a check, audit existing tests for fixtures that exemplify the broken behavior; update them, don't just add new tests alongside. Source: PR #1008 (issue #1003).
    • Framework-internal attrs filter sync — new framework-set attrs on LiveView / LiveComponent must be added to _FRAMEWORK_INTERNAL_ATTRS to prevent leakage into get_state(). Source: ADR-012 / issue #962 / PR #1002.

Fixed

  • py3.14 timing-sensitive CI flake class (v0.7.4, #1016) — two tests intermittently failed on the py3.14 CI runner only: python/tests/test_hotreload.py::TestHotReloadMessage::test_hotreload_slow_patch_warning (PR #1001 caught it once; passed on rerun) and python/tests/test_realtime_multiuser.py::TestPerformanceBaseline::test_broadcast_latency_scales[10] (PR #990 caught it once; passed on rerun). py3.12/3.13 passed both attempts in both cases. Two distinct fixes, one PR:

    • test_hotreload_slow_patch_warning: the original mock used a fixed 6-element times array indexed by time.time() call count. py3.14 introduced extra time.time() calls inside the asyncio scheduler path (some loop.time() chains delegate down), so the call count drifted past the array on py3.14 only, leaving every subsequent call returning the last array value (0.15) — which kept the elapsed delta at 0 and prevented the slow-patch warning from firing. Replaced with a phase-based scheme: first two calls return 0.0 (start + render-start), every subsequent call returns 0.15 (render-end / total-end). The slow-patch threshold (>100 ms) is crossed deterministically regardless of how many extra time.time() calls the scheduler injects.
    • test_broadcast_latency_scales: the dispatch-overhead-only budget was 10 ms. Bumped to 30 ms to absorb py3.14 runner contention variance while still catching genuine regressions (the linear-scaling check in test_presence_list_scales_linearly still catches algorithmic O(n) regressions; this test only covers constant-time dispatch overhead). Observed 12× over-budget on py3.14 in PR #990 CI; cleanly under 30 ms on every other recorded run.

    No new dependencies; both fixes are pure test-code changes.

All releases · Atom feed