Skip to content

Latest commit

 

History

History
80 lines (63 loc) · 3.76 KB

ROADMAP.md

File metadata and controls

80 lines (63 loc) · 3.76 KB

Immediate goals

fix: Get rid of streaming in WebUI

Listening to multiple streams will exhaust all the available connections in a browser. Use timer instead, Add stream parameter.

feat: Turn execution-id into a resource

Make it symetrical with join-set-id, disallow users from -awaiting on a string, can track the join set created.

fix: Deadlock when calling -await-next while nothing is in queue

feat: Add obelisk generate

obelisk generate config blank,webui,fibo obelisk generate wit -c obelisk.toml --out-dir wit/deps/ my-activity obelisk new - show templates

feat: Create an SDK for workflows and other (logging - maybe a proc macro)

feat: Versioning

versioning to tell when a component is not supported. The generated WITs should have a version. SDK needs to be versioned as well.

feat: -await(execution-id), can be called multiple times

fix: Make JoinSetId in the format executionid;0

Avoid possible conflicts when creating join sets.

refactor Remove wasmtime from parser

feat: deps.toml tool

obelisk wit update-deps

feat: Support WIT-only WASM files

Allow pushing and declaring WASM resources only containing the WIT. Needed for external activities.

feat: Long running monitor trigger

Similar to a webhook endpoint, new component type with main, restarts on exit or trap. Can listen to a HTTP stream and trigger an execution. Could be used to monitor MQTT, UDP etc.

feat: Heterogenous join sets, allowing one join set to combine multiple function signatures and delays

feat: Expose network configuration for activities, webhooks

Enable allow/deny lists of remote hosts.

feat: Keepalives for activities, extending the lock until completion

feat: Request stack trace at any point of the workflow log

Future ideas

  • Interactive CLI for execution management
  • External activities gRPC API
  • External executors support - starting executions solely based on WIT exports. External executors must share write access to the sqlite database.
  • OpenAPI, GraphQL activity generator
  • Backpressure: Limits on pending queues, or an eviction strategy, slow down on LimitReached
  • Labels restricting workflows/activities to executors
  • Periodic scheduling
  • Deadline propagation
  • Cancellation propagation
  • Queue capacity setting, adding backpressure to execution submission
  • Ability to simulate behaviour of the system with injected failures
  • (Manual) Notify activities. When called, thir return value must be supplied via an API endpoint.
  • An API for listing executions with their open notify activities.
  • Read only query function that can be called during an await point or after execution finishes.
  • Optional stdout,stderr persistence / forwarding
  • Smart dependency routing from a caller via an interface import to one of many components that export it.
  • Smart retries - Retry budget, disabling retries when the activity is failing certain % of requests
  • Configurable jitter added to retries
  • Workflow memory snapshots for faster replay
  • Time traveling debugger for workflows, that works accross WASM deployments
  • Ability to hotfix a set of workflows, with an approval system when non determinism is detected - forking the execution log
  • Trace strings to their origin accross workflows and activities
  • Webhook endpoint mappings: running a single function, translating between HTTP and WIT defined parameters and return value
  • Distributed tracing context forwarding for outgoing HTTP as well as webhooks
  • Allow specifying permanent error variants in as annotations in WIT
  • Support for (distributed) sagas - define rollbacks on activities, call them on failed workflows
  • Investigate code-coverage for workflow steps