picatz / picatz/flowstate

The state of the project, and the road to the next level: a map of where Flowstate has been, is, and should go

Open
#336 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

design kind/umbrella
Dominant language
Go
Stars
9
Forks
0
Avg merge
3h 3m
Merged PRs (30d)
509

Description

A deliberate step back, on owner direction. This is the map that links the design records rather than another sibling to them. Where a claim about the tree is checkable, it was checked today (main @82b95f6).

Where it has been

The project grew in corrective arcs, each one a response to an honest finding about the last:

  1. Engine-first. Durable execution, two drivers required to agree, fail-closed policy surfaces, secrets that never enter history. This part was built carefully and it shows: the invariants in ARCHITECTURE.md are real constraints the code honors, not aspirations.
  2. The composition correction. The audit that found "finished as an engine for one run, empty as a platform for many": no call:, two built-in tasks, no flow test. That arc delivered inputs and outputs, call: with frozen-at-submit semantics, flow test with a virtual clock, schedules, and the loop constructs.
  3. The identity correction. Signal senders attested server-side, starter identity, workload identity federation, and all three operator policy surfaces (secrets, task shape, egress) reasoning over one identity from one source.
  4. The honesty correction, still running. Docs read as assertions and verified; four sweeps this week found and fixed some twenty claims the code did not honor, and the same method applied to review found real defects behind five of seven external review findings. The lesson generalized: a claim nobody has checked is a liability wherever it lives, in prose, in a test that skips, in a bound nothing reaches.

Where it is

Genuinely strong, and worth protecting:

  • The two-driver agreement, because it is what makes local rehearsal worth trusting, which is the product's one-sentence pitch.
  • The fail-closed reflex. Deny by default, errored rules deny, bounds on everything an outsider chooses, and this week the reflex extended to depth cutoffs and test-harness secrets.
  • One language (CEL) and one type system (protobuf) with behavior attached to generated types. The DSL retirement machinery (edition: plus flow fix) means surface syntax is cheap to change; the schema is the contract.
  • flow test. Stubbed tasks, scripted attested signals, a virtual clock. This is the feature GitHub Actions never had, and it makes the examples portfolio executable documentation.
  • The verification culture: small PRs, mutation-tested guards, negative-direction tests, clean-clone verification, review findings triaged verify-then-act. Twenty-two PRs merged today alone under that gate.

Thin or missing, by maturity rung:

Rung State
Solo, laptop Strong. init to run local to test with no server; LSP; diagnostics with positions. The remaining gap is polish (#327, #328).
Team, one deployment Partial. Identity and tenancy isolation are real, but sharing is not: no module/library story (#106), no review-shaped surfaces, flow list only recently filterable, and the approval-gate policy split (author vs deployment) is designed (#187, #326) more than shipped.
Org, multi-team, multi-tenant Designed, thin. The four-tier tenancy model (#236), remote plugins (#151), plugin integrity (#146), payload codec seam (#113), infra topology (#185) are records, not code.
Platform, ecosystem Nascent. Five plugins in-tree and an SDK, but no distribution, no registry, no versioned module ecosystem, and the shaping-capability question (#324) shows the task contract still has undeclared corners.

Where it should go

Six pillars, each anchored to records that already exist. The order matters: each unlocks the next.

1. Composition as the keystone: modules and types. The lego-brick ask is #106 (modules: versioned, typed workflow libraries) sitting on #177 (typed workflows) and the shipped call:. This is the single highest-leverage pillar, because a team's second workflow copying its first is still the default experience, and because typed, versioned, reviewable modules are what make everything else (policy, registries, marketplaces) meaningful. Enums (#332) and constraint scoping belong to this pillar's first slice.

2. One policy language, layered for two audiences. #326's direction: CEL predicates over attested scopes replace bespoke YAML keys, with the deployment layer able to bind what the file cannot weaken (#187), and history as a possible later dimension (#331). Security-engineer approval is won here: small vocabulary, fail-closed, load-time checked, explainable decisions. The consolidation rule: no new bespoke policy key lands from now on without checking against #326 first.

3. Plugins everywhere, safely. Remote plugins (#151) with integrity (#146) and the secret-release policy before values cross a network; the shaping-metadata bit (#324); the model-provider family (#192) and the connectivity family (#181) as proof the SDK carries real weight. The plugin story is the extensibility story; it deserves the same invariant discipline the engine got.

4. Agents as first-class users. MCP in both directions (#108), stubbed rehearsal in the authoring loop (#241), agents-as-runs (#162). The README now says "for humans and agents alike"; the tree is closer to that claim than most projects, and the gap is mostly the same composition and rehearsal gaps humans have.

5. The operator at 10k runs. Heartbeats (#133), the codec seam for large payloads and encryption at rest (#113), the observability lab, and honest cross-run state (#105 entity workflows, #289). This pillar is what turns "works in the demo" into "runs the business".

6. Beautiful in form and function. The CLI design charter applied everywhere (#327), result JSON in the user's vocabulary (#328), the TUI, the em-dash-free prose standard (#333), and a README that now actually is the front door (#335). Polish is not garnish here; a tool that feels modern is how the strong internals get a chance to matter.

How to get there

Keep the machine that works: small verified PRs, sole-reviewer plus external review triaged verify-then-act, doc sweeps as recurring hygiene, model-tiered agents in parallel worktrees with the coordinator on hard calls. Add two disciplines:

  • Consolidate before adding. Sixty-plus open issues, many overlapping records. Each pillar above should get one owning record (most already exist) and the satellites closed into it. A backlog that reads as a map invites contribution; one that reads as sediment repels it.
  • Slice vertically, land the seam first. The week's best outcomes (wait outputs, loop keys, egress identity) were thin vertical slices through schema, engine, validator, LSP, docs, and an example. The worst outcomes historically were subsystems complete-but-unreachable. The house gate (a Flowfile expresses it, validate accepts it, an example exercises it) stays the definition of done.

A plausible next arc, in order: modules v1 (#106 first slice: call: a versioned, digest-pinned library file), the policy coherence decision (#326) since it gates new surface work, remote plugin transport (#151 slice 1, local-first with integrity), then the operator pillar's heartbeats and codec seam. Polish (#327/#328) proceeds in parallel on the Sonnet tier throughout, since it touches no invariants.

The measure of success is unchanged from the project's own first principle: an author's least careful workflow cannot break replay, cannot leak a secret, cannot exceed its bounds; and now, at the next level, a team's tenth workflow should be one call: and a with: block, reviewed once, reused everywhere, on a platform that was a pleasure to look at the whole way.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

This issue is a strategic map rather than a bounded implementation task. Start with the proposed modules v1 slice in #106, then read #177 and the shipped call: behavior; a contribution is done only when one focused slice has an owning issue, a vertical implementation path, and the stated Flowfile, validation, example, and review gates.

Written by the indexing model from the issue text.

Assessment

Domain
developer-experience, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.