am-kantox / am-kantox/finitomata
Roadmap: v1.0.0 — deprecation removals and contract finalizations
- Lenguaje dominante
- Elixir
- Estrellas
- 130
- Forks
- 11
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
Tracks the breaking deprecation removals and public-contract decisions that define the **v1.0.0** release.
The internals (runtime `Finitomata.Engine` extraction, ETS-backed state cache, `Finitomata.Error` normalization, built-in `Finitomata.Persistency.ETS`/`DETS` adapters, `use Finitomata` macro slimming) and the `Finitomata.ExUnit` test framework are already in place as of **v0.40.0**. What remains for 1.0 is principally an API freeze plus the deliberate removal of long-deprecated paths.
### Deprecation removals (breaking)
- [ ] Remove the `start_fsm/4` legacy argument order `(id, impl, name, payload)` and the two-atom ambiguity heuristic; require a non-atom FSM name (`lib/finitomata.ex`, `start_fsm/4`).
- [ ] Remove the legacy `use` forms `use Finitomata, {fsm, syntax}` and `use Finitomata, fsm`.
- [ ] Remove built-in modules as `syntax:` (`Finitomata.Mermaid` / `Finitomata.PlantUML`); keep only `:flowchart` / `:state_diagram` (or a custom `Finitomata.Parser`).
- [ ] Remove the deprecated generated getters `fsm/0`, `entry/0`, `states/0`, `events/0` on `use Finitomata` modules in favor of `__config__/1`.
- [ ] Remove `Finitomata.ExUnit.init_finitomata/6` (use `setup_finitomata/1`) and the low-level `assert_transition/5` (use `assert_transition/3`).
### Contract / shape finalizations (freeze for semver)
- [ ] Decide and freeze the auto-driven event-payload reshaping (`%{payload: p, __retries__: n}`) for entry / banged (`!`) / `ensure_entry` transitions — keep as-is or normalize.
- [ ] Unify the `Finitomata.Persistency.load/1` contract: the documented `load(id)` vs the engine's actual `{type, fields}` descriptor returning `{lifecycle, {state, payload}}`.
- [ ] Declare the frozen public API surface (`Finitomata`, `Infinitomata`, `Finitomata.Flow`/`Pool`/`Cache`/`Throttler`/`Accessible`/`Persistency`/`ExUnit`) and commit to semver guarantees.
### Code loose ends
- [ ] `lib/finitomata/engine.ex` (`fork/3`): match and log the fork outcome instead of discarding it (`# [TODO]`).
- [ ] `lib/mix/tasks/compile/finitomata.ex`: extend ambiguous-transition coverage to more pattern-match shapes (`# [TODO]`).
- [ ] `lib/finitomata.ex` (`pid/1`): consider the registered-name reverse lookup (`# [AM]`).
- [ ] `lib/finitomata/config_builder.ex` (`hard/2`): the carried-over `unless do raise end` consistency check never fires (a list is always truthy) — fix it to actually enforce "banged transitions must be determined," or remove it.
### Distributed + quality bar
- [ ] `lib/finitomata/distributed/supervisor.ex`: make the pid reconciliation that string-matches `:erlang.pid_to_list` tails robust (or document it) and add regression tests. (`:erpc` stays intentionally unused — `:rpc.block_call` keeps remotely started supervision trees alive.)
- [ ] Add cross-suite coverage aggregation (the `test_coverage` summary threshold is `0` today because the standard / distributed / `:finitomata` / examples suites are split).
- [ ] Track down and stabilize the pre-existing intermittent timing test.
- [ ] Optional (non-blocking): true compile-time callback resolution to remove the residual `function_exported?/3` checks in `Finitomata.Engine`.
### Out of scope for 1.0
- No FSM declaration-syntax / `Finitomata.Parser` behaviour changes.
- No UI / JSON / localization / Phoenix work.
---
Drafted with Oz (oz-agent@warp.dev).
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Evaluación
Este issue todavía no se ha evaluado.