Download Latest Version v0.9.14 source code.zip (6.1 MB)
Email in envelope

Get an email when there's a new version of Desloppify

Home / v0.9.14
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-03-24 4.4 kB
v0.9.14 source code.tar.gz 2026-03-24 5.2 MB
v0.9.14 source code.zip 2026-03-24 6.1 MB
Totals: 3 Items   11.3 MB 2

Desloppify mascot

This release overhauls the plan/execute lifecycle — consolidating phase derivation into a single canonical function, fixing a force-rescan bug that re-queued completed subjective reviews, and simplifying the internal state machine from fine-grained phase names down to just plan and execute. Also fixes stale dashboard counts, graph normalization sampling, and Windows UTF-8 encoding issues.


64 files changed | 11 commits | 5,660 tests passing

Headline Feature

Lifecycle Consolidation

The plan/execute lifecycle — the state machine that decides whether you're planning work or executing it — has been significantly refactored for clarity and correctness:

  • Shared phase derivation — both the reconciliation pipeline and the work queue snapshot now delegate to a single derive_display_phase() pure function with a documented priority chain. Previously, two independent implementations had to be kept manually in sync.
  • Pure readercurrent_lifecycle_phase() no longer mutates plan data on read. Legacy phase name migration now runs once at plan-load time.
  • Marker invariants documented — the three scan-count markers that drive lifecycle transitions (lifecycle_phase, postflight_scan_completed_at_scan_count, subjective_review_completed_at_scan_count) are now documented with valid values, transitions, and single-writer functions.
  • No more bypass paths — snapshot phase resolution now routes all derivation through the shared function with no short-circuit returns.

This was driven by a recurring class of bugs where lifecycle markers got out of sync — most recently, force-rescan re-queuing completed subjective reviews.

Other Features

Score Checkpoint with Sparkline

plan_checkpoint progression events now include a sparkline showing score trajectory across checkpoints. This makes it easier to see at a glance whether the score is trending up or plateauing.

Simplified User-Facing Lifecycle

Users now see just "plan mode" and "execute mode" instead of internal phase names like workflow_postflight or triage_postflight. The communicate-score workflow step auto-resolves when no prior baseline exists, eliminating a confusing manual step on first use.

Bug Fixes

  • Force-rescan no longer resets subjective reviews — When --force-rescan ran during plan mode, the scan count increment caused subjective_review_completed_at_scan_count to go stale, re-queuing all 20 subjective reviews. The new carry_forward_subjective_review() promotes the marker when the old review matches the cycle being replaced.
  • Stale focus countsstatus, next, and scan commands now show current focus counts instead of stale cached values. Closes [#503].
  • Graph normalization samplingcheck_all_graph_keys now inspects all keys for normalization, not just the first 3. Previously, graphs with only late-position abnormal keys could pass validation. Closes [#502].
  • UTF-8 encoding for external tool reportsread_text() calls in jscpd_adapter.py, complexity.py, and test_coverage/io.py now specify encoding="utf-8" explicitly. On Windows, the system codepage default (cp1252) would crash when reports contained non-ASCII characters. Closes [#505], reported by @pietrondo.
  • Tree-sitter CI stability — Spec tests now skip gracefully when grammar files aren't available, instead of failing the entire suite.

Refactoring & Internal

  • Single-writer lifecycle enforcement — eliminated side-channel phase writes that could put the lifecycle into inconsistent states.
  • Legacy phase name removal — all fine-grained persisted phase names (review_initial, assessment_postflight, workflow_postflight, etc.) are now migrated to coarse plan/execute modes at load time.
  • Snapshot signal shaping — mode-aware suppression of postflight signals (assessment/workflow/triage/review) now lives in the caller (_phase_for_snapshot) rather than inside the shared delegation layer, keeping _derive_display_phase as a pure items-to-bools mapper.

Community

Thanks to @pietrondo for reporting the Windows UTF-8 encoding issue (#505).

Source: README.md, updated 2026-03-24