Skip to content

Current CI obligations and integration seams ​

Inspected 2026-11-01 from the assigned repository checkout. This inventory is bounded research: local source is available; live repository policy, account capacity, cache occupancy, run telemetry and the fleet source-admission contract are unavailable. It does not establish a complete current live inventory, measured savings, numeric targets, or product success. Live adoption depending on those resources remains held with the owners below.

Scope and evidence ​

  • Workflow inventory: all 17 workflow files, every declared job, trigger, input, matrix, runner, dependency, job selection and execution entry point.
  • Storage declarations: cache namespaces, save/restore conditions, artifact producers/consumers, toolchains, tool installers and workflow/job environments across those workflows.
  • Queued cancellation and slot behaviour: observed supersession states from public run records, which narrows the run-telemetry limit above. Bounded research is complete with the outcome not adopted: job-level slot behaviour is unmeasured, slot adoption stays held, and any later live trial is new work.
  • Repository cache fit: measured compressed sizes per identity, repository occupancy, headroom and the fitting subset. It supersedes this page's statements that cache usage and occupancy are unavailable.
  • Current authorities: CI, selection, aggregate checker, release lanes, release proof, contributor overview.

Cause: the aggregate job and older observations alone cannot describe independent workflows, build compatibility or live enforcement. Owner/pattern: reuse the existing workflow, selector and proof authorities; the repository maintainer owns source and GitHub policy. Maintainable change: this cited snapshot and explicit access boundaries, without a second selector, checker or CI configuration. No legacy implementation is replaced. There are no behavioral changes requiring regression tests.

The captured observations contain only the candidate identity; no pinned ci.* fact bodies were supplied. tama-plan-verter facts --search '^ci\.' and tama-plan-verter ledger --search '^ci\.' report no facts/ledger file for this job. Consequently the following refresh is by topic, not an assertion that unseen historical facts were verified verbatim:

Observation topicCurrent source evidenceRemaining limitation
Scope and obligations37 jobs in ci.yml, including its aggregate; all other workflows enumerated separatelyEnabled workflows and live required contexts unavailable
TieringPR/main impact selection; independent PR paths; schedules, comments, calls and tagsNo merge-group trigger or global train admission interface found
Shared buildsOne nextest archive; native, WASM, debug LSP and extension artifacts have explicit consumersNo compatibility inferred across profiles, targets or features
Cache strategyJob-specific Rust keys, main-only saves in CI with explicit exceptionsCurrent usage, eviction, billing and hit rates unavailable
Capacity and concurrencyHosted runner labels and per-ref concurrency groupsAccount pool, allocation, fairness and cross-PR cap unavailable
GovernanceSelection audit, aggregate completeness, lane self-tests and performance-structure validationNo declared CI cost/tier budget or measured trend guard found in inspected CI/checker sources

Required coverage versus scheduled evidence ​

CI Required is the source-declared aggregate. It uses always(), depends on every other job in that workflow and rejects failure/cancellation, while allowing skipped jobs. Its completeness is checked by check-ci-aggregate.mjs. This establishes source intent, not which checks GitHub currently enforces or that every selected obligation actually ran. No other workflow is implicitly included by that dependency list.

WorkflowPresent placement / obligation
ci.ymlEvery PR and main push; conditional correctness lanes, producers and release rehearsals feed CI Required
editor-packages.ymlPath-filtered PR packaging and reusable caller; separate from CI Required unless reached through IDE rehearsal
release-check.ymlPath-filtered PR contract check; manual full project dry run; release PR rehearsal itself is called from ci.yml
perf-gate.ymlPath-filtered PR harness correctness; daily/manual comparison outside the PR aggregate
perturbation.ymlPath-filtered PR/non-main push plus weekly/manual reruns and comparisons; independent aggregate
nightly.ymlDaily/manual compile contracts, deploy, instrumented tests, full scale, coverage, Svelte performance; scheduled evidence does not prove a PR tree
tsserver-nightly.ymlDaily/manual legacy providers, plugin, VS Code and editor-neutral routes; its result job requires all dependencies succeed
validation-probe.ymlDaily/manual external workload and capture probes; uploaded taxonomy then disposition; outside PR-required CI
dx-extended.ymlWeekly/manual extension-host units and record-only raw-LSP sweep; explicit-input external corpus; full extension-host DX E2E has no wired handoff producer
corpus-gate.ymlWeekly/manual three-route corpus gate; empty corpus input honest-skips, not evidence of coverage
benchmark.ymlAuthorized /benchmark comment or manual comparison; optional results publication
lsp-benchmark.ymlAuthorized /lsp-benchmark comment or manual benchmark; actual source selects its runners/matrix
meta-benchmark.ymlAuthorized /meta-benchmark comment or manual comparison; backend × scenario matrix
release-tag.ymlMain pushes; exact release subject/version checks produce project or IDE tags
release.ymlv* tag or reusable dry-run rehearsal; proof-based publishing and post-release integration
release-ide.ymlide/v* tag, reusable rehearsal or manual dry run; binary/VSIX/editor archive consumers
integration-test.ymlAuthorized /integration, manual or post-release reusable call; real-project matrix and comparison report

