Problem Statement
The fellowship-dev fork of spec-kit has drifted from upstream in ways that cause real defects: taskstoissues.md creates duplicate GitHub issues on re-runs, agents emit hooks without executing them, constitution.md scans the wrong file path, and the converge recovery command is missing entirely. These gaps silently degrade the reliability of spec-kit workflows across all consumer repos. An audit against upstream v0.16.1 (2026-08-10) identified 6 actionable cherry-picks.
User Stories
- As a fellowship-dev contributor running
/speckit.taskstoissues, I want duplicate issue detection so that re-running after tasks.md regeneration doesn't flood the issue tracker.
- As an agent executing a spec-kit command, I want mandatory hook enforcement text so that I actually run hooks rather than just emit the directive.
- As a fork maintainer, I want the
constitution.md path scanner to point at the installed location (.claude/commands/speckit.*) so constitution sync checks work correctly.
- As a developer whose implementation was interrupted, I want
/speckit.converge to assess and append remaining work so I can resume without losing track of what was already built.
Success Metrics
- 0 duplicate issues created on re-run of
/speckit.taskstoissues after tasks.md regeneration
- All 9 command templates include hook enforcement directive (verifiable by grep)
constitution.md path scanner references .claude/commands/speckit.* (not .specify/templates/)
speckit.converge command exists and produces an append-only ## Phase N: Convergence section
implement.md conditionally loads /memory/constitution.md in step 3
Measurable Impact
- Hypothesis: Implementing these template fixes will maintain the pr_merged rate and reduce time-to-merge by eliminating re-work caused by duplicate issues, missed hook execution, and interrupted implementations.
- Baseline: pr_merged: 98.6% (30d avg, n=577) | time_to_merge_hours: 4.06h (30d avg, n=569)
- Target: pr_merged: maintain ≥98% (guard against regression from template breakage). time_to_merge_hours: ≤3.5h (target 14% reduction via fewer re-work cycles and cleaner agent runs).
- Experiment plan: Monitor via outcomes API post-merge; link to relevant Phase 2 experiment if applicable.
- Eval criteria: Regression triggers auto-issue if pr_merged drops >3pp or time_to_merge_hours increases >20% after these template changes land.
Scope
In Scope
- HIGH: Add
templates/commands/converge.md and presets/lean/commands/speckit.converge.md (≤40 lines)
- HIGH: Add
list_issues deduplication to templates/commands/taskstoissues.md
- MEDIUM: Add conditional constitution read to step 3 of
templates/commands/implement.md
- MEDIUM: Add hook enforcement directive after each hook block in all 9
templates/commands/*.md files
- MEDIUM: Fix command file path in
templates/commands/constitution.md to .claude/commands/speckit.*
- LOW: Add
branch_numbering → feature_numbering deprecation warning in init-options.json or docs
Out of Scope
- Python CLI changes (excluded by prior decision — this fork is Claude-native only)
- Outbound contribution PRs to
github/spec-kit (listed as opportunities, not action items)
- Consumer repo updates — handled by weekly drift-check automation
- Auto-merging any upstream changes without manual CTO review
Technical Requirements
converge.md must be append-only: reads spec.md, plan.md, tasks.md; appends a ## Phase N: Convergence section; makes no code changes
converge.md must flag constitution violations as CRITICAL severity and hand off to implement or PR review
taskstoissues.md deduplication uses list_issues with cursor-paginated perPage: 100; task ID match regex is \bT\d{3}\b
implement.md constitution read is strictly conditional: IF EXISTS /memory/constitution.md; insert at step 3 only
- Hook enforcement text is added after the existing one-liner, not replacing it
presets/lean/commands/speckit.converge.md must be ≤40 lines per fork convention
init-options.json deprecation warning must not touch any Python source code
Implementation Constraints
Anti-patterns
- Do NOT copy Python CLI code from upstream — this fork is Claude-native only
- Do NOT modify
presets/lean/commands/ for the hook enforcement item (standard templates only)
- Do NOT create
taskstoissues.md in the lean preset (it does not exist there)
- Do NOT treat the "Contribution opportunities" section as work items for this issue
- Do NOT push directly to main — every cherry-pick must be a PR for CTO review
- Do NOT modify consumer repos; those are handled by the weekly drift-check automation
Scope fences
speckit.converge: only create templates/commands/converge.md and presets/lean/commands/speckit.converge.md
taskstoissues.md dedup: only modify templates/commands/taskstoissues.md
implement.md constitution: only modify templates/commands/implement.md, step 3
- Hook enforcement: only modify the 9 files in
templates/commands/ (analyze.md, checklist.md, clarify.md, constitution.md, implement.md, plan.md, specify.md, tasks.md, taskstoissues.md)
constitution.md path: only modify the one path reference in templates/commands/constitution.md
branch_numbering: only modify init-options.json or docs; no Python code
Patterns to follow
Testing Strategy
Prerequisites
Pre-merge Verification
Post-merge Verification
Dependencies
Open Questions
- PR granularity: Should the 6 items ship as one bundled PR or separate PRs per priority tier? Recommend two PRs (HIGH items first, then MEDIUM+LOW), but CTO decides before dispatch.
Implementation Notes
Each cherry-pick is a targeted markdown edit. Agents should start from the specific file in the scope fence, read only that file plus any referenced pattern file, and stop. Do not investigate callers, do not refactor surrounding content.
Upstream PRs are references for intent, not for copy-paste. Read the action description in this issue, not the upstream diff — upstream may include Python changes that are excluded here.
Problem Statement
The fellowship-dev fork of spec-kit has drifted from upstream in ways that cause real defects:
taskstoissues.mdcreates duplicate GitHub issues on re-runs, agents emit hooks without executing them,constitution.mdscans the wrong file path, and theconvergerecovery command is missing entirely. These gaps silently degrade the reliability of spec-kit workflows across all consumer repos. An audit against upstream v0.16.1 (2026-08-10) identified 6 actionable cherry-picks.User Stories
/speckit.taskstoissues, I want duplicate issue detection so that re-running after tasks.md regeneration doesn't flood the issue tracker.constitution.mdpath scanner to point at the installed location (.claude/commands/speckit.*) so constitution sync checks work correctly./speckit.convergeto assess and append remaining work so I can resume without losing track of what was already built.Success Metrics
/speckit.taskstoissuesaftertasks.mdregenerationconstitution.mdpath scanner references.claude/commands/speckit.*(not.specify/templates/)speckit.convergecommand exists and produces an append-only## Phase N: Convergencesectionimplement.mdconditionally loads/memory/constitution.mdin step 3Measurable Impact
Scope
In Scope
templates/commands/converge.mdandpresets/lean/commands/speckit.converge.md(≤40 lines)list_issuesdeduplication totemplates/commands/taskstoissues.mdtemplates/commands/implement.mdtemplates/commands/*.mdfilestemplates/commands/constitution.mdto.claude/commands/speckit.*branch_numbering→feature_numberingdeprecation warning ininit-options.jsonor docsOut of Scope
github/spec-kit(listed as opportunities, not action items)Technical Requirements
converge.mdmust be append-only: readsspec.md,plan.md,tasks.md; appends a## Phase N: Convergencesection; makes no code changesconverge.mdmust flag constitution violations as CRITICAL severity and hand off toimplementor PR reviewtaskstoissues.mddeduplication useslist_issueswith cursor-paginatedperPage: 100; task ID match regex is\bT\d{3}\bimplement.mdconstitution read is strictly conditional:IF EXISTS /memory/constitution.md; insert at step 3 onlypresets/lean/commands/speckit.converge.mdmust be ≤40 lines per fork conventioninit-options.jsondeprecation warning must not touch any Python source codeImplementation Constraints
Anti-patterns
presets/lean/commands/for the hook enforcement item (standard templates only)taskstoissues.mdin the lean preset (it does not exist there)Scope fences
speckit.converge: only createtemplates/commands/converge.mdandpresets/lean/commands/speckit.converge.mdtaskstoissues.mddedup: only modifytemplates/commands/taskstoissues.mdimplement.mdconstitution: only modifytemplates/commands/implement.md, step 3templates/commands/(analyze.md, checklist.md, clarify.md, constitution.md, implement.md, plan.md, specify.md, tasks.md, taskstoissues.md)constitution.mdpath: only modify the one path reference intemplates/commands/constitution.mdbranch_numbering: only modifyinit-options.jsonor docs; no Python codePatterns to follow
presets/lean/commands/speckit.implement.md(canonical ≤40-line pattern)Run hooks.X from .specify/extensions.yml if present.\bT\d{3}\b(upstream PR fix(taskstoissues): skip tasks that already have a GitHub issue github/spec-kit#2992)Testing Strategy
Prerequisites
Pre-merge Verification
templates/commands/converge.mdexists and is valid markdownpresets/lean/commands/speckit.converge.mdexists and is ≤40 linesspec.md,plan.md, or source code)spec.md,plan.md,tasks.mdin context steptaskstoissues.mdfrontmatter includeslist_issuesin tools listtaskstoissues.mdperPage: 100; regex is\bT\d{3}\bimplement.mdstep 3 includesIF EXISTS /memory/constitution.mdconditional (steps 1–2 unchanged)templates/commands/*.mdfiles have enforcement text after each hook blockpresets/lean/commands/is NOT modified for hook enforcementconstitution.mdreferences.claude/commands/speckit.*(not.specify/templates/commands/*.md)init-options.jsonincludes deprecation warning forbranch_numbering; no Python code changedPost-merge Verification
/speckit.convergein a repo with partially-implementedtasks.md; confirm append-only## Phase N: Convergencesection/speckit.taskstoissuesin a repo with existing issues; confirm no duplicate issues createdDependencies
/speckit.implementto enforce governance during implementation github/spec-kit#2460 (implement constitution), fix(extensions): make mandatory-hook dispatch contract self-contained github/spec-kit#2901 (hook enforcement), fix(templates): point constitution sync checklist at installed command files github/spec-kit#3418 (constitution path)docs/upstream-improvements-2026-07-20.md,docs/upstream-sync-recommendations.md(2026-07-27)Open Questions
Implementation Notes
Each cherry-pick is a targeted markdown edit. Agents should start from the specific file in the scope fence, read only that file plus any referenced pattern file, and stop. Do not investigate callers, do not refactor surrounding content.
Upstream PRs are references for intent, not for copy-paste. Read the action description in this issue, not the upstream diff — upstream may include Python changes that are excluded here.