v1.0 Readiness
lidarslam_ros2 uses a fail-closed, machine-readable audit for the complete
v1.0 product goal. It covers the nine readiness dimensions in the
v0.9 roadmap plus the
stable v0.9 release-candidate publication gate.
Run the audit from a full git checkout:
python3 scripts/check_v1_readiness.py
For automation:
python3 scripts/check_v1_readiness.py --json
python3 scripts/check_v1_readiness.py --live --json
python3 scripts/check_v1_readiness.py --require-complete
The normal command reports an honest snapshot and exits zero when the
contract is valid, even while product work remains. It is deterministic and
does not contact remote services. --live additionally runs the read-only
NDT rosdistro, exact Humble/Jazzy main-channel package-manager, and
stable-release publication audits. --require-complete exits 1 unless every
gate is complete; if local evidence could otherwise produce READY, it
automatically runs those live audits before accepting the result. An invalid
contract, schema, evidence path, adoption ledger, version, git-tag query, or
untrustworthy live inspection exits 2.
For its GitHub API reads, the live audit uses an explicit GITHUB_TOKEN when
provided, otherwise it non-interactively reuses the active gh auth
credential. If neither is available, it keeps the anonymous read path and
fails closed when that quota is insufficient. Credentials are attached only
to the exact https://api.github.com origin, are never included in output,
and grant no publication authority; every request remains GET-only. A valid
incomplete child state remains product evidence rather than becoming an audit
error:
package-manager status is preserved as SOURCE_REF_MISSING, NOT_RUN,
RUNNING, FAILED, READY, or BLOCKED in both JSON and the human status
tuple.
Authoritative inputs
contracts/v1-readiness.jsonrecords the reviewed state, evidence paths, and explicit blockers for every gate.schemas/v1-readiness-contract-v1.schema.jsonprevents a gate, blocker, or evidence field from silently disappearing.schemas/v1-readiness-report-v1.schema.jsondefines the generated JSON report.evidence/external-first-map-validations.jsonremains the source of truth for the independent three-user gate.- Root
VERSIONand local immutable git tags are checked for the v0.9 publication gate. - The distribution gate includes the read-only
scripts/check_ndt_omp_release_readiness.pypreflight and itsndt-omp-release-readiness-v2.schema.jsoncontract. It distinguishes a locally reviewed candidate fromREADY_TO_TAG, partial publication, unanswered human review, exact-head check failure, and a completed rosdistro release. The initial and current reviewed results are preserved inndt-omp-release-preflight-2026-07-29.mdandndt-omp-release-progress-2026-07-30.md. The later release-review audit records the existing-package collision and upstream-first convergence plan. The exact patch/base/consumer inventory is independently checked byscripts/check_canonical_ndt_convergence.pyagainst the versionedcanonical-ndt-convergence-v1.jsoncontract. ItsREADY_FOR_UPSTREAM_REVIEWresult covers local review; the strongerREADY_FOR_DRAFT_PRresult additionally binds the exact candidate commit and current upstream/fork/branch/duplicate state. Only that fully green state emits a schema-bounddraft_pr_handoffcontaining the exact create-only branch, base/head SHAs, Draft title/body, and post-publication GET-only route; all lesser states emitnull. Push, PR creation, force-push, mark-ready, and merge authority remain false. Both statuses are technical evidence, not GitHub write authority. - The package-manager distribution evidence has a versioned
package-manager-install-v1.schema.jsoncontract and Humble/Jazzy clean-install/upgrade workflow. It remains an open gate until actual ROS testing/main packages produce passing artifacts. The dependency-onlyscripts/check_ros_apt_dependency_readiness.pypreflight first distinguishes missing testing binaries from dependencies that have synced to the normal channel. The livescripts/check_package_manager_release_readiness.pyaudit independently requires a successful workflow dispatch named for the exact immutable source tag, product version,mainapt channel, andclean-installmode. It resolves lightweight or annotated tags to a commit, binds the run head to that commit, and reports missing refs, running attempts, and failed attempts separately instead of collapsing them intoNOT_RUN. The parent v1 live audit accepts all six schema-valid child states and exposes the exact one aspublication_audits.package_manager_release_status. OnlyREADYcan close distribution; every other valid state produces an actionableNOT_READYreport instead of exit 2. Itspackage-manager-release-readiness-v1.schema.jsonreport requires both named-distro jobs to pass. - Release publication and first rollback evidence use the read-only
scripts/check_published_release.pyaudit andpublished-release-v1.schema.json. The audit cross-checks the stable release, tag commit, six attached assets, every file hash in the release bundle, and the current Humble/Jazzy GHCR version-tag digests.
The checker verifies that all ten expected gate IDs are present exactly once,
that evidence paths remain inside the repository and exist, that semantic
versions and tags align, and that the independent-user ledger passes its own
schema and uniqueness rules. Live evaluation additionally requires
ndt_omp_ros2 to report RELEASED and the exact main-channel Humble/Jazzy
package-manager run to report READY before the distribution gate can
complete. It also requires the stable release to report PUBLISHED before
the reliability or release-publication gates can complete. A tracked
complete state is therefore an audited attestation backed by named
evidence—not a substitute for rerunning the wider CI, real-data, or release
workflows cited by that evidence.
Current snapshot
The tracked state is NOT_READY: 8/10 gates complete.
The authenticated 2026-08-17 live audit also reports 8/10 with exact child
status tuple BLOCKED / SOURCE_REF_MISSING / PUBLISHED for NDT,
package-manager, and the current stable release. This is a valid incomplete
state, not malformed evidence.
| Open gate | Remaining proof |
|---|---|
| Distribution | ndt_omp_ros2 is BLOCKED: answer the lineage question and converge on canonical ndt_omp or a fully isolated fork before replacing rosdistro PRs #52949 and #52950; their current heads each have one failed stale-base rosdep check, so require a current-base green replacement, then wait for Jazzy RKO-LIO 0.3.2 main sync and run package-manager E2E |
| External adoption | Accept three distinct independent first-map validations; current ledger is 0/3 |
The reliability and release-publication gates closed when the immutable
v0.9.0 release
and its six recovery assets passed the
published-release audit.
This table is explanatory. The generated report and contract are
authoritative. Update a gate to complete only in the same reviewed change
that adds its final public evidence. Never remove an unmet gate or mark an
external action complete based on intent.