Skip to content

[Bug]: /speckit-converge is not idempotent — re-runs append duplicate remediation tasks #4269

Description

@jabelk

Version

spec-kit v1.0.1 (.claude/skills/speckit-converge/SKILL.md)

Description

/speckit-converge only checks that tasks.md exists before assessing the codebase and appending remediation tasks. It keeps no persisted evidence that /speckit-implement actually ran against the current task list, and it does not map its findings onto existing unchecked tasks before appending.

Two consequences:

  1. Invoked early (before implement has run, or after a partial implementation), it appends remediation tasks for work that is already represented by existing unchecked tasks — now under new IDs, splitting traceability for the same work across two task entries.
  2. Invoked twice (e.g. converge → partial fix → converge again), gaps found both times are appended both times.

Expected behavior

  • Converge verifies prerequisite state (an implementation checkpoint, or at minimum warns loudly when tasks.md contains unchecked tasks that overlap its findings).
  • Before appending, each finding is compared against existing unchecked tasks; covered work is reused/updated rather than duplicated, and only genuinely new gaps get new IDs.

Context

Found while upgrading a template fleet from 0.5.0 to v1.0.1 and reviewing the newly vendored command. Related in spirit to the duplicate-detection work in #2968, but on the tasks.md side rather than GitHub issues.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions