You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
570 lines
14 KiB
570 lines
14 KiB
# Cursor Markdown Ruleset for TimeSafari Documentation
|
|
|
|
## Overview
|
|
|
|
This ruleset enforces consistent markdown formatting standards across all project
|
|
documentation, ensuring readability, maintainability, and compliance with
|
|
markdownlint best practices. **LLMs must follow these rules strictly to generate
|
|
lint-free documentation.**
|
|
|
|
## General Formatting Standards
|
|
|
|
### Line Length
|
|
|
|
- **Maximum line length**: 80 characters
|
|
- **Exception**: Code blocks (JSON, shell, TypeScript, etc.) - no line length
|
|
enforcement
|
|
- **Rationale**: Ensures readability across different screen sizes and terminal
|
|
widths
|
|
- **LLM Guidance**: Always count characters and break lines at 80 characters
|
|
unless in code blocks
|
|
|
|
### Blank Lines
|
|
|
|
- **Headings**: Must be surrounded by blank lines above and below
|
|
- **Lists**: Must be surrounded by blank lines above and below
|
|
- **Code blocks**: Must be surrounded by blank lines above and below
|
|
- **Maximum consecutive blank lines**: 1 (no multiple blank lines)
|
|
- **File start**: No blank lines at the beginning of the file
|
|
- **File end**: Single newline character at the end
|
|
- **LLM Guidance**: Always add blank lines around structural elements
|
|
|
|
### Whitespace
|
|
|
|
- **No trailing spaces**: Remove all trailing whitespace from lines
|
|
- **No tabs**: Use spaces for indentation
|
|
- **Consistent indentation**: 2 spaces for list items and nested content
|
|
- **LLM Guidance**: Use space characters only, never tabs
|
|
|
|
## Heading Standards
|
|
|
|
### Format
|
|
|
|
- **Style**: ATX-style headings (`#`, `##`, `###`, etc.)
|
|
- **Case**: Title case for general headings
|
|
- **Code references**: Use backticks for file names and technical terms
|
|
- ✅ `### Current package.json Scripts`
|
|
- ❌ `### Current Package.json Scripts`
|
|
- **LLM Guidance**: Always use ATX style, never use Setext style (`===` or `---`)
|
|
|
|
### Hierarchy
|
|
|
|
- **H1 (#)**: Document title only - **ONE PER DOCUMENT**
|
|
- **H2 (##)**: Major sections
|
|
- **H3 (###)**: Subsections
|
|
- **H4 (####)**: Sub-subsections
|
|
- **H5+**: Avoid deeper nesting
|
|
- **LLM Guidance**: Start every document with exactly one H1, maintain logical
|
|
hierarchy
|
|
|
|
### Heading Content Rules
|
|
|
|
- **No trailing punctuation**: Avoid periods, colons, etc. at end
|
|
- **No duplicate headings**: Each heading must be unique within the document
|
|
- **Descriptive but concise**: Headings should clearly describe the section
|
|
- **LLM Guidance**: Use action-oriented headings, avoid generic terms like
|
|
"Overview"
|
|
|
|
## List Standards
|
|
|
|
### Unordered Lists
|
|
|
|
- **Marker**: Use `-` (hyphen) consistently
|
|
- **Indentation**: 2 spaces for nested items
|
|
- **Blank lines**: Surround lists with blank lines
|
|
- **LLM Guidance**: Always use hyphens, never use asterisks or plus signs
|
|
|
|
### Ordered Lists
|
|
|
|
- **Format**: `1.`, `2.`, `3.` (sequential numbering)
|
|
- **Indentation**: 2 spaces for nested items
|
|
- **Blank lines**: Surround lists with blank lines
|
|
- **LLM Guidance**: Use sequential numbers, never skip numbers or use random
|
|
numbers
|
|
|
|
### Task Lists
|
|
|
|
- **Format**: `- [ ]` for incomplete, `- [x]` for complete
|
|
- **Use case**: Project planning, checklists, implementation tracking
|
|
- **LLM Guidance**: Use consistent spacing in brackets `[ ]` not `[ ]`
|
|
|
|
## Code Block Standards
|
|
|
|
### Fenced Code Blocks
|
|
|
|
- **Syntax**: Triple backticks with language specification
|
|
- **Languages**: `json`, `bash`, `typescript`, `javascript`, `yaml`, `markdown`
|
|
- **Blank lines**: Must be surrounded by blank lines above and below
|
|
- **Line length**: No enforcement within code blocks
|
|
- **LLM Guidance**: Always specify language, never use generic code blocks
|
|
|
|
### Inline Code
|
|
|
|
- **Format**: Single backticks for inline code references
|
|
- **Use case**: File names, commands, variables, properties
|
|
- **LLM Guidance**: Use backticks for any technical term, file path, or command
|
|
|
|
## Special Content Standards
|
|
|
|
### JSON Examples
|
|
|
|
```json
|
|
{
|
|
"property": "value",
|
|
"nested": {
|
|
"property": "value"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Shell Commands
|
|
|
|
```bash
|
|
# Command with comment
|
|
npm run build:web
|
|
|
|
# Multi-line command
|
|
VITE_GIT_HASH=`git log -1 --pretty=format:%h` \
|
|
vite build --config vite.config.web.mts
|
|
```
|
|
|
|
### TypeScript Examples
|
|
|
|
```typescript
|
|
// Function with JSDoc
|
|
/**
|
|
* Get environment configuration
|
|
* @param env - Environment name
|
|
* @returns Environment config object
|
|
*/
|
|
const getEnvironmentConfig = (env: string) => {
|
|
switch (env) {
|
|
case 'prod':
|
|
return { /* production settings */ };
|
|
default:
|
|
return { /* development settings */ };
|
|
}
|
|
};
|
|
```
|
|
|
|
## File Structure Standards
|
|
|
|
### Document Header
|
|
|
|
```markdown
|
|
# Document Title
|
|
|
|
**Author**: Matthew Raymer
|
|
**Date**: YYYY-MM-DD
|
|
**Status**: 🎯 **STATUS** - Brief description
|
|
|
|
## Overview
|
|
|
|
Brief description of the document's purpose and scope.
|
|
```
|
|
|
|
### Section Organization
|
|
|
|
1. **Overview/Introduction**
|
|
2. **Current State Analysis**
|
|
3. **Implementation Plan**
|
|
4. **Technical Details**
|
|
5. **Testing & Validation**
|
|
6. **Next Steps**
|
|
|
|
## Enhanced Markdownlint Configuration
|
|
|
|
### Required Rules (Comprehensive)
|
|
|
|
```json
|
|
{
|
|
"MD013": { "code_blocks": false, "line_length": 80 },
|
|
"MD012": true,
|
|
"MD022": true,
|
|
"MD031": true,
|
|
"MD032": true,
|
|
"MD047": true,
|
|
"MD009": true,
|
|
"MD024": true,
|
|
"MD025": true,
|
|
"MD026": { "punctuation": ".,;:!" },
|
|
"MD029": { "style": "ordered" },
|
|
"MD030": { "ul_single": 1, "ol_single": 1, "ul_multi": 1, "ol_multi": 1 },
|
|
"MD033": false,
|
|
"MD041": true,
|
|
"MD046": { "style": "fenced" },
|
|
"MD018": true,
|
|
"MD019": true,
|
|
"MD020": true,
|
|
"MD021": true,
|
|
"MD023": true,
|
|
"MD027": true,
|
|
"MD028": true,
|
|
"MD036": true,
|
|
"MD037": true,
|
|
"MD038": true,
|
|
"MD039": true,
|
|
"MD040": true,
|
|
"MD042": true,
|
|
"MD043": true,
|
|
"MD044": true,
|
|
"MD045": true
|
|
}
|
|
```
|
|
|
|
### Rule Explanations (LLM Must Follow)
|
|
|
|
- **MD013**: Line length (80 chars max, disabled for code blocks)
|
|
- **MD012**: No multiple consecutive blank lines
|
|
- **MD022**: Headings must be surrounded by blank lines
|
|
- **MD031**: Fenced code blocks must be surrounded by blank lines
|
|
- **MD032**: Lists must be surrounded by blank lines
|
|
- **MD047**: Files must end with single newline
|
|
- **MD009**: No trailing spaces
|
|
- **MD024**: No duplicate headings
|
|
- **MD025**: Only one H1 per document
|
|
- **MD026**: No trailing punctuation in headings
|
|
- **MD029**: Ordered list item prefix style
|
|
- **MD030**: List item marker styles
|
|
- **MD033**: Allow inline HTML (disabled for flexibility)
|
|
- **MD041**: First line must be top-level heading
|
|
- **MD046**: Code block style (fenced only)
|
|
- **MD018**: Heading should have space after hash
|
|
- **MD019**: Heading should have space after hash
|
|
- **MD020**: Heading should have space after hash
|
|
- **MD021**: Heading should have space after hash
|
|
- **MD023**: Heading should start at beginning of line
|
|
- **MD027**: No multiple spaces after blockquote marker
|
|
- **MD028**: No blank line inside blockquote
|
|
- **MD036**: No emphasis used for headings
|
|
- **MD037**: No spaces inside emphasis markers
|
|
- **MD038**: No spaces inside code span markers
|
|
- **MD039**: No spaces inside link text
|
|
- **MD040**: Fenced code blocks should have language specified
|
|
- **MD042**: No empty links
|
|
- **MD043**: Required heading structure
|
|
- **MD044**: Line length in code blocks
|
|
- **MD045**: No images without alt text
|
|
|
|
## LLM-Specific Language Guidelines
|
|
|
|
### **CRITICAL: LLM Must Follow These Rules**
|
|
|
|
#### 1. **Heading Generation**
|
|
|
|
- **Always start with H1**: Every document must have exactly one
|
|
`# Document Title`
|
|
- **Use descriptive headings**: Avoid generic terms like "Overview",
|
|
"Details", "Information"
|
|
- **Maintain hierarchy**: H2 for major sections, H3 for subsections
|
|
- **No duplicate headings**: Each heading must be unique within the document
|
|
|
|
#### 2. **List Formatting**
|
|
|
|
- **Unordered lists**: Always use `-` (hyphen), never `*` or `+`
|
|
- **Ordered lists**: Use sequential numbers `1.`, `2.`, `3.`
|
|
- **Consistent spacing**: Always use 2 spaces for indentation
|
|
- **Blank lines**: Surround all lists with blank lines
|
|
|
|
#### 3. **Code and Technical Content**
|
|
|
|
- **Inline code**: Use backticks for any technical term, file path, or command
|
|
- **Code blocks**: Always specify language, never use generic blocks
|
|
- **File references**: Always use backticks for file names and paths
|
|
|
|
#### 4. **Line Length Management**
|
|
|
|
- **Count characters**: Ensure no line exceeds 80 characters
|
|
- **Break naturally**: Break at word boundaries when possible
|
|
- **Code blocks**: No line length enforcement within code blocks
|
|
|
|
#### 5. **Whitespace Rules**
|
|
|
|
- **No trailing spaces**: Never leave spaces at end of lines
|
|
- **No tabs**: Use spaces only for indentation
|
|
- **Blank lines**: Use exactly one blank line between sections
|
|
|
|
## Enhanced Validation Commands
|
|
|
|
### Check Single File
|
|
|
|
```bash
|
|
npx markdownlint docs/filename.md
|
|
```
|
|
|
|
### Check All Documentation
|
|
|
|
```bash
|
|
npx markdownlint docs/
|
|
```
|
|
|
|
### Check with Custom Config
|
|
|
|
```bash
|
|
npx markdownlint --config .markdownlint.json docs/
|
|
```
|
|
|
|
### Generate Detailed Report
|
|
|
|
```bash
|
|
npx markdownlint --config .markdownlint.json --output markdownlint-report.txt docs/
|
|
```
|
|
|
|
### Check Specific Rules
|
|
|
|
```bash
|
|
npx markdownlint --rules MD013,MD012,MD022,MD024,MD025 docs/
|
|
```
|
|
|
|
### Project-Wide Validation
|
|
|
|
```bash
|
|
# Check all markdown files in project
|
|
find . -name "*.md" -exec npx markdownlint {} \;
|
|
|
|
# Check specific directories
|
|
npx markdownlint .cursor/rules/ docs/ README.md
|
|
|
|
# Check with verbose output
|
|
npx markdownlint --verbose docs/
|
|
```
|
|
|
|
### Auto-fix Common Issues
|
|
|
|
```bash
|
|
# Remove trailing spaces
|
|
sed -i 's/[[:space:]]*$//' docs/filename.md
|
|
|
|
# Remove multiple blank lines
|
|
sed -i '/^$/N;/^\n$/D' docs/filename.md
|
|
|
|
# Add newline at end if missing
|
|
echo "" >> docs/filename.md
|
|
|
|
# Fix heading spacing
|
|
sed -i 's/^# /# /g' docs/filename.md
|
|
```
|
|
|
|
## Common Patterns
|
|
|
|
### Implementation Plans
|
|
|
|
```markdown
|
|
## Implementation Plan
|
|
|
|
### Phase 1: Foundation
|
|
|
|
#### 1.1 Component Setup
|
|
|
|
- [ ] Create new component file
|
|
- [ ] Add basic structure
|
|
- [ ] Implement core functionality
|
|
|
|
#### 1.2 Configuration
|
|
|
|
- [ ] Update configuration files
|
|
- [ ] Add environment variables
|
|
- [ ] Test configuration loading
|
|
```
|
|
|
|
### Status Tracking
|
|
|
|
```markdown
|
|
**Status**: ✅ **COMPLETE** - All phases finished
|
|
**Progress**: 75% (15/20 components)
|
|
**Next**: Ready for testing phase
|
|
```
|
|
|
|
### Performance Metrics
|
|
|
|
```markdown
|
|
#### 📊 Performance Metrics
|
|
- **Build Time**: 2.3 seconds (50% faster than baseline)
|
|
- **Bundle Size**: 1.2MB (30% reduction)
|
|
- **Success Rate**: 100% (no failures in 50 builds)
|
|
```
|
|
|
|
## Enforcement
|
|
|
|
### Pre-commit Hooks
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# .git/hooks/pre-commit
|
|
# Check markdown files before commit
|
|
|
|
echo "Running markdownlint..."
|
|
|
|
# Get list of staged markdown files
|
|
staged_md_files=$(git diff --cached --name-only --diff-filter=ACM | grep '\.md$')
|
|
|
|
if [ -n "$staged_md_files" ]; then
|
|
echo "Checking markdown files: $staged_md_files"
|
|
|
|
# Run markdownlint on staged files
|
|
npx markdownlint $staged_md_files
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ Markdown linting failed. Please fix issues before committing."
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ Markdown linting passed."
|
|
fi
|
|
```
|
|
|
|
### CI/CD Integration
|
|
|
|
```yaml
|
|
# .github/workflows/markdown-lint.yml
|
|
name: Markdown Lint
|
|
|
|
on:
|
|
push:
|
|
paths: ['**/*.md']
|
|
pull_request:
|
|
paths: ['**/*.md']
|
|
|
|
jobs:
|
|
lint:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: '18'
|
|
|
|
- name: Install markdownlint
|
|
run: npm install -g markdownlint-cli
|
|
|
|
- name: Run markdownlint
|
|
run: markdownlint --config .markdownlint.json .
|
|
|
|
- name: Generate report
|
|
run: markdownlint --config .markdownlint.json --output lint-report.txt .
|
|
|
|
- name: Upload report
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: markdown-lint-report
|
|
path: lint-report.txt
|
|
```
|
|
|
|
### Team Guidelines
|
|
|
|
- All documentation PRs must pass markdownlint
|
|
- Use provided templates for new documents
|
|
- Follow established patterns for consistency
|
|
- **LLM-generated content must pass all linting rules**
|
|
|
|
## Templates
|
|
|
|
### New Document Template
|
|
|
|
```markdown
|
|
# Document Title
|
|
|
|
**Author**: Matthew Raymer
|
|
**Date**: YYYY-MM-DD
|
|
**Status**: 🎯 **PLANNING** - Ready for Implementation
|
|
|
|
## Overview
|
|
|
|
Brief description of the document's purpose and scope.
|
|
|
|
## Current State
|
|
|
|
Description of current situation or problem.
|
|
|
|
## Implementation Plan
|
|
|
|
### Phase 1: Foundation
|
|
|
|
- [ ] Task 1
|
|
- [ ] Task 2
|
|
|
|
## Next Steps
|
|
|
|
1. **Review and approve plan**
|
|
2. **Begin implementation**
|
|
3. **Test and validate**
|
|
|
|
---
|
|
|
|
**Status**: Ready for implementation
|
|
**Priority**: Medium
|
|
**Estimated Effort**: X days
|
|
**Dependencies**: None
|
|
**Stakeholders**: Development team
|
|
```
|
|
|
|
### Rule File Template
|
|
|
|
```markdown
|
|
# Rule Name
|
|
|
|
**Purpose**: Brief description of what this rule accomplishes
|
|
|
|
## Overview
|
|
|
|
Detailed explanation of the rule's scope and importance.
|
|
|
|
## Implementation
|
|
|
|
### Requirements
|
|
|
|
- [ ] Requirement 1
|
|
- [ ] Requirement 2
|
|
|
|
### Examples
|
|
|
|
#### ✅ Good Example
|
|
|
|
```markdown
|
|
# Good example content
|
|
```
|
|
|
|
#### ❌ Bad Example
|
|
|
|
```markdown
|
|
# Bad example content
|
|
```
|
|
|
|
## Validation
|
|
|
|
How to test that this rule is working correctly.
|
|
|
|
---
|
|
|
|
**Status**: Active
|
|
**Version**: 1.0
|
|
**Maintainer**: Matthew Raymer
|
|
|
|
## LLM Quality Assurance Checklist
|
|
|
|
### **Before Generating Documentation, LLM Must:**
|
|
|
|
- [ ] **Understand line length**: No line over 80 characters
|
|
- [ ] **Plan heading structure**: One H1, logical hierarchy, no duplicates
|
|
- [ ] **Choose list markers**: Hyphens for unordered, sequential numbers for ordered
|
|
- [ ] **Plan code blocks**: Specify languages, add blank lines around
|
|
- [ ] **Check whitespace**: No trailing spaces, consistent indentation
|
|
- [ ] **Validate structure**: Proper blank line placement
|
|
|
|
### **After Generating Documentation, LLM Must:**
|
|
|
|
- [ ] **Verify line lengths**: Count characters, break long lines
|
|
- [ ] **Check heading hierarchy**: Ensure logical structure
|
|
- [ ] **Validate lists**: Consistent markers and spacing
|
|
- [ ] **Review code blocks**: Proper language specification
|
|
- [ ] **Clean whitespace**: Remove trailing spaces, add proper blank lines
|
|
- [ ] **Test with markdownlint**: Ensure all rules pass
|
|
|
|
---
|
|
|
|
**Last Updated**: 2025-08-17
|
|
**Version**: 2.0
|
|
**Maintainer**: Matthew Raymer
|
|
**LLM Compliance**: Required for all documentation generation
|
|
|