flowstate

module
v0.0.0-...-9bd08e8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 13, 2026 License: MIT

README

Flowstate

OpenSSF Scorecard

Write a workflow once, rehearse and test it on your machine, then run the same workflow durably on Temporal, governed by identity, policy, and secrets.

Flowstate is a typed, durable, debuggable workflow language and engine, for work that has to finish correctly despite crashes, network failures, and waits of hours or days. Business processes with people in the loop; long-lived entities that many callers address; agents that act under policy; provisioning that must be undone when a later step fails; data pipelines; incident runbooks; releases that roll out in stages. You describe the workload in a Flowfile, YAML for structure and CEL expressions for data and conditions. Flowstate validates it, compiles it into a typed Protobuf specification, and runs that specification either in-process for rehearsal or on Temporal, where every step is recorded and a run survives any process stopping.

Authors get a fast local loop: validation with line and column, tests on a virtual clock, a step debugger, and editor and agent integration. Operators get authenticated callers and approvers, policy over what workflows may reach and read, worker-side secret resolution, tenant isolation, and an audit trail.

Flowstate works alongside CI, services, and your existing Temporal usage rather than replacing them. Why Flowstate, and when not compares it with the alternatives, including the workloads it does not fit.

[!WARNING] Flowstate is early software. The capabilities described here are shipped and tested, but the interfaces are not yet stable: expect breaking changes, and see SUPPORT.md.

A Flowfile

A customer asks for a refund. This workflow totals the lines of the request and checks the total against a limit that belongs to the workflow rather than to whoever starts it, then tells the customer what happened. A payout, and a person in finance who must approve the large ones, are the next step; see examples/refund-request.

edition: v2026.4
name: refund-triage
inputs:
  order_id:
    type: string
    required: true
  lines:
    type: list(int)
    default: [1500, 4200]
vars:
  auto_limit_cents: 5000
steps:
  - id: total
    value: ${inputs.lines.sum()}
  - id: needs_review
    value: ${steps.total.value > vars.auto_limit_cents}
  - id: tell
    log:
      message: refund of ${steps.total.value} cents on ${inputs.order_id} (needs review ${steps.needs_review.value})
outputs:
  needs_review:
    value: ${steps.needs_review.value}
  total_cents:
    value: ${steps.total.value}
$ flow validate workflow.yaml
workflow.yaml: ok
$ flow run local workflow.yaml --input order_id=o-1 -o json | jq -c .runOutputs
{"needs_review":true,"total_cents":5700}

inputs.lines is the run's typed argument, a list of integers with a default. total and needs_review are step ids; reading ${steps.total.value} is how needs_review gets the total, and also what orders it after total. The outputs are the run's result. Every complete Flowfile in this README and the core guides is compiled and linted by the test suite.

Start smaller: one step
edition: v2026.4
name: hello-world
steps:
  - id: hello
    log:
      message: hello world

Run it with flow run local workflow.yaml. No server, worker, or Temporal is involved. A single task can also run without a Flowfile through flow task run; the task reference lists what each task takes.

Go further: an authenticated approval

The approval-gate example waits for a durable signal and accepts it only from an approver with the right verified identity, who is not the person who asked. The server checks the sender before Temporal receives the signal, and no process stays open while the run waits.

Rehearse its approvals, timeout, and refusals locally, on a virtual clock:

$ flow test examples/approval-gate/

Then follow its authenticated approval walkthrough to run it durably with separate requester and approver credentials.

From file to durable run

flowchart LR
  subgraph author["1 · Author"]
    File["<b>Flowfile</b><br/>YAML + CEL"]
    Check["validate · compile · test"]
  end

  Spec["<b>Workflow protobuf</b><br/>typed and frozen"]

  subgraph execute["2 · Execute"]
    Local["local driver<br/>in process"]
    API["ConnectRPC API"]
    Temporal[("<b>Temporal</b><br/>durable history")]
    Worker["Flowstate worker"]
  end

  Registry["task registry<br/>built-ins + plugins"]
  Policy["identity · policy · secrets"]

  File --> Check --> Spec
  Spec --> Local
  Spec --> API
  API <--> Temporal
  Temporal <--> Worker
  Registry --> Local
  Registry --> Worker
  Policy -.-> |constrains| API
  Policy -.-> |constrains| Worker

  classDef authoring fill:#DDF4FF,stroke:#0969DA,color:#1F2328
  classDef contract fill:#FFF1C2,stroke:#9A6700,stroke-width:3px,color:#1F2328
  classDef runtime fill:#DAFBE1,stroke:#1A7F37,color:#1F2328
  classDef durable fill:#FBEFFF,stroke:#8250DF,color:#1F2328
  classDef govern fill:#FFEBE9,stroke:#CF222E,color:#1F2328
  classDef neutral fill:#F6F8FA,stroke:#57606A,color:#1F2328
  class File,Check authoring
  class Spec contract
  class Local,API,Worker runtime
  class Temporal durable
  class Policy govern
  class Registry neutral

The Flowfile is how you write a workflow; the compiled flowstate.v1.Workflow is what runs. The local driver and the Temporal driver execute that one specification through the same step executor, and a shared conformance suite holds them to the same results. Temporal adds durable history, recovery, timers, signals, and Continue-As-New. The API server starts and observes runs through Temporal, and workers execute them. How Flowstate works explains each piece.

