docs: add README for workspace and all 7 crates

Root README covers architecture, Rust builder API quick start,
YAML pipeline quick start, provider table, deno executor overview,
feature flags, and testing instructions.

Per-crate READMEs follow consistent structure: one-liner, what it
does, quick start code example, API reference, configuration,
testing, license. Engineering-confident tone throughout.
This commit is contained in:
2026-03-26 00:25:23 +00:00
parent 7497d4c80b
commit 386cd2255d
8 changed files with 865 additions and 0 deletions

103
wfe-opensearch/README.md Normal file
View File

@@ -0,0 +1,103 @@
# wfe-opensearch
OpenSearch search index provider for the WFE workflow engine.
## What it does
Implements the `SearchIndex` trait backed by OpenSearch. Indexes workflow instances as documents and supports full-text search with bool queries, term filters (status, reference), date range filters, and pagination. The index mapping is created automatically on `start()` if it does not already exist.
## Quick start
```rust
use wfe_opensearch::OpenSearchIndex;
let index = OpenSearchIndex::new(
"http://localhost:9200",
"wfe_workflows",
)?;
// Create the index mapping (idempotent)
index.start().await?;
// Index a workflow
index.index_workflow(&workflow_instance).await?;
// Search with filters
use wfe_core::traits::search::{SearchFilter, SearchIndex};
let page = index.search(
"deploy", // free-text query
0, // skip
20, // take
&[SearchFilter::Status(WorkflowStatus::Complete)],
).await?;
```
## API
| Type | Trait |
|------|-------|
| `OpenSearchIndex` | `SearchIndex` |
Key methods:
| Method | Description |
|--------|-------------|
| `new(url, index_name)` | Create a provider pointing at an OpenSearch instance |
| `start()` | Create the index with mappings if it does not exist |
| `index_workflow(instance)` | Index or update a workflow document |
| `search(terms, skip, take, filters)` | Bool query with filters, returns `Page<WorkflowSearchResult>` |
| `client()` | Access the underlying `OpenSearch` client |
| `index_name()` | Get the configured index name |
### Search filters
| Filter | OpenSearch mapping |
|--------|--------------------|
| `SearchFilter::Status(status)` | `term` query on `status` (keyword) |
| `SearchFilter::Reference(ref)` | `term` query on `reference` (keyword) |
| `SearchFilter::DateRange { field, before, after }` | `range` query on date fields |
Free-text terms run a `multi_match` across `description`, `reference`, and `workflow_definition_id`.
## Index mapping
The index uses the following field types:
| Field | Type |
|-------|------|
| `id` | keyword |
| `workflow_definition_id` | keyword |
| `version` | integer |
| `status` | keyword |
| `reference` | keyword |
| `description` | text |
| `data` | object (disabled -- stored but not indexed) |
| `create_time` | date |
| `complete_time` | date |
## Configuration
Constructor takes two arguments:
| Parameter | Example | Description |
|-----------|---------|-------------|
| `url` | `http://localhost:9200` | OpenSearch server URL |
| `index_name` | `wfe_workflows` | Index name for workflow documents |
Security plugin is not required. For local development, run OpenSearch with `DISABLE_SECURITY_PLUGIN=true`.
## Testing
Requires a running OpenSearch instance. Use the project docker-compose:
```sh
docker compose up -d opensearch
cargo test -p wfe-opensearch
```
Default test connection: `http://localhost:9200`
## License
MIT