msn-weather-wrapper 1.1.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. msn_weather_wrapper-1.1.5/.containerignore +49 -0
  2. msn_weather_wrapper-1.1.5/.env.example +146 -0
  3. msn_weather_wrapper-1.1.5/.github/CODEOWNERS +39 -0
  4. msn_weather_wrapper-1.1.5/.github/ISSUE_TEMPLATE/bug_report.yml +126 -0
  5. msn_weather_wrapper-1.1.5/.github/ISSUE_TEMPLATE/config.yml +11 -0
  6. msn_weather_wrapper-1.1.5/.github/ISSUE_TEMPLATE/feature_request.yml +131 -0
  7. msn_weather_wrapper-1.1.5/.github/PULL_REQUEST_TEMPLATE.md +80 -0
  8. msn_weather_wrapper-1.1.5/.github/PYPI_SETUP.md +216 -0
  9. msn_weather_wrapper-1.1.5/.github/SECURITY.md +192 -0
  10. msn_weather_wrapper-1.1.5/.github/actions/setup-python-env/action.yml +36 -0
  11. msn_weather_wrapper-1.1.5/.github/dependabot.yml +141 -0
  12. msn_weather_wrapper-1.1.5/.github/workflows/README.md +251 -0
  13. msn_weather_wrapper-1.1.5/.github/workflows/ci.yml +722 -0
  14. msn_weather_wrapper-1.1.5/.github/workflows/dependencies.yml +169 -0
  15. msn_weather_wrapper-1.1.5/.github/workflows/performance.yml +137 -0
  16. msn_weather_wrapper-1.1.5/.github/workflows/release.yml +168 -0
  17. msn_weather_wrapper-1.1.5/.github/workflows/security-scan.yml +230 -0
  18. msn_weather_wrapper-1.1.5/.gitignore +114 -0
  19. msn_weather_wrapper-1.1.5/.pre-commit-config.yaml +26 -0
  20. msn_weather_wrapper-1.1.5/CHANGELOG.md +201 -0
  21. msn_weather_wrapper-1.1.5/CODE_OF_CONDUCT.md +133 -0
  22. msn_weather_wrapper-1.1.5/CONTRIBUTING.md +396 -0
  23. msn_weather_wrapper-1.1.5/Containerfile +73 -0
  24. msn_weather_wrapper-1.1.5/Containerfile.dev +42 -0
  25. msn_weather_wrapper-1.1.5/Containerfile.playwright +7 -0
  26. msn_weather_wrapper-1.1.5/LICENSE +21 -0
  27. msn_weather_wrapper-1.1.5/PKG-INFO +314 -0
  28. msn_weather_wrapper-1.1.5/README.md +266 -0
  29. msn_weather_wrapper-1.1.5/api.py +919 -0
  30. msn_weather_wrapper-1.1.5/config/nginx.conf +59 -0
  31. msn_weather_wrapper-1.1.5/config/supervisord.conf +20 -0
  32. msn_weather_wrapper-1.1.5/dev.sh +429 -0
  33. msn_weather_wrapper-1.1.5/docs/API.md +681 -0
  34. msn_weather_wrapper-1.1.5/docs/AUTOMATIC_VERSIONING.md +394 -0
  35. msn_weather_wrapper-1.1.5/docs/CHANGELOG.md +201 -0
  36. msn_weather_wrapper-1.1.5/docs/CONTAINER_DEV_SETUP.md +191 -0
  37. msn_weather_wrapper-1.1.5/docs/DEVELOPMENT.md +372 -0
  38. msn_weather_wrapper-1.1.5/docs/SECURITY.md +236 -0
  39. msn_weather_wrapper-1.1.5/docs/SWAGGER.md +206 -0
  40. msn_weather_wrapper-1.1.5/docs/SYFT_GUIDE.md +424 -0
  41. msn_weather_wrapper-1.1.5/docs/TESTING.md +718 -0
  42. msn_weather_wrapper-1.1.5/docs/VERSIONING.md +420 -0
  43. msn_weather_wrapper-1.1.5/docs/VERSIONING_QUICKSTART.md +57 -0
  44. msn_weather_wrapper-1.1.5/docs/index.md +99 -0
  45. msn_weather_wrapper-1.1.5/docs/reports/ci-cd.md +454 -0
  46. msn_weather_wrapper-1.1.5/docs/reports/coverage-report.md +300 -0
  47. msn_weather_wrapper-1.1.5/docs/reports/index.md +145 -0
  48. msn_weather_wrapper-1.1.5/docs/reports/license-report.md +177 -0
  49. msn_weather_wrapper-1.1.5/docs/reports/security-report.md +344 -0
  50. msn_weather_wrapper-1.1.5/docs/reports/test-report.md +229 -0
  51. msn_weather_wrapper-1.1.5/frontend/.dockerignore +31 -0
  52. msn_weather_wrapper-1.1.5/frontend/.gitignore +29 -0
  53. msn_weather_wrapper-1.1.5/frontend/.nvmrc +1 -0
  54. msn_weather_wrapper-1.1.5/frontend/Containerfile +29 -0
  55. msn_weather_wrapper-1.1.5/frontend/Containerfile.dev +28 -0
  56. msn_weather_wrapper-1.1.5/frontend/README.md +116 -0
  57. msn_weather_wrapper-1.1.5/frontend/TESTING.md +234 -0
  58. msn_weather_wrapper-1.1.5/frontend/index.html +39 -0
  59. msn_weather_wrapper-1.1.5/frontend/nginx.conf +41 -0
  60. msn_weather_wrapper-1.1.5/frontend/package-lock.json +1739 -0
  61. msn_weather_wrapper-1.1.5/frontend/package.json +28 -0
  62. msn_weather_wrapper-1.1.5/frontend/playwright.config.ts +45 -0
  63. msn_weather_wrapper-1.1.5/frontend/public/site.webmanifest +16 -0
  64. msn_weather_wrapper-1.1.5/frontend/public/weather.svg +19 -0
  65. msn_weather_wrapper-1.1.5/frontend/src/App.css +412 -0
  66. msn_weather_wrapper-1.1.5/frontend/src/App.tsx +313 -0
  67. msn_weather_wrapper-1.1.5/frontend/src/components/CityAutocomplete.css +62 -0
  68. msn_weather_wrapper-1.1.5/frontend/src/components/CityAutocomplete.tsx +125 -0
  69. msn_weather_wrapper-1.1.5/frontend/src/data/cities.ts +623 -0
  70. msn_weather_wrapper-1.1.5/frontend/src/main.tsx +15 -0
  71. msn_weather_wrapper-1.1.5/frontend/src/types.ts +25 -0
  72. msn_weather_wrapper-1.1.5/frontend/src/vite-env.d.ts +1 -0
  73. msn_weather_wrapper-1.1.5/frontend/tests/e2e/accessibility.spec.ts +186 -0
  74. msn_weather_wrapper-1.1.5/frontend/tests/e2e/visual.spec.ts +204 -0
  75. msn_weather_wrapper-1.1.5/frontend/tests/e2e/weather.spec.ts +370 -0
  76. msn_weather_wrapper-1.1.5/frontend/tsconfig.json +31 -0
  77. msn_weather_wrapper-1.1.5/frontend/tsconfig.node.json +10 -0
  78. msn_weather_wrapper-1.1.5/frontend/vite.config.js +21 -0
  79. msn_weather_wrapper-1.1.5/mkdocs.yml +172 -0
  80. msn_weather_wrapper-1.1.5/podman-compose.dev.yml +59 -0
  81. msn_weather_wrapper-1.1.5/podman-compose.test.yml +47 -0
  82. msn_weather_wrapper-1.1.5/podman-compose.yml +23 -0
  83. msn_weather_wrapper-1.1.5/pyproject.toml +165 -0
  84. msn_weather_wrapper-1.1.5/src/msn_weather_wrapper/__init__.py +8 -0
  85. msn_weather_wrapper-1.1.5/src/msn_weather_wrapper/client.py +310 -0
  86. msn_weather_wrapper-1.1.5/src/msn_weather_wrapper/models.py +22 -0
  87. msn_weather_wrapper-1.1.5/src/msn_weather_wrapper/py.typed +0 -0
  88. msn_weather_wrapper-1.1.5/tests/__init__.py +1 -0
  89. msn_weather_wrapper-1.1.5/tests/conftest.py +14 -0
  90. msn_weather_wrapper-1.1.5/tests/test_api.py +418 -0
  91. msn_weather_wrapper-1.1.5/tests/test_client.py +487 -0
  92. msn_weather_wrapper-1.1.5/tests/test_integration.py +304 -0
  93. msn_weather_wrapper-1.1.5/tests/test_models.py +52 -0
  94. msn_weather_wrapper-1.1.5/tests/test_new_features.py +116 -0
  95. msn_weather_wrapper-1.1.5/tests/test_security.py +484 -0
  96. msn_weather_wrapper-1.1.5/tools/README.md +303 -0
  97. msn_weather_wrapper-1.1.5/tools/generate_reports.py +488 -0
  98. msn_weather_wrapper-1.1.5/tools/generate_sbom.sh +264 -0
  99. msn_weather_wrapper-1.1.5/tools/generate_sbom_ci.sh +46 -0
  100. msn_weather_wrapper-1.1.5/tools/test_deployment.sh +153 -0
