Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Verification Workflow

This page maps capOS claims to the commands, QEMU smokes, fuzz targets, proof tools, and review documents that currently support them.

Local Command Set

Use the repo aliases and Makefile targets instead of bare host commands. The workspace default Cargo target is x86_64-unknown-none, so host tests rely on aliases that set the host target explicitly.

ScopeCommandWhat it checks
Formattingmake fmt-checkRust formatting across kernel, shared crates, standalone userspace crates, and demos.
Config and manifest logiccargo test-configCap’n Proto manifest encode/decode, CUE value handling, CapSet layout, and config validation.
Ring concurrency modelcargo test-ring-loomBounded SQ/CQ producer-consumer invariants and corrupted-SQ recovery behavior.
Shared library logiccargo test-libELF parser, frame bitmap, frame ledger, capability table, and property-test coverage.
Manifest toolcargo test-mkmanifestHost-side manifest conversion and validation behavior.
Userspace runtimemake capos-rt-checkcapos-rt build path, entry ABI, typed clients, ring helpers, and no_std constraints.
Kernel buildcargo build --features qemuKernel build with the QEMU exit feature enabled.
Generated bindingsmake generated-code-checkCap’n Proto compiler path/version, generated output equality, no_std patch anchors, and checked-in baseline drift.
Dependency policymake dependency-policy-checkcargo-deny and cargo-audit policy across root and standalone lockfiles.
Full image buildmakeKernel, userspace demos, runtime smoke binaries, manifest, Limine artifacts, and ISO packaging.
Default QEMU smokemake runInit-owned manifest execution, BootPackage validation, ProcessSpawner hostile cases, child grants, waits, capability ring, IPC, transfer, VirtualMemory, TLS, cleanup, and final halt paths included in the default manifest.
Focused spawn QEMU smokemake run-spawnNarrower init-owned ProcessSpawner graph for endpoint, IPC, VirtualMemory, FrameAllocator cleanup, child grants, waits, and hostile spawn checks.
Networking smokemake run-netQEMU virtio-net attachment and kernel PCI/device-discovery path.
Kani proofsmake kani-libBounded proofs for selected capos-lib invariants when cargo-kani is installed.

Do not claim full verification unless the relevant command actually ran in the current change. For doc-only changes, use an appropriately narrower check such as mdbook build.

Review Workflow

  1. Identify the changed trust boundary or state that the change is docs-only.
  2. Read REVIEW.md for the applicable security, unsafe, memory, performance, capability, and emergency-path checklist.
  3. Read REVIEW_FINDINGS.md before judging correctness so known open findings are not treated as solved behavior.
  4. For system-design work, list the concrete design and research files read; reviewers should reject vague grounding such as “docs” or “research”.
  5. Run the smallest command set that exercises the changed behavior, then add QEMU proof for user-visible kernel or runtime behavior.
  6. Record unresolved non-critical findings in REVIEW_FINDINGS.md with concrete remediation context before treating the task as reviewed.

Evidence by Claim

Claim typeRequired evidence
Parser or manifest validationHost tests for valid and malformed input; fuzz target when arbitrary bytes can reach the parser.
Kernel/user pointer safetyQEMU hostile-pointer smoke plus code review of address, length, permissions, and validation-to-use windows.
Ring or IPC transport behaviorHost model/property tests where possible, plus QEMU process output proving success and failure paths.
Capability transfer or releaseRollback tests for copy/move/release failure, cap-slot exhaustion, stale caps, and process-exit cleanup.
Resource accountingTests that prove quota rejection, matched release on success and failure, and process-exit cleanup.
Generated code or schema changesmake generated-code-check and a checked-in baseline diff generated by the pinned compiler.
Dependency or toolchain changesDependency-class review plus make dependency-policy-check; update ../trusted-build-inputs.md when trust assumptions change.
Device or DMA workmake run-net or a targeted QEMU smoke; no userspace-driver transition without the gates in ../dma-isolation-design.md.
Panic-surface hardeningUpdated ../panic-surface-inventory.md when reachability or classification changes.
Authentication and session workHost tests for verifier encoding, bounded challenge/setup-token state, failure policy, and audit redaction; QEMU proof for setup/login, failed auth, successful shell launch, and absence of broad BootPackage/raw ProcessSpawner caps in the shell.

Fuzzing and Proof Tracks

The current fuzz corpus lives under fuzz/ and covers manifest Cap’n Proto input, exported JSON conversion for mkmanifest, and arbitrary ELF parser input. Run fuzzers when a change alters those parsers, schema shape, or validation rules.

Kani coverage is intentionally narrow and lives in capos-lib, where pure logic can be bounded without hardware state. Add or refresh Kani harnesses for ledger, cap-table, bitmap, and parser invariants when those invariants become part of a security claim.

Loom coverage belongs in shared ring logic. Extend cargo test-ring-loom when SQ/CQ ownership, ordering, corruption recovery, or wake semantics change.

Documentation Sources