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
Move the integration from nanvix/openvmm#84 into NVX. The verification target remains OpenVMM microVM snapshot/restore.
Run on NVX published releases or manual dispatch, resolving the selected release to its exact openvmm submodule commit.
Use only runs-on: [specula], with trusted control code and manual dispatch on dev.
Retain native persistent model reuse, explicit interruption recovery, configurable verification resources, and curated report artifacts without automatically opening issues or PRs.
NVX development releases published using GITHUB_TOKEN need manual dispatch because they do not trigger another release workflow. Runner provisioning and NVX-scoped execution consent are documented in .github/specula/README.md.
No OpenVMM submodule pin, existing NVX workflow, or runner configuration is changed.
Run from microsoft/nvx on published releases or manual dispatch using the specula runner label. Resolve each NVX release to its pinned OpenVMM gitlink, retaining bounded execution, model reuse and explicit recovery.
Port the integration from nanvix/openvmm#84 without changing the OpenVMM submodule pin or runner configuration.
Replace the machine-specific controller and harness with a thin adapter around Specula's persistent CI workflow, provision a dedicated KVM runner, and verify the NVX-pinned OpenVMM revision directly.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Derive the virtualenv root from the configured binary path instead of creating a nested environment under its bin directory.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Pin the latest Specula main revision, use GPT-6 for the primary workflow and incremental agent, reserve GPT-5.5 for bug confirmation, and address bare caches explicitly under Git's safe repository policy.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
NVX execution consent is undocumented and unenforced
.github/specula/README.md:15
The PR says this README documents NVX-scoped execution consent, but this section only explains Copilot authentication. The workflow then supplies the token and starts Specula without any documented consent artifact or validation step. Document and enforce consent scoped to this repository and verification target, or correct the stated workflow requirements before enabling it.
Resume ignores selected release revision
.github/specula/ci.py:188
Resume uses only the supplied run ID and ignores the selected release revision. An operator can therefore select release B while resuming a run created for release A; Specula resumes A's saved configuration, but publish_report() records B's revision in result.json. Validate the saved run's source revision against revision, or derive the reported revision from the saved run, before publishing the result.
Incremental request skipped after initialization
.github/specula/ci.py:353
When no current model exists, an incremental release request is replaced with a single initialization run. Since --ci-init establishes the baseline rather than verifying it, the first selected release can be reported complete without an incremental verification pass. After successful initialization, run the requested incremental phase while preserving run/report identity, or fail explicitly until initialization is completed separately.
Reject unsafe identifiers and dirty tool installations, serialize shared state, replace stale reports, quote workflow input safely, and keep Copilot credentials out of the workflow environment.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preflight passes an empty before set, so this condition treats every existing run directory as newly created. On a persistent runner it selects the newest old run and copies that run's summary or verdict into a report labeled preflight, publishing stale verification evidence. Skip run selection for preflight reports.
Reject moved cached release tags, bind resumed runs to the selected revision, prevent stale preflight evidence, and provision explicit JDK and GitHub CLI prerequisites.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Virtual environment is reused after Specula commit changes
.github/specula/setup-runner.sh:49
After specula_commit changes, this reuses the existing virtual environment whenever the current imports still succeed. Because the install is editable, source code updates, but new dependency constraints and entry-point metadata are not installed; a pin update can therefore fail only in a later CI phase. Record the commit used to build the environment and recreate it whenever that marker differs from SPECULA_COMMIT, or reinstall unconditionally.
Use a minimum trusted commit and bounded semantic version range, preserve clean local descendants during provisioning, and report the exact runtime revision.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Require selected run directories and curated report files to remain regular descendants of the persistent run root before copying them into uploaded artifacts.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Publish only summary artifacts from Specula output
.github/specula/ci.py:391
This loop copies detailed ci-report.md, verdict, and resource data into the directory that the workflow uploads wholesale. The moved integration's publication boundary keeps detailed findings and evidence on the private state volume and publishes only summary.md plus the adapter-generated result.json. Limit copied Specula output to summary.md; result.json is already created below.
Require resume for unfinished native runs
.github/specula/ci.py:456
Before launching this non-resume command, the adapter never checks the native run store for an unfinished initialization or incremental run. A later request can start another expensive run instead of requiring the saved run ID, abandoning retained work and bypassing the explicit-resume recovery contract. Detect unfinished run receipts first and require the matching resume request.
The setup script installs at least the configured minimum Specula commit, Copilot CLI, GitHub CLI, JDK 21, Maven, Rust, cargo-nextest, Python environments, skills, and MCP configuration. A clean installed Specula revision is accepted when the configured minimum commit is its ancestor and its semantic version is within the configured compatibility range. This preserves reviewed local or upstream descendant commits instead of downgrading them; the exact SHA and version used by each request are recorded in `result.json`. Run `copilot login` as the dedicated runner account before starting the Actions service. Credentials are kept on the dedicated host and are not injected into the workflow environment. Specula and target commands share that dedicated account, so this integration executes only the release-selected OpenVMM commit after trusted-main ancestry validation; it is not a sandbox for untrusted pull-request code.
artifact_dir and the selected native run ID are published only after this blocking process exits. If Specula is interrupted or consumes the job's 720-minute timeout, this code never writes result.json or GITHUB_OUTPUT, so the always() upload steps have no report and operators lack the run ID required for the documented resume flow. Persist the run identity before launch and reserve a termination-safe step or time budget to publish the interrupted result.
Dedicated runner lacks protoc installation
.github/specula/setup-runner.sh:29
The dedicated runner does not install protoc, although the OpenVMM build scripts explicitly use /usr/bin/protoc (scripts/nvx_tools/benchmark_scripts/build-openvmm-kvm.sh:5) and the standard Linux runner installs protobuf-compiler (scripts/setup/setup-linux-runner.sh:403-408). A fresh Specula runner can therefore fail before exercising the snapshot/restore target. Add the compiler to this package list.
Exit code 2 is treated as success but still fails the job
.github/specula/ci.py:546
publish_report() and the emitted status both treat exit code 2 as a completed result, but returning 2 here still fails the GitHub Actions step. Normalize accepted completion codes to zero for the process exit while preserving the original Specula code in result.json.
Provisioning does not ensure Python 3.11+ is available
.github/specula/setup-runner.sh:31
Provisioning installs only the distribution's unversioned python3, but the pinned Specula requirements install github-copilot-sdk only on Python 3.11+, and line 71 imports copilot unconditionally. On hosts such as Ubuntu 22.04 that default to Python 3.10, the dependency is skipped and provisioning fails at the import check. Explicitly install and select Python 3.11+ for the virtual environment, or validate and document that prerequisite before setup begins.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Move the integration from nanvix/openvmm#84 into NVX. The verification target remains OpenVMM microVM snapshot/restore.
openvmmsubmodule commit.runs-on: [specula], with trusted control code and manual dispatch ondev.NVX development releases published using
GITHUB_TOKENneed manual dispatch because they do not trigger another release workflow. Runner provisioning and NVX-scoped execution consent are documented in.github/specula/README.md.No OpenVMM submodule pin, existing NVX workflow, or runner configuration is changed.