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
Aligned with apcore v0.18.0 PROTOCOL_SPEC §4.4.1 wire format and §9.16
event naming convention. Two breaking surfaces:
1. ModuleAnnotations.from_dict precedence inversion (§4.4.1 rule 7)
- When the same key appears both in nested 'extra' and as a top-level
overflow key, the nested value now wins (was: overflow won)
- Observable only in pathological inputs that mix both forms — no
conformant producer emits this
- Top-level overflow keys are still tolerated and merged into extra
for backward compatibility
2. Legacy event aliases removed (§9.16 cleanup, deadline was v0.16)
- No longer emit 'module_health_changed' alongside 'apcore.module.toggled'
- No longer emit 'module_health_changed' alongside 'apcore.health.recovered'
- No longer emit 'config_changed' alongside 'apcore.config.updated'
- No longer emit 'config_changed' alongside 'apcore.module.reloaded'
- Listeners must subscribe to canonical names only; see MIGRATION-v0.18.md
Other:
- Renamed private _emit_config_changed → _emit_module_reloaded for clarity
- Inline comment on legacy mode '0.16.0' baseline (intentional, not drift)
- Updated tests to assert single canonical event instead of dual emission
- README event mapping table dropped legacy column; added v0.18 warning
Test suite: 2239 passed, 2 xfailed.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: tercel <tercel.yi@gmail.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+13Lines changed: 13 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file.
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
+
## [0.18.0] - 2026-04-07
9
+
10
+
### Removed (BREAKING)
11
+
12
+
-**Legacy event aliases removed.** Per the §9.16 naming convention shipped in v0.15, the dual-emission transition period for `module_health_changed` and `config_changed` ended in this release (the original removal deadline was v0.16.0). Listeners that subscribed to these legacy names will no longer receive events. Migrate subscriptions to the canonical names:
-**Renamed private method `_emit_config_changed` → `_emit_module_reloaded`** in `system.control.reload_module` to reflect the canonical event it emits. Private API, no public-surface impact.
16
+
17
+
### Fixed
18
+
19
+
-**`ModuleAnnotations.from_dict` precedence inversion** — Per PROTOCOL_SPEC §4.4.1 rule 7, when the same key appears both in a nested `extra` object and as a top-level overflow key, the **nested value now wins** (previously the top-level overflow would silently overwrite it). Behavior change is observable only in the pathological case where an input contains both forms of the same key — no conformant producer emits this. Top-level overflow keys are still tolerated and merged into `extra` for backward compatibility.
Copy file name to clipboardExpand all lines: README.md
+10-8Lines changed: 10 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -170,14 +170,16 @@ The longest-prefix-match dispatch algorithm ensures that `APCORE_OBSERVABILITY_T
170
170
171
171
Canonical event type names use dot-namespaced identifiers. `apcore.*` is reserved for core framework events; adapter packages use their own prefix (e.g., `apcore-mcp.*`).
0 commit comments