|
Aria 2.0.0
C++23 MVVM framework (C++20 minimum) — reactive, coroutine-first, ABI-layered
|
Development version: 2.0.0 (unreleased). This is a working priority list, not a release schedule. Changes marked Unreleased are implemented on this branch and are not part of the published release.
Aria is an MVVM framework supporting C++23, with C++20 as the minimum: reactive state, bindings, commands, collections, validation, async primitives, adapter contracts, and diagnostics. Its purpose is to share ViewModel code across UI hosts.
Keep core correctness and lifecycle contracts ahead of adapter expansion. Prefer changes justified by a failing workflow, a regression, an adoption gap, or a concrete consumer. AriaTools owns the flagship application; Aria owns regressions for its public APIs, adapters, HTTP protocol, and browser SDK.
These capabilities already exist and should not be scheduled again:
Release history is in CHANGELOG.md. Earlier roadmap rationale remains available in this file's Git history.
The correctness audit produced the following repairs and regression coverage. They remain unreleased until the release verification gate below is complete.
Release gate: full host CTest with HTTP and native adapters, the document API check, and focused sanitizer checks on changed concurrency paths. Record actual results and any unavailable platform coverage before marking a release. HTTP protocol 2 and worker-capacity behavior require migration notes in the changelog and HTTP guide.
The Doxygen target (ARIA_BUILD_DOCS=ON, aria_docs) and Pages workflow build and validate the reference, including public API coverage and local links. GitHub Pages uses the Actions deployment source. Every push to main builds the reference, checks the generated pages, and publishes at the canonical API reference, linked from both READMEs and the documentation index. A deployment is successful only when the workflow's build and deploy jobs both pass and the public site loads.
Use the generated reference unless an actual reader need requires more.
ObservableListModel supplies changing QComboBox options through the common owning list event protocol. bind_combo_box_selection preserves selection by stable item ID, supports duplicate display labels and empty selection, and has real-control regressions for insert/remove/move/replace. The adapter also supports integer index binding and BindingEngine::bind_int_converted for non-contiguous enum values. See the Qt guide.
Retain C++20 as the minimum and validate opt-in C++23 builds. The available Apple and Android standard libraries do not provide a common C++23 feature set that justifies raising the minimum. See the C++23 evaluation for compiler/link probes and limits.
Trigger: a real SwiftUI consumer. First test Swift/C++ interop with the existing templates, coroutines, callbacks, and ABI-facing interfaces. Choose between direct interop and Objective-C++ bridging from that evidence before adding an adapter.
Trigger: in-browser C++ computation for which the HTTP adapter is unsuitable, such as local CAD, media processing, or ML. Start with one workload and a small interop experiment. The HTTP adapter already serves a browser UI backed by a separate C++ process.
Trigger: shared-service interference between independent app roots, parallel in-process tests, or teardown isolation failures. Consolidate ownership of existing dispatcher, logger, and event-bus services only as needed. Container is already caller-owned; HTTP dispatch repairs use the existing binding boundary. Acceptance is reproducible isolation and teardown tests.
Trigger: one object must occupy multiple independent logical rows and the per-occurrence identity is needed beyond row indices. Repeated shared handles now receive ItemChanged for every valid occurrence with frozen indices; they no longer rely on a last-index sentinel. A new public slot-ID API remains conditional on a concrete consumer that needs identity independent of both object identity and position.
Trigger: an actual binary adapter or plugin needs a boundary beyond the existing IProperty and cross-library reactive tests. Extend the cross-dylib acceptance tests for that compiler/platform combination before making broader ABI claims.
Trigger: TraceSink and GraphInspector cannot resolve a real report of “who wrote this property.” Prototype call-site attribution against that case, keep diagnostics gated, and measure that release builds pay no added cost.
Check implementation and tests before adding an item. Keep one current status, a concrete problem or trigger, and an executable acceptance condition. Move released work to the changelog; use Git history for extended rationale. Update this list when evidence changes, without turning conditional work into a plan.