Component boundaries and numerical library
This implements the direction in ADR 0006 within the existing repository. Package separation precedes repository extraction. The first independent distribution is the numerical science library; the workbench remains in this repository while its API boundary and deployment are qualified.
Workbench (Qt) / \ Open local LAS ProjectClient (authenticated RPC) | | File adapter/document Platform service | / \ explicit mapping Storage adapter Job/permission control | | | +-- publish --------+ supplied immutable samples | Curve calculation runtime | Pure numerical kernels| Responsibility | Concrete implementation | Dependencies / authority |
|---|---|---|
| Workbench interaction | client/application_shell.*, local_document_window.*, workspace panes |
Qt, public client API and file connector; no SQL or repository calls |
| Offline LAS interpretation | arraybridge_file_adapters, las_document.* |
Standard C++ only; preserves evidence and normalizes supported depth indexing |
| LAS-to-shared mapping | arraybridge_las_connector, las_publication.* |
File contract + generated wire types; makes no network or storage calls |
| Client service interface | arraybridge_project_api, ProjectClient |
Transport/authentication and generated protocol; no Qt or database |
| Platform/storage integration | ProjectRepository, service handlers |
Authorizes, acquires exact inputs, checks leases/conflicts and commits results with provenance |
| Job process runtime | src/worker_main.cpp |
Owns process limits, cancellation/leases; still uses existing repository adapter |
| Calculation runtime | arraybridge_curve_runtime, calculate_curve |
Supplied samples + typed operator request -> results, metadata, warnings and hash input; no I/O, credentials, Qt or repository |
| Numerical algorithms | arraybridge_operators / installed ArrayBridge::science |
Standard C++ only; no service, Qt, OSDU or database |
| OSDU adapter | Existing bounded evaluation/service integration | OSDU remains authoritative in qualified OSDU mode; no fork or silent second authority |
The platform catalog describes supported operator versions and validates requests. The numerical implementation belongs to the science library. The runtime invokes it. Linking these modules into the same development executable does not transfer those responsibilities to the GUI or database layer.
calculate_curve currently uses generated protocol types as its job DTOs; that
library therefore has a protocol dependency. It is not the standalone numerical
SDK. Its caller supplies a validated request, metadata and bounded rows (MD, TVD,
TVDSS, value; empty strings mean missing). The runtime additionally validates row
shape, finite values, sample bounds and strictly ascending MD. The repository
retains run authorization, semantic validation, provenance merging, transactions,
leases, stable-asset replacement and publication. Errors cannot publish partial
output. The worker’s process supervision remains separate from these functions.
Standalone numerical library
Section titled “Standalone numerical library”No Qt, protobuf, gRPC, database, network download or service is required:
cmake -S packages/science -B build/science -DCMAKE_INSTALL_PREFIX="$PWD/build/science-install"cmake --build build/sciencectest --test-dir build/science --output-on-failurecmake --install build/scienceA separate CMake consumer can use:
find_package(ArrayBridgeScience CONFIG REQUIRED)add_executable(my_tool main.cpp)target_link_libraries(my_tool PRIVATE ArrayBridge::science)Configure it with -DCMAKE_PREFIX_PATH=/path/to/science-install. Headers expose
std::span and result vectors, not project or application objects. The package is
an experimental source/binary development package; API/ABI stability and public
release licensing are not implied. Existing C++ numerical tests now link only
the numerical target and GoogleTest; transport tests live in their own suite.
Enforcement and extensibility
Section titled “Enforcement and extensibility”cmake/ArchitectureBoundaries.cmake refuses unapproved direct dependencies on
selected leaf targets. tests/architecture_boundaries.py detects forbidden
implementation includes and storage calls. The standalone build and external
installed consumer verify actual independence, beyond directory naming.
New file connectors should produce an explicit scientific document and loss report. New service adapters implement authorized acquisition/publication at the platform boundary. New operators should add pure kernels and runtime dispatch, with tests for units/nulls/axes/provenance. Clients invoke supported APIs and must not reach around them into database schemas or host internals.
Remaining work: a stable versioned connector SDK, fully independently packaged job runtime/backend interfaces, general destination configuration, OSDU-native workbench publication, local derivation UI, and eventual workbench repository extraction. This change does not promise arbitrary interchangeability or a fully backend-neutral platform. See availability for qualification limits.
