Skip to content

0.9.10#463

Merged
peteromallet merged 50 commits intomainfrom
0.9.10
Mar 16, 2026
Merged

0.9.10#463
peteromallet merged 50 commits intomainfrom
0.9.10

Conversation

@peteromallet
Copy link
Copy Markdown
Owner

No description provided.

peteromallet and others added 30 commits March 14, 2026 12:35
The release notes contain a mascot image that renders as a broken
or unwanted image on the website. Strip HTML <p><img></p> blocks
from release body before rendering.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…-up scan

When running `desloppify review --import-run --scan-after-import`, the
follow-up scan was using _runtime_project_root() which could return a
contaminated path (pointing to the results directory instead of the
actual project root). This caused state to be written to the wrong
location. Instead, derive the project root from the state_file parameter
which is known to be correct: state_file.parent.parent gives us the
project root from `<root>/.desloppify/state-<lang>.json`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… clusters

_reset_cycle_for_force_rescan() was clearing plan_start_scores, which
made is_mid_cycle() return False. This caused auto_cluster_issues() to
run full cluster regeneration instead of early-returning, wiping manual
cluster items via issue ID reconciliation in scan_issue_reconcile.py.

The fix stops clearing plan_start_scores so is_mid_cycle() remains True
during force-rescan, preserving manual cluster data.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Auto-clusters (auto/unused, auto/security, etc.) were silently left in
backlog because the triage prompt said "silence means leave in backlog"
and the output schema had no field for auto-cluster decisions. Now the
triager must make an explicit promote/skip/break_up decision for each
auto-cluster, and apply_triage_to_plan() processes those decisions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…triage

The staged triage pipeline previously treated auto-clusters as optional in
the reflect stage ("silence means it stays in backlog"). This change makes
auto-cluster decisions mandatory, matching the treatment review issues get
via the Coverage Ledger.

Changes:
- Reflect instructions: require a ## Backlog Decisions section listing every
  auto-cluster with promote/skip/supersede (replaces "silence means leave")
- Organize instructions: clarify that ALL backlog decisions from reflect
  must be executed, not just promotions
