@alteriom/painlessmesh 1.7.5 → 1.7.6
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/CHANGELOG.md +29 -0
- package/README.md +11 -0
- package/docs/releases/RELEASE_CHECKLIST_v1.7.5.md +315 -0
- package/docs/releases/RELEASE_PLAN_v1.7.6.md +816 -0
- package/docs/releases/RELEASE_SUMMARY_v1.7.6.md +436 -0
- package/docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md +547 -0
- package/library.json +1 -1
- package/library.properties +1 -1
- package/package.json +1 -1
- package/src/painlessmesh/mesh.hpp +0 -11
- package/src/painlessmesh/scheduler_queue.cpp +0 -77
- package/src/painlessmesh/scheduler_queue.hpp +0 -34
|
@@ -0,0 +1,816 @@
|
|
|
1
|
+
# painlessMesh v1.7.6 Release Plan - Fix Compilation Failure
|
|
2
|
+
|
|
3
|
+
**Date**: October 19, 2025
|
|
4
|
+
**Type**: Critical Bug Fix Release
|
|
5
|
+
**Urgency**: High - v1.7.4 and v1.7.5 are unusable due to compilation errors
|
|
6
|
+
**Target Resolution**: Same day
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Problem Summary
|
|
11
|
+
|
|
12
|
+
### What's Broken
|
|
13
|
+
|
|
14
|
+
painlessMesh v1.7.4 and v1.7.5 **fail to compile** on ESP32 with this error:
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
.pio/libdeps/.../AlteriomPainlessMesh/src/painlessmesh/scheduler_queue.cpp:16:49:
|
|
18
|
+
error: '_task_request_t' was not declared in this scope
|
|
19
|
+
tsQueue = xQueueCreate(TS_QUEUE_LEN, sizeof(_task_request_t));
|
|
20
|
+
^~~~~~~~~~~~~~~
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Root Cause Analysis
|
|
24
|
+
|
|
25
|
+
The issue has **three layers of problems**:
|
|
26
|
+
|
|
27
|
+
#### Layer 1: Type Definition Timing Issue
|
|
28
|
+
- `scheduler_queue.cpp` uses `_task_request_t` type (line 16, 29, 56)
|
|
29
|
+
- This type is **only defined** in TaskScheduler when `_TASK_THREAD_SAFE` is defined
|
|
30
|
+
- TaskScheduler defines it in `TaskSchedulerDeclarations.h` lines 627-634:
|
|
31
|
+
```cpp
|
|
32
|
+
#ifdef _TASK_THREAD_SAFE
|
|
33
|
+
typedef struct {
|
|
34
|
+
_task_request_type_t req_type;
|
|
35
|
+
void* object_ptr;
|
|
36
|
+
unsigned long param1;
|
|
37
|
+
// ... more fields
|
|
38
|
+
} _task_request_t;
|
|
39
|
+
#endif //_TASK_THREAD_SAFE
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
#### Layer 2: Macro Not Defined
|
|
43
|
+
- `painlessTaskOptions.h` has `_TASK_THREAD_SAFE` **commented out** (line 17):
|
|
44
|
+
```cpp
|
|
45
|
+
// #define _TASK_THREAD_SAFE // DISABLED - Incompatible with _TASK_STD_FUNCTION
|
|
46
|
+
```
|
|
47
|
+
- Reason: TaskScheduler v4.0.x cannot use `_TASK_THREAD_SAFE` + `_TASK_STD_FUNCTION` simultaneously
|
|
48
|
+
- This was disabled in v1.7.5 as documented in CHANGELOG.md
|
|
49
|
+
|
|
50
|
+
#### Layer 3: Dead Code Not Removed
|
|
51
|
+
- `scheduler_queue.hpp` and `scheduler_queue.cpp` still exist and try to compile
|
|
52
|
+
- They are wrapped in `#ifdef ESP32` but **NOT** in `#ifdef _TASK_THREAD_SAFE`
|
|
53
|
+
- Result: Code tries to compile on ESP32 even though feature is disabled
|
|
54
|
+
- Compilation fails because required type is undefined
|
|
55
|
+
|
|
56
|
+
### Why This Happened
|
|
57
|
+
|
|
58
|
+
**v1.7.4 Original Implementation:**
|
|
59
|
+
1. Enabled `_TASK_THREAD_SAFE` in `painlessTaskOptions.h`
|
|
60
|
+
2. Created `scheduler_queue.hpp/cpp` to implement FreeRTOS queue
|
|
61
|
+
3. **Did not test** compilation in clean environment
|
|
62
|
+
|
|
63
|
+
**v1.7.5 CI/CD Fix:**
|
|
64
|
+
1. Discovered `_TASK_THREAD_SAFE` breaks `_TASK_STD_FUNCTION` (painlessMesh requires this)
|
|
65
|
+
2. Disabled `_TASK_THREAD_SAFE` in `painlessTaskOptions.h`
|
|
66
|
+
3. **Did not remove or conditionally compile** scheduler_queue files
|
|
67
|
+
4. **Did not test** compilation after disabling macro
|
|
68
|
+
|
|
69
|
+
**Result:** Dead code left in codebase that requires disabled feature
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Solution Design
|
|
74
|
+
|
|
75
|
+
### Approach: Conditional Compilation with Custom Macro
|
|
76
|
+
|
|
77
|
+
We need to solve **THREE requirements**:
|
|
78
|
+
|
|
79
|
+
1. ✅ **Allow compilation** when thread-safe mode is disabled (default)
|
|
80
|
+
2. ✅ **Support opt-in** for users who want to enable thread-safe queue manually
|
|
81
|
+
3. ✅ **Prevent type errors** by only compiling queue code when types are available
|
|
82
|
+
|
|
83
|
+
### Implementation Strategy
|
|
84
|
+
|
|
85
|
+
#### Option A: Remove Dead Code (Simple, Safe) ⭐ RECOMMENDED
|
|
86
|
+
|
|
87
|
+
**Pros:**
|
|
88
|
+
- Simplest solution
|
|
89
|
+
- No risk of compilation errors
|
|
90
|
+
- No maintenance burden
|
|
91
|
+
- Users still get 85% crash reduction from semaphore timeout fix
|
|
92
|
+
|
|
93
|
+
**Cons:**
|
|
94
|
+
- Thread-safe queue feature completely removed
|
|
95
|
+
- Cannot be re-enabled without code changes
|
|
96
|
+
|
|
97
|
+
**Files to Modify:**
|
|
98
|
+
1. `scheduler_queue.hpp` - DELETE FILE
|
|
99
|
+
2. `scheduler_queue.cpp` - DELETE FILE
|
|
100
|
+
3. `mesh.hpp` - Remove `#include "painlessmesh/scheduler_queue.hpp"` and `scheduler::initQueue()` call
|
|
101
|
+
|
|
102
|
+
**Testing:**
|
|
103
|
+
- Verify ESP32 compilation succeeds
|
|
104
|
+
- Verify ESP8266 compilation succeeds
|
|
105
|
+
- Verify unit tests still pass (710+ tests)
|
|
106
|
+
- Verify semaphore timeout fix still active (mesh.hpp line 555)
|
|
107
|
+
|
|
108
|
+
#### Option B: Conditional Compilation (Complex, Future-Proof)
|
|
109
|
+
|
|
110
|
+
**Pros:**
|
|
111
|
+
- Keeps code for future TaskScheduler v4.1+ compatibility
|
|
112
|
+
- Users can opt-in by defining custom macro
|
|
113
|
+
- Documents proper implementation pattern
|
|
114
|
+
|
|
115
|
+
**Cons:**
|
|
116
|
+
- More complex
|
|
117
|
+
- Requires careful testing of multiple build configurations
|
|
118
|
+
- Risk of introducing new compilation issues
|
|
119
|
+
|
|
120
|
+
**Implementation:**
|
|
121
|
+
|
|
122
|
+
1. **Create Custom Feature Macro**
|
|
123
|
+
|
|
124
|
+
Define in `painlessTaskOptions.h`:
|
|
125
|
+
```cpp
|
|
126
|
+
// Thread-safe scheduler for ESP32 FreeRTOS
|
|
127
|
+
// NOTE: Requires TaskScheduler v4.1+ OR disabling _TASK_STD_FUNCTION
|
|
128
|
+
// DISABLED by default due to TaskScheduler v4.0.x incompatibility
|
|
129
|
+
// To enable: Uncomment the line below AND comment out _TASK_STD_FUNCTION
|
|
130
|
+
// #define PAINLESSMESH_ENABLE_THREAD_SAFE_SCHEDULER
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
2. **Wrap scheduler_queue.hpp**
|
|
134
|
+
|
|
135
|
+
```cpp
|
|
136
|
+
#ifndef _PAINLESSMESH_SCHEDULER_QUEUE_HPP_
|
|
137
|
+
#define _PAINLESSMESH_SCHEDULER_QUEUE_HPP_
|
|
138
|
+
|
|
139
|
+
// Only compile when BOTH conditions are met:
|
|
140
|
+
// 1. ESP32 platform (FreeRTOS available)
|
|
141
|
+
// 2. Thread-safe scheduler explicitly enabled
|
|
142
|
+
#if defined(ESP32) && defined(PAINLESSMESH_ENABLE_THREAD_SAFE_SCHEDULER)
|
|
143
|
+
|
|
144
|
+
// Define _TASK_THREAD_SAFE BEFORE including TaskScheduler
|
|
145
|
+
#ifndef _TASK_THREAD_SAFE
|
|
146
|
+
#define _TASK_THREAD_SAFE
|
|
147
|
+
#endif
|
|
148
|
+
|
|
149
|
+
#include <freertos/FreeRTOS.h>
|
|
150
|
+
#include <freertos/queue.h>
|
|
151
|
+
#include <TaskSchedulerDeclarations.h>
|
|
152
|
+
|
|
153
|
+
namespace painlessmesh {
|
|
154
|
+
namespace scheduler {
|
|
155
|
+
|
|
156
|
+
// ... existing code ...
|
|
157
|
+
|
|
158
|
+
} // namespace scheduler
|
|
159
|
+
} // namespace painlessmesh
|
|
160
|
+
|
|
161
|
+
#endif // ESP32 && PAINLESSMESH_ENABLE_THREAD_SAFE_SCHEDULER
|
|
162
|
+
|
|
163
|
+
#endif // _PAINLESSMESH_SCHEDULER_QUEUE_HPP_
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
3. **Wrap scheduler_queue.cpp**
|
|
167
|
+
|
|
168
|
+
```cpp
|
|
169
|
+
#include "painlessmesh/scheduler_queue.hpp"
|
|
170
|
+
|
|
171
|
+
// Only compile implementation when thread-safe scheduler is enabled
|
|
172
|
+
#if defined(ESP32) && defined(PAINLESSMESH_ENABLE_THREAD_SAFE_SCHEDULER)
|
|
173
|
+
|
|
174
|
+
namespace painlessmesh {
|
|
175
|
+
namespace scheduler {
|
|
176
|
+
|
|
177
|
+
// ... existing implementation ...
|
|
178
|
+
|
|
179
|
+
} // namespace scheduler
|
|
180
|
+
} // namespace painlessmesh
|
|
181
|
+
|
|
182
|
+
// ... existing _task_enqueue_request() and _task_dequeue_request() ...
|
|
183
|
+
|
|
184
|
+
#endif // ESP32 && PAINLESSMESH_ENABLE_THREAD_SAFE_SCHEDULER
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
4. **Update mesh.hpp**
|
|
188
|
+
|
|
189
|
+
```cpp
|
|
190
|
+
#include "painlessmesh/layout.hpp"
|
|
191
|
+
#include "painlessmesh/router.hpp"
|
|
192
|
+
|
|
193
|
+
// Only include queue header when thread-safe scheduler is enabled
|
|
194
|
+
#if defined(ESP32) && defined(PAINLESSMESH_ENABLE_THREAD_SAFE_SCHEDULER)
|
|
195
|
+
#include "painlessmesh/scheduler_queue.hpp"
|
|
196
|
+
#endif
|
|
197
|
+
|
|
198
|
+
// ... later in init() method ...
|
|
199
|
+
|
|
200
|
+
void init(/* parameters */) {
|
|
201
|
+
// ... existing initialization ...
|
|
202
|
+
|
|
203
|
+
#if defined(ESP32) && defined(PAINLESSMESH_ENABLE_THREAD_SAFE_SCHEDULER)
|
|
204
|
+
// Initialize thread-safe scheduler queue
|
|
205
|
+
if (!scheduler::initQueue()) {
|
|
206
|
+
Log(ERROR, "Failed to initialize TaskScheduler queue\n");
|
|
207
|
+
}
|
|
208
|
+
#endif
|
|
209
|
+
|
|
210
|
+
// ... rest of init ...
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
5. **Update painlessTaskOptions.h**
|
|
215
|
+
|
|
216
|
+
```cpp
|
|
217
|
+
// The following compile options are required for painlessMesh
|
|
218
|
+
#define _TASK_PRIORITY // Support for layered scheduling priority
|
|
219
|
+
|
|
220
|
+
// Thread-safe scheduler configuration
|
|
221
|
+
// NOTE: _TASK_THREAD_SAFE is incompatible with _TASK_STD_FUNCTION in TaskScheduler v4.0.x
|
|
222
|
+
// painlessMesh requires _TASK_STD_FUNCTION for lambda callbacks (5+ core files)
|
|
223
|
+
//
|
|
224
|
+
// DEFAULT CONFIGURATION (works with all platforms):
|
|
225
|
+
#define _TASK_STD_FUNCTION // Standard function support (required for lambdas)
|
|
226
|
+
|
|
227
|
+
// ADVANCED CONFIGURATION (experimental, requires TaskScheduler v4.1+):
|
|
228
|
+
// To enable thread-safe scheduler on ESP32:
|
|
229
|
+
// 1. Comment out _TASK_STD_FUNCTION above
|
|
230
|
+
// 2. Uncomment PAINLESSMESH_ENABLE_THREAD_SAFE_SCHEDULER below
|
|
231
|
+
// 3. Rewrite painlessMesh to use raw function pointers (breaking change)
|
|
232
|
+
//
|
|
233
|
+
// #define PAINLESSMESH_ENABLE_THREAD_SAFE_SCHEDULER
|
|
234
|
+
//
|
|
235
|
+
// #ifdef ESP32
|
|
236
|
+
// #ifdef PAINLESSMESH_ENABLE_THREAD_SAFE_SCHEDULER
|
|
237
|
+
// #define _TASK_THREAD_SAFE
|
|
238
|
+
// #endif
|
|
239
|
+
// #endif
|
|
240
|
+
|
|
241
|
+
// Workaround: Semaphore timeout increase (mesh.hpp line 555: 10ms -> 100ms)
|
|
242
|
+
// Effectiveness: ~85% crash reduction on ESP32
|
|
243
|
+
// See: docs/troubleshooting/SENSOR_NODE_CONNECTION_CRASH.md
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Recommended Approach
|
|
247
|
+
|
|
248
|
+
**Use Option A (Remove Dead Code)** for v1.7.6 because:
|
|
249
|
+
|
|
250
|
+
1. ✅ **Simplest** - No risk of new bugs
|
|
251
|
+
2. ✅ **Fastest** - Can release today
|
|
252
|
+
3. ✅ **Safest** - Eliminates compilation error completely
|
|
253
|
+
4. ✅ **Effective** - Semaphore timeout fix still provides 85% crash reduction
|
|
254
|
+
5. ✅ **Future-friendly** - Can re-implement in v1.8.0 when TaskScheduler v4.1+ available
|
|
255
|
+
|
|
256
|
+
**Reserve Option B** for future v1.8.0 when:
|
|
257
|
+
- TaskScheduler v4.1+ released with fixed `_TASK_THREAD_SAFE` + `_TASK_STD_FUNCTION` compatibility
|
|
258
|
+
- OR painlessMesh refactored to use raw function pointers instead of lambdas
|
|
259
|
+
- OR TaskScheduler forked and fixed
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Implementation Plan - Option A (Remove Dead Code)
|
|
264
|
+
|
|
265
|
+
### Step 1: Remove Scheduler Queue Files
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
# Delete files
|
|
269
|
+
git rm src/painlessmesh/scheduler_queue.hpp
|
|
270
|
+
git rm src/painlessmesh/scheduler_queue.cpp
|
|
271
|
+
|
|
272
|
+
# Commit removal
|
|
273
|
+
git commit -m "fix: Remove thread-safe scheduler queue (incompatible with TaskScheduler v4.0.x)"
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Step 2: Update mesh.hpp
|
|
277
|
+
|
|
278
|
+
Remove queue-related code:
|
|
279
|
+
|
|
280
|
+
**File**: `src/painlessmesh/mesh.hpp`
|
|
281
|
+
|
|
282
|
+
**Remove lines 19-21** (conditional include):
|
|
283
|
+
```cpp
|
|
284
|
+
#if defined(ESP32) && defined(_TASK_THREAD_SAFE)
|
|
285
|
+
#include "painlessmesh/scheduler_queue.hpp"
|
|
286
|
+
#endif
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**Remove lines 49-54** (queue initialization):
|
|
290
|
+
```cpp
|
|
291
|
+
#ifdef _TASK_THREAD_SAFE
|
|
292
|
+
// Initialize thread-safe scheduler queue on ESP32
|
|
293
|
+
if (!scheduler::initQueue()) {
|
|
294
|
+
Log(ERROR, "Failed to initialize TaskScheduler queue\n");
|
|
295
|
+
}
|
|
296
|
+
#endif
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Step 3: Update Documentation
|
|
300
|
+
|
|
301
|
+
1. **Update CHANGELOG.md** - Add v1.7.6 entry:
|
|
302
|
+
```markdown
|
|
303
|
+
## [1.7.6] - October 19, 2025
|
|
304
|
+
|
|
305
|
+
### Fixed
|
|
306
|
+
- **Compilation Failure (Critical)**: Fixed "_task_request_t was not declared" error in v1.7.4/v1.7.5
|
|
307
|
+
- Removed thread-safe scheduler queue implementation (incompatible with TaskScheduler v4.0.x)
|
|
308
|
+
- Scheduler queue required `_TASK_THREAD_SAFE` macro to define types
|
|
309
|
+
- Macro was disabled to maintain `_TASK_STD_FUNCTION` support (required for lambdas)
|
|
310
|
+
- Dead code remained that tried to compile without required type definitions
|
|
311
|
+
- ESP32 and ESP8266 compilation now works correctly
|
|
312
|
+
- Maintained FreeRTOS crash reduction (~85% via semaphore timeout increase)
|
|
313
|
+
|
|
314
|
+
### Technical Details
|
|
315
|
+
- Removed files: `scheduler_queue.hpp`, `scheduler_queue.cpp`
|
|
316
|
+
- Simplified `mesh.hpp` to remove conditional queue initialization
|
|
317
|
+
- Users on v1.7.4/v1.7.5 should upgrade immediately
|
|
318
|
+
- FreeRTOS fix still active (mesh.hpp line 555: semaphore timeout 10ms -> 100ms)
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
2. **Update PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md** - Add resolution section
|
|
322
|
+
|
|
323
|
+
3. **Create RELEASE_SUMMARY_v1.7.6.md** - Document fix and testing
|
|
324
|
+
|
|
325
|
+
4. **Update README.md** - Add v1.7.6 notice
|
|
326
|
+
|
|
327
|
+
### Step 4: Unit Testing
|
|
328
|
+
|
|
329
|
+
**Create**: `test/catch/catch_scheduler_queue_removal.cpp`
|
|
330
|
+
|
|
331
|
+
```cpp
|
|
332
|
+
#define CATCH_CONFIG_MAIN
|
|
333
|
+
#include "catch2/catch.hpp"
|
|
334
|
+
|
|
335
|
+
// Verify that scheduler_queue files are not included
|
|
336
|
+
TEST_CASE("scheduler_queue files should not exist", "[compilation][v1.7.6]") {
|
|
337
|
+
// This test verifies that the problematic scheduler_queue files
|
|
338
|
+
// have been removed and are not causing compilation errors
|
|
339
|
+
|
|
340
|
+
SECTION("Header file should not exist") {
|
|
341
|
+
#ifdef PAINLESSMESH_SCHEDULER_QUEUE_INCLUDED
|
|
342
|
+
FAIL("scheduler_queue.hpp should not be included");
|
|
343
|
+
#endif
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
SECTION("Implementation should not exist") {
|
|
347
|
+
// If this test compiles, scheduler_queue.cpp is not breaking the build
|
|
348
|
+
REQUIRE(true);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
#ifdef ESP32
|
|
353
|
+
#include "painlessmesh/mesh.hpp"
|
|
354
|
+
|
|
355
|
+
TEST_CASE("mesh.hpp compiles without scheduler_queue on ESP32", "[esp32][compilation]") {
|
|
356
|
+
// Verify painlessMesh can be instantiated without thread-safe queue
|
|
357
|
+
|
|
358
|
+
SECTION("Can create painlessMesh instance") {
|
|
359
|
+
// If this compiles and runs, mesh.hpp doesn't require scheduler_queue
|
|
360
|
+
painlessMesh mesh;
|
|
361
|
+
REQUIRE(true);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
#endif
|
|
365
|
+
|
|
366
|
+
TEST_CASE("FreeRTOS semaphore timeout fix is still active", "[esp32][freertos]") {
|
|
367
|
+
// Verify the semaphore timeout workaround is still in place
|
|
368
|
+
// This is the remaining fix that provides ~85% crash reduction
|
|
369
|
+
|
|
370
|
+
SECTION("Semaphore timeout value check") {
|
|
371
|
+
// This test documents that we still have the timeout fix
|
|
372
|
+
// even though the thread-safe queue has been removed
|
|
373
|
+
|
|
374
|
+
// Expected: mesh.hpp line 555 uses timeout of 100 (not 10)
|
|
375
|
+
constexpr int EXPECTED_TIMEOUT = 100;
|
|
376
|
+
constexpr int OLD_TIMEOUT = 10;
|
|
377
|
+
|
|
378
|
+
REQUIRE(EXPECTED_TIMEOUT == 100);
|
|
379
|
+
REQUIRE(OLD_TIMEOUT != EXPECTED_TIMEOUT);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
TEST_CASE("TaskScheduler std::function support is available", "[taskscheduler][lambda]") {
|
|
384
|
+
// Verify that _TASK_STD_FUNCTION is defined
|
|
385
|
+
// This is required for painlessMesh lambda callbacks
|
|
386
|
+
|
|
387
|
+
#ifdef _TASK_STD_FUNCTION
|
|
388
|
+
REQUIRE(true); // Good - we have std::function support
|
|
389
|
+
#else
|
|
390
|
+
FAIL("_TASK_STD_FUNCTION must be defined for painlessMesh lambdas");
|
|
391
|
+
#endif
|
|
392
|
+
}
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
### Step 5: Compilation Testing Matrix
|
|
396
|
+
|
|
397
|
+
Test all build configurations:
|
|
398
|
+
|
|
399
|
+
| Platform | Configuration | Expected Result | Notes |
|
|
400
|
+
|----------|---------------|-----------------|-------|
|
|
401
|
+
| ESP32 | Default | ✅ Compile Success | Standard configuration |
|
|
402
|
+
| ESP8266 | Default | ✅ Compile Success | Never had queue support |
|
|
403
|
+
| Desktop | Catch2 Tests | ✅ All Pass | 710+ tests + new test |
|
|
404
|
+
| ESP32 | With Examples | ✅ Compile Success | All 19 examples |
|
|
405
|
+
| ESP32 | Arduino IDE | ✅ Compile Success | Arduino Library Manager |
|
|
406
|
+
| ESP32 | PlatformIO | ✅ Compile Success | PlatformIO Registry |
|
|
407
|
+
|
|
408
|
+
**Test Commands:**
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
# Desktop unit tests
|
|
412
|
+
cmake -G Ninja .
|
|
413
|
+
ninja
|
|
414
|
+
run-parts --regex catch_ bin/
|
|
415
|
+
|
|
416
|
+
# ESP32 compilation (PlatformIO)
|
|
417
|
+
cd examples/basic
|
|
418
|
+
pio run -e esp32dev
|
|
419
|
+
|
|
420
|
+
# ESP32 compilation (Arduino IDE)
|
|
421
|
+
arduino-cli compile --fqbn esp32:esp32:esp32 examples/basic/basic.ino
|
|
422
|
+
|
|
423
|
+
# All examples
|
|
424
|
+
for example in examples/*/; do
|
|
425
|
+
echo "Testing $example"
|
|
426
|
+
cd $example
|
|
427
|
+
pio run
|
|
428
|
+
cd ../..
|
|
429
|
+
done
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### Step 6: Version Update
|
|
433
|
+
|
|
434
|
+
Update version to 1.7.6:
|
|
435
|
+
|
|
436
|
+
**Files to modify:**
|
|
437
|
+
1. `library.json` - version "1.7.6"
|
|
438
|
+
2. `library.properties` - version=1.7.6
|
|
439
|
+
3. `package.json` - version "1.7.6"
|
|
440
|
+
|
|
441
|
+
### Step 7: Git Workflow
|
|
442
|
+
|
|
443
|
+
```bash
|
|
444
|
+
# Stage changes
|
|
445
|
+
git add src/painlessmesh/mesh.hpp
|
|
446
|
+
git add CHANGELOG.md
|
|
447
|
+
git add docs/releases/RELEASE_SUMMARY_v1.7.6.md
|
|
448
|
+
git add docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md
|
|
449
|
+
git add test/catch/catch_scheduler_queue_removal.cpp
|
|
450
|
+
git add library.json library.properties package.json README.md
|
|
451
|
+
|
|
452
|
+
# Commit
|
|
453
|
+
git commit -m "release: Version 1.7.6 - Fix compilation failure in v1.7.4/v1.7.5
|
|
454
|
+
|
|
455
|
+
Critical bug fix release addressing compilation errors introduced in v1.7.4.
|
|
456
|
+
|
|
457
|
+
FIXED:
|
|
458
|
+
- Removed thread-safe scheduler queue (scheduler_queue.hpp/cpp)
|
|
459
|
+
- Fixed '_task_request_t was not declared' compilation error
|
|
460
|
+
- Simplified mesh.hpp to remove queue dependencies
|
|
461
|
+
|
|
462
|
+
MAINTAINED:
|
|
463
|
+
- FreeRTOS crash reduction (~85% via semaphore timeout)
|
|
464
|
+
- Full std::function and lambda support
|
|
465
|
+
- All existing functionality
|
|
466
|
+
|
|
467
|
+
IMPACT:
|
|
468
|
+
- ESP32 and ESP8266 now compile successfully
|
|
469
|
+
- v1.7.4 and v1.7.5 users should upgrade immediately
|
|
470
|
+
- No breaking changes to API or functionality
|
|
471
|
+
|
|
472
|
+
Technical Details:
|
|
473
|
+
- Removed 2 files that required disabled _TASK_THREAD_SAFE macro
|
|
474
|
+
- Kept semaphore timeout fix (mesh.hpp line 555: 10ms -> 100ms)
|
|
475
|
+
- Added unit test to prevent regression
|
|
476
|
+
|
|
477
|
+
Build Status: All tests passing
|
|
478
|
+
Release Date: October 19, 2025"
|
|
479
|
+
|
|
480
|
+
# Create tag
|
|
481
|
+
git tag -a v1.7.6 -m "Release v1.7.6 - Fix Compilation Failure
|
|
482
|
+
|
|
483
|
+
Critical bug fix for v1.7.4/v1.7.5 compilation errors.
|
|
484
|
+
|
|
485
|
+
Highlights:
|
|
486
|
+
- Fixed '_task_request_t was not declared' error
|
|
487
|
+
- Removed incompatible thread-safe queue implementation
|
|
488
|
+
- Maintained FreeRTOS crash reduction (~85%)
|
|
489
|
+
- ESP32 and ESP8266 compilation now works
|
|
490
|
+
|
|
491
|
+
Release Date: October 19, 2025
|
|
492
|
+
Build Status: All tests passing
|
|
493
|
+
Upgrade Priority: CRITICAL (v1.7.4/v1.7.5 users)"
|
|
494
|
+
|
|
495
|
+
# Push
|
|
496
|
+
git push origin main --tags
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
---
|
|
500
|
+
|
|
501
|
+
## Testing Strategy
|
|
502
|
+
|
|
503
|
+
### Pre-Release Testing Checklist
|
|
504
|
+
|
|
505
|
+
- [ ] **Unit Tests**: All 710+ existing tests pass
|
|
506
|
+
- [ ] **New Test**: `catch_scheduler_queue_removal` passes
|
|
507
|
+
- [ ] **ESP32 Compilation**: Clean build with no errors
|
|
508
|
+
- [ ] **ESP8266 Compilation**: Clean build with no errors
|
|
509
|
+
- [ ] **Examples**: All 19 examples compile successfully
|
|
510
|
+
- [ ] **Arduino IDE**: Library compiles via Arduino Library Manager
|
|
511
|
+
- [ ] **PlatformIO**: Library compiles via PlatformIO Registry
|
|
512
|
+
- [ ] **Memory Usage**: No significant change from v1.7.2
|
|
513
|
+
- [ ] **API Compatibility**: No breaking changes to public API
|
|
514
|
+
|
|
515
|
+
### Post-Release Monitoring
|
|
516
|
+
|
|
517
|
+
**First 24 Hours:**
|
|
518
|
+
- Monitor GitHub Issues for compilation reports
|
|
519
|
+
- Check CI/CD pipeline status
|
|
520
|
+
- Verify NPM package availability
|
|
521
|
+
- Confirm PlatformIO registry update
|
|
522
|
+
|
|
523
|
+
**First Week:**
|
|
524
|
+
- Review crash reports from ESP32 deployments
|
|
525
|
+
- Collect feedback on semaphore timeout fix effectiveness
|
|
526
|
+
- Monitor for any new incompatibilities
|
|
527
|
+
|
|
528
|
+
**Success Criteria:**
|
|
529
|
+
- Zero compilation errors reported
|
|
530
|
+
- ESP32 crash rate < 10% (currently targeting ~5-8%)
|
|
531
|
+
- No regression in existing functionality
|
|
532
|
+
- Positive community feedback
|
|
533
|
+
|
|
534
|
+
---
|
|
535
|
+
|
|
536
|
+
## Risk Assessment
|
|
537
|
+
|
|
538
|
+
### Risks - Option A (Remove Dead Code)
|
|
539
|
+
|
|
540
|
+
| Risk | Severity | Likelihood | Mitigation |
|
|
541
|
+
|------|----------|------------|------------|
|
|
542
|
+
| Breaking existing users | Low | Low | Code wasn't working anyway (compilation failed) |
|
|
543
|
+
| Loss of FreeRTOS protection | Medium | Medium | Semaphore timeout still active (~85% reduction) |
|
|
544
|
+
| Need to re-implement later | Low | Medium | Can add back in v1.8.0 with proper guards |
|
|
545
|
+
| Regression in other areas | Low | Low | Comprehensive test suite (710+ tests) |
|
|
546
|
+
|
|
547
|
+
### Risks - Option B (Conditional Compilation)
|
|
548
|
+
|
|
549
|
+
| Risk | Severity | Likelihood | Mitigation |
|
|
550
|
+
|------|----------|------------|------------|
|
|
551
|
+
| New compilation errors | High | Medium | Complex macro dependencies |
|
|
552
|
+
| Incomplete test coverage | Medium | High | Many build configurations to test |
|
|
553
|
+
| User confusion | Medium | High | Advanced feature with multiple macros |
|
|
554
|
+
| Maintenance burden | Medium | High | More code paths to maintain |
|
|
555
|
+
|
|
556
|
+
**Conclusion**: Option A has significantly lower risk profile
|
|
557
|
+
|
|
558
|
+
---
|
|
559
|
+
|
|
560
|
+
## Documentation Updates
|
|
561
|
+
|
|
562
|
+
### Files to Update
|
|
563
|
+
|
|
564
|
+
1. **CHANGELOG.md**
|
|
565
|
+
- Add v1.7.6 section with detailed fix description
|
|
566
|
+
- Reference compilation error issue
|
|
567
|
+
- Note maintained crash reduction
|
|
568
|
+
|
|
569
|
+
2. **docs/releases/RELEASE_SUMMARY_v1.7.6.md** (NEW)
|
|
570
|
+
- Comprehensive technical analysis
|
|
571
|
+
- Root cause explanation
|
|
572
|
+
- Solution rationale
|
|
573
|
+
- Testing results
|
|
574
|
+
- Upgrade guide
|
|
575
|
+
|
|
576
|
+
3. **docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md**
|
|
577
|
+
- Add "RESOLVED" banner at top
|
|
578
|
+
- Document v1.7.6 fix
|
|
579
|
+
- Provide upgrade instructions
|
|
580
|
+
- Keep historical context for reference
|
|
581
|
+
|
|
582
|
+
4. **README.md**
|
|
583
|
+
- Update latest release section to v1.7.6
|
|
584
|
+
- Add critical upgrade notice for v1.7.4/v1.7.5 users
|
|
585
|
+
- Link to release summary
|
|
586
|
+
|
|
587
|
+
5. **docs/troubleshooting/SENSOR_NODE_CONNECTION_CRASH.md**
|
|
588
|
+
- Update to reflect v1.7.6 as stable solution
|
|
589
|
+
- Note thread-safe queue removed
|
|
590
|
+
- Confirm semaphore timeout effectiveness
|
|
591
|
+
|
|
592
|
+
### User Communication
|
|
593
|
+
|
|
594
|
+
**GitHub Release Description** template:
|
|
595
|
+
|
|
596
|
+
```markdown
|
|
597
|
+
# v1.7.6 - Critical Compilation Fix
|
|
598
|
+
|
|
599
|
+
🚨 **URGENT**: If you are using v1.7.4 or v1.7.5, upgrade immediately. Those versions fail to compile.
|
|
600
|
+
|
|
601
|
+
## What's Fixed
|
|
602
|
+
|
|
603
|
+
✅ **Compilation Failure** - Fixed "_task_request_t was not declared" error
|
|
604
|
+
✅ **ESP32 Support** - All ESP32 builds now compile successfully
|
|
605
|
+
✅ **ESP8266 Support** - All ESP8266 builds now compile successfully
|
|
606
|
+
✅ **FreeRTOS Stability** - Maintained ~85% crash reduction on ESP32
|
|
607
|
+
|
|
608
|
+
## What Changed
|
|
609
|
+
|
|
610
|
+
This release removes the thread-safe scheduler queue that was causing compilation failures:
|
|
611
|
+
|
|
612
|
+
- **Removed**: `scheduler_queue.hpp` and `scheduler_queue.cpp`
|
|
613
|
+
- **Simplified**: `mesh.hpp` initialization code
|
|
614
|
+
- **Maintained**: Semaphore timeout fix for FreeRTOS crash protection
|
|
615
|
+
|
|
616
|
+
## Why This Fix
|
|
617
|
+
|
|
618
|
+
The thread-safe scheduler queue required `_TASK_THREAD_SAFE` macro, but:
|
|
619
|
+
- This macro conflicts with `_TASK_STD_FUNCTION` in TaskScheduler v4.0.x
|
|
620
|
+
- painlessMesh **requires** `_TASK_STD_FUNCTION` for lambda callbacks
|
|
621
|
+
- The queue code was disabled but still trying to compile
|
|
622
|
+
- Result: Type definitions were missing, causing compilation errors
|
|
623
|
+
|
|
624
|
+
## Upgrade Instructions
|
|
625
|
+
|
|
626
|
+
### PlatformIO
|
|
627
|
+
```ini
|
|
628
|
+
[env:your_board]
|
|
629
|
+
lib_deps =
|
|
630
|
+
https://github.com/Alteriom/painlessMesh.git#v1.7.6
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
### Arduino IDE
|
|
634
|
+
Update through Library Manager: **AlteriomPainlessMesh v1.7.6**
|
|
635
|
+
|
|
636
|
+
### NPM
|
|
637
|
+
```bash
|
|
638
|
+
npm update @alteriom/painlessmesh
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
## Performance
|
|
642
|
+
|
|
643
|
+
- ✅ ESP32 crash rate: ~5-8% (down from 30-40%)
|
|
644
|
+
- ✅ Crash reduction: ~85% via semaphore timeout increase
|
|
645
|
+
- ✅ No performance impact vs v1.7.2
|
|
646
|
+
- ✅ Full lambda and std::function support maintained
|
|
647
|
+
|
|
648
|
+
## Testing
|
|
649
|
+
|
|
650
|
+
- ✅ 710+ unit tests passing
|
|
651
|
+
- ✅ All 19 examples compile successfully
|
|
652
|
+
- ✅ ESP32 and ESP8266 platforms verified
|
|
653
|
+
- ✅ Arduino IDE and PlatformIO tested
|
|
654
|
+
|
|
655
|
+
## Breaking Changes
|
|
656
|
+
|
|
657
|
+
**None** - This is a pure bug fix release.
|
|
658
|
+
|
|
659
|
+
## Known Limitations
|
|
660
|
+
|
|
661
|
+
- ESP32 crash protection is ~85% effective (not 95-98% as originally targeted)
|
|
662
|
+
- Thread-safe scheduler queue feature removed (may return in v1.8.0)
|
|
663
|
+
- Requires TaskScheduler v4.1+ for future thread-safe re-implementation
|
|
664
|
+
|
|
665
|
+
## What's Next
|
|
666
|
+
|
|
667
|
+
We're monitoring for TaskScheduler v4.1+ which may resolve the `_TASK_THREAD_SAFE` + `_TASK_STD_FUNCTION` incompatibility. If released, we may re-introduce the thread-safe queue in v1.8.0.
|
|
668
|
+
|
|
669
|
+
## Full Changelog
|
|
670
|
+
|
|
671
|
+
📋 [View Complete Release Notes](docs/releases/RELEASE_SUMMARY_v1.7.6.md)
|
|
672
|
+
📖 [View CHANGELOG](CHANGELOG.md)
|
|
673
|
+
|
|
674
|
+
---
|
|
675
|
+
|
|
676
|
+
**Release Date**: October 19, 2025
|
|
677
|
+
**Build Status**: ✅ All tests passing
|
|
678
|
+
**Upgrade Priority**: 🚨 CRITICAL for v1.7.4/v1.7.5 users
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
---
|
|
682
|
+
|
|
683
|
+
## Timeline
|
|
684
|
+
|
|
685
|
+
### October 19, 2025 - Same Day Release
|
|
686
|
+
|
|
687
|
+
| Time | Task | Duration | Status |
|
|
688
|
+
|------|------|----------|--------|
|
|
689
|
+
| 10:00 | Review and approve plan | 30 min | Pending |
|
|
690
|
+
| 10:30 | Remove scheduler_queue files | 10 min | Not started |
|
|
691
|
+
| 10:40 | Update mesh.hpp | 15 min | Not started |
|
|
692
|
+
| 10:55 | Update version files | 10 min | Not started |
|
|
693
|
+
| 11:05 | Create unit test | 30 min | Not started |
|
|
694
|
+
| 11:35 | Update documentation | 45 min | Not started |
|
|
695
|
+
| 12:20 | Run test suite | 15 min | Not started |
|
|
696
|
+
| 12:35 | Test ESP32 compilation | 20 min | Not started |
|
|
697
|
+
| 12:55 | Test ESP8266 compilation | 15 min | Not started |
|
|
698
|
+
| 13:10 | Test all examples | 30 min | Not started |
|
|
699
|
+
| 13:40 | Git commit and tag | 15 min | Not started |
|
|
700
|
+
| 13:55 | Push to GitHub | 5 min | Not started |
|
|
701
|
+
| 14:00 | Create GitHub Release | 15 min | Not started |
|
|
702
|
+
| 14:15 | Publish NPM package | 10 min | Not started |
|
|
703
|
+
| 14:25 | Update README | 10 min | Not started |
|
|
704
|
+
| 14:35 | Monitor CI/CD | 30 min | Not started |
|
|
705
|
+
|
|
706
|
+
**Total Estimated Time**: ~4.5 hours
|
|
707
|
+
**Target Completion**: 14:30 same day
|
|
708
|
+
|
|
709
|
+
---
|
|
710
|
+
|
|
711
|
+
## Success Criteria
|
|
712
|
+
|
|
713
|
+
### Mandatory Requirements
|
|
714
|
+
|
|
715
|
+
1. ✅ **Compilation Success**
|
|
716
|
+
- ESP32 compiles without errors
|
|
717
|
+
- ESP8266 compiles without errors
|
|
718
|
+
- All 19 examples compile
|
|
719
|
+
- Desktop tests compile and pass
|
|
720
|
+
|
|
721
|
+
2. ✅ **Test Pass Rate**
|
|
722
|
+
- All 710+ existing unit tests pass
|
|
723
|
+
- New test passes
|
|
724
|
+
- No regression in test coverage
|
|
725
|
+
|
|
726
|
+
3. ✅ **Functionality Maintained**
|
|
727
|
+
- FreeRTOS crash reduction still ~85%
|
|
728
|
+
- Lambda callbacks still work
|
|
729
|
+
- All mesh features functional
|
|
730
|
+
- No breaking API changes
|
|
731
|
+
|
|
732
|
+
4. ✅ **Documentation Complete**
|
|
733
|
+
- CHANGELOG.md updated
|
|
734
|
+
- Release summary created
|
|
735
|
+
- Compilation issues doc updated
|
|
736
|
+
- README.md updated
|
|
737
|
+
|
|
738
|
+
### Optional Goals
|
|
739
|
+
|
|
740
|
+
- ⭐ Zero GitHub Issues within 24 hours
|
|
741
|
+
- ⭐ Positive community feedback
|
|
742
|
+
- ⭐ CI/CD pipeline green immediately
|
|
743
|
+
- ⭐ PlatformIO registry update within 24 hours
|
|
744
|
+
|
|
745
|
+
---
|
|
746
|
+
|
|
747
|
+
## Rollback Plan
|
|
748
|
+
|
|
749
|
+
If v1.7.6 causes unexpected issues:
|
|
750
|
+
|
|
751
|
+
1. **Immediate**: Advise users to use v1.7.2
|
|
752
|
+
```ini
|
|
753
|
+
lib_deps = https://github.com/Alteriom/painlessMesh.git#v1.7.2
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
2. **Short-term**: Revert commit and remove tag
|
|
757
|
+
```bash
|
|
758
|
+
git revert <commit-hash>
|
|
759
|
+
git push origin main
|
|
760
|
+
git tag -d v1.7.6
|
|
761
|
+
git push origin :refs/tags/v1.7.6
|
|
762
|
+
```
|
|
763
|
+
|
|
764
|
+
3. **Medium-term**: Investigate issue and prepare v1.7.7
|
|
765
|
+
|
|
766
|
+
**Rollback Criteria:**
|
|
767
|
+
- Compilation failures reported
|
|
768
|
+
- Critical functionality broken
|
|
769
|
+
- Crash rate increases above 10%
|
|
770
|
+
- Breaking API changes discovered
|
|
771
|
+
|
|
772
|
+
---
|
|
773
|
+
|
|
774
|
+
## Post-Release Checklist
|
|
775
|
+
|
|
776
|
+
### Immediate (Within 1 Hour)
|
|
777
|
+
- [ ] GitHub Release published
|
|
778
|
+
- [ ] NPM package published
|
|
779
|
+
- [ ] CI/CD pipeline status: Green
|
|
780
|
+
- [ ] README.md updated with v1.7.6
|
|
781
|
+
|
|
782
|
+
### First 24 Hours
|
|
783
|
+
- [ ] Monitor GitHub Issues (target: zero reports)
|
|
784
|
+
- [ ] Verify PlatformIO registry update
|
|
785
|
+
- [ ] Check Arduino Library Manager sync
|
|
786
|
+
- [ ] Review community feedback
|
|
787
|
+
|
|
788
|
+
### First Week
|
|
789
|
+
- [ ] Collect crash reports from ESP32 users
|
|
790
|
+
- [ ] Verify 85% crash reduction maintained
|
|
791
|
+
- [ ] Update troubleshooting docs if needed
|
|
792
|
+
- [ ] Plan v1.8.0 roadmap
|
|
793
|
+
|
|
794
|
+
---
|
|
795
|
+
|
|
796
|
+
## References
|
|
797
|
+
|
|
798
|
+
### Related Documentation
|
|
799
|
+
- [PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md](../troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md)
|
|
800
|
+
- [SENSOR_NODE_CONNECTION_CRASH.md](../troubleshooting/SENSOR_NODE_CONNECTION_CRASH.md)
|
|
801
|
+
- [RELEASE_SUMMARY_v1.7.5.md](RELEASE_SUMMARY_v1.7.5.md)
|
|
802
|
+
- [RELEASE_SUMMARY_v1.7.4.md](RELEASE_SUMMARY_v1.7.4.md)
|
|
803
|
+
|
|
804
|
+
### External Links
|
|
805
|
+
- [TaskScheduler GitHub](https://github.com/arkhipenko/TaskScheduler)
|
|
806
|
+
- [painlessMesh Repository](https://github.com/Alteriom/painlessMesh)
|
|
807
|
+
- [FreeRTOS Semaphores](https://www.freertos.org/a00113.html)
|
|
808
|
+
|
|
809
|
+
---
|
|
810
|
+
|
|
811
|
+
**Document Status**: Ready for Implementation
|
|
812
|
+
**Approval Required**: Yes
|
|
813
|
+
**Risk Level**: Low (Option A) / Medium (Option B)
|
|
814
|
+
**Recommended**: Option A - Remove Dead Code
|
|
815
|
+
|
|
816
|
+
**Next Action**: Review plan and approve for implementation
|