Skip to content

ADR-0001: Provenance, IP clearance, and license ​

  • Status: Accepted
  • Date: 2026-06-05
  • Deciders: Aris Kurniawan

Context ​

fate is a from-scratch, production-grade rebuild of a statechart engine. A working proof-of-concept was developed inside an employer workspace as part of a larger effort to migrate that platform's workflow state machines off an XState-derived design onto a Go-native engine. That proof-of-concept proved the model works and is the reference its author harvested topology, tests, and diagrams from.

fate is a personally-owned, open-source library published at github.com/arisros/fate, independent of any employer system and 100% domain-agnostic.

Decision ​

IP clearance gate ​

Because the proof-of-concept originated in an employer workspace, no fate code was published until permission to open-source it was obtained from the employer.

Outcome: open-sourcing was approved on 2026-06-05, scoped to the generic engine: the library may contain no code, names, business logic, examples, or documentation specific to the employer's domain. That scope governs what lives in this repository.

To honour the scope:

  • The engine is fully domain-agnostic; the Temporal integration is isolated in a separate, equally-generic module (see ADR-0002 / ADR-0005).
  • All examples and tests use generic machines (counters, traffic lights, media players, pipelines) — never the employer's business state machines.
  • No employer or platform names appear in the codebase or docs.

License ​

fate is released under the MIT License. Rationale: shortest and most permissive option for a solo-authored Go library, no patent-grant ceremony, and no NOTICE file to maintain. The trade-off — MIT has no explicit patent grant, unlike Apache-2.0 — is acceptable for a library of this nature.

Clean-room separation as risk reduction ​

The engine module (github.com/arisros/fate) is dependency-free and contains no employer-specific types, names, or business logic. Anything that touches the employer's runtime (the Temporal determinism bridge) is a separate module and is itself generic. This separation is both an API-quality decision (see ADR-0002) and a provenance risk-reduction measure.

Consequences ​

  • Provenance and the scoped approval are on the record from commit one.
  • The zero-dependency, domain-agnostic boundary is a hard constraint, not a preference — it is what keeps the library inside the approved scope.
  • Any future contribution must stay generic; domain-specific glue lives in the consumer's own repository, never here.

Released under the MIT License · v0.6.0 · pkg.go.dev