Moves Corpora dir from packages/Harness/Corpora into packages/Harness/Sources/Harness/Corpora and updates the resource declaration from .copy("../../Corpora") to .copy("Corpora"). xcodebuild's strict package resolution was flagging the package-root location as unhandled despite the swift-test pattern working. Bundle.module layout unchanged; all call sites unaffected. 63/63 Harness tests pass locally.
Harness
The eval harness + test fixtures + the jarvis-eval CLI executable. Not shipped in the user-facing app — it's the infrastructure for "run after significant changes" eval scenarios.
Key public types
| Type | Purpose |
|---|---|
MockLLMProvider |
Records every prompt + tool-call exchange; scriptable response sequences |
ReplayMCPAdapter |
Replays a recorded MCP transcript against a fresh dispatcher |
MockHelperBuilder |
Generates fake MCP helper bundles for crash/restart tests |
CapturingURLProtocol |
Records HTTP traffic for SSE/NDJSON fixture capture |
FDLeakDetector |
Asserts no file descriptors leaked across a test boundary (SEC-08) |
*Corpus |
Fixture corpora (SSE, NDJSON, wake-hysteresis, injection, checklist) |
*Runner |
Per-corpus eval runners (SSEFixtureRunner, WakeHysteresisRunner, etc.) |
DriftClassifier / DriftReport |
Compare observed vs expected results across runs |
Depends on
Logging, Config, AgentCore, Replay, MCP, Voice, Memory, DevOverlay. External: swift-argument-parser, swift-log, MCP SDK, Yams.
Used by
The jarvis-eval executable target; not imported by App/.
Key invariants / contracts
- Corpora are versioned + checksummed. Fixture changes require deliberate updates (not silent drift).
- Local-model eval pinned to
qwen2.5-coder:32b— Qwen3 / Gemma 4 tool-calling broken in Ollama as of April 2026. - Live tests gated by env flags.
JARVIS_REAL_MODELS=1,JARVIS_REAL_CAMERA=1. Default runs are offline + deterministic. MockLLMProviderrecords calls (Mock taxonomy per CLAUDE.md §Test naming conventions).
Tests
The harness package itself has its own XCTests (smoke tests on the runners + corpus loaders). Most of the codebase's eval coverage is invoked through the harness, not of the harness.
Notable files
Sources/jarvis-eval/main.swift— CLI entry pointSources/Harness/Adapters/MockLLMProvider.swift— the canonical mock LLMSources/Harness/Runners/SSEFixtureRunner.swift— Anthropic SSE replay runnerSources/Harness/Runners/MCPCrashRunner.swift— helper-restart scenariosSources/Harness/Corpus/SSEFixtureCorpus.swift— recorded SSE traces