You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+55-11Lines changed: 55 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,6 +9,24 @@ USB CDC, TCP, WebSocket, BLE, HTTP, test harnesses and programmatic callers can
9
9
therefore share the same Command tree, parameter definitions, validation and
10
10
callbacks without coupling application logic to a transport.
11
11
12
+
## 0.3.0 Development Update — Observable Callback Coverage
13
+
14
+
The `feature/observable-callback-coverage` branch targets **ESPressio Command 0.3.0**. The stable/pre-release information below remains the 0.2.0 documentation until 0.3.0 is released.
15
+
16
+
Command 0.3.0 adds a required dependency on **ESPressio Observable >= 3.0.1 and < 4.0.0** and introduces `ICommandRegistryObserver`. `CommandRegistry` now reports root command registration and successful unregistration, including scoped `CommandRegistrationHandle` cleanup. Command invocation itself deliberately remains on the existing callbacks, middleware, `Before(...)` and `After(...)` hooks rather than being duplicated as Observable traffic.
17
+
18
+
ESPressio Event remains **optional**. ESPressio Event 5.8.0 provides `CommandRegistryEventBridge`, which converts registry lifecycle observations into asynchronous `CommandRegisteredEvent` and `CommandUnregisteredEvent` instances without making Event a Command dependency.
The host tests include dedicated registry-observer lifecycle coverage. See [CHANGELOG.md](CHANGELOG.md) for the complete 0.3.0 change list.
29
+
12
30
## Latest Stable Version
13
31
14
32
ESPressio Command is currently **0.2.0 (pre-release)**.
@@ -23,7 +41,7 @@ family under Arduino-ESP32** as part of the ESPressio Development Platform.
23
41
24
42
The Command core is deliberately transport-neutral and does not directly depend
25
43
on Arduino `Stream`, `Print`, ESPressio Serial, ESPressio Event, a network
26
-
stack, or any other ESPressio component library.
44
+
stack, or any other ESPressio component library. Beginning with the 0.3.0 development generation it does require ESPressio Observable 3.x for its registry lifecycle surface.
27
45
28
46
Host-side tests are also provided so that the transport-neutral core can be
29
47
validated with a conventional C++17 toolchain.
@@ -84,12 +102,9 @@ In the dependency chart:
84
102
85
103
### Required ESPressio dependencies
86
104
87
-
**None.**
105
+
The stable 0.2.0 pre-release has no ESPressio dependency. **The 0.3.0 development branch requires ESPressio Observable >= 3.0.1 and < 4.0.0.**
88
106
89
-
ESPressio Command is intentionally dependency-free within the ESPressio
90
-
ecosystem. Future Serial, Event, networking, Serializable or other integrations
91
-
should depend on Command or be provided as opt-in adapters; they must not become
92
-
mandatory dependencies of the Command core.
107
+
Serial, Event, networking, Serializable and other integrations should depend on Command or be provided as opt-in adapters; they must not become mandatory dependencies of the Command core. Event remains opt-in even though 5.8.0 provides a Command registry Event bridge.
93
108
94
109
## Namespace
95
110
@@ -110,16 +125,20 @@ The principal public types are:
110
125
-`TextCommandParser` — converts textual Command lines into tokens.
auto observerHandle = commands.RegisterObserver(&observer);
343
+
```
344
+
345
+
New root creation and successful root removal emit notifications. Duplicate registration attempts that do not change the tree do not emit. `CommandRegistrationHandle::Reset()` and handle destruction flow through the same successful-unregistration path.
346
+
347
+
With ESPressio Event 5.8.0 selected, `CommandRegistryEventBridge` can convert these facts into asynchronous Events. Event remains an optional downstream adapter.
348
+
305
349
## Incremental Text Input
306
350
307
351
`CommandLine` accepts characters or buffers and submits complete lines to a
@@ -386,7 +430,7 @@ rules:
386
430
5.**Transport and protocol integrations belong outside the core.**
387
431
6.**Cross-cutting behaviour should be implemented through middleware or
388
432
focused hooks rather than embedded in application callbacks.**
389
-
7.**The core remains independently useful and dependency-free.**
433
+
7.**The core remains independently useful; from 0.3.0 its only required ESPressio dependency is Observable.**
390
434
391
435
## Examples
392
436
@@ -404,7 +448,7 @@ Host-side tests are provided beneath [`tests/`](tests/).
404
448
They exercise the transport-neutral Command implementation independently of
405
449
Arduino hardware. This keeps parsing, resolution, validation and invocation
406
450
behaviour testable with a conventional C++17 toolchain while embedded examples
407
-
validate intended ESP32 integration usage.
451
+
validate intended ESP32 integration usage. The 0.3.0 generation also validates registry-observer registration lifetime and notification semantics.
408
452
409
453
## Future Integration Direction
410
454
@@ -420,15 +464,15 @@ ESPressio Command is intended to become the common invocation layer for:
420
464
- cancellation/progress for asynchronous operations;
421
465
- remote Command invocation;
422
466
- JSON/Serializable argument adapters; and
423
-
- Event bridges for Command completion/result Events.
467
+
- Event bridges for Command lifecycle/completion/result Events where those asynchronous representations are justified.
424
468
425
469
These integrations should remain **opt-in**. The dependency direction is
sentence=Transport-neutral typed command routing and invocation framework
6
-
paragraph=Defines hierarchical commands, typed positional and named parameters, validation, help, completion, middlewareand callbacks independently of Serial, TCP, WebSocket or other input transports.
6
+
paragraph=Defines hierarchical commands, typed positional and named parameters, validation, help, completion, middleware, callbacks and observable command-registry lifecycle notifications independently of Serial, TCP, WebSocket or other input transports.
0 commit comments