“Outside PR-required CI” describes membership of the source aggregate, not whether an independent workflow can fail its own run or is advisory under unknown live rules. Scheduled gates can fail; they do not replace exact-tree required coverage. Current placement is inventoried here; the accepted push/final-train/nightly tiering and later-by-default lane admission are target policy, not already implemented facts. No lane is moved by this research.

Selector and existing-check integration ​

ci-impact.mjs owns path filters, crate-root closures, escape hatches and gate composition. The detect-changes job takes only the changed-file list from dorny/paths-filter@v4; the lane decision stays in that script. Rust metadata supplies the dependency graph; non-crate filters own scripts, fixtures and generated inputs. Unowned paths fail audit and otherwise select all gates. Workspace manifests/lock, toolchain, cargo config, nextest config, proc macros and foundational identity changes select impact-bearing lanes; workflow/action/classifier changes select everything. The explicit inert lists own prose; an inert entry never overrides a consuming filter.

Subsystem outputs describe changed consumers. Artifact outputs describe required producers: native_artifact = native OR playground OR transport; wasm_artifact = wasm OR playground OR transport. Debug LSP is selected by VS Code OR editor-neutral OR DX; extension output by VS Code OR editor-neutral. Release LSP is selected by editors. impact_full is diagnostic, not a separate correctness suite; release distinguishes project/IDE rehearsal or landed-proof reuse. The workflow appendix maps each output consumer to its if and needs; outputs are not counted as extra tests.

Existing integration seamLane/check coverageWhat it does not establish
ci-impact.mjs --audit, ci-impact.test.mjs, lib/crate-graph.spec.mjsEvery CI consumer gate; path ownership, graph selection, producer implications, fail-closed behaviorLive ruleset completeness, cost or cross-workflow admission
check-ci-aggregate.mjs, check-ci-aggregate.test.mjsEvery ci.yml job is in CI Required; always/name/unknown-needs guardsA skipped required lane actually executed; separate workflow enforcement
provider-ci.mjs verify, provider-ci-lane-selftest.mjsArchive inventory partition, core shards, tsgo and tsserver lifecycle ownershipOne archive can replace independently featured builds
compiler-ci-lane-selftest.mjs, compile-contracts.mjsFour isolated compile-contract groups and cache ownershipInterchangeability with workspace nextest or observe artifacts
bf2-ci-lane-selftest.mjs, bf2-authoritative.mjsAuthoritative feature-gated BF2 inventory and full runGeneric test count as evidence of semantic equivalence
observe-lane.test.mjs, observe-lane.mjs smokeHost capture on/off output and audit-record checks; nightly full instrumented suiteFeature-off artifacts contain capture tests
gate-wasm-lane-selftest.mjs, wasm-js-boundary-lane.mjs, browser-host-gate.test.mjswasm-target JS boundary plus browser worker census and built artifact consumersNative archive executes wasm-only tests
tests/architecture-health/ARH*/verify.mjs, corresponding dirty-twin testsarchitecture-health lane; its exact six verifier entry points appear in workflow appendixCost budget or account capacity
sfc-projection/verify-node.test.mjs, test:sfc-projectionBoth SFC shards and TypeScript engine probesScheduled corpus result proves PR coverage
release-lanes.spec.mjs, release-proof.spec.mjs, publish/clean-room testsProject/IDE release callers, rehearsal proof, artifacts and publishing contractAn artifact cache is correctness proof
perturbation.test.mjs, ci-junit-metadata.test.mjsRerun planning/comparison and evidence identity/schemaCurrent per-PR runner share or CI savings
check-integration-test-layout.mjs, pnpm proto:check, check-versions.mjsrust-test-build test-binary layout, proto-fmt generated-proto freshness, release-check.yml and release.yml version alignmentCost, tier placement or runner capacity
validate-performance-gates.mjs / testStructural performance contracts in JS CIDeclared lane budgets or Actions duration trend enforcement
E2E matrix printer, editor/JetBrains/DX lane entry pointsDynamic routes, editor protocols, plugin gate and hermetic raw-LSP smokeGlobal account scheduling or human/fork train entry

