Skip to content

Commit 79328aa

Browse files
authored
Merge pull request #958 from DasBen/feature/add-markdownlint
feat(ci): add markdownlint-cli2 for consistent markdown formatting
2 parents f3ada74 + f790319 commit 79328aa

28 files changed

+247
-173
lines changed

.github/workflows/lint.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: Lint
2+
3+
on:
4+
push:
5+
branches: ["main"]
6+
pull_request:
7+
8+
jobs:
9+
markdownlint:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Checkout
13+
uses: actions/checkout@v4
14+
15+
- name: Run markdownlint-cli2
16+
uses: DavidAnson/markdownlint-cli2-action@v19
17+
with:
18+
globs: '**/*.md'

.markdownlint-cli2.jsonc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
// https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md
3+
"config": {
4+
"default": true,
5+
"MD003": {
6+
"style": "atx"
7+
},
8+
"MD007": {
9+
"indent": 2
10+
},
11+
"MD013": false,
12+
"MD024": {
13+
"siblings_only": true
14+
},
15+
"MD033": false,
16+
"MD041": false,
17+
"MD049": {
18+
"style": "asterisk"
19+
},
20+
"MD050": {
21+
"style": "asterisk"
22+
}
23+
}
24+
}

AGENTS.md

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,14 @@ AGENT_CONFIG = {
6868
```
6969

7070
**Key Design Principle**: The dictionary key should match the actual executable name that users install. For example:
71+
7172
- ✅ Use `"cursor-agent"` because the CLI tool is literally called `cursor-agent`
7273
- ❌ Don't use `"cursor"` as a shortcut if the tool is `cursor-agent`
7374

7475
This eliminates the need for special-case mappings throughout the codebase.
7576

7677
**Field Explanations**:
78+
7779
- `name`: Human-readable display name shown to users
7880
- `folder`: Directory where agent-specific files are stored (relative to project root)
7981
- `install_url`: Installation documentation URL (set to `None` for IDE-based agents)
@@ -102,12 +104,14 @@ Update the **Supported AI Agents** section in `README.md` to include the new age
102104

103105
Modify `.github/workflows/scripts/create-release-packages.sh`:
104106

105-
##### Add to ALL_AGENTS array:
107+
##### Add to ALL_AGENTS array
108+
106109
```bash
107110
ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf q)
108111
```
109112

110-
##### Add case statement for directory structure:
113+
##### Add case statement for directory structure
114+
111115
```bash
112116
case $agent in
113117
# ... existing cases ...
@@ -131,14 +135,16 @@ gh release create "$VERSION" \
131135

132136
#### 5. Update Agent Context Scripts
133137

134-
##### Bash script (`scripts/bash/update-agent-context.sh`):
138+
##### Bash script (`scripts/bash/update-agent-context.sh`)
135139

136140
Add file variable:
141+
137142
```bash
138143
WINDSURF_FILE="$REPO_ROOT/.windsurf/rules/specify-rules.md"
139144
```
140145

141146
Add to case statement:
147+
142148
```bash
143149
case "$AGENT_TYPE" in
144150
# ... existing cases ...
@@ -151,14 +157,16 @@ case "$AGENT_TYPE" in
151157
esac
152158
```
153159

154-
##### PowerShell script (`scripts/powershell/update-agent-context.ps1`):
160+
##### PowerShell script (`scripts/powershell/update-agent-context.ps1`)
155161

156162
Add file variable:
163+
157164
```powershell
158165
$windsurfFile = Join-Path $repoRoot '.windsurf/rules/specify-rules.md'
159166
```
160167