Quickstart

Install the CLI (Go 1.27 or newer):

$ go install github.com/picatz/flowstate/cmd/flow@latest

Scaffold a workflow with its test, check it, and run it locally:

$ flow init my-workflow
$ flow validate my-workflow/workflow.yaml
my-workflow/workflow.yaml: ok
$ flow test my-workflow
PASS  my-workflow/workflow.test.yaml: the greeting uses the input it was given
$ flow run local my-workflow/workflow.yaml
running locally
INFO hello, world
COMPLETED workflow my-workflow

Run it durably. flow server dev starts a Temporal development server, the Flowstate API server, and a worker from one command on loopback; the first launch downloads the Temporal CLI. In another terminal:

$ flow server dev
$ flow run my-workflow/workflow.yaml

flow run always means the server and never falls back to running locally. Follow and act on runs with flow watch, flow get, flow timeline, flow signal, flow cancel, and flow list.

Get started takes this further in twenty minutes: a refund-approval workflow, its tests, the debugger, and a durable run that survives a restart while it waits for an approval.

What you can build today

Area Shipped Go deeper
Author Typed inputs and outputs; cost-bounded CEL; positioned diagnostics; flow fmt, flow fix, flow lint; tests on a virtual clock; a step debugger; LSP and MCP servers Language · Testing · Editors
Compose Data flow by step reference; if, checked switch, bounded for_each, parallel, async, state-carrying loop, and isolated call with optional digest pinning Language · Examples
Execute Local rehearsal; durable runs on Temporal with retries, timeouts, durable timers and signals, schedules, webhooks, Continue-As-New, cancellation, and saga compensation Concepts · Use cases
Govern Authenticated callers and signal senders; per-workflow approval policy; egress that refuses internal addresses by default; CEL policy over egress, tasks, and secrets, with secrets denied until allowed; short-lived federated credentials; tenant routing; audit records Secrets · Deployment · Threat model
Extend Out-of-process plugins over a typed protocol, with first-party Anthropic, Docker, Git, GitHub, JOSE, OCI, OIDC, OpenAI, SCIM, Slack, SQL, SSH, VCS, Webhook, and Codex plugins; a Go embedding package Plugins · Embedding
Operate A ConnectRPC API; terminal and JSON output; run listing, watching, timelines, and cancellation; OpenTelemetry traces, metrics, and logs API · CLI reference · Observability example

Fetching plugins from a registry, hosted plugins, consuming MCP servers as capabilities, chat-based approvals, and a general LLM task are directions, not shipped features. Vision records them.

Integrate it

  • API. Every server operation is an RPC on flowstate.v1.WorkflowService, defined in proto/flowstate/v1/service.proto. Call it as JSON over HTTP with curl, with the generated Go client, or with a client you generate for another language. See the API guide.
  • Plugins. A worker launches plugin executables you name and learns their typed tasks from them; validation, completion, and generated docs read the same schema. A plugin is trusted code, not a sandbox.
  • Go embedding. pkg/flowstate/embed compiles Flowfiles, registers Go functions as tasks, and runs workflows in-process or on a Temporal worker your program owns.
  • Agents. flow mcp gives an MCP client the language guide, the task catalog, validation, tests, a scripted debugger, local rehearsal, and the control plane. See Using Flowstate from an agent and the generated MCP tool reference.

Find your way

You want to Start with
Try it Get started
Understand the model How Flowstate works
Write workflows The Flowfile language · Examples · Task reference · CEL reference
Test and debug them Testing · Debugging · Editors
Run Flowstate for a team Deployment · Secrets · CLI reference
Build on it API · Embedding · Plugins · MCP
See every document Documentation index

Development

Contributors start with CONTRIBUTING.md; coding agents start with AGENTS.md. Both apply the same gate:

$ go run ./tools/gate   # checks reachable from the current diff
$ make check            # full CI-parity suite

Read the architecture invariants before changing the engine.

License

MIT

Directories

