@@ -71,3 +71,116 @@ tasks:
7171 desc : Auto-format with ruff (alias of fmt)
7272 cmds :
7373 - ruff format .
74+ sumd :
75+ desc : Generate SUMD (Structured Unified Markdown Descriptor) for AI-aware project description
76+ cmds :
77+ - |
78+ echo "# $(basename $(pwd))" > SUMD.md
79+ echo "" >> SUMD.md
80+ echo "$(python3 -c "import tomllib; f=open('pyproject.toml','rb'); d=tomllib.load(f); print(d.get('project',{}).get('description','Project description'))" 2>/dev/null || echo 'Project description')" >> SUMD.md
81+ echo "" >> SUMD.md
82+ echo "## Contents" >> SUMD.md
83+ echo "" >> SUMD.md
84+ echo "- [Metadata](#metadata)" >> SUMD.md
85+ echo "- [Architecture](#architecture)" >> SUMD.md
86+ echo "- [Dependencies](#dependencies)" >> SUMD.md
87+ echo "- [Source Map](#source-map)" >> SUMD.md
88+ echo "- [Intent](#intent)" >> SUMD.md
89+ echo "" >> SUMD.md
90+ echo "## Metadata" >> SUMD.md
91+ echo "" >> SUMD.md
92+ echo "- **name**: \`$(basename $(pwd))\`" >> SUMD.md
93+ echo "- **version**: \`$(python3 -c "import tomllib; f=open('pyproject.toml','rb'); d=tomllib.load(f); print(d.get('project',{}).get('version','unknown'))" 2>/dev/null || echo 'unknown')\`" >> SUMD.md
94+ echo "- **python_requires**: \`>=$(python3 --version 2>/dev/null | cut -d' ' -f2 | cut -d. -f1,2)\`" >> SUMD.md
95+ echo "- **license**: $(python3 -c "import tomllib; f=open('pyproject.toml','rb'); d=tomllib.load(f); print(d.get('project',{}).get('license',{}).get('text','MIT'))" 2>/dev/null || echo 'MIT')" >> SUMD.md
96+ echo "- **ecosystem**: SUMD + DOQL + testql + taskfile" >> SUMD.md
97+ echo "- **generated_from**: pyproject.toml, Taskfile.yml, Makefile, src/" >> SUMD.md
98+ echo "" >> SUMD.md
99+ echo "## Architecture" >> SUMD.md
100+ echo "" >> SUMD.md
101+ echo '```' >> SUMD.md
102+ echo "SUMD (description) → DOQL/source (code) → taskfile (automation) → testql (verification)" >> SUMD.md
103+ echo '```' >> SUMD.md
104+ echo "" >> SUMD.md
105+ echo "## Source Map" >> SUMD.md
106+ echo "" >> SUMD.md
107+ find . -name '*.py' -not -path './.venv/*' -not -path './venv/*' -not -path './__pycache__/*' -not -path './.git/*' | head -50 | sed 's|^./||' | sed 's|^|- |' >> SUMD.md
108+ echo "Generated SUMD.md"
109+ - |
110+ python3 -c "
111+ import json, os, subprocess
112+ from pathlib import Path
113+ project_name = Path.cwd().name
114+ py_files = list(Path('.').rglob('*.py'))
115+ py_files = [f for f in py_files if not any(x in str(f) for x in ['.venv', 'venv', '__pycache__', '.git'])]
116+ data = {
117+ 'project_name': project_name,
118+ 'description': 'SUMD - Structured Unified Markdown Descriptor for AI-aware project refactorization',
119+ 'files': [{'path': str(f), 'type': 'python'} for f in py_files[:100]]
120+ }
121+ with open('sumd.json', 'w') as f:
122+ json.dump(data, f, indent=2)
123+ print('Generated sumd.json')
124+ " 2>/dev/null || echo 'Python generation failed, using fallback'
125+ sumr :
126+ desc : Generate SUMR (Summary Report) with project metrics and health status
127+ cmds :
128+ - |
129+ echo "# $(basename $(pwd)) - Summary Report" > SUMR.md
130+ echo "" >> SUMR.md
131+ echo "SUMR - Summary Report for project analysis" >> SUMR.md
132+ echo "" >> SUMR.md
133+ echo "## Contents" >> SUMR.md
134+ echo "" >> SUMR.md
135+ echo "- [Metadata](#metadata)" >> SUMR.md
136+ echo "- [Quality Status](#quality-status)" >> SUMR.md
137+ echo "- [Metrics](#metrics)" >> SUMR.md
138+ echo "- [Refactoring Analysis](#refactoring-analysis)" >> SUMR.md
139+ echo "- [Intent](#intent)" >> SUMR.md
140+ echo "" >> SUMR.md
141+ echo "## Metadata" >> SUMR.md
142+ echo "" >> SUMR.md
143+ echo "- **name**: \`$(basename $(pwd))\`" >> SUMR.md
144+ echo "- **version**: \`$(python3 -c "import tomllib; f=open('pyproject.toml','rb'); d=tomllib.load(f); print(d.get('project',{}).get('version','unknown'))" 2>/dev/null || echo 'unknown')\`" >> SUMR.md
145+ echo "- **generated_at**: \`$(date -Iseconds)\`" >> SUMR.md
146+ echo "" >> SUMR.md
147+ echo "## Quality Status" >> SUMR.md
148+ echo "" >> SUMR.md
149+ if [ -f pyqual.yaml ]; then
150+ echo "- **pyqual_config**: ✅ Present" >> SUMR.md
151+ echo "- **last_run**: $(stat -c %y .pyqual/pipeline.db 2>/dev/null | cut -d' ' -f1 || echo 'N/A')" >> SUMR.md
152+ else
153+ echo "- **pyqual_config**: ❌ Missing" >> SUMR.md
154+ fi
155+ echo "" >> SUMR.md
156+ echo "## Metrics" >> SUMR.md
157+ echo "" >> SUMR.md
158+ py_files=$(find . -name '*.py' -not -path './.venv/*' -not -path './venv/*' | wc -l)
159+ echo "- **python_files**: $py_files" >> SUMR.md
160+ lines=$(find . -name '*.py' -not -path './.venv/*' -not -path './venv/*' -exec cat {} \; 2>/dev/null | wc -l)
161+ echo "- **total_lines**: $lines" >> SUMR.md
162+ echo "" >> SUMR.md
163+ echo "## Refactoring Analysis" >> SUMR.md
164+ echo "" >> SUMR.md
165+ echo "Run \`code2llm ./ -f evolution\` for detailed refactoring queue." >> SUMR.md
166+ echo "Generated SUMR.md"
167+ - |
168+ python3 -c "
169+ import json, os, subprocess
170+ from pathlib import Path
171+ from datetime import datetime
172+ project_name = Path.cwd().name
173+ py_files = len([f for f in Path('.').rglob('*.py') if not any(x in str(f) for x in ['.venv', 'venv', '__pycache__', '.git'])])
174+ data = {
175+ 'project_name': project_name,
176+ 'report_type': 'SUMR',
177+ 'generated_at': datetime.now().isoformat(),
178+ 'metrics': {
179+ 'python_files': py_files,
180+ 'has_pyqual_config': Path('pyqual.yaml').exists()
181+ }
182+ }
183+ with open('SUMR.json', 'w') as f:
184+ json.dump(data, f, indent=2)
185+ print('Generated SUMR.json')
186+ " 2>/dev/null || echo 'Python generation failed, using fallback'
0 commit comments