Merged
Conversation
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>
…er visibility (PR #439)
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>
… 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>
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>
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.