- Reflect validation: parse and persist BacklogDecision entries; warn (but
  don't block) when auto-clusters exist without a Backlog Decisions section
- Organize validation: warn when reflect requested promotions that weren't
  executed during organize

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Unified triage pipeline:
- Widen is_triage_finding to all defects (mechanical + review + concern)
- Sub-group auto-clusters by rule kind (auto/security-B602 instead of auto/security)
- Add MEDIUM+LOW bandit filter and skip_tests config option
- Auto-cluster statistical summaries in triage prompt (severity, confidence, samples)
- Cluster-level observe sampling (ClusterVerdict parsing)
- Blocking backlog decisions validation (every auto-cluster must have a decision)
- Threshold-based staleness (10% mechanical growth, any new review issue)
- Two-tier accounting: review issues get per-item ledger, mechanical via cluster decisions
- Auto-add manual cluster members to queue_order on add_to_cluster

Display improvements:
- cluster show: steps now show effort tag, wrapped detail (4 lines), short refs
- cluster show: members compact when steps exist (ID list, not full issue detail)
- cluster list --verbose: effort summary column (3T 1S), hide empty auto-clusters, drop noise columns
- next: cluster drill header shows step done markers and effort tags
- next: individual task shows full untruncated step detail matched via issue_refs
- next: focus mode shows cluster context + relevant step detail

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add transition_messages config and directives CLI for phase-specific agent
instructions (model switching, constraints). Emit transition messages at
lifecycle phase changes across resolve, skip, reopen, review import, and
reconcile flows. Auto-focus cluster during mid-cluster execution so
desloppify next stays in context. Hermes reset includes cluster-aware
next-task instructions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
desloppify dev test-hermes: smoke-test Hermes model switching by switching
to a random model and back. Skill doc version bumped to v6.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Wrap git status call in try/except OSError so review coordinator doesn't
crash when git is unavailable. Remove unused triage_scoped_plan import
from stage_validation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…pdate website

Rewrite HERMES.md: delegate_task subagent pattern replaces worktree-based
parallel review. Add agent directives section to SKILL.md. Website:
initiative #2 now active with $1k bounty challenge details.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Maximilian Scholz <dev.scholz@mailbox.org>
Co-Authored-By: Maximilian Scholz <dev.scholz@mailbox.org>
Co-Authored-By: Nick Perkins <nick@nickperkins.au>
…ion (PR #435)

Co-Authored-By: Charles Dunda <charles.dunda@perchwell.com>
Co-Authored-By: Klaus Agnoletti <github@agnoletti.dk>
Co-Authored-By: Riccardo Spagni <ric@spagni.net>
Co-Authored-By: Tom <tswift1991@icloud.com>
Co-Authored-By: Tom <tswift1991@icloud.com>
Co-Authored-By: Tom Swift <tswift1991@icloud.com>
…hase

Fixes #441

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…overy

Fixes #442

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fixes #443

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…e naming, generalize install

Fixes #444, #445, #446

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… rust/tools.py

Follow-up to PR #440 (Rust inline-test filtering).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move the empty-queue guard from scan_queue_preflight into
score_display_mode() so ALL callers (status, plan nudge, next flow)
benefit from the fix, not just scan preflight.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PR #449 added an R anonymous function query pattern that captures @fn
but the extractor requires @name, silently skipping all anonymous
function matches. Fix the extractor to synthesize an "<anonymous>" name
when @name is absent but @func is present.

Original R spec contributed by sims1253 in PR #449.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… batch naming note

- Remove `allowed-tools` frontmatter from .agents/skills/desloppify/SKILL.md (#444)
- Add `pip install` fallback note alongside uvx in both copies (#446)
- Add batch output naming clarification (batch-N.raw.txt vs .json imports) (#445)
- Sync agent directives section and version bump to .agents copy

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…quoting

The previous fix pre-quoted the executable path, but the actual breakage was
in argument paths (-C repo_root, -o output_file) containing spaces. Pre-embedding
quotes in a subprocess list causes double-quoting because Popen's list2cmdline()
adds its own quotes.

The real issue: cmd /c concatenates everything after /c and re-parses it with its
own tokeniser. The fix introduces _wrap_cmd_c() which uses subprocess.list2cmdline()
to build the inner command as a single properly-quoted string, then passes that as
one token after /c: ["cmd", "/c", "codex exec -C \"path with spaces\" ..."].

- Revert incorrect executable pre-quoting in _resolve_executable
- Add _wrap_cmd_c() to properly collapse cmd /c commands
- Apply _wrap_cmd_c in codex_batch_command after building the full arg list
- Keep correct encoding="utf-8", errors="replace" fix in io.py
- Add tests for _wrap_cmd_c and Windows codex_batch_command path quoting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ults

Replace the 195-line merge approach (find_prior_run_merged_results +
overlay_retry_results_on_prior) with a ~5-line bypass: when --only-batches
selects a subset of the packet's batches, set allow_partial=True so the
coverage gate does not reject the partial retry.

The merge approach had multiple issues: wrong prior-run selection after
failed retry chains, dimension name normalization mismatches, and stale
metadata in combined output. The simpler fix recognizes that a partial
retry inherently cannot cover all dimensions, and the original run already
handled the rest.

Fixes #443

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
peteromallet and others added 20 commits March 16, 2026 21:48
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The .agents/skills/desloppify/SKILL.md is a generated file (same as
.claude/skills/). Canonical copies live under docs/.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
# Conflicts:
#	.agents/skills/desloppify/SKILL.md
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…pec/ support, README, tests (#462)

* feat(ruby): improve plugin — excludes, detect markers, default_src, README, tests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: OpenAI Codex <codex@openai.com>

* feat(ruby): add spec/ test dir, bin/ exclusion; expose external_test_dirs in generic_lang

- Add external_test_dirs and test_file_extensions parameters to generic_lang()
  so plugins can override the hardcoded ["tests", "test"] defaults
- Configure Ruby plugin with external_test_dirs=["spec", "test"] (RSpec + Minitest)
- Add bin/ to Ruby exclusions (binstubs/shims)
- Update tests: add bin/ to excluded dirs list, add test_external_test_dirs_includes_spec

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: OpenAI Codex <codex@openai.com>

* docs(ruby): add bin/ to exclusions list in README

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: OpenAI Codex <codex@openai.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Gemini <gemini@google.com>
Co-authored-by: OpenAI Codex <codex@openai.com>
- Add 'droid' to SKILL_TARGETS (.factory/skills/desloppify/SKILL.md)
- Add .factory/skills/ to SKILL_SEARCH_PATHS for auto-discovery
- Create docs/DROID.md overlay with review and triage workflow
- Bump SKILL_VERSION to 6
- Add droid to README agent prompt harness list
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Gemini <gemini@google.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
The command is `desloppify autofix`, not `desloppify fix` or
`desloppify scan --fix`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add #458, #459, #462 contributions from klausagnoletti.
Update stats to reflect final commit/file/test counts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…e unix formatter

The tool runner does not substitute {file_path} placeholders, so
stylelint was receiving literal "{file_path}" and failing silently.
Switch to glob patterns (matching every other plugin) and use
--formatter unix with the gnu parser, since stylelint's JSON output
doesn't match the expected json parser format.

Based on findings from @klausagnoletti in PR #452.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
# Conflicts:
#	desloppify/languages/_framework/generic_support/core.py
#	desloppify/languages/javascript/README.md
#	desloppify/languages/ruby/README.md
@peteromallet peteromallet merged commit d0d97d8 into main Mar 16, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants