You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Selector-first CI mapping plus retained non-selector lane exceptions
read_when
modifying CI test lanes
debugging CI selector failures
CI Selector Mapping (Phase 1 Library-First Closeout)
This document defines the selector-first contract and current policy ownership for integration coverage.
Canonical rule: integration coverage is selector-first. Most CI-owned lanes invoke cargo test -p pikahut --test integration_* ..., and intentionally retained non-selector lanes are called out explicitly below.
Compatibility wrappers (tools/*, pikachat-openclaw/scripts/*, and root single-selector just recipes) are allowed for DX only, but lane ownership remains selector-driven.
Root aggregates like just pre-merge and just nightly are convenience entrypoints, not canonical policy owners.
Legacy CLI harness entrypoints (cargo run -q -p pikahut -- test ... / pikahut test ...) are out of contract.
Policy Classes
pre-merge CI-owned: currently blocking in canonical forge CI.
nightly CI-owned: currently run only in canonical forge nightly mode.
manual-only: checked-in contract kept for humans, but intentionally not CI-enforced today.
compatibility-only: wrapper or alias that forwards to a selector or lane owner and must not be treated as policy truth.
convenience/advisory: useful aggregate or regression entrypoint that is not itself a lane contract.
CI-Owned Pre-Merge Lanes
Lane / recipe
Canonical contract
pre-merge-pikachat
integration_deterministic::cli_smoke_local, integration_deterministic::ui_e2e_local_desktop, integration_deterministic::post_rebase_invalid_event_rejection_boundary, integration_deterministic::post_rebase_logout_session_convergence_boundary, and all openclaw-pikachat-deterministic selectors. On Apple Silicon, the checked-in lane now composes staged Linux pre-merge-pikachat-rust plus the explicit pikaci target pre-merge-pikachat-apple-followup, which owns the remaining Apple-host pikachat/pikachat-sidecar clippy plus desktop/TypeScript follow-up work.
check-pikachat-typescript
./scripts/pikachat-typescript-ci.sh over the checked-in pikachat-claude and pikachat-openclaw TypeScript package surfaces. This is a path-scoped pre-merge lane: it should trigger only for those TypeScript/plugin package paths and the lane plumbing that governs them.
check-apple-desktop-compile
just apple-host-desktop-compile on the Mac mini via ./scripts/pikaci-apple-remote.sh run --just-recipe apple-host-desktop-compile. This is the blocking desktop compile/link smoke lane and is intentionally compile-only via the Nix-addressable appleDesktopCompile package.
check-apple-ios-compile
just apple-host-ios-compile on the Mac mini via ./scripts/pikaci-apple-remote.sh run --just-recipe apple-host-ios-compile. This is the blocking iOS compile smoke lane: it consumes the Nix-addressable appleIosXcframework package and then runs a generic simulator xcodebuild build without executing UI tests.
pre-merge-agent-contracts
staged Linux agent-provider contract target: pika-cloud unit tests, pika-serveragent_api::tests, and the pika_core NIP-98 signing contract test. It intentionally no longer owns the old host-side pikahut deterministic HTTP / CLI selectors; those are currently manual-only until they are rewritten against the surviving Incus/OpenClaw contract and assigned a new truthful lane.
Path-scoped heavy OpenClaw lane (check-pikachat-openclaw-e2e)
Android bot/media fixture selector via integration_deterministic::ui_e2e_local_android
nightly-apple-host-bundle
just apple-host-bundle on the Mac mini via ./scripts/pikaci-apple-remote.sh run --just-recipe apple-host-bundle. This owns the retained heavy Apple coverage: just desktop-ui-test, cargo run -q -p pikaci --bin pikaci -- run pre-merge-pikachat-apple-followup, just ios-ui-test, just shared-runtime-regression, just openclaw-pikachat-deterministic, and just cli-smoke. The retained ios-ui-test path uses prepared build-for-testing outputs and the Nix-built xcframework inputs, and still skips the OpenClaw live-network UI E2E case unless explicitly opted back in.
Direct Selector Recipes (Not Owners By Themselves)
Recipe
Canonical selectors
Current policy status
android-ui-e2e-local
integration_deterministic::ui_e2e_local_android
nightly CI-owned via nightly-pika-ui-android; also useful as a manual rerun entrypoint
ios-ui-e2e-local
integration_deterministic::ui_e2e_local_ios
manual-only today; not CI-enforced
desktop-e2e-local
integration_deterministic::ui_e2e_local_desktop
convenience alias to a pre-merge-owned selector; not the lane owner itself
interop-rust-baseline
integration_deterministic::interop_rust_baseline
manual-only today; documented as a heavy future candidate, not a current CI lane
just nightly-primal-ios-interop remains a checked-in manual compatibility canary for integration_primal::primal_nostrconnect_smoke.
tools/primal-ios-interop-nightly remains the thin selector wrapper for that smoke.
This path is intentionally outside CI-owned nightly Apple coverage because it depends on public network, external Primal app behavior, and cross-app interop timing.
Compatibility-Only Wrappers
just cli-smoke, just cli-smoke-media, just desktop-e2e-local, just openclaw-pikachat-deterministic, and just openclaw-pikachat-e2e are compatibility-only recipe surfaces; ownership remains with the lane listed in docs/testing/integration-matrix.md.
tools/cli-smoke, tools/ui-e2e-local, tools/interop-rust-baseline, and tools/primal-ios-interop-nightly stay as DX wrappers only.
pikachat-openclaw/scripts/* stays as wrapper/alias surface only.
Ownership remains with the selector or lane listed in docs/testing/integration-matrix.md; wrappers are not policy owners.
Convenience / Advisory Surfaces
just pre-merge and just nightly are repo-level aggregates, not canonical policy definitions.
just e2e-local-relay is a convenience bundle for the iOS + Android local UI recipes; it is not a CI lane contract.
just shared-runtime-regression is a direct rerun entrypoint, but standing CI ownership now sits with nightly-apple-host-bundle.
just desktop-ui-test is the direct rerun entrypoint for the retained nightly Apple desktop runtime coverage, not the blocking compile smoke contract.
just pre-merge-apple-deterministic is a checked-in Tart/pikaci entrypoint, but it is not part of current canonical pre-merge enforcement.
Deferred Root CI / pikaci Mismatches
On Apple Silicon, just pre-merge-pikachat remains explicitly composed from staged Linux pre-merge-pikachat-rust plus the pikaci target pre-merge-pikachat-apple-followup, while the separate check-apple-desktop-compile and check-apple-ios-compile lanes now own the blocking Mac mini compile contract.
The retained heavy Apple coverage now lives under nightly-apple-host-bundle; the local-fixture selector ios-ui-e2e-local remains manual-only and should not be described as nightly-owned.
Policy Notes
Deterministic selectors are preferred for pre-merge gates.
Heavy and nondeterministic selectors remain #[ignore] and must be lane-selected explicitly.
Public-network, deployed-bot, and perf probes are out of scope for the core app CI truth surface; local-fixture selectors are the required replacement coverage.
Capability-dependent selectors must skip with explicit reason text via pikahut::testing requirement helpers.
Manual contracts are selectors in integration_manual; interactive/manual tooling remains out-of-band from CI lanes.