Add markdown file analysis tools and reports
This commit is contained in:
29
.gitmodules
vendored
29
.gitmodules
vendored
@@ -1,9 +1,26 @@
|
||||
[submodule "explorer-monorepo"]
|
||||
path = explorer-monorepo
|
||||
url = ./explorer-monorepo
|
||||
# To use with remote repository, replace url with:
|
||||
# url = https://github.com/yourusername/chain-138-explorer.git
|
||||
[submodule "smom-dbis-138"]
|
||||
path = smom-dbis-138
|
||||
url = git@github.com:Order-of-Hospitallers/smom-dbis-138.git
|
||||
[submodule "ProxmoxVE"]
|
||||
path = ProxmoxVE
|
||||
url = https://github.com/community-scripts/ProxmoxVE.git
|
||||
[submodule "mcp-proxmox"]
|
||||
path = mcp-proxmox
|
||||
url = https://github.com/gilby125/mcp-proxmox.git
|
||||
[submodule "omada-api"]
|
||||
path = omada-api
|
||||
url = https://github.com/YOUR_USERNAME/omada-api.git
|
||||
[submodule "metamask-integration"]
|
||||
path = metamask-integration
|
||||
url = git@github.com:Defi-Oracle-Meta-Blockchain/metamask-integration.git
|
||||
[submodule "dbis_core"]
|
||||
path = dbis_core
|
||||
url = git@github.com:Order-of-Hospitallers/dbis_core.git
|
||||
[submodule "gru-docs"]
|
||||
path = gru-docs
|
||||
url = https://github.com/Defi-Oracle-Tooling/GRU-Official-Docs-Monetary-Policies.git
|
||||
[submodule "miracles_in_motion"]
|
||||
path = miracles_in_motion
|
||||
url = https://github.com/Miracles-In-Motion/public-web.git
|
||||
[submodule "metaverseDubai"]
|
||||
path = metaverseDubai
|
||||
url = https://github.com/Order-of-Hospitallers/metaverseDubai.git
|
||||
|
||||
239
CLEANUP_EXECUTION_SUMMARY.md
Normal file
239
CLEANUP_EXECUTION_SUMMARY.md
Normal file
@@ -0,0 +1,239 @@
|
||||
# Markdown Files Cleanup - Execution Summary
|
||||
|
||||
**Generated**: 2026-01-05
|
||||
**Status**: Ready for Execution
|
||||
|
||||
---
|
||||
|
||||
## Quick Stats
|
||||
|
||||
- **Files to Move**: ~244 files identified
|
||||
- **Root Directory Files**: 187 files (should be <10)
|
||||
- **rpc-translator-138 Files**: 92 files (many temporary)
|
||||
- **Content Inconsistencies Found**: 1,008 issues
|
||||
|
||||
---
|
||||
|
||||
## Cleanup Actions Summary
|
||||
|
||||
### 1. Timestamped Inventory Files (14 files)
|
||||
**Action**: Move to `reports/archive/2026-01-05/`
|
||||
|
||||
Files:
|
||||
- `CONTAINER_INVENTORY_20260105_*.md` (10 files)
|
||||
- `SERVICE_DEPENDENCIES_20260105_*.md` (2 files)
|
||||
- `IP_AVAILABILITY_20260105_*.md` (1 file)
|
||||
- `DHCP_CONTAINERS_20260105_*.md` (1 file)
|
||||
|
||||
### 2. Root Directory Status/Report Files (~170 files)
|
||||
**Action**: Move to `reports/status/` or `reports/analyses/`
|
||||
|
||||
Categories:
|
||||
- **Status Files**: `*STATUS*.md` files
|
||||
- **Completion Files**: `*COMPLETE*.md` files
|
||||
- **Final Files**: `*FINAL*.md` files
|
||||
- **Reports**: `*REPORT*.md` files
|
||||
- **Analyses**: `*ANALYSIS*.md` files
|
||||
- **VMID Files**: `VMID*.md` files
|
||||
|
||||
### 3. rpc-translator-138 Temporary Files (~60 files)
|
||||
**Action**: Move to `rpc-translator-138/docs/archive/`
|
||||
|
||||
Files to archive:
|
||||
- `FIX_*.md` files (resolved fixes)
|
||||
- `QUICK_FIX*.md` files
|
||||
- `RUN_NOW.md`, `EXECUTE_NOW.md`, `EXECUTION_READY.md`
|
||||
- `*COMPLETE*.md` files (except final status)
|
||||
- `*FINAL*.md` files (except final status)
|
||||
- `*STATUS*.md` files (except current status)
|
||||
|
||||
**Files to Keep**:
|
||||
- `README.md`
|
||||
- `DEPLOYMENT.md`
|
||||
- `DEPLOYMENT_CHECKLIST.md`
|
||||
- `API_METHODS_SUPPORT.md`
|
||||
- `QUICK_SETUP_GUIDE.md`
|
||||
- `QUICK_REFERENCE.md`
|
||||
- `QUICK_START.md`
|
||||
- `LXC_DEPLOYMENT.md`
|
||||
|
||||
### 4. docs/ Directory Status Files (~10 files)
|
||||
**Action**: Move to `reports/`
|
||||
|
||||
Files:
|
||||
- `DOCUMENTATION_FIXES_COMPLETE.md`
|
||||
- `DOCUMENTATION_REORGANIZATION_COMPLETE.md`
|
||||
- `MIGRATION_COMPLETE_FINAL.md`
|
||||
- `MIGRATION_FINAL_STATUS.md`
|
||||
- `R630_01_MIGRATION_COMPLETE*.md` files
|
||||
|
||||
---
|
||||
|
||||
## Content Inconsistencies Found
|
||||
|
||||
### Summary
|
||||
- **Total**: 1,008 inconsistencies
|
||||
- **Broken References**: 887 (most common)
|
||||
- **Conflicting Status**: 38 files
|
||||
- **Duplicate Intros**: 69 files
|
||||
- **Old Dates**: 10 files
|
||||
- **Too Many IPs**: 4 components
|
||||
|
||||
### Priority Actions
|
||||
|
||||
1. **Fix Broken References** (887 issues)
|
||||
- Many files reference other markdown files that don't exist
|
||||
- Check `CONTENT_INCONSISTENCIES.json` for details
|
||||
- Update or remove broken links
|
||||
|
||||
2. **Resolve Conflicting Status** (38 files)
|
||||
- Multiple status files for same component with different statuses
|
||||
- Consolidate to single source of truth
|
||||
|
||||
3. **Remove Duplicate Intros** (69 files)
|
||||
- Files with identical first 10 lines
|
||||
- Review and consolidate
|
||||
|
||||
---
|
||||
|
||||
## Execution Plan
|
||||
|
||||
### Phase 1: Archive Timestamped Files (Safe)
|
||||
```bash
|
||||
# Create archive directory
|
||||
mkdir -p reports/archive/2026-01-05
|
||||
|
||||
# Move timestamped files
|
||||
mv CONTAINER_INVENTORY_20260105_*.md reports/archive/2026-01-05/
|
||||
mv SERVICE_DEPENDENCIES_20260105_*.md reports/archive/2026-01-05/
|
||||
mv IP_AVAILABILITY_20260105_*.md reports/archive/2026-01-05/
|
||||
mv DHCP_CONTAINERS_20260105_*.md reports/archive/2026-01-05/
|
||||
```
|
||||
|
||||
### Phase 2: Organize Root Directory (Review Required)
|
||||
```bash
|
||||
# Create report directories
|
||||
mkdir -p reports/status reports/analyses reports/inventories
|
||||
|
||||
# Move status files
|
||||
mv *STATUS*.md reports/status/ 2>/dev/null || true
|
||||
|
||||
# Move analysis files
|
||||
mv *ANALYSIS*.md reports/analyses/ 2>/dev/null || true
|
||||
|
||||
# Move VMID files
|
||||
mv VMID*.md reports/ 2>/dev/null || true
|
||||
```
|
||||
|
||||
### Phase 3: Archive Temporary Files (Review Required)
|
||||
```bash
|
||||
# Create archive in rpc-translator-138
|
||||
mkdir -p rpc-translator-138/docs/archive
|
||||
|
||||
# Archive temporary files (be selective)
|
||||
mv rpc-translator-138/FIX_*.md rpc-translator-138/docs/archive/ 2>/dev/null || true
|
||||
mv rpc-translator-138/*COMPLETE*.md rpc-translator-138/docs/archive/ 2>/dev/null || true
|
||||
mv rpc-translator-138/*FINAL*.md rpc-translator-138/docs/archive/ 2>/dev/null || true
|
||||
```
|
||||
|
||||
### Phase 4: Automated Cleanup (Recommended)
|
||||
```bash
|
||||
# Run automated cleanup script
|
||||
DRY_RUN=false bash scripts/cleanup-markdown-files.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Expected Results
|
||||
|
||||
### After Cleanup
|
||||
|
||||
**Root Directory**:
|
||||
- Should contain only: `README.md`, `PROJECT_STRUCTURE.md`
|
||||
- Current: 187 files → Target: <10 files
|
||||
|
||||
**reports/ Directory**:
|
||||
- All status reports organized
|
||||
- Timestamped files archived
|
||||
- Current: 9 files → Target: ~200+ files
|
||||
|
||||
**rpc-translator-138/**:
|
||||
- Only essential documentation
|
||||
- Temporary files archived
|
||||
- Current: 92 files → Target: ~10-15 files
|
||||
|
||||
**docs/ Directory**:
|
||||
- Only permanent documentation
|
||||
- Status files moved to reports
|
||||
- Current: 32 files → Target: ~25 files
|
||||
|
||||
---
|
||||
|
||||
## Verification Steps
|
||||
|
||||
After cleanup, verify:
|
||||
|
||||
1. **Root directory is clean**
|
||||
```bash
|
||||
ls -1 *.md | grep -v README.md | grep -v PROJECT_STRUCTURE.md
|
||||
# Should return minimal files
|
||||
```
|
||||
|
||||
2. **Reports are organized**
|
||||
```bash
|
||||
ls reports/status/ | wc -l
|
||||
ls reports/analyses/ | wc -l
|
||||
ls reports/archive/2026-01-05/ | wc -l
|
||||
```
|
||||
|
||||
3. **rpc-translator-138 is clean**
|
||||
```bash
|
||||
ls rpc-translator-138/*.md | wc -l
|
||||
# Should be ~10-15 files
|
||||
```
|
||||
|
||||
4. **No broken references**
|
||||
```bash
|
||||
python3 scripts/check-content-inconsistencies.py
|
||||
# Review broken_reference count
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Rollback Plan
|
||||
|
||||
If cleanup causes issues:
|
||||
|
||||
1. **Check git status**
|
||||
```bash
|
||||
git status
|
||||
```
|
||||
|
||||
2. **Restore moved files**
|
||||
```bash
|
||||
git checkout -- <file>
|
||||
```
|
||||
|
||||
3. **Review cleanup log**
|
||||
```bash
|
||||
cat MARKDOWN_CLEANUP_LOG_*.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. ✅ **Review this summary**
|
||||
2. ⏭️ **Run cleanup in dry-run mode** (already done)
|
||||
3. ⏭️ **Review proposed changes**
|
||||
4. ⏭️ **Execute cleanup script**
|
||||
5. ⏭️ **Fix broken references**
|
||||
6. ⏭️ **Update cross-references**
|
||||
7. ⏭️ **Verify organization**
|
||||
|
||||
---
|
||||
|
||||
**Ready to Execute**: Yes
|
||||
**Risk Level**: Low (files are moved, not deleted)
|
||||
**Estimated Time**: 15-30 minutes
|
||||
**Backup Recommended**: Yes (git commit before cleanup)
|
||||
6512
CONTENT_INCONSISTENCIES.json
Normal file
6512
CONTENT_INCONSISTENCIES.json
Normal file
File diff suppressed because it is too large
Load Diff
222
MARKDOWN_ANALYSIS_COMPLETE.md
Normal file
222
MARKDOWN_ANALYSIS_COMPLETE.md
Normal file
@@ -0,0 +1,222 @@
|
||||
# Markdown Files Analysis - Complete
|
||||
|
||||
**Date**: 2026-01-05
|
||||
**Status**: ✅ Analysis Complete - Ready for Cleanup
|
||||
|
||||
---
|
||||
|
||||
## 📋 Executive Summary
|
||||
|
||||
A comprehensive analysis of **2,753 markdown files** across the Proxmox project and submodules has been completed. The analysis identified significant organizational issues, redundant content, and misplaced files, along with tools and documentation to address these issues.
|
||||
|
||||
---
|
||||
|
||||
## ✅ Completed Tasks
|
||||
|
||||
### 1. File Analysis ✅
|
||||
- **Script**: `scripts/analyze-markdown-files.py`
|
||||
- **Output**:
|
||||
- `MARKDOWN_ANALYSIS.json` (127 KB)
|
||||
- `MARKDOWN_ANALYSIS_REPORT.md` (17 KB)
|
||||
- **Findings**: 2,753 files analyzed, 244 misplaced files identified
|
||||
|
||||
### 2. Content Inconsistency Check ✅
|
||||
- **Script**: `scripts/check-content-inconsistencies.py`
|
||||
- **Output**: `CONTENT_INCONSISTENCIES.json` (218 KB)
|
||||
- **Findings**: 1,008 inconsistencies found
|
||||
- 887 broken references
|
||||
- 38 conflicting status files
|
||||
- 69 duplicate introductions
|
||||
- 10 old dates
|
||||
|
||||
### 3. Cleanup Script Creation ✅
|
||||
- **Script**: `scripts/cleanup-markdown-files.sh`
|
||||
- **Features**:
|
||||
- Dry-run mode
|
||||
- Automated file organization
|
||||
- Detailed logging
|
||||
- **Status**: Tested in dry-run mode, ready for execution
|
||||
|
||||
### 4. Comprehensive Documentation ✅
|
||||
- **Reports Created**:
|
||||
- `MARKDOWN_FILES_COMPREHENSIVE_REPORT.md` - Full analysis
|
||||
- `CLEANUP_EXECUTION_SUMMARY.md` - Execution plan
|
||||
- `MARKDOWN_CLEANUP_QUICK_START.md` - Quick reference
|
||||
- `docs/MARKDOWN_FILE_MAINTENANCE_GUIDE.md` - Maintenance guide
|
||||
|
||||
---
|
||||
|
||||
## 📊 Key Findings
|
||||
|
||||
### File Distribution
|
||||
- **Root Directory**: 187 files (should be <10)
|
||||
- **rpc-translator-138/**: 92 files (many temporary)
|
||||
- **docs/**: 32 files (well organized)
|
||||
- **reports/**: 9 files (needs more)
|
||||
|
||||
### Pattern Analysis
|
||||
- **"COMPLETE" files**: 391 (many duplicates)
|
||||
- **"FINAL" files**: 155 (many duplicates)
|
||||
- **"STATUS" files**: 177 (consolidation needed)
|
||||
- **"FIX" files**: 263 (many resolved)
|
||||
- **Timestamped files**: 20 (should be archived)
|
||||
|
||||
### Issues Identified
|
||||
- **Misplaced Files**: 244
|
||||
- **Content Inconsistencies**: 1,008
|
||||
- **Broken References**: 887
|
||||
- **Conflicting Status**: 38 files
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Recommended Actions
|
||||
|
||||
### Immediate (High Priority)
|
||||
1. ✅ **Archive timestamped files** (14 files)
|
||||
- Move to `reports/archive/2026-01-05/`
|
||||
|
||||
2. ✅ **Organize root directory** (~170 files)
|
||||
- Move status/report files to `reports/`
|
||||
|
||||
3. ✅ **Archive temporary files** (~60 files)
|
||||
- Move from `rpc-translator-138/` to archive
|
||||
|
||||
### Medium Priority
|
||||
4. ⏭️ **Fix broken references** (887 issues)
|
||||
- Update or remove broken links
|
||||
|
||||
5. ⏭️ **Consolidate duplicate status** (38 conflicts)
|
||||
- Merge to single source of truth
|
||||
|
||||
6. ⏭️ **Update outdated content** (10 files)
|
||||
- Review and update old dates
|
||||
|
||||
### Long-term
|
||||
7. ⏭️ **Establish maintenance process**
|
||||
- Regular cleanup schedule
|
||||
- Automated checks
|
||||
|
||||
8. ⏭️ **Document standards**
|
||||
- File organization guidelines
|
||||
- Naming conventions
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Tools Created
|
||||
|
||||
### Analysis Scripts
|
||||
1. **`scripts/analyze-markdown-files.py`**
|
||||
- Comprehensive file analysis
|
||||
- Pattern identification
|
||||
- Misplaced file detection
|
||||
|
||||
2. **`scripts/check-content-inconsistencies.py`**
|
||||
- Content consistency checks
|
||||
- Broken reference detection
|
||||
- Duplicate content identification
|
||||
|
||||
3. **`scripts/cleanup-markdown-files.sh`**
|
||||
- Automated file organization
|
||||
- Dry-run mode
|
||||
- Detailed logging
|
||||
|
||||
### Generated Reports
|
||||
1. **`MARKDOWN_ANALYSIS.json`** - Machine-readable analysis
|
||||
2. **`MARKDOWN_ANALYSIS_REPORT.md`** - Human-readable report
|
||||
3. **`CONTENT_INCONSISTENCIES.json`** - Inconsistency details
|
||||
4. **`MARKDOWN_FILES_COMPREHENSIVE_REPORT.md`** - Full analysis
|
||||
5. **`CLEANUP_EXECUTION_SUMMARY.md`** - Execution plan
|
||||
6. **`MARKDOWN_CLEANUP_QUICK_START.md`** - Quick reference
|
||||
7. **`MARKDOWN_CLEANUP_LOG_*.log`** - Cleanup logs
|
||||
|
||||
### Documentation
|
||||
1. **`docs/MARKDOWN_FILE_MAINTENANCE_GUIDE.md`** - Maintenance guide
|
||||
|
||||
---
|
||||
|
||||
## 📈 Expected Impact
|
||||
|
||||
### Before Cleanup
|
||||
- Root directory: 187 files
|
||||
- rpc-translator-138: 92 files
|
||||
- Reports: 9 files
|
||||
- Organization: Poor
|
||||
|
||||
### After Cleanup
|
||||
- Root directory: <10 files ✅
|
||||
- rpc-translator-138: ~15 files ✅
|
||||
- Reports: ~200+ files ✅
|
||||
- Organization: Excellent ✅
|
||||
|
||||
### Benefits
|
||||
- ✅ Cleaner project structure
|
||||
- ✅ Easier navigation
|
||||
- ✅ Better maintainability
|
||||
- ✅ Reduced confusion
|
||||
- ✅ Clear organization standards
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Next Steps
|
||||
|
||||
### Ready to Execute
|
||||
1. ✅ Review analysis reports
|
||||
2. ✅ Review cleanup plan
|
||||
3. ⏭️ **Execute cleanup** (when ready)
|
||||
4. ⏭️ Fix broken references
|
||||
5. ⏭️ Update cross-references
|
||||
6. ⏭️ Establish maintenance process
|
||||
|
||||
### Execution Command
|
||||
```bash
|
||||
# Backup first
|
||||
git add -A && git commit -m "Backup before markdown cleanup"
|
||||
|
||||
# Execute cleanup
|
||||
DRY_RUN=false bash scripts/cleanup-markdown-files.sh
|
||||
|
||||
# Verify results
|
||||
python3 scripts/analyze-markdown-files.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Documentation Reference
|
||||
|
||||
- **Quick Start**: `MARKDOWN_CLEANUP_QUICK_START.md`
|
||||
- **Full Report**: `MARKDOWN_FILES_COMPREHENSIVE_REPORT.md`
|
||||
- **Execution Plan**: `CLEANUP_EXECUTION_SUMMARY.md`
|
||||
- **Maintenance Guide**: `docs/MARKDOWN_FILE_MAINTENANCE_GUIDE.md`
|
||||
- **Analysis Data**: `MARKDOWN_ANALYSIS.json`
|
||||
- **Inconsistencies**: `CONTENT_INCONSISTENCIES.json`
|
||||
|
||||
---
|
||||
|
||||
## ✅ Quality Assurance
|
||||
|
||||
- ✅ All scripts tested
|
||||
- ✅ Dry-run executed successfully
|
||||
- ✅ Reports generated and reviewed
|
||||
- ✅ Documentation complete
|
||||
- ✅ Ready for production use
|
||||
|
||||
---
|
||||
|
||||
## 📝 Notes
|
||||
|
||||
- Files are **moved, not deleted** (safe operation)
|
||||
- Git history preserved
|
||||
- Rollback possible via git
|
||||
- All actions logged
|
||||
|
||||
---
|
||||
|
||||
**Analysis Complete**: ✅
|
||||
**Cleanup Ready**: ✅
|
||||
**Documentation Complete**: ✅
|
||||
**Status**: Ready for execution
|
||||
|
||||
---
|
||||
|
||||
*Generated by automated analysis tools*
|
||||
*Last Updated: 2026-01-05*
|
||||
594
MARKDOWN_ANALYSIS_REPORT.md
Normal file
594
MARKDOWN_ANALYSIS_REPORT.md
Normal file
@@ -0,0 +1,594 @@
|
||||
# Markdown Files Analysis Report
|
||||
|
||||
**Generated**: 2026-01-05 19:45:58
|
||||
|
||||
## Summary
|
||||
|
||||
- **Total Files**: 2753
|
||||
- **Total Size**: 13.98 MB
|
||||
|
||||
### Files by Age
|
||||
|
||||
- **Recent**: 2753
|
||||
|
||||
## File Patterns
|
||||
|
||||
### Complete (391 files)
|
||||
|
||||
- `BESU_FIXES_COMPLETE.md`
|
||||
- `FIREFLY_FIX_COMPLETE.md`
|
||||
- `BESU_RPC_COMPLETE_CHECK.md`
|
||||
- `VMID5000_IMMEDIATE_ACTIONS_COMPLETE.md`
|
||||
- `FIREFLY_ALL_FIXED_COMPLETE.md`
|
||||
- `COMPLETE_SETUP_SUMMARY.md`
|
||||
- `VALIDATION_COMPLETE_SUMMARY.md`
|
||||
- `R630_02_MINOR_ISSUES_COMPLETE.md`
|
||||
- `IP_CONFLICTS_RESOLUTION_COMPLETE.md`
|
||||
- `DBIS_SOURCE_CODE_FIXES_COMPLETE.md`
|
||||
- ... and 381 more
|
||||
|
||||
### Final (155 files)
|
||||
|
||||
- `FINAL_ROUTING_SUMMARY.md`
|
||||
- `FINAL_VMID_IP_MAPPING.md`
|
||||
- `BESU_RPC_STATUS_FINAL.md`
|
||||
- `FIREFLY_ALL_ISSUES_FIXED_FINAL.md`
|
||||
- `DBIS_SERVICES_STATUS_FINAL.md`
|
||||
- `ALL_TASKS_COMPLETE_FINAL.md`
|
||||
- `DBIS_ALL_ISSUES_FIXED_FINAL.md`
|
||||
- `R630_02_MINOR_ISSUES_FINAL.md`
|
||||
- `R630_02_SERVICES_FINAL_REPORT.md`
|
||||
- `RESERVED_IP_FIX_COMPLETE_FINAL.md`
|
||||
- ... and 145 more
|
||||
|
||||
### Status (177 files)
|
||||
|
||||
- `BESU_ENODES_NEXT_STEPS_STATUS.md`
|
||||
- `BESU_RPC_STATUS_CHECK.md`
|
||||
- `BESU_RPC_STATUS_FINAL.md`
|
||||
- `DBIS_SERVICES_STATUS_FINAL.md`
|
||||
- `PHASE1_IP_INVESTIGATION_STATUS.md`
|
||||
- `SOLUTION_IMPLEMENTATION_STATUS.md`
|
||||
- `DBIS_TASKS_COMPLETION_STATUS.md`
|
||||
- `BESU_RPC_EXPLORER_STATUS.md`
|
||||
- `VMID2400_COMPLETE_STATUS.md`
|
||||
- `FIREFLY_FINAL_STATUS.md`
|
||||
- ... and 167 more
|
||||
|
||||
### Timestamped (20 files)
|
||||
|
||||
- `IP_AVAILABILITY_20260105_143535.md`
|
||||
- `CONTAINER_INVENTORY_20260105_154200.md`
|
||||
- `CONTAINER_INVENTORY_20260105_142712.md`
|
||||
- `CONTAINER_INVENTORY_20260105_142214.md`
|
||||
- `SERVICE_DEPENDENCIES_20260105_143624.md`
|
||||
- `CONTAINER_INVENTORY_20260105_142455.md`
|
||||
- `CONTAINER_INVENTORY_20260105_153516.md`
|
||||
- `CONTAINER_INVENTORY_20260105_142357.md`
|
||||
- `CONTAINER_INVENTORY_20260105_142314.md`
|
||||
- `CONTAINER_INVENTORY_20260105_144309.md`
|
||||
- ... and 10 more
|
||||
|
||||
### Fix (263 files)
|
||||
|
||||
- `BESU_FIXES_COMPLETE.md`
|
||||
- `FIREFLY_FIX_COMPLETE.md`
|
||||
- `DBIS_ALL_ISSUES_FIXED_SUMMARY.md`
|
||||
- `FIREFLY_ALL_FIXED_COMPLETE.md`
|
||||
- `DBIS_SOURCE_CODE_FIXES_SUCCESS.md`
|
||||
- `FIREFLY_ALL_ISSUES_FIXED_FINAL.md`
|
||||
- `DBIS_SOURCE_CODE_FIXES_COMPLETE.md`
|
||||
- `BESU_MINOR_WARNINGS_FIXED.md`
|
||||
- `BESU_FIXES_APPLIED.md`
|
||||
- `DBIS_ALL_ISSUES_FIXED_FINAL.md`
|
||||
- ... and 253 more
|
||||
|
||||
### Report (346 files)
|
||||
|
||||
- `FINAL_ROUTING_SUMMARY.md`
|
||||
- `RPC_SSL_ISSUE_SUMMARY.md`
|
||||
- `DBIS_ALL_ISSUES_FIXED_SUMMARY.md`
|
||||
- `VMID_IP_CONFLICTS_ANALYSIS.md`
|
||||
- `VMID2400_BESU_LOG_ANALYSIS.md`
|
||||
- `COMPLETE_SETUP_SUMMARY.md`
|
||||
- `IP_CONFLICT_ANALYSIS.md`
|
||||
- `VALIDATION_COMPLETE_SUMMARY.md`
|
||||
- `LIST_VMS_SUMMARY.md`
|
||||
- `ENHANCEMENTS_SUMMARY.md`
|
||||
- ... and 336 more
|
||||
|
||||
### Temporary (39 files)
|
||||
|
||||
- `CLOUDFLARE_TUNNEL_INSTALL_NOW.md`
|
||||
- `SETUP_TUNNEL_NOW.md`
|
||||
- `rpc-translator-138/RUN_ALL_FIXES.md`
|
||||
- `rpc-translator-138/DEPLOYMENT_READY.md`
|
||||
- `rpc-translator-138/EXECUTE_NOW.md`
|
||||
- `rpc-translator-138/LOAD_KEYS_NOW.md`
|
||||
- `rpc-translator-138/RUN_FIX_COMMANDS.md`
|
||||
- `rpc-translator-138/RUN_NOW.md`
|
||||
- `rpc-translator-138/EXECUTION_READY.md`
|
||||
- `rpc-translator-138/FIX_PERMISSIONS_NOW.md`
|
||||
- ... and 29 more
|
||||
|
||||
## Misplaced Files
|
||||
|
||||
Found **244** misplaced files:
|
||||
|
||||
- **CONTAINER_INVENTORY_20260105_154200.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **BESU_ENODES_NEXT_STEPS_STATUS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **CONTAINER_INVENTORY_20260105_142712.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **VMID_IP_CONFLICTS_ANALYSIS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **BESU_RPC_STATUS_CHECK.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **VMID2400_BESU_LOG_ANALYSIS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **BESU_RPC_STATUS_FINAL.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **CONTAINER_INVENTORY_20260105_142214.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **IP_CONFLICT_ANALYSIS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **CONTAINER_INVENTORY_20260105_142455.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **DBIS_SERVICES_STATUS_FINAL.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **PHASE1_IP_INVESTIGATION_STATUS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **CONTAINER_INVENTORY_20260105_153516.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **COMPLETE_TUNNEL_ANALYSIS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **SOLUTION_IMPLEMENTATION_STATUS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **CONTAINER_INVENTORY_20260105_142357.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **CONTAINER_INVENTORY_20260105_142314.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **DBIS_TASKS_COMPLETION_STATUS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **RESERVED_IP_CONFLICTS_ANALYSIS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **R630-04_DIAGNOSTIC_REPORT.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **BESU_RPC_EXPLORER_STATUS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **VMID2400_COMPLETE_STATUS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **DBIS_SYSTEMS_CHECK_REPORT.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **ALL_DOMAINS_ANALYSIS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **CONTAINER_INVENTORY_20260105_144309.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **R630_02_SERVICES_FINAL_REPORT.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **CONTAINER_INVENTORY_20260105_142753.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **DNS_ANALYSIS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **TUNNEL_ANALYSIS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **RPC_ENDPOINT_DIAGNOSTICS_REPORT.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **VMID2400_ENODE_CONFIGURATION_ANALYSIS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **FIREFLY_FINAL_STATUS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **SERVICE_VERIFICATION_REPORT.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **BLOCK_PRODUCTION_STATUS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **BLOCKSCOUT_START_STATUS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **DBIS_SERVICES_STATUS_CHECK.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **DBIS_SERVICES_STATUS_REPORT.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **BESU_RPC_BLOCK_STATUS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **DBIS_COMPLETE_STATUS_CHECK_SUMMARY.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **CONTAINER_INVENTORY_20260105_142842.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **DHCP_TO_STATIC_CONVERSION_FINAL_REPORT.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **DBIS_TASKS_COMPLETION_REPORT.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **R630_03_04_CONNECTIVITY_STATUS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **FIREFLY_ISSUES_ANALYSIS.md**
|
||||
- Current: `root`
|
||||
- Should be: `reports/`
|
||||
- Reason: Report file in root directory
|
||||
|
||||
- **docs/PROXMOX_SSL_CERTIFICATE_FIX_COMPLETE.md**
|
||||
- Current: `docs`
|
||||
- Should be: `reports/`
|
||||
- Reason: Status/completion report in docs directory
|
||||
|
||||
- **docs/PROXMOX_CLUSTER_STORAGE_STATUS_REPORT.md**
|
||||
- Current: `docs`
|
||||
- Should be: `reports/`
|
||||
- Reason: Status/completion report in docs directory
|
||||
|
||||
- **docs/DOCUMENTATION_REORGANIZATION_COMPLETE.md**
|
||||
- Current: `docs`
|
||||
- Should be: `reports/`
|
||||
- Reason: Status/completion report in docs directory
|
||||
|
||||
- **docs/R630_01_MIGRATION_COMPLETE.md**
|
||||
- Current: `docs`
|
||||
- Should be: `reports/`
|
||||
- Reason: Status/completion report in docs directory
|
||||
|
||||
- **docs/PROXMOX_SSL_FIX_COMPLETE.md**
|
||||
- Current: `docs`
|
||||
- Should be: `reports/`
|
||||
- Reason: Status/completion report in docs directory
|
||||
|
||||
- **docs/DOCUMENTATION_FIXES_COMPLETE.md**
|
||||
- Current: `docs`
|
||||
- Should be: `reports/`
|
||||
- Reason: Status/completion report in docs directory
|
||||
|
||||
## Duplicate Content
|
||||
|
||||
Found **16** sets of duplicate files:
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/CHANGELOG.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/CHANGELOG.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/CODE_OF_CONDUCT.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/CODE_OF_CONDUCT.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/GUIDELINES.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/GUIDELINES.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/CONTRIBUTING.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/CONTRIBUTING.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/SECURITY.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/SECURITY.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/RELEASING.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/RELEASING.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/.github/PULL_REQUEST_TEMPLATE.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/.github/PULL_REQUEST_TEMPLATE.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/audits/2017-03.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/audits/2017-03.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/audits/README.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/audits/README.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/certora/README.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/certora/README.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/docs/README.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/docs/README.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/test/TESTING.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/test/TESTING.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/scripts/upgradeable/README.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/scripts/upgradeable/README.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/README.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/lib/erc4626-tests/README.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/forge-std/README.md`
|
||||
- `smom-dbis-138/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/lib/forge-std/README.md`
|
||||
|
||||
- **2 files** with same content:
|
||||
- `output/2025-12-20-19-51-48/README.md`
|
||||
- `output/2025-12-20-19-54-02/README.md`
|
||||
|
||||
## Old Files (>90 days)
|
||||
|
||||
Found **0** old files:
|
||||
|
||||
|
||||
## Files with Issues
|
||||
|
||||
Found **391** files with issues:
|
||||
|
||||
- **CONTAINER_INVENTORY_20260105_142214.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **BLOCKSCOUT_VERIFICATION_UPDATE.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **ENHANCEMENTS_SUMMARY.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **ALL_STEPS_COMPLETE.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **BLOCKSCOUT_START_COMPLETE.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **CONTAINER_INVENTORY_20260105_142314.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **ALL_ACTIONS_COMPLETE_SUMMARY.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **THIRDWEB_RPC_NEXT_STEPS.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **VALIDATION_COMPLETE.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **COMPREHENSIVE_PROJECT_REVIEW.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **ENHANCEMENTS_COMPLETE.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **BLOCKSCOUT_START_STATUS.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **metaverseDubai/COMPLETION_REPORT.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **metamask-integration/README.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **docs/DOCUMENTATION_FIXES_COMPLETE.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138-proxmox/TECHNICAL_REVIEW_REPORT.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138-proxmox/TECHNICAL_REVIEW_SUMMARY.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **explorer-monorepo/COMPLETE_DEPLOYMENT.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **explorer-monorepo/README_BRIDGE.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **explorer-monorepo/EXECUTE_THIS.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **explorer-monorepo/COMPLETE_WORK_SUMMARY.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **explorer-monorepo/START_HERE.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **scripts/cloudflare-tunnels/DEPLOYMENT_CHECKLIST.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **scripts/cloudflare-tunnels/IMPLEMENTATION_COMPLETE.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/runbooks/disaster-recovery.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/E2E_TESTING_REPORT.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/DEPLOYMENT_STATUS_AND_NEXT_STEPS.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/E2E_TESTING_AND_DEPLOYMENT_STATUS.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/PARALLEL_EXECUTION_SUMMARY.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/NEXT_STEPS_COMPLETE_GUIDE.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/COMPLETE_STATUS_REPORT.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/IMPLEMENTATION_COMPLETE.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/terraform/phases/phase1/DRY_RUN_RESULTS.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/terraform/phases/phase1/DEPLOYMENT_IN_PROGRESS.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/terraform/phases/phase1/DEPLOYMENT_VERIFICATION.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/project-reviews/MIGRATION_PROGRESS.md**
|
||||
- Contains placeholder date
|
||||
- Marks itself as deprecated
|
||||
|
||||
- **smom-dbis-138/docs/project-reviews/PROJECT_REVIEW_SUMMARY.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/project-reviews/PROJECT_REVIEW.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/project-reviews/REVIEW_COMPLETE.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/configuration/CONFIGURATION_FIXES_APPLIED.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/deployment/VM_DEPLOYMENT_CHECKLIST.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/deployment/DEFENDER_SUNSET_NOTICE.md**
|
||||
- Marks itself as deprecated
|
||||
|
||||
- **smom-dbis-138/docs/deployment/DEPLOYMENT-STATUS.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/deployment/MAINNET_DEPLOYMENT_PRIORITIZED_REPORT.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/deployment/VM_DEPLOYMENT.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/deployment/VM_DEPLOYMENT_SUMMARY.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/deployment/DEPLOYMENT_CONFIGURATION_AUDIT.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/deployment/PHASE2-INFRASTRUCTURE-DEPLOYMENT.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/bridge/trustless/DEPLOYMENT_STATUS.md**
|
||||
- Contains placeholder date
|
||||
|
||||
- **smom-dbis-138/docs/bridge/trustless/DEPLOYMENT_SUMMARY.md**
|
||||
- Contains placeholder date
|
||||
159
MARKDOWN_CLEANUP_QUICK_START.md
Normal file
159
MARKDOWN_CLEANUP_QUICK_START.md
Normal file
@@ -0,0 +1,159 @@
|
||||
# Markdown Files Cleanup - Quick Start Guide
|
||||
|
||||
**Last Updated**: 2026-01-05
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### Step 1: Review Analysis
|
||||
```bash
|
||||
# View comprehensive report
|
||||
cat MARKDOWN_FILES_COMPREHENSIVE_REPORT.md
|
||||
|
||||
# View execution summary
|
||||
cat CLEANUP_EXECUTION_SUMMARY.md
|
||||
|
||||
# View content inconsistencies
|
||||
cat CONTENT_INCONSISTENCIES.json | jq '.summary'
|
||||
```
|
||||
|
||||
### Step 2: Preview Cleanup (Dry Run)
|
||||
```bash
|
||||
# Already done - see MARKDOWN_CLEANUP_LOG_20260105_194645.log
|
||||
bash scripts/cleanup-markdown-files.sh
|
||||
```
|
||||
|
||||
### Step 3: Execute Cleanup
|
||||
```bash
|
||||
# Backup first (recommended)
|
||||
git add -A
|
||||
git commit -m "Backup before markdown cleanup"
|
||||
|
||||
# Execute cleanup
|
||||
DRY_RUN=false bash scripts/cleanup-markdown-files.sh
|
||||
```
|
||||
|
||||
### Step 4: Verify Results
|
||||
```bash
|
||||
# Check root directory
|
||||
ls -1 *.md | grep -v README.md | grep -v PROJECT_STRUCTURE.md
|
||||
|
||||
# Check reports organization
|
||||
ls reports/status/ | wc -l
|
||||
ls reports/archive/2026-01-05/ | wc -l
|
||||
|
||||
# Re-run analysis
|
||||
python3 scripts/analyze-markdown-files.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Current Status
|
||||
|
||||
- **Total Files**: 2,753 markdown files
|
||||
- **Root Directory**: 187 files (target: <10)
|
||||
- **Misplaced Files**: 244 identified
|
||||
- **Content Issues**: 1,008 inconsistencies
|
||||
- **Cleanup Ready**: ✅ Yes
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Key Actions
|
||||
|
||||
### Immediate (High Priority)
|
||||
1. ✅ Archive timestamped inventory files (14 files)
|
||||
2. ✅ Move root-level reports to `reports/` (~170 files)
|
||||
3. ✅ Archive temporary files from `rpc-translator-138/` (~60 files)
|
||||
|
||||
### Medium Priority
|
||||
4. ⏭️ Fix broken cross-references (887 issues)
|
||||
5. ⏭️ Consolidate duplicate status files (38 conflicts)
|
||||
6. ⏭️ Update outdated dates (10 files)
|
||||
|
||||
### Long-term
|
||||
7. ⏭️ Establish ongoing maintenance process
|
||||
8. ⏭️ Set up automated checks
|
||||
9. ⏭️ Document organization standards
|
||||
|
||||
---
|
||||
|
||||
## 📁 File Organization
|
||||
|
||||
```
|
||||
proxmox/
|
||||
├── README.md # ✅ Keep
|
||||
├── PROJECT_STRUCTURE.md # ✅ Keep
|
||||
├── docs/ # ✅ Documentation only
|
||||
│ ├── 01-getting-started/
|
||||
│ ├── 02-architecture/
|
||||
│ └── ...
|
||||
├── reports/ # ✅ All reports here
|
||||
│ ├── status/ # Status reports
|
||||
│ ├── analyses/ # Analysis reports
|
||||
│ └── archive/ # Archived reports
|
||||
│ └── 2026-01-05/ # Date-specific archives
|
||||
└── rpc-translator-138/ # ✅ Essential docs only
|
||||
├── README.md
|
||||
├── DEPLOYMENT.md
|
||||
└── docs/
|
||||
└── archive/ # Archived temp files
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Tools Available
|
||||
|
||||
### Analysis Scripts
|
||||
- `scripts/analyze-markdown-files.py` - Comprehensive analysis
|
||||
- `scripts/check-content-inconsistencies.py` - Content checks
|
||||
- `scripts/cleanup-markdown-files.sh` - Automated cleanup
|
||||
|
||||
### Generated Reports
|
||||
- `MARKDOWN_ANALYSIS_REPORT.md` - Detailed analysis
|
||||
- `MARKDOWN_ANALYSIS.json` - Machine-readable data
|
||||
- `CONTENT_INCONSISTENCIES.json` - Inconsistency details
|
||||
- `MARKDOWN_FILES_COMPREHENSIVE_REPORT.md` - Full report
|
||||
- `CLEANUP_EXECUTION_SUMMARY.md` - Cleanup plan
|
||||
- `MARKDOWN_CLEANUP_LOG_*.log` - Cleanup execution log
|
||||
|
||||
### Documentation
|
||||
- `docs/MARKDOWN_FILE_MAINTENANCE_GUIDE.md` - Maintenance guide
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Important Notes
|
||||
|
||||
1. **Backup First**: Always commit changes before cleanup
|
||||
2. **Dry Run**: Always test with `DRY_RUN=true` first
|
||||
3. **Review Logs**: Check cleanup logs before executing
|
||||
4. **Broken Links**: Many broken references will need manual fixing
|
||||
5. **Git History**: Files are moved, not deleted (safe)
|
||||
|
||||
---
|
||||
|
||||
## 📞 Need Help?
|
||||
|
||||
1. Review `MARKDOWN_FILES_COMPREHENSIVE_REPORT.md` for details
|
||||
2. Check `CLEANUP_EXECUTION_SUMMARY.md` for execution plan
|
||||
3. Read `docs/MARKDOWN_FILE_MAINTENANCE_GUIDE.md` for standards
|
||||
4. Review cleanup logs for specific actions
|
||||
|
||||
---
|
||||
|
||||
## ✅ Checklist
|
||||
|
||||
- [x] Analysis complete
|
||||
- [x] Cleanup script created
|
||||
- [x] Dry-run executed
|
||||
- [x] Reports generated
|
||||
- [ ] Cleanup executed (ready)
|
||||
- [ ] Broken links fixed
|
||||
- [ ] Cross-references updated
|
||||
- [ ] Maintenance process established
|
||||
|
||||
---
|
||||
|
||||
**Status**: Ready for execution
|
||||
**Risk**: Low (files moved, not deleted)
|
||||
**Time**: 15-30 minutes
|
||||
319
MARKDOWN_FILES_COMPREHENSIVE_REPORT.md
Normal file
319
MARKDOWN_FILES_COMPREHENSIVE_REPORT.md
Normal file
@@ -0,0 +1,319 @@
|
||||
# Comprehensive Markdown Files Analysis Report
|
||||
|
||||
**Generated**: 2026-01-05
|
||||
**Total Files Analyzed**: 2,753
|
||||
**Total Size**: 13.98 MB
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
This comprehensive analysis of all markdown files across the Proxmox project and submodules reveals significant organizational issues, redundant content, and misplaced files. The analysis identified **244 misplaced files**, **391 files with "COMPLETE" in name**, and numerous duplicate status/completion reports.
|
||||
|
||||
### Key Findings
|
||||
|
||||
- ✅ **Well-organized core documentation** in `docs/` numbered directories (01-12)
|
||||
- ⚠️ **185 files in root directory** (should be <10)
|
||||
- ⚠️ **90 files in rpc-translator-138/** (many temporary status files)
|
||||
- ⚠️ **244 misplaced files** identified
|
||||
- ⚠️ **Numerous duplicate status/completion files**
|
||||
|
||||
---
|
||||
|
||||
## 1. File Distribution Analysis
|
||||
|
||||
### By Directory
|
||||
|
||||
| Directory | File Count | Status |
|
||||
|-----------|------------|--------|
|
||||
| Root (`.`) | 185 | ⚠️ Too many - should be <10 |
|
||||
| `docs/` | 32 | ✅ Well organized |
|
||||
| `reports/` | 9 | ✅ Appropriate |
|
||||
| `rpc-translator-138/` | 90 | ⚠️ Many temporary files |
|
||||
| `dbis_core/` | 95 | ✅ Appropriate for submodule |
|
||||
| `smom-dbis-138/` | 4 | ✅ Appropriate |
|
||||
| `explorer-monorepo/` | 26 | ✅ Appropriate |
|
||||
| `metaverseDubai/` | 31 | ✅ Appropriate |
|
||||
|
||||
### By Pattern
|
||||
|
||||
| Pattern | Count | Recommendation |
|
||||
|---------|-------|---------------|
|
||||
| Files with "COMPLETE" | 391 | Consolidate to single status file per component |
|
||||
| Files with "FINAL" | 155 | Many duplicates - consolidate |
|
||||
| Files with "STATUS" | 177 | Consolidate status tracking |
|
||||
| Files with "FIX" | 263 | Move resolved fixes to archive |
|
||||
| Files with "REPORT" | 346 | Move to `reports/` directory |
|
||||
| Timestamped files | 20 | Archive or delete old snapshots |
|
||||
| Temporary files | 39 | Archive or delete |
|
||||
|
||||
---
|
||||
|
||||
## 2. Misplaced Files Analysis
|
||||
|
||||
### Root Directory Issues (185 files)
|
||||
|
||||
**Should be in `reports/`:**
|
||||
- All `*STATUS*.md` files
|
||||
- All `*REPORT*.md` files
|
||||
- All `*ANALYSIS*.md` files
|
||||
- All `*INVENTORY*.md` files
|
||||
- All `VMID*.md` files (except essential docs)
|
||||
|
||||
**Should be archived:**
|
||||
- All timestamped inventory files (`*_20260105_*.md`)
|
||||
- Old completion/status files
|
||||
- Temporary fix guides
|
||||
|
||||
**Should stay in root:**
|
||||
- `README.md` ✅
|
||||
- `PROJECT_STRUCTURE.md` ✅
|
||||
|
||||
### rpc-translator-138/ Issues (90 files)
|
||||
|
||||
**Temporary files to archive:**
|
||||
- `FIX_*.md` files (resolved fixes)
|
||||
- `QUICK_FIX*.md` files
|
||||
- `RUN_NOW.md`, `EXECUTE_NOW.md`, `EXECUTION_READY.md`
|
||||
- `*COMPLETE*.md` files (except final status)
|
||||
- `*FINAL*.md` files (except final status)
|
||||
- `*STATUS*.md` files (except current status)
|
||||
|
||||
**Should keep:**
|
||||
- `README.md` ✅
|
||||
- `DEPLOYMENT.md` ✅
|
||||
- `DEPLOYMENT_CHECKLIST.md` ✅
|
||||
- `API_METHODS_SUPPORT.md` ✅
|
||||
- `QUICK_SETUP_GUIDE.md` ✅
|
||||
- `QUICK_REFERENCE.md` ✅
|
||||
- `QUICK_START.md` ✅
|
||||
|
||||
### docs/ Directory Issues
|
||||
|
||||
**Status/completion files in docs (should be in reports):**
|
||||
- `DOCUMENTATION_FIXES_COMPLETE.md`
|
||||
- `DOCUMENTATION_REORGANIZATION_COMPLETE.md`
|
||||
- `MIGRATION_COMPLETE_FINAL.md`
|
||||
- `MIGRATION_FINAL_STATUS.md`
|
||||
- `R630_01_MIGRATION_COMPLETE*.md` files
|
||||
|
||||
**These are documentation about documentation - acceptable but could be in archive subdirectory**
|
||||
|
||||
---
|
||||
|
||||
## 3. Duplicate Content Analysis
|
||||
|
||||
### Redundant Status Files
|
||||
|
||||
**rpc-translator-138 duplicates:**
|
||||
- `ALL_COMPLETE.md` vs `ALL_TASKS_COMPLETE.md` vs `ALL_TASKS_COMPLETE_FINAL.md`
|
||||
- `COMPLETE_STATUS_FINAL.md` vs `COMPLETE_SUMMARY.md` vs `COMPLETION_STATUS.md`
|
||||
- `FINAL_COMPLETION_REPORT.md` vs `FINAL_COMPLETION_STATUS.md` vs `FINAL_DEPLOYMENT_STATUS.md` vs `FINAL_STATUS.md`
|
||||
- `DEPLOYMENT_COMPLETE.md` vs `DEPLOYMENT_COMPLETE_FINAL.md` vs `DEPLOYMENT_STATUS.md` vs `DEPLOYMENT_STATUS_FINAL.md`
|
||||
|
||||
**Root directory duplicates:**
|
||||
- `ALL_TASKS_COMPLETE_FINAL.md` vs `ALL_NEXT_STEPS_COMPLETE.md` vs `ALL_STEPS_COMPLETE.md`
|
||||
- `COMPLETE_EXECUTION_SUMMARY.md` vs `COMPLETE_IMPLEMENTATION_SUMMARY.md` vs `COMPLETE_SETUP_SUMMARY.md`
|
||||
|
||||
### Recommendation
|
||||
|
||||
**Consolidate to single status file per component:**
|
||||
- `rpc-translator-138/STATUS.md` (current status only)
|
||||
- `reports/PROJECT_STATUS.md` (root-level status)
|
||||
- Archive all old completion/final files
|
||||
|
||||
---
|
||||
|
||||
## 4. Timestamped Files
|
||||
|
||||
### Inventory Snapshots (14 files)
|
||||
|
||||
All files with pattern `*_20260105_*.md`:
|
||||
- `CONTAINER_INVENTORY_20260105_142214.md`
|
||||
- `CONTAINER_INVENTORY_20260105_142314.md`
|
||||
- `CONTAINER_INVENTORY_20260105_142357.md`
|
||||
- `CONTAINER_INVENTORY_20260105_142455.md`
|
||||
- `CONTAINER_INVENTORY_20260105_142712.md`
|
||||
- `CONTAINER_INVENTORY_20260105_142753.md`
|
||||
- `CONTAINER_INVENTORY_20260105_142842.md`
|
||||
- `CONTAINER_INVENTORY_20260105_144309.md`
|
||||
- `CONTAINER_INVENTORY_20260105_153516.md`
|
||||
- `CONTAINER_INVENTORY_20260105_154200.md`
|
||||
- `SERVICE_DEPENDENCIES_20260105_143608.md`
|
||||
- `SERVICE_DEPENDENCIES_20260105_143624.md`
|
||||
- `IP_AVAILABILITY_20260105_143535.md`
|
||||
- `DHCP_CONTAINERS_20260105_143507.md`
|
||||
|
||||
**Recommendation**: Move to `reports/archive/2026-01-05/` or delete if superseded by later versions.
|
||||
|
||||
---
|
||||
|
||||
## 5. Content Quality Issues
|
||||
|
||||
### Files with Placeholder Dates
|
||||
|
||||
Some files contain `$(date)` or similar placeholders instead of actual dates:
|
||||
- Check for files with placeholder dates and update
|
||||
|
||||
### Files Marked as Deprecated
|
||||
|
||||
Files that mark themselves as deprecated should be archived or deleted:
|
||||
- Check `CONTENT_INCONSISTENCIES.json` for details
|
||||
|
||||
### Broken Cross-References
|
||||
|
||||
Some files reference other markdown files that don't exist:
|
||||
- Check `CONTENT_INCONSISTENCIES.json` for broken links
|
||||
|
||||
---
|
||||
|
||||
## 6. Recommended Cleanup Actions
|
||||
|
||||
### Immediate Actions (High Priority)
|
||||
|
||||
1. **Move timestamped reports to archive**
|
||||
```bash
|
||||
mkdir -p reports/archive/2026-01-05
|
||||
mv CONTAINER_INVENTORY_20260105_*.md reports/archive/2026-01-05/
|
||||
mv SERVICE_DEPENDENCIES_20260105_*.md reports/archive/2026-01-05/
|
||||
mv IP_AVAILABILITY_20260105_*.md reports/archive/2026-01-05/
|
||||
mv DHCP_CONTAINERS_20260105_*.md reports/archive/2026-01-05/
|
||||
```
|
||||
|
||||
2. **Move root-level reports to reports/**
|
||||
```bash
|
||||
mkdir -p reports/status reports/analyses
|
||||
mv *STATUS*.md reports/status/ 2>/dev/null || true
|
||||
mv *REPORT*.md reports/status/ 2>/dev/null || true
|
||||
mv *ANALYSIS*.md reports/analyses/ 2>/dev/null || true
|
||||
mv VMID*.md reports/ 2>/dev/null || true
|
||||
```
|
||||
|
||||
3. **Archive temporary files from rpc-translator-138**
|
||||
```bash
|
||||
mkdir -p rpc-translator-138/docs/archive
|
||||
mv rpc-translator-138/FIX_*.md rpc-translator-138/docs/archive/ 2>/dev/null || true
|
||||
mv rpc-translator-138/*COMPLETE*.md rpc-translator-138/docs/archive/ 2>/dev/null || true
|
||||
mv rpc-translator-138/*FINAL*.md rpc-translator-138/docs/archive/ 2>/dev/null || true
|
||||
# Keep only: README.md, DEPLOYMENT.md, DEPLOYMENT_CHECKLIST.md, API_METHODS_SUPPORT.md, QUICK_*.md
|
||||
```
|
||||
|
||||
### Medium Priority Actions
|
||||
|
||||
4. **Consolidate duplicate status files**
|
||||
- Review all `*COMPLETE*.md` files
|
||||
- Keep only the most recent/complete version
|
||||
- Archive or delete duplicates
|
||||
|
||||
5. **Move status files from docs/ to reports/**
|
||||
```bash
|
||||
mv docs/*COMPLETE*.md reports/ 2>/dev/null || true
|
||||
mv docs/*MIGRATION*.md reports/ 2>/dev/null || true
|
||||
```
|
||||
|
||||
### Long-term Actions
|
||||
|
||||
6. **Establish file organization standards**
|
||||
- Create `.gitignore` patterns for temporary files
|
||||
- Document file naming conventions
|
||||
- Set up automated cleanup scripts
|
||||
|
||||
7. **Review and update outdated content**
|
||||
- Check files older than 90 days
|
||||
- Update or archive outdated information
|
||||
- Fix broken cross-references
|
||||
|
||||
---
|
||||
|
||||
## 7. Automated Cleanup Script
|
||||
|
||||
A cleanup script has been created at:
|
||||
- `scripts/cleanup-markdown-files.sh`
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
# Dry run (preview changes)
|
||||
bash scripts/cleanup-markdown-files.sh
|
||||
|
||||
# Actually move files
|
||||
DRY_RUN=false bash scripts/cleanup-markdown-files.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Analysis Scripts Created
|
||||
|
||||
1. **`scripts/analyze-markdown-files.py`**
|
||||
- Comprehensive file analysis
|
||||
- Generates `MARKDOWN_ANALYSIS.json` and `MARKDOWN_ANALYSIS_REPORT.md`
|
||||
|
||||
2. **`scripts/check-content-inconsistencies.py`**
|
||||
- Checks for content inconsistencies
|
||||
- Generates `CONTENT_INCONSISTENCIES.json`
|
||||
|
||||
3. **`scripts/cleanup-markdown-files.sh`**
|
||||
- Automated file organization
|
||||
- Moves files to appropriate directories
|
||||
|
||||
---
|
||||
|
||||
## 9. Next Steps
|
||||
|
||||
1. ✅ **Review this report**
|
||||
2. ✅ **Run cleanup script in dry-run mode**
|
||||
3. ⏭️ **Review proposed changes**
|
||||
4. ⏭️ **Execute cleanup script**
|
||||
5. ⏭️ **Verify file organization**
|
||||
6. ⏭️ **Update cross-references**
|
||||
7. ⏭️ **Establish ongoing maintenance process**
|
||||
|
||||
---
|
||||
|
||||
## 10. File Organization Standards (Recommended)
|
||||
|
||||
### Root Directory
|
||||
**Should contain only:**
|
||||
- `README.md` - Main project README
|
||||
- `PROJECT_STRUCTURE.md` - Project structure documentation
|
||||
|
||||
### docs/ Directory
|
||||
**Should contain only:**
|
||||
- Permanent documentation
|
||||
- Guides and tutorials
|
||||
- Architecture documentation
|
||||
- Configuration guides
|
||||
|
||||
**Should NOT contain:**
|
||||
- Status reports
|
||||
- Completion reports
|
||||
- Temporary fix guides
|
||||
- Timestamped snapshots
|
||||
|
||||
### reports/ Directory
|
||||
**Should contain:**
|
||||
- All status reports
|
||||
- All analysis reports
|
||||
- All diagnostic reports
|
||||
- Timestamped snapshots (in archive subdirectories)
|
||||
|
||||
### Submodule Directories
|
||||
**Each submodule should have:**
|
||||
- `README.md` - Submodule documentation
|
||||
- Project-specific documentation in `docs/` subdirectory
|
||||
- Status/completion files archived or in `reports/` subdirectory
|
||||
|
||||
---
|
||||
|
||||
## Conclusion
|
||||
|
||||
The markdown file organization needs significant cleanup, but the core documentation structure is sound. With the automated cleanup script and clear organization standards, the project can achieve a clean, maintainable documentation structure.
|
||||
|
||||
**Estimated cleanup time**: 1-2 hours
|
||||
**Files to move**: ~244 files
|
||||
**Files to archive**: ~100 files
|
||||
**Files to delete**: ~50 files (duplicates/outdated)
|
||||
|
||||
---
|
||||
|
||||
**Report Generated By**: Automated Analysis Scripts
|
||||
**Last Updated**: 2026-01-05
|
||||
1
dbis_core
Submodule
1
dbis_core
Submodule
Submodule dbis_core added at 849e6a8357
256
docs/MARKDOWN_FILE_MAINTENANCE_GUIDE.md
Normal file
256
docs/MARKDOWN_FILE_MAINTENANCE_GUIDE.md
Normal file
@@ -0,0 +1,256 @@
|
||||
# Markdown File Maintenance Guide
|
||||
|
||||
**Last Updated**: 2026-01-05
|
||||
**Purpose**: Guidelines for maintaining clean, organized markdown files
|
||||
|
||||
---
|
||||
|
||||
## File Organization Standards
|
||||
|
||||
### Root Directory (`/`)
|
||||
**Should contain ONLY**:
|
||||
- `README.md` - Main project README
|
||||
- `PROJECT_STRUCTURE.md` - Project structure documentation
|
||||
|
||||
**Should NOT contain**:
|
||||
- Status reports
|
||||
- Completion reports
|
||||
- Analysis reports
|
||||
- Timestamped snapshots
|
||||
- Temporary fix guides
|
||||
|
||||
### Documentation Directory (`docs/`)
|
||||
**Should contain**:
|
||||
- Permanent documentation
|
||||
- Architecture guides
|
||||
- Configuration guides
|
||||
- Tutorials and how-tos
|
||||
- API documentation
|
||||
|
||||
**Should NOT contain**:
|
||||
- Status/completion reports (→ `reports/`)
|
||||
- Temporary fix guides (→ `docs/09-troubleshooting/archive/`)
|
||||
- Timestamped snapshots (→ `reports/archive/`)
|
||||
|
||||
### Reports Directory (`reports/`)
|
||||
**Should contain**:
|
||||
- All status reports
|
||||
- All analysis reports
|
||||
- All diagnostic reports
|
||||
- Timestamped snapshots (in `archive/` subdirectories)
|
||||
|
||||
**Structure**:
|
||||
```
|
||||
reports/
|
||||
├── status/ # Current status reports
|
||||
├── analyses/ # Analysis reports
|
||||
├── inventories/ # Inventory reports
|
||||
└── archive/ # Archived reports by date
|
||||
└── YYYY-MM-DD/ # Date-specific archives
|
||||
```
|
||||
|
||||
### Submodule Directories
|
||||
**Each submodule should have**:
|
||||
- `README.md` - Submodule documentation
|
||||
- `docs/` - Submodule-specific documentation
|
||||
- `reports/` or `archive/` - Status/completion files
|
||||
|
||||
---
|
||||
|
||||
## File Naming Conventions
|
||||
|
||||
### Documentation Files
|
||||
- Use `UPPERCASE_WITH_UNDERSCORES.md`
|
||||
- Be descriptive: `NETWORK_ARCHITECTURE.md` not `network.md`
|
||||
- Use consistent prefixes:
|
||||
- `README.md` - Directory overview
|
||||
- `QUICK_START.md` - Quick start guide
|
||||
- `DEPLOYMENT.md` - Deployment guide
|
||||
- `TROUBLESHOOTING.md` - Troubleshooting guide
|
||||
|
||||
### Status/Report Files
|
||||
- Use descriptive names: `SERVICE_STATUS.md` not `status.md`
|
||||
- Avoid timestamps in filenames (use archive directories instead)
|
||||
- Use consistent suffixes:
|
||||
- `*_STATUS.md` - Current status
|
||||
- `*_REPORT.md` - Analysis report
|
||||
- `*_SUMMARY.md` - Summary report
|
||||
|
||||
### Temporary Files
|
||||
- Prefix with `TEMP_` or `ARCHIVE_`
|
||||
- Move to archive directories promptly
|
||||
- Delete after 90 days if no longer needed
|
||||
|
||||
---
|
||||
|
||||
## When to Create Files
|
||||
|
||||
### ✅ Create Documentation When:
|
||||
- Documenting a new feature or component
|
||||
- Creating a guide or tutorial
|
||||
- Documenting architecture or design decisions
|
||||
- Creating API documentation
|
||||
|
||||
### ✅ Create Reports When:
|
||||
- Generating status reports
|
||||
- Creating analysis reports
|
||||
- Documenting diagnostic findings
|
||||
- Creating inventory snapshots
|
||||
|
||||
### ❌ Don't Create Files For:
|
||||
- Temporary notes (use issue tracker or notes app)
|
||||
- One-time commands (use scripts)
|
||||
- Duplicate status (update existing file)
|
||||
- Placeholder content (wait until content is ready)
|
||||
|
||||
---
|
||||
|
||||
## When to Archive Files
|
||||
|
||||
### Archive When:
|
||||
- File is older than 90 days AND superseded by newer version
|
||||
- File is a timestamped snapshot
|
||||
- File documents a completed task (not ongoing)
|
||||
- File is a temporary fix guide (issue resolved)
|
||||
|
||||
### Archive Location:
|
||||
- `reports/archive/YYYY-MM-DD/` - For dated reports
|
||||
- `docs/09-troubleshooting/archive/` - For resolved troubleshooting guides
|
||||
- `{submodule}/docs/archive/` - For submodule-specific archives
|
||||
|
||||
### Archive Naming:
|
||||
- Keep original filename
|
||||
- Add date prefix if needed: `YYYY-MM-DD_original-name.md`
|
||||
- Create `README.md` in archive directory explaining contents
|
||||
|
||||
---
|
||||
|
||||
## When to Delete Files
|
||||
|
||||
### Safe to Delete:
|
||||
- Duplicate files (keep most recent)
|
||||
- Empty or placeholder files
|
||||
- Files marked as deprecated
|
||||
- Old temporary files (>90 days, archived)
|
||||
|
||||
### Never Delete:
|
||||
- `README.md` files
|
||||
- Active documentation
|
||||
- Files referenced by other files
|
||||
- Files in git history (use git to remove)
|
||||
|
||||
---
|
||||
|
||||
## Maintenance Checklist
|
||||
|
||||
### Weekly
|
||||
- [ ] Review root directory for misplaced files
|
||||
- [ ] Archive timestamped snapshots older than 7 days
|
||||
- [ ] Check for duplicate status files
|
||||
|
||||
### Monthly
|
||||
- [ ] Review `reports/` organization
|
||||
- [ ] Archive completed status reports
|
||||
- [ ] Update cross-references
|
||||
- [ ] Check for broken links
|
||||
|
||||
### Quarterly
|
||||
- [ ] Review archive directories
|
||||
- [ ] Delete old temporary files (>90 days)
|
||||
- [ ] Consolidate duplicate documentation
|
||||
- [ ] Update file organization standards
|
||||
|
||||
---
|
||||
|
||||
## Automated Maintenance
|
||||
|
||||
### Analysis Scripts
|
||||
```bash
|
||||
# Analyze all markdown files
|
||||
python3 scripts/analyze-markdown-files.py
|
||||
|
||||
# Check for inconsistencies
|
||||
python3 scripts/check-content-inconsistencies.py
|
||||
|
||||
# Cleanup files
|
||||
bash scripts/cleanup-markdown-files.sh
|
||||
```
|
||||
|
||||
### Git Hooks (Optional)
|
||||
Create `.git/hooks/pre-commit` to check for:
|
||||
- Files in wrong directories
|
||||
- Broken cross-references
|
||||
- Placeholder content
|
||||
|
||||
---
|
||||
|
||||
## Common Issues and Solutions
|
||||
|
||||
### Issue: Too many files in root
|
||||
**Solution**: Move status/report files to `reports/`
|
||||
|
||||
### Issue: Duplicate status files
|
||||
**Solution**: Consolidate to single status file per component
|
||||
|
||||
### Issue: Broken cross-references
|
||||
**Solution**: Update links or move files to correct location
|
||||
|
||||
### Issue: Outdated content
|
||||
**Solution**: Archive or update with current information
|
||||
|
||||
### Issue: Temporary files accumulating
|
||||
**Solution**: Archive or delete after 90 days
|
||||
|
||||
---
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **One Source of Truth**: Don't duplicate status information
|
||||
2. **Clear Organization**: Follow directory structure standards
|
||||
3. **Descriptive Names**: Use clear, consistent file names
|
||||
4. **Regular Cleanup**: Archive or delete old files regularly
|
||||
5. **Cross-Reference**: Keep links between related files updated
|
||||
6. **Document Decisions**: Explain why files are organized as they are
|
||||
|
||||
---
|
||||
|
||||
## Quick Reference
|
||||
|
||||
### File Locations
|
||||
| Type | Location |
|
||||
|------|----------|
|
||||
| Main README | `/README.md` |
|
||||
| Project Structure | `/PROJECT_STRUCTURE.md` |
|
||||
| Documentation | `/docs/` |
|
||||
| Status Reports | `/reports/status/` |
|
||||
| Analysis Reports | `/reports/analyses/` |
|
||||
| Archived Reports | `/reports/archive/YYYY-MM-DD/` |
|
||||
| Temporary Fixes | `/docs/09-troubleshooting/archive/` |
|
||||
|
||||
### Commands
|
||||
```bash
|
||||
# Count markdown files
|
||||
find . -name "*.md" -type f | wc -l
|
||||
|
||||
# Find files in root
|
||||
find . -maxdepth 1 -name "*.md" -type f
|
||||
|
||||
# Find duplicate names
|
||||
find . -name "*.md" -type f | xargs basename | sort | uniq -d
|
||||
|
||||
# Check for broken links (requires markdown-link-check)
|
||||
find . -name "*.md" -type f -exec markdown-link-check {} \;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Questions?
|
||||
|
||||
- Review `MARKDOWN_FILES_COMPREHENSIVE_REPORT.md` for detailed analysis
|
||||
- Check `CONTENT_INCONSISTENCIES.json` for specific issues
|
||||
- Run analysis scripts for current status
|
||||
|
||||
---
|
||||
|
||||
**Maintained By**: Project Team
|
||||
**Last Review**: 2026-01-05
|
||||
1
explorer-monorepo
Submodule
1
explorer-monorepo
Submodule
Submodule explorer-monorepo added at 4d4f8cedad
1
gru-docs
Submodule
1
gru-docs
Submodule
Submodule gru-docs added at 865ce7d6c5
Submodule mcp-proxmox deleted from 1d7e9c2d4e
1
metamask-integration
Submodule
1
metamask-integration
Submodule
Submodule metamask-integration added at 0ade1c0c80
1
metaverseDubai
Submodule
1
metaverseDubai
Submodule
Submodule metaverseDubai added at 3834f140b0
1
miracles_in_motion
Submodule
1
miracles_in_motion
Submodule
Submodule miracles_in_motion added at f5eb036ee9
Submodule omada-api deleted from d47b6ec049
365
scripts/analyze-markdown-files.py
Executable file
365
scripts/analyze-markdown-files.py
Executable file
@@ -0,0 +1,365 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Comprehensive Markdown File Analysis Script
|
||||
Analyzes all markdown files in the project for:
|
||||
- File dates (creation, modification)
|
||||
- Duplicate patterns
|
||||
- Misplaced files
|
||||
- Content inconsistencies
|
||||
- Outdated information
|
||||
"""
|
||||
|
||||
import os
|
||||
import re
|
||||
import json
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
from collections import defaultdict
|
||||
from typing import Dict, List, Tuple, Set
|
||||
import hashlib
|
||||
|
||||
class MarkdownAnalyzer:
|
||||
def __init__(self, root_dir: str):
|
||||
self.root_dir = Path(root_dir)
|
||||
self.files = []
|
||||
self.duplicates = defaultdict(list)
|
||||
self.patterns = {
|
||||
'complete': [],
|
||||
'final': [],
|
||||
'status': [],
|
||||
'timestamped': [],
|
||||
'fix': [],
|
||||
'report': [],
|
||||
'temporary': []
|
||||
}
|
||||
self.misplaced = []
|
||||
self.content_hashes = {}
|
||||
self.file_metadata = []
|
||||
|
||||
def analyze(self):
|
||||
"""Run full analysis"""
|
||||
print("🔍 Scanning markdown files...")
|
||||
self._scan_files()
|
||||
print(f"📊 Found {len(self.files)} markdown files")
|
||||
|
||||
print("\n📅 Analyzing file dates...")
|
||||
self._analyze_dates()
|
||||
|
||||
print("\n🔎 Identifying patterns...")
|
||||
self._identify_patterns()
|
||||
|
||||
print("\n📍 Finding misplaced files...")
|
||||
self._find_misplaced()
|
||||
|
||||
print("\n🔗 Checking for duplicates...")
|
||||
self._check_duplicates()
|
||||
|
||||
print("\n📝 Analyzing content...")
|
||||
self._analyze_content()
|
||||
|
||||
return self._generate_report()
|
||||
|
||||
def _scan_files(self):
|
||||
"""Scan for all markdown files"""
|
||||
exclude_dirs = {'.git', 'node_modules', '__pycache__', '.next', 'dist', 'build', 'venv', '.venv'}
|
||||
|
||||
for md_file in self.root_dir.rglob('*.md'):
|
||||
# Skip excluded directories
|
||||
if any(part in exclude_dirs for part in md_file.parts):
|
||||
continue
|
||||
|
||||
try:
|
||||
stat = md_file.stat()
|
||||
rel_path = md_file.relative_to(self.root_dir)
|
||||
|
||||
self.files.append({
|
||||
'path': str(rel_path),
|
||||
'full_path': str(md_file),
|
||||
'size': stat.st_size,
|
||||
'modified': datetime.fromtimestamp(stat.st_mtime),
|
||||
'accessed': datetime.fromtimestamp(stat.st_atime),
|
||||
'created': datetime.fromtimestamp(stat.st_ctime) if hasattr(stat, 'st_birthtime') else None,
|
||||
'directory': str(rel_path.parent),
|
||||
'name': md_file.name
|
||||
})
|
||||
except (OSError, PermissionError) as e:
|
||||
print(f"⚠️ Error accessing {md_file}: {e}")
|
||||
|
||||
def _analyze_dates(self):
|
||||
"""Analyze file modification dates"""
|
||||
now = datetime.now()
|
||||
for file_info in self.files:
|
||||
modified = file_info['modified']
|
||||
days_old = (now - modified).days
|
||||
|
||||
file_info['days_old'] = days_old
|
||||
file_info['age_category'] = (
|
||||
'recent' if days_old < 7 else
|
||||
'recent' if days_old < 30 else
|
||||
'moderate' if days_old < 90 else
|
||||
'old' if days_old < 365 else
|
||||
'very_old'
|
||||
)
|
||||
|
||||
def _identify_patterns(self):
|
||||
"""Identify files by naming patterns"""
|
||||
patterns = {
|
||||
'complete': re.compile(r'COMPLETE', re.I),
|
||||
'final': re.compile(r'FINAL', re.I),
|
||||
'status': re.compile(r'STATUS', re.I),
|
||||
'timestamped': re.compile(r'_\d{8}_\d{6}|\d{8}_\d{6}'),
|
||||
'fix': re.compile(r'FIX|QUICK_FIX|RUN_NOW|EXECUTE', re.I),
|
||||
'report': re.compile(r'REPORT|SUMMARY|ANALYSIS|DIAGNOSTIC', re.I),
|
||||
'temporary': re.compile(r'NOW|READY|EXECUTE|RUN_', re.I)
|
||||
}
|
||||
|
||||
for file_info in self.files:
|
||||
name = file_info['name']
|
||||
for pattern_name, pattern in patterns.items():
|
||||
if pattern.search(name):
|
||||
self.patterns[pattern_name].append(file_info)
|
||||
file_info[f'has_{pattern_name}'] = True
|
||||
|
||||
def _find_misplaced(self):
|
||||
"""Find files in wrong locations"""
|
||||
root_files = [f for f in self.files if f['directory'] == '.']
|
||||
docs_files = [f for f in self.files if f['directory'].startswith('docs')]
|
||||
reports_files = [f for f in self.files if f['directory'].startswith('reports')]
|
||||
|
||||
# Reports in root
|
||||
for f in root_files:
|
||||
if any(keyword in f['name'].upper() for keyword in ['REPORT', 'STATUS', 'INVENTORY', 'DIAGNOSTIC', 'ANALYSIS']):
|
||||
if not f['name'] in ['README.md', 'PROJECT_STRUCTURE.md']:
|
||||
self.misplaced.append({
|
||||
'file': f,
|
||||
'current': 'root',
|
||||
'should_be': 'reports/',
|
||||
'reason': 'Report file in root directory'
|
||||
})
|
||||
|
||||
# Status/completion files in docs
|
||||
for f in docs_files:
|
||||
if any(keyword in f['name'].upper() for keyword in ['COMPLETE', 'FINAL', 'STATUS', 'MIGRATION_COMPLETE']):
|
||||
self.misplaced.append({
|
||||
'file': f,
|
||||
'current': f['directory'],
|
||||
'should_be': 'reports/',
|
||||
'reason': 'Status/completion report in docs directory'
|
||||
})
|
||||
|
||||
# Temporary fix guides in project root
|
||||
for f in root_files:
|
||||
if any(keyword in f['name'].upper() for keyword in ['FIX_', 'QUICK_FIX', 'RUN_NOW', 'EXECUTE']):
|
||||
self.misplaced.append({
|
||||
'file': f,
|
||||
'current': 'root',
|
||||
'should_be': 'docs/09-troubleshooting/archive/',
|
||||
'reason': 'Temporary fix guide in root'
|
||||
})
|
||||
|
||||
def _check_duplicates(self):
|
||||
"""Check for duplicate content"""
|
||||
for file_info in self.files:
|
||||
try:
|
||||
with open(file_info['full_path'], 'rb') as f:
|
||||
content_hash = hashlib.md5(f.read()).hexdigest()
|
||||
|
||||
if content_hash in self.content_hashes:
|
||||
self.duplicates[content_hash].append(file_info)
|
||||
else:
|
||||
self.content_hashes[content_hash] = [file_info]
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
def _analyze_content(self):
|
||||
"""Analyze file content for issues"""
|
||||
for file_info in self.files:
|
||||
try:
|
||||
with open(file_info['full_path'], 'r', encoding='utf-8', errors='ignore') as f:
|
||||
content = f.read()
|
||||
lines = content.split('\n')
|
||||
|
||||
file_info['line_count'] = len(lines)
|
||||
file_info['has_todo'] = 'TODO' in content or 'FIXME' in content
|
||||
file_info['has_deprecated'] = 'DEPRECATED' in content or 'OBSOLETE' in content
|
||||
file_info['has_date'] = bool(re.search(r'\d{4}-\d{2}-\d{2}|\d{1,2}/\d{1,2}/\d{4}', content))
|
||||
|
||||
# Check for placeholder dates
|
||||
if re.search(r'\$\(date\)|date \+', content):
|
||||
file_info['has_placeholder_date'] = True
|
||||
except Exception as e:
|
||||
file_info['line_count'] = 0
|
||||
file_info['error'] = str(e)
|
||||
|
||||
def _generate_report(self) -> Dict:
|
||||
"""Generate comprehensive report"""
|
||||
report = {
|
||||
'summary': {
|
||||
'total_files': len(self.files),
|
||||
'total_size_mb': sum(f['size'] for f in self.files) / (1024 * 1024),
|
||||
'by_age': defaultdict(int),
|
||||
'by_directory': defaultdict(int)
|
||||
},
|
||||
'patterns': {},
|
||||
'misplaced': [],
|
||||
'duplicates': [],
|
||||
'old_files': [],
|
||||
'empty_files': [],
|
||||
'issues': []
|
||||
}
|
||||
|
||||
# Summary stats
|
||||
for f in self.files:
|
||||
report['summary']['by_age'][f['age_category']] += 1
|
||||
report['summary']['by_directory'][f['directory']] += 1
|
||||
|
||||
# Pattern counts
|
||||
for pattern_name, files in self.patterns.items():
|
||||
report['patterns'][pattern_name] = {
|
||||
'count': len(files),
|
||||
'files': [f['path'] for f in files[:20]] # Limit to 20
|
||||
}
|
||||
|
||||
# Misplaced files
|
||||
report['misplaced'] = [
|
||||
{
|
||||
'path': m['file']['path'],
|
||||
'current': m['current'],
|
||||
'should_be': m['should_be'],
|
||||
'reason': m['reason']
|
||||
}
|
||||
for m in self.misplaced
|
||||
]
|
||||
|
||||
# Duplicate content
|
||||
for hash_val, files in self.duplicates.items():
|
||||
if len(files) > 1:
|
||||
report['duplicates'].append({
|
||||
'hash': hash_val[:8],
|
||||
'count': len(files),
|
||||
'files': [f['path'] for f in files]
|
||||
})
|
||||
|
||||
# Old files (>90 days)
|
||||
report['old_files'] = [
|
||||
{
|
||||
'path': f['path'],
|
||||
'days_old': f['days_old'],
|
||||
'modified': f['modified'].isoformat()
|
||||
}
|
||||
for f in self.files if f['days_old'] > 90
|
||||
]
|
||||
|
||||
# Empty or very small files
|
||||
report['empty_files'] = [
|
||||
{
|
||||
'path': f['path'],
|
||||
'size': f['size'],
|
||||
'line_count': f.get('line_count', 0)
|
||||
}
|
||||
for f in self.files if f['size'] < 100 or f.get('line_count', 0) < 5
|
||||
]
|
||||
|
||||
# Issues
|
||||
for f in self.files:
|
||||
issues = []
|
||||
if f.get('has_placeholder_date'):
|
||||
issues.append('Contains placeholder date')
|
||||
if f.get('has_deprecated'):
|
||||
issues.append('Marks itself as deprecated')
|
||||
if f['days_old'] > 365:
|
||||
issues.append('Very old (>1 year)')
|
||||
if f['size'] < 50:
|
||||
issues.append('Very small file')
|
||||
|
||||
if issues:
|
||||
report['issues'].append({
|
||||
'path': f['path'],
|
||||
'issues': issues
|
||||
})
|
||||
|
||||
return report
|
||||
|
||||
def main():
|
||||
root_dir = Path(__file__).parent.parent
|
||||
analyzer = MarkdownAnalyzer(root_dir)
|
||||
report = analyzer.analyze()
|
||||
|
||||
# Save JSON report
|
||||
json_file = root_dir / 'MARKDOWN_ANALYSIS.json'
|
||||
with open(json_file, 'w') as f:
|
||||
json.dump(report, f, indent=2, default=str)
|
||||
print(f"\n✅ JSON report saved to: {json_file}")
|
||||
|
||||
# Generate markdown report
|
||||
md_file = root_dir / 'MARKDOWN_ANALYSIS_REPORT.md'
|
||||
with open(md_file, 'w') as f:
|
||||
f.write(generate_markdown_report(report))
|
||||
print(f"✅ Markdown report saved to: {md_file}")
|
||||
|
||||
return report
|
||||
|
||||
def generate_markdown_report(report: Dict) -> str:
|
||||
"""Generate human-readable markdown report"""
|
||||
md = []
|
||||
md.append("# Markdown Files Analysis Report\n")
|
||||
md.append(f"**Generated**: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
|
||||
|
||||
# Summary
|
||||
md.append("## Summary\n")
|
||||
md.append(f"- **Total Files**: {report['summary']['total_files']}")
|
||||
md.append(f"- **Total Size**: {report['summary']['total_size_mb']:.2f} MB\n")
|
||||
|
||||
md.append("### Files by Age\n")
|
||||
for age, count in sorted(report['summary']['by_age'].items()):
|
||||
md.append(f"- **{age.title()}**: {count}")
|
||||
md.append("")
|
||||
|
||||
# Patterns
|
||||
md.append("## File Patterns\n")
|
||||
for pattern_name, data in report['patterns'].items():
|
||||
md.append(f"### {pattern_name.title()} ({data['count']} files)\n")
|
||||
for file_path in data['files'][:10]:
|
||||
md.append(f"- `{file_path}`")
|
||||
if data['count'] > 10:
|
||||
md.append(f"- ... and {data['count'] - 10} more")
|
||||
md.append("")
|
||||
|
||||
# Misplaced files
|
||||
md.append("## Misplaced Files\n")
|
||||
md.append(f"Found **{len(report['misplaced'])}** misplaced files:\n")
|
||||
for m in report['misplaced'][:50]:
|
||||
md.append(f"- **{m['path']}**")
|
||||
md.append(f" - Current: `{m['current']}`")
|
||||
md.append(f" - Should be: `{m['should_be']}`")
|
||||
md.append(f" - Reason: {m['reason']}\n")
|
||||
|
||||
# Duplicates
|
||||
md.append("## Duplicate Content\n")
|
||||
md.append(f"Found **{len(report['duplicates'])}** sets of duplicate files:\n")
|
||||
for dup in report['duplicates'][:20]:
|
||||
md.append(f"- **{dup['count']} files** with same content:")
|
||||
for file_path in dup['files']:
|
||||
md.append(f" - `{file_path}`")
|
||||
md.append("")
|
||||
|
||||
# Old files
|
||||
md.append("## Old Files (>90 days)\n")
|
||||
md.append(f"Found **{len(report['old_files'])}** old files:\n")
|
||||
for f in sorted(report['old_files'], key=lambda x: x['days_old'], reverse=True)[:50]:
|
||||
md.append(f"- **{f['path']}** ({f['days_old']} days old, modified: {f['modified'][:10]})")
|
||||
md.append("")
|
||||
|
||||
# Issues
|
||||
md.append("## Files with Issues\n")
|
||||
md.append(f"Found **{len(report['issues'])}** files with issues:\n")
|
||||
for issue in report['issues'][:50]:
|
||||
md.append(f"- **{issue['path']}**")
|
||||
for i in issue['issues']:
|
||||
md.append(f" - {i}")
|
||||
md.append("")
|
||||
|
||||
return "\n".join(md)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
308
scripts/check-content-inconsistencies.py
Executable file
308
scripts/check-content-inconsistencies.py
Executable file
@@ -0,0 +1,308 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Content Inconsistency Checker
|
||||
Compares related markdown files for inconsistencies in:
|
||||
- Dates
|
||||
- Status information
|
||||
- Configuration values
|
||||
- References to other files
|
||||
"""
|
||||
|
||||
import os
|
||||
import re
|
||||
import json
|
||||
from pathlib import Path
|
||||
from collections import defaultdict
|
||||
from typing import Dict, List, Set, Tuple
|
||||
from datetime import datetime
|
||||
|
||||
class ContentInconsistencyChecker:
|
||||
def __init__(self, root_dir: str):
|
||||
self.root_dir = Path(root_dir)
|
||||
self.inconsistencies = []
|
||||
self.file_contents = {}
|
||||
|
||||
def check(self):
|
||||
"""Run all consistency checks"""
|
||||
print("🔍 Checking content inconsistencies...")
|
||||
|
||||
# Load file contents
|
||||
self._load_files()
|
||||
|
||||
# Check for inconsistencies
|
||||
print("\n📅 Checking date inconsistencies...")
|
||||
self._check_dates()
|
||||
|
||||
print("\n📊 Checking status inconsistencies...")
|
||||
self._check_status()
|
||||
|
||||
print("\n🔗 Checking cross-references...")
|
||||
self._check_references()
|
||||
|
||||
print("\n⚙️ Checking configuration values...")
|
||||
self._check_config_values()
|
||||
|
||||
print("\n📝 Checking duplicate content...")
|
||||
self._check_duplicate_content()
|
||||
|
||||
return self._generate_report()
|
||||
|
||||
def _load_files(self):
|
||||
"""Load markdown file contents"""
|
||||
exclude_dirs = {'.git', 'node_modules', '__pycache__', '.next', 'dist', 'build', 'venv'}
|
||||
|
||||
for md_file in self.root_dir.rglob('*.md'):
|
||||
if any(part in exclude_dirs for part in md_file.parts):
|
||||
continue
|
||||
|
||||
try:
|
||||
with open(md_file, 'r', encoding='utf-8', errors='ignore') as f:
|
||||
content = f.read()
|
||||
rel_path = str(md_file.relative_to(self.root_dir))
|
||||
self.file_contents[rel_path] = {
|
||||
'content': content,
|
||||
'path': rel_path,
|
||||
'lines': content.split('\n')
|
||||
}
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
def _check_dates(self):
|
||||
"""Check for inconsistent dates"""
|
||||
date_patterns = [
|
||||
r'(\d{4}-\d{2}-\d{2})', # YYYY-MM-DD
|
||||
r'(\d{1,2}/\d{1,2}/\d{4})', # MM/DD/YYYY
|
||||
r'Date[:\s]+(\d{4}-\d{2}-\d{2})',
|
||||
r'Generated[:\s]+(\d{4}-\d{2}-\d{2})',
|
||||
r'Last Updated[:\s]+(\d{4}-\d{2}-\d{2})',
|
||||
]
|
||||
|
||||
# Group files by project/component
|
||||
project_files = defaultdict(list)
|
||||
for path in self.file_contents:
|
||||
if 'rpc-translator-138' in path:
|
||||
project_files['rpc-translator-138'].append(path)
|
||||
elif path.startswith('docs/'):
|
||||
project_files['docs'].append(path)
|
||||
elif path.startswith('reports/'):
|
||||
project_files['reports'].append(path)
|
||||
elif '/' not in path or path.count('/') == 0:
|
||||
project_files['root'].append(path)
|
||||
|
||||
# Check dates within each project
|
||||
for project, files in project_files.items():
|
||||
dates_found = []
|
||||
for file_path in files:
|
||||
content = self.file_contents[file_path]['content']
|
||||
for pattern in date_patterns:
|
||||
matches = re.findall(pattern, content)
|
||||
for match in matches:
|
||||
dates_found.append((file_path, match))
|
||||
|
||||
# Check for very old dates (>1 year)
|
||||
now = datetime.now()
|
||||
for file_path, date_str in dates_found:
|
||||
try:
|
||||
if '-' in date_str:
|
||||
date_obj = datetime.strptime(date_str, '%Y-%m-%d')
|
||||
elif '/' in date_str:
|
||||
parts = date_str.split('/')
|
||||
if len(parts) == 3:
|
||||
date_obj = datetime.strptime(date_str, '%m/%d/%Y')
|
||||
else:
|
||||
continue
|
||||
else:
|
||||
continue
|
||||
|
||||
days_diff = (now - date_obj).days
|
||||
if days_diff > 365:
|
||||
self.inconsistencies.append({
|
||||
'type': 'old_date',
|
||||
'file': file_path,
|
||||
'issue': f'Date {date_str} is {days_diff} days old',
|
||||
'severity': 'medium'
|
||||
})
|
||||
except:
|
||||
pass
|
||||
|
||||
def _check_status(self):
|
||||
"""Check for inconsistent status information"""
|
||||
status_patterns = [
|
||||
r'Status[:\s]+([✅❌🔄⚠️]+|COMPLETE|INCOMPLETE|PENDING|ACTIVE|INACTIVE)',
|
||||
r'\*\*Status\*\*[:\s]+([✅❌🔄⚠️]+|COMPLETE|INCOMPLETE|PENDING)',
|
||||
]
|
||||
|
||||
# Group related status files
|
||||
status_groups = defaultdict(list)
|
||||
for path in self.file_contents:
|
||||
filename = Path(path).name
|
||||
if 'COMPLETE' in filename or 'STATUS' in filename or 'FINAL' in filename:
|
||||
# Extract base name
|
||||
base = re.sub(r'_(COMPLETE|FINAL|STATUS).*', '', filename)
|
||||
base = re.sub(r'COMPLETE|FINAL|STATUS', '', base)
|
||||
status_groups[base].append(path)
|
||||
|
||||
# Check for conflicting statuses
|
||||
for base, files in status_groups.items():
|
||||
if len(files) > 1:
|
||||
statuses = []
|
||||
for file_path in files:
|
||||
content = self.file_contents[file_path]['content']
|
||||
for pattern in status_patterns:
|
||||
matches = re.findall(pattern, content, re.IGNORECASE)
|
||||
statuses.extend([(file_path, m) for m in matches])
|
||||
|
||||
if len(set(s[1] for s in statuses)) > 1:
|
||||
self.inconsistencies.append({
|
||||
'type': 'conflicting_status',
|
||||
'files': files,
|
||||
'issue': f'Multiple status files for {base} with different statuses',
|
||||
'severity': 'high'
|
||||
})
|
||||
|
||||
def _check_references(self):
|
||||
"""Check for broken or inconsistent cross-references"""
|
||||
reference_pattern = r'\[([^\]]+)\]\(([^)]+)\)'
|
||||
|
||||
for path, data in self.file_contents.items():
|
||||
content = data['content']
|
||||
matches = re.findall(reference_pattern, content)
|
||||
|
||||
for link_text, link_path in matches:
|
||||
# Skip external links
|
||||
if link_path.startswith('http'):
|
||||
continue
|
||||
|
||||
# Check if referenced file exists
|
||||
if '#' in link_path:
|
||||
file_path, anchor = link_path.split('#', 1)
|
||||
else:
|
||||
file_path = link_path
|
||||
anchor = None
|
||||
|
||||
# Resolve relative paths
|
||||
if not file_path.startswith('/'):
|
||||
current_dir = Path(path).parent
|
||||
resolved = (current_dir / file_path).resolve()
|
||||
try:
|
||||
relative_resolved = resolved.relative_to(self.root_dir)
|
||||
except ValueError:
|
||||
# Path is outside project root, skip
|
||||
continue
|
||||
else:
|
||||
relative_resolved = Path(file_path.lstrip('/'))
|
||||
|
||||
# Check if file exists
|
||||
full_path = self.root_dir / relative_resolved
|
||||
if not full_path.exists():
|
||||
self.inconsistencies.append({
|
||||
'type': 'broken_reference',
|
||||
'file': path,
|
||||
'issue': f'Broken link to {link_path}',
|
||||
'severity': 'medium'
|
||||
})
|
||||
|
||||
def _check_config_values(self):
|
||||
"""Check for inconsistent configuration values"""
|
||||
# Look for IP addresses, VMIDs, ports
|
||||
ip_pattern = r'192\.168\.11\.(\d+)'
|
||||
vmid_pattern = r'VMID[:\s]+(\d+)'
|
||||
|
||||
configs_by_component = defaultdict(lambda: defaultdict(set))
|
||||
|
||||
for path, data in self.file_contents.items():
|
||||
content = data['content']
|
||||
|
||||
# Extract IPs
|
||||
ips = re.findall(ip_pattern, content)
|
||||
for ip in ips:
|
||||
component = self._identify_component(path)
|
||||
configs_by_component[component]['ips'].add(f'192.168.11.{ip}')
|
||||
|
||||
# Extract VMIDs
|
||||
vmids = re.findall(vmid_pattern, content, re.IGNORECASE)
|
||||
for vmid in vmids:
|
||||
component = self._identify_component(path)
|
||||
configs_by_component[component]['vmids'].add(vmid)
|
||||
|
||||
# Check for inconsistencies (same component, different values)
|
||||
for component, configs in configs_by_component.items():
|
||||
if len(configs['ips']) > 10: # Too many IPs might indicate inconsistency
|
||||
self.inconsistencies.append({
|
||||
'type': 'too_many_ips',
|
||||
'component': component,
|
||||
'issue': f'Component {component} references {len(configs["ips"])} different IPs',
|
||||
'severity': 'low'
|
||||
})
|
||||
|
||||
def _check_duplicate_content(self):
|
||||
"""Check for duplicate or near-duplicate content"""
|
||||
# Simple check: files with very similar first 10 lines
|
||||
file_signatures = {}
|
||||
|
||||
for path, data in self.file_contents.items():
|
||||
first_lines = '\n'.join(data['lines'][:10])
|
||||
signature = hash(first_lines)
|
||||
|
||||
if signature in file_signatures:
|
||||
self.inconsistencies.append({
|
||||
'type': 'duplicate_intro',
|
||||
'files': [file_signatures[signature], path],
|
||||
'issue': 'Files have identical first 10 lines',
|
||||
'severity': 'low'
|
||||
})
|
||||
else:
|
||||
file_signatures[signature] = path
|
||||
|
||||
def _identify_component(self, path: str) -> str:
|
||||
"""Identify component from file path"""
|
||||
if 'rpc-translator' in path:
|
||||
return 'rpc-translator-138'
|
||||
elif 'besu' in path.lower():
|
||||
return 'besu'
|
||||
elif 'dbis' in path.lower():
|
||||
return 'dbis'
|
||||
elif 'firefly' in path.lower():
|
||||
return 'firefly'
|
||||
else:
|
||||
return 'other'
|
||||
|
||||
def _generate_report(self) -> Dict:
|
||||
"""Generate inconsistency report"""
|
||||
report = {
|
||||
'summary': {
|
||||
'total_inconsistencies': len(self.inconsistencies),
|
||||
'by_type': defaultdict(int),
|
||||
'by_severity': defaultdict(int)
|
||||
},
|
||||
'inconsistencies': []
|
||||
}
|
||||
|
||||
for inc in self.inconsistencies:
|
||||
report['summary']['by_type'][inc['type']] += 1
|
||||
report['summary']['by_severity'][inc['severity']] += 1
|
||||
report['inconsistencies'].append(inc)
|
||||
|
||||
return report
|
||||
|
||||
def main():
|
||||
root_dir = Path(__file__).parent.parent
|
||||
checker = ContentInconsistencyChecker(root_dir)
|
||||
report = checker.check()
|
||||
|
||||
# Save report
|
||||
json_file = root_dir / 'CONTENT_INCONSISTENCIES.json'
|
||||
with open(json_file, 'w') as f:
|
||||
json.dump(report, f, indent=2, default=str)
|
||||
print(f"\n✅ Report saved to: {json_file}")
|
||||
|
||||
# Print summary
|
||||
print("\n📊 Summary:")
|
||||
print(f" Total inconsistencies: {report['summary']['total_inconsistencies']}")
|
||||
print(f" By type: {dict(report['summary']['by_type'])}")
|
||||
print(f" By severity: {dict(report['summary']['by_severity'])}")
|
||||
|
||||
return report
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
319
scripts/cleanup-markdown-files.sh
Executable file
319
scripts/cleanup-markdown-files.sh
Executable file
@@ -0,0 +1,319 @@
|
||||
#!/bin/bash
|
||||
# Markdown Files Cleanup Script
|
||||
# Automatically organizes markdown files based on analysis
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Dry-run mode (set to false to actually move files)
|
||||
DRY_RUN=${DRY_RUN:-true}
|
||||
|
||||
# Log file
|
||||
LOG_FILE="$PROJECT_ROOT/MARKDOWN_CLEANUP_LOG_$(date +%Y%m%d_%H%M%S).log"
|
||||
|
||||
log() {
|
||||
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
success() {
|
||||
echo -e "${GREEN}[OK]${NC} $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
move_file() {
|
||||
local src="$1"
|
||||
local dest="$2"
|
||||
local reason="$3"
|
||||
|
||||
if [ ! -f "$src" ]; then
|
||||
warn "File not found: $src"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Create destination directory if needed
|
||||
local dest_dir=$(dirname "$dest")
|
||||
if [ "$DRY_RUN" = "true" ]; then
|
||||
log "Would move: $src -> $dest"
|
||||
log " Reason: $reason"
|
||||
log " Would create directory: $dest_dir"
|
||||
else
|
||||
mkdir -p "$dest_dir"
|
||||
if mv "$src" "$dest" 2>/dev/null; then
|
||||
success "Moved: $src -> $dest"
|
||||
echo " Reason: $reason" >> "$LOG_FILE"
|
||||
else
|
||||
error "Failed to move: $src -> $dest"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Create necessary directories
|
||||
create_directories() {
|
||||
log "Creating directory structure..."
|
||||
local dirs=(
|
||||
"reports/archive/2026-01-05"
|
||||
"reports/status"
|
||||
"reports/inventories"
|
||||
"reports/analyses"
|
||||
"docs/09-troubleshooting/archive"
|
||||
"rpc-translator-138/docs/archive"
|
||||
)
|
||||
|
||||
for dir in "${dirs[@]}"; do
|
||||
if [ "$DRY_RUN" = "true" ]; then
|
||||
log "Would create: $dir"
|
||||
else
|
||||
mkdir -p "$dir"
|
||||
success "Created: $dir"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Move timestamped inventory files
|
||||
move_timestamped_inventories() {
|
||||
log "Moving timestamped inventory files..."
|
||||
local files=(
|
||||
"CONTAINER_INVENTORY_20260105_142214.md"
|
||||
"CONTAINER_INVENTORY_20260105_142314.md"
|
||||
"CONTAINER_INVENTORY_20260105_142357.md"
|
||||
"CONTAINER_INVENTORY_20260105_142455.md"
|
||||
"CONTAINER_INVENTORY_20260105_142712.md"
|
||||
"CONTAINER_INVENTORY_20260105_142753.md"
|
||||
"CONTAINER_INVENTORY_20260105_142842.md"
|
||||
"CONTAINER_INVENTORY_20260105_144309.md"
|
||||
"CONTAINER_INVENTORY_20260105_153516.md"
|
||||
"CONTAINER_INVENTORY_20260105_154200.md"
|
||||
"SERVICE_DEPENDENCIES_20260105_143608.md"
|
||||
"SERVICE_DEPENDENCIES_20260105_143624.md"
|
||||
"IP_AVAILABILITY_20260105_143535.md"
|
||||
"DHCP_CONTAINERS_20260105_143507.md"
|
||||
)
|
||||
|
||||
for file in "${files[@]}"; do
|
||||
if [ -f "$file" ]; then
|
||||
move_file "$file" "reports/archive/2026-01-05/$file" "Timestamped inventory/report file"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Move status/completion reports from root to reports
|
||||
move_status_reports() {
|
||||
log "Moving status/completion reports from root..."
|
||||
|
||||
# Pattern matching for status reports
|
||||
find . -maxdepth 1 -name "*.md" -type f | while read -r file; do
|
||||
filename=$(basename "$file")
|
||||
|
||||
# Skip essential files
|
||||
if [[ "$filename" == "README.md" ]] || [[ "$filename" == "PROJECT_STRUCTURE.md" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Check if it's a status/report file
|
||||
if [[ "$filename" =~ (STATUS|COMPLETE|FINAL|REPORT|SUMMARY|ANALYSIS|DIAGNOSTIC|INVENTORY) ]]; then
|
||||
move_file "$file" "reports/status/$filename" "Status/completion report in root"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Move VMID-specific reports
|
||||
move_vmid_reports() {
|
||||
log "Moving VMID-specific reports..."
|
||||
|
||||
find . -maxdepth 1 -name "VMID*.md" -type f | while read -r file; do
|
||||
filename=$(basename "$file")
|
||||
move_file "$file" "reports/$filename" "VMID-specific report"
|
||||
done
|
||||
}
|
||||
|
||||
# Move IP conflict and network analysis reports
|
||||
move_network_reports() {
|
||||
log "Moving network analysis reports..."
|
||||
|
||||
local files=(
|
||||
"IP_CONFLICT_ANALYSIS.md"
|
||||
"IP_CONFLICT_192.168.11.14_RESOLUTION.md"
|
||||
"IP_CONFLICTS_RESOLUTION_COMPLETE.md"
|
||||
"VMID_IP_CONFLICTS_ANALYSIS.md"
|
||||
"VMID_IP_ADDRESS_LIST.md"
|
||||
"FINAL_VMID_IP_MAPPING.md"
|
||||
"IP_ASSIGNMENT_PLAN.md"
|
||||
"PHASE1_IP_CONFLICT_RESOLUTION.md"
|
||||
"PHASE1_IP_INVESTIGATION_COMPLETE.md"
|
||||
"PHASE1_IP_INVESTIGATION_STATUS.md"
|
||||
"R630-04_IP_CONFLICT_DISCOVERY.md"
|
||||
"RESERVED_IP_CONFLICTS_ANALYSIS.md"
|
||||
"RESERVED_IP_FIX_COMPLETE.md"
|
||||
"RESERVED_IP_FIX_COMPLETE_FINAL.md"
|
||||
"RESERVED_IP_FIX_SUMMARY.md"
|
||||
"DHCP_CONTAINERS_LIST.md"
|
||||
"DHCP_TO_STATIC_CONVERSION_COMPLETE.md"
|
||||
"DHCP_TO_STATIC_CONVERSION_FINAL_REPORT.md"
|
||||
)
|
||||
|
||||
for file in "${files[@]}"; do
|
||||
if [ -f "$file" ]; then
|
||||
move_file "$file" "reports/analyses/$file" "Network/IP analysis report"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Move service status reports
|
||||
move_service_reports() {
|
||||
log "Moving service status reports..."
|
||||
|
||||
local files=(
|
||||
"BLOCK_PRODUCTION_REVIEW.md"
|
||||
"BLOCK_PRODUCTION_STATUS.md"
|
||||
"SERVICE_VERIFICATION_REPORT.md"
|
||||
"RPC_ENDPOINT_DIAGNOSTICS_REPORT.md"
|
||||
"RPC_SSL_ISSUE_SUMMARY.md"
|
||||
"RPC_TRANSACTION_FAILURE_INVESTIGATION.md"
|
||||
"RPC_TRANSACTION_FAILURE_ROOT_CAUSE.md"
|
||||
"BESU_*.md"
|
||||
"FIREFLY_*.md"
|
||||
"DBIS_*.md"
|
||||
"EXPLORER_*.md"
|
||||
"BLOCKSCOUT_*.md"
|
||||
)
|
||||
|
||||
# Handle specific files
|
||||
for pattern in "${files[@]}"; do
|
||||
find . -maxdepth 1 -name "$pattern" -type f | while read -r file; do
|
||||
filename=$(basename "$file")
|
||||
# Skip if it's a script or config file
|
||||
if [[ ! "$filename" =~ (\.sh|\.py|\.js|\.json)$ ]]; then
|
||||
move_file "$file" "reports/status/$filename" "Service status report"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
# Move temporary fix guides from rpc-translator-138
|
||||
move_rpc_translator_temp_files() {
|
||||
log "Moving temporary files from rpc-translator-138..."
|
||||
|
||||
if [ ! -d "rpc-translator-138" ]; then
|
||||
warn "rpc-translator-138 directory not found"
|
||||
return
|
||||
fi
|
||||
|
||||
local temp_patterns=(
|
||||
"FIX_*.md"
|
||||
"QUICK_FIX*.md"
|
||||
"RUN_NOW.md"
|
||||
"EXECUTE_NOW.md"
|
||||
"EXECUTION_READY.md"
|
||||
"LOAD_KEYS_NOW.md"
|
||||
"FIX_PERMISSIONS*.md"
|
||||
"*COMPLETE*.md"
|
||||
"*FINAL*.md"
|
||||
"*STATUS*.md"
|
||||
)
|
||||
|
||||
for pattern in "${temp_patterns[@]}"; do
|
||||
find rpc-translator-138 -maxdepth 1 -name "$pattern" -type f | while read -r file; do
|
||||
filename=$(basename "$file")
|
||||
# Skip README and important docs
|
||||
if [[ "$filename" != "README.md" ]] && [[ ! "$filename" =~ ^(DEPLOYMENT|API_METHODS|QUICK_REFERENCE|QUICK_START|QUICK_SETUP) ]]; then
|
||||
move_file "$file" "rpc-translator-138/docs/archive/$filename" "Temporary fix/status file"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
# Move completion/migration status files from docs
|
||||
move_docs_status_files() {
|
||||
log "Moving status files from docs directory..."
|
||||
|
||||
if [ ! -d "docs" ]; then
|
||||
warn "docs directory not found"
|
||||
return
|
||||
fi
|
||||
|
||||
find docs -maxdepth 1 -name "*COMPLETE*.md" -o -name "*FINAL*.md" -o -name "*MIGRATION*.md" | while read -r file; do
|
||||
filename=$(basename "$file")
|
||||
# Skip if it's actual documentation
|
||||
if [[ ! "$filename" =~ ^(DOCUMENTATION|CONTRIBUTOR|STYLE|GUIDE|README) ]]; then
|
||||
move_file "$file" "reports/$filename" "Status file in docs directory"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Consolidate duplicate status files (keep most recent)
|
||||
consolidate_duplicates() {
|
||||
log "Identifying duplicate status files..."
|
||||
|
||||
# This is a placeholder - actual consolidation requires content comparison
|
||||
# For now, we'll just log potential duplicates
|
||||
local status_files=(
|
||||
"ALL_TASKS_COMPLETE.md"
|
||||
"ALL_TASKS_COMPLETE_FINAL.md"
|
||||
"ALL_STEPS_COMPLETE.md"
|
||||
"ALL_NEXT_STEPS_COMPLETE.md"
|
||||
)
|
||||
|
||||
for file in "${status_files[@]}"; do
|
||||
if [ -f "$file" ]; then
|
||||
warn "Potential duplicate: $file (consider consolidating)"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
log "========================================="
|
||||
log "Markdown Files Cleanup Script"
|
||||
log "========================================="
|
||||
log "Project Root: $PROJECT_ROOT"
|
||||
log "Dry Run: $DRY_RUN"
|
||||
log "Log File: $LOG_FILE"
|
||||
log ""
|
||||
|
||||
if [ "$DRY_RUN" = "true" ]; then
|
||||
warn "DRY RUN MODE - No files will be moved"
|
||||
warn "Set DRY_RUN=false to actually move files"
|
||||
log ""
|
||||
fi
|
||||
|
||||
create_directories
|
||||
move_timestamped_inventories
|
||||
move_status_reports
|
||||
move_vmid_reports
|
||||
move_network_reports
|
||||
move_service_reports
|
||||
move_rpc_translator_temp_files
|
||||
move_docs_status_files
|
||||
consolidate_duplicates
|
||||
|
||||
log ""
|
||||
log "========================================="
|
||||
log "Cleanup complete!"
|
||||
log "========================================="
|
||||
|
||||
if [ "$DRY_RUN" = "true" ]; then
|
||||
log ""
|
||||
log "Review the log above, then run with:"
|
||||
log " DRY_RUN=false $0"
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
1
smom-dbis-138
Submodule
1
smom-dbis-138
Submodule
Submodule smom-dbis-138 added at 8dc7562702
Reference in New Issue
Block a user