From 09ba07efb403492b429b82439835286b0dcf839d Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:31:52 +0200 Subject: [PATCH 01/17] chore: prepare ESP-Now 0.5.2 metadata (#12) --- library.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library.json b/library.json index fdf4550..48ef9d9 100755 --- a/library.json +++ b/library.json @@ -16,14 +16,14 @@ "type": "git", "url": "https://github.com/Flowduino/ESPressio-ESP-Now.git" }, - "version": "0.5.1", + "version": "0.5.2", "license": "Apache-2.0", "frameworks": "arduino", "platforms": "espressif32", "dependencies": [ { "name": "ESPressio-Timing", - "version": ">=2.2.3 <3.0.0", + "version": ">=2.2.4 <3.0.0", "url": "https://github.com/Flowduino/ESPressio-Timing.git", "platforms": "espressif32" }, From 8f44bf77c50821dfc3e3948983579a7b9590fd58 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:32:01 +0200 Subject: [PATCH 02/17] chore: prepare ESP-Now 0.5.2 Arduino metadata (#12) --- library.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library.properties b/library.properties index e2aee16..b32a1de 100755 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Flowduino ESPressio-ESPNow -version=0.5.1 +version=0.5.2 author=Simon J. Stuart maintainer=Flowduino.com sentence=ESP-NOW transport and distributed ESPressio integrations for ESP32 @@ -8,4 +8,4 @@ category=Communication url=https://github.com/Flowduino/ESPressio-ESP-Now architectures=esp32 includes=ESPressio_ESPNow.hpp -depends=Flowduino ESPressio-Timing (>=2.2.3 && <3.0.0),Flowduino ESPressio-Observable (>=3.0.1 && <4.0.0) +depends=Flowduino ESPressio-Timing (>=2.2.4 && <3.0.0),Flowduino ESPressio-Observable (>=3.0.1 && <4.0.0) From 3d9b1edff52fec02c66744f3dee91d19a61958f0 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:32:11 +0200 Subject: [PATCH 03/17] chore: prepare ESP-Now 0.5.2 component metadata (#12) --- component.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/component.mk b/component.mk index 6ed77f3..2b96c6b 100755 --- a/component.mk +++ b/component.mk @@ -5,5 +5,5 @@ COMPONENT_REQUIRES := ESPressio_Timing CXXFLAGS += -DESPRESSIO_ESPNOW CXXFLAGS += -DESPRESSIO_ESPNOW_VERSION_MAJOR=0 CXXFLAGS += -DESPRESSIO_ESPNOW_VERSION_MINOR=5 -CXXFLAGS += -DESPRESSIO_ESPNOW_VERSION_PATCH=1 -CXXFLAGS += -DESPRESSIO_ESPNOW_VERSION_STRING=\"0.5.1\" +CXXFLAGS += -DESPRESSIO_ESPNOW_VERSION_PATCH=2 +CXXFLAGS += -DESPRESSIO_ESPNOW_VERSION_STRING=\"0.5.2\" From 7261f235beeb161827eee0f71fa5596511eaa351 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:32:33 +0200 Subject: [PATCH 04/17] docs: add ESP-Now 0.5.2 changelog entry (#12) --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ddb6073..21d7ffb 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## 0.5.2 — 2026-08-21 + +### Changed +- Raised the required ESPressio Timing baseline from 2.2.3 to 2.2.4, carrying the Units 0.2.3 / Serializable 0.10.2 dependency refresh downstream. +- Preserved the required ESPressio Observable baseline at `>=3.0.1 <4.0.0`. +- Preserved Command >= 0.3.0 < 1.0.0 and Security >= 0.2.0 < 1.0.0 as opt-in integration baselines. +- Kept Event as an opt-in compatible 5.x integration rather than introducing a hard Event 5.8.2 dependency. +- Updated package, compile-time version metadata, README and dependency documentation to 0.5.2. +- Preserved the documented dependency-cycle resolution direction: ESP-Now-specific Event bridge code belongs downstream with ESP-Now's Event integration. + +### Compatibility +- ESP-NOW transport, clock synchronization, Event Transport, Command Transport, Security integration, and Observable APIs remain source-compatible with 0.5.1. +- Event remains opt-in; no new mandatory Event dependency is introduced. + ## 0.5.1 — 2026-08-20 ### Changed From 809e3dab7fff5e347a42658e52ff97a9739aa2ea Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:32:47 +0200 Subject: [PATCH 05/17] docs: refresh ESP-Now dependency chart for 0.5.2 (#12) --- ESPRESSIO_DEPENDENCY_CHART.md | 37 +++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/ESPRESSIO_DEPENDENCY_CHART.md b/ESPRESSIO_DEPENDENCY_CHART.md index eaec180..66bb40a 100644 --- a/ESPRESSIO_DEPENDENCY_CHART.md +++ b/ESPRESSIO_DEPENDENCY_CHART.md @@ -1,12 +1,12 @@ -# ESPressio Dependency Chart — ESP-Now 0.5.1 +# ESPressio Dependency Chart — ESP-Now 0.5.2 ESPressio ESP-Now keeps its core dependencies small and exposes higher-level integrations only when explicitly selected. ```text -ESPressio ESP-Now 0.5.1 +ESPressio ESP-Now 0.5.2 | -+-- required --> ESPressio Timing >= 2.2.3 < 3.0.0 ++-- required --> ESPressio Timing >= 2.2.4 < 3.0.0 | +-- required --> ESPressio Observable >= 3.0.1 < 4.0.0 | @@ -21,7 +21,7 @@ ESPressio ESP-Now 0.5.1 ``` The Event baseline intentionally remains a compatible 5.x range here rather -than creating a hard ESP-Now 0.5.1 -> Event 5.8.1 release dependency. Event is +than creating a hard ESP-Now 0.5.2 -> Event 5.8.2 release dependency. Event is optional and, importantly, Event 5.8 currently also contains an ESP-Now-specific Observer bridge. Strengthening both edges would make the reciprocal dependency more difficult to remove. @@ -29,10 +29,10 @@ more difficult to remove. ## Transitive Timing chain ```text -ESP-Now 0.5.1 - -> Timing 2.2.3 - -> Units 0.2.2 - - - -> Serializable >= 0.10.1 < 1.0.0 +ESP-Now 0.5.2 + -> Timing 2.2.4 + -> Units 0.2.3 + - - -> Serializable >= 0.10.2 < 1.0.0 only for Serializable Unit representations -> Observable 3.0.1 ``` @@ -75,7 +75,8 @@ Applications explicitly select the relevant integration headers. ## Circular-dependency audit -The current ecosystem contains one reciprocal optional relationship: +The current ecosystem contains two reciprocal optional relationships involving +Event integrations: ```text ESP-Now - - -> Event @@ -85,8 +86,18 @@ Event - - -> ESP-Now ESPNowTransportEventBridge ``` -This is not the desired long-term dependency direction. The preferred hierarchy -is: +and, separately: + +```text +Sockets - - -> Event + socket Event transports + +Event - - -> Sockets + SocketWorkerEventBridge + SocketSecuritySessionEventBridge +``` + +For ESP-Now, the preferred hierarchy is: ```text Event @@ -111,8 +122,8 @@ Core: ```ini lib_deps = - https://github.com/Flowduino/ESPressio-ESP-Now@^0.5.1 - https://github.com/Flowduino/ESPressio-Timing@^2.2.3 + https://github.com/Flowduino/ESPressio-ESP-Now@^0.5.2 + https://github.com/Flowduino/ESPressio-Timing@^2.2.4 https://github.com/Flowduino/ESPressio-Observable@^3.0.1 ``` From a1e7a95088e67cc324884e84bcbddef46c98f7ad Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:33:01 +0200 Subject: [PATCH 06/17] ci: validate ESP-Now 0.5.2 against Timing 2.2.4 candidate (#12) --- .github/workflows/host-tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/host-tests.yml b/.github/workflows/host-tests.yml index 9292fb9..5a76941 100644 --- a/.github/workflows/host-tests.yml +++ b/.github/workflows/host-tests.yml @@ -4,7 +4,7 @@ on: push: branches: - main - - feature/10-timing-2.2.3-dependency-refresh + - feature/12-timing-2.2.4-dependency-refresh pull_request: branches: - main @@ -53,13 +53,13 @@ jobs: - uses: actions/checkout@v4 with: repository: Flowduino/ESPressio-Timing - ref: 2.2.3 + ref: feature/7-units-0.2.3-dependency-refresh path: deps/ESPressio-Timing - uses: actions/checkout@v4 with: repository: Flowduino/ESPressio-Units - ref: 0.2.2 + ref: feature/4-serializable-0.10.2-dependency-refresh path: deps/ESPressio-Units - uses: actions/checkout@v4 From 4a21bfc79c000b7d27414c05bc6922145dbd26f9 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:33:15 +0200 Subject: [PATCH 07/17] ci: validate ESP-Now security integration against 0.5.2 cascade (#12) --- .github/workflows/security-integration-tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/security-integration-tests.yml b/.github/workflows/security-integration-tests.yml index bdd118d..ae2f226 100644 --- a/.github/workflows/security-integration-tests.yml +++ b/.github/workflows/security-integration-tests.yml @@ -2,7 +2,7 @@ name: Security Integration on: push: - branches: [feature/security-integration, feature/10-timing-2.2.3-dependency-refresh, main] + branches: [feature/security-integration, feature/12-timing-2.2.4-dependency-refresh, main] pull_request: branches: [main] @@ -43,12 +43,12 @@ jobs: - uses: actions/checkout@v4 with: repository: Flowduino/ESPressio-Timing - ref: 2.2.3 + ref: feature/7-units-0.2.3-dependency-refresh path: deps/ESPressio-Timing - uses: actions/checkout@v4 with: repository: Flowduino/ESPressio-Units - ref: 0.2.2 + ref: feature/4-serializable-0.10.2-dependency-refresh path: deps/ESPressio-Units - uses: actions/checkout@v4 with: From cd8647e33d4fc0cd647d1f9ecb76f37e43b1a7d3 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:33:47 +0200 Subject: [PATCH 08/17] ci: add temporary ESP-Now README maintenance helper (#12) --- .../_dependency-readme-maintenance.yml | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/_dependency-readme-maintenance.yml diff --git a/.github/workflows/_dependency-readme-maintenance.yml b/.github/workflows/_dependency-readme-maintenance.yml new file mode 100644 index 0000000..04a085a --- /dev/null +++ b/.github/workflows/_dependency-readme-maintenance.yml @@ -0,0 +1,41 @@ +name: Dependency README maintenance + +on: + push: + branches: + - feature/12-timing-2.2.4-dependency-refresh + +permissions: + contents: write + +jobs: + update-readme: + if: github.actor != 'github-actions[bot]' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Update current dependency references + shell: python + run: | + from pathlib import Path + path = Path('README.md') + text = path.read_text() + required = ['0.5.1', '2.2.3', '0.2.2', '0.10.1', 'Event 5.8.1'] + for value in required: + if value not in text: + raise SystemExit(f'Missing expected README text: {value}') + text = text.replace('0.5.1', '0.5.2') + text = text.replace('2.2.3', '2.2.4') + text = text.replace('0.2.2', '0.2.3') + text = text.replace('0.10.1', '0.10.2') + text = text.replace('Event 5.8.1', 'Event 5.8.2') + path.write_text(text) + - name: Commit README update + shell: bash + run: | + if git diff --quiet -- README.md; then exit 0; fi + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + git add README.md + git commit -m 'docs: refresh ESP-Now 0.5.2 dependency references (#12)' + git push From c96fdaf51a601dad24b5fb062e6bd9ddabde679f Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:33:53 +0200 Subject: [PATCH 09/17] chore: trigger ESP-Now dependency README maintenance (#12) --- .dependency-readme-maintenance-trigger | 1 + 1 file changed, 1 insertion(+) create mode 100644 .dependency-readme-maintenance-trigger diff --git a/.dependency-readme-maintenance-trigger b/.dependency-readme-maintenance-trigger new file mode 100644 index 0000000..5c33b15 --- /dev/null +++ b/.dependency-readme-maintenance-trigger @@ -0,0 +1 @@ +trigger From 1c96cfcf0aa779c7eb1d0347782d2d36614bce04 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:40:05 +0200 Subject: [PATCH 10/17] ci: correct guarded ESP-Now README maintenance (#12) --- .../_dependency-readme-maintenance.yml | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/.github/workflows/_dependency-readme-maintenance.yml b/.github/workflows/_dependency-readme-maintenance.yml index 04a085a..969b046 100644 --- a/.github/workflows/_dependency-readme-maintenance.yml +++ b/.github/workflows/_dependency-readme-maintenance.yml @@ -20,15 +20,24 @@ jobs: from pathlib import Path path = Path('README.md') text = path.read_text() - required = ['0.5.1', '2.2.3', '0.2.2', '0.10.1', 'Event 5.8.1'] - for value in required: - if value not in text: - raise SystemExit(f'Missing expected README text: {value}') - text = text.replace('0.5.1', '0.5.2') - text = text.replace('2.2.3', '2.2.4') - text = text.replace('0.2.2', '0.2.3') - text = text.replace('0.10.1', '0.10.2') - text = text.replace('Event 5.8.1', 'Event 5.8.2') + replacements = { + '## Current Version — 0.5.1': '## Current Version — 0.5.2', + 'ESPressio ESP-Now **0.5.1** is a dependency-maintenance patch over 0.5.0. It retains the Observable transport/peer lifecycle API while raising the required Timing baseline to 2.2.3.': 'ESPressio ESP-Now **0.5.2** is a dependency-maintenance patch over 0.5.1. It retains the Observable transport/peer lifecycle API while raising the required Timing baseline to 2.2.4.', + 'ESPressio Timing >= 2.2.3 < 3.0.0': 'ESPressio Timing >= 2.2.4 < 3.0.0', + 'rather than being tightened to Event 5.8.1': 'rather than being tightened to Event 5.8.2', + 'ESPressio ESP-Now `0.5.1` targets': 'ESPressio ESP-Now `0.5.2` targets', + '### Required for 0.5.1': '### Required for 0.5.2', + 'Timing 2.2.3 carries Units 0.2.2 downstream.': 'Timing 2.2.4 carries Units 0.2.3 downstream, with Serializable 0.10.2 remaining opt-in through Serializable Unit/Event facilities.', + '### Optional for 0.5.1': '### Optional for 0.5.2', + 'https://github.com/Flowduino/ESPressio-ESP-Now@^0.5.1': 'https://github.com/Flowduino/ESPressio-ESP-Now@^0.5.2', + 'https://github.com/Flowduino/ESPressio-Timing@^2.2.3': 'https://github.com/Flowduino/ESPressio-Timing@^2.2.4', + 'The 0.5.1 candidate validates': 'The 0.5.2 candidate validates', + '0.5.1 is a backward-compatible dependency-maintenance patch:': '0.5.2 is a backward-compatible dependency-maintenance patch:' + } + for old, new in replacements.items(): + if old not in text: + raise SystemExit(f'Missing expected README text: {old}') + text = text.replace(old, new) path.write_text(text) - name: Commit README update shell: bash From 1ce309e85439bc0c9822f8ee0c5dd78fc87a6186 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Aug 2026 06:40:12 +0000 Subject: [PATCH 11/17] docs: refresh ESP-Now 0.5.2 dependency references (#12) --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index be73c88..585f975 100755 --- a/README.md +++ b/README.md @@ -4,15 +4,15 @@ ESP-NOW transport and distributed ESPressio implementations for the Flowduino ES ESPressio ESP-Now provides a reusable ESP-NOW transport foundation for ESP32-family applications, distributed System Clock synchronization, optional Event and Command transports, and optional transport-neutral authenticated encryption through ESPressio Security. -## Current Version — 0.5.1 +## Current Version — 0.5.2 -ESPressio ESP-Now **0.5.1** is a dependency-maintenance patch over 0.5.0. It retains the Observable transport/peer lifecycle API while raising the required Timing baseline to 2.2.3. +ESPressio ESP-Now **0.5.2** is a dependency-maintenance patch over 0.5.1. It retains the Observable transport/peer lifecycle API while raising the required Timing baseline to 2.2.4. Current dependency model: ```text Required - ESPressio Timing >= 2.2.3 < 3.0.0 + ESPressio Timing >= 2.2.4 < 3.0.0 ESPressio Observable >= 3.0.1 < 4.0.0 Optional Event Transport @@ -27,11 +27,11 @@ Optional Secure Transport `ESPNowTransport` exposes observable initialization, shutdown, peer-add/remove, and send success/failure lifecycle information. Protocol receive handlers remain the authoritative data-delivery mechanism. -The Event relationship deliberately remains a compatible 5.x opt-in range rather than being tightened to Event 5.8.1: Event currently also hosts an ESP-Now-specific Observer bridge. Strengthening both directions would reinforce a circular optional dependency. The preferred future architecture moves `ESPNowTransportEventBridge` downstream into ESP-Now's optional Event integration, or into a dedicated integration package. +The Event relationship deliberately remains a compatible 5.x opt-in range rather than being tightened to Event 5.8.2: Event currently also hosts an ESP-Now-specific Observer bridge. Strengthening both directions would reinforce a circular optional dependency. The preferred future architecture moves `ESPNowTransportEventBridge` downstream into ESP-Now's optional Event integration, or into a dedicated integration package. ## Compatibility -ESPressio ESP-Now `0.5.1` targets the ESP32 family under Arduino-ESP32 and requires C++17. +ESPressio ESP-Now `0.5.2` targets the ESP32 family under Arduino-ESP32 and requires C++17. The common ESP-NOW transport uses Espressif ESP-NOW/Wi-Fi APIs plus FreeRTOS queues/tasks. The initial ESPressio wire format remains within the classic 250-byte ESP-NOW payload limit for broad compatibility, while higher-level Event, Command, and Security integrations provide their own bounded fragmentation where required. @@ -52,17 +52,17 @@ ESPressio and its component libraries are licensed under the **Apache License 2. ## ESPressio Library Dependencies -### Required for 0.5.1 +### Required for 0.5.2 ```text -ESPressio Timing >= 2.2.3 < 3.0.0 +ESPressio Timing >= 2.2.4 < 3.0.0 ESPressio Observable >= 3.0.1 < 4.0.0 Arduino-ESP32 ``` -Timing 2.2.3 carries Units 0.2.2 downstream. Serializable remains optional through selected Serializable Unit/Event facilities and is not a core ESP-Now dependency. +Timing 2.2.4 carries Units 0.2.3 downstream, with Serializable 0.10.2 remaining opt-in through Serializable Unit/Event facilities. Serializable remains optional through selected Serializable Unit/Event facilities and is not a core ESP-Now dependency. -### Optional for 0.5.1 +### Optional for 0.5.2 ```text Event Transport @@ -110,8 +110,8 @@ Core ESP-NOW/Timing usage: ```ini lib_deps = - https://github.com/Flowduino/ESPressio-ESP-Now@^0.5.1 - https://github.com/Flowduino/ESPressio-Timing@^2.2.3 + https://github.com/Flowduino/ESPressio-ESP-Now@^0.5.2 + https://github.com/Flowduino/ESPressio-Timing@^2.2.4 https://github.com/Flowduino/ESPressio-Observable@^3.0.1 build_flags = @@ -126,7 +126,7 @@ Add Security when selecting the secure adapter: ```ini lib_deps = - https://github.com/Flowduino/ESPressio-ESP-Now@^0.5.1 + https://github.com/Flowduino/ESPressio-ESP-Now@^0.5.2 https://github.com/Flowduino/ESPressio-Security@^0.2.0 ``` @@ -360,11 +360,11 @@ ESPNowSecurityProtocol Security-protocol tests cover protocol allocation, fragmentation, out-of-order reassembly, duplicate fragments, malformed frames, and maximum envelope bounds. -The 0.5.1 candidate validates the native transport observer contract and the refreshed Timing/Units/Observable dependency generation. GitHub Actions also compile real ESP32 examples against the coordinated dependencies. +The 0.5.2 candidate validates the native transport observer contract and the refreshed Timing/Units/Observable dependency generation. GitHub Actions also compile real ESP32 examples against the coordinated dependencies. ## Compatibility -0.5.1 is a backward-compatible dependency-maintenance patch: +0.5.2 is a backward-compatible dependency-maintenance patch: - core `ESPNowTransport` APIs are unchanged from 0.5.0; - clock synchronization APIs are unchanged; From a5e820949d8b3a56e6455ea4c1b9ef24057911c5 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:41:02 +0200 Subject: [PATCH 12/17] ci: clean duplicated ESP-Now dependency wording (#12) --- .../_dependency-readme-maintenance.yml | 30 +++++-------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/.github/workflows/_dependency-readme-maintenance.yml b/.github/workflows/_dependency-readme-maintenance.yml index 969b046..a9b98ba 100644 --- a/.github/workflows/_dependency-readme-maintenance.yml +++ b/.github/workflows/_dependency-readme-maintenance.yml @@ -14,37 +14,23 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Update current dependency references + - name: Clean current dependency wording shell: python run: | from pathlib import Path path = Path('README.md') text = path.read_text() - replacements = { - '## Current Version — 0.5.1': '## Current Version — 0.5.2', - 'ESPressio ESP-Now **0.5.1** is a dependency-maintenance patch over 0.5.0. It retains the Observable transport/peer lifecycle API while raising the required Timing baseline to 2.2.3.': 'ESPressio ESP-Now **0.5.2** is a dependency-maintenance patch over 0.5.1. It retains the Observable transport/peer lifecycle API while raising the required Timing baseline to 2.2.4.', - 'ESPressio Timing >= 2.2.3 < 3.0.0': 'ESPressio Timing >= 2.2.4 < 3.0.0', - 'rather than being tightened to Event 5.8.1': 'rather than being tightened to Event 5.8.2', - 'ESPressio ESP-Now `0.5.1` targets': 'ESPressio ESP-Now `0.5.2` targets', - '### Required for 0.5.1': '### Required for 0.5.2', - 'Timing 2.2.3 carries Units 0.2.2 downstream.': 'Timing 2.2.4 carries Units 0.2.3 downstream, with Serializable 0.10.2 remaining opt-in through Serializable Unit/Event facilities.', - '### Optional for 0.5.1': '### Optional for 0.5.2', - 'https://github.com/Flowduino/ESPressio-ESP-Now@^0.5.1': 'https://github.com/Flowduino/ESPressio-ESP-Now@^0.5.2', - 'https://github.com/Flowduino/ESPressio-Timing@^2.2.3': 'https://github.com/Flowduino/ESPressio-Timing@^2.2.4', - 'The 0.5.1 candidate validates': 'The 0.5.2 candidate validates', - '0.5.1 is a backward-compatible dependency-maintenance patch:': '0.5.2 is a backward-compatible dependency-maintenance patch:' - } - for old, new in replacements.items(): - if old not in text: - raise SystemExit(f'Missing expected README text: {old}') - text = text.replace(old, new) - path.write_text(text) - - name: Commit README update + old = 'Timing 2.2.4 carries Units 0.2.3 downstream, with Serializable 0.10.2 remaining opt-in through Serializable Unit/Event facilities. Serializable remains optional through selected Serializable Unit/Event facilities and is not a core ESP-Now dependency.' + new = 'Timing 2.2.4 carries Units 0.2.3 downstream. Serializable 0.10.2 remains optional through selected Serializable Unit/Event facilities and is not a core ESP-Now dependency.' + if old not in text: + raise SystemExit('Missing expected duplicated dependency wording') + path.write_text(text.replace(old, new, 1)) + - name: Commit README cleanup shell: bash run: | if git diff --quiet -- README.md; then exit 0; fi git config user.name github-actions[bot] git config user.email 41898282+github-actions[bot]@users.noreply.github.com git add README.md - git commit -m 'docs: refresh ESP-Now 0.5.2 dependency references (#12)' + git commit -m 'docs: clean ESP-Now 0.5.2 dependency wording (#12)' git push From 3c392eb56b8e1c94ff79f8b69d58c998a6691f14 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Aug 2026 06:41:12 +0000 Subject: [PATCH 13/17] docs: clean ESP-Now 0.5.2 dependency wording (#12) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 585f975..1728042 100755 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ ESPressio Observable >= 3.0.1 < 4.0.0 Arduino-ESP32 ``` -Timing 2.2.4 carries Units 0.2.3 downstream, with Serializable 0.10.2 remaining opt-in through Serializable Unit/Event facilities. Serializable remains optional through selected Serializable Unit/Event facilities and is not a core ESP-Now dependency. +Timing 2.2.4 carries Units 0.2.3 downstream. Serializable 0.10.2 remains optional through selected Serializable Unit/Event facilities and is not a core ESP-Now dependency. ### Optional for 0.5.2 From 5dff4577e42a5707239f99e1ac953db4265581b9 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:42:09 +0200 Subject: [PATCH 14/17] chore: remove temporary ESP-Now README helper (#12) --- .../_dependency-readme-maintenance.yml | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 .github/workflows/_dependency-readme-maintenance.yml diff --git a/.github/workflows/_dependency-readme-maintenance.yml b/.github/workflows/_dependency-readme-maintenance.yml deleted file mode 100644 index a9b98ba..0000000 --- a/.github/workflows/_dependency-readme-maintenance.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Dependency README maintenance - -on: - push: - branches: - - feature/12-timing-2.2.4-dependency-refresh - -permissions: - contents: write - -jobs: - update-readme: - if: github.actor != 'github-actions[bot]' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Clean current dependency wording - shell: python - run: | - from pathlib import Path - path = Path('README.md') - text = path.read_text() - old = 'Timing 2.2.4 carries Units 0.2.3 downstream, with Serializable 0.10.2 remaining opt-in through Serializable Unit/Event facilities. Serializable remains optional through selected Serializable Unit/Event facilities and is not a core ESP-Now dependency.' - new = 'Timing 2.2.4 carries Units 0.2.3 downstream. Serializable 0.10.2 remains optional through selected Serializable Unit/Event facilities and is not a core ESP-Now dependency.' - if old not in text: - raise SystemExit('Missing expected duplicated dependency wording') - path.write_text(text.replace(old, new, 1)) - - name: Commit README cleanup - shell: bash - run: | - if git diff --quiet -- README.md; then exit 0; fi - git config user.name github-actions[bot] - git config user.email 41898282+github-actions[bot]@users.noreply.github.com - git add README.md - git commit -m 'docs: clean ESP-Now 0.5.2 dependency wording (#12)' - git push From f104dd740afc78b33d8c5e7fb9c0b05d1af14dc8 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 08:42:16 +0200 Subject: [PATCH 15/17] chore: remove ESP-Now README maintenance trigger (#12) --- .dependency-readme-maintenance-trigger | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .dependency-readme-maintenance-trigger diff --git a/.dependency-readme-maintenance-trigger b/.dependency-readme-maintenance-trigger deleted file mode 100644 index 5c33b15..0000000 --- a/.dependency-readme-maintenance-trigger +++ /dev/null @@ -1 +0,0 @@ -trigger From 06b42b40b48d58762b0459368b9b3841d25e6f93 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 09:55:52 +0200 Subject: [PATCH 16/17] ci: validate released Timing 2.2.4 and Units 0.2.3 (#12) --- .github/workflows/host-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/host-tests.yml b/.github/workflows/host-tests.yml index 5a76941..86f468c 100644 --- a/.github/workflows/host-tests.yml +++ b/.github/workflows/host-tests.yml @@ -53,13 +53,13 @@ jobs: - uses: actions/checkout@v4 with: repository: Flowduino/ESPressio-Timing - ref: feature/7-units-0.2.3-dependency-refresh + ref: 2.2.4 path: deps/ESPressio-Timing - uses: actions/checkout@v4 with: repository: Flowduino/ESPressio-Units - ref: feature/4-serializable-0.10.2-dependency-refresh + ref: 0.2.3 path: deps/ESPressio-Units - uses: actions/checkout@v4 From b2fc09189ef7523c17e25fce93a100c3cc094aeb Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 09:56:05 +0200 Subject: [PATCH 17/17] ci: validate security integration against released dependency cascade (#12) --- .github/workflows/security-integration-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/security-integration-tests.yml b/.github/workflows/security-integration-tests.yml index ae2f226..8fd3b8b 100644 --- a/.github/workflows/security-integration-tests.yml +++ b/.github/workflows/security-integration-tests.yml @@ -43,12 +43,12 @@ jobs: - uses: actions/checkout@v4 with: repository: Flowduino/ESPressio-Timing - ref: feature/7-units-0.2.3-dependency-refresh + ref: 2.2.4 path: deps/ESPressio-Timing - uses: actions/checkout@v4 with: repository: Flowduino/ESPressio-Units - ref: feature/4-serializable-0.10.2-dependency-refresh + ref: 0.2.3 path: deps/ESPressio-Units - uses: actions/checkout@v4 with: