Releases: maxgfr/feelc
Releases · maxgfr/feelc
Release list
v1.11.4
v1.11.3
v1.11.2
v1.11.1
v1.11.0
v1.10.0
ci: robust npm publish (NPM_TOKEN automation token or OIDC fallback) Publishing is now done by scripts/release-publish.sh: it uses an NPM_TOKEN automation token when the secret is set (bypasses 2FA; fatal on failure), and otherwise attempts OIDC trusted publishing, skipping with a warning if it is not configured so the binary release never fails. Pass NPM_TOKEN through the release job; bump CI node to 22. See RELEASING.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.9.0
feat: publish @feelc/engine npm package with WASM and examples
v1.8.1
fix(verify,ui,vm): second-pass hardening of the reactive-inputs PR (#2)
A follow-up review of #1 surfaced one verifier soundness bug (exposed by
the correct `!= x` null fix), an eval/trace divergence, and several
reactive-simulator defects. All fixed, each with a repro-backed test.
verify:
- `unreachable-default` no longer fires when a null/missing input would fall
through to the `default` line; it now requires a reachable catch-all rule to
cover the all-null point (shared ir.MatchCell). Fixes a false "default is
useless" on the credit example and idiomatic `< / >`-tiled tables.
(OPNE-VERIFY-01/02)
- new `priority-gap` warning when a hit:priority rule outputs a value absent
from the `priority:` list (was a silent rule-order fallback). (GLUE-002)
compiler:
- reject mixed-type enum members (`number in {1,2,"x"}` -> DSL005) so the
verifier can't silently drop a member. (NE-1)
vm/service:
- TraceFull is demand-driven like Eval: an unreached-but-static erroring
dependency no longer makes a full trace fail where Eval succeeds; the HTTP
and WASM handlers also surface `traceError` instead of silently dropping the
trace. (GLUE-001)
ui (internal/service/web/shared.js, the single source of truth):
- stale-response guard so a slow earlier /v1/run cannot clobber a newer result
- preserve the exact decimal token on the JSON<->widget round-trip (no f64
rounding; removes a dead ternary)
- empty/invalid required inputs show a field-level hint and suppress the run
instead of a cryptic global "unknown variable" error
- dim inputs that provably did not affect the outcome ("not used for this
outcome") so first-hit short-circuiting is visible rather than confusing
go test ./..., go vet, gofmt all clean; all examples re-verified with no new
blockers (credit's false unreachable-default is gone).
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.8.0
feat(ui,engine): reactive inputs UX + engine correctness fixes (#1)
Make input-editing fully reactive across both web UIs and fix six
correctness bugs surfaced by an adversarial engine audit.
UI — single source of truth (no more drift between the two front-ends):
- New internal/service/web/shared.js holds all transport-agnostic
renderers + the reactive simulator; build.mjs copies it into the
playground. serve --ui (HTTP) and the WASM playground now share it.
- Always-visible typed Inputs panel auto-built from the goal decision's
required inputs (type/domain/unit hints); a decision selector.
- Two-way form <-> JSON sync (guarded, no ping-pong); input values are
preserved across .rules edits; debounced live loop (source vs input).
- Decimal-exact submission: number inputs are sent as raw JSON number
tokens (no JS Number() rounding) so the engine's exact decimals hold.
- Rich result card + readable trace (winning rule, justifying cells)
and firing-path highlight on the decision graph; soft out-of-domain
validation (non-blocking).
- New POST /v1/model candidate endpoint mirrors the WASM model() so the
live loop is identical over HTTP and WASM.
Engine fixes (each repro-confirmed + adversarially verified, with tests):
- ir/match.go: `!= x` (OpNe) no longer matches null/NA (ADR 0003/0013).
- verify: numeric enum `in {1,2,3}` treated as a discrete set — fixes
false completeness gaps and hidden dead rules.
- cmd/feelc run --json: decimals via modelinfo.JSONify (no "2E+3"),
byte-identical to the HTTP service; trace decimals normalized too.
- third_party/feel: context-sensitive scanner so `a*3-1`/`10-1`
subtract correctly, plus a unary-minus production (`-a`, `- 3`).
- vm/expr.go: defensive stack-underflow guard (clean error, no panic).
Deferred (logged): PRIORITY tables silently fall back to rule order when
an output is absent from the priority list — low severity, documented
rank() behavior; warrants a verifier diagnostic, not an eval change.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
v1.7.1
fix: include cell expression variables in table dependencies