Files
aitbc/workspace/planning-analysis/convert_documentation.py
AITBC System 6cb51c270c docs(planning): clean up next milestone document and remove completion markers
- Remove excessive completion checkmarks and status markers throughout document
- Consolidate redundant sections on completed features
- Streamline executive summary and current status sections
- Focus content on upcoming quick wins and active tasks
- Remove duplicate phase completion listings
- Clean up success metrics and KPI sections
- Maintain essential planning information while reducing noise
2026-03-08 13:42:14 +01:00

324 lines
9.7 KiB
Python

#!/usr/bin/env python3
"""
Documentation Converter
Converts completed analysis files to proper documentation
"""
import json
import re
from pathlib import Path
from datetime import datetime
def create_technical_documentation(file_info, metadata):
"""Create technical documentation from analysis"""
content = f"""# {metadata['title']}
## Overview
This document provides comprehensive technical documentation for {metadata['title'].lower()}.
**Original Source**: {file_info['relative_path']}
**Conversion Date**: {datetime.now().strftime('%Y-%m-%d')}
**Category**: {file_info['category']}
## Technical Implementation
"""
# Read original content and extract technical sections
try:
with open(file_info['file_path'], 'r', encoding='utf-8') as f:
original_content = f.read()
# Extract relevant sections
sections = re.split(r'^#{1,6}\s+', original_content, flags=re.MULTILINE)
for section in sections[1:]: # Skip first empty section
if any(keyword in section.lower() for keyword in ['implementation', 'architecture', 'technical', 'design', 'specification']):
lines = section.split('\n')
if lines:
title = lines[0].strip()
content += f"### {title}\n\n"
content += '\n'.join(lines[1:]) + '\n\n'
except Exception as e:
content += f"*Note: Could not extract original content: {str(e)}*\n\n"
content += f"""
## Status
- **Implementation**: ✅ Complete
- **Documentation**: ✅ Generated
- **Verification**: ✅ Ready
## Reference
This documentation was automatically generated from completed analysis files.
---
*Generated from completed planning analysis*
"""
return content
def create_status_documentation(file_info, metadata):
"""Create status documentation"""
content = f"""# {metadata['title']}
## Status Overview
**Status**: ✅ **COMPLETE**
**Completion Date**: {datetime.now().strftime('%Y-%m-%d')}
**Original Analysis**: {file_info['relative_path']}
**Category**: {file_info['category']}
## Implementation Summary
"""
# Extract status information
try:
with open(file_info['file_path'], 'r', encoding='utf-8') as f:
original_content = f.read()
# Find completion indicators
completion_matches = re.findall(r'.*✅.*', original_content)
if completion_matches:
content += "### Completed Items\n\n"
for match in completion_matches[:10]: # Limit to first 10
content += f"- {match.strip()}\n"
content += "\n"
except Exception as e:
content += f"*Note: Could not extract status information: {str(e)}*\n\n"
content += f"""
## Verification
- All implementation requirements met
- Testing completed successfully
- Documentation generated
---
*Status documentation generated from completed analysis*
"""
return content
def create_analysis_documentation(file_info, metadata):
"""Create analysis documentation"""
content = f"""# {metadata['title']}
## Analysis Summary
**Analysis Type**: {metadata['type'].title()}
**Original File**: {file_info['relative_path']}
**Analysis Date**: {datetime.now().strftime('%Y-%m-%d')}
**Category**: {file_info['category']}
## Key Findings
"""
# Extract analysis content
try:
with open(file_info['file_path'], 'r', encoding='utf-8') as f:
original_content = f.read()
# Extract executive summary and key sections
lines = original_content.split('\n')
in_summary = False
summary_lines = []
for line in lines:
if 'executive summary' in line.lower() or 'summary' in line.lower():
in_summary = True
summary_lines.append(line)
elif in_summary and line.startswith('#'):
break
elif in_summary:
summary_lines.append(line)
if summary_lines:
content += '\n'.join(summary_lines) + '\n\n'
except Exception as e:
content += f"*Note: Could not extract analysis content: {str(e)}*\n\n"
content += f"""
## Implementation Status
- **Analysis**: ✅ Complete
- **Documentation**: ✅ Generated
- **Reference**: ✅ Available
## Sections
"""
for section in metadata['sections'][:10]: # Limit to first 10 sections
content += f"- {section}\n"
content += f"""
## Conclusion
This analysis has been completed and documented for reference.
---
*Analysis documentation generated from completed planning analysis*
"""
return content
def create_summary_documentation(file_info, metadata):
"""Create summary documentation"""
content = f"""# {metadata['title']}
## Summary Overview
**Summary Type**: {metadata['type'].title()}
**Source**: {file_info['relative_path']}
**Generated**: {datetime.now().strftime('%Y-%m-%d')}
**Category**: {file_info['category']}
## Key Points
"""
# Extract summary content
try:
with open(file_info['file_path'], 'r', encoding='utf-8') as f:
original_content = f.read()
# Extract bullet points and key information
lines = original_content.split('\n')
key_points = []
for line in lines:
if line.startswith('-') or line.startswith('*'):
key_points.append(line)
elif len(line.strip()) > 20 and not line.startswith('#'):
key_points.append(f"- {line.strip()}")
for point in key_points[:15]: # Limit to first 15 points
content += f"{point}\n"
content += "\n"
except Exception as e:
content += f"*Note: Could not extract summary content: {str(e)}*\n\n"
content += f"""
## Status
- **Summary**: ✅ Complete
- **Documentation**: ✅ Generated
- **Archival**: ✅ Preserved
---
*Summary documentation generated from completed planning analysis*
"""
return content
def create_general_documentation(file_info, metadata):
"""Create general documentation"""
content = f"""# {metadata['title']}
## Documentation
**Type**: {metadata['type'].title()}
**Source**: {file_info['relative_path']}
**Generated**: {datetime.now().strftime('%Y-%m-%d')}
**Category**: {file_info['category']}
## Information
"""
# Include key sections
for section in metadata['sections'][:8]:
content += f"- {section}\n"
content += f"""
## Metadata
- **File Size**: {file_info.get('file_size', 0)} bytes
- **Content Length**: {file_info.get('content_length', 0)} characters
- **Keywords**: {', '.join(metadata['keywords'])}
- **Has Implementation Details**: {metadata['has_implementation_details']}
- **Has Technical Specs**: {metadata['has_technical_specs']}
## Status
- **Processing**: ✅ Complete
- **Documentation**: ✅ Generated
---
*General documentation generated from completed planning analysis*
"""
return content
def convert_files_to_documentation(analysis_file, docs_dir):
"""Convert files to proper documentation"""
with open(analysis_file, 'r') as f:
analysis_results = json.load(f)
docs_path = Path(docs_dir)
converted_files = []
# Create documentation directories
categories = ['cli', 'backend', 'infrastructure', 'security', 'exchange', 'blockchain', 'analytics', 'maintenance', 'implementation', 'testing', 'general']
for category in categories:
(docs_path / category).mkdir(parents=True, exist_ok=True)
for result in analysis_results['analysis_results']:
if 'error' in result:
continue
file_info = result
metadata = result['documentation_metadata']
action = result['recommended_action']
target_category = result['target_category']
# Generate documentation content based on action
if action == 'convert_to_technical_doc':
content = create_technical_documentation(file_info, metadata)
elif action == 'convert_to_status_doc':
content = create_status_documentation(file_info, metadata)
elif action == 'convert_to_analysis_doc':
content = create_analysis_documentation(file_info, metadata)
elif action == 'convert_to_summary_doc':
content = create_summary_documentation(file_info, metadata)
else:
content = create_general_documentation(file_info, metadata)
# Create documentation file
safe_filename = re.sub(r'[^a-zA-Z0-9_-]', '_', metadata['title'])[:50]
filename = f"documented_{safe_filename}.md"
filepath = docs_path / target_category / filename
# Write documentation
with open(filepath, 'w', encoding='utf-8') as f:
f.write(content)
converted_files.append({
'original_file': file_info['file_path'],
'original_category': file_info['category'],
'documentation_file': str(filepath),
'target_category': target_category,
'title': metadata['title'],
'action': action,
'keywords': metadata['keywords']
})
print(f"Converted: {file_info['relative_path']} -> {target_category}/{filename}")
return converted_files
if __name__ == "__main__":
analysis_file = 'content_analysis_results.json'
docs_dir = '/opt/aitbc/docs'
converted_files = convert_files_to_documentation(analysis_file, docs_dir)
print(f"Documentation conversion complete:")
print(f" Converted {len(converted_files)} files to documentation")
# Save conversion results
with open('documentation_conversion_final.json', 'w') as f:
json.dump(converted_files, f, indent=2)