- Reorganize cursor rules into logical directories (app/, docs/, features/, etc.) - Move project.mdc to app/ directory for better organization - Enhance documentation.mdc with base_context.mdc principles and markdown standards - Improve time.mdc with comprehensive time handling guidelines - Remove outdated/unused rule files (general_development, logging, progress_reports, version_control, versioning) - Establish new documentation standards emphasizing human competence and collaboration - Ensure all documentation follows markdown.mdc linting rules This restructuring improves rule discoverability and establishes consistent documentation standards across the project while maintaining the human competence first approach.
571 lines
14 KiB
Plaintext
571 lines
14 KiB
Plaintext
# 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
|