@@ -0,0 +1,49 @@
1
+ # Python cache
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ *.egg-info/
8
+ dist/
9
+ build/
10
+ *.egg
11
+
12
+ # Virtual environment
13
+ .venv/
14
+ venv/
15
+ ENV/
16
+
17
+ # Testing
18
+ .pytest_cache/
19
+ htmlcov/
20
+ .coverage
21
+ .tox/
22
+
23
+ # IDE
24
+ .vscode/
25
+ .idea/
26
+ *.swp
27
+ *.swo
28
+ *~
29
+
30
+ # Git
31
+ .git/
32
+ .gitignore
33
+ .github/
34
+
35
+ # Documentation - exclude most but keep README.md for package build
36
+ API.md
37
+
38
+ # Frontend - only exclude node_modules and build artifacts
39
+ frontend/node_modules/
40
+ frontend/dist/
41
+
42
+ # Example files
43
+ example.py
44
+ test_api_manual.py
45
+ WeatherWidget.jsx
46
+ WeatherWidget.tsx
47
+
48
+ # GitHub
49
+ .github/
@@ -0,0 +1,146 @@
1
+ # MSN Weather Wrapper Environment Configuration
2
+ # Copy this file to .env and configure as needed
3
+
4
+ # =============================================================================
5
+ # Flask Configuration
6
+ # =============================================================================
7
+
8
+ # Flask environment mode (development, production)
9
+ # In production, set to "production" to disable debug mode
10
+ FLASK_ENV=production
11
+
12
+ # Secret key for Flask sessions (generate a secure random key in production)
13
+ # Generate with: python -c "import secrets; print(secrets.token_hex(32))"
14
+ FLASK_SECRET_KEY=change-this-to-a-secure-random-key-in-production
15
+
16
+ # Flask debug mode (true/false)
17
+ # NEVER enable debug mode in production
18
+ FLASK_DEBUG=false
19
+
20
+ # =============================================================================
21
+ # Application Configuration
22
+ # =============================================================================
23
+
24
+ # Application host and port
25
+ HOST=0.0.0.0
26
+ PORT=5000
27
+
28
+ # =============================================================================
29
+ # Rate Limiting Configuration
30
+ # =============================================================================
31
+
32
+ # Rate limit per IP address (requests per minute)
33
+ RATE_LIMIT_PER_IP=30
34
+
35
+ # Global rate limit (requests per hour)
36
+ RATE_LIMIT_GLOBAL=200
37
+
38
+ # =============================================================================
39
+ # Caching Configuration
40
+ # =============================================================================
41
+
42
+ # Weather data cache duration (seconds)
43
+ # Default: 300 seconds (5 minutes)
44
+ CACHE_DURATION=300
45
+
46
+ # =============================================================================
47
+ # CORS Configuration
48
+ # =============================================================================
49
+
50
+ # Allowed origins for CORS (comma-separated list)
51
+ # Use "*" for all origins (not recommended in production)
52
+ # Example: https://example.com,https://app.example.com
53
+ CORS_ORIGINS=*
54
+
55
+ # =============================================================================
56
+ # Logging Configuration
57
+ # =============================================================================
58
+
59
+ # Log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
60
+ LOG_LEVEL=INFO
61
+
62
+ # Enable structured JSON logging (true/false)
63
+ STRUCTURED_LOGGING=true
64
+
65
+ # =============================================================================
66
+ # Gunicorn Configuration (Production)
67
+ # =============================================================================
68
+
69
+ # Number of Gunicorn worker processes
70
+ # Recommended: (2 x CPU cores) + 1
71
+ GUNICORN_WORKERS=4
72
+
73
+ # Gunicorn timeout (seconds)
74
+ GUNICORN_TIMEOUT=120
75
+
76
+ # Gunicorn bind address
77
+ GUNICORN_BIND=0.0.0.0:5000
78
+
79
+ # =============================================================================
80
+ # Database Configuration (Future Use)
81
+ # =============================================================================
82
+
83
+ # Database URL (not currently used, reserved for future features)
84
+ # DATABASE_URL=postgresql://user:password@localhost:5432/weather_db
85
+
86
+ # =============================================================================
87
+ # External API Configuration
88
+ # =============================================================================
89
+
90
+ # MSN Weather base URL (default should work, but can be customized)
91
+ MSN_WEATHER_BASE_URL=https://www.msn.com/en-us/weather
92
+
93
+ # Request timeout for external API calls (seconds)
94
+ REQUEST_TIMEOUT=30
95
+
96
+ # User agent for HTTP requests
97
+ USER_AGENT=Mozilla/5.0 (compatible; MSNWeatherWrapper/1.0)
98
+
99
+ # =============================================================================
100
+ # Security Configuration
101
+ # =============================================================================
102
+
103
+ # Maximum input length for city/country names
104
+ MAX_INPUT_LENGTH=100
105
+
106
+ # Enable input validation (true/false)
107
+ # NEVER disable in production
108
+ ENABLE_INPUT_VALIDATION=true
109
+
110
+ # =============================================================================
111
+ # Development Configuration
112
+ # =============================================================================
113
+
114
+ # Enable hot reload in development (true/false)
115
+ DEV_HOT_RELOAD=true
116
+
117
+ # Frontend development server URL (for CORS in development)
118
+ FRONTEND_DEV_URL=http://localhost:5173
119
+
120
+ # =============================================================================
121
+ # Container Configuration
122
+ # =============================================================================
123
+
124
+ # Container registry (for pushing images)
125
+ CONTAINER_REGISTRY=ghcr.io
126
+
127
+ # Container image name
128
+ CONTAINER_IMAGE=jim-wyatt/msn-weather-wrapper
129
+
130
+ # =============================================================================
131
+ # Health Check Configuration
132
+ # =============================================================================
133
+
134
+ # Health check timeout (seconds)
135
+ HEALTH_CHECK_TIMEOUT=10
136
+
137
+ # =============================================================================
138
+ # Notes
139
+ # =============================================================================
140
+
141
+ # 1. Never commit .env files to version control
142
+ # 2. Use strong, unique values for SECRET_KEY in production
143
+ # 3. Adjust rate limits based on your server capacity
144
+ # 4. Set appropriate CORS origins in production (not "*")
145
+ # 5. Use environment-specific .env files (.env.production, .env.development)
146
+ # 6. Consider using secrets management tools (AWS Secrets Manager, HashiCorp Vault)
@@ -0,0 +1,39 @@
1
+ # CODEOWNERS - Automatically request reviews from code owners
2
+ # Docs: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
3
+
4
+ # Default owner for everything
5
+ * @jim-wyatt
6
+
7
+ # Python package and core library
8
+ /src/ @jim-wyatt
9
+ /tests/ @jim-wyatt
10
+ pyproject.toml @jim-wyatt
11
+
12
+ # Flask API
13
+ api.py @jim-wyatt
14
+
15
+ # Frontend
16
+ /frontend/ @jim-wyatt
17
+
18
+ # CI/CD workflows
19
+ /.github/workflows/ @jim-wyatt
20
+ /.github/actions/ @jim-wyatt
21
+
22
+ # Documentation
23
+ /docs/ @jim-wyatt
24
+ README.md @jim-wyatt
25
+ *.md @jim-wyatt
26
+
27
+ # Configuration files
28
+ *.yml @jim-wyatt
29
+ *.yaml @jim-wyatt
30
+ *.toml @jim-wyatt
31
+ .pre-commit-config.yaml @jim-wyatt
32
+
33
+ # Containerfiles
34
+ Containerfile* @jim-wyatt
35
+ podman-compose.yml @jim-wyatt
36
+
37
+ # Security-related files
38
+ /docs/SECURITY.md @jim-wyatt
39
+ /.github/workflows/security-scan.yml @jim-wyatt
@@ -0,0 +1,126 @@
1
+ name: Bug Report
2
+ description: Report a bug or unexpected behavior
3
+ title: "[Bug]: "
4
+ labels: ["bug", "triage"]
5
+ assignees: []
6
+
7
+ body:
8
+ - type: markdown
9
+ attributes:
10
+ value: |
11
+ Thanks for taking the time to report this bug! Please fill out the sections below to help us investigate.
12
+
13
+ - type: textarea
14
+ id: description
15
+ attributes:
16
+ label: Bug Description
17
+ description: A clear and concise description of what the bug is.
18
+ placeholder: When I try to... I expect... but instead...
19
+ validations:
20
+ required: true
21
+
22
+ - type: textarea
23
+ id: reproduction
24
+ attributes:
25
+ label: Steps to Reproduce
26
+ description: Steps to reproduce the behavior
27
+ placeholder: |
28
+ 1. Go to '...'
29
+ 2. Click on '...'
30
+ 3. Execute command '...'
31
+ 4. See error
32
+ validations:
33
+ required: true
34
+
35
+ - type: textarea
36
+ id: expected
37
+ attributes:
38
+ label: Expected Behavior
39
+ description: What did you expect to happen?
40
+ validations:
41
+ required: true
42
+
43
+ - type: textarea
44
+ id: actual
45
+ attributes:
46
+ label: Actual Behavior
47
+ description: What actually happened? Include error messages, stack traces, or screenshots.
48
+ validations:
49
+ required: true
50
+
51
+ - type: dropdown
52
+ id: component
53
+ attributes:
54
+ label: Component
55
+ description: Which component is affected?
56
+ options:
57
+ - Python Library (msn_weather_wrapper)
58
+ - REST API (Flask/api.py)
59
+ - Web Frontend (React)
60
+ - Docker/Container
61
+ - CI/CD
62
+ - Documentation
63
+ - Other
64
+ validations:
65
+ required: true
66
+
67
+ - type: dropdown
68
+ id: severity
69
+ attributes:
70
+ label: Severity
71
+ description: How severe is this issue?
72
+ options:
73
+ - Critical (system crash, data loss)
74
+ - High (major feature broken)
75
+ - Medium (feature partially broken)
76
+ - Low (minor issue, workaround exists)
77
+ validations:
78
+ required: true
79
+
80
+ - type: textarea
81
+ id: environment
82
+ attributes:
83
+ label: Environment
84
+ description: |
85
+ Provide environment details:
86
+ - OS (e.g., Ubuntu 22.04, macOS 14.0, Windows 11)
87
+ - Python version (e.g., 3.12.0)
88
+ - Package version (e.g., 1.0.0)
89
+ - Deployment method (local, Docker, Podman)
90
+ value: |
91
+ - OS:
92
+ - Python:
93
+ - Version:
94
+ - Deployment:
95
+ render: markdown
96
+ validations:
97
+ required: true
98
+
99
+ - type: textarea
100
+ id: logs
101
+ attributes:
102
+ label: Relevant Logs
103
+ description: Include relevant log output, stack traces, or error messages
104
+ render: shell
105
+ validations:
106
+ required: false
107
+
108
+ - type: textarea
109
+ id: additional
110
+ attributes:
111
+ label: Additional Context
112
+ description: Any other context, screenshots, or information about the problem
113
+ validations:
114
+ required: false
115
+
116
+ - type: checkboxes
117
+ id: checklist
118
+ attributes:
119
+ label: Pre-submission Checklist
120
+ options:
121
+ - label: I have searched existing issues to avoid duplicates
122
+ required: true
123
+ - label: I have tested with the latest version
124
+ required: true
125
+ - label: I have included sufficient information to reproduce
126
+ required: true
@@ -0,0 +1,11 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: 💬 Discussions
4
+ url: https://github.com/jim-wyatt/msn-weather-wrapper/discussions
5
+ about: Ask questions, share ideas, or discuss the project with the community
6
+ - name: 📖 Documentation
7
+ url: https://jim-wyatt.github.io/msn-weather-wrapper/
8
+ about: Read the full documentation and guides
9
+ - name: 🔒 Security Issue
10
+ url: https://github.com/jim-wyatt/msn-weather-wrapper/security/advisories/new
11
+ about: Report a security vulnerability privately
@@ -0,0 +1,131 @@
1
+ name: Feature Request
2
+ description: Suggest a new feature or enhancement
3
+ title: "[Feature]: "
4
+ labels: ["enhancement"]
5
+ assignees: []
6
+
7
+ body:
8
+ - type: markdown
9
+ attributes:
10
+ value: |
11
+ Thanks for suggesting a new feature! Please provide as much detail as possible.
12
+
13
+ - type: textarea
14
+ id: problem
15
+ attributes:
16
+ label: Problem Statement
17
+ description: Describe the problem or pain point this feature would solve
18
+ placeholder: I'm frustrated when... It would be great if... Currently there's no way to...
19
+ validations:
20
+ required: true
21
+
22
+ - type: textarea
23
+ id: solution
24
+ attributes:
25
+ label: Proposed Solution
26
+ description: Describe your proposed solution
27
+ placeholder: Add a new endpoint/feature that...
28
+ validations:
29
+ required: true
30
+
31
+ - type: textarea
32
+ id: alternatives
33
+ attributes:
34
+ label: Alternatives Considered
35
+ description: What alternative solutions or workarounds have you considered?
36
+ validations:
37
+ required: false
38
+
39
+ - type: dropdown
40
+ id: component
41
+ attributes:
42
+ label: Component
43
+ description: Which component would this feature affect?
44
+ options:
45
+ - Python Library (msn_weather_wrapper)
46
+ - REST API (Flask/api.py)
47
+ - Web Frontend (React)
48
+ - Docker/Container
49
+ - CI/CD
50
+ - Documentation
51
+ - Multiple Components
52
+ - New Component
53
+ validations:
54
+ required: true
55
+
56
+ - type: dropdown
57
+ id: priority
58
+ attributes:
59
+ label: Priority
60
+ description: How important is this feature to you?
61
+ options:
62
+ - Critical (blocking my use case)
63
+ - High (significant improvement)
64
+ - Medium (nice to have)
65
+ - Low (minor enhancement)
66
+ validations:
67
+ required: true
68
+
69
+ - type: textarea
70
+ id: usecase
71
+ attributes:
72
+ label: Use Case
73
+ description: Describe your specific use case and how this feature would help
74
+ placeholder: |
75
+ As a [user type], I want to [goal] so that [benefit].
76
+
77
+ Example: As a mobile app developer, I want to get 7-day forecasts so that I can show weekly weather in my app.
78
+ validations:
79
+ required: true
80
+
81
+ - type: textarea
82
+ id: examples
83
+ attributes:
84
+ label: Examples
85
+ description: |
86
+ Provide code examples, API designs, or UI mockups showing how this feature would work
87
+ render: python
88
+ validations:
89
+ required: false
90
+
91
+ - type: textarea
92
+ id: impact
93
+ attributes:
94
+ label: Impact Assessment
95
+ description: |
96
+ - Who would benefit from this feature?
97
+ - Are there any breaking changes?
98
+ - What are the performance/resource implications?
99
+ validations:
100
+ required: false
101
+
102
+ - type: dropdown
103
+ id: willing
104
+ attributes:
105
+ label: Contribution
106
+ description: Are you willing to contribute this feature?
107
+ options:
108
+ - Yes, I can submit a PR
109
+ - Yes, with guidance
110
+ - No, but I can help test
111
+ - No
112
+ validations:
113
+ required: false
114
+
115
+ - type: textarea
116
+ id: additional
117
+ attributes:
118
+ label: Additional Context
119
+ description: Any other context, screenshots, or references (links to similar features in other projects)
120
+ validations:
121
+ required: false
122
+
123
+ - type: checkboxes
124
+ id: checklist
125
+ attributes:
126
+ label: Pre-submission Checklist
127
+ options:
128
+ - label: I have searched existing issues and PRs to avoid duplicates
129
+ required: true
130
+ - label: This feature aligns with the project's goals and scope
131
+ required: true
@@ -0,0 +1,80 @@
1
+ ## Description
2
+
3
+ <!-- Provide a brief description of the changes in this PR -->
4
+
5
+ ## Type of Change
6
+
7
+ <!-- Check all that apply -->
8
+
9
+ - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
10
+ - [ ] ✨ New feature (non-breaking change which adds functionality)
11
+ - [ ] 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
12
+ - [ ] 📝 Documentation update
13
+ - [ ] 🎨 Code style update (formatting, renaming)
14
+ - [ ] ♻️ Code refactoring (no functional changes)
15
+ - [ ] ⚡ Performance improvement
16
+ - [ ] ✅ Test update
17
+ - [ ] 🔧 Build/CI configuration change
18
+ - [ ] 🔒 Security fix
19
+
20
+ ## Related Issue
21
+
22
+ <!-- Link to related issue(s) -->
23
+ Fixes #(issue number)
24
+
25
+ ## Changes Made
26
+
27
+ <!-- List the specific changes made in this PR -->
28
+
29
+ -
30
+ -
31
+ -
32
+
33
+ ## Testing
34
+
35
+ <!-- Describe the tests you ran and how to reproduce -->
36
+
37
+ - [ ] All existing tests pass (`pytest`)
38
+ - [ ] Added new tests for new functionality
39
+ - [ ] Frontend tests pass (`npm test` in frontend/)
40
+ - [ ] Integration tests pass
41
+ - [ ] Manual testing performed
42
+
43
+ ### Test Evidence
44
+
45
+ <!-- Paste test output or screenshots showing tests passing -->
46
+
47
+ ```
48
+ # Paste relevant test output here
49
+ ```
50
+
51
+ ## Checklist
52
+
53
+ <!-- Check all that apply before requesting review -->
54
+
55
+ - [ ] My code follows the project's style guidelines (ruff, mypy)
56
+ - [ ] I have performed a self-review of my code
57
+ - [ ] I have commented my code, particularly in hard-to-understand areas
58
+ - [ ] I have made corresponding changes to the documentation
59
+ - [ ] My changes generate no new warnings or errors
60
+ - [ ] I have added tests that prove my fix is effective or that my feature works
61
+ - [ ] New and existing unit tests pass locally with my changes
62
+ - [ ] Any dependent changes have been merged and published
63
+ - [ ] I have updated the CHANGELOG.md (if applicable)
64
+ - [ ] I have used conventional commit messages (`feat:`, `fix:`, etc.)
65
+
66
+ ## Screenshots/Demo
67
+
68
+ <!-- If applicable, add screenshots or GIFs to demonstrate the changes -->
69
+
70
+ ## Additional Context
71
+
72
+ <!-- Add any other context about the PR here -->
73
+
74
+ ## Deployment Notes
75
+
76
+ <!-- Any special deployment considerations? -->
77
+
78
+ ## Reviewer Notes
79
+
80
+ <!-- Any specific areas you'd like reviewers to focus on? -->