Architecture
SHAFT has two kinds of modularity:
- Maven artifacts control dependency weight.
- The
SHAFTfacade 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
| Artifact | Packaging | Consumer purpose |
|---|---|---|
shaft-engine | JAR | Required facade and core web, mobile, API, database, CLI, reporting, and accessibility implementation. |
shaft-pilot-core | JAR | Provider-neutral Pilot contracts, consent, redaction, budgets, audit metadata, and deterministic fallback. |
shaft-capture | JAR | Managed Chrome/Edge recording, deterministic privacy classification, versioned schema, and atomic JSON persistence. |
shaft-doctor | JAR | Portable redacted evidence, deterministic diagnosis, optional advisory, and approval-gated isolated repair proposals. |
shaft-ai | JAR | Optional direct OpenAI, Anthropic, Gemini, and Ollama HTTP adapters discovered through ServiceLoader. |
shaft-heal | JAR | Deterministic, explainable, action-scoped web element recovery with bounded local history and optional reranking. |
shaft-browserstack | JAR | BrowserStack SDK interception and browserstack.yml orchestration. Direct BrowserStack sessions stay in shaft-engine. |
shaft-video | JAR | Local non-headless desktop recording. Appium-native recording stays in shaft-engine. |
shaft-visual | JAR | Reference-image assertions and image-based lookup through OpenCV, Eyes, and Shutterbug. |
SHAFT_MCP | executable JAR | Optional MCP server and CLI exposing browser automation, managed capture, Doctor analysis, and packaged direct adapters. |
shaft-bom | POM | Aligns all SHAFT artifact versions; adds no runtime classes. |
SHAFT_ENGINE | relocation POM | Temporary 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
- Upgrade and module selection
- SHAFT Heal
- BrowserStack SDK module
- Visual processing module
- Desktop video module
- SHAFT Pilot
- SHAFT Pilot release runbook
- SHAFT MCP
- Optional AI providers
- SHAFT Capture
- Maven reactor layout