You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(cline): keep .md extension on speckit.* file names in command bodies - #5168
For Cline extension/preset commands, _hyphenate_body_refs (and _hyphenate_frontmatter_refs) rewrite every speckit.<a>.<b> token. A file name such as speckit.git.commit.md matches as a reference, so .specify/extensions/git/commands/speckit.git.commit.md becomes .../speckit-git-commit-md (extension lost).
Fix
Both helpers now share one compiled pattern and a small replacer that leaves a match ending in .md unchanged. Command references such as /speckit.git.commit are still hyphenated.
Evidence
Added test_cline_body_refs_keep_md_file_names and test_cline_frontmatter_refs_keep_md_file_names in tests/integrations/test_integration_cline.py.
Implemented by Grok Bot (an AI coding agent) acting on behalf of @kevin9327, running autonomously; model unknown/not exposed to the agent. Extent: code generation, tests, and this description. The commit carries an Assisted-by: trailer. I ran the tests above locally.
Cline's dot-to-hyphen rewrite matched `speckit.git.commit.md` as a command
reference and produced `speckit-git-commit-md`, dropping the extension.
Leave matches that end in `.md` untouched in both body and frontmatter.
Fixesgithub#5097
Assisted-by: Grok Bot (model: unknown, autonomous)
Signed-off-by: kevin9327 <[email protected]>
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
A moderate active issue remains because the .md suffix check misclassifies valid command references such as /speckit.foo.md, leaving required transformations incorrect in both body and frontmatter without a regression test.
This pull request updates Cline reference rewriting so command filenames ending in .md retain their extension while dotted command references remain hyphenated.
Changes:
Shares compiled matching and replacement logic for body and frontmatter references.
Preserves .md-suffixed command filenames.
Adds regression tests for body and frontmatter handling.
File
Summary
tests/integrations/test_integration_cline.py
Adds regression coverage for preserving .md command filenames in body and frontmatter references.
src/specify_cli/agents.py
Centralizes Cline reference rewriting, but the .md suffix check also leaves valid command references such as /speckit.foo.md unchanged; this requires a context-aware distinction.
A speckit.<ext>.md token is a command reference unless it has more
segments than a command can have or sits inside a path.
Assisted-by: Grok Bot (model: unknown, autonomous)
Signed-off-by: kevin9327 <[email protected]>
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
An active moderate issue remains because dotted preset command names can be misclassified as filenames, producing incorrect Cline references without a regression test.
Preset command names may contain dots, so speckit.foo.bar.md can be a
valid command whose last segment is md. The segment count therefore
cannot identify a file name. Keep a .md token unchanged only when it sits
inside a path; hyphenate bare and slash-prefixed tokens.
Assisted-by: Grok Bot (model: unknown, autonomous)
Signed-off-by: kevin9327 <[email protected]>
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
An active moderate finding remains because bracketed slash-prefixed references are still transformed incorrectly, affecting body and frontmatter processing.
No open issues 🎉
1 previously missed issue
In code that hasn't changed since last review
Handle bracketed slash command references
src/specify_cli/agents.py:118
The slash-prefixed command rule still fails when the reference is immediately preceded by a Markdown [ (for example [/speckit.foo.md]): text[start - 2] is [ here, so this branch returns the dotted token unchanged instead of producing /speckit-foo-md. This can affect both body and recursively processed frontmatter strings; treat bracketed command delimiters as command context (or use an explicit path check) and add a regression case.
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
triage-must-haveVerdict: high-value, important work for Spec Kit — do first
3 participants
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.
Fixes #5097
Problem
For Cline extension/preset commands,
_hyphenate_body_refs(and_hyphenate_frontmatter_refs) rewrite everyspeckit.<a>.<b>token. A file name such asspeckit.git.commit.mdmatches as a reference, so.specify/extensions/git/commands/speckit.git.commit.mdbecomes.../speckit-git-commit-md(extension lost).Fix
Both helpers now share one compiled pattern and a small replacer that leaves a match ending in
.mdunchanged. Command references such as/speckit.git.commitare still hyphenated.Evidence
test_cline_body_refs_keep_md_file_namesandtest_cline_frontmatter_refs_keep_md_file_namesintests/integrations/test_integration_cline.py.mainboth fail; with this change both pass.pytest tests/integrations tests/test_extensions.py: 3632 passed, 8 skipped.AI disclosure
Implemented by Grok Bot (an AI coding agent) acting on behalf of @kevin9327, running autonomously; model unknown/not exposed to the agent. Extent: code generation, tests, and this description. The commit carries an
Assisted-by:trailer. I ran the tests above locally.