Skip to main content

Architecture

SHAFT has two kinds of modularity:

  1. Maven artifacts control dependency weight.
  2. The SHAFT facade exposes testing namespaces such as GUI, API, CLI, and DB.

These are related, but they are not one artifact per facade namespace. Most functionality remains in the required shaft-engine JAR.

Published Maven artifacts

ArtifactPackagingConsumer purpose
shaft-engineJARRequired facade and core web, mobile, API, database, CLI, reporting, and accessibility implementation.
shaft-pilot-coreJARProvider-neutral Pilot contracts, consent, redaction, budgets, audit metadata, and deterministic fallback.
shaft-captureJARManaged Chrome/Edge recording, deterministic privacy classification, versioned schema, and atomic JSON persistence.
shaft-doctorJARPortable redacted evidence, deterministic diagnosis, optional advisory, and approval-gated isolated repair proposals.
shaft-aiJAROptional direct OpenAI, Anthropic, Gemini, and Ollama HTTP adapters discovered through ServiceLoader.
shaft-healJARDeterministic, explainable, action-scoped web element recovery with bounded local history and optional reranking.
shaft-browserstackJARBrowserStack SDK interception and browserstack.yml orchestration. Direct BrowserStack sessions stay in shaft-engine.
shaft-videoJARLocal non-headless desktop recording. Appium-native recording stays in shaft-engine.
shaft-visualJARReference-image assertions and image-based lookup through OpenCV, Eyes, and Shutterbug.
SHAFT_MCPexecutable JAROptional MCP server and CLI exposing browser automation, managed capture, Doctor analysis, and packaged direct adapters.
shaft-bomPOMAligns all SHAFT artifact versions; adds no runtime classes.
SHAFT_ENGINErelocation POMTemporary legacy-coordinate bridge to shaft-engine; adds no optional providers.

See the upgrade guide for method-level dependency boundaries.

Facade architecture

Optional provider discovery

shaft-heal, shaft-visual, and shaft-video implement SHAFT-owned provider interfaces and register them through Java ServiceLoader. The facade and orchestration remain in shaft-engine, which means users add a provider JAR without changing test method calls.

shaft-browserstack is a runtime integration rather than a SHAFT provider. It adds browserstack-java-sdk; SHAFT's core BrowserStack driver path also generates browserstack.yml, which the SDK consumes when the optional module is present.

Module guides


Overview · Quick start