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 topic | Current source evidence | Remaining limitation |
|---|---|---|
| Scope and obligations | 37 jobs in ci.yml, including its aggregate; all other workflows enumerated separately | Enabled workflows and live required contexts unavailable |
| Tiering | PR/main impact selection; independent PR paths; schedules, comments, calls and tags | No merge-group trigger or global train admission interface found |
| Shared builds | One nextest archive; native, WASM, debug LSP and extension artifacts have explicit consumers | No compatibility inferred across profiles, targets or features |
| Cache strategy | Job-specific Rust keys, main-only saves in CI with explicit exceptions | Current usage, eviction, billing and hit rates unavailable |
| Capacity and concurrency | Hosted runner labels and per-ref concurrency groups | Account pool, allocation, fairness and cross-PR cap unavailable |
| Governance | Selection audit, aggregate completeness, lane self-tests and performance-structure validation | No 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.
| Workflow | Present placement / obligation |
|---|---|
ci.yml | Every PR and main push; conditional correctness lanes, producers and release rehearsals feed CI Required |
editor-packages.yml | Path-filtered PR packaging and reusable caller; separate from CI Required unless reached through IDE rehearsal |
release-check.yml | Path-filtered PR contract check; manual full project dry run; release PR rehearsal itself is called from ci.yml |
perf-gate.yml | Path-filtered PR harness correctness; daily/manual comparison outside the PR aggregate |
perturbation.yml | Path-filtered PR/non-main push plus weekly/manual reruns and comparisons; independent aggregate |
nightly.yml | Daily/manual compile contracts, deploy, instrumented tests, full scale, coverage, Svelte performance; scheduled evidence does not prove a PR tree |
tsserver-nightly.yml | Daily/manual legacy providers, plugin, VS Code and editor-neutral routes; its result job requires all dependencies succeed |
validation-probe.yml | Daily/manual external workload and capture probes; uploaded taxonomy then disposition; outside PR-required CI |
dx-extended.yml | Weekly/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.yml | Weekly/manual three-route corpus gate; empty corpus input honest-skips, not evidence of coverage |
benchmark.yml | Authorized /benchmark comment or manual comparison; optional results publication |
lsp-benchmark.yml | Authorized /lsp-benchmark comment or manual benchmark; actual source selects its runners/matrix |
meta-benchmark.yml | Authorized /meta-benchmark comment or manual comparison; backend × scenario matrix |
release-tag.yml | Main pushes; exact release subject/version checks produce project or IDE tags |
release.yml | v* tag or reusable dry-run rehearsal; proof-based publishing and post-release integration |
release-ide.yml | ide/v* tag, reusable rehearsal or manual dry run; binary/VSIX/editor archive consumers |
integration-test.yml | Authorized /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 seam | Lane/check coverage | What it does not establish |
|---|---|---|
ci-impact.mjs --audit, ci-impact.test.mjs, lib/crate-graph.spec.mjs | Every CI consumer gate; path ownership, graph selection, producer implications, fail-closed behavior | Live ruleset completeness, cost or cross-workflow admission |
check-ci-aggregate.mjs, check-ci-aggregate.test.mjs | Every ci.yml job is in CI Required; always/name/unknown-needs guards | A skipped required lane actually executed; separate workflow enforcement |
provider-ci.mjs verify, provider-ci-lane-selftest.mjs | Archive inventory partition, core shards, tsgo and tsserver lifecycle ownership | One archive can replace independently featured builds |
compiler-ci-lane-selftest.mjs, compile-contracts.mjs | Four isolated compile-contract groups and cache ownership | Interchangeability with workspace nextest or observe artifacts |
bf2-ci-lane-selftest.mjs, bf2-authoritative.mjs | Authoritative feature-gated BF2 inventory and full run | Generic test count as evidence of semantic equivalence |
observe-lane.test.mjs, observe-lane.mjs smoke | Host capture on/off output and audit-record checks; nightly full instrumented suite | Feature-off artifacts contain capture tests |
gate-wasm-lane-selftest.mjs, wasm-js-boundary-lane.mjs, browser-host-gate.test.mjs | wasm-target JS boundary plus browser worker census and built artifact consumers | Native archive executes wasm-only tests |
tests/architecture-health/ARH*/verify.mjs, corresponding dirty-twin tests | architecture-health lane; its exact six verifier entry points appear in workflow appendix | Cost budget or account capacity |
sfc-projection/verify-node.test.mjs, test:sfc-projection | Both SFC shards and TypeScript engine probes | Scheduled corpus result proves PR coverage |
release-lanes.spec.mjs, release-proof.spec.mjs, publish/clean-room tests | Project/IDE release callers, rehearsal proof, artifacts and publishing contract | An artifact cache is correctness proof |
perturbation.test.mjs, ci-junit-metadata.test.mjs | Rerun planning/comparison and evidence identity/schema | Current per-PR runner share or CI savings |
check-integration-test-layout.mjs, pnpm proto:check, check-versions.mjs | rust-test-build test-binary layout, proto-fmt generated-proto freshness, release-check.yml and release.yml version alignment | Cost, tier placement or runner capacity |
validate-performance-gates.mjs / test | Structural performance contracts in JS CI | Declared lane budgets or Actions duration trend enforcement |
| E2E matrix printer, editor/JetBrains/DX lane entry points | Dynamic routes, editor protocols, plugin gate and hermetic raw-LSP smoke | Global 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-assertionsinherits dev but disables assertions and overflow checks; it is not release-codegen evidence.wasm-testinherits dev with debug metadata disabled.artifact-dev,release-dbgandrelease-fastare 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 / producer | Consumers and separation |
|---|---|
rust-test-build: compile-fixture-artifacts.mjs archive --workspace default host test build, fixture metadata, provider partition verification | rust-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 Clippy | Compile/runtime cfg obligations stay distinct from default archive, full instrumented tests and release optimization |
build-native-node: package native default build | Release .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:wasm | Uploaded 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 MCP | ci-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=pr | vscode-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 LSP | editor-lsp → editor-contracts; cannot consume debug LSP as equivalent release evidence. Lapce WASI preview1 / Zed WASI preview2 remain separate builds |
compiler-contracts core | audit, css-syntax, identity, language, semantic, session-query, type-runtime, workspace, session-feature-variants |
compiler-contracts compiler | compiler-default, compiler-bench, session-soak; also generated Svelte freshness, isolated default feature-off build and lib tests |
compiler-contracts session / session-observe | Session 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 builds | Feature-gated or instrumented products shown in workflow commands; do not substitute default artifacts merely because package names match |
| Project and IDE release matrices | Seven 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.
| Source | Declared at | Retains | Does not provide |
|---|---|---|---|
ci-tested notice | ci.yml detect-changes | Pull request number and tested tree for a pull-request run; release-proof.mjs reads it | Time or cost |
| Selection summary | ci-impact.mjs, run by detect-changes | Changed-file count, matched filters, impacted crates and every gate value, in the job summary | Whether a selected lane ran, or how long it took |
| Nextest evidence artifacts | The five ./.github/actions/nextest-evidence rows in the storage inventory | Per-test JUnit results and durations plus junit-metadata.json for core shards, BF2, nightly observe, core coverage and perturbation reruns | Build, queue or non-nextest time |
| Test-report check runs | dorny/test-reporter@v3 in rust-test and js-build-test | JUnit reports for the core shards and JS tests, with fail-on-error: false | A gate result or any cost figure |
| Perturbation comparison | perturbation.yml compare | Per-test rerun comparison, proposed hermetic list and rerun metadata | Runner cost |
| Canonical gate telemetry | gate.mjs and gate-internals.mjs | Report-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 reports | Job summaries in benchmark.yml, lsp-benchmark.yml, meta-benchmark.yml | Verter benchmark results | CI cost: they measure the product |
| Probe and integration summaries | validation-probe.yml, integration-test.yml test-project and summary | External workload taxonomy and real-project results | CI cost |
| Actions run, job and cache records | No source declaration; see the receipts below | Queue and execution timestamps, attempts, runner minutes and cache occupancy | Unreadable 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 / inspection | Observed result | Uncovered seam / responsible owner |
|---|---|---|
gh api repos/pikax/verter/actions/workflows --jq '.workflows[] | {name,path,state}' | HTTP 401, Bad credentials | Enabled workflows: repository maintainer |
gh api repos/pikax/verter/rulesets | HTTP 401, Bad credentials | Actual 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/usage | HTTP 401, Bad credentials | Occupancy, eviction, saved sizes and cache fit: repository maintainer/account policy owner |
gh api repos/pikax/verter/actions/runs --jq '.total_count' | HTTP 401, Bad credentials | Queue/execution timestamps, jobs, runner minutes, peak overlap, cancelled/stale run history: repository maintainer |
.github/CODEOWNERS read | File absent | No 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 workflow | Actual 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 identity | Plan task ownership is not service ownership; actual fleet service owner must identify admission authority |
tama-browser context | Missing: no adopted project guide | Repository 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.
| Handoff | Required resource before dependent live adoption | Current disposition |
|---|---|---|
| Repository maintainer / policy owner | Current workflow enablement, classic protection/rulesets, required contexts, release permissions and trust policy | Bounded source inventory complete; live enforcement unknown |
| Account allocation / billing owner (actual identity unavailable) | Hosted account quota, allocation, spend and current usage | Capacity comparison and numeric targets remain unmeasured |
| Repository maintainer / telemetry owner | Run/job timestamps, attempts, tested trees, result/artifact records and cache metadata | Cache 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 slot | Integration 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.