161168
Add to switch statement:
169+
162170
```powershell
163171
switch ($AgentType) {
164172
# ... existing cases ...
@@ -200,13 +208,15 @@ elif selected_ai == "windsurf":
200208
**CRITICAL**: When adding a new agent to AGENT_CONFIG, always use the **actual executable name** as the dictionary key, not a shortened or convenient version.
201209

202210
**Why this matters:**
211+
203212
- The `check_tool()` function uses `shutil.which(tool)` to find executables in the system PATH
204213
- If the key doesn't match the actual CLI tool name, you'll need special-case mappings throughout the codebase
205214
- This creates unnecessary complexity and maintenance burden
206215

207216
**Example - The Cursor Lesson:**
208217

209218
**Wrong approach** (requires special-case mapping):
219+
210220
```python
211221
AGENT_CONFIG = {
212222
"cursor": { # Shorthand that doesn't match the actual tool
@@ -222,6 +232,7 @@ if agent_key == "cursor":
222232
```
223233

224234
**Correct approach** (no mapping needed):
235+
225236
```python
226237
AGENT_CONFIG = {
227238
"cursor-agent": { # Matches the actual executable name
@@ -234,6 +245,7 @@ AGENT_CONFIG = {
234245
```
235246

236247
**Benefits of this approach:**
248+
237249
- Eliminates special-case logic scattered throughout the codebase
238250
- Makes the code more maintainable and easier to understand
239251
- Reduces the chance of bugs when adding new agents
@@ -289,6 +301,7 @@ echo "✅ Done"
289301
### CLI-Based Agents
290302

291303
Require a command-line tool to be installed:
304+
292305
- **Claude Code**: `claude` CLI
293306
- **Gemini CLI**: `gemini` CLI
294307
- **Cursor**: `cursor-agent` CLI
@@ -298,13 +311,16 @@ Require a command-line tool to be installed:
298311
- **CodeBuddy CLI**: `codebuddy` CLI
299312

300313
### IDE-Based Agents
314+
301315
Work within integrated development environments:
316+
302317
- **GitHub Copilot**: Built into VS Code/compatible editors
303318
- **Windsurf**: Built into Windsurf IDE
304319

305320
## Command File Formats
306321

307322
### Markdown Format
323+
308324
Used by: Claude, Cursor, opencode, Windsurf, Amazon Q Developer
309325

310326
```markdown
@@ -316,6 +332,7 @@ Command content with {SCRIPT} and $ARGUMENTS placeholders.
316332
```
317333

318334
### TOML Format
335+
319336
Used by: Gemini, Qwen
320337

321338
```toml
@@ -337,6 +354,7 @@ Command content with {SCRIPT} and {{args}} placeholders.
337354
## Argument Patterns
338355

339356
Different agents use different argument placeholders:
357+
340358
- **Markdown/prompt-based**: `$ARGUMENTS`
341359
- **TOML-based**: `{{args}}`
342360
- **Script placeholders**: `{SCRIPT}` (replaced with actual script path)
@@ -372,4 +390,3 @@ When adding new agents:
372390
---
373391

374392
*This documentation should be updated whenever new agents are added to maintain accuracy and completeness.*
375-

CHANGELOG.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6363

6464
- New `/clarify` command template to surface up to 5 targeted clarification questions for an existing spec and persist answers into a Clarifications section in the spec.
6565
- New `/analyze` command template providing a non-destructive cross-artifact discrepancy and alignment report (spec, clarifications, plan, tasks, constitution) inserted after `/tasks` and before `/implement`.
66-
- Note: Constitution rules are explicitly treated as non-negotiable; any conflict is a CRITICAL finding requiring artifact remediation, not weakening of principles.
66+
- Note: Constitution rules are explicitly treated as non-negotiable; any conflict is a CRITICAL finding requiring artifact remediation, not weakening of principles.
6767

6868
## [0.0.16] - 2025-09-22
6969

@@ -140,7 +140,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
140140
- Updated command instructions in the CLI.
141141
- Cleaned up the code to not render agent-specific information when it's generic.
142142

143-
144143
## [0.0.6] - 2025-09-17
145144

146145
### Added
@@ -166,4 +165,3 @@ N/A
166165
### Changed
167166

168167
N/A
169-

CODE_OF_CONDUCT.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,21 @@ orientation.
1414
Examples of behavior that contributes to creating a positive environment
1515
include:
1616

17-
* Using welcoming and inclusive language
18-
* Being respectful of differing viewpoints and experiences
19-
* Gracefully accepting constructive criticism
20-
* Focusing on what is best for the community
21-
* Showing empathy towards other community members
17+
- Using welcoming and inclusive language
18+
- Being respectful of differing viewpoints and experiences
19+
- Gracefully accepting constructive criticism
20+
- Focusing on what is best for the community
21+
- Showing empathy towards other community members
2222

2323
Examples of unacceptable behavior by participants include:
2424

25-
* The use of sexualized language or imagery and unwelcome sexual attention or
25+
- The use of sexualized language or imagery and unwelcome sexual attention or
2626
advances
27-
* Trolling, insulting/derogatory comments, and personal or political attacks
28-
* Public or private harassment
29-
* Publishing others' private information, such as a physical or electronic
27+
- Trolling, insulting/derogatory comments, and personal or political attacks
28+
- Public or private harassment
29+
- Publishing others' private information, such as a physical or electronic
3030
address, without explicit permission
31-
* Other conduct which could reasonably be considered inappropriate in a
31+
- Other conduct which could reasonably be considered inappropriate in a
3232
professional setting
3333

3434
## Our Responsibilities

CONTRIBUTING.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## Contributing to Spec Kit
1+
# Contributing to Spec Kit
22

33
Hi there! We're thrilled that you'd like to contribute to Spec Kit. Contributions to this project are [released](https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license) to the public under the [project's open source license](LICENSE).
44

@@ -125,4 +125,3 @@ Please be respectful to maintainers and disclose AI assistance.
125125
- [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)
126126
- [Using Pull Requests](https://help.github.com/articles/about-pull-requests/)
127127
- [GitHub Help](https://help.github.com)
128-

README.md

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<div align="center">
2-
<img src="./media/logo_small.webp"/>
2+
<img src="./media/logo_small.webp" alt="Spec Kit Logo"/>
33
<h1>🌱 Spec Kit</h1>
44
<h3><em>Build high-quality software faster.</em></h3>
55
</div>
@@ -253,7 +253,7 @@ Additional commands for enhanced quality and validation:
253253

254254
Spec-Driven Development is a structured process that emphasizes:
255255

256-
- **Intent-driven development** where specifications define the "_what_" before the "_how_"
256+
- **Intent-driven development** where specifications define the "*what*" before the "*how*"
257257
- **Rich specification creation** using guardrails and organizational principles
258258
- **Multi-step refinement** rather than one-shot code generation from prompts
259259
- **Heavy reliance** on advanced AI model capabilities for specification interpretation
@@ -383,7 +383,7 @@ This step creates or updates the `.specify/memory/constitution.md` file with you
383383
With your project principles established, you can now create the functional specifications. Use the `/speckit.specify` command and then provide the concrete requirements for the project you want to develop.
384384

385385
>[!IMPORTANT]
386-
>Be as explicit as possible about _what_ you are trying to build and _why_. **Do not focus on the tech stack at this point**.
386+
>Be as explicit as possible about *what* you are trying to build and *why*. **Do not focus on the tech stack at this point**.
387387
388388
An example prompt:
389389

@@ -417,16 +417,16 @@ At this stage, your project folder contents should resemble the following:
417417
```text
418418
└── .specify
419419
├── memory
420-
└── constitution.md
420+
└── constitution.md
421421
├── scripts
422-
├── check-prerequisites.sh
423-
├── common.sh
424-
├── create-new-feature.sh
425-
├── setup-plan.sh
426-
└── update-claude-md.sh
422+
├── check-prerequisites.sh
423+
├── common.sh
424+
├── create-new-feature.sh
425+
├── setup-plan.sh
426+
└── update-claude-md.sh
427427
├── specs
428-
└── 001-create-taskify
429-
└── spec.md
428+
└── 001-create-taskify
429+
└── spec.md
430430
└── templates
431431
├── plan-template.md
432432
├── spec-template.md
@@ -440,6 +440,7 @@ With the baseline specification created, you can go ahead and clarify any of the
440440
You should run the structured clarification workflow **before** creating a technical plan to reduce rework downstream.
441441

442442
Preferred order:
443+
443444
1. Use `/speckit.clarify` (structured) – sequential, coverage-based questioning that records answers in a Clarifications section.
444445
2. Optionally follow up with ad-hoc free-form refinement if something still feels vague.
445446

@@ -477,23 +478,23 @@ The output of this step will include a number of implementation detail documents
477478
.
478479
├── CLAUDE.md
479480
├── memory
480-
└── constitution.md
481+
└── constitution.md
481482
├── scripts
482-
├── check-prerequisites.sh
483-
├── common.sh
484-
├── create-new-feature.sh
485-
├── setup-plan.sh
486-
└── update-claude-md.sh
483+
├── check-prerequisites.sh
484+
├── common.sh
485+
├── create-new-feature.sh
486+
├── setup-plan.sh
487+
└── update-claude-md.sh
487488
├── specs
488-
└── 001-create-taskify
489-
├── contracts
490-
├── api-spec.json
491-
└── signalr-spec.md
492-
├── data-model.md
493-
├── plan.md
494-
├── quickstart.md
495-
├── research.md
496-
└── spec.md
489+
└── 001-create-taskify
490+
├── contracts
491+
├── api-spec.json
492+
└── signalr-spec.md
493+
├── data-model.md
494+
├── plan.md
495+
├── quickstart.md
496+
├── research.md
497+
└── spec.md
497498
└── templates
498499
├── CLAUDE-template.md
499500
├── plan-template.md
@@ -575,6 +576,7 @@ Once ready, use the `/speckit.implement` command to execute your implementation
575576
```
576577

577578
The `/speckit.implement` command will:
579+
578580
- Validate that all prerequisites are in place (constitution, spec, plan, and tasks)
579581
- Parse the task breakdown from `tasks.md`
580582
- Execute tasks in the correct order, respecting dependencies and parallel execution markers
@@ -625,4 +627,3 @@ This project is heavily influenced by and based on the work and research of [Joh
625627
## 📄 License
626628

627629
This project is licensed under the terms of the MIT open source license. Please refer to the [LICENSE](./LICENSE) file for the full terms.
628-

0 commit comments

Comments
 (0)