Path Synopsis
cmd
flow command
Command flow is the Flowstate CLI: it validates, fixes, tests, and runs Flowfiles locally, and serves as the control plane, worker, and operator tooling for durable execution against Temporal.
Command flow is the Flowstate CLI: it validates, fixes, tests, and runs Flowfiles locally, and serves as the control plane, worker, and operator tooling for durable execution against Temporal.
flow/internal/appearance
Package appearance holds the CLI's appearance pins: charmbracelet/vhs tape files under testdata, one per styled surface, each paired with a golden of the terminal screen the tape produces.
Package appearance holds the CLI's appearance pins: charmbracelet/vhs tape files under testdata, one per styled surface, each paired with a golden of the terminal screen the tape produces.
flow/internal/debugpane
Package debugpane draws the debugger's two panes — where the run is, and what it can name — from a paused session's own read-only surface (#928 slice 1, #1111 item 2).
Package debugpane draws the debugger's two panes — where the run is, and what it can name — from a paused session's own read-only surface (#928 slice 1, #1111 item 2).
flow/internal/debugtui
Package debugtui is the debugger's full-screen view: a bubbletea screen over one flowdebug.Target, opened by `flow debug attach --tui`.
Package debugtui is the debugger's full-screen view: a bubbletea screen over one flowdebug.Target, opened by `flow debug attach --tui`.
flow/internal/docsgen
Package docsgen generates the reference documentation under docs/reference/, from the things that cannot drift.
Package docsgen generates the reference documentation under docs/reference/, from the things that cannot drift.
flow/internal/exploretui
Package exploretui is the full-screen system explorer: `flow explore`.
Package exploretui is the full-screen system explorer: `flow explore`.
flow/internal/fragments
Package fragments holds the interactive documents `flow mcp` serves as MCP Apps UI resources.
Package fragments holds the interactive documents `flow mcp` serves as MCP Apps UI resources.
flow/internal/mcp
Package mcp is the protocol surface `flow mcp` serves: tool names and descriptions derived from the schema, the RPC dispatch table, and registration of both onto an *mcp.Server.
Package mcp is the protocol surface `flow mcp` serves: tool names and descriptions derived from the schema, the RPC dispatch table, and registration of both onto an *mcp.Server.
flow/internal/pane
Package pane holds the pure components a full-screen view is assembled from.
Package pane holds the pure components a full-screen view is assembled from.
flow/internal/policycheck
Package policycheck answers "who may act" for a compiled workflow without running it: for one identity, which of the workflow's authorization gates admit it, decided by the very functions the engine decides them with.
Package policycheck answers "who may act" for a compiled workflow without running it: for one identity, which of the workflow's authorization gates admit it, decided by the very functions the engine decides them with.
flow/internal/policytest
Package policytest puts cases to a deployment policy and reports which rule denied each one that was denied, for `flow policy test`.
Package policytest puts cases to a deployment policy and reports which rule denied each one that was denied, for `flow policy test`.
flow/internal/reference
Package reference holds the documents `flow mcp` serves as MCP resources.
Package reference holds the documents `flow mcp` serves as MCP resources.
flow/internal/sarif
Package sarif renders Flowstate diagnostic reports as SARIF 2.1.0, the Static Analysis Results Interchange Format, so a code-scanning consumer (GitHub code scanning, an IDE's problems panel) reads `flow validate` without a bespoke parser.
Package sarif renders Flowstate diagnostic reports as SARIF 2.1.0, the Static Analysis Results Interchange Format, so a code-scanning consumer (GitHub code scanning, an IDE's problems panel) reads `flow validate` without a bespoke parser.
flow/internal/taskexample
Package taskexample builds the smallest Flowfile step that runs a given task.
Package taskexample builds the smallest Flowfile step that runs a given task.
flow/internal/tui
Package tui is the bubbletea shell a full-screen view of this CLI is built from: the parts of a screen that are about the terminal and not about what is being shown.
Package tui is the bubbletea shell a full-screen view of this CLI is built from: the parts of a screen that are about the terminal and not about what is being shown.
flow/internal/tui/tuitest
Package tuitest holds the helpers a headless test of a full-screen model is written with: fold messages into a model without a terminal, click and press keys by name, and pin a screen.
Package tuitest holds the helpers a headless test of a full-screen model is written with: fold messages into a model without a terminal, click and press keys by name, and pin a screen.
flow/internal/ui
Package ui decides, in one place, how the flow command line looks.
Package ui decides, in one place, how the flow command line looks.
flow/internal/watch
Package watch is the TUI `flow watch` draws while a run is going, and the state machine both the live view and the plain, line-per-change shape fold their answers into.
Package watch is the TUI `flow watch` draws while a run is going, and the state machine both the live view and the plain, line-per-change shape fold their answers into.
protoc-gen-flowstate-doc command
Command protoc-gen-flowstate-doc generates Go source that carries a schema's comments to run time.
Command protoc-gen-flowstate-doc generates Go source that carries a schema's comments to run time.
protoc-gen-flowstate-ts command
Command protoc-gen-flowstate-ts generates TypeScript declarations for the JSON a schema's messages travel as.
Command protoc-gen-flowstate-ts generates TypeScript declarations for the JSON a schema's messages travel as.
examples
embedding command
Command embedding is a runnable demonstration of pkg/flowstate/embed: a Go program that compiles a Flowfile from bytes, registers its own Go function as a custom task, and runs the workflow — locally by default, or durably against a Temporal server when --durable is given.
Command embedding is a runnable demonstration of pkg/flowstate/embed: a Go program that compiles a Flowfile from bytes, registers its own Go function as a custom task, and runs the workflow — locally by default, or durably against a Temporal server when --durable is given.
internal
commitcheck
Package commitcheck holds a pull request's title and body, or a commit's subject and body, to the shape the comms-commit and comms-pr skills ask for (#1728).
Package commitcheck holds a pull request's title and body, or a commit's subject and body, to the shape the comms-commit and comms-pr skills ask for (#1728).
covbuild
Package covbuild is test-only support for measuring coverage inside a subprocess.
Package covbuild is test-only support for measuring coverage inside a subprocess.
logsafe
Package logsafe is the one place a value another party chose is made safe to write into a log line.
Package logsafe is the one place a value another party chose is made safe to write into a log line.
pathsec
Package pathsec answers one question for every surface in this repository that opens something an attacker must not be able to substitute: can another identity replace any part of the path this process is about to resolve?
Package pathsec answers one question for every surface in this repository that opens something an attacker must not be able to substitute: can another identity replace any part of the path this process is about to resolve?
pluginreachtest
Package pluginreachtest owns the process harness shared by first-party plugin reachability tests.
Package pluginreachtest owns the process harness shared by first-party plugin reachability tests.
schemaifacepilot
Package schemaifacepilot contains the bounded experiment for issue #1227.
Package schemaifacepilot contains the bounded experiment for issue #1227.
schemaifacepilot/reference
Package reference contains the prose-bearing documentation half of the issue #1227 pilot.
Package reference contains the prose-bearing documentation half of the issue #1227 pilot.
shipcheck
Package shipcheck verifies the remote final-head evidence required before an autonomous Flowstate merge: the pull request's state, its checks, the owner's exact-head attestation of an independent review, and its review threads.
Package shipcheck verifies the remote final-head evidence required before an autonomous Flowstate merge: the pull request's state, its checks, the owner's exact-head attestation of an independent review, and its review threads.
strictyaml
Package strictyaml is the one place this module decodes YAML it did not write itself: an operator's trust, egress, task-shape or pins policy, a test document, a plugin's catalog.
Package strictyaml is the one place this module decodes YAML it did not write itself: an operator's trust, egress, task-shape or pins policy, a test document, a plugin's catalog.
temporaltest
Package temporaltest owns the Temporal dev-server process used by tests.
Package temporaltest owns the Temporal dev-server process used by tests.
termsafe
Package termsafe is the one definition of which runes must not reach a terminal bare, and the JSON rewrite that keeps them from doing so.
Package termsafe is the one definition of which runes must not reach a terminal bare, and the JSON rewrite that keeps them from doing so.
testkit
Package testkit holds the test helpers more than one package of this module needs, so that each package stops carrying its own copy.
Package testkit holds the test helpers more than one package of this module needs, so that each package stops carrying its own copy.
textbound
Package textbound bounds text that another party chose before it reaches an error message, a log line, or a response.
Package textbound bounds text that another party chose before it reaches an error message, a log line, or a response.
pkg
flowstate/embed
Package embed is the curated surface for embedding Flowstate as a Go library: compile a Flowfile from bytes, run it locally in-process or durably against a Temporal worker the embedding program owns, and register the program's own Go functions as tasks a workflow can call.
Package embed is the curated surface for embedding Flowstate as a Go library: compile a Flowfile from bytes, run it locally in-process or durably against a Temporal worker the embedding program owns, and register the program's own Go functions as tasks a workflow can call.
flowstate/plugin/v1
Package pluginv1 holds the generated messages of the Flowstate plugin protocol, flowstate.plugin.v1: the manifest a plugin describes itself with, and the requests and responses a worker exchanges with it to resolve secrets and execute tasks.
Package pluginv1 holds the generated messages of the Flowstate plugin protocol, flowstate.plugin.v1: the manifest a plugin describes itself with, and the requests and responses a worker exchanges with it to resolve secrets and execute tasks.
flowstate/plugin/v1/pluginv1connect
Package pluginv1connect is the Connect RPC binding of the Flowstate plugin protocol: the PluginService, SecretService, and TaskService a plugin process serves and a Flowstate worker calls.
Package pluginv1connect is the Connect RPC binding of the Flowstate plugin protocol: the PluginService, SecretService, and TaskService a plugin process serves and a Flowstate worker calls.
flowstate/v1
Package flowstatev1 holds the generated flowstate.v1 protobuf types and the hand-written engine that gives them behavior: the local interpreter, the task registry, and the CEL evaluator that both execution drivers share.
Package flowstatev1 holds the generated flowstate.v1 protobuf types and the hand-written engine that gives them behavior: the local interpreter, the task registry, and the CEL evaluator that both execution drivers share.
flowstate/v1/artifacts
Package artifacts is a tenant-scoped, content-addressed store for immutable trees of files.
Package artifacts is a tenant-scoped, content-addressed store for immutable trees of files.
flowstate/v1/audit
Package audit writes the record of an authorization decision to a sink that is complete rather than sampled.
Package audit writes the record of an authorization decision to a sink that is complete rather than sampled.
flowstate/v1/auth
Package auth establishes identity in both directions between Flowstate and the systems around it, using OpenID Connect and Workload Identity Federation.
Package auth establishes identity in both directions between Flowstate and the systems around it, using OpenID Connect and Workload Identity Federation.
flowstate/v1/auth/signers/vaulttransit
Package vaulttransit is an auth.Signer whose private key lives in a Vault or OpenBao Transit secrets engine and never enters this process.
Package vaulttransit is an auth.Signer whose private key lives in a Vault or OpenBao Transit secrets engine and never enters this process.
flowstate/v1/authtest
Package authtest serves an OpenID Connect provider from inside a test, so that a trust policy can be proved without an identity provider, a network, or a credential.
Package authtest serves an OpenID Connect provider from inside a test, so that a trust policy can be proved without an identity provider, a network, or a credential.
flowstate/v1/authz
Package authz answers one question for every enforcement point that guards a Flowstate operation: does this caller hold this authorization action?
Package authz answers one question for every enforcement point that guards a Flowstate operation: does this caller hold this authorization action?
flowstate/v1/celcomplete
Package celcomplete answers one question for every surface that asks it: given what an expression may name at this point, and the partial name someone has typed, what can they write next?
Package celcomplete answers one question for every surface that asks it: given what an expression may name at this point, and the partial name someone has typed, what can they write next?
flowstate/v1/celrule
Package celrule is the machinery a policy surface needs to hold an operator's CEL predicates: compile them at load, bound and interrupt their evaluation, insist on a boolean, and apply a deny-first set.
Package celrule is the machinery a policy surface needs to hold an operator's CEL predicates: compile them at load, bound and interrupt their evaluation, insist on a boolean, and apply a deny-first set.
flowstate/v1/codecserver
Package codecserver is Flowstate's remote payload codec: the HTTP endpoint Temporal's Web UI and CLI call to turn a namespace's encrypted history back into something a person can read, and to encrypt what a person types.
Package codecserver is Flowstate's remote payload codec: the HTTP endpoint Temporal's Web UI and CLI call to turn a namespace's encrypted history back into something a person can read, and to encrypt what a person types.
flowstate/v1/credentialsource
Package credentialsource turns an environment into a credential.
Package credentialsource turns an environment into a credential.
flowstate/v1/deviceflow
Package deviceflow signs a person in from a terminal with the OAuth 2.0 Device Authorization Grant, and keeps the result.
Package deviceflow signs a person in from a terminal with the OAuth 2.0 Device Authorization Grant, and keeps the result.
flowstate/v1/dst
Package dst is the deterministic simulation tier: one workflow run under many schedules, held to the claim that the schedule is not something an author can see (issue #477, slice 0).
Package dst is the deterministic simulation tier: one workflow run under many schedules, held to the claim that the schedule is not something an author can see (issue #477, slice 0).
flowstate/v1/dst/dsttest
Package dsttest is the testing-shaped front door to the deterministic simulation tier: explore a workflow's schedule space and fail the test on the first schedule that disagrees with written order.
Package dsttest is the testing-shaped front door to the deterministic simulation tier: explore a workflow's schedule space and fail the test on the first schedule that disagrees with written order.
flowstate/v1/engine
Package engine is the durable execution driver: it runs a compiled workflow specification as a Temporal workflow, so a run survives process crashes, deploys, and waits measured in days.
Package engine is the durable execution driver: it runs a compiled workflow specification as a Temporal workflow, so a run survives process crashes, deploys, and waits measured in days.
flowstate/v1/execpolicy
Package execpolicy decides which local programs a workflow may start, and starts the ones it admits: the policy and the runner behind the built-in `exec` task.
Package execpolicy decides which local programs a workflow may start, and starts the ones it admits: the policy and the runner behind the built-in `exec` task.
flowstate/v1/flowdap
Package flowdap speaks the Debug Adapter Protocol over a flowdebug.Target, so an editor's step and continue buttons drive a real flowstate run: a local flowdebug.Session the adapter launched, or a durable run reached through flowdebug.Remote.
Package flowdap speaks the Debug Adapter Protocol over a flowdebug.Target, so an editor's step and continue buttons drive a real flowstate run: a local flowdebug.Session the adapter launched, or a durable run reached through flowdebug.Remote.
flowstate/v1/flowdebug
Package flowdebug is the interactive step debugger (issue #928): a Session over a local run, and Remote, the same Target over a durable run's debug RPCs.
Package flowdebug is the interactive step debugger (issue #928): a Session over a local run, and Remote, the same Target over a durable run's debug RPCs.
flowstate/v1/flowfile
Package flowfile compiles a Flowfile — the YAML and CEL surface authors write — into the protobuf workflow the engine executes, and writes one back out again.
Package flowfile compiles a Flowfile — the YAML and CEL surface authors write — into the protobuf workflow the engine executes, and writes one back out again.
flowstate/v1/flowfile/lsp
Package lsp implements a Language Server Protocol server for the Flowfile DSL.
Package lsp implements a Language Server Protocol server for the Flowfile DSL.
flowstate/v1/flowstatev1connect
Package flowstatev1connect is the Connect RPC binding of the Flowstate API, flowstate.v1.WorkflowService, for programs that submit, observe, signal, and schedule runs on a Flowstate server.
Package flowstatev1connect is the Connect RPC binding of the Flowstate API, flowstate.v1.WorkflowService, for programs that submit, observe, signal, and schedule runs on a Flowstate server.
flowstate/v1/flowtest
Package flowtest implements `flow test` (#155): self-testing of workflows through the local driver, with stubbed tasks and virtual time.
Package flowtest implements `flow test` (#155): self-testing of workflows through the local driver, with stubbed tasks and virtual time.
flowstate/v1/flowtest/durable
Package durable runs a compiled workflow on the durable interpreter, in-process and with no server, forcing a Continue-As-New between every pair of steps, so that a test can ask the one question the local driver cannot: does the run mean the same thing when it is suspended, serialized and resumed between any two of its steps.
Package durable runs a compiled workflow on the durable interpreter, in-process and with no server, forcing a Continue-As-New between every pair of steps, so that a test can ask the one question the local driver cannot: does the run mean the same thing when it is suspended, serialized and resumed between any two of its steps.
flowstate/v1/flowtest/flowtesting
Package flowtesting is the testing-shaped front door to `flow test`'s harness (issue #930): it runs a `*.test.yaml` suite's cases as real Go subtests, one testing.T.Run per case, so the tooling an author already has — `go test -run`, `-v`, an IDE's per-test rerun, CI's per-test timing — addresses a Flowfile case exactly as it addresses a Go one.
Package flowtesting is the testing-shaped front door to `flow test`'s harness (issue #930): it runs a `*.test.yaml` suite's cases as real Go subtests, one testing.T.Run per case, so the tooling an author already has — `go test -run`, `-v`, an IDE's per-test rerun, CI's per-test timing — addresses a Flowfile case exactly as it addresses a Go one.
flowstate/v1/gates
Package gates serves the browser surface for the humans a durable gate waits on: one server-rendered page per pending `wait_for_signal:` gate, with the question the gate asks and the two answers a person can give it.
Package gates serves the browser surface for the humans a durable gate waits on: one server-rendered page per pending `wait_for_signal:` gate, with the question the gate asks and the two answers a person can give it.
flowstate/v1/graph
Package graph builds and renders the graph of how Flowstate workflows connect.
Package graph builds and renders the graph of how Flowstate workflows connect.
flowstate/v1/internal/conformance
Package conformance holds the behavior cases both execution drivers must pass.
Package conformance holds the behavior cases both execution drivers must pass.
flowstate/v1/internal/execimage
Package execimage is what Flowstate needs to know before it executes a program through an open file descriptor (/proc/self/fd/N) rather than by path: whether the kernel will in fact execute that image directly, and how to keep the descriptor out of the way of the child-side descriptor shuffle.
Package execimage is what Flowstate needs to know before it executes a program through an open file descriptor (/proc/self/fd/N) rather than by path: whether the kernel will in fact execute that image directly, and how to keep the descriptor out of the way of the child-side descriptor shuffle.
flowstate/v1/internal/procgroup
Package procgroup is the process-group handling shared by the two places Flowstate starts a child it must be able to stop completely: a plugin and the built-in exec task.
Package procgroup is the process-group handling shared by the two places Flowstate starts a child it must be able to stop completely: a plugin and the built-in exec task.
flowstate/v1/metricschema
Package metricschema decides which attribute keys may reach a metric instrument, and bounds what their values may be.
Package metricschema decides which attribute keys may reach a metric instrument, and bounds what their values may be.
flowstate/v1/nearest
Package nearest is the one did-you-mean rule: how far a typed name may be from a real one and still be offered as the thing that was probably meant.
Package nearest is the one did-you-mean rule: how far a typed name may be from a real one and still be offered as the thing that was probably meant.
flowstate/v1/netpolicy
Package netpolicy governs the outbound network access a workflow task is allowed to make.
Package netpolicy governs the outbound network access a workflow task is allowed to make.
flowstate/v1/payloadcodec
Package payloadcodec is the one seam where a run's payloads are encrypted before they are durable, and the one place both drivers are configured with the same answer.
Package payloadcodec is the one seam where a run's payloads are encrypted before they are durable, and the one place both drivers are configured with the same answer.
flowstate/v1/payloadcodec/envelope
Package envelope is Flowstate's production payload codec: envelope encryption of every payload a run writes to durable history, under keys the deployment holds and the substrate never sees.
Package envelope is Flowstate's production payload codec: envelope encryption of every payload a run writes to durable history, under keys the deployment holds and the substrate never sees.
flowstate/v1/payloadcodec/keyprovider
Package keyprovider is the seam between the payload envelope and whatever holds its wrapping keys: a local key file, a Vault or OpenBao Transit key, an HPKE recipient, or, later, a plugin fronting a cloud KMS.
Package keyprovider is the seam between the payload envelope and whatever holds its wrapping keys: a local key file, a Vault or OpenBao Transit key, an HPKE recipient, or, later, a plugin fronting a cloud KMS.
flowstate/v1/payloadcodec/keyprovider/hpke
Package hpke is the public-key key provider: data keys are sealed to an HPKE (RFC 9180) recipient's public key, and only a holder of its private key can unwrap them.
Package hpke is the public-key key provider: data keys are sealed to an HPKE (RFC 9180) recipient's public key, and only a holder of its private key can unwrap them.
flowstate/v1/payloadcodec/keyprovider/keyprovidertest
Package keyprovidertest is the conformance suite every key provider passes: the behaviour the envelope relies on, asserted the same way for a local key, an HPKE recipient, a Vault Transit key, and whatever comes next.
Package keyprovidertest is the conformance suite every key provider passes: the behaviour the envelope relies on, asserted the same way for a local key, an HPKE recipient, a Vault Transit key, and whatever comes next.
flowstate/v1/payloadcodec/keyprovider/local
Package local is the self-hosted key provider: a 256-bit wrapping key held by the process itself, in a file or an environment variable, that wraps data keys with AES-256-GCM.
Package local is the self-hosted key provider: a 256-bit wrapping key held by the process itself, in a file or an environment variable, that wraps data keys with AES-256-GCM.
flowstate/v1/payloadcodec/keyprovider/vault
Package vault is the key provider backed by a Vault or OpenBao Transit key: data keys are wrapped and unwrapped by Transit, and the wrapping key never leaves Vault.
Package vault is the key provider backed by a Vault or OpenBao Transit key: data keys are wrapped and unwrapped by Transit, and the wrapping key never leaves Vault.
flowstate/v1/payloadcodec/keyprovider/vault/vaulttest
Package vaulttest serves an in-memory stand-in for the part of the Vault Transit secrets engine that Flowstate's payload key provider uses, so tests in any package can wrap and unwrap data keys without a Vault, a network, or a credential.
Package vaulttest serves an in-memory stand-in for the part of the Vault Transit secrets engine that Flowstate's payload key provider uses, so tests in any package can wrap and unwrap data keys without a Vault, a network, or a credential.
flowstate/v1/payloadcodec/toycodec
Package toycodec is a payload codec for tests, and for nothing else.
Package toycodec is a payload codec for tests, and for nothing else.
flowstate/v1/plugin
Package plugin runs Flowstate plugins: separate processes that extend the engine, discovered on a configured path, launched and supervised by this package, and spoken to over Connect RPC on a Unix domain socket.
Package plugin runs Flowstate plugins: separate processes that extend the engine, discovered on a configured path, launched and supervised by this package, and spoken to over Connect RPC on a Unix domain socket.
flowstate/v1/plugin/examples/flowstate-plugin-example command
Command flowstate-plugin-example is a Flowstate plugin that both resolves secrets and provides a task.
Command flowstate-plugin-example is a Flowstate plugin that both resolves secrets and provides a task.
flowstate/v1/plugin/internal/protocol
Package protocol is the wire contract between the plugin host and a plugin process: the environment a plugin is launched with, the single line it prints to announce itself, and the header it authenticates the host by.
Package protocol is the wire contract between the plugin host and a plugin process: the environment a plugin is launched with, the single line it prints to announce itself, and the header it authenticates the host by.
flowstate/v1/plugin/plugintest
Package plugintest is the test kit for a Flowstate plugin author.
Package plugintest is the test kit for a Flowstate plugin author.
flowstate/v1/plugin/sdk
Package sdk turns a manifest and a few functions into a Flowstate plugin.
Package sdk turns a manifest and a few functions into a Flowstate plugin.
flowstate/v1/principal
Package principal is the CEL-typed rendering of an authenticated caller.
Package principal is the CEL-typed rendering of an authenticated caller.
flowstate/v1/protodoc
Package protodoc reads the prose the schema already carries.
Package protodoc reads the prose the schema already carries.
flowstate/v1/protodoc/protodocimpl
Package protodocimpl is the run-time half of protoc-gen-flowstate-doc: the table its generated .doc.pb.go files register a schema's comments into.
Package protodocimpl is the run-time half of protoc-gen-flowstate-doc: the table its generated .doc.pb.go files register a schema's comments into.
flowstate/v1/secrets
Package secrets resolves secret references to secret values, worker-side and as late as possible.
Package secrets resolves secret references to secret values, worker-side and as late as possible.
flowstate/v1/secrets/secretstest
Package secretstest is the conformance kit a secrets.Provider author runs against their own implementation.
Package secretstest is the conformance kit a secrets.Provider author runs against their own implementation.
flowstate/v1/secrets/vault
Package vault resolves secret references against a HashiCorp Vault or OpenBao KV version 2 secrets engine.
Package vault resolves secret references against a HashiCorp Vault or OpenBao KV version 2 secrets engine.
flowstate/v1/server
Package server is the control plane: FlowstateServer implements the flowstate.v1 WorkflowService over Connect RPC, turning each request to submit, observe, signal, cancel, or schedule a run into Temporal operations on the workloads the engine executes.
Package server is the control plane: FlowstateServer implements the flowstate.v1 WorkflowService over Connect RPC, turning each request to submit, observe, signal, cancel, or schedule a run into Temporal operations on the workloads the engine executes.
flowstate/v1/temporalclient
Package temporalclient connects Flowstate to Temporal, whether that is a development server on a laptop, a self-hosted cluster, or Temporal Cloud.
Package temporalclient connects Flowstate to Temporal, whether that is a development server on a laptop, a self-hosted cluster, or Temporal Cloud.
tools
chargecheck command
Command chargecheck proves that every CEL evaluation reachable from the workflow-side engine is either charged to the workflow-slice budget or says, at the call, why it is not (#1970).
Command chargecheck proves that every CEL evaluation reachable from the workflow-side engine is either charged to the workflow-slice budget or says, at the call, why it is not (#1970).
citations command
Command citations checks every `path.go:NNN` citation the hand-written documentation makes against the tree it describes.
Command citations checks every `path.go:NNN` citation the hand-written documentation makes against the tree it describes.
commitcheck command
Command commitcheck holds a pull request or commit message to the comms-commit and comms-pr conventions (#1728).
Command commitcheck holds a pull request or commit message to the comms-commit and comms-pr conventions (#1728).
devtemporal command
Command devtemporal starts one Temporal dev server that stays up, for the packages whose tests share one to attach to instead of each booting its own (#1738).
Command devtemporal starts one Temporal dev server that stays up, for the packages whose tests share one to attach to instead of each booting its own (#1738).
doclinks command
Command doclinks checks that every doc link in this repository's Go doc comments resolves the way pkg.go.dev and gopls will render it.
Command doclinks checks that every doc link in this repository's Go doc comments resolves the way pkg.go.dev and gopls will render it.
dupbodies command
Command dupbodies reports function bodies that appear more than once.
Command dupbodies reports function bodies that appear more than once.
fleet command
Command fleet answers one question: how many agent lanes may run here right now, and what each of them is allowed to spend.
Command fleet answers one question: how many agent lanes may run here right now, and what each of them is allowed to spend.
fuzzrun command
Command fuzzrun fuzzes a list of targets, several at a time.
Command fuzzrun fuzzes a list of targets, several at a time.
fuzztargets
Package fuzztargets reads targets.txt, the one written source of this module's fuzz target list.
Package fuzztargets reads targets.txt, the one written source of this module's fuzz target list.
gate command
Command gate is the diff-scoped local tier of flowstate's verification gate (#482).
Command gate is the diff-scoped local tier of flowstate's verification gate (#482).
hooks/genguard command
Command genguard is a Claude Code PreToolUse hook on Edit and Write (#482): it refuses edits to generated files, naming the source to edit and the command that regenerates.
Command genguard is a Claude Code PreToolUse hook on Edit and Write (#482): it refuses edits to generated files, naming the source to edit and the command that regenerates.
hooks/gofmtcheck command
Command gofmtcheck is a Claude Code PostToolUse hook on Edit and Write (#482): when the edited file is a .go file that is not gofmt formatted, it returns non-blocking feedback naming the file, so formatting is fixed at edit time instead of surfacing at the gate.
Command gofmtcheck is a Claude Code PostToolUse hook on Edit and Write (#482): when the edited file is a .go file that is not gofmt formatted, it returns non-blocking feedback naming the file, so formatting is fixed at edit time instead of surfacing at the gate.
hooks/internal/hook
Package hook reads and writes the Claude Code hook contract for the guards under tools/hooks (#482, #498).
Package hook reads and writes the Claude Code hook contract for the guards under tools/hooks (#482, #498).
hooks/mergeguard command
Command mergeguard is a Claude Code PreToolUse hook on the merge path (#498): before a merge proceeds, it queries the target pull request's review threads and denies the merge when any is unresolved, naming the threads so the operator knows what to clear.
Command mergeguard is a Claude Code PreToolUse hook on the merge path (#498): before a merge proceeds, it queries the target pull request's review threads and denies the merge when any is unresolved, naming the threads so the operator knows what to clear.
hooks/pidguard command
Command pidguard is a Claude Code PreToolUse hook on Bash (#482): it refuses commands that would kill processes by pattern, naming CLAUDE.md's PID discipline.
Command pidguard is a Claude Code PreToolUse hook on Bash (#482): it refuses commands that would kill processes by pattern, naming CLAUDE.md's PID discipline.
mergecheck command
Command mergecheck answers whether the current branch still merges cleanly into origin/main, and says so out loud (#2254).
Command mergecheck answers whether the current branch still merges cleanly into origin/main, and says so out loud (#2254).
modernize command
Command modernize reports what Go's `go fix` modernizers would change in this repository, and changes nothing.
Command modernize reports what Go's `go fix` modernizers would change in this repository, and changes nothing.
release command
Command release builds the immutable, checksummed payload for a Flowstate release.
Command release builds the immutable, checksummed payload for a Flowstate release.
shipcheck command
Command shipcheck verifies the remote final-head evidence required before an autonomous Flowstate merge.
Command shipcheck verifies the remote final-head evidence required before an autonomous Flowstate merge.
shipmerge command
Command shipmerge squash-merges a Flowstate pull request once the shipping evidence passes, pinned to the head that evidence was read for.
Command shipmerge squash-merges a Flowstate pull request once the shipping evidence passes, pinned to the head that evidence was read for.
temporalcli command
Command temporalcli puts the Temporal CLI the Temporal-server tests run in the cache they read, so a test step never downloads it.
Command temporalcli puts the Temporal CLI the Temporal-server tests run in the cache they read, so a test step never downloads it.
testsum command
Command testsum reads `go test -json` on standard input and prints what a reader of a failing run actually needs: each failing test with its package, the assertion lines it printed and the file:line those lines name, and a count of everything that passed.
Command testsum reads `go test -json` on standard input and prints what a reader of a failing run actually needs: each failing test with its package, the assertion lines it printed and the file:line those lines name, and a count of everything that passed.
vacuity command
Command vacuity reports tests that pass without proving anything.
Command vacuity reports tests that pass without proving anything.
wallclock command
Command wallclock reports the waits in this repository's tests that spend real time: `time.Sleep`, and testify's Eventually family.
Command wallclock reports the waits in this repository's tests that spend real time: `time.Sleep`, and testify's Eventually family.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL