Evidence by boundary

Small sets. No repeated cases.

The SDK uses exact Vanilla Test 2.1.3 and keeps every test file in one named set. Run a focused set while iterating; run the complete check before delivery.

01

Unit

Descriptors, schemas, contracts, target definitions, and host-independent helpers.

npm run test:unit
02

Functional

CLI behavior, scaffold output, development server, packaging, runtime sync, events, and Pages.

npm run test:functional
03

Integration

Integrated workspaces, native plans/providers, release bundles, shared payloads, and tarball boundaries.

npm run test:integration
04

Regression

Channel workflows, generated providers, runner behavior, and test-set partition guarantees.

npm run test:regression

Run the right amount

SDK checkout
# One set while iterating
npm run test:functional

# All four sets
npm test

# Source checks, runtime manifest, and all test sets
npm run check

Generated app tests stay with the app

An external project runs npm run test or npm run check through its pinned SDK. Integrated app scope selects only the chosen apps/<id>/test/ tree; shared/Core scope requires one exact test file or Arcane's canonical development check.

Focused integrated shared test
node ..\arcane-os-sdk\bin\arcane.mjs test `
  --workspace "..\Arcane OS" `
  --scope shared `
  --test-file test/component-contracts.test.mjs

Source evidence is not artifact evidence

Source checkCode and contract behavior.
Browser packageAllowlist, inventory, hashes, and served entry.
Native artifactExact target bytes, provider verification, and real-host launch.
ReleasePublisher, distribution, update, and promotion gates.

A green source suite cannot stand in for a Windows EXE, Linux DEB, Android APK, or production release. Test the artifact that carries the claim.

Language ownership

The SDK repository's suite is JavaScript. Native components should keep behavior tests in the language they ship while reporting through the shared evidence conventions; duplicating implementation behavior in a second language is not a substitute for testing the real code.