Self-tests with no workflow reference of their own (ci-impact.test.mjs, lib/crate-graph.spec.mjs, provider-ci-lane-selftest.mjs, gate-wasm-lane-selftest.mjs, release-lanes.spec.mjs, release-proof.spec.mjs, perturbation.test.mjs, ci-junit-metadata.test.mjs, validate-performance-gates.test.mjs) run through pnpm run test:scripts:ci in js-build-test, so that lane owns their result rather than the lane each one describes. Per-job entry points for every lane, including those with no row above, are in the workflow inventory.

These are integration surfaces for subsequent cost/selector work, not newly imposed checks. Job timeouts and nextest per-test limits are hang bounds, not empirical queue/execution budgets. No new mechanism, safeguard or acceptance condition is added here.

Build and cache identities ​

Compatibility dimensions already visible in commands/declarations are toolchain, runner OS/architecture, target triple, package closure, Cargo feature unification, profile and overrides, rustflags, locks/manifests and generated inputs. Runtime source identity is needed for artifact/proof selection. Cache restoration is an acceleration hint; Cargo and lane validators still run. Source inspection is not a proof of cache corruption/trust behavior under live fork execution.

  • Toolchains: rust-toolchain.toml pins Rust 1.97.1 and wasm target; workflow action versions must match. .nvmrc requests Node 26; package.json pins pnpm 10.22.0. Locks include root Cargo/pnpm locks and the excluded observe compile-contract lock. WASM bindgen CLI is 0.2.129. Separate Lapce/Zed manifests and locks are not workspace builds.
  • Cargo profiles: dev/test use workspace opt-level 0 and line tables, dependencies opt-level 2 without debug; release uses opt-level 3, fat LTO, one codegen unit. no-debug-assertions inherits dev but disables assertions and overflow checks; it is not release-codegen evidence. wasm-test inherits dev with debug metadata disabled. artifact-dev, release-dbg and release-fast are separate profiles, not aliases for CI outputs.
  • Step-level tool installers are listed in the storage inventory: nextest, cargo-llvm-cov, cargo-zigbuild with Zig 0.13.0, wasm-bindgen-cli, git-cliff, pnpm and Neovim. Nextest, cargo-llvm-cov and cargo-zigbuild name no tool version in their steps, so source does not establish which version a run installed.
  • .cargo/config.toml applies getrandom_backend="wasm_js" on wasm32. Environment overrides and feature sets in the storage appendix are part of compatibility even when the namespace looks similar.
Build identity / producerConsumers and separation
rust-test-build: compile-fixture-artifacts.mjs archive --workspace default host test build, fixture metadata, provider partition verificationrust-nextest-archive → four core rust-test shards, same run; extraction avoids compiling four copies. Live providers have independent builds/lifecycles. Archive does not cover wasm JS boundary, standalone contracts, nightly-scale selection or shipped-cfg
rust-build-configs: workspace release check; no-debug-assertions all-target check plus verter_shipped_cfg_contract nextest; wasm default Clippy/observe check; session transport-authoritative ClippyCompile/runtime cfg obligations stay distinct from default archive, full instrumented tests and release optimization
build-native-node: package native default buildRelease .node and declarations → native-test, playground-test, transport-route-equivalence. Default capture-unavailable behavior differs from native-observe-test's dev semantic-observe build
wasm-build: release wasm32 build:bindgen + TypeScript; PR omits opt:wasmUploaded pre-optimization wasm-build → playground/browser-host/transport consumers. Optimization occurs after upload on non-PR runs; optimized smoke and later local checks therefore are not the uploaded bytes. wasm JS boundary uses its own target/profile; observe-test builds a separate release module with semantic-observe
build-lsp-debug: host dev LSP, relay shim, DX baseline and MCPci-lsp-debug-bins → editor-neutral-lsp, vscode-e2e, dx-harness-hermetic; exact binary set/path in storage appendix
build-vscode-e2e: TS prepare and unit gates, printCiMatrix.js --tier=prvscode-e2e-build → editor-neutral-lsp and dynamic vscode-e2e routes. Tsserver nightly derives its own tier and builds its own artifacts
build-editor-lsp: host release LSPeditor-lsp → editor-contracts; cannot consume debug LSP as equivalent release evidence. Lapce WASI preview1 / Zed WASI preview2 remain separate builds
compiler-contracts coreaudit, css-syntax, identity, language, semantic, session-query, type-runtime, workspace, session-feature-variants
compiler-contracts compilercompiler-default, compiler-bench, session-soak; also generated Svelte freshness, isolated default feature-off build and lib tests
compiler-contracts session / session-observeSession default versus excluded observe manifest with separate lock to prevent feature unification. Each group has an isolated runner/target cache; debug symbols off, assertions retained, incremental off; nested trybuild shares only its group's target
BF2 / Svelte / nightly instrumented or coverage buildsFeature-gated or instrumented products shown in workflow commands; do not substitute default artifacts merely because package names match
Project and IDE release matricesSeven target triples for project native/TSC/LSP/MCP and IDE LSP/MCP, five IDE native targets, VSIX/editor packaging; complete OS/target/include objects and consumers in appendices. Cross, musl, macOS Intel/ARM and Windows MSVC are distinct

compile-contracts.mjs resolves each normal owner through cargo run --locked -p verter_compile_contracts --no-default-features --features <owner>; special bench/variant/soak packages and excluded session-observe use separate invocations. Nightly repeats the four group partition. This preserves feature-off privacy tests rather than unifying them into the default workspace test graph.

CI's Rust target caches use job-specific keys, restore on all refs and normally save only from main. The archive sccache namespace is verter-rust-test-v1; compile contracts share compile-unit sccache namespace verter-compiler-contracts-v2 but separate outer cache by group, toolchain/config, locks/manifests and runtime revision with fallback prefixes. Main revision suffixes allow refreshing immutable entries after source-only changes. VS Code host cache saves on any missing ref and sccache's GitHub backend writes per-compile entries from all refs: both are explicit CI exceptions. Gradle restores broadly and saves main-only. Other workflows have their own policies: nightly/tsserver caches often disable target caching; DX/probe/release caches do not inherit CI's main-only rule. Read each exact declaration in the storage appendix.

Landed reuse records PR number and tested merge tree in ci-tested notices. A main squash only disables lanes when that PR's successful CI proves exactly the landed tree; a different base, direct push, force push or missing proof runs normal selection. Tag publication additionally requires the release rehearsal and retained artifact families, then downloads from its proven run. Main-only cache refresh can therefore be skipped on a proven landing; it must not be mistaken for a missing validation or guaranteed fresh cache save. This task does not change proof or refresh behavior.

Available cost and trace sources ​

Each row is a source declaration. Its values live in run logs, check runs or artifacts this job cannot read, because the Actions API receipts below return HTTP 401. No inspected source declares a runner-minute, spend or queue-time record; those need the run, job and billing data named in the handoffs below.

SourceDeclared atRetainsDoes not provide
ci-tested noticeci.yml detect-changesPull request number and tested tree for a pull-request run; release-proof.mjs reads itTime or cost
Selection summaryci-impact.mjs, run by detect-changesChanged-file count, matched filters, impacted crates and every gate value, in the job summaryWhether a selected lane ran, or how long it took
Nextest evidence artifactsThe five ./.github/actions/nextest-evidence rows in the storage inventoryPer-test JUnit results and durations plus junit-metadata.json for core shards, BF2, nightly observe, core coverage and perturbation rerunsBuild, queue or non-nextest time
Test-report check runsdorny/test-reporter@v3 in rust-test and js-build-testJUnit reports for the core shards and JS tests, with fail-on-error: falseA gate result or any cost figure
Perturbation comparisonperturbation.yml comparePer-test rerun comparison, proposed hermetic list and rerun metadataRunner cost
Canonical gate telemetrygate.mjs and gate-internals.mjsReport-only phase durations, per-test wall time, peak contained child-tree RSS and capability-gated Cargo timings under gate-work/Actions data: no workflow step invokes gate.mjs (the ci.yml comment naming release.yml has no matching step), so no workflow run produces this
Product benchmark reportsJob summaries in benchmark.yml, lsp-benchmark.yml, meta-benchmark.ymlVerter benchmark resultsCI cost: they measure the product
Probe and integration summariesvalidation-probe.yml, integration-test.yml test-project and summaryExternal workload taxonomy and real-project resultsCI cost
Actions run, job and cache recordsNo source declaration; see the receipts belowQueue and execution timestamps, attempts, runner minutes and cache occupancyUnreadable in this job

Access receipts and owner handoffs ​

Attempts below were read-only on 2026-11-01. They are reproducible negative access evidence, not authenticated observations about the repository's current configuration. The job intentionally denies GitHub API access; 401 is not evidence that credentials need repair.

Command / inspectionObserved resultUncovered seam / responsible owner
gh api repos/pikax/verter/actions/workflows --jq '.workflows[] | {name,path,state}'HTTP 401, Bad credentialsEnabled workflows: repository maintainer
gh api repos/pikax/verter/rulesetsHTTP 401, Bad credentialsActual required checks, strict up-to-date policy, bypasses and rulesets: repository maintainer; classic branch protection also remains unverified
gh api repos/pikax/verter/actions/cache/usageHTTP 401, Bad credentialsOccupancy, eviction, saved sizes and cache fit: repository maintainer/account policy owner
gh api repos/pikax/verter/actions/runs --jq '.total_count'HTTP 401, Bad credentialsQueue/execution timestamps, jobs, runner minutes, peak overlap, cancelled/stale run history: repository maintainer
.github/CODEOWNERS readFile absentNo delegated file owner identified; repository maintainer owns confirmation
rg -n 'admission|source.throttle|account.allocation|merge_group' .github scripts docs/contributing --glob '!*.spec.*' --glob '!*.test.*'Matches concern compiler/runtime admission or test inventory; no fleet source-admission API or merge-group workflowActual fleet service owner must provide the public contract and identity; this search does not establish service absence
tama-plan-verter owners 'source-admission' and owners 'account allocation'Inventory / pool-partition task references, no service endpoint or actual operator identityPlan task ownership is not service ownership; actual fleet service owner must identify admission authority
tama-browser contextMissing: no adopted project guideRepository instructions and current source used directly

The repository's ci-${{ github.ref }} group cancels stale work on one ref. It neither limits distinct ready PRs nor serializes all final gates. Other workflow groups use distinct prefixes; release groups have cancellation disabled. Hosted runner labels prove requested environments only: account allocation, available parallel jobs and paid spend were not supplied. The 10 GB figure in CI comments is declared policy/historical context, not a new occupancy measurement.

No public fleet acquire/release, supersession, cancellation acknowledgment or ready-candidate contract is present in the supplied evidence. No endpoint or runtime credential was guessed. Human/fork PRs currently enter ordinary pull_request selection; that does not demonstrate admission to a shared final-train slot. The accepted target is one slot including fleet, human and fork candidates, with the ready candidate updated to main and its exact tree tested. Its actual integration remains unavailable until the fleet owner supplies the contract and repository owner supplies event/permission policy. No fork privilege relaxation is authorized or proposed.

HandoffRequired resource before dependent live adoptionCurrent disposition
Repository maintainer / policy ownerCurrent workflow enablement, classic protection/rulesets, required contexts, release permissions and trust policyBounded source inventory complete; live enforcement unknown
Account allocation / billing owner (actual identity unavailable)Hosted account quota, allocation, spend and current usageCapacity comparison and numeric targets remain unmeasured
Repository maintainer / telemetry ownerRun/job timestamps, attempts, tested trees, result/artifact records and cache metadataCache fit, representative baseline and concurrent replay need supplied evidence
Actual fleet service owner (actual identity unavailable)Public source-admission contract, owner identity, cancellation/supersession semantics, account allocation, human/fork entry into the same slotIntegration held; no assumed API

These are the charter's existing unavailable-resource boundaries, not additional conditions or newly found product defects. No operator-only choice is necessary to finish this bounded research. Negative receipts do not waive required coverage, select numeric budgets, claim fair progress or authorize production adoption.

Released under the MIT License.