Skip to content

Beta Readiness Review

Date: 2026-05-06

This is a review gate, not a tag operation. The current tree has enough evidence for an honest core-runtime beta candidate review, but a human release owner must still choose the tag, run release preparation on the exact candidate commit, and copy the explicit deferrals into release notes. This is not an adapter, hardware, package-registry, or 1.0 readiness claim.

Verdict

Question Verdict
Are historical stabilization sweeps closed? Yes. Runtime/API/docs/release stabilization is complete; schema v2 implementation remains deferred beyond the design note, and a full editor/LSP extension remains beyond the setup guide.
Can TopoExec honestly prepare a core-runtime beta candidate? Yes, if release notes keep the deferred features and alpha/experimental surfaces explicit and CI/release-prep evidence is attached for the exact candidate commit.
Can TopoExec claim adapter/ecosystem beta readiness? No. Telemetry adapters are dependency-free mapping/text previews, and the ROS 2 surface is only a dependency-free fake-boundary preview; concrete ROS 2 client-library packages, production OpenTelemetry/Prometheus, stable C ABI, native Python bindings, sandboxed/stable plugin ecosystems, graph-driven plugin discovery, external Perfetto, and package-registry surfaces remain deferred or draft-only.
Can TopoExec claim hard real-time or external scheduling guarantees? No. Fixed-rate/thread-pool behavior is cooperative and observable; OS RT policy, CPU affinity guarantees, independent lane threads, hard preemption, and advanced starvation aging remain future work.

Recommended public line remains v0.2.0-alpha.0 until a human explicitly opens a beta tag. If a beta is opened, describe it as a core runtime beta, not an adapter or ecosystem beta.

Prompt-to-artifact checklist

Requirement Evidence Result
Public API matrix updated docs/61-api/public-api.md classifies targets, installed headers, stable/mixed/experimental surfaces, Adapter SDK v0, examples, and CLI JSON compatibility. Covered
Deprecation policy docs/61-api/public-api.md and docs/43-ci-build-release-tools/versioning.md now define pre-1.0 deprecation expectations for stable-v0.2, mixed, experimental, schema, and CLI JSON surfaces. Covered
No accidental unstable/internal headers installed tests/policy/check_no_adapter_deps.py, policy_no_core_adapter_deps, policy_architecture_self_test, and docs/21-architecture/architecture-guardrails.md. Covered
Runtime invariants updated docs/21-architecture/runtime-invariants.md maps edge visibility, feedback, scheduler, async, metrics, trace, config transactions, observers, parser limits, and architecture-boundary invariants to tests/smokes. Covered
Scheduler/thread/task/channel semantics documented docs/21-architecture/scheduler.md, docs/21-architecture/concurrency.md, docs/21-architecture/async-tasks.md, docs/11-user-guide/channels.md, docs/21-architecture/runtime-semantics.md. Covered
Known limitations honest docs/43-ci-build-release-tools/current-baseline.md, docs/43-ci-build-release-tools/release-checklist.md, docs/43-ci-build-release-tools/release-progression.md, README known limitations, and this review. Covered
Unit and semantic tests tests/test_common.cpp, tests/test_graph.cpp, tests/test_channel.cpp, tests/test_state.cpp, tests/test_runtime.cpp, tests/test_stress.cpp, and ./scripts/agent_check.sh. Covered
Golden tests tests/golden/* and ./scripts/goal_check.sh golden / quick. Covered
Docs tests tests/docs/check_docs.py, docs_command_smoke, and required docs map entries. Covered
Package tests tests/cmake/package_smoke.cmake, runtime-only option smoke, CPack smoke, package draft smoke, and ./scripts/goal_check.sh package. Covered
Sanitizer tests ./scripts/goal_check.sh sanitizer runs ASAN+UBSAN; TSAN remains non-blocking policy evidence, not hidden. Covered with explicit TSAN limitation
Fuzz tests tests/fuzz/fuzz_graph_inputs.py, optional fuzz_graph_inputs, and ./scripts/goal_check.sh fuzz. Covered as smoke; longer campaigns optional
Stress tests tests/test_stress.cpp, tests/stress/check_stress_workloads.py, scripts/stress_smoke.sh, and ./scripts/goal_check.sh stress. Covered as bounded smoke; longer soak optional
Metric schema docs/62-schemas-protocols/metrics.md, include/topoexec/runtime/metric_schema.hpp, metric descriptors, validation tests, and metrics goldens. Covered
Trace schema docs/62-schemas-protocols/trace-events.md, RuntimeTraceEvent, trace schema version, trace/Chrome goldens, and runtime tests. Covered
Diagnostics registry docs/62-schemas-protocols/diagnostics.md, include/topoexec/runtime/diagnostics.hpp, src/diagnostics.cpp, graph tests, and CLI strict diagnostics smokes. Covered
Getting started / cookbook / API overview docs/01-quickstart/getting-started.md, docs/11-user-guide/cookbook.md, docs/61-api/api-overview.md, and docs map smoke. Covered
Community contribution readiness Root CONTRIBUTING.md, docs/44-coding-standards/contributing.md, root CODE_OF_CONDUCT.md, issue templates, PR template, and community_readiness_smoke. Covered; docs/templates only, not a maintainer SLA or adapter implementation claim
Release notes and changelog CHANGELOG.md, docs/43-ci-build-release-tools/release-checklist.md, docs/43-ci-build-release-tools/release-runbook.md, docs/43-ci-build-release-tools/release-progression.md, scripts/release_prepare.sh. Covered
Adapters/plugin previews only unless tested docs/12-integrations/adapter-boundaries.md, docs/12-integrations/adapters/otel.md, docs/12-integrations/adapters/prometheus.md, docs/12-integrations/adapters/ros2.md, docs/12-integrations/plugin-loader.md, adapter SDK/telemetry preview headers, Python/plugin preview smokes, adapter package smokes, and architecture policy. Covered; OTel/Prometheus/ROS 2/Python/plugin-loader are dependency-free, CLI-backed, or trusted-native previews; concrete production adapters/native bindings/sandboxed plugins deferred
No core dependency pollution CMake target boundaries plus policy checks keep runtime free of YAML/CLI/adapter dependencies. Covered
Install smoke / package-manager drafts / artifact smoke ./scripts/goal_check.sh package, packaging/vcpkg/*, packaging/conan/*, CPack smoke, and release-prep artifact rehearsal. Covered; package registries unpublished
Benchmark output stable / no overclaims docs/24-testing/performance-baselines.md, benchmarks/*.yaml, tests/bench/check_bench_contract.py, and ./scripts/goal_check.sh bench. Covered; thresholds opt-in per machine
Parser limits / no dynamic plugin default GraphInputLimits, defensive-input docs/tests/fuzz smoke, architecture guardrails, plugin-loader docs, and plugin option smoke. Covered; plugin loading stays default-off and explicit
Schema v2 boundary docs/33-specs-rfcs/schema-v2-notes.md, docs/33-specs-rfcs/schema-v1.md, docs/43-ci-build-release-tools/versioning.md, schema_v1_contract_smoke, and docs map smoke. Covered as design boundary only; no v2 loader or migration CLI
Editor/schema UX docs/41-development-tools/editor-schema.md, installed CLI schema discovery package smoke, editor_schema_ux_smoke, and docs map smoke. Covered as setup guide and JSON diagnostics; no editor extension or LSP server
Hierarchical graph contract docs/11-user-guide/hierarchical-graphs.md, schema-v1 docs, graph/runtime tests, plan JSON hierarchy metadata, and invariant coverage. Covered as compile-time namespace expansion, not runtime nesting
Graph template contract docs/11-user-guide/graph-templates.md, schema-v1 docs, template example YAML, graph/schema tests, and docs smoke. Covered as strict parameter substitution, not runtime interpretation
CompositeLoop solver-style policy contract docs/11-user-guide/composite-loops.md, schema-v1 docs, runtime/graph tests, metrics/trace docs, and invariant coverage. Covered as bounded in-process residual reporting and partial-output policy, not external solver plugins
Goal ledger docs/31-planning-roadmap/goals/backlog.md, docs/31-planning-roadmap/goals/status.md, and this review. Covered

Release And Adoption Refresh

The next-stage evidence adds release/adoption readiness, a synthetic dogfood pilot, stable-v0.2 compatibility harness, package matrix hardening, bounded reliability tiers, and adoption feedback/triage checks. See core-runtime-beta-candidate.md for the current review surface. This does not change the human release-owner gate and does not create adapter/ecosystem beta readiness.

Required beta-candidate gate

Before any beta tag, attach fresh evidence for the exact candidate commit:

git status --short
git diff --check
./scripts/agent_check.sh
cmake --build build --target topoexec_format_check
./scripts/goal_check.sh quick
./scripts/goal_check.sh docs
./scripts/goal_check.sh package
./scripts/goal_check.sh policy
./scripts/goal_check.sh python
./scripts/goal_check.sh plugins
./scripts/goal_check.sh fuzz
./scripts/goal_check.sh stress
./scripts/goal_check.sh bench
TOPOEXEC_BUILD_DIR=build-asan-ubsan TOPOEXEC_SANITIZER_MODE=address-undefined ./scripts/goal_check.sh sanitizer
./scripts/release_prepare.sh --version <beta-tag>

Optional but recommended for a beta tag:

TOPOEXEC_STRESS_PROFILE=soak TOPOEXEC_STRESS_DURATION_SECONDS=60 ./scripts/stress_smoke.sh
TOPOEXEC_FUZZER_ENGINE=STANDALONE ./scripts/fuzz_smoke.sh

TSAN remains non-blocking unless release governance changes it. If TSAN is not blocking for a beta tag, record that decision in release notes.

Explicitly deferred from beta scope unless completed first

  • Production OpenTelemetry SDK/network exporter and Prometheus HTTP/scrape service. Current telemetry targets cover only dependency-free mapping/text previews.
  • Real ROS 2 client-library package beyond the fake-boundary preview.
  • Stable C ABI beyond the ABI-version-0 preview, native Python bindings beyond the CLI-backed automation preview, sandboxed/stable plugin ecosystems beyond the trusted-native loader preview, actual schema v2 implementation/migration tooling beyond the design note, and a full editor extension or LSP server beyond the setup guide.
  • Maintainer SLA, private vulnerability-reporting process, and community forum/support channels beyond the checked-in contribution templates and code-of-conduct surface.

Human release decision

A beta tag is allowed only if the release owner accepts the remaining deferred scope and the exact candidate commit passes the required beta-candidate gate. If that acceptance is not explicit, keep the next public tag on the documented alpha line.