@alteriom/painlessmesh 1.8.14 → 1.9.0
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.
- package/BRIDGE_TO_INTERNET.md +229 -0
- package/CHANGELOG.md +89 -1
- package/CONTRIBUTING.md +79 -0
- package/README.md +70 -143
- package/docs/README.md +1 -0
- package/docs/api/shared-gateway.md +1207 -0
- package/docs/troubleshooting/common-issues.md +28 -0
- package/docs/troubleshooting/faq.md +113 -12
- package/examples/basic/test/simulator/CMakeLists.txt +40 -0
- package/examples/basic/test/simulator/README.md +149 -0
- package/examples/basic/test/simulator/firmware/basic_firmware.hpp +117 -0
- package/examples/basic/test/simulator/scenarios/basic_mesh_test.yaml +81 -0
- package/examples/bridge/bridge.ino +17 -4
- package/examples/bridge_failover/README.md +81 -0
- package/examples/bridge_failover/bridge_failover.ino +51 -6
- package/examples/sharedGateway/README.md +235 -0
- package/examples/{meshCommandNode → sharedGateway}/platformio.ini +3 -2
- package/examples/sharedGateway/sharedGateway.ino +303 -0
- package/library.json +3 -22
- package/library.properties +1 -1
- package/package.json +3 -3
- package/src/arduino/wifi.hpp +380 -13
- package/src/painlessmesh/gateway.hpp +2120 -0
- package/src/painlessmesh/mesh.hpp +1034 -6
- package/src/painlessmesh/message_tracker.hpp +311 -0
- package/src/painlessmesh/protocol.hpp +6 -0
- package/DOCUMENTATION_INDEX.md +0 -146
- package/docs/API_DESIGN_GUIDELINES.md +0 -414
- package/docs/ARDUINO_LIBRARY_MANAGER_SUBMISSION.md +0 -331
- package/docs/BOOLEAN_NAMING_CONVENTION.md +0 -235
- package/docs/BRIDGE_FAILOVER.md +0 -512
- package/docs/BRIDGE_HEALTH_MONITORING.md +0 -293
- package/docs/CHANNEL_SYNCHRONIZATION.md +0 -209
- package/docs/CREATE_MISSING_RELEASES.md +0 -321
- package/docs/DOCUMENTATION_MIGRATION_PLAN.md +0 -176
- package/docs/FAQ_VERSION_NUMBERS.md +0 -152
- package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +0 -1062
- package/docs/MESH_TOPOLOGY_GUIDE.md +0 -992
- package/docs/MESH_TOPOLOGY_PROGRESS.md +0 -422
- package/docs/MQTT_BRIDGE_COMMANDS.md +0 -894
- package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +0 -324
- package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +0 -576
- package/docs/MQTT_SCHEMA_COMPLIANCE.md +0 -340
- package/docs/MQTT_SCHEMA_PROPOSALS.md +0 -446
- package/docs/MQTT_SCHEMA_REVIEW.md +0 -690
- package/docs/OTA_COMMANDS_REFERENCE.md +0 -554
- package/docs/PHASE1_GUIDE.md +0 -349
- package/docs/PHASE2_GUIDE.md +0 -543
- package/docs/QUICK_REFERENCE_VERSIONING.md +0 -127
- package/docs/RELEASE_AGENT_SUMMARY.md +0 -386
- package/docs/SCHEMA_VALIDATION_CHECKLIST.md +0 -222
- package/docs/VERSION_MANAGEMENT.md +0 -213
- package/docs/archive/DOCUSAURUS_DEPLOYMENT.md +0 -166
- package/docs/archive/FEATURE_PROPOSALS.md +0 -337
- package/docs/archive/LIBRARY_JSON_FIX.md +0 -98
- package/docs/archive/LIBRARY_STRUCTURE_FIX.md +0 -215
- package/docs/archive/PHASE1_IMPLEMENTATION.md +0 -325
- package/docs/archive/PHASE2_IMPLEMENTATION.md +0 -567
- package/docs/archive/RELEASE_SUMMARY.md +0 -173
- package/docs/archive/SCONS_BUILD_FIX.md +0 -313
- package/docs/archive/TRIGGER_RELEASE.md +0 -280
- package/docs/archive/VECTOR_INCLUDE_FIX.md +0 -129
- package/docs/archive/ota-and-status-enhancements.md +0 -911
- package/docs/archive/ota-status-architecture-diagrams.md +0 -658
- package/docs/archive/ota-status-quick-reference.md +0 -284
- package/docs/design/.gitkeep +0 -1
- package/docs/design/STATION_CREDENTIALS_DESIGN.md +0 -182
- package/docs/development/ARDUINO_COMPLIANCE_SUMMARY.md +0 -71
- package/docs/development/CODE_REFACTORING_RECOMMENDATIONS.md +0 -1011
- package/docs/development/DOCKER_TESTING.md +0 -196
- package/docs/development/PLATFORMIO_USAGE.md +0 -180
- package/docs/development/TESTING_SUMMARY.md +0 -126
- package/docs/development/contributing.md +0 -301
- package/docs/development/documentation.md +0 -583
- package/docs/features/DIAGNOSTICS_API.md +0 -534
- package/docs/implementation/BRIDGE_ARCHITECTURE_IMPLEMENTATION.md +0 -340
- package/docs/implementation/BRIDGE_HEALTH_MONITORING_IMPLEMENTATION.md +0 -213
- package/docs/implementation/BRIDGE_STATUS_FEATURE.md +0 -635
- package/docs/implementation/DIAGNOSTICS_API_IMPLEMENTATION.md +0 -232
- package/docs/implementation/IMPLEMENTATION_COMPLETE.md +0 -228
- package/docs/implementation/IMPLEMENTATION_NTP_TIME_SYNC.md +0 -325
- package/docs/implementation/IMPLEMENTATION_SUMMARY.md +0 -316
- package/docs/implementation/MESSAGE_QUEUE_IMPLEMENTATION.md +0 -405
- package/docs/implementation/MULTI_BRIDGE_IMPLEMENTATION.md +0 -520
- package/docs/implementation/NTP_TIME_SYNC_FEATURE.md +0 -392
- package/docs/improvements/FUTURE_PROPOSALS.md +0 -1016
- package/docs/improvements/IMPLEMENTATION_HISTORY.md +0 -1091
- package/docs/improvements/OTA_STATUS_ENHANCEMENTS.md +0 -709
- package/docs/improvements/README.md +0 -212
- package/docs/internal/CUSTOM_AGENT_ANALYSIS.md +0 -391
- package/docs/internal/ISSUE_65_VERIFICATION.md +0 -947
- package/docs/internal/ISSUE_66_CLOSURE.md +0 -249
- package/docs/internal/ISSUE_66_STATUS.md +0 -316
- package/docs/internal/PR_SUMMARY.md +0 -315
- package/docs/internal/REVIEW_SUMMARY.md +0 -332
- package/docs/multi-bridge-setup.md +0 -1025
- package/docs/platformio-publishing.md +0 -255
- package/docs/platformio-setup-summary.md +0 -121
- package/docs/releases/ANNOUNCEMENT_v1.8.6.md +0 -63
- package/docs/releases/ANNOUNCEMENT_v1.8.7.md +0 -113
- package/docs/releases/BRIDGE_STATUS_SELF_REGISTRATION_FIX.md +0 -221
- package/docs/releases/FEATURE_HISTORY.md +0 -543
- package/docs/releases/GITHUB_RELEASE_v1.8.6.md +0 -71
- package/docs/releases/GITHUB_RELEASE_v1.8.7.md +0 -90
- package/docs/releases/PATCH_v1.7.2.md +0 -262
- package/docs/releases/PATCH_v1.7.3.md +0 -262
- package/docs/releases/PATCH_v1.7.4.md +0 -219
- package/docs/releases/PHASE1_SUMMARY.md +0 -246
- package/docs/releases/PHASE2_SUMMARY.md +0 -499
- package/docs/releases/PUBLISH_v1.8.0_INSTRUCTIONS.md +0 -163
- package/docs/releases/QUICK_START_RELEASES.md +0 -113
- package/docs/releases/RELEASE_CHECKLIST_1.8.10.md +0 -331
- package/docs/releases/RELEASE_CHECKLIST_1.8.9.md +0 -207
- package/docs/releases/RELEASE_CHECKLIST_v1.7.4.md +0 -253
- package/docs/releases/RELEASE_CHECKLIST_v1.7.5.md +0 -315
- package/docs/releases/RELEASE_CHECKLIST_v1.7.6.md +0 -389
- package/docs/releases/RELEASE_CHECKLIST_v1.8.0.md +0 -331
- package/docs/releases/RELEASE_CHECKLIST_v1.8.2.md +0 -309
- package/docs/releases/RELEASE_NOTES_1.7.0.md +0 -539
- package/docs/releases/RELEASE_NOTES_1.8.10.md +0 -239
- package/docs/releases/RELEASE_NOTES_1.8.9.md +0 -213
- package/docs/releases/RELEASE_NOTES_v1.8.0.md +0 -685
- package/docs/releases/RELEASE_NOTES_v1.8.1.md +0 -221
- package/docs/releases/RELEASE_NOTES_v1.8.2.md +0 -421
- package/docs/releases/RELEASE_NOTES_v1.8.3.md +0 -292
- package/docs/releases/RELEASE_NOTES_v1.8.4.md +0 -277
- package/docs/releases/RELEASE_NOTES_v1.8.6.md +0 -205
- package/docs/releases/RELEASE_NOTES_v1.8.7.md +0 -184
- package/docs/releases/RELEASE_PLAN_v1.7.6.md +0 -816
- package/docs/releases/RELEASE_SUMMARY_1.8.10.md +0 -193
- package/docs/releases/RELEASE_SUMMARY_v1.7.4.md +0 -276
- package/docs/releases/RELEASE_SUMMARY_v1.7.5.md +0 -322
- package/docs/releases/RELEASE_SUMMARY_v1.7.6.md +0 -436
- package/docs/releases/RELEASE_SUMMARY_v1.7.7.md +0 -391
- package/docs/releases/RELEASE_SUMMARY_v1.7.8.md +0 -523
- package/docs/releases/RELEASE_SUMMARY_v1.7.9.md +0 -542
- package/docs/troubleshooting/ARDUINO_IDE_VERSION_FIX_SUMMARY.md +0 -229
- package/docs/troubleshooting/ARDUINO_LIBRARY_NAME_FIX.md +0 -197
- package/docs/troubleshooting/CRASH_QUICK_REF.md +0 -93
- package/docs/troubleshooting/ESP32_C6_COMPATIBILITY.md +0 -157
- package/docs/troubleshooting/FREERTOS_ASSERTION_FAILURE.md +0 -288
- package/docs/troubleshooting/FREERTOS_FIX_IMPLEMENTATION.md +0 -267
- package/docs/troubleshooting/NPM_PUBLISHING_ISSUE_SUMMARY.md +0 -110
- package/docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md +0 -547
- package/docs/troubleshooting/QUICK_FIX_FREERTOS.md +0 -164
- package/docs/troubleshooting/SENSOR_NODE_CONNECTION_CRASH.md +0 -264
- package/docs/troubleshooting/station-reconnection-issues.md +0 -172
- package/docs/v1.7.7_MQTT_IMPROVEMENTS.md +0 -794
- package/docs/wiki/API-Reference.md +0 -246
- package/docs/wiki/Complete-Documentation.md +0 -123
- package/examples/alteriomImproved/alteriom_sensor_package.hpp +0 -224
- package/examples/alteriomImproved/improved_sensor_node.ino +0 -248
- package/examples/alteriomImproved/platformio.ini +0 -32
- package/examples/alteriomMetricsHealth/alteriom_sensor_package.hpp +0 -796
- package/examples/alteriomMetricsHealth/metrics_health_node.ino +0 -429
- package/examples/alteriomMetricsHealth/platformio.ini +0 -26
- package/examples/alteriomPhase1/alteriom_sensor_package.hpp +0 -224
- package/examples/alteriomPhase1/phase1_features.ino +0 -242
- package/examples/alteriomPhase1/platformio.ini +0 -26
- package/examples/alteriomPhase2/alteriom_sensor_package.hpp +0 -224
- package/examples/alteriomPhase2/phase2_features.ino +0 -186
- package/examples/alteriomPhase2/platformio.ini +0 -26
- package/examples/alteriomSensorNode/alteriom_sensor_node.ino +0 -186
- package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +0 -1227
- package/examples/alteriomSensorNode/platformio.ini +0 -26
- package/examples/bridge/alteriom_sensor_package.hpp +0 -1170
- package/examples/bridge/bridge_health_monitoring_example.ino +0 -188
- package/examples/bridge/enhanced_mqtt_bridge.hpp +0 -610
- package/examples/bridge/enhanced_mqtt_bridge_example.ino +0 -226
- package/examples/bridge/mesh_event_publisher.hpp +0 -253
- package/examples/bridge/mesh_topology_reporter.hpp +0 -303
- package/examples/bridge/mqtt_command_bridge.hpp +0 -459
- package/examples/bridge/mqtt_status_bridge.hpp +0 -519
- package/examples/bridgeAwareSensorNode/alteriom_sensor_package.hpp +0 -1227
- package/examples/bridgeAwareSensorNode/bridgeAwareSensorNode.ino +0 -342
- package/examples/bridgeAwareSensorNode/platformio.ini +0 -26
- package/examples/diagnosticsExample/diagnosticsExample.ino +0 -171
- package/examples/diagnosticsExample/platformio.ini +0 -26
- package/examples/echoNode/echoNode.ino +0 -33
- package/examples/echoNode/platformio.ini +0 -26
- package/examples/meshCommandNode/alteriom_sensor_package.hpp +0 -235
- package/examples/meshCommandNode/meshCommandNode.ino +0 -265
- package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +0 -235
- package/examples/mqttCommandBridge/mesh_event_publisher.hpp +0 -253
- package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +0 -303
- package/examples/mqttCommandBridge/mqttCommandBridge.ino +0 -254
- package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +0 -462
- package/examples/mqttCommandBridge/platformio.ini +0 -27
- package/examples/mqttStatusBridge/mqttStatusBridge.ino +0 -218
- package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +0 -522
- package/examples/mqttStatusBridge/platformio.ini +0 -27
- package/examples/mqttTopologyTest/README.md +0 -467
- package/examples/mqttTopologyTest/mqttTopologyTest.ino +0 -754
- package/examples/mqttTopologyTest/platformio.ini +0 -27
- package/examples/multi_bridge/README.md +0 -346
- package/examples/multi_bridge/primary_bridge.ino +0 -96
- package/examples/multi_bridge/regular_node.ino +0 -141
- package/examples/multi_bridge/secondary_bridge.ino +0 -111
- package/examples/ntpTimeSyncBridge/alteriom_sensor_package.hpp +0 -1383
- package/examples/ntpTimeSyncBridge/ntpTimeSyncBridge.ino +0 -86
- package/examples/ntpTimeSyncNode/alteriom_sensor_package.hpp +0 -1383
- package/examples/ntpTimeSyncNode/ntpTimeSyncNode.ino +0 -109
- package/examples/queued_alarms/README.md +0 -390
- package/examples/queued_alarms/queued_alarms.ino +0 -265
- package/examples/routing_demo/README.md +0 -172
- package/examples/routing_demo/routing_demo.ino +0 -102
- package/examples/rtcIntegration/README.md +0 -294
- package/examples/rtcIntegration/rtcIntegration.ino +0 -210
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
# Creating Missing GitHub Releases for v1.7.8 and v1.7.9
|
|
2
|
-
|
|
3
|
-
## Problem
|
|
4
|
-
|
|
5
|
-
Versions 1.7.8 and 1.7.9 have:
|
|
6
|
-
- ✅ CHANGELOG.md entries (complete release notes)
|
|
7
|
-
- ✅ Release summary documentation (docs/releases/RELEASE_SUMMARY_v1.7.x.md)
|
|
8
|
-
- ✅ Version numbers in library files (library.properties, library.json, package.json)
|
|
9
|
-
- ❌ **Missing GitHub Releases** (no tags, no release pages)
|
|
10
|
-
|
|
11
|
-
This means:
|
|
12
|
-
- Users cannot download these specific versions from GitHub
|
|
13
|
-
- Release automation may not have run properly
|
|
14
|
-
- NPM/GitHub Packages may not have been published
|
|
15
|
-
|
|
16
|
-
## Solution: Create GitHub Releases Retroactively
|
|
17
|
-
|
|
18
|
-
### Option 1: Automated Script (Recommended)
|
|
19
|
-
|
|
20
|
-
We've created a script to automate the process:
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
./scripts/create-missing-releases.sh
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
**What it does:**
|
|
27
|
-
1. Extracts release notes from CHANGELOG.md
|
|
28
|
-
2. Creates git tags (v1.7.8, v1.7.9)
|
|
29
|
-
3. Pushes tags to GitHub
|
|
30
|
-
4. Creates GitHub releases with proper release notes
|
|
31
|
-
5. Provides links to verify releases
|
|
32
|
-
|
|
33
|
-
**Requirements:**
|
|
34
|
-
- GitHub CLI (`gh`) installed: https://cli.github.com/
|
|
35
|
-
- Authenticated with GitHub: `gh auth login`
|
|
36
|
-
- Write access to the repository
|
|
37
|
-
|
|
38
|
-
**Running the script:**
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
# Navigate to repository root
|
|
42
|
-
cd /path/to/painlessMesh
|
|
43
|
-
|
|
44
|
-
# Run the script
|
|
45
|
-
./scripts/create-missing-releases.sh
|
|
46
|
-
|
|
47
|
-
# Follow the prompts
|
|
48
|
-
# - Confirm you want to proceed
|
|
49
|
-
# - If releases exist, choose whether to recreate them
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### Option 2: Manual Process
|
|
53
|
-
|
|
54
|
-
If you prefer to create releases manually or the script doesn't work:
|
|
55
|
-
|
|
56
|
-
#### Step 1: Extract Release Notes
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
# Extract v1.7.8 notes
|
|
60
|
-
awk '/^## \[1\.7\.8\]/ {flag=1; next} /^## \[/ {flag=0} flag' CHANGELOG.md > release_notes_1.7.8.txt
|
|
61
|
-
|
|
62
|
-
# Extract v1.7.9 notes
|
|
63
|
-
awk '/^## \[1\.7\.9\]/ {flag=1; next} /^## \[/ {flag=0} flag' CHANGELOG.md > release_notes_1.7.9.txt
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
#### Step 2: Create Tags and Releases via GitHub CLI
|
|
67
|
-
|
|
68
|
-
**For v1.7.8:**
|
|
69
|
-
```bash
|
|
70
|
-
# Create and push tag
|
|
71
|
-
git tag -a v1.7.8 -m "painlessMesh v1.7.8"
|
|
72
|
-
git push origin v1.7.8
|
|
73
|
-
|
|
74
|
-
# Create GitHub release
|
|
75
|
-
gh release create v1.7.8 \
|
|
76
|
-
--repo Alteriom/painlessMesh \
|
|
77
|
-
--title "painlessMesh v1.7.8" \
|
|
78
|
-
--notes-file release_notes_1.7.8.txt
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**For v1.7.9:**
|
|
82
|
-
```bash
|
|
83
|
-
# Create and push tag
|
|
84
|
-
git tag -a v1.7.9 -m "painlessMesh v1.7.9"
|
|
85
|
-
git push origin v1.7.9
|
|
86
|
-
|
|
87
|
-
# Create GitHub release
|
|
88
|
-
gh release create v1.7.9 \
|
|
89
|
-
--repo Alteriom/painlessMesh \
|
|
90
|
-
--title "painlessMesh v1.7.9" \
|
|
91
|
-
--notes-file release_notes_1.7.9.txt
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
#### Step 3: Create Releases via GitHub Web UI
|
|
95
|
-
|
|
96
|
-
If you don't have GitHub CLI:
|
|
97
|
-
|
|
98
|
-
1. **Go to**: https://github.com/Alteriom/painlessMesh/releases/new
|
|
99
|
-
2. **For v1.7.8**:
|
|
100
|
-
- Tag: `v1.7.8`
|
|
101
|
-
- Release title: `painlessMesh v1.7.8`
|
|
102
|
-
- Description: Copy content from `CHANGELOG.md` section `[1.7.8]`
|
|
103
|
-
- Click "Publish release"
|
|
104
|
-
3. **For v1.7.9**:
|
|
105
|
-
- Tag: `v1.7.9`
|
|
106
|
-
- Release title: `painlessMesh v1.7.9`
|
|
107
|
-
- Description: Copy content from `CHANGELOG.md` section `[1.7.9]`
|
|
108
|
-
- Click "Publish release"
|
|
109
|
-
|
|
110
|
-
## Verification
|
|
111
|
-
|
|
112
|
-
After creating the releases, verify:
|
|
113
|
-
|
|
114
|
-
### 1. Check GitHub Releases Page
|
|
115
|
-
```bash
|
|
116
|
-
# View releases via CLI
|
|
117
|
-
gh release list --repo Alteriom/painlessMesh
|
|
118
|
-
|
|
119
|
-
# Or visit in browser
|
|
120
|
-
# https://github.com/Alteriom/painlessMesh/releases
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
**Expected output:**
|
|
124
|
-
```
|
|
125
|
-
v1.7.9 painlessMesh v1.7.9 Latest 2025-11-08
|
|
126
|
-
v1.7.8 painlessMesh v1.7.8 2025-11-05
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### 2. Check Tags
|
|
130
|
-
```bash
|
|
131
|
-
git fetch --tags
|
|
132
|
-
git tag -l | grep -E "v1.7.[89]"
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
**Expected output:**
|
|
136
|
-
```
|
|
137
|
-
v1.7.8
|
|
138
|
-
v1.7.9
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### 3. Verify Release Notes
|
|
142
|
-
Visit each release page and confirm:
|
|
143
|
-
- ✅ Release notes match CHANGELOG.md content
|
|
144
|
-
- ✅ Date is correct (v1.7.8: Nov 5, 2025; v1.7.9: Nov 8, 2025)
|
|
145
|
-
- ✅ Release is marked as "Latest" for v1.7.9
|
|
146
|
-
|
|
147
|
-
## Publishing Packages
|
|
148
|
-
|
|
149
|
-
After creating the GitHub releases, you may want to publish packages to NPM and GitHub Packages.
|
|
150
|
-
|
|
151
|
-
### Check if Already Published
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
# Check NPM
|
|
155
|
-
npm view @alteriom/painlessmesh versions
|
|
156
|
-
|
|
157
|
-
# Check if 1.7.8 and 1.7.9 are listed
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### Publish if Missing
|
|
161
|
-
|
|
162
|
-
If versions are not published:
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
# Option 1: Trigger manual publish workflow
|
|
166
|
-
gh workflow run manual-publish.yml --repo Alteriom/painlessMesh
|
|
167
|
-
|
|
168
|
-
# Option 2: Manual NPM publish (requires NPM token)
|
|
169
|
-
npm publish --access public
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Why This Happened
|
|
173
|
-
|
|
174
|
-
The releases were likely missed because:
|
|
175
|
-
|
|
176
|
-
1. **Commits didn't trigger release workflow** - The release workflow triggers on:
|
|
177
|
-
- Commits to `main` branch
|
|
178
|
-
- Changes to version files OR commit message starting with `release:`
|
|
179
|
-
- If neither condition was met, no release was created
|
|
180
|
-
|
|
181
|
-
2. **Version was bumped without triggering release** - The version files were updated but:
|
|
182
|
-
- Commit message didn't start with `release:`
|
|
183
|
-
- Or changes were pushed to a different branch first
|
|
184
|
-
|
|
185
|
-
3. **Workflow may have failed** - Check GitHub Actions history for failed workflows
|
|
186
|
-
|
|
187
|
-
## Preventing Future Issues
|
|
188
|
-
|
|
189
|
-
### Ensure Releases Trigger Properly
|
|
190
|
-
|
|
191
|
-
The release workflow (`.github/workflows/release.yml`) triggers when:
|
|
192
|
-
|
|
193
|
-
1. **Automatic trigger** (recommended):
|
|
194
|
-
- Modify `library.properties`, `library.json`, or `package.json`
|
|
195
|
-
- Commit changes to `main` branch
|
|
196
|
-
- Workflow automatically detects version bump and creates release
|
|
197
|
-
|
|
198
|
-
2. **Manual trigger**:
|
|
199
|
-
- Commit message starts with `release:`
|
|
200
|
-
- Example: `git commit -m "release: v1.8.0 - New features"`
|
|
201
|
-
|
|
202
|
-
### Best Practices for Future Releases
|
|
203
|
-
|
|
204
|
-
1. **Use the bump-version script:**
|
|
205
|
-
```bash
|
|
206
|
-
./scripts/bump-version.sh patch # or minor, major
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
2. **Update CHANGELOG.md** with release notes
|
|
210
|
-
|
|
211
|
-
3. **Use release agent to validate:**
|
|
212
|
-
```bash
|
|
213
|
-
./scripts/release-agent.sh
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
4. **Commit with proper message:**
|
|
217
|
-
```bash
|
|
218
|
-
git add library.properties library.json package.json CHANGELOG.md
|
|
219
|
-
git commit -m "release: v1.8.0 - Brief description"
|
|
220
|
-
git push origin main
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
5. **Verify workflow runs:**
|
|
224
|
-
- Go to: https://github.com/Alteriom/painlessMesh/actions
|
|
225
|
-
- Watch the "Automated Release" workflow
|
|
226
|
-
- Confirm it completes successfully
|
|
227
|
-
|
|
228
|
-
6. **Check release was created:**
|
|
229
|
-
```bash
|
|
230
|
-
gh release list --repo Alteriom/painlessMesh
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
### Monitoring Release Success
|
|
234
|
-
|
|
235
|
-
After pushing a release commit, verify:
|
|
236
|
-
|
|
237
|
-
- ✅ GitHub Actions workflow runs successfully
|
|
238
|
-
- ✅ Git tag is created and pushed
|
|
239
|
-
- ✅ GitHub release is created with notes
|
|
240
|
-
- ✅ NPM package is published
|
|
241
|
-
- ✅ GitHub Packages is updated
|
|
242
|
-
- ✅ Wiki is synchronized (if enabled)
|
|
243
|
-
|
|
244
|
-
View the workflow run:
|
|
245
|
-
```bash
|
|
246
|
-
gh run list --workflow=release.yml --repo Alteriom/painlessMesh
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
## Troubleshooting
|
|
250
|
-
|
|
251
|
-
### "Tag already exists" Error
|
|
252
|
-
|
|
253
|
-
If tags exist but releases don't:
|
|
254
|
-
```bash
|
|
255
|
-
# Delete existing tags (careful!)
|
|
256
|
-
git tag -d v1.7.8
|
|
257
|
-
git push origin :refs/tags/v1.7.8
|
|
258
|
-
|
|
259
|
-
# Then recreate using the script
|
|
260
|
-
./scripts/create-missing-releases.sh
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
### "Permission denied" Error
|
|
264
|
-
|
|
265
|
-
You need write access to the repository:
|
|
266
|
-
- Verify you're authenticated: `gh auth status`
|
|
267
|
-
- Check your permissions on the repository
|
|
268
|
-
- Contact repository owner for access
|
|
269
|
-
|
|
270
|
-
### Script Fails
|
|
271
|
-
|
|
272
|
-
If the automated script fails:
|
|
273
|
-
1. Check error messages
|
|
274
|
-
2. Verify GitHub CLI is installed: `gh --version`
|
|
275
|
-
3. Verify you're authenticated: `gh auth login`
|
|
276
|
-
4. Try manual process (Option 2 above)
|
|
277
|
-
|
|
278
|
-
### Release Notes Are Empty
|
|
279
|
-
|
|
280
|
-
If release notes extraction fails:
|
|
281
|
-
1. Verify CHANGELOG.md format matches expected pattern
|
|
282
|
-
2. Check that version sections exist: `## [1.7.8]` and `## [1.7.9]`
|
|
283
|
-
3. Manually copy content from CHANGELOG.md
|
|
284
|
-
|
|
285
|
-
## Additional Resources
|
|
286
|
-
|
|
287
|
-
- **Release Guide**: See `RELEASE_GUIDE.md` for complete release process
|
|
288
|
-
- **GitHub Releases**: https://github.com/Alteriom/painlessMesh/releases
|
|
289
|
-
- **GitHub CLI Docs**: https://cli.github.com/manual/
|
|
290
|
-
- **Release Workflow**: `.github/workflows/release.yml`
|
|
291
|
-
|
|
292
|
-
## Summary
|
|
293
|
-
|
|
294
|
-
**To create missing releases:**
|
|
295
|
-
|
|
296
|
-
```bash
|
|
297
|
-
# Quick method (automated)
|
|
298
|
-
./scripts/create-missing-releases.sh
|
|
299
|
-
|
|
300
|
-
# Verify
|
|
301
|
-
gh release list --repo Alteriom/painlessMesh
|
|
302
|
-
|
|
303
|
-
# Publish packages if needed
|
|
304
|
-
gh workflow run manual-publish.yml --repo Alteriom/painlessMesh
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
**To prevent future issues:**
|
|
308
|
-
|
|
309
|
-
```bash
|
|
310
|
-
# Always use this workflow for releases:
|
|
311
|
-
./scripts/bump-version.sh patch
|
|
312
|
-
# Update CHANGELOG.md
|
|
313
|
-
./scripts/release-agent.sh # Validate
|
|
314
|
-
git add . && git commit -m "release: vX.Y.Z - Description"
|
|
315
|
-
git push origin main
|
|
316
|
-
# Watch GitHub Actions to confirm success
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
---
|
|
320
|
-
|
|
321
|
-
**Questions?** Open an issue with the `ci/cd` label.
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
# painlessMesh Documentation - Docusaurus Migration
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
This document outlines the migration from the current custom documentation approach to **Docusaurus 3** for better user experience and maintainability.
|
|
6
|
-
|
|
7
|
-
## Current Issues
|
|
8
|
-
|
|
9
|
-
### Broken Links Found
|
|
10
|
-
- `docs/tutorials/custom-packages.md` - Missing
|
|
11
|
-
- `docs/tutorials/sensor-networks.md` - Missing
|
|
12
|
-
- `docs/advanced/performance.md` - Missing
|
|
13
|
-
- `docs/architecture/routing.md` - Missing
|
|
14
|
-
|
|
15
|
-
### Problems with Current Approach
|
|
16
|
-
1. **Raw Markdown** - No processing, links break in GitHub Pages
|
|
17
|
-
2. **Manual HTML generation** - Basic and unmaintainable
|
|
18
|
-
3. **Doxygen isolation** - Separate from user documentation
|
|
19
|
-
4. **No link validation** - Broken links undetected
|
|
20
|
-
5. **No search functionality** - Poor discoverability
|
|
21
|
-
6. **Poor mobile experience** - Not responsive
|
|
22
|
-
|
|
23
|
-
## Proposed Solution: Docusaurus 3
|
|
24
|
-
|
|
25
|
-
### Why Docusaurus?
|
|
26
|
-
- ✅ **Modern React-based** - Fast, responsive, beautiful
|
|
27
|
-
- ✅ **Built-in search** - Algolia integration
|
|
28
|
-
- ✅ **API docs integration** - Seamless with Doxygen
|
|
29
|
-
- ✅ **Link validation** - Automatic broken link detection
|
|
30
|
-
- ✅ **Versioning support** - Multiple library versions
|
|
31
|
-
- ✅ **GitHub Pages deployment** - Automated CI/CD
|
|
32
|
-
- ✅ **SEO optimized** - Better search engine ranking
|
|
33
|
-
|
|
34
|
-
### Implementation Plan
|
|
35
|
-
|
|
36
|
-
#### Phase 1: Setup Docusaurus
|
|
37
|
-
```bash
|
|
38
|
-
# Initialize Docusaurus
|
|
39
|
-
npx create-docusaurus@latest website classic
|
|
40
|
-
|
|
41
|
-
# Configure for painlessMesh
|
|
42
|
-
cd website
|
|
43
|
-
npm install --save @docusaurus/plugin-client-redirects
|
|
44
|
-
npm install --save @docusaurus/theme-mermaid
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
#### Phase 2: Content Migration
|
|
48
|
-
1. **Migrate existing docs** to `docs/` folder
|
|
49
|
-
2. **Create missing pages** identified in review
|
|
50
|
-
3. **Fix all broken links**
|
|
51
|
-
4. **Integrate Doxygen** output
|
|
52
|
-
5. **Add interactive examples**
|
|
53
|
-
|
|
54
|
-
#### Phase 3: Enhanced Features
|
|
55
|
-
1. **Search integration** with Algolia
|
|
56
|
-
2. **API documentation** with auto-generated content
|
|
57
|
-
3. **Interactive code examples**
|
|
58
|
-
4. **Version management** for releases
|
|
59
|
-
5. **Analytics integration**
|
|
60
|
-
|
|
61
|
-
## File Structure (Proposed)
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
website/
|
|
65
|
-
├── docs/ # Main documentation
|
|
66
|
-
│ ├── getting-started/
|
|
67
|
-
│ │ ├── installation.md
|
|
68
|
-
│ │ ├── quickstart.md
|
|
69
|
-
│ │ └── first-mesh.md
|
|
70
|
-
│ ├── api/
|
|
71
|
-
│ │ ├── core-api.md
|
|
72
|
-
│ │ └── alteriom-packages.md
|
|
73
|
-
│ ├── tutorials/
|
|
74
|
-
│ │ ├── basic-examples.md
|
|
75
|
-
│ │ ├── custom-packages.md # NEW - Currently missing
|
|
76
|
-
│ │ └── sensor-networks.md # NEW - Currently missing
|
|
77
|
-
│ ├── architecture/
|
|
78
|
-
│ │ ├── mesh-architecture.md
|
|
79
|
-
│ │ ├── plugin-system.md
|
|
80
|
-
│ │ └── routing.md # NEW - Currently missing
|
|
81
|
-
│ ├── advanced/
|
|
82
|
-
│ │ └── performance.md # NEW - Currently missing
|
|
83
|
-
│ └── troubleshooting/
|
|
84
|
-
│ ├── faq.md
|
|
85
|
-
│ └── common-issues.md
|
|
86
|
-
├── src/
|
|
87
|
-
│ ├── components/ # React components
|
|
88
|
-
│ └── pages/ # Custom pages
|
|
89
|
-
├── static/ # Static assets
|
|
90
|
-
├── docusaurus.config.js # Main configuration
|
|
91
|
-
└── sidebars.js # Navigation structure
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Benefits
|
|
95
|
-
|
|
96
|
-
### For Users
|
|
97
|
-
- 🚀 **Faster navigation** - Single-page app performance
|
|
98
|
-
- 🔍 **Powerful search** - Find anything instantly
|
|
99
|
-
- 📱 **Mobile-friendly** - Responsive design
|
|
100
|
-
- 🎯 **Better organization** - Clear navigation
|
|
101
|
-
- 💡 **Interactive examples** - Live code demos
|
|
102
|
-
|
|
103
|
-
### For Maintainers
|
|
104
|
-
- 🔗 **Link validation** - Automatic broken link detection
|
|
105
|
-
- 📝 **Easy content management** - Simple Markdown workflow
|
|
106
|
-
- 🚀 **Automated deployment** - GitHub Actions integration
|
|
107
|
-
- 📊 **Analytics** - Usage insights
|
|
108
|
-
- 🔄 **Version control** - Git-based workflow
|
|
109
|
-
|
|
110
|
-
## Migration Timeline
|
|
111
|
-
|
|
112
|
-
### Week 1: Setup & Configuration
|
|
113
|
-
- [ ] Initialize Docusaurus project
|
|
114
|
-
- [ ] Configure for painlessMesh branding
|
|
115
|
-
- [ ] Set up build pipeline
|
|
116
|
-
|
|
117
|
-
### Week 2: Content Migration
|
|
118
|
-
- [ ] Migrate existing documentation
|
|
119
|
-
- [ ] Create missing pages
|
|
120
|
-
- [ ] Fix all broken links
|
|
121
|
-
- [ ] Integrate Doxygen output
|
|
122
|
-
|
|
123
|
-
### Week 3: Enhancement & Testing
|
|
124
|
-
- [ ] Add search functionality
|
|
125
|
-
- [ ] Create interactive examples
|
|
126
|
-
- [ ] Mobile testing
|
|
127
|
-
- [ ] Performance optimization
|
|
128
|
-
|
|
129
|
-
### Week 4: Deployment & Cleanup
|
|
130
|
-
- [ ] Deploy to GitHub Pages
|
|
131
|
-
- [ ] Update all repository links
|
|
132
|
-
- [ ] Archive old documentation
|
|
133
|
-
- [ ] Team training
|
|
134
|
-
|
|
135
|
-
## Implementation Commands
|
|
136
|
-
|
|
137
|
-
```bash
|
|
138
|
-
# 1. Create Docusaurus site
|
|
139
|
-
npx create-docusaurus@latest docs-website classic
|
|
140
|
-
cd docs-website
|
|
141
|
-
|
|
142
|
-
# 2. Install additional plugins
|
|
143
|
-
npm install --save @docusaurus/plugin-client-redirects
|
|
144
|
-
npm install --save @docusaurus/theme-mermaid
|
|
145
|
-
npm install --save @docusaurus/plugin-google-analytics
|
|
146
|
-
|
|
147
|
-
# 3. Configure build for GitHub Pages
|
|
148
|
-
npm run build
|
|
149
|
-
|
|
150
|
-
# 4. Deploy
|
|
151
|
-
npm run deploy
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
## Cost-Benefit Analysis
|
|
155
|
-
|
|
156
|
-
### Current Approach Costs
|
|
157
|
-
- ❌ **Developer time** - Manual HTML maintenance
|
|
158
|
-
- ❌ **User frustration** - Broken links, poor UX
|
|
159
|
-
- ❌ **SEO penalty** - Poor search ranking
|
|
160
|
-
- ❌ **Mobile users** - Bad mobile experience
|
|
161
|
-
|
|
162
|
-
### Docusaurus Benefits
|
|
163
|
-
- ✅ **Time savings** - Automated builds
|
|
164
|
-
- ✅ **Better UX** - Professional documentation
|
|
165
|
-
- ✅ **SEO boost** - Optimized for search engines
|
|
166
|
-
- ✅ **Future-proof** - Modern, maintained framework
|
|
167
|
-
|
|
168
|
-
## Recommendation
|
|
169
|
-
|
|
170
|
-
**Immediate Action**: Implement Docusaurus 3 migration
|
|
171
|
-
|
|
172
|
-
**Priority**: High - Current documentation has critical usability issues
|
|
173
|
-
|
|
174
|
-
**Timeline**: 2-4 weeks for full migration
|
|
175
|
-
|
|
176
|
-
**ROI**: High - Significantly better user experience with minimal ongoing maintenance
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
# FAQ: Version Numbers in Header Files
|
|
2
|
-
|
|
3
|
-
## ❓ Question: Does the version in `painlessMesh.h` mean the file hasn't been altered since that version?
|
|
4
|
-
|
|
5
|
-
### Short Answer
|
|
6
|
-
|
|
7
|
-
**No.** The version comment in header files indicates the library version when the documentation was last reviewed, not when the file was last modified.
|
|
8
|
-
|
|
9
|
-
### Detailed Explanation
|
|
10
|
-
|
|
11
|
-
When you see this in `painlessMesh.h`:
|
|
12
|
-
|
|
13
|
-
```cpp
|
|
14
|
-
/**
|
|
15
|
-
* @file painlessMesh.h
|
|
16
|
-
* @version 1.8.7
|
|
17
|
-
* @date 2025-11-12
|
|
18
|
-
*/
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
This means:
|
|
22
|
-
- ✅ The library version is 1.8.7
|
|
23
|
-
- ✅ The header documentation was reviewed as of version 1.8.7
|
|
24
|
-
- ❌ It does NOT mean the file hasn't changed since 1.8.7
|
|
25
|
-
|
|
26
|
-
### Why This Can Be Confusing
|
|
27
|
-
|
|
28
|
-
During active development, code files may be modified in multiple releases, but documentation comments might not be updated every time. This led to the situation where:
|
|
29
|
-
|
|
30
|
-
- `library.properties` showed version 1.8.6
|
|
31
|
-
- `library.json` showed version 1.8.6
|
|
32
|
-
- `package.json` showed version 1.8.6
|
|
33
|
-
- But `painlessMesh.h` header comment still showed 1.8.4
|
|
34
|
-
|
|
35
|
-
This created confusion about whether the file had been modified in versions 1.8.5 and 1.8.6.
|
|
36
|
-
|
|
37
|
-
### How to Find When a File Was Last Modified
|
|
38
|
-
|
|
39
|
-
Use Git to see the actual modification history:
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
# See all commits that modified a file
|
|
43
|
-
git log --oneline -- src/painlessMesh.h
|
|
44
|
-
|
|
45
|
-
# See when a file was last modified
|
|
46
|
-
git log -1 --format="%ai %an" -- src/painlessMesh.h
|
|
47
|
-
|
|
48
|
-
# See detailed changes to a file
|
|
49
|
-
git log -p -- src/painlessMesh.h
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### Where to Find the Official Library Version
|
|
53
|
-
|
|
54
|
-
The official library version is always defined in these three files (and they must match):
|
|
55
|
-
|
|
56
|
-
1. **`library.properties`** - Arduino Library Manager
|
|
57
|
-
```properties
|
|
58
|
-
version=1.8.7
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
2. **`library.json`** - PlatformIO Registry
|
|
62
|
-
```json
|
|
63
|
-
"version": "1.8.7"
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
3. **`package.json`** - NPM Package
|
|
67
|
-
```json
|
|
68
|
-
"version": "1.8.7"
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Best Practice Going Forward
|
|
72
|
-
|
|
73
|
-
As of version 1.8.7, we've established a best practice:
|
|
74
|
-
|
|
75
|
-
1. **Update header version comments during releases** to keep them synchronized with the library version
|
|
76
|
-
2. **Refer to VERSION_MANAGEMENT.md** for complete versioning guidelines
|
|
77
|
-
3. **Use Git for file history** to track actual modifications
|
|
78
|
-
4. **Check library.properties** for the official version number
|
|
79
|
-
|
|
80
|
-
### Complete Version Management Documentation
|
|
81
|
-
|
|
82
|
-
For comprehensive information about version management in this library, see:
|
|
83
|
-
|
|
84
|
-
**📖 [VERSION_MANAGEMENT.md](VERSION_MANAGEMENT.md)**
|
|
85
|
-
|
|
86
|
-
This document covers:
|
|
87
|
-
- Official version file locations
|
|
88
|
-
- Header comment meanings and purpose
|
|
89
|
-
- How to track file modifications
|
|
90
|
-
- Version update workflow
|
|
91
|
-
- Best practices for contributors
|
|
92
|
-
|
|
93
|
-
## Related Questions
|
|
94
|
-
|
|
95
|
-
### Q: Why were the header versions out of sync?
|
|
96
|
-
|
|
97
|
-
**A:** During rapid development cycles, header documentation comments were not updated every release. We've now established a process to keep them synchronized.
|
|
98
|
-
|
|
99
|
-
### Q: Will this happen again?
|
|
100
|
-
|
|
101
|
-
**A:** We've updated the release process (see RELEASE_GUIDE.md) to include header version updates as a standard step, and created comprehensive documentation to prevent future confusion.
|
|
102
|
-
|
|
103
|
-
### Q: What about other version numbers I see in the code?
|
|
104
|
-
|
|
105
|
-
**A:** If you see version numbers in implementation files (`.cpp`, `.hpp`), those should generally be removed. Version information should only be in:
|
|
106
|
-
- Official version files (library.properties, library.json, package.json)
|
|
107
|
-
- Header documentation comments (as library version references)
|
|
108
|
-
- CHANGELOG.md (for release history)
|
|
109
|
-
|
|
110
|
-
### Q: How do I know if my library is up to date?
|
|
111
|
-
|
|
112
|
-
**A:** Check your installed version against the latest release:
|
|
113
|
-
|
|
114
|
-
**Arduino IDE:**
|
|
115
|
-
```
|
|
116
|
-
Sketch → Include Library → Manage Libraries → Search "AlteriomPainlessMesh"
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
**PlatformIO:**
|
|
120
|
-
```bash
|
|
121
|
-
pio pkg show alteriom/AlteriomPainlessMesh
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
**NPM:**
|
|
125
|
-
```bash
|
|
126
|
-
npm view @alteriom/painlessmesh version
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
**GitHub:**
|
|
130
|
-
Visit https://github.com/Alteriom/painlessMesh/releases
|
|
131
|
-
|
|
132
|
-
## Summary
|
|
133
|
-
|
|
134
|
-
| File Location | Purpose | Meaning |
|
|
135
|
-
|---------------|---------|---------|
|
|
136
|
-
| `library.properties` | Official version | **Source of truth** for library version |
|
|
137
|
-
| `library.json` | Official version | **Source of truth** for library version |
|
|
138
|
-
| `package.json` | Official version | **Source of truth** for library version |
|
|
139
|
-
| Header comments (`@version`) | Documentation | Library version when docs were reviewed |
|
|
140
|
-
| Git history (`git log`) | File tracking | **Actual modification history** |
|
|
141
|
-
| `CHANGELOG.md` | Release history | Human-readable version changes |
|
|
142
|
-
|
|
143
|
-
**Remember:** Always check `library.properties` for the official library version, and use `git log` to see actual file modification history.
|
|
144
|
-
|
|
145
|
-
---
|
|
146
|
-
|
|
147
|
-
**See Also:**
|
|
148
|
-
- [VERSION_MANAGEMENT.md](VERSION_MANAGEMENT.md) - Complete version management guide
|
|
149
|
-
- [RELEASE_GUIDE.md](../RELEASE_GUIDE.md) - Release process documentation
|
|
150
|
-
- [CHANGELOG.md](../CHANGELOG.md) - Release history
|
|
151
|
-
|
|
152
|
-
**Last Updated:** November 12, 2025
|