feat: Add issue generation script and generated issues from roadmap
- Created Python script to parse ROADMAP.md and extract tasks - Generated 54 GitHub issues: - 7 Security Remediation Sprint issues (CRITICAL/HIGH priority) - 43 Milestone feature issues (M4-M11) - 4 Continuous Improvement issues - Created issues.json, issues_preview.md, and create_issues.sh - Added comprehensive README with usage instructions Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,213 @@
|
||||
# DMARQ Roadmap Issues
|
||||
|
||||
This directory contains auto-generated GitHub issues parsed from the DMARQ roadmap documents.
|
||||
|
||||
## 📊 Summary
|
||||
|
||||
**Total Issues Generated**: 54
|
||||
|
||||
### Breakdown by Category
|
||||
|
||||
- **Security Remediation Sprint**: 7 issues (CRITICAL/HIGH priority)
|
||||
- **Milestone Features**: 43 issues (distributed across milestones 4-11)
|
||||
- **Continuous Improvements**: 4 issues (ongoing maintenance)
|
||||
|
||||
## 📁 Files
|
||||
|
||||
### 1. `issues.json`
|
||||
JSON-formatted issue data suitable for programmatic import or custom processing.
|
||||
|
||||
**Structure**:
|
||||
```json
|
||||
[
|
||||
{
|
||||
"title": "Issue title",
|
||||
"body": "Issue description in markdown",
|
||||
"labels": ["label1", "label2"],
|
||||
"milestone": "Milestone name",
|
||||
"assignees": []
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### 2. `issues_preview.md`
|
||||
Human-readable preview of all issues, organized by milestone. Review this file to see what issues will be created.
|
||||
|
||||
### 3. `create_issues.sh`
|
||||
Executable bash script that uses GitHub CLI to create all issues automatically.
|
||||
|
||||
## 🚀 How to Create Issues
|
||||
|
||||
### Option 1: Using GitHub CLI (Recommended)
|
||||
|
||||
**Prerequisites**:
|
||||
- Install [GitHub CLI](https://cli.github.com/)
|
||||
- Authenticate: `gh auth login`
|
||||
|
||||
**Steps**:
|
||||
```bash
|
||||
cd generated_issues
|
||||
./create_issues.sh
|
||||
```
|
||||
|
||||
The script will:
|
||||
- Check if GitHub CLI is installed and authenticated
|
||||
- Create all 54 issues in the `christianlouis/dmarq` repository
|
||||
- Apply appropriate labels to each issue
|
||||
- Add rate limiting (1 second between issues) to avoid API throttling
|
||||
|
||||
**Note**: The script does NOT create milestones automatically. See section below.
|
||||
|
||||
### Option 2: Manual Creation
|
||||
|
||||
Review `issues_preview.md` and manually create issues through the GitHub web interface.
|
||||
|
||||
### Option 3: Custom Import
|
||||
|
||||
Use `issues.json` with your own tooling or GitHub API integration.
|
||||
|
||||
## 🏷️ Milestones
|
||||
|
||||
The following milestones are referenced in the issues. You may want to create these in GitHub before running the import script:
|
||||
|
||||
1. **Security Remediation Sprint** (7 issues) - 🔴 PRIORITY
|
||||
2. **Milestone 4: Enhanced Dashboard & Visualization** (6 issues)
|
||||
3. **Milestone 5: User Authentication & Multi-User Support** (6 issues)
|
||||
4. **Milestone 6: Alerting & Notifications** (5 issues)
|
||||
5. **Milestone 7: Advanced Rule Engine** (5 issues)
|
||||
6. **Milestone 8: DNS Health & Cloudflare Integration** (5 issues)
|
||||
7. **Milestone 9: Forensic Reports (RUF) Support** (5 issues)
|
||||
8. **Milestone 10: Advanced Analytics & Reporting** (5 issues)
|
||||
9. **Milestone 11: Enterprise Features** (6 issues)
|
||||
10. **Continuous Improvements** (4 issues)
|
||||
|
||||
**To create milestones using GitHub CLI**:
|
||||
```bash
|
||||
gh milestone create "Security Remediation Sprint" --repo christianlouis/dmarq
|
||||
gh milestone create "Milestone 4: Enhanced Dashboard & Visualization" --repo christianlouis/dmarq
|
||||
# ... etc
|
||||
```
|
||||
|
||||
Or create them through the GitHub web interface: https://github.com/christianlouis/dmarq/milestones
|
||||
|
||||
## 🏷️ Labels
|
||||
|
||||
The issues use the following labels (you may need to create some):
|
||||
|
||||
### Priority Labels
|
||||
- `priority: critical` - Must be addressed immediately
|
||||
- `priority: high` - Important, should be addressed soon
|
||||
- `priority: medium` - Normal priority
|
||||
- `priority: low` - Can be deferred
|
||||
|
||||
### Type Labels
|
||||
- `security` - Security-related issues
|
||||
- `security: critical` - Critical security vulnerabilities
|
||||
- `security: high` - High-severity security issues
|
||||
- `enhancement` - New features or improvements
|
||||
- `maintenance` - Ongoing maintenance tasks
|
||||
- `continuous-improvement` - Part of continuous improvement process
|
||||
- `documentation` - Documentation updates
|
||||
- `code-quality` - Code quality improvements
|
||||
|
||||
### Milestone Labels
|
||||
- `milestone-4` through `milestone-11` - Associate with specific milestones
|
||||
|
||||
## 📋 Issue Organization
|
||||
|
||||
### Security Sprint (Start Here!)
|
||||
The Security Remediation Sprint contains 7 critical security issues that should be addressed **first**:
|
||||
|
||||
1. Authentication & Authorization (CRITICAL)
|
||||
2. Secret Management (CRITICAL)
|
||||
3. XML Parsing Security (HIGH)
|
||||
4. Input Validation (HIGH)
|
||||
5. Security Headers (MEDIUM)
|
||||
6. CORS Configuration (MEDIUM)
|
||||
7. Error Handling (MEDIUM)
|
||||
|
||||
### Milestone Features
|
||||
Features are organized by milestone (4-11), with Milestone 4 being the next to implement after security fixes.
|
||||
|
||||
### Continuous Improvements
|
||||
Four ongoing improvement categories:
|
||||
- Code Quality
|
||||
- Security
|
||||
- Documentation
|
||||
- Community
|
||||
|
||||
## 🔄 Regenerating Issues
|
||||
|
||||
If you need to regenerate issues after modifying the roadmap:
|
||||
|
||||
```bash
|
||||
cd /home/runner/work/dmarq/dmarq
|
||||
python3 scripts/generate_issues.py
|
||||
```
|
||||
|
||||
This will overwrite the files in this directory.
|
||||
|
||||
## ⚙️ Customization
|
||||
|
||||
### Modifying the Generator
|
||||
|
||||
Edit `/home/runner/work/dmarq/dmarq/scripts/generate_issues.py` to customize:
|
||||
- Issue title formats
|
||||
- Body templates
|
||||
- Label assignments
|
||||
- Milestone mappings
|
||||
|
||||
### Filtering Issues
|
||||
|
||||
To create only specific issues:
|
||||
|
||||
**Security issues only**:
|
||||
```bash
|
||||
jq '.[] | select(.labels[] | contains("security"))' issues.json
|
||||
```
|
||||
|
||||
**Specific milestone**:
|
||||
```bash
|
||||
jq '.[] | select(.milestone == "Milestone 4: Enhanced Dashboard & Visualization")' issues.json
|
||||
```
|
||||
|
||||
**High priority only**:
|
||||
```bash
|
||||
jq '.[] | select(.labels[] | contains("priority: high"))' issues.json
|
||||
```
|
||||
|
||||
## 🎯 Recommended Workflow
|
||||
|
||||
1. **Review**: Read through `issues_preview.md` to understand all issues
|
||||
2. **Create Milestones**: Set up milestones in GitHub
|
||||
3. **Create Labels**: Ensure all required labels exist
|
||||
4. **Import Security Issues First**: Consider importing just the Security Sprint issues first
|
||||
5. **Import Remaining Issues**: Create the rest of the issues
|
||||
6. **Organize**: Assign issues to milestones and team members
|
||||
7. **Prioritize**: Adjust priorities based on your team's capacity
|
||||
|
||||
## 📞 Support
|
||||
|
||||
- **Source**: Generated from [ROADMAP.md](../ROADMAP.md)
|
||||
- **Script**: [scripts/generate_issues.py](../scripts/generate_issues.py)
|
||||
- **Questions**: Open an issue in the DMARQ repository
|
||||
|
||||
## 🔒 Important Notes
|
||||
|
||||
### Security Priority
|
||||
The Security Remediation Sprint issues are marked as CRITICAL and HIGH priority. These should be addressed **before** implementing new features to ensure the application is secure.
|
||||
|
||||
### Milestone Dependencies
|
||||
Some milestones depend on others:
|
||||
- Milestone 5 (Authentication) is required before several later features
|
||||
- Security Sprint should be completed before Milestone 4
|
||||
- See the roadmap for detailed dependency information
|
||||
|
||||
### Rate Limiting
|
||||
The import script includes rate limiting (1 second between API calls) to avoid GitHub API throttling. Creating all 54 issues will take approximately 1-2 minutes.
|
||||
|
||||
---
|
||||
|
||||
**Generated**: 2026-02-06
|
||||
**Script Version**: 1.0
|
||||
**Issues Count**: 54
|
||||
Executable
+1446
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,592 @@
|
||||
[
|
||||
{
|
||||
"title": "[Security Sprint] Authentication & Authorization",
|
||||
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **CRITICAL**\n\n### Tasks\n\n- [ ] Add authentication middleware to all admin endpoints\n- [ ] Implement proper user authentication system\n- [ ] Add authorization checks on sensitive operations\n- [ ] Add rate limiting to prevent abuse\n\n### Files to Update\n\n- `backend/app/main.py`\n- `backend/app/api/api_v1/endpoints/imap.py`\n- `backend/app/api/api_v1/endpoints/domains.py`\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"security",
|
||||
"priority: critical",
|
||||
"security: critical"
|
||||
],
|
||||
"milestone": "Security Remediation Sprint",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[Security Sprint] Secret Management",
|
||||
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **CRITICAL**\n\n### Tasks\n\n- [ ] Remove default SECRET_KEY value\n- [ ] Add SECRET_KEY validation on startup\n- [ ] Document secret generation in deployment guide\n- [ ] Add warning if default secret is detected\n\n### Files to Update\n\n- `backend/app/core/config.py`\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"security",
|
||||
"priority: critical",
|
||||
"security: critical"
|
||||
],
|
||||
"milestone": "Security Remediation Sprint",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[Security Sprint] XML Parsing Security",
|
||||
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **HIGH**\n\n### Tasks\n\n- [ ] Replace ElementTree with defusedxml\n- [ ] Add file size limits for uploads\n- [ ] Implement zip bomb protection\n- [ ] Add malware scanning hooks (optional)\n\n### Files to Update\n\n- `backend/app/services/dmarc_parser.py`\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"security",
|
||||
"priority: high",
|
||||
"security: high"
|
||||
],
|
||||
"milestone": "Security Remediation Sprint",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[Security Sprint] Input Validation",
|
||||
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **HIGH**\n\n### Tasks\n\n- [ ] Add domain name validation regex\n- [ ] Implement file type validation (MIME + extension)\n- [ ] Add parameter validation on all endpoints\n- [ ] Sanitize error messages\n\n### Files to Update\n\n- `backend/app/api/api_v1/endpoints/domains.py`\n- `backend/app/api/api_v1/endpoints/reports.py`\n- `backend/app/utils/domain_validator.py`\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"security",
|
||||
"priority: high",
|
||||
"security: high"
|
||||
],
|
||||
"milestone": "Security Remediation Sprint",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[Security Sprint] Security Headers",
|
||||
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **MEDIUM**\n\n### Tasks\n\n- [ ] Add security headers middleware\n- [ ] Implement CSP (Content Security Policy)\n- [ ] Add X-Frame-Options, X-Content-Type-Options\n- [ ] Configure HSTS for production\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"security",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Security Remediation Sprint",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[Security Sprint] CORS Configuration",
|
||||
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **MEDIUM**\n\n### Tasks\n\n- [ ] Restrict CORS methods and headers\n- [ ] Remove wildcard configurations\n- [ ] Document CORS setup for deployments\n\n### Files to Update\n\n- `backend/app/main.py`\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"security",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Security Remediation Sprint",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[Security Sprint] Error Handling",
|
||||
"body": "## Description\n\nPart of the **Security Remediation Sprint** - Priority: **MEDIUM**\n\n### Tasks\n\n- [ ] Implement centralized error handling\n- [ ] Remove sensitive data from error responses\n- [ ] Add error logging with request context\n- [ ] Create user-friendly error messages\n\n### Related Documentation\n\n- [SECURITY.md](../SECURITY.md)\n- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"security",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Security Remediation Sprint",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M4] Historical trend charts (Chart.js integration)",
|
||||
"body": "## Description\n\nFeature for **Milestone 4: Enhanced Dashboard & Visualization**\n\n**Timeline**: Next - 4-6 weeks\n\n### Feature\nHistorical trend charts (Chart.js integration)\n\n### Related Documentation\n\n- [Milestone 4](../ROADMAP.md#milestone-4-enhanced-dashboard--visualization)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-4",
|
||||
"priority: high"
|
||||
],
|
||||
"milestone": "Milestone 4: Enhanced Dashboard & Visualization",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M4] Compliance rate visualizations",
|
||||
"body": "## Description\n\nFeature for **Milestone 4: Enhanced Dashboard & Visualization**\n\n**Timeline**: Next - 4-6 weeks\n\n### Feature\nCompliance rate visualizations\n\n### Related Documentation\n\n- [Milestone 4](../ROADMAP.md#milestone-4-enhanced-dashboard--visualization)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-4",
|
||||
"priority: high"
|
||||
],
|
||||
"milestone": "Milestone 4: Enhanced Dashboard & Visualization",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M4] Volume and sender analytics",
|
||||
"body": "## Description\n\nFeature for **Milestone 4: Enhanced Dashboard & Visualization**\n\n**Timeline**: Next - 4-6 weeks\n\n### Feature\nVolume and sender analytics\n\n### Related Documentation\n\n- [Milestone 4](../ROADMAP.md#milestone-4-enhanced-dashboard--visualization)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-4",
|
||||
"priority: high"
|
||||
],
|
||||
"milestone": "Milestone 4: Enhanced Dashboard & Visualization",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M4] Time-series data displays",
|
||||
"body": "## Description\n\nFeature for **Milestone 4: Enhanced Dashboard & Visualization**\n\n**Timeline**: Next - 4-6 weeks\n\n### Feature\nTime-series data displays\n\n### Related Documentation\n\n- [Milestone 4](../ROADMAP.md#milestone-4-enhanced-dashboard--visualization)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-4",
|
||||
"priority: high"
|
||||
],
|
||||
"milestone": "Milestone 4: Enhanced Dashboard & Visualization",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M4] Domain comparison views",
|
||||
"body": "## Description\n\nFeature for **Milestone 4: Enhanced Dashboard & Visualization**\n\n**Timeline**: Next - 4-6 weeks\n\n### Feature\nDomain comparison views\n\n### Related Documentation\n\n- [Milestone 4](../ROADMAP.md#milestone-4-enhanced-dashboard--visualization)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-4",
|
||||
"priority: high"
|
||||
],
|
||||
"milestone": "Milestone 4: Enhanced Dashboard & Visualization",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M5] FastAPI Users integration",
|
||||
"body": "## Description\n\nFeature for **Milestone 5: User Authentication & Multi-User Support**\n\n**Timeline**: 8-10 weeks\n\n### Feature\nFastAPI Users integration\n\n### Related Documentation\n\n- [Milestone 5](../ROADMAP.md#milestone-5-user-authentication--multi-user-support)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-5",
|
||||
"priority: high"
|
||||
],
|
||||
"milestone": "Milestone 5: User Authentication & Multi-User Support",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M5] User registration and management",
|
||||
"body": "## Description\n\nFeature for **Milestone 5: User Authentication & Multi-User Support**\n\n**Timeline**: 8-10 weeks\n\n### Feature\nUser registration and management\n\n### Related Documentation\n\n- [Milestone 5](../ROADMAP.md#milestone-5-user-authentication--multi-user-support)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-5",
|
||||
"priority: high"
|
||||
],
|
||||
"milestone": "Milestone 5: User Authentication & Multi-User Support",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M5] JWT-based authentication",
|
||||
"body": "## Description\n\nFeature for **Milestone 5: User Authentication & Multi-User Support**\n\n**Timeline**: 8-10 weeks\n\n### Feature\nJWT-based authentication\n\n### Related Documentation\n\n- [Milestone 5](../ROADMAP.md#milestone-5-user-authentication--multi-user-support)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-5",
|
||||
"priority: high"
|
||||
],
|
||||
"milestone": "Milestone 5: User Authentication & Multi-User Support",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M5] Role-based access control (RBAC)",
|
||||
"body": "## Description\n\nFeature for **Milestone 5: User Authentication & Multi-User Support**\n\n**Timeline**: 8-10 weeks\n\n### Feature\nRole-based access control (RBAC)\n\n### Related Documentation\n\n- [Milestone 5](../ROADMAP.md#milestone-5-user-authentication--multi-user-support)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-5",
|
||||
"priority: high"
|
||||
],
|
||||
"milestone": "Milestone 5: User Authentication & Multi-User Support",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M5] Password reset functionality",
|
||||
"body": "## Description\n\nFeature for **Milestone 5: User Authentication & Multi-User Support**\n\n**Timeline**: 8-10 weeks\n\n### Feature\nPassword reset functionality\n\n### Related Documentation\n\n- [Milestone 5](../ROADMAP.md#milestone-5-user-authentication--multi-user-support)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-5",
|
||||
"priority: high"
|
||||
],
|
||||
"milestone": "Milestone 5: User Authentication & Multi-User Support",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M5] Email verification (optional)",
|
||||
"body": "## Description\n\nFeature for **Milestone 5: User Authentication & Multi-User Support**\n\n**Timeline**: 8-10 weeks\n\n### Feature\nEmail verification (optional)\n\n### Related Documentation\n\n- [Milestone 5](../ROADMAP.md#milestone-5-user-authentication--multi-user-support)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-5",
|
||||
"priority: high"
|
||||
],
|
||||
"milestone": "Milestone 5: User Authentication & Multi-User Support",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M6] Apprise integration",
|
||||
"body": "## Description\n\nFeature for **Milestone 6: Alerting & Notifications**\n\n**Timeline**: 10-12 weeks\n\n### Feature\nApprise integration\n\n### Related Documentation\n\n- [Milestone 6](../ROADMAP.md#milestone-6-alerting--notifications)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-6",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 6: Alerting & Notifications",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M6] Customizable alert rules",
|
||||
"body": "## Description\n\nFeature for **Milestone 6: Alerting & Notifications**\n\n**Timeline**: 10-12 weeks\n\n### Feature\nCustomizable alert rules\n\n### Related Documentation\n\n- [Milestone 6](../ROADMAP.md#milestone-6-alerting--notifications)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-6",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 6: Alerting & Notifications",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M6] Multi-channel notifications (Email, Slack, etc.)",
|
||||
"body": "## Description\n\nFeature for **Milestone 6: Alerting & Notifications**\n\n**Timeline**: 10-12 weeks\n\n### Feature\nMulti-channel notifications (Email, Slack, etc.)\n\n### Related Documentation\n\n- [Milestone 6](../ROADMAP.md#milestone-6-alerting--notifications)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-6",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 6: Alerting & Notifications",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M6] Alert history and management",
|
||||
"body": "## Description\n\nFeature for **Milestone 6: Alerting & Notifications**\n\n**Timeline**: 10-12 weeks\n\n### Feature\nAlert history and management\n\n### Related Documentation\n\n- [Milestone 6](../ROADMAP.md#milestone-6-alerting--notifications)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-6",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 6: Alerting & Notifications",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M6] Notification preferences per user",
|
||||
"body": "## Description\n\nFeature for **Milestone 6: Alerting & Notifications**\n\n**Timeline**: 10-12 weeks\n\n### Feature\nNotification preferences per user\n\n### Related Documentation\n\n- [Milestone 6](../ROADMAP.md#milestone-6-alerting--notifications)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-6",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 6: Alerting & Notifications",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M7] Custom alert conditions",
|
||||
"body": "## Description\n\nFeature for **Milestone 7: Advanced Rule Engine**\n\n**Timeline**: 14-16 weeks\n\n### Feature\nCustom alert conditions\n\n### Related Documentation\n\n- [Milestone 7](../ROADMAP.md#milestone-7-advanced-rule-engine)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-7",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 7: Advanced Rule Engine",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M7] Threshold-based triggers",
|
||||
"body": "## Description\n\nFeature for **Milestone 7: Advanced Rule Engine**\n\n**Timeline**: 14-16 weeks\n\n### Feature\nThreshold-based triggers\n\n### Related Documentation\n\n- [Milestone 7](../ROADMAP.md#milestone-7-advanced-rule-engine)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-7",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 7: Advanced Rule Engine",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M7] New sender detection",
|
||||
"body": "## Description\n\nFeature for **Milestone 7: Advanced Rule Engine**\n\n**Timeline**: 14-16 weeks\n\n### Feature\nNew sender detection\n\n### Related Documentation\n\n- [Milestone 7](../ROADMAP.md#milestone-7-advanced-rule-engine)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-7",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 7: Advanced Rule Engine",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M7] Anomaly detection",
|
||||
"body": "## Description\n\nFeature for **Milestone 7: Advanced Rule Engine**\n\n**Timeline**: 14-16 weeks\n\n### Feature\nAnomaly detection\n\n### Related Documentation\n\n- [Milestone 7](../ROADMAP.md#milestone-7-advanced-rule-engine)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-7",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 7: Advanced Rule Engine",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M7] Scheduled report summaries",
|
||||
"body": "## Description\n\nFeature for **Milestone 7: Advanced Rule Engine**\n\n**Timeline**: 14-16 weeks\n\n### Feature\nScheduled report summaries\n\n### Related Documentation\n\n- [Milestone 7](../ROADMAP.md#milestone-7-advanced-rule-engine)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-7",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 7: Advanced Rule Engine",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M8] DNS record health checks",
|
||||
"body": "## Description\n\nFeature for **Milestone 8: DNS Health & Cloudflare Integration**\n\n**Timeline**: 16-18 weeks\n\n### Feature\nDNS record health checks\n\n### Related Documentation\n\n- [Milestone 8](../ROADMAP.md#milestone-8-dns-health--cloudflare-integration)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-8",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 8: DNS Health & Cloudflare Integration",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M8] SPF/DKIM/DMARC validation",
|
||||
"body": "## Description\n\nFeature for **Milestone 8: DNS Health & Cloudflare Integration**\n\n**Timeline**: 16-18 weeks\n\n### Feature\nSPF/DKIM/DMARC validation\n\n### Related Documentation\n\n- [Milestone 8](../ROADMAP.md#milestone-8-dns-health--cloudflare-integration)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-8",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 8: DNS Health & Cloudflare Integration",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M8] Cloudflare API integration",
|
||||
"body": "## Description\n\nFeature for **Milestone 8: DNS Health & Cloudflare Integration**\n\n**Timeline**: 16-18 weeks\n\n### Feature\nCloudflare API integration\n\n### Related Documentation\n\n- [Milestone 8](../ROADMAP.md#milestone-8-dns-health--cloudflare-integration)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-8",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 8: DNS Health & Cloudflare Integration",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M8] Configuration recommendations",
|
||||
"body": "## Description\n\nFeature for **Milestone 8: DNS Health & Cloudflare Integration**\n\n**Timeline**: 16-18 weeks\n\n### Feature\nConfiguration recommendations\n\n### Related Documentation\n\n- [Milestone 8](../ROADMAP.md#milestone-8-dns-health--cloudflare-integration)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-8",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 8: DNS Health & Cloudflare Integration",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M8] DNS change tracking",
|
||||
"body": "## Description\n\nFeature for **Milestone 8: DNS Health & Cloudflare Integration**\n\n**Timeline**: 16-18 weeks\n\n### Feature\nDNS change tracking\n\n### Related Documentation\n\n- [Milestone 8](../ROADMAP.md#milestone-8-dns-health--cloudflare-integration)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-8",
|
||||
"priority: medium"
|
||||
],
|
||||
"milestone": "Milestone 8: DNS Health & Cloudflare Integration",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M9] Forensic report parsing",
|
||||
"body": "## Description\n\nFeature for **Milestone 9: Forensic Reports**\n\n**Timeline**: RUF) Support (20-22 weeks\n\n### Feature\nForensic report parsing\n\n### Related Documentation\n\n- [Milestone 9](../ROADMAP.md#milestone-9-forensic-reports)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-9",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 9: Forensic Reports",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M9] Failure sample analysis",
|
||||
"body": "## Description\n\nFeature for **Milestone 9: Forensic Reports**\n\n**Timeline**: RUF) Support (20-22 weeks\n\n### Feature\nFailure sample analysis\n\n### Related Documentation\n\n- [Milestone 9](../ROADMAP.md#milestone-9-forensic-reports)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-9",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 9: Forensic Reports",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M9] PII redaction options",
|
||||
"body": "## Description\n\nFeature for **Milestone 9: Forensic Reports**\n\n**Timeline**: RUF) Support (20-22 weeks\n\n### Feature\nPII redaction options\n\n### Related Documentation\n\n- [Milestone 9](../ROADMAP.md#milestone-9-forensic-reports)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-9",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 9: Forensic Reports",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M9] Detailed authentication failure views",
|
||||
"body": "## Description\n\nFeature for **Milestone 9: Forensic Reports**\n\n**Timeline**: RUF) Support (20-22 weeks\n\n### Feature\nDetailed authentication failure views\n\n### Related Documentation\n\n- [Milestone 9](../ROADMAP.md#milestone-9-forensic-reports)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-9",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 9: Forensic Reports",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M9] Sample download/export",
|
||||
"body": "## Description\n\nFeature for **Milestone 9: Forensic Reports**\n\n**Timeline**: RUF) Support (20-22 weeks\n\n### Feature\nSample download/export\n\n### Related Documentation\n\n- [Milestone 9](../ROADMAP.md#milestone-9-forensic-reports)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-9",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 9: Forensic Reports",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M10] Historical trend analysis",
|
||||
"body": "## Description\n\nFeature for **Milestone 10: Advanced Analytics & Reporting**\n\n**Timeline**: 24-26 weeks\n\n### Feature\nHistorical trend analysis\n\n### Related Documentation\n\n- [Milestone 10](../ROADMAP.md#milestone-10-advanced-analytics--reporting)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-10",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 10: Advanced Analytics & Reporting",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M10] Comparative reporting",
|
||||
"body": "## Description\n\nFeature for **Milestone 10: Advanced Analytics & Reporting**\n\n**Timeline**: 24-26 weeks\n\n### Feature\nComparative reporting\n\n### Related Documentation\n\n- [Milestone 10](../ROADMAP.md#milestone-10-advanced-analytics--reporting)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-10",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 10: Advanced Analytics & Reporting",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M10] Export capabilities (PDF, CSV)",
|
||||
"body": "## Description\n\nFeature for **Milestone 10: Advanced Analytics & Reporting**\n\n**Timeline**: 24-26 weeks\n\n### Feature\nExport capabilities (PDF, CSV)\n\n### Related Documentation\n\n- [Milestone 10](../ROADMAP.md#milestone-10-advanced-analytics--reporting)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-10",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 10: Advanced Analytics & Reporting",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M10] Scheduled reports",
|
||||
"body": "## Description\n\nFeature for **Milestone 10: Advanced Analytics & Reporting**\n\n**Timeline**: 24-26 weeks\n\n### Feature\nScheduled reports\n\n### Related Documentation\n\n- [Milestone 10](../ROADMAP.md#milestone-10-advanced-analytics--reporting)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-10",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 10: Advanced Analytics & Reporting",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M10] Custom dashboards",
|
||||
"body": "## Description\n\nFeature for **Milestone 10: Advanced Analytics & Reporting**\n\n**Timeline**: 24-26 weeks\n\n### Feature\nCustom dashboards\n\n### Related Documentation\n\n- [Milestone 10](../ROADMAP.md#milestone-10-advanced-analytics--reporting)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-10",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 10: Advanced Analytics & Reporting",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M11] Multi-tenant architecture",
|
||||
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nMulti-tenant architecture\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-11",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 11: Enterprise Features",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M11] API rate limiting",
|
||||
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nAPI rate limiting\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-11",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 11: Enterprise Features",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M11] Advanced RBAC",
|
||||
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nAdvanced RBAC\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-11",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 11: Enterprise Features",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M11] SSO integration (SAML, OAuth)",
|
||||
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nSSO integration (SAML, OAuth)\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-11",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 11: Enterprise Features",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M11] Compliance reporting (SOC 2, GDPR)",
|
||||
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nCompliance reporting (SOC 2, GDPR)\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-11",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 11: Enterprise Features",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M11] High availability setup",
|
||||
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nHigh availability setup\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-11",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 11: Enterprise Features",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[M11] Backup and disaster recovery",
|
||||
"body": "## Description\n\nFeature for **Milestone 11: Enterprise Features**\n\n**Timeline**: 28-30+ weeks\n\n### Feature\nBackup and disaster recovery\n\n### Related Documentation\n\n- [Milestone 11](../ROADMAP.md#milestone-11-enterprise-features)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"enhancement",
|
||||
"milestone-11",
|
||||
"priority: low"
|
||||
],
|
||||
"milestone": "Milestone 11: Enterprise Features",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[Continuous] Code Quality Improvements",
|
||||
"body": "## Description\n\nOngoing code quality tasks to maintain and improve DMARQ.\n\n### Tasks\n\n- [ ] Maintain >80% test coverage\n- [ ] Regular dependency updates\n- [ ] Code review for all changes\n- [ ] Performance optimization\n- [ ] Technical debt reduction\n\n### Related Documentation\n\n- [Continuous Improvements](../ROADMAP.md#continuous-improvements-ongoing)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"maintenance",
|
||||
"continuous-improvement",
|
||||
"code-quality"
|
||||
],
|
||||
"milestone": "Continuous Improvements",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[Continuous] Security Improvements",
|
||||
"body": "## Description\n\nOngoing security tasks to maintain and improve DMARQ.\n\n### Tasks\n\n- [ ] Monthly security audits\n- [ ] Automated vulnerability scanning (GitHub Actions)\n- [ ] Dependency security monitoring\n- [ ] Regular penetration testing\n- [ ] Security training for contributors\n\n### Related Documentation\n\n- [Continuous Improvements](../ROADMAP.md#continuous-improvements-ongoing)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"maintenance",
|
||||
"continuous-improvement",
|
||||
"security"
|
||||
],
|
||||
"milestone": "Continuous Improvements",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[Continuous] Documentation Improvements",
|
||||
"body": "## Description\n\nOngoing documentation tasks to maintain and improve DMARQ.\n\n### Tasks\n\n- [ ] Keep documentation current\n- [ ] API documentation completeness\n- [ ] Security best practices guide\n- [ ] Deployment playbooks\n- [ ] Troubleshooting guides\n\n### Related Documentation\n\n- [Continuous Improvements](../ROADMAP.md#continuous-improvements-ongoing)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"maintenance",
|
||||
"continuous-improvement",
|
||||
"documentation"
|
||||
],
|
||||
"milestone": "Continuous Improvements",
|
||||
"assignees": []
|
||||
},
|
||||
{
|
||||
"title": "[Continuous] Community Improvements",
|
||||
"body": "## Description\n\nOngoing community tasks to maintain and improve DMARQ.\n\n### Tasks\n\n- [ ] Issue triage and response\n- [ ] PR review and merging\n- [ ] Community engagement\n- [ ] Feature request evaluation\n- [ ] Bug fix prioritization\n\n### Related Documentation\n\n- [Continuous Improvements](../ROADMAP.md#continuous-improvements-ongoing)\n\n---\n*This issue was auto-generated from the DMARQ roadmap.*",
|
||||
"labels": [
|
||||
"maintenance",
|
||||
"continuous-improvement"
|
||||
],
|
||||
"milestone": "Continuous Improvements",
|
||||
"assignees": []
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,499 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Script to generate GitHub issues from DMARQ roadmap documents.
|
||||
|
||||
This script parses the roadmap files and creates structured issue templates
|
||||
that can be imported to GitHub.
|
||||
"""
|
||||
|
||||
import json
|
||||
import re
|
||||
from pathlib import Path
|
||||
from typing import List, Dict, Any
|
||||
from dataclasses import dataclass, asdict
|
||||
|
||||
|
||||
@dataclass
|
||||
class Issue:
|
||||
"""Represents a GitHub issue."""
|
||||
title: str
|
||||
body: str
|
||||
labels: List[str]
|
||||
milestone: str = ""
|
||||
assignees: List[str] = None
|
||||
|
||||
def __post_init__(self):
|
||||
if self.assignees is None:
|
||||
self.assignees = []
|
||||
|
||||
|
||||
class RoadmapParser:
|
||||
"""Parser for DMARQ roadmap documents."""
|
||||
|
||||
def __init__(self, roadmap_path: Path):
|
||||
self.roadmap_path = roadmap_path
|
||||
self.content = roadmap_path.read_text()
|
||||
self.issues: List[Issue] = []
|
||||
|
||||
def parse_security_sprint(self) -> List[Issue]:
|
||||
"""Parse the Security Remediation Sprint section."""
|
||||
issues = []
|
||||
|
||||
# Pattern to match sections like "#### 1. Authentication & Authorization (CRITICAL)"
|
||||
section_pattern = r'####\s+(\d+)\.\s+(.+?)\((.+?)\)\s*\n(.*?)(?=####|\n##|\Z)'
|
||||
|
||||
for match in re.finditer(section_pattern, self.content, re.DOTALL):
|
||||
section_num = match.group(1)
|
||||
title = match.group(2).strip()
|
||||
priority = match.group(3).strip()
|
||||
content = match.group(4).strip()
|
||||
|
||||
# Extract checklist items
|
||||
checklist_items = re.findall(r'- \[ \] (.+)', content)
|
||||
|
||||
# Extract files to fix
|
||||
files_section = re.search(r'\*\*Files to Fix\*\*:\s*\n((?:\s*-\s+`.+?`.*\n?)+)', content)
|
||||
files = []
|
||||
if files_section:
|
||||
files = re.findall(r'-\s+`(.+?)`', files_section.group(1))
|
||||
|
||||
# Build issue body
|
||||
body_parts = [
|
||||
f"## Description",
|
||||
f"",
|
||||
f"Part of the **Security Remediation Sprint** - Priority: **{priority}**",
|
||||
f"",
|
||||
f"### Tasks",
|
||||
""
|
||||
]
|
||||
|
||||
for item in checklist_items:
|
||||
body_parts.append(f"- [ ] {item}")
|
||||
|
||||
if files:
|
||||
body_parts.extend([
|
||||
"",
|
||||
"### Files to Update",
|
||||
""
|
||||
])
|
||||
for file in files:
|
||||
body_parts.append(f"- `{file}`")
|
||||
|
||||
body_parts.extend([
|
||||
"",
|
||||
"### Related Documentation",
|
||||
"",
|
||||
"- [SECURITY.md](../SECURITY.md)",
|
||||
"- [Security Remediation Sprint](../ROADMAP.md#security-remediation-sprint-priority---in-progress)",
|
||||
"",
|
||||
"---",
|
||||
"*This issue was auto-generated from the DMARQ roadmap.*"
|
||||
])
|
||||
|
||||
# Determine labels based on priority
|
||||
labels = ["security"]
|
||||
if "CRITICAL" in priority:
|
||||
labels.extend(["priority: critical", "security: critical"])
|
||||
elif "HIGH" in priority:
|
||||
labels.extend(["priority: high", "security: high"])
|
||||
elif "MEDIUM" in priority:
|
||||
labels.extend(["priority: medium"])
|
||||
|
||||
issue = Issue(
|
||||
title=f"[Security Sprint] {title}",
|
||||
body="\n".join(body_parts),
|
||||
labels=labels,
|
||||
milestone="Security Remediation Sprint"
|
||||
)
|
||||
issues.append(issue)
|
||||
|
||||
return issues
|
||||
|
||||
def parse_milestone_features(self) -> List[Issue]:
|
||||
"""Parse milestone features from the roadmap."""
|
||||
issues = []
|
||||
|
||||
# Pattern to match milestone sections
|
||||
milestone_pattern = r'##\s+Milestone\s+(\d+):\s+(.+?)(?:\((.+?)\))?\s*\n(.*?)(?=\n##|\Z)'
|
||||
|
||||
for match in re.finditer(milestone_pattern, self.content, re.DOTALL):
|
||||
milestone_num = match.group(1)
|
||||
milestone_name = match.group(2).strip()
|
||||
timeline = match.group(3) or ""
|
||||
content = match.group(4).strip()
|
||||
|
||||
# Skip completed milestones
|
||||
if "COMPLETE ✅" in milestone_name or "✅" in content[:100]:
|
||||
continue
|
||||
|
||||
# Extract planned features
|
||||
features_match = re.search(r'###\s+Planned Features\s*\n((?:- \[ \].+\n?)+)', content, re.MULTILINE)
|
||||
security_match = re.search(r'###\s+Security (?:Features|Considerations|Enhancements Needed)\s*\n((?:- \[ \].+\n?)+)', content, re.MULTILINE)
|
||||
|
||||
if features_match:
|
||||
features = re.findall(r'- \[ \] (.+)', features_match.group(1))
|
||||
|
||||
for feature in features:
|
||||
body_parts = [
|
||||
f"## Description",
|
||||
f"",
|
||||
f"Feature for **Milestone {milestone_num}: {milestone_name}**",
|
||||
f"",
|
||||
]
|
||||
|
||||
if timeline:
|
||||
body_parts.append(f"**Timeline**: {timeline}")
|
||||
body_parts.append("")
|
||||
|
||||
body_parts.extend([
|
||||
f"### Feature",
|
||||
f"{feature}",
|
||||
"",
|
||||
])
|
||||
|
||||
# Add security considerations if they exist
|
||||
if security_match:
|
||||
security_items = re.findall(r'- \[ \] (.+)', security_match.group(1))
|
||||
if security_items:
|
||||
body_parts.extend([
|
||||
"### Security Considerations",
|
||||
""
|
||||
])
|
||||
for item in security_items:
|
||||
body_parts.append(f"- [ ] {item}")
|
||||
body_parts.append("")
|
||||
|
||||
body_parts.extend([
|
||||
"### Related Documentation",
|
||||
"",
|
||||
f"- [Milestone {milestone_num}](../ROADMAP.md#milestone-{milestone_num}-{milestone_name.lower().replace(' ', '-').replace('&', '').replace('(', '').replace(')', '')})",
|
||||
"",
|
||||
"---",
|
||||
"*This issue was auto-generated from the DMARQ roadmap.*"
|
||||
])
|
||||
|
||||
labels = ["enhancement", f"milestone-{milestone_num}"]
|
||||
|
||||
# Add priority based on milestone
|
||||
if int(milestone_num) <= 5:
|
||||
labels.append("priority: high")
|
||||
elif int(milestone_num) <= 8:
|
||||
labels.append("priority: medium")
|
||||
else:
|
||||
labels.append("priority: low")
|
||||
|
||||
issue = Issue(
|
||||
title=f"[M{milestone_num}] {feature[:80]}",
|
||||
body="\n".join(body_parts),
|
||||
labels=labels,
|
||||
milestone=f"Milestone {milestone_num}: {milestone_name}"
|
||||
)
|
||||
issues.append(issue)
|
||||
|
||||
# Create separate issues for security enhancements
|
||||
if security_match and "Security Enhancements Needed" in content:
|
||||
security_items = re.findall(r'- \[ \] (.+)', security_match.group(1))
|
||||
|
||||
if security_items:
|
||||
body_parts = [
|
||||
f"## Description",
|
||||
f"",
|
||||
f"Security enhancements for **Milestone {milestone_num}: {milestone_name}**",
|
||||
f"",
|
||||
"### Security Tasks",
|
||||
""
|
||||
]
|
||||
|
||||
for item in security_items:
|
||||
body_parts.append(f"- [ ] {item}")
|
||||
|
||||
body_parts.extend([
|
||||
"",
|
||||
"### Related Documentation",
|
||||
"",
|
||||
f"- [Milestone {milestone_num}](../ROADMAP.md#milestone-{milestone_num}-{milestone_name.lower().replace(' ', '-').replace('&', '').replace('(', '').replace(')', '')})",
|
||||
"- [SECURITY.md](../SECURITY.md)",
|
||||
"",
|
||||
"---",
|
||||
"*This issue was auto-generated from the DMARQ roadmap.*"
|
||||
])
|
||||
|
||||
issue = Issue(
|
||||
title=f"[M{milestone_num}] Security Enhancements for {milestone_name}",
|
||||
body="\n".join(body_parts),
|
||||
labels=["security", f"milestone-{milestone_num}", "enhancement"],
|
||||
milestone=f"Milestone {milestone_num}: {milestone_name}"
|
||||
)
|
||||
issues.append(issue)
|
||||
|
||||
return issues
|
||||
|
||||
def parse_continuous_improvements(self) -> List[Issue]:
|
||||
"""Parse continuous improvement tasks."""
|
||||
issues = []
|
||||
|
||||
# Find the Continuous Improvements section
|
||||
ci_start = self.content.find('## Continuous Improvements')
|
||||
if ci_start == -1:
|
||||
return issues
|
||||
|
||||
# Find the end at "---" or next "##"
|
||||
content_after_ci = self.content[ci_start:]
|
||||
|
||||
# Find the first separator (--- line by itself)
|
||||
separator_match = re.search(r'\n---\n', content_after_ci)
|
||||
next_section_match = re.search(r'\n## [^C]', content_after_ci) # Next section that doesn't start with 'C'
|
||||
|
||||
# Take whichever comes first
|
||||
end_pos = len(content_after_ci)
|
||||
if separator_match and next_section_match:
|
||||
end_pos = min(separator_match.start(), next_section_match.start())
|
||||
elif separator_match:
|
||||
end_pos = separator_match.start()
|
||||
elif next_section_match:
|
||||
end_pos = next_section_match.start()
|
||||
|
||||
ci_content = content_after_ci[:end_pos]
|
||||
|
||||
# Split by ### to get subsections
|
||||
subsections = re.split(r'\n###\s+', ci_content)
|
||||
|
||||
for subsection in subsections[1:]: # Skip the first split (the title)
|
||||
lines = subsection.split('\n')
|
||||
if not lines:
|
||||
continue
|
||||
|
||||
category = lines[0].strip()
|
||||
items = []
|
||||
|
||||
for line in lines[1:]:
|
||||
match = re.match(r'- \[ \] (.+)', line)
|
||||
if match:
|
||||
items.append(match.group(1))
|
||||
|
||||
if not items:
|
||||
continue
|
||||
|
||||
body_parts = [
|
||||
f"## Description",
|
||||
f"",
|
||||
f"Ongoing {category.lower()} tasks to maintain and improve DMARQ.",
|
||||
f"",
|
||||
"### Tasks",
|
||||
""
|
||||
]
|
||||
|
||||
for item in items:
|
||||
body_parts.append(f"- [ ] {item}")
|
||||
|
||||
body_parts.extend([
|
||||
"",
|
||||
"### Related Documentation",
|
||||
"",
|
||||
"- [Continuous Improvements](../ROADMAP.md#continuous-improvements-ongoing)",
|
||||
"",
|
||||
"---",
|
||||
"*This issue was auto-generated from the DMARQ roadmap.*"
|
||||
])
|
||||
|
||||
labels = ["maintenance", "continuous-improvement"]
|
||||
|
||||
if category.lower() == "security":
|
||||
labels.append("security")
|
||||
elif category.lower() == "documentation":
|
||||
labels.append("documentation")
|
||||
elif category.lower() == "code quality":
|
||||
labels.append("code-quality")
|
||||
|
||||
issue = Issue(
|
||||
title=f"[Continuous] {category} Improvements",
|
||||
body="\n".join(body_parts),
|
||||
labels=labels,
|
||||
milestone="Continuous Improvements"
|
||||
)
|
||||
issues.append(issue)
|
||||
|
||||
return issues
|
||||
|
||||
def parse_all(self) -> List[Issue]:
|
||||
"""Parse all issues from the roadmap."""
|
||||
print(f"Parsing {self.roadmap_path.name}...")
|
||||
|
||||
self.issues.extend(self.parse_security_sprint())
|
||||
print(f" - Found {len(self.issues)} security sprint issues")
|
||||
|
||||
milestone_count = len(self.issues)
|
||||
self.issues.extend(self.parse_milestone_features())
|
||||
print(f" - Found {len(self.issues) - milestone_count} milestone feature issues")
|
||||
|
||||
ci_count = len(self.issues)
|
||||
self.issues.extend(self.parse_continuous_improvements())
|
||||
print(f" - Found {len(self.issues) - ci_count} continuous improvement issues")
|
||||
|
||||
return self.issues
|
||||
|
||||
|
||||
def save_issues_json(issues: List[Issue], output_path: Path):
|
||||
"""Save issues to JSON file."""
|
||||
issues_data = [asdict(issue) for issue in issues]
|
||||
|
||||
with output_path.open('w') as f:
|
||||
json.dump(issues_data, f, indent=2)
|
||||
|
||||
print(f"\nSaved {len(issues)} issues to {output_path}")
|
||||
|
||||
|
||||
def save_issues_markdown(issues: List[Issue], output_path: Path):
|
||||
"""Save issues to Markdown file for easy review."""
|
||||
with output_path.open('w') as f:
|
||||
f.write("# DMARQ Roadmap Issues\n\n")
|
||||
f.write(f"Auto-generated from roadmap documents.\n\n")
|
||||
f.write(f"**Total Issues**: {len(issues)}\n\n")
|
||||
f.write("---\n\n")
|
||||
|
||||
# Group by milestone
|
||||
by_milestone = {}
|
||||
for issue in issues:
|
||||
milestone = issue.milestone or "No Milestone"
|
||||
if milestone not in by_milestone:
|
||||
by_milestone[milestone] = []
|
||||
by_milestone[milestone].append(issue)
|
||||
|
||||
for milestone, milestone_issues in sorted(by_milestone.items()):
|
||||
f.write(f"## {milestone}\n\n")
|
||||
f.write(f"**Count**: {len(milestone_issues)}\n\n")
|
||||
|
||||
for issue in milestone_issues:
|
||||
f.write(f"### {issue.title}\n\n")
|
||||
f.write(f"**Labels**: {', '.join(issue.labels)}\n\n")
|
||||
f.write("```markdown\n")
|
||||
f.write(issue.body)
|
||||
f.write("\n```\n\n")
|
||||
f.write("---\n\n")
|
||||
|
||||
print(f"Saved issues preview to {output_path}")
|
||||
|
||||
|
||||
def save_github_import_script(issues: List[Issue], output_path: Path):
|
||||
"""Save a bash script to import issues using GitHub CLI."""
|
||||
script_lines = [
|
||||
"#!/bin/bash",
|
||||
"#",
|
||||
"# Script to create GitHub issues from DMARQ roadmap",
|
||||
"# Requires: GitHub CLI (gh) - https://cli.github.com/",
|
||||
"#",
|
||||
"# Usage: ./create_issues.sh",
|
||||
"#",
|
||||
"",
|
||||
"set -e",
|
||||
"",
|
||||
"REPO=\"christianlouis/dmarq\"",
|
||||
"",
|
||||
"echo \"Creating GitHub issues for DMARQ roadmap...\"",
|
||||
"echo \"Repository: $REPO\"",
|
||||
"echo \"\"",
|
||||
"",
|
||||
"# Check if gh is installed",
|
||||
"if ! command -v gh &> /dev/null; then",
|
||||
" echo \"Error: GitHub CLI (gh) is not installed.\"",
|
||||
" echo \"Please install it from: https://cli.github.com/\"",
|
||||
" exit 1",
|
||||
"fi",
|
||||
"",
|
||||
"# Check if authenticated",
|
||||
"if ! gh auth status &> /dev/null; then",
|
||||
" echo \"Error: Not authenticated with GitHub CLI.\"",
|
||||
" echo \"Please run: gh auth login\"",
|
||||
" exit 1",
|
||||
"fi",
|
||||
"",
|
||||
"ISSUE_COUNT=0",
|
||||
""
|
||||
]
|
||||
|
||||
for i, issue in enumerate(issues, 1):
|
||||
# Escape special characters in title and body
|
||||
title = issue.title.replace('"', '\\"').replace('$', '\\$')
|
||||
body = issue.body.replace('"', '\\"').replace('$', '\\$').replace('`', '\\`')
|
||||
labels = ','.join(issue.labels)
|
||||
|
||||
script_lines.extend([
|
||||
f"# Issue {i}: {issue.title[:50]}...",
|
||||
f"echo \"Creating issue {i}/{len(issues)}: {title[:50]}...\"",
|
||||
"gh issue create \\",
|
||||
f" --repo \"$REPO\" \\",
|
||||
f" --title \"{title}\" \\",
|
||||
f" --body \"{body}\" \\",
|
||||
f" --label \"{labels}\" || echo \" Failed to create issue {i}\"",
|
||||
"",
|
||||
"ISSUE_COUNT=$((ISSUE_COUNT + 1))",
|
||||
"sleep 1 # Rate limiting",
|
||||
""
|
||||
])
|
||||
|
||||
script_lines.extend([
|
||||
"echo \"\"",
|
||||
"echo \"Done! Created $ISSUE_COUNT issues.\"",
|
||||
"echo \"\"",
|
||||
"echo \"Next steps:\"",
|
||||
"echo \"1. Review the created issues at: https://github.com/$REPO/issues\"",
|
||||
"echo \"2. Create milestones if needed\"",
|
||||
"echo \"3. Assign issues to milestones and team members\"",
|
||||
"echo \"4. Start working on the Security Remediation Sprint first!\""
|
||||
])
|
||||
|
||||
script_content = "\n".join(script_lines)
|
||||
output_path.write_text(script_content)
|
||||
output_path.chmod(0o755) # Make executable
|
||||
|
||||
print(f"Saved GitHub CLI import script to {output_path}")
|
||||
|
||||
|
||||
def main():
|
||||
"""Main function."""
|
||||
repo_root = Path(__file__).parent.parent
|
||||
roadmap_path = repo_root / "ROADMAP.md"
|
||||
output_dir = repo_root / "generated_issues"
|
||||
output_dir.mkdir(exist_ok=True)
|
||||
|
||||
print("=" * 60)
|
||||
print("DMARQ Roadmap Issue Generator")
|
||||
print("=" * 60)
|
||||
print()
|
||||
|
||||
if not roadmap_path.exists():
|
||||
print(f"Error: Roadmap file not found at {roadmap_path}")
|
||||
return 1
|
||||
|
||||
# Parse roadmap
|
||||
parser = RoadmapParser(roadmap_path)
|
||||
issues = parser.parse_all()
|
||||
|
||||
print(f"\n{'=' * 60}")
|
||||
print(f"Total issues generated: {len(issues)}")
|
||||
print(f"{'=' * 60}\n")
|
||||
|
||||
# Save outputs
|
||||
save_issues_json(issues, output_dir / "issues.json")
|
||||
save_issues_markdown(issues, output_dir / "issues_preview.md")
|
||||
save_github_import_script(issues, output_dir / "create_issues.sh")
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("Output files created in:", output_dir)
|
||||
print("=" * 60)
|
||||
print("\nFiles generated:")
|
||||
print(f" 1. issues.json - JSON format for programmatic import")
|
||||
print(f" 2. issues_preview.md - Human-readable preview")
|
||||
print(f" 3. create_issues.sh - Executable script using GitHub CLI")
|
||||
print("\nTo create the issues:")
|
||||
print(f" cd {output_dir}")
|
||||
print(" ./create_issues.sh")
|
||||
print("\nNote: You'll need GitHub CLI (gh) installed and authenticated.")
|
||||
print(" Install from: https://cli.github.com/")
|
||||
print()
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
exit(main())
|
||||
Reference in New Issue
Block a user