Workflow and obligation inventory
Source inspection: 2026-11-01. Read with scope and limitations. This is a source snapshot, not a live required-check export. Every job below is owned operationally by the repository maintainer; no .github/CODEOWNERS is present to establish delegated path ownership. Matrix entries are build legs, not independent policy requirements.
Benchmark Workflow (benchmark.yml)
Source: benchmark.yml.
Triggers and input defaults: {"workflow_dispatch":{"inputs":{"ref":{"default":"main","required":false},"save-results":{"type":"boolean","default":false,"required":false}}},"issue_comment":{"types":["created"]}}.
Concurrency: {"group":"benchmark-${{ github.event.issue.number || github.ref }}","cancel-in-progress":true}. Permissions: {"contents":"write"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| benchmark.yml / check-trigger | github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '/benchmark') | [] | ubuntu-latest / 60 | single |
| benchmark.yml / benchmark | always() && <br>(github.event_name == 'workflow_dispatch' || <br> (github.event_name == 'issue_comment' && needs.check-trigger.outputs.should-run == 'true'))<br> | check-trigger | ubuntu-latest / 20 | single |
| benchmark.yml / report | always() && <br>needs.benchmark.result != 'cancelled' &&<br>(github.event_name == 'workflow_dispatch' || <br> (github.event_name == 'issue_comment' && needs.check-trigger.outputs.should-run == 'true'))<br> | ["check-trigger","benchmark"] | ubuntu-latest / 60 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- check-trigger: Check comment author: source script block;
see linked job; Get PR details: source script block;see linked job[ifsteps.check.outputs.should-run == 'true']. - benchmark: Determine checkout ref: source script block;
see linked job; Build native package:pnpm --filter @verter/native build; Build benchmark package:pnpm --filter @verter/benchmark install; Run benchmarks: source script block;pnpm --silent --filter @verter/benchmark bench:json > benchmark-output.json; Save results to branch: source script block;see linked job[ifinputs.save-results == true]. - report: Generate PR comment: source script block;
see linked job; Post PR comment:const comment = `${{ steps.generate-comment.outputs.comment }}`;<br><br>await github.rest.issues.createComment({<br> owner: context.repo.owner,<br> repo: context.repo.repo,<br> issue_number: ${{ needs.check-trigger.outputs.pr-number }},<br> body: comment<br>});[ifgithub.event_name == 'issue_comment' && needs.check-trigger.outputs.pr-number]; Create check run: source script block;see linked job[ifgithub.event_name == 'issue_comment' && needs.check-trigger.outputs.pr-sha]; Summary:echo "${{ steps.generate-comment.outputs.comment }}" >> $GITHUB_STEP_SUMMARY.
CI (ci.yml)
Source: ci.yml.
Triggers and input defaults: {"push":{"branches":"main"},"pull_request":null}.
Concurrency: {"group":"ci-${{ github.ref }}","cancel-in-progress":true}. Permissions: {"contents":"read","checks":"write"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| ci.yml / detect-changes | default | [] | ubuntu-latest / 10 | single |
| ci.yml / rust-fmt | needs.detect-changes.outputs.rust == 'true' | detect-changes | ubuntu-latest / 15 | single |
| ci.yml / proto-fmt | needs.detect-changes.outputs.proto == 'true' | detect-changes | ubuntu-latest / 15 | single |
| ci.yml / rust-clippy | needs.detect-changes.outputs.rust == 'true' | detect-changes | ubuntu-latest / 40 | single |
| ci.yml / rust-build-configs | needs.detect-changes.outputs.rust == 'true' | detect-changes | ubuntu-latest / 95 | single |
| ci.yml / rust-test-build | needs.detect-changes.outputs.rust == 'true' | detect-changes | ubuntu-latest / 95 | single |
| ci.yml / rust-test | needs.detect-changes.outputs.rust == 'true' | ["detect-changes","rust-test-build"] | ubuntu-latest / 95 | {"fail-fast":false,"matrix":{"shard":[1,2,3,4]}} |
| ci.yml / rust-observe | needs.detect-changes.outputs.rust == 'true' | detect-changes | ubuntu-latest / 35 | single |
| ci.yml / rust-providers-live | needs.detect-changes.outputs.providers == 'true' | detect-changes | ubuntu-latest / 95 | single |
| ci.yml / compiler-contracts | needs.detect-changes.outputs.compiler_contracts == 'true' | detect-changes | ubuntu-latest / 95 | {"fail-fast":false,"matrix":{"group":["core","compiler","session","session-observe"]}} |
| ci.yml / bf2-authoritative | needs.detect-changes.outputs.bf2 == 'true' | detect-changes | ubuntu-latest / 95 | single |
| ci.yml / js-build-test | needs.detect-changes.outputs.js == 'true' | detect-changes | ubuntu-latest / 30 | single |
| ci.yml / sfc-projection | needs.detect-changes.outputs.sfc_projection == 'true' | detect-changes | ubuntu-latest / 45 | {"fail-fast":false,"matrix":{"shard":[1,2]}} |
| ci.yml / architecture-health | needs.detect-changes.outputs.arch == 'true' | detect-changes | ubuntu-latest / 10 | single |
| ci.yml / svelte-oracle | needs.detect-changes.outputs.svelte_oracle == 'true' | detect-changes | ubuntu-latest / 30 | single |
| ci.yml / svelte-conformance | needs.detect-changes.outputs.svelte_conformance == 'true' | detect-changes | ubuntu-latest / 30 | single |
| ci.yml / svelte-client-smokes | needs.detect-changes.outputs.svelte_client_smokes == 'true' | detect-changes | ubuntu-latest / 15 | single |
| ci.yml / svelte-compiler-benchmark | needs.detect-changes.outputs.svelte_perf == 'true' | detect-changes | ubuntu-latest / 25 | single |
| ci.yml / playground-test | needs.detect-changes.outputs.playground == 'true' | ["detect-changes","wasm-build","build-native-node"] | ubuntu-latest / 25 | single |
| ci.yml / wasm-build | needs.detect-changes.outputs.wasm_artifact == 'true' | detect-changes | ubuntu-latest / 35 | single |
| ci.yml / wasm-observe-test | needs.detect-changes.outputs.wasm == 'true' | detect-changes | ubuntu-latest / 45 | single |
| ci.yml / browser-host | needs.detect-changes.outputs.wasm == 'true' | ["detect-changes","wasm-build"] | ubuntu-latest / 40 | single |
| ci.yml / build-lsp-debug | needs.detect-changes.outputs.vscode == 'true' || needs.detect-changes.outputs.editor_lsp == 'true' || needs.detect-changes.outputs.dx == 'true' | detect-changes | ubuntu-latest / 40 | single |
| ci.yml / build-vscode-e2e | needs.detect-changes.outputs.vscode == 'true' || needs.detect-changes.outputs.editor_lsp == 'true' | detect-changes | ubuntu-latest / 35 | single |
| ci.yml / editor-neutral-lsp | needs.detect-changes.outputs.editor_lsp == 'true' | ["detect-changes","build-lsp-debug","build-vscode-e2e"] | ubuntu-latest / 25 | single |
| ci.yml / vscode-e2e | needs.detect-changes.outputs.vscode == 'true' || needs.detect-changes.outputs.editor_lsp == 'true' | ["detect-changes","build-lsp-debug","build-vscode-e2e"] | ubuntu-latest / 45 | {"fail-fast":false,"matrix":"${{ fromJSON(needs.build-vscode-e2e.outputs.matrix) }}"} |
| ci.yml / build-native-node | needs.detect-changes.outputs.native_artifact == 'true' | detect-changes | ubuntu-latest / 40 | single |
| ci.yml / native-test | needs.detect-changes.outputs.native == 'true' | ["detect-changes","build-native-node"] | ubuntu-latest / 40 | single |
| ci.yml / native-observe-test | needs.detect-changes.outputs.native == 'true' | detect-changes | ubuntu-latest / 60 | single |
| ci.yml / transport-route-equivalence | needs.detect-changes.outputs.transport == 'true' | ["detect-changes","wasm-build","build-native-node"] | ubuntu-latest / 40 | single |
| ci.yml / dx-harness-hermetic | needs.detect-changes.outputs.dx == 'true' | ["detect-changes","build-lsp-debug"] | ubuntu-latest / 30 | single |
| ci.yml / build-editor-lsp | needs.detect-changes.outputs.editors == 'true' | detect-changes | ubuntu-latest / 40 | single |
| ci.yml / editor-contracts | needs.detect-changes.outputs.editors == 'true' | ["detect-changes","build-editor-lsp"] | ubuntu-latest / 45 | single |
| ci.yml / jetbrains-plugin | needs.detect-changes.outputs.jetbrains == 'true' | ["detect-changes"] | ubuntu-latest / 60 | single |
| ci.yml / release-check | needs.detect-changes.outputs.release == 'project' | detect-changes | callee / default | ./.github/workflows/release.yml inputs={"dry_run":true} |
| ci.yml / release-ide-check | needs.detect-changes.outputs.release == 'ide' | detect-changes | callee / default | ./.github/workflows/release-ide.yml inputs={"dry_run":true} |
| ci.yml / ci-success | always() | ["detect-changes","release-check","release-ide-check","rust-fmt","proto-fmt","rust-clippy","rust-build-configs","rust-test-build","rust-test","rust-observe","rust-providers-live","compiler-contracts","bf2-authoritative","js-build-test","sfc-projection","architecture-health","svelte-oracle","svelte-conformance","svelte-client-smokes","svelte-compiler-benchmark","playground-test","wasm-build","build-vscode-e2e","editor-neutral-lsp","vscode-e2e","native-test","native-observe-test","wasm-observe-test","transport-route-equivalence","dx-harness-hermetic","build-lsp-debug","build-native-node","build-editor-lsp","editor-contracts","jetbrains-plugin","browser-host"] | ubuntu-latest / 5 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- detect-changes: Record the tree this pull request run tests:
echo "::notice title=ci-tested::pull=$PULL tree=$(git rev-parse 'HEAD^{tree}')"[ifgithub.event_name == 'pull_request']; Audit the lane selection against the tree:node scripts/ci-impact.mjs --audit; Reuse the merged pull request's CI:node scripts/release-proof.mjs --landed --sha "$GITHUB_SHA"[ifgithub.event_name == 'push']; Compose the lane gates from the path filters and the crate graph: source script block;node scripts/ci-impact.mjs --changed-files "$files" \. - rust-fmt:
cargo fmt --all -- --check. - proto-fmt:
pnpm proto:check. - rust-clippy:
cargo clippy --workspace --all-targets -- -D warnings. - rust-build-configs: Check the release configuration:
cargo check --workspace --release; Check the shipped configuration (debug-assertions off):cargo check --workspace --all-targets --profile no-debug-assertions; Run the shipped-configuration contract (debug-assertions off):cargo nextest run --no-fail-fast -p verter_shipped_cfg_contract \<br> --cargo-profile no-debug-assertions; Clippy (wasm32-unknown-unknown):cargo clippy --target wasm32-unknown-unknown -p verter_wasm -- -D warnings; Check the instrumented wasm32 build:cargo check --target wasm32-unknown-unknown -p verter_wasm --features semantic-observe; Clippy (transport-equivalence feature):cargo clippy -p verter_session --tests --features transport-authoritative -- -D warnings. - rust-test-build: Anti-binary-growth integration-test layout:
node scripts/check-integration-test-layout.mjs; Build the shared Rust test archive: source script block;node scripts/compile-fixture-artifacts.mjs archive --workspace --archive-file artifacts/rust-nextest-archive.tar.zst ; node scripts/run-cached.mjs -- 'node scripts/compile-fixture-artifacts.mjs archive --workspace --archive-file artifacts/rust-nextest-archive.tar.zst'; Verify the provider CI partition:node scripts/provider-ci.mjs verify --archive-file artifacts/rust-nextest-archive.tar.zst. - rust-test: Fetch locked Cargo dependencies:
cargo fetch --locked; Run core Rust tests from the shared archive: source script block;node scripts/ci-junit-metadata.mjs snapshot-env --out "$RUNNER_TEMP/nextest-env.json" ; cargo "${nextest_argv[@]}"; Locate nextest JUnit report: source script block;see linked job[ifalways()]. - rust-observe: Check the instrumentation runner:
node --test scripts/observe-lane.test.mjs; Verify host output and audit capture:node scripts/observe-lane.mjs smoke. - rust-providers-live: Build the language-shared and plugin prerequisites:
pnpm --filter @verter/language-shared --filter @verter/typescript-plugin build; Run serial tsgo provider tests:node scripts/provider-ci.mjs run tsgo. - compiler-contracts: Verify compiler contracts lane and cache ownership:
node --test scripts/compiler-ci-lane-selftest.mjs; Run workspace compile contracts:node scripts/compile-contracts.mjs --group ${{ matrix.group }} 2>&1 | tee compile-contracts-${{ matrix.group }}.log; Verify generated Svelte artifacts:cargo test --package verter_compiler --test main cases::svelte_generated_artifacts_freshness::generated_svelte_artifacts_match_their_authoritative_inputs -- --exact[ifmatrix.group == 'compiler']; verter_compiler default feature-off build + lib tests (isolated):cargo build -p verter_compiler<br>cargo test -p verter_compiler --lib[ifmatrix.group == 'compiler']. - bf2-authoritative: Build BF2 TypeScript declaration prerequisites:
pnpm run build:ts; Provision BF2's offline oracle npm cache:node packages/framework-conformance-harness/scripts/provision-oracle-npm-cache.mjs; Verify BF2 CI lane contract:node --test scripts/bf2-ci-lane-selftest.mjs; Run exact BF2 authoritative inventory: source script block;node scripts/ci-junit-metadata.mjs snapshot-env --out "$RUNNER_TEMP/nextest-env.json" ; node scripts/bf2-authoritative.mjs. - js-build-test: Svelte oracle goldens in sync with pinned compiler:
node scripts/gen-svelte-goldens.mjs --check; Build TS packages:pnpm run build:ts; Run tests:pnpm --filter @verter/types exec vitest --run --reporter=default --reporter=junit --outputFile=../../test-results/vitest-junit.xml; vue-vscode unit specs (discovered, NOT enumerated):pnpm vitest run packages/vue-vscode/src; Public type contracts (@verter/component-meta):pnpm --filter @verter/component-meta run test:types; Rust build-tooling helper self-tests (sccache-env, publish set):pnpm run test:scripts:ci; CI aggregate completeness:node scripts/check-ci-aggregate.mjs<br>node --test scripts/check-ci-aggregate.test.mjs; Binary distribution guards (platform packages + release wiring):pnpm vitest run packages/binary-launcher packages/verter-lsp packages/verter-mcp; Verify package tarballs:node scripts/verify-packages.mjs. - sfc-projection: Build TS packages:
pnpm run build:ts; Verify the sfc-projection nodes (shard 1/2): source script block;see linked job[ifmatrix.shard == 1]; Verify the sfc-projection nodes (shard 2/2):CARGO_INCREMENTAL=1 pnpm run test:sfc-projection[ifmatrix.shard == 2]. - architecture-health: ARH0 verify (responsibility and debt inventory):
node tests/architecture-health/ARH0/verify.mjs; ARH0 dirty twins:node --test tests/architecture-health/ARH0/arh0.test.mjs; ARH1 verify (dependency contracts + cutover register):node tests/architecture-health/ARH1/verify.mjs; ARH1 dirty twins:node --test tests/architecture-health/ARH1/arh1.test.mjs; ARH2 verify (characterization + complexity measurements):node tests/architecture-health/ARH2/verify.mjs; ARH2 dirty twins:node --test tests/architecture-health/ARH2/arh2.test.mjs; ARH4 verify (host and session lifecycle cutover):node tests/architecture-health/ARH4/verify.mjs; ARH4 dirty twins:node --test tests/architecture-health/ARH4/arh4.test.mjs; ARH5 verify (compiler facade cutover):node tests/architecture-health/ARH5/verify.mjs; ARH5 dirty twins:node --test tests/architecture-health/ARH5/arh5.test.mjs; ARH7 verify (VS Code activation cutover):node tests/architecture-health/ARH7/verify.mjs; ARH7 dirty twins:node --test tests/architecture-health/ARH7/arh7.test.mjs. - svelte-oracle: Svelte name-parity corpus in sync with pinned compiler:
node scripts/gen-svelte-name-parity-corpus.mjs --check; Svelte oracle harness (live):cargo test -p verter_compiler --features svelte-oracle. - svelte-conformance: Run consolidated Rust conformance tests:
cargo test --no-fail-fast -p verter_svelte_conformance --features conformance-tests --lib --bin verter_svelte_conformance --test main -- --test-threads=4; Conformance corpus matches the manifest:cargo run -p verter_svelte_conformance -- check; Conformance goldens in sync with pinned compiler:node scripts/gen-svelte-goldens.mjs --conformance --check. - svelte-client-smokes: Run Svelte client behavioral smokes:
shopt -s failglob<br>export LC_ALL=C<br>pnpm exec vitest run test/svelte-client*-smoke.spec.ts. - svelte-compiler-benchmark: Verify Svelte benchmark contract:
pnpm --filter @verter/benchmark exec vitest run src/svelte-perf-contract.spec.ts; Verify benchmark corpus against official Svelte goldens:node scripts/gen-svelte-goldens.mjs --check<br>cargo test -p verter_compiler --test main \<br> cases::svelte_client_emit_topology::svelte_performance_manifest_is_oracle_proven_and_representative \<br> -- --exact. - playground-test: Playground tests:
pnpm --filter @verter/playground test; Playground WASM compiler spec:pnpm --filter @verter/playground test:wasm; Build TS packages:pnpm run build:ts; Sync WASM into the playground:pnpm --filter @verter/playground run sync:wasm; Build the playground:pnpm --filter @verter/playground exec vite build. - wasm-build: Build WASM (bindgen):
pnpm --filter @verter/wasm run build:bindgen; Build @verter/wasm TypeScript:pnpm --filter @verter/wasm run build:ts; Smoke test WASM (bindgen output):node -e "const fs = require('fs'); const wasm = fs.readFileSync('packages/wasm/wasm/verter_wasm_bg.wasm'); console.log('WASM size:', wasm.length, 'bytes'); if (wasm.length < 1000) throw new Error('WASM too small');"; Optimize WASM (wasm-opt):pnpm --filter @verter/wasm run opt:wasm[ifgithub.event_name != 'pull_request']; Smoke test WASM (optimised):node -e "const fs = require('fs'); const wasm = fs.readFileSync('packages/wasm/wasm/verter_wasm_bg.wasm'); console.log('WASM size:', wasm.length, 'bytes'); if (wasm.length < 1000) throw new Error('WASM too small');"[ifgithub.event_name != 'pull_request']; Verify committed carrier fixtures against the built WASM:node packages/playground/scripts/capture-wasm-carrier-fixtures.mjs --check; WASM JavaScript-boundary lane:node scripts/wasm-js-boundary-lane.mjs --exhaustive; Build TS packages:pnpm run build:ts; Test @verter/wasm:pnpm --filter @verter/wasm test. - wasm-observe-test: Build instrumented WASM (semantic-observe):
pnpm --filter @verter/wasm run build:observe; Verify the module captures: source script block;node --input-type=module -e "import { readFileSync } from 'node:fs'; const m = await import('./packages/wasm/wasm/verter_wasm.js'); m.initSync({ module: readFileSync('packages/wasm/wasm/verter_wasm_bg.wasm') }); const a = m.captureAvailability(); if (a !== 'Available') { console.error('::error::instrumented module reports capture ' + a); process.exit(1); }"; Build TS packages:pnpm run build:ts; Test @verter/wasm (capture available):pnpm --filter @verter/wasm test. - browser-host: Ensure a C linker:
command -v cc >/dev/null || (apt-get update -qq && apt-get install -y -qq --no-install-recommends gcc libc6-dev); Run the browser-host-domain gate:node scripts/browser-host-gate.mjs --skip-build. - build-lsp-debug: Build verter-lsp, relay shim, DX baseline and MCP server (debug):
cargo build -p verter_lsp -p verter_relay_shim -p verter_dx_baseline -p verter_mcp. - build-vscode-e2e: Test VS Code E2E harness units:
pnpm --filter verter-vscode test:e2e:lib:unit; Test VS Code acceptance units:pnpm --filter verter-vscode test:e2e:acceptance:unit; Prepare VS Code E2E artifacts:pnpm --filter verter-vscode prepare:e2e:ts; Derive VS Code E2E route matrix:echo "matrix=$(node packages/vue-vscode/out-test/e2e/printCiMatrix.js --tier=pr)" >> "$GITHUB_OUTPUT". - editor-neutral-lsp: Make editor integration binaries executable:
chmod +x target/debug/verter-lsp target/debug/verter-relay-shim target/debug/verter-mcp; Build editor-neutral contract packages:pnpm --filter "@verter/dx-harness..." build; Run tsgo and real shared-tsgo contract:pnpm --filter @verter/dx-harness test:editor-neutral-lsp. - vscode-e2e: Make editor integration binaries executable:
chmod +x target/debug/verter-lsp target/debug/verter-relay-shim target/debug/verter-mcp; Resolve VS Code host cache key:test_electron=$(node -p "require('./packages/vue-vscode/node_modules/@vscode/test-electron/package.json').version")<br>echo "key=vscode-host-${RUNNER_OS}-${RUNNER_ARCH}-${E2E_VSCODE_VERSION}-test-electron-${test_electron}" >> "$GITHUB_OUTPUT"<span v-pre>; Acquire VS Code ${{ env.E2E_VSCODE_VERSION }}: source script block;</span>see linked job<span v-pre>; Run E2E tests (shard ${{ matrix.shard }}/${{ matrix.shard_count }}):</span>echo "Routes: ${E2E_ROUTES}"<br>xvfb-run -a pnpm --filter verter-vscode test:e2e:run. - build-native-node: Build native binding (release):
pnpm run build:native. - native-test: Build TS packages:
pnpm run build:ts; Test @verter/native:pnpm --filter @verter/native test; Test @verter/unplugin:pnpm --filter @verter/unplugin test; Native-eval @verter/component-meta:pnpm --filter @verter/component-meta test:native; Provision the oracle npm cache (framework-conformance-harness):node packages/framework-conformance-harness/scripts/provision-oracle-npm-cache.mjs; Workspace package suites no other lane runs: source script block;pnpm --no-bail --filter @verter/benchmark --filter @verter/component-meta --filter @verter/framework-conformance-harness --filter @verter/language-shared --filter @verter/lsp-test-client --filter @verter/proto --filter @verter/svelte-runtime-tests --filter @verter/type-ir --filter @verter/typeinfo --filter @verter/vue-conformance-oracle run test. - native-observe-test: Build instrumented native binding (semantic-observe, debug):
pnpm --filter @verter/native build:observe:debug; Verify the binding captures:node -e "const a = require('./packages/native/index.js').captureAvailability(); if (a !== 'Available') { console.error('::error::instrumented binding reports capture ' + a); process.exit(1); }"; Build TS packages:pnpm run build:ts; Test @verter/native (capture available):pnpm --filter @verter/native test; Test @verter/typeinfo (capture available):pnpm --filter @verter/typeinfo test. - transport-route-equivalence: Syntax-check the WASM transport probe:
node --check packages/wasm/scripts/probe-transport-surface.mjs; Syntax-check the native transport probe:node --check packages/native/scripts/probe-transport-surface.mjs; Execute native and WASM transport comparisons: source script block;cargo test -p verter_session --lib --features transport-authoritative \. - dx-harness-hermetic: Make debug LSP binaries executable:
chmod +x target/debug/verter-lsp target/debug/verter-relay-shim target/debug/verter-mcp target/debug/verter-dx-baseline; Build DX harness:pnpm --filter "@verter/dx-harness..." build; Build the tsserver carrier-membership plugin:pnpm --filter @verter/language-shared --filter @verter/typescript-plugin build; DX harness hermetic unit suite:pnpm --filter @verter/dx-harness test:unit; Strict differential baseline gate:node scripts/dx/dx-ci-gate.mjs; Real-provider auto-import parity gate:pnpm --filter @verter/dx-harness exec vitest --run test/providerResolveParity.integration.test.ts; Verter raw-LSP spine smoke:node scripts/dx/dx-lsp-smoke.mjs; Verter raw-LSP spine smoke refuses a non-probe plugin path: source script block;see linked job. - build-editor-lsp: Build verter-lsp (release):
cargo build -p verter_lsp --release. - editor-contracts: Make verter-lsp executable:
chmod +x target/release/verter-lsp; Install neutral-client fixture dependencies:corepack enable<br>pnpm install --frozen-lockfile<br>npm ci --ignore-scripts --prefix editors/nvim/tests/fixtures/real-client<br>pnpm --filter @verter/lsp-test-client build; Install pinned Helix with checksum verification: source script block;see linked job[continue-on-error=true]; Provision the shipped Helix configuration and server: source script block;see linked job[ifsteps.helix-1.outcome == 'success'] [continue-on-error=true]; Prove Vue and Svelte select only the executable Verter server: source script block;see linked job[ifsteps.helix-2.outcome == 'success'] [continue-on-error=true]; Test the exported rootless Helix shipping plan:cargo test -p verter-editor-client --example helix_plan[ifsteps.helix-3.outcome == 'success'] [continue-on-error=true]; Drive the parsed Helix shipping plan over stdio: source script block;node --test scripts/editor-contracts/plan-contract.test.mjs ; cargo run --quiet -p verter-editor-client --example helix_plan -- "$bin" > "$plan" ; node scripts/editor-contracts/run-plan-smoke.mjs --plan="$plan" --root="$root"[ifsteps.helix-4.outcome == 'success'] [continue-on-error=true]; Build the volt (wasm32-wasip1):cargo build --manifest-path extensions/lapce/Cargo.toml --target wasm32-wasip1 --release[continue-on-error=true]; Run host-target unit tests (Lapce):cargo test --manifest-path extensions/lapce/Cargo.toml[ifsteps.lapce-1.outcome == 'success'] [continue-on-error=true]; Clippy (wasm32-wasip1):cargo clippy --manifest-path extensions/lapce/Cargo.toml --target wasm32-wasip1 -- -D warnings[ifsteps.lapce-2.outcome == 'success'] [continue-on-error=true]; Rustfmt check (Lapce):cargo fmt --check[ifsteps.lapce-3.outcome == 'success'] [continue-on-error=true]; Drive the exact Lapce launch plan over stdio: source script block;node --test scripts/editor-contracts/plan-contract.test.mjs ; cargo run --quiet --manifest-path extensions/lapce/Cargo.toml --example contract_plan -- "$root" "$bin" > "$plan" ; node scripts/editor-contracts/run-plan-smoke.mjs --plan="$plan" --root="$root"[ifsteps.lapce-4.outcome == 'success'] [continue-on-error=true]; Build the extension (wasm32-wasip2):cargo build --manifest-path extensions/zed/Cargo.toml --target wasm32-wasip2 --release[continue-on-error=true]; Run host-target unit tests (Zed):cargo test --manifest-path extensions/zed/Cargo.toml[ifsteps.zed-1.outcome == 'success'] [continue-on-error=true]; Clippy (wasm32-wasip2):cargo clippy --manifest-path extensions/zed/Cargo.toml --target wasm32-wasip2 -- -D warnings[ifsteps.zed-2.outcome == 'success'] [continue-on-error=true]; Rustfmt check (Zed):cargo fmt --check[ifsteps.zed-3.outcome == 'success'] [continue-on-error=true]; Drive the exact Zed launch plan over stdio: source script block;node --test scripts/editor-contracts/plan-contract.test.mjs ; cargo run --quiet --manifest-path extensions/zed/Cargo.toml --example contract_plan -- "$root" "$bin" > "$plan" ; node scripts/editor-contracts/run-plan-smoke.mjs --plan="$plan" --root="$root"[ifsteps.zed-4.outcome == 'success'] [continue-on-error=true]; Plenary verdict guard:node --test scripts/editor-contracts/plenary-outcome-guard.test.mjs[ifsteps.neovim-2.outcome == 'success'] [continue-on-error=true]; Run plenary busted suite: source script block;see linked job[ifsteps.neovim-3.outcome == 'success'] [continue-on-error=true]; Editor contracts verdict: source script block;see linked job[ifalways()]. - jetbrains-plugin: Run the jetbrains-product gate (JVM tests, verifier, packaging):
node scripts/jetbrains-gate.mjs. - release-check: reusable
./.github/workflows/release.yml; control/artifact steps; see linked source. - release-ide-check: reusable
./.github/workflows/release-ide.yml; control/artifact steps; see linked source. - ci-success: Verify no dependency failed: source script block;
see linked job.
Corpus Gate (corpus-gate.yml)
Source: corpus-gate.yml.
Triggers and input defaults: {"schedule":[{"cron":"0 3 * * 1"}],"workflow_dispatch":{"inputs":{"corpus_repo":{"type":"string","default":"","required":false},"corpus_ref":{"type":"string","default":"main","required":false},"corpus_subdir":{"type":"string","default":".","required":false},"sample_size":{"type":"string","default":"40","required":false},"fast_mode":{"type":"boolean","default":false,"required":false}}}}.
Concurrency: {"group":"corpus-gate-${{ github.ref }}","cancel-in-progress":true}. Permissions: {"contents":"read"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| corpus-gate.yml / build | default | [] | ubuntu-latest / 60 | single |
| corpus-gate.yml / route | default | build | ubuntu-latest / 60 | {"fail-fast":false,"matrix":{"route":["tsserver","tsgo","shared-tsgo"]}} |
| corpus-gate.yml / summary | always() && inputs.corpus_repo != '' | route | ubuntu-latest / 60 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- build: Build verter-lsp:
cargo build -p verter_lsp; Build verter-relay-shim (shared-tsgo route):cargo build -p verter_relay_shim; Build TypeScript plugin (tsserver route):pnpm --filter "@verter/typescript-plugin..." build; Build DX harness:pnpm --filter "@verter/dx-harness..." build; Stage the fan-out artifact: source script block;see linked job. - route: Restore the prebuilt binaries and dists: source script block;
see linked job; Run the corpus gate for this route:pnpm --filter @verter/dx-harness test:corpus-gate. - summary: Build DX harness:
pnpm --filter "@verter/dx-harness..." build; Merge shard receipts and report actual-vs-budget:node packages/dx-harness/scripts/corpus-gate-summary.mjs \<br> "${{ runner.temp }}/corpus-gate-receipts" \<br> "tsserver,tsgo,shared-tsgo" \<br> "${{ env.CORPUS_GATE_BUDGET_MS }}".
DX Extended (dx-extended.yml)
Source: dx-extended.yml.
Triggers and input defaults: {"schedule":[{"cron":"0 5 * * 1"}],"workflow_dispatch":{"inputs":{"external_corpus_repo":{"type":"string","default":"","required":false},"external_corpus_ref":{"type":"string","default":"main","required":false},"external_corpus_subdir":{"type":"string","default":".","required":false}}}}.
Concurrency: {"group":"dx-extended-${{ github.ref }}","cancel-in-progress":true}. Permissions: {"contents":"read"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| dx-extended.yml / extension-host-dx | default | [] | ubuntu-latest / 60 | single |
| dx-extended.yml / corpus-sweep-dx | default | [] | ubuntu-latest / 60 | single |
| dx-extended.yml / external-corpus-dx | github.event_name == 'workflow_dispatch' && inputs.external_corpus_repo != '' | [] | ubuntu-latest / 60 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- extension-host-dx: Build DX harness:
pnpm --filter "@verter/dx-harness..." build; Extension-host DX unit suite:pnpm --filter verter-vscode test:e2e:dx:unit. - corpus-sweep-dx: Build differential-baseline bridge:
cargo build -p verter_dx_baseline; Build verter-lsp:cargo build -p verter_lsp; Build DX harness:pnpm --filter "@verter/dx-harness..." build; Raw-LSP corpus sweep:pnpm --filter @verter/dx-harness exec vitest --run test/dxCorpusSweep.run.test.ts. - external-corpus-dx: Build differential-baseline bridge:
cargo build -p verter_dx_baseline; Build DX harness:pnpm --filter "@verter/dx-harness..." build; External-corpus DX differential:node scripts/dx/dx-ci-gate.mjs.
Editor packages (editor-packages.yml)
Source: editor-packages.yml.
Triggers and input defaults: {"workflow_call":null,"pull_request":{"paths":[".github/workflows/editor-packages.yml",".github/workflows/release-ide.yml","scripts/package-editor-integrations*.mjs","extensions/lapce/**","extensions/zed/**","editors/nvim/**","editors/helix/**","crates/verter-editor-client/**","packages/vue-vscode/package.json","rust-toolchain.toml","LICENSE"]}}.
Concurrency: none declared. Permissions: {"contents":"read"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| editor-packages.yml / package | default | [] | ubuntu-latest / 25 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- package: Test packaging:
node --test scripts/package-editor-integrations.test.mjs; Build Lapce volt and Zed extension:cargo build --locked --manifest-path extensions/lapce/Cargo.toml --target wasm32-wasip1 --release<br>cargo build --locked --manifest-path extensions/zed/Cargo.toml --target wasm32-wasip2 --release; Package editor integrations:node scripts/package-editor-integrations.mjs --output /tmp/editor-integrations.
Integration Test (integration-test.yml)
Source: integration-test.yml.
Triggers and input defaults: {"workflow_dispatch":{"inputs":{"source":{"type":"choice","default":"artifact","required":true,"options":["artifact","npm"]},"dist-tag":{"type":"string","default":"alpha","required":false},"projects":{"type":"string","default":"all","required":false}}},"workflow_call":{"inputs":{"source":{"type":"string","required":true},"dist-tag":{"type":"string","default":"alpha","required":false}}},"issue_comment":{"types":["created"]}}.
Concurrency: {"group":"integration-test-${{ github.event.issue.number || github.ref }}","cancel-in-progress":true}. Permissions: {"contents":"read","issues":"write","pull-requests":"write","checks":"write"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| integration-test.yml / check-trigger | github.event_name == 'issue_comment' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/integration') | [] | ubuntu-latest / 45 | single |
| integration-test.yml / setup | always() &&<br>(github.event_name != 'issue_comment' || <br> (needs.check-trigger.result != 'skipped' && needs.check-trigger.outputs.should-run == 'true'))<br> | ["check-trigger"] | ubuntu-latest / 45 | single |
| integration-test.yml / test-project | always() && needs.setup.result == 'success' | ["setup"] | ubuntu-latest / 30 | {"fail-fast":false,"matrix":{"project":[{"name":"vuetify","repo":"vuetifyjs/vuetify","branch":"master","build-cmd":"pnpm --filter vuetify build && pnpm --filter vuetifyjs.com build","test-cmd":"","e2e-cmd":"","package-manager":"pnpm","bundler":"vite"},{"name":"oku-primitives","repo":"oku-ui/primitives","branch":"main","build-cmd":"pnpm run build","test-cmd":"pnpm run test","e2e-cmd":"","package-manager":"pnpm","bundler":"vite"},{"name":"hoppscotch","repo":"hoppscotch/hoppscotch","branch":"main","build-cmd":"pnpm --filter @hoppscotch/selfhost-web build","test-cmd":"pnpm --filter @hoppscotch/common test","e2e-cmd":"","package-manager":"pnpm","bundler":"vite"},{"name":"element-plus","repo":"element-plus/element-plus","branch":"dev","build-cmd":"pnpm run build","test-cmd":"","e2e-cmd":"","package-manager":"pnpm","bundler":"rollup"},{"name":"coreui","repo":"coreui/coreui-free-vue-admin-template","branch":"main","build-cmd":"npm run build","test-cmd":"","e2e-cmd":"","package-manager":"npm","bundler":"vite"},{"name":"balancer-frontend-v2","repo":"balancer/frontend-v2","branch":"develop","build-cmd":"npm run build:withouttokenlists","test-cmd":"npm run test:unit","e2e-cmd":"","package-manager":"npm","bundler":"vite"},{"name":"shadcn-vue","repo":"unovue/shadcn-vue","branch":"dev","build-cmd":"pnpm --filter shadcn-vue build","test-cmd":"pnpm --filter shadcn-vue test","e2e-cmd":"","package-manager":"pnpm","bundler":"vite"},{"name":"slidev","repo":"slidevjs/slidev","branch":"main","build-cmd":"pnpm -r --filter=\"./packages/**\" --parallel run build","test-cmd":"pnpm run test","e2e-cmd":"DEV_LOG=/tmp/slidev-dev.log; pnpm -C cypress/fixtures/basic run dev > \"$DEV_LOG\" 2>&1 & DEV_PID=$!; sleep 15 && npx cypress run --headless; EXIT=$?; echo \"--- Dev server log ---\"; cat \"$DEV_LOG\" 2>/dev/null || true; kill $DEV_PID 2>/dev/null; wait $DEV_PID 2>/dev/null; exit $EXIT","package-manager":"pnpm","bundler":"vite"},{"name":"zyronon-douyin","repo":"zyronon/douyin","branch":"master","build-cmd":"pnpm run build","test-cmd":"","e2e-cmd":"","package-manager":"pnpm","bundler":"vite"},{"name":"primevue","repo":"primefaces/primevue","branch":"master","build-cmd":"pnpm run build:metadata && pnpm run build:resolver && pnpm run build:core && pnpm run build:lib","test-cmd":"","e2e-cmd":"","package-manager":"pnpm","bundler":"rollup"},{"name":"ant-design-vue","repo":"vueComponent/ant-design-vue","branch":"main","build-cmd":"npm run build","test-cmd":"npm run test","e2e-cmd":"","package-manager":"npm","bundler":"vite"},{"name":"nuxt-ui","repo":"nuxt/ui","branch":"v4","build-cmd":"pnpm nuxt-module-build prepare && pnpm build","test-cmd":"pnpm test","e2e-cmd":"","package-manager":"pnpm","bundler":"nuxt"},{"name":"vue-vben-admin","repo":"vbenjs/vue-vben-admin","branch":"main","build-cmd":"pnpm build","test-cmd":"","e2e-cmd":"pnpm run test:e2e","playwright-browsers":"chromium","package-manager":"pnpm","bundler":"vite"},{"name":"vant","repo":"youzan/vant","branch":"main","build-cmd":"pnpm build","test-cmd":"pnpm test","e2e-cmd":"","package-manager":"pnpm","bundler":"vite"},{"name":"naive-ui","repo":"tusen-ai/naive-ui","branch":"main","build-cmd":"pnpm build:package","test-cmd":"pnpm vitest run","e2e-cmd":"","package-manager":"pnpm","bundler":"vite"},{"name":"tdesign-vue-next","repo":"Tencent/tdesign-vue-next","branch":"develop","build-cmd":"pnpm run build:vue","test-cmd":"pnpm run test:vue","e2e-cmd":"","package-manager":"pnpm","bundler":"vite"},{"name":"radix-vue","repo":"unovue/radix-vue","branch":"v2","build-cmd":"pnpm --filter reka-ui build","test-cmd":"pnpm --filter reka-ui test","e2e-cmd":"","package-manager":"pnpm","bundler":"vite"},{"name":"vitepress","repo":"vuejs/vitepress","branch":"main","build-cmd":"pnpm build","test-cmd":"pnpm test:unit","e2e-cmd":"pnpm test:e2e-dev","playwright-browsers":"chromium","package-manager":"pnpm","bundler":"vite"},{"name":"vue-router","repo":"vuejs/router","branch":"main","build-cmd":"pnpm -C packages/router build","test-cmd":"pnpm -C packages/router test:unit","e2e-cmd":"","package-manager":"pnpm","bundler":"vite"},{"name":"npmx","repo":"npmx-dev/npmx.dev","branch":"main","build-cmd":"pnpm run build","test-cmd":"pnpm run test:unit","e2e-cmd":"pnpm run test:browser","playwright-browsers":"chromium","package-manager":"pnpm","bundler":"nuxt","shallow":false}]}} |
| integration-test.yml / summary | always() && needs.setup.result == 'success' | ["setup","test-project"] | ubuntu-latest / 45 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- check-trigger: Check comment trigger: source script block;
see linked job. - setup: Determine source: source script block;
see linked job; Build native (production):pnpm run build:native[ifsteps.source.outputs.source == 'artifact']; Build unplugin:pnpm --filter @verter/unplugin build[ifsteps.source.outputs.source == 'artifact']; Build nuxt module:pnpm --filter @verter/nuxt build[ifsteps.source.outputs.source == 'artifact']; Create local registry tarball: source script block;see linked job[ifsteps.source.outputs.source == 'artifact']; Save source info:echo "source=${{ steps.source.outputs.source }}" >> source-info.txt<br>echo "dist_tag=${{ steps.source.outputs.dist-tag }}" >> source-info.txt. - test-project: Read source info:
source source-info.txt<br>echo "source=$source" >> $GITHUB_OUTPUT<br>echo "dist-tag=$dist_tag" >> $GITHUB_OUTPUT; Configure hoist pattern for Verter: source script block;see linked job[ifmatrix.project.package-manager == 'pnpm']; Normalize packageManager and engines.pnpm fields: source script block;node -e "; Install project dependencies: source script block;node -e " ; pnpm install --no-frozen-lockfile ; npm install --legacy-peer-deps; Baseline build: source script block;see linked job[continue-on-error=true]; Baseline tests: source script block;see linked job[continue-on-error=true]; Install Verter packages (from tarballs): source script block;node -e " ; npm install --legacy-peer-deps $INSTALL_PKGS ; node -e " ; npm install --legacy-peer-deps[ifsteps.source.outputs.source == 'artifact']; Install Verter packages (from npm): source script block;pnpm add $PNPM_W @verter/unplugin@${{ steps.source.outputs.dist-tag }} $EXTRA_PKGS ; npm install --legacy-peer-deps @verter/unplugin@${{ steps.source.outputs.dist-tag }} $EXTRA_PKGS[ifsteps.source.outputs.source == 'npm']; Replace vue plugin with verter in build configs: source script block;pnpm install --no-frozen-lockfile ; npm install --legacy-peer-deps; Verify Verter plugin replacement: source script block;see linked job; Verter build: source script block;see linked job[continue-on-error=true]; Verter tests: source script block;see linked job[continue-on-error=true]; Resolve Playwright version:echo "version=$(npx playwright --version | sed -n 's/^Version //p' | tail -1)" >> "$GITHUB_OUTPUT"[ifmatrix.project.playwright-browsers] [continue-on-error=true]; Install Playwright browsers:npx playwright install ${{ matrix.project.playwright-browsers }} --with-deps[ifmatrix.project.playwright-browsers && steps.playwright-cache.outputs.cache-hit != 'true'] [continue-on-error=true]; Install Playwright system dependencies:npx playwright install-deps ${{ matrix.project.playwright-browsers }}[ifsteps.playwright-cache.outputs.cache-hit == 'true'] [continue-on-error=true]; Verter E2E tests: source script block;see linked job[ifmatrix.project.e2e-cmd != ''] [continue-on-error=true]; Generate project report: source script block;see linked job[ifalways()]; Add to job summary:cat report-${{ matrix.project.name }}.md >> $GITHUB_STEP_SUMMARY[ifalways()]. - summary: Generate aggregate summary: source script block;
see linked job; Add to workflow summary:cat integration-test-summary.md >> $GITHUB_STEP_SUMMARY; Post PR comment (if triggered from PR): source script block;see linked job[ifgithub.event_name == 'issue_comment'].
LSP Benchmark (lsp-benchmark.yml)
Source: lsp-benchmark.yml.
Triggers and input defaults: {"workflow_dispatch":{"inputs":{"ref":{"default":"main","required":false},"save-results":{"type":"boolean","default":false,"required":false}}},"issue_comment":{"types":["created"]}}.
Concurrency: {"group":"lsp-benchmark-${{ github.event.issue.number || github.ref }}","cancel-in-progress":true}. Permissions: {"contents":"write"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| lsp-benchmark.yml / check-trigger | github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '/lsp-benchmark') | [] | ubuntu-latest / 60 | single |
| lsp-benchmark.yml / lsp-benchmark | always() &&<br>(github.event_name == 'workflow_dispatch' ||<br> (github.event_name == 'issue_comment' && needs.check-trigger.outputs.should-run == 'true'))<br> | check-trigger | ${{ matrix.runner }} / 45 | {"fail-fast":false,"matrix":{"include":[{"runner":"ubuntu-latest","os-key":"linux","os-label":"Linux"},{"runner":"macos-13","os-key":"macos","os-label":"macOS"},{"runner":"windows-latest","os-key":"windows","os-label":"Windows"}]}} |
| lsp-benchmark.yml / report | always() &&<br>needs.lsp-benchmark.result != 'cancelled' &&<br>(github.event_name == 'workflow_dispatch' ||<br> (github.event_name == 'issue_comment' && needs.check-trigger.outputs.should-run == 'true'))<br> | ["check-trigger","lsp-benchmark"] | ubuntu-latest / 60 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- check-trigger: Check comment author: source script block;
see linked job; Get PR details: source script block;see linked job[ifsteps.check.outputs.should-run == 'true']. - lsp-benchmark: Determine checkout ref: source script block;
see linked job; Build @verter/lsp-test-client:pnpm --filter @verter/lsp-test-client build; Build LSP binary (release):cargo build --release -p verter_lsp; Clone PrimeVue:git clone --depth 1 https://github.com/primefaces/primevue.git test-project; Run LSP benchmark: source script block;pnpm --silent --filter @verter/benchmark bench:lsp:json \. - report: Determine checkout ref: source script block;
see linked job; Generate report: source script block;node scripts/lsp-benchmark-report.mjs \; Save results to branch: source script block;see linked job[ifgithub.event_name == 'workflow_dispatch' && inputs.save-results == true]; Post PR comment:const comment = `${{ steps.generate-report.outputs.comment }}`;<br><br>await github.rest.issues.createComment({<br> owner: context.repo.owner,<br> repo: context.repo.repo,<br> issue_number: ${{ needs.check-trigger.outputs.pr-number }},<br> body: comment<br>});[ifgithub.event_name == 'issue_comment' && needs.check-trigger.outputs.pr-number]; Create check run: source script block;see linked job[ifgithub.event_name == 'issue_comment' && needs.check-trigger.outputs.pr-sha]; Summary:cat lsp-benchmark-comment.md >> "$GITHUB_STEP_SUMMARY".
Component Meta Benchmark (meta-benchmark.yml)
Source: meta-benchmark.yml.
Triggers and input defaults: {"workflow_dispatch":{"inputs":{"ref":{"default":"main","required":false}}},"issue_comment":{"types":["created"]}}.
Concurrency: {"group":"meta-benchmark-${{ github.event.issue.number || github.ref }}","cancel-in-progress":true}. Permissions: {"contents":"write"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| meta-benchmark.yml / check-trigger | github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '/meta-benchmark') | [] | ubuntu-latest / 60 | single |
| meta-benchmark.yml / resolve-target | always() &&<br>(github.event_name == 'workflow_dispatch' ||<br> (github.event_name == 'issue_comment' && needs.check-trigger.outputs.should-run == 'true'))<br> | check-trigger | ubuntu-latest / 60 | single |
| meta-benchmark.yml / build-verter | always() &&<br>(github.event_name == 'workflow_dispatch' ||<br> (github.event_name == 'issue_comment' && needs.check-trigger.outputs.should-run == 'true'))<br> | ["check-trigger","resolve-target"] | ubuntu-latest / 30 | single |
| meta-benchmark.yml / expected-baseline | always() &&<br>(github.event_name == 'workflow_dispatch' ||<br> (github.event_name == 'issue_comment' && needs.check-trigger.outputs.should-run == 'true'))<br> | ["check-trigger","resolve-target"] | ubuntu-latest / 45 | single |
| meta-benchmark.yml / benchmark | always() &&<br>(github.event_name == 'workflow_dispatch' ||<br> (github.event_name == 'issue_comment' && needs.check-trigger.outputs.should-run == 'true'))<br> | ["check-trigger","resolve-target","build-verter","expected-baseline"] | ubuntu-latest / 45 | {"fail-fast":false,"matrix":{"backend":["vue-component-meta","verter","tsserver","tsgo"],"scenario":["single_cold","single_warm","repo_first_pass","repo_warm_second_pass"]}} |
| meta-benchmark.yml / report | always() &&<br>needs.benchmark.result != 'cancelled' &&<br>(github.event_name == 'workflow_dispatch' ||<br> (github.event_name == 'issue_comment' && needs.check-trigger.outputs.should-run == 'true'))<br> | ["check-trigger","resolve-target","benchmark"] | ubuntu-latest / 60 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- check-trigger: Check comment author: source script block;
see linked job; Get PR details: source script block;see linked job[ifsteps.check.outputs.should-run == 'true']. - resolve-target: Resolve latest nuxt-ui SHA: source script block;
see linked job. - build-verter: Determine checkout ref: source script block;
see linked job; Build native package:pnpm --filter @verter/native build; Build component-meta:pnpm --filter @verter/component-meta build. - expected-baseline: Determine checkout ref: source script block;
see linked job; Prepare pinned nuxt-ui checkout:pnpm --filter @verter/benchmark bench:meta:ui:setup -- --ref=${{ needs.resolve-target.outputs.target-sha }}; Build vue-component-meta expected artifacts:pnpm --filter @verter/benchmark bench:meta:ui -- \<br> --backends=vue-component-meta \<br> --expected=vue-component-meta \<br> --expected-dir=packages/benchmark/benchmark-results/meta-ui-expected \<br> --build-expected-only. - benchmark: Determine checkout ref: source script block;
see linked job; Prepare pinned nuxt-ui checkout:pnpm --filter @verter/benchmark bench:meta:ui:setup -- --ref=${{ needs.resolve-target.outputs.target-sha }}; Prewarm tsgo:pnpm --filter @verter/benchmark bench:meta:ui:json -- \<br> --backends=tsgo \<br> --scenarios=single_cold \<br> --limit=1 \<br> --repeats=1 \<br> --expected=none \<br> --output-dir=packages/benchmark/benchmark-results/meta-ui-prewarm > /dev/null[ifmatrix.backend == 'tsgo']; Run meta-ui benchmark: source script block;pnpm --filter @verter/benchmark bench:meta:ui -- \. - report: Determine checkout ref: source script block;
see linked job; Generate aggregate report: source script block;pnpm --filter @verter/benchmark bench:meta:ui:report -- \; Post PR comment:const comment = `${{ steps.generate-report.outputs.comment }}`;<br>await github.rest.issues.createComment({<br> owner: context.repo.owner,<br> repo: context.repo.repo,<br> issue_number: ${{ needs.check-trigger.outputs.pr-number }},<br> body: comment<br>});[ifgithub.event_name == 'issue_comment' && needs.check-trigger.outputs.pr-number]; Create check run: source script block;see linked job[ifgithub.event_name == 'issue_comment' && needs.check-trigger.outputs.pr-sha]; Summary:cat meta-ui-benchmark-comment.md >> "$GITHUB_STEP_SUMMARY".
Nightly (nightly.yml)
Source: nightly.yml.
Triggers and input defaults: {"schedule":[{"cron":"0 6 * * *"}],"workflow_dispatch":null}.
Concurrency: {"group":"nightly","cancel-in-progress":true}. Permissions: {"contents":"write"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| nightly.yml / compiler-contracts | default | [] | ubuntu-latest / 95 | {"fail-fast":false,"matrix":{"group":["core","compiler","session","session-observe"]}} |
| nightly.yml / build-and-deploy | default | [] | ubuntu-latest / 60 | single |
| nightly.yml / rust-observe | default | [] | ubuntu-latest / 95 | single |
| nightly.yml / rust-scale-tier | default | [] | ubuntu-latest / 90 | single |
| nightly.yml / rust-coverage-lane | default | [] | ubuntu-latest / 75 | {"fail-fast":false,"matrix":{"include":[{"lane":"core"},{"lane":"tsgo","require":"VERTER_REQUIRE_TSGO"},{"lane":"tsserver","require":"VERTER_REQUIRE_TSSERVER"}]}} |
| nightly.yml / rust-coverage | ${{ !cancelled() }} | rust-coverage-lane | ubuntu-latest / 10 | single |
| nightly.yml / svelte-compiler-benchmark | default | [] | ubuntu-latest / 60 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- compiler-contracts: Verify compiler contracts lane and cache ownership:
node --test scripts/compiler-ci-lane-selftest.mjs; Run workspace compile contracts:node scripts/compile-contracts.mjs --group ${{ matrix.group }} 2>&1 | tee compile-contracts-${{ matrix.group }}.log; Verify generated Svelte artifacts:cargo test --package verter_compiler --test main cases::svelte_generated_artifacts_freshness::generated_svelte_artifacts_match_their_authoritative_inputs -- --exact[ifmatrix.group == 'compiler']; verter_compiler default feature-off build + lib tests (isolated):cargo build -p verter_compiler<br>cargo test -p verter_compiler --lib[ifmatrix.group == 'compiler']. - build-and-deploy: Build WASM:
pnpm --filter @verter/wasm build; Smoke test WASM:node -e "const fs = require('fs'); const wasm = fs.readFileSync('packages/wasm/wasm/verter_wasm_bg.wasm'); console.log('WASM size:', wasm.length, 'bytes'); if (wasm.length < 1000) throw new Error('WASM too small');"; Upload WASM to nightly release: source script block;see linked job; Update nightly manifest: source script block;node -e "; Cleanup old nightly assets: source script block;see linked job. - rust-observe: Fetch locked Cargo dependencies:
cargo fetch --locked; Run the instrumentation lane:node scripts/ci-junit-metadata.mjs snapshot-env --out "$RUNNER_TEMP/nextest-env.json"<br>argv="$(node scripts/observe-lane.mjs args)"<br>echo "argv=$argv" >> "$GITHUB_OUTPUT"<br>node scripts/observe-lane.mjs run; Locate nextest JUnit report:found=$(find target -type f -path '*/nextest/ci/junit.xml' -print -quit)<br>if [ -z "$found" ]; then<br> echo "::error::nextest ci junit.xml not found — the test report would be silently empty"<br> exit 1<br>fi<br>echo "path=$found" >> "$GITHUB_OUTPUT"[ifalways()]. - rust-scale-tier: Run the nightly scale tier:
node scripts/compile-fixture-artifacts.mjs prepare --workspace<br>cargo nextest run --workspace --no-fail-fast -E "$(node scripts/provider-ci.mjs filter core)". - rust-coverage-lane: Build the language-shared and plugin prerequisites:
pnpm --filter @verter/language-shared --filter @verter/typescript-plugin build[ifmatrix.lane != 'core']; Generate coverage: source script block;node scripts/ci-junit-metadata.mjs snapshot-env --out "$RUNNER_TEMP/nextest-env.json" ; cargo llvm-cov clean --workspace ; node scripts/compile-fixture-artifacts.mjs prepare --workspace || status=1 ; cargo "${nextest_argv[@]}" || status=1 ; cargo llvm-cov report --lcov --output-path "lcov-$LANE.info" || status=1. - rust-coverage: Merge lane coverage:
cat lanes/lcov-core.info lanes/lcov-tsgo.info lanes/lcov-tsserver.info > lcov.info; Fail unless every lane succeeded:echo "::error::a coverage lane did not succeed: ${{ needs.rust-coverage-lane.result }}"<br>exit 1[ifneeds.rust-coverage-lane.result != 'success']. - svelte-compiler-benchmark: Verify benchmark corpus against official Svelte goldens:
node scripts/gen-svelte-goldens.mjs --check; Build native binding (release):pnpm run build:native; Compare Verter and official Svelte compilers:mkdir -p "$GITHUB_WORKSPACE/artifacts"<br>pnpm --filter @verter/benchmark bench:svelte:compiler -- \<br> --json \<br> --require-immutable \<br> --out="$GITHUB_WORKSPACE/artifacts/svelte-compiler-benchmark.json"; Ensure benchmark artifact exists: source script block;see linked job[ifalways()].
Perf Gate (perf-gate.yml)
Source: perf-gate.yml.
Triggers and input defaults: {"schedule":[{"cron":"0 5 * * *"}],"workflow_dispatch":{"inputs":{"baseline-ref":{"default":"","required":false},"samples":{"default":"7","required":false}}},"pull_request":{"paths":["packages/benchmark/src/perf/**","packages/benchmark/baselines/**","test-corpora/perf/**",".github/workflows/perf-gate.yml"]}}.
Concurrency: {"group":"perf-gate-${{ github.ref }}","cancel-in-progress":true}. Permissions: {"contents":"read"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| perf-gate.yml / perf-harness-correctness | github.event_name == 'pull_request' | [] | ubuntu-latest / 60 | single |
| perf-gate.yml / perf-gate-nightly | github.event_name != 'pull_request' | [] | ubuntu-latest / 60 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- perf-harness-correctness: Build and verify perf harness imports:
pnpm --filter @verter/lsp-test-client build<br>pnpm --filter @verter/benchmark exec node --import tsx -e 'await import("./src/perf/lsp-driver.ts")'; Perf harness unit specs: source script block;pnpm --filter @verter/benchmark exec vitest run src/perf/stats.spec.ts src/perf/gate.spec.ts src/perf/baseline.spec.ts src/perf/corpus.spec.ts src/perf/lsp-driver.spec.ts src/perf/lsp-binary-resolution.spec.ts src/perf/workloads.spec.ts src/perf/run.spec.ts src/perf/axis-a-child.spec.ts src/perf/audit-attribution.spec.ts src/perf/vize-bench.spec.ts; Corpus manifest hash check: source script block;see linked job. - perf-gate-nightly: Validate samples floor: source script block;
see linked job; Build and verify perf harness imports:pnpm --filter @verter/lsp-test-client build<br>pnpm --filter @verter/benchmark exec node --import tsx -e 'await import("./src/perf/lsp-driver.ts")'; Resolve baseline ref:pnpm --filter @verter/benchmark exec node --import tsx src/perf/baseline.ts; Build candidate (native + verter-tsc + verter_lsp):pnpm --filter @verter/native build:observe<br>cargo build --release -p verter_tsc -p verter_lsp<br>mkdir -p artifacts/candidate-bin<br>cp target/release/verter-tsc artifacts/candidate-bin/<br>cp target/release/verter-lsp artifacts/candidate-bin/; Build baseline (resolved ref — native + verter-tsc + verter_lsp): source script block;pnpm install --frozen-lockfile ; pnpm --filter @verter/native build:observe ; pnpm run build:native; Run self-referential perf gate: source script block;pnpm --filter @verter/benchmark exec node --import tsx src/perf/gate.ts \; Ensure a perf-gate artifact exists: source script block;see linked job[ifalways()].
Perturbation (perturbation.yml)
Source: perturbation.yml.
Triggers and input defaults: {"schedule":[{"cron":"30 2 * * 0"}],"workflow_dispatch":null,"pull_request":{"paths":[".github/workflows/perturbation.yml",".github/actions/nextest-evidence/**","scripts/perturbation.mjs","scripts/ci-junit-metadata.mjs","scripts/lib/hermetic-list.mjs","scripts/manifests/perturbation.json","scripts/manifests/ci-hermetic-candidates.json"]},"push":{"branches-ignore":["main"],"paths":[".github/workflows/perturbation.yml",".github/actions/nextest-evidence/**","scripts/perturbation.mjs","scripts/ci-junit-metadata.mjs","scripts/lib/hermetic-list.mjs","scripts/manifests/perturbation.json","scripts/manifests/ci-hermetic-candidates.json"]}}.
Concurrency: {"group":"perturbation-${{ github.event_name }}-${{ github.ref }}","cancel-in-progress":true}. Permissions: {"contents":"read"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| perturbation.yml / plan | default | [] | ubuntu-latest / 5 | single |
| perturbation.yml / build | default | [] | ubuntu-latest / 95 | single |
| perturbation.yml / rerun | default | ["plan","build"] | ubuntu-latest / 95 | {"fail-fast":false,"matrix":{"rerun":"${{ fromJSON(needs.plan.outputs.reruns) }}"}} |
| perturbation.yml / compare | always() && needs.plan.result == 'success' | ["plan","rerun"] | ubuntu-latest / 15 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- plan: Check the candidate list:
node scripts/perturbation.mjs check-list; Read the configured reruns:echo "reruns=$(node scripts/perturbation.mjs plan)" >> "$GITHUB_OUTPUT". - build: Build the Rust test archive:
mkdir -p artifacts<br>node scripts/run-cached.mjs -- 'node scripts/compile-fixture-artifacts.mjs archive --workspace --archive-file artifacts/rust-nextest-archive.tar.zst'. - rerun: Fetch locked Cargo dependencies:
cargo fetch --locked; Build libfaketime: source script block;see linked job; Run the core suite perturbed: source script block;node scripts/perturbation.mjs run "${run_args[@]}" -- cargo "${nextest_argv[@]}". - compare: Compare the reruns per test:
set -o pipefail<br>mkdir -p comparison<br>node scripts/perturbation.mjs compare --input artifacts \<br> --out comparison/perturbation-comparison.json \<br> --proposed comparison/ci-hermetic-candidates.proposed.json \<br> | tee -a "$GITHUB_STEP_SUMMARY".
Release Check (release-check.yml)
Source: release-check.yml.
Triggers and input defaults: {"workflow_dispatch":null,"pull_request":{"paths":[".github/workflows/release.yml",".github/workflows/release-check.yml",".github/workflows/integration-test.yml","scripts/check-versions.mjs","scripts/verify-packages.mjs","scripts/bump.mjs","packages/vue-vscode/package.mjs","scripts/githubctl/clean-room.mjs","scripts/githubctl/tests/clean-room.test.mjs","scripts/lib/publish-set.mjs"]}}.
Concurrency: {"group":"release-check-${{ github.ref }}","cancel-in-progress":true}. Permissions: {"contents":"read"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| release-check.yml / pull-request-contract | github.event_name == 'pull_request' | [] | ubuntu-latest / 15 | single |
| release-check.yml / dry-run | github.event_name == 'workflow_dispatch' | [] | callee / default | ./.github/workflows/release.yml inputs={"dry_run":true} |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- pull-request-contract: Validate release workflow and package contracts:
pnpm --filter verter-vscode exec vitest run src/releasePackaging.spec.ts; Validate release rehearsal control plane:node --test scripts/githubctl/tests/clean-room.test.mjs. - dry-run: reusable
./.github/workflows/release.yml; control/artifact steps; see linked source.
Release IDE (release-ide.yml)
Source: release-ide.yml.
Triggers and input defaults: {"push":{"tags":["ide/v*"]},"workflow_call":{"inputs":{"dry_run":{"type":"boolean","default":true}}},"workflow_dispatch":{"inputs":{"dry_run":{"type":"boolean","default":true}}}}.
Concurrency: {"group":"release-ide-${{ github.ref }}","cancel-in-progress":false}. Permissions: {"contents":"write","actions":"read","pull-requests":"read"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| release-ide.yml / validate | default | [] | ubuntu-latest / 15 | single |
| release-ide.yml / build-lsp | needs.validate.outputs.dry-run == 'true' | validate | ${{ matrix.os }} / 50 | {"fail-fast":false,"matrix":{"include":[{"target":"x86_64-unknown-linux-gnu","os":"ubuntu-22.04","npm-pkg":"linux-x64-gnu","binary":"verter-lsp","shim-binary":"verter-relay-shim"},{"target":"x86_64-unknown-linux-musl","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-x64-musl","binary":"verter-lsp","shim-binary":"verter-relay-shim"},{"target":"aarch64-unknown-linux-gnu","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-arm64-gnu","binary":"verter-lsp","shim-binary":"verter-relay-shim"},{"target":"aarch64-unknown-linux-musl","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-arm64-musl","binary":"verter-lsp","shim-binary":"verter-relay-shim"},{"target":"x86_64-apple-darwin","os":"macos-15-intel","npm-pkg":"darwin-x64","binary":"verter-lsp","shim-binary":"verter-relay-shim"},{"target":"aarch64-apple-darwin","os":"macos-15","npm-pkg":"darwin-arm64","binary":"verter-lsp","shim-binary":"verter-relay-shim"},{"target":"x86_64-pc-windows-msvc","os":"windows-latest","npm-pkg":"win32-x64-msvc","binary":"verter-lsp.exe","shim-binary":"verter-relay-shim.exe"}]}} |
| release-ide.yml / build-mcp | needs.validate.outputs.dry-run == 'true' | validate | ${{ matrix.os }} / 50 | {"fail-fast":false,"matrix":{"include":[{"target":"x86_64-unknown-linux-gnu","os":"ubuntu-22.04","npm-pkg":"linux-x64-gnu","binary":"verter-mcp"},{"target":"x86_64-unknown-linux-musl","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-x64-musl","binary":"verter-mcp"},{"target":"aarch64-unknown-linux-gnu","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-arm64-gnu","binary":"verter-mcp"},{"target":"aarch64-unknown-linux-musl","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-arm64-musl","binary":"verter-mcp"},{"target":"x86_64-apple-darwin","os":"macos-15-intel","npm-pkg":"darwin-x64","binary":"verter-mcp"},{"target":"aarch64-apple-darwin","os":"macos-15","npm-pkg":"darwin-arm64","binary":"verter-mcp"},{"target":"x86_64-pc-windows-msvc","os":"windows-latest","npm-pkg":"win32-x64-msvc","binary":"verter-mcp.exe"}]}} |
| release-ide.yml / build-native | needs.validate.outputs.dry-run == 'true' | validate | ${{ matrix.os }} / 50 | {"fail-fast":false,"matrix":{"include":[{"target":"x86_64-unknown-linux-gnu","os":"ubuntu-22.04"},{"target":"aarch64-unknown-linux-gnu","os":"ubuntu-latest","use-cross":true},{"target":"x86_64-apple-darwin","os":"macos-15-intel"},{"target":"aarch64-apple-darwin","os":"macos-15"},{"target":"x86_64-pc-windows-msvc","os":"windows-latest"}]}} |
| release-ide.yml / build-vsix | needs.validate.outputs.dry-run == 'true' | ["validate","build-lsp","build-mcp","build-native"] | ubuntu-latest / 40 | single |
| release-ide.yml / build-editor-integrations | needs.validate.outputs.dry-run == 'true' | ["validate"] | callee / default | ./.github/workflows/editor-packages.yml |
| release-ide.yml / publish-vscode | needs.validate.outputs.dry-run != 'true' | validate | ubuntu-latest / 20 | single |
| release-ide.yml / github-release | needs.validate.outputs.dry-run != 'true' | validate | ubuntu-latest / 20 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- validate: source script block;
see linked job; Verify the version is complete:node scripts/set-ide-version.mjs --check "${{ steps.check.outputs.version }}"; Release proof:node scripts/release-proof.mjs --sha "$GITHUB_SHA" --title-prefix "release(ide): " --rehearsal "Release IDE Check" --artifacts "lsp-*,mcp-*,native-*,vsix,editor-integrations"[ifsteps.check.outputs.dry-run != 'true']. - build-lsp: Build editor binaries: source script block;
cargo zigbuild --release --package verter_lsp --package verter_relay_shim --target ${{ matrix.target }} ; cargo build --release --package verter_lsp --package verter_relay_shim --target ${{ matrix.target }}. - build-mcp: Build verter-mcp binary:
if [ "${{ matrix.use-cross }}" = "true" ]; then<br> cargo zigbuild --release --package verter_mcp --bin verter-mcp --target ${{ matrix.target }}<br>else<br> cargo build --release --package verter_mcp --bin verter-mcp --target ${{ matrix.target }}<br>fi. - build-native: Build native: source script block;
npx napi build -o dist --dts napi.generated.d.ts --platform --release --manifest-path ../../crates/verter_napi/Cargo.toml --target ${{ matrix.target }} --cross-compile ; npx napi build -o dist --dts napi.generated.d.ts --platform --release --manifest-path ../../crates/verter_napi/Cargo.toml --target ${{ matrix.target }}. - build-vsix: Build TS packages:
pnpm run build:ts; Package VSIX: source script block;node package.mjs --target "$platform". - build-editor-integrations: reusable
./.github/workflows/editor-packages.yml; control/artifact steps; see linked source. - publish-vscode: Publish VSIXes to the Marketplace: source script block;
pnpm exec vsce publish --packagePath "$vsix". - github-release: Stage release assets: source script block;
see linked job; Write release notes: source script block;see linked job; Create GitHub Release:TAG="${GITHUB_REF_NAME}"<br>gh release create "$TAG" \<br> --title "Editors ${{ needs.validate.outputs.version }}" \<br> --notes-file /tmp/RELEASE_NOTES.md \<br> /tmp/release-assets/staged/*.
release-tag (release-tag.yml)
Source: release-tag.yml.
Triggers and input defaults: {"push":{"branches":["main"]}}.
Concurrency: {"group":"release-tag-${{ github.ref }}","cancel-in-progress":false}. Permissions: {"contents":"write"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| release-tag.yml / tag | default | [] | ubuntu-latest / 20 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- tag: Detect a version commit: source script block;
see linked job; Verify the version is complete:node scripts/release-lanes.mjs verify "${{ steps.detect.outputs.lane || '-' }}" "${{ steps.detect.outputs.version }}"[ifsteps.detect.outputs.tag != '']; Create and push the tag:git config user.name "github-actions[bot]"<br>git config user.email "github-actions[bot]@users.noreply.github.com"<br>git tag -a "${{ steps.detect.outputs.tag }}" -m "$(git log -1 --format=%s)"<br>git push origin "${{ steps.detect.outputs.tag }}"[ifsteps.detect.outputs.tag != ''].
Release (release.yml)
Source: release.yml.
Triggers and input defaults: {"push":{"tags":["v*"]},"workflow_call":{"inputs":{"dry_run":{"type":"boolean","default":false}}}}.
Concurrency: {"group":"release-${{ github.ref }}","cancel-in-progress":false}. Permissions: {"contents":"write","id-token":"write","deployments":"write","actions":"read","pull-requests":"read"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| release.yml / validate | default | [] | ubuntu-latest / 25 | single |
| release.yml / build-native | needs.validate.outputs.dry-run == 'true' | validate | ${{ matrix.os }} / 50 | {"fail-fast":false,"matrix":{"include":[{"target":"x86_64-unknown-linux-gnu","os":"ubuntu-22.04"},{"target":"x86_64-unknown-linux-musl","os":"ubuntu-latest","use-cross":true},{"target":"aarch64-unknown-linux-gnu","os":"ubuntu-latest","use-cross":true},{"target":"aarch64-unknown-linux-musl","os":"ubuntu-latest","use-cross":true},{"target":"x86_64-apple-darwin","os":"macos-15-intel"},{"target":"aarch64-apple-darwin","os":"macos-15"},{"target":"x86_64-pc-windows-msvc","os":"windows-latest"}]}} |
| release.yml / build-tsc | needs.validate.outputs.dry-run == 'true' | validate | ${{ matrix.os }} / 50 | {"fail-fast":false,"matrix":{"include":[{"target":"x86_64-unknown-linux-gnu","os":"ubuntu-22.04","npm-pkg":"linux-x64-gnu","binary":"verter-tsc"},{"target":"x86_64-unknown-linux-musl","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-x64-musl","binary":"verter-tsc"},{"target":"aarch64-unknown-linux-gnu","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-arm64-gnu","binary":"verter-tsc"},{"target":"aarch64-unknown-linux-musl","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-arm64-musl","binary":"verter-tsc"},{"target":"x86_64-apple-darwin","os":"macos-15-intel","npm-pkg":"darwin-x64","binary":"verter-tsc"},{"target":"aarch64-apple-darwin","os":"macos-15","npm-pkg":"darwin-arm64","binary":"verter-tsc"},{"target":"x86_64-pc-windows-msvc","os":"windows-latest","npm-pkg":"win32-x64-msvc","binary":"verter-tsc.exe"}]}} |
| release.yml / build-lsp | needs.validate.outputs.dry-run == 'true' | validate | ${{ matrix.os }} / 50 | {"fail-fast":false,"matrix":{"include":[{"target":"x86_64-unknown-linux-gnu","os":"ubuntu-22.04","npm-pkg":"linux-x64-gnu","binary":"verter-lsp","shim-binary":"verter-relay-shim"},{"target":"x86_64-unknown-linux-musl","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-x64-musl","binary":"verter-lsp","shim-binary":"verter-relay-shim"},{"target":"aarch64-unknown-linux-gnu","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-arm64-gnu","binary":"verter-lsp","shim-binary":"verter-relay-shim"},{"target":"aarch64-unknown-linux-musl","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-arm64-musl","binary":"verter-lsp","shim-binary":"verter-relay-shim"},{"target":"x86_64-apple-darwin","os":"macos-15-intel","npm-pkg":"darwin-x64","binary":"verter-lsp","shim-binary":"verter-relay-shim"},{"target":"aarch64-apple-darwin","os":"macos-15","npm-pkg":"darwin-arm64","binary":"verter-lsp","shim-binary":"verter-relay-shim"},{"target":"x86_64-pc-windows-msvc","os":"windows-latest","npm-pkg":"win32-x64-msvc","binary":"verter-lsp.exe","shim-binary":"verter-relay-shim.exe"}]}} |
| release.yml / build-mcp | needs.validate.outputs.dry-run == 'true' | validate | ${{ matrix.os }} / 50 | {"fail-fast":false,"matrix":{"include":[{"target":"x86_64-unknown-linux-gnu","os":"ubuntu-22.04","npm-pkg":"linux-x64-gnu","binary":"verter-mcp"},{"target":"x86_64-unknown-linux-musl","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-x64-musl","binary":"verter-mcp"},{"target":"aarch64-unknown-linux-gnu","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-arm64-gnu","binary":"verter-mcp"},{"target":"aarch64-unknown-linux-musl","os":"ubuntu-latest","use-cross":true,"npm-pkg":"linux-arm64-musl","binary":"verter-mcp"},{"target":"x86_64-apple-darwin","os":"macos-15-intel","npm-pkg":"darwin-x64","binary":"verter-mcp"},{"target":"aarch64-apple-darwin","os":"macos-15","npm-pkg":"darwin-arm64","binary":"verter-mcp"},{"target":"x86_64-pc-windows-msvc","os":"windows-latest","npm-pkg":"win32-x64-msvc","binary":"verter-mcp.exe"}]}} |
| release.yml / build-wasm | needs.validate.outputs.dry-run == 'true' | validate | ubuntu-latest / 35 | single |
| release.yml / build-editor-lsp | needs.validate.outputs.dry-run == 'true' | validate | ${{ matrix.os }} / 50 | {"fail-fast":false,"matrix":{"include":[{"os":"ubuntu-latest","slug":"linux","binary":"verter-lsp"}]}} |
| release.yml / editor-neovim | needs.validate.outputs.dry-run == 'true' | ["validate","build-editor-lsp"] | ${{ matrix.os }} / 35 | {"fail-fast":false,"matrix":{"os":["ubuntu-latest"],"neovim":["v0.11.0","nightly"],"include":[{"os":"ubuntu-latest","slug":"linux","binary":"verter-lsp"}]}} |
| release.yml / clean-room | needs.validate.outputs.dry-run == 'true' | ["validate","editor-neovim","build-native","build-lsp","build-mcp","build-tsc","build-wasm"] | ubuntu-latest / 35 | single |
| release.yml / publish-npm | needs.validate.outputs.dry-run != 'true' | validate | ubuntu-latest / 35 | single |
| release.yml / build-vsix | needs.validate.outputs.dry-run == 'true' | ["validate","build-lsp","build-native","build-mcp"] | ubuntu-latest / 40 | single |
| release.yml / publish-vscode | needs.validate.outputs.dry-run != 'true' | ["validate","publish-npm"] | ubuntu-latest / 20 | single |
| release.yml / github-release | needs.validate.outputs.dry-run != 'true' | validate | ubuntu-latest / 25 | single |
| release.yml / integration-test | needs.validate.outputs.dry-run != 'true' | ["validate","publish-npm"] | callee / default | ./.github/workflows/integration-test.yml inputs={"source":"npm","dist-tag":"${{ needs.validate.outputs.dist-tag }}"} |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- validate: source script block;
see linked job; Release proof:node scripts/release-proof.mjs --sha "$GITHUB_SHA" --title-prefix "release: " --rehearsal "Release Check" --artifacts "native-*,native-loader,tsc-*,lsp-*,mcp-*,wasm,vsix"[ifsteps.check.outputs.dry-run != 'true']; Pre-publish validation: source script block;node scripts/check-versions.mjs ; node scripts/check-versions.mjs --json | node -e ". - build-native: Build native: source script block;
npx napi build -o dist --dts napi.generated.d.ts --platform --release --manifest-path ../../crates/verter_napi/Cargo.toml --target ${{ matrix.target }} --cross-compile ; npx napi build -o dist --dts napi.generated.d.ts --platform --release --manifest-path ../../crates/verter_napi/Cargo.toml --target ${{ matrix.target }}. - build-tsc: Build verter-tsc binary:
if [ "${{ matrix.use-cross }}" = "true" ]; then<br> cargo zigbuild --release --package verter_tsc --target ${{ matrix.target }}<br>else<br> cargo build --release --package verter_tsc --target ${{ matrix.target }}<br>fi. - build-lsp: Build editor binaries: source script block;
cargo zigbuild --release --package verter_lsp --package verter_relay_shim --target ${{ matrix.target }} ; cargo build --release --package verter_lsp --package verter_relay_shim --target ${{ matrix.target }}. - build-mcp: Build verter-mcp binary:
if [ "${{ matrix.use-cross }}" = "true" ]; then<br> cargo zigbuild --release --package verter_mcp --bin verter-mcp --target ${{ matrix.target }}<br>else<br> cargo build --release --package verter_mcp --bin verter-mcp --target ${{ matrix.target }}<br>fi. - build-wasm: Build WASM:
pnpm --filter @verter/wasm build; Smoke test WASM:node -e "const fs = require('fs'); const wasm = fs.readFileSync('packages/wasm/wasm/verter_wasm_bg.wasm'); console.log('WASM size:', wasm.length, 'bytes'); if (wasm.length < 1000) throw new Error('WASM too small');". - build-editor-lsp: Build verter-lsp (release):
cargo build -p verter_lsp --release. - editor-neovim: Provision tsgo and framework types:
npm ci --ignore-scripts; Plenary verdict guard:node --test scripts/editor-contracts/plenary-outcome-guard.test.mjs; Run plenary busted suite: source script block;see linked job. - clean-room: Stage release artifacts:
node scripts/release-publish.mjs stage --artifacts "${RUNNER_TEMP}/release-artifacts"; Prepare packages:node scripts/release-publish.mjs prepare; Clean-room install and public entrypoint smoke:node scripts/githubctl/clean-room.mjs --work-dir "${RUNNER_TEMP}/clean-room-${{ github.run_id }}-${{ github.run_attempt }}" --report "${RUNNER_TEMP}/clean-room-${{ github.run_id }}-${{ github.run_attempt }}/report.json". - publish-npm: Stage release artifacts:
node scripts/release-publish.mjs stage --artifacts "${RUNNER_TEMP}/release-artifacts"; Prepare packages:node scripts/release-publish.mjs prepare; Publish packages:node scripts/release-publish.mjs publish-npm --dist-tag "${{ needs.validate.outputs.dist-tag }}" --provenance; Verify packages on the registry:node scripts/release-publish.mjs verify-npm. - build-vsix: Build TS packages:
pnpm run build:ts; Package VSIX: source script block;node package.mjs --target "$platform". - publish-vscode: Publish VSIXes to the Marketplace: source script block;
pnpm exec vsce publish --packagePath "$vsix". - github-release: Generate release notes:
git-cliff --latest --strip header > /tmp/RELEASE_NOTES.md; Stage release assets: source script block;see linked job; Create GitHub Release: source script block;see linked job. - integration-test: reusable
./.github/workflows/integration-test.yml; control/artifact steps; see linked source.
tsserver nightly (tsserver-nightly.yml)
Source: tsserver-nightly.yml.
Triggers and input defaults: {"schedule":[{"cron":"30 4 * * *"}],"workflow_dispatch":null}.
Concurrency: {"group":"tsserver-nightly","cancel-in-progress":false}. Permissions: {"contents":"read"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| tsserver-nightly.yml / providers | default | [] | ubuntu-latest / 95 | single |
| tsserver-nightly.yml / plugin | default | [] | ubuntu-latest / 60 | single |
| tsserver-nightly.yml / editor-build | default | [] | ubuntu-latest / 45 | single |
| tsserver-nightly.yml / vscode-e2e | default | editor-build | ubuntu-latest / 45 | {"fail-fast":false,"matrix":"${{ fromJSON(needs.editor-build.outputs.matrix) }}"} |
| tsserver-nightly.yml / editor-neutral | default | editor-build | ubuntu-latest / 25 | single |
| tsserver-nightly.yml / result | always() | ["providers","plugin","editor-build","vscode-e2e","editor-neutral"] | ubuntu-latest / 5 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- providers: Build the tsserver plugin prerequisites:
pnpm --filter @verter/language-shared --filter @verter/typescript-plugin build; Run serial tsserver provider tests:node scripts/provider-ci.mjs run tsserver. - plugin: Build the tsserver plugin prerequisites:
pnpm --filter @verter/language-shared --filter @verter/typescript-plugin build; Native-free TypeScript plugin tests:pnpm vitest run packages/typescript-plugin/src --exclude 'packages/typescript-plugin/src/tsc/**'; Build native binding (release):pnpm run build:native[if${{ !cancelled() }}]; Build TS packages:pnpm run build:ts[if${{ !cancelled() }}]; Native-backed @verter/typescript-plugin tests:pnpm vitest run packages/typescript-plugin/src/tsc[if${{ !cancelled() }}]. - editor-build: Build verter-lsp, relay shim, DX baseline and MCP server (debug):
cargo build -p verter_lsp -p verter_relay_shim -p verter_dx_baseline -p verter_mcp; Prepare VS Code E2E artifacts:pnpm --filter verter-vscode prepare:e2e:ts; Derive the tsserver VS Code E2E route matrix:echo "matrix=$(node packages/vue-vscode/out-test/e2e/printCiMatrix.js --tier=tsserver)" >> "$GITHUB_OUTPUT". - vscode-e2e: Make editor integration binaries executable:
chmod +x target/debug/verter-lsp target/debug/verter-relay-shim target/debug/verter-mcp; Resolve VS Code host cache key:test_electron=$(node -p "require('./packages/vue-vscode/node_modules/@vscode/test-electron/package.json').version")<br>echo "key=vscode-host-${RUNNER_OS}-${RUNNER_ARCH}-${E2E_VSCODE_VERSION}-test-electron-${test_electron}" >> "$GITHUB_OUTPUT"<span v-pre>; Acquire VS Code ${{ env.E2E_VSCODE_VERSION }}: source script block;</span>see linked job<span v-pre>; Run E2E tests (shard ${{ matrix.shard }}/${{ matrix.shard_count }}):</span>echo "Routes: ${E2E_ROUTES}"<br>xvfb-run -a pnpm --filter verter-vscode test:e2e:run. - editor-neutral: Make editor integration binaries executable:
chmod +x target/debug/verter-lsp target/debug/verter-relay-shim target/debug/verter-mcp; Build editor-neutral contract packages:pnpm --filter "@verter/dx-harness..." build; Run the tsserver contract:pnpm --filter @verter/dx-harness test:editor-neutral-lsp. - result: Verify every tsserver lane succeeded: source script block;
node -e '.
Validation Probe (validation-probe.yml)
Source: validation-probe.yml.
Triggers and input defaults: {"schedule":[{"cron":"0 5 * * *"}],"workflow_dispatch":null}.
Concurrency: {"group":"validation-probe-${{ github.ref }}","cancel-in-progress":true}. Permissions: {"contents":"read"}.
| Job / source | Selection (if; absent means Actions default success) | Dependencies | Runner / timeout minutes | Matrix / reusable call |
|---|---|---|---|---|
| validation-probe.yml / probe | default | [] | ubuntu-latest / 60 | single |
| validation-probe.yml / observe | default | [] | ubuntu-latest / 60 | single |
Declared checks and execution entry points (step conditions remain authoritative at the linked source):
- probe: Build the native addon:
pnpm --filter @verter/native build; Generate the pinned Svelte corpus:pnpm --ignore-workspace install && pnpm generate; Run the workload probe:cargo nextest run -p verter_validation_probe --features external-corpus; Render the job summary:cargo run -p verter_validation_probe --bin validation-probe-summary -- \<br> --markdown >> "$GITHUB_STEP_SUMMARY"[ifalways()]; Lane disposition:cargo run -p verter_validation_probe --bin validation-probe-summary -- --dispose[ifalways()]. - observe: Build the native addon:
pnpm --filter @verter/native build; Generate the pinned Svelte corpus:pnpm --ignore-workspace install && pnpm generate; Capture observations:cargo run -p verter_validation_probe --features external-corpus --bin validation-probe-observe -- --lane main.