Repository navigation
Releases: odvcencio/arbiter
Releases · odvcencio/arbiter
Release list
v1.13.0
Security
- Require Go 1.26.10 and use the module's Go version in CI, parity and release builds; the Docker builder uses the same patched version and the runtime uses Alpine 3.24.3. Public module downloads retain checksum-database verification and the grammar path is selected from the resolved module version. Upgrade pgx to v5.9.2, gRPC to v1.83.2, x/net to v0.60.0 and x/text to v0.42.0, plus their required transitive updates. CI and release qualification now check dependency integrity and reachable vulnerabilities. Release preparation refuses module-file drift instead of tidying the release tree.
Breaking
- Subtraction without spaces.
10-3-2now evaluates to 5 instead of silently compiling as 10. Numeric, quantity and currency literals keep their sign separate from the subtraction operator. Recompile and audit policies that used adjacent subtraction. Incomplete arithmetic, unsupported unary negation (-value; use(0 - value)) and numeric literals outside float64 range are rejected instead of partially compiling or becoming zero. Compiled bytecode and wire formats are unchanged. - Arithmetic precedence.
*,/and%now bind tighter than+and-.1 + 2 * 3now evaluates to 7 instead of 9. Parser integrations must handle the newproduct_exprCST node for* / %. - Arithmetic chains group left to right. v1.12.0 grouped many chains of five or more terms from the right. For example,
1000 - 2 - 3 - 4 - 5evaluated to 1002 instead of 986,1000 / 2 / 3 / 4 / 5to 1875 instead of 8.33, and a seven-term sum and difference such asw + i + d + g - l - h - 14600(values 100000, 1000, 500, 2000, 2500, 3000) to 89400 instead of 83400. Chains of up to four terms were already left to right. Every chain now groups left to right. Long-and/chains change value when recompiled, so audit them along with mixed arithmetic. To keep a former result exactly, add parentheses that state the old grouping. - Unambiguous remainder.
%is reserved for remainder with or without spaces.7 % 3now evaluates to 1 instead of being consumed as a percentage quantity. Write percentage quantities as50 pct, replacing50 %. Incomplete percent expressions are rejected; strings and comments are unchanged. Rebuild and audit affected policies. Existing bytecode and wire-format versions are unchanged. These source-language changes are separate from v1.12.0.
Verification
Required tests, four fuzz targets, dependency integrity, reachable-vulnerability scanning and the non-root container smoke passed in release preparation CI. The deterministic corpus matched on amd64 v1/v3, native arm64 and WebAssembly in parity. The advisory latest-parser job retains two known golden-test differences; the supported parser pin passes.
Release archives contain arbiter, arbiter-lsp, arbiter-runtime and arbiter-agent. Verify downloads with checksums.txt.
v1.12.0
Changelog
- 028d6a1 Merge pull request #8 from odvcencio/release/v1.12.0-20261022
- c62348d release(release): mark version 1.12.0
- 2a305f4 Merge pull request #7 from odvcencio/feat/deterministic-numeric-profile-20261022
- 05c512c Merge pull request #6 from odvcencio/feat/precompiled-expert-runtime-20261021
- 1920fd7 update(docs): clarify determinism and numeric profile guarantees
- 8efcdf0 fix(numeric): keep numeric behavior consistent across targets
- ae14084 update(docs): document deterministic evaluation and integer profile
- 6b118e1 add(parity): cross-target determinism checks
- ba34cb6 add(numeric): opt-in integer numeric profile
- b7bd756 fix(expert): stabilize compiled program metadata encoding
- c1dd412 fix(expert): stabilize session evaluation order
- ead06cc add(expert): load precompiled programs without the .arb parser
- ee63bf5 move: expert runtime and bundle wire format into subpackages
- 71a7b0e update(docs): make documentation links and registry guidance portable (#5)
- 5923120 update(guidelines): update agent prose guidance
v1.11.0
v1.10.0
v1.9.0
Changelog
- 463800d refactor(grammar): split into consumable grammar pkg + dsl subpackage
v1.8.1
Changelog
- 6000dc2 add: add segment-only rule syntax; fix condition handling
v1.8.0
Changelog
- ba06167 refactor(ir, compiler): Defer template resolution to post-merge phase
- c5c29b6 fix(compiler): fix expression ID offsetting for tables and nested lets
- b287ac2 add(compiler): add parameterized template macro support
- 100eb4e add(arbtest, flags): add namespaced references support to arbtest
- cfe89d6 fix(cli): fix check to surface compile errors for imported files
- e52d3ee fix: Union imported module input schemas during merge
- 5d80fd8 remove(flags): Remove unused compileInlineSegment helper
- 487f699 fix(compiler): fix dangling segment references in strategy candidates
- e0226e4 update(module): Keep fact and outcome schemas global across module imports
- 61f6240 fix: Fix dangling segment refs after module namespace merge
- dfcf167 fix(cli): fix eval to enforce segment and prerequisite gates
- 30eb5e8 fix(compiler, cli): fix module const resolution and add --module init
- 9844c03 update(proto): Update proto module path and add Makefile
- 7ee6b60 add(sdks/node): Add local WASM evaluation to Node SDK
- 68c5ab6 add(editors): Add browser playground for Arbiter rules
- 98fbc4d bump(deps): bump gotreesitter to v0.20.0
- cafd57c add(ci): add release tooling with GitHub Actions and GoReleaser
- 8a63b2e add(shell): Add shell completion support
- c8bcb58 add(cli): add --explain flag to eval command for audit trail output
- 2f9892f update(transpile): deprecate transpile API and remove check fallback
- e8bd1b3 add(test): Add rule coverage reporting and threshold to test
- 0ce04ab add: Add interactive REPL command to CLI for rule testing
- 1909e54 add(cli): add init command to scaffold starter ruleset
- 45ee4c9 add(cli): add --strict flag to arbiter check
- ddf1923 add(bundle, cli): Add detached Ed25519 signing for bundles
- 31e2253 add(compiler): Add worst-case cost estimation for compiled rules
- 0e925f6 add(compiler): add dead code detection after constant folding
- 5e21740 bump(deps): bump gotreesitter to v0.20.0
- 66bea21 add: Add
input from gosyntax and --go CLI flag - 362a67f refactor(compiler): introduce open objects and protobuf WKT mapping
- 14a6a6d improve: Support in-language input from proto in check command
- 0bf44f8 add(compiler): Add
input from protoexternal schema support - 0023a11 refactor(protoschema): Replace protocompile with gotreesitter for proto parsing
- 2dee7d8 add: Bind .arb type-checking to protobuf schemas and embed parse table
- 2f15b96 bump(deps): Bump gotreesitter to v0.19.1
v1.5.0
Runtime Capability Plugins
- Custom sink and worker kinds — arbiter handler clauses and worker runtime clauses now accept host-registered identifiers instead of only the built-in transport list.
chainandworkerremain reserved runtime kinds, whilechain://...andworker://...remain runtime-owned source schemes. - Portable capability protocol — a new gRPC
CapabilityServicecontract lets non-Go hosts implement source loaders, sink handlers, and worker runtimes over a shared SDK-facing protocol. - Reference runtime hook-up —
arbiter-runtime --capability-grpc ...now dials one remote capability service, binds its declared source schemes, sink kinds, and worker kinds into the workflow runner, and exposes that manifest on/status. - Explicit worker-runtime boundary — sink handlers no longer implicitly count as worker runtimes. Workers stay typed capabilities, so a worker kind must be explicitly registered on the worker-runtime surface before a bundle can run.
- Unified runtime capability status — the workflow runner now exposes one inspectable capability surface across sources, sinks, and worker runtimes, tagged by owner (
core,host, orplugin) instead of only dumping raw plugin manifests. - Runtime gRPC introspection —
arbiter-runtimecan now serveRuntimeService.GetRuntimeCapabilities, and the CLI plus Node/Python/Rust SDKs expose that same unified capability surface without scraping HTTP/status. - Unified transport hardening —
arbiter-runtime --grpcnow uses the same bearer-token and TLS/mTLS hardening model asarbiter serve, instead of exposing a separate plaintext-only control surface. - Explicit plugin transport — capability-plugin dialing now uses the same target grammar as the rest of Arbiter (
grpc://,grpcs://,http://,https://, or barehost:port) plus explicit token, CA, server-name, and plaintext flags. - Inspectable runtime posture —
/statusandRuntimeService.GetRuntimeCapabilitiesnow expose the runtime control surface's effective auth/TLS/public-listener posture and the bound capability-plugin connection's target/auth/TLS/server-name posture, so operators can inspect the real runtime shape instead of reconstructing it from flags. - Inspectable agent posture —
arbiter-agent /statusnow exposes local control-listener posture, upstream transport posture, readiness policy/reason, and per-bundle bundle/override watch connectivity alongside the existing sync counters. - Agent transport hardening parity —
arbiter-agentnow supports the same local bearer-token and TLS/mTLS hardening shape asarbiter-runtimeon its local gRPC surface, so the reported control posture is backed by real configuration instead of placeholders. - Canonical operator surfaces —
arbiter-runtime /status,arbiter-agent /status, andarbiter runtime-capabilitiesnow use the same small inspection vocabulary and section order instead of mixing flat counters, ad hoc headings, and transport-specific nouns. - Status over gRPC — the canonical operator surfaces now travel over RPC too:
RuntimeService.GetRuntimeStatusexposesreadiness -> issues -> transport -> capabilities -> activity,AgentService.GetAgentStatusexposesreadiness -> issues -> transport -> sync,ControlService.GetControlStatusexposesreadiness -> issues -> transport -> bundles -> overrides -> sessions -> audit, and the CLI now shipsarbiter runtime-status,arbiter agent-status, plusarbiter control-status. - Hosted control-plane introspection —
arbiter servenow exposes real/statusoutput instead of identity-only JSON, including listener auth/TLS posture, persisted bundle/override files, active bundle versions, live expert-session occupancy, and explicit audit posture (jsonlvs discard, durable vs non-durable). - Audit health, not just audit config — the hosted control-plane
auditsection now reports whether recording is currently healthy, plus write/error counters and the last successful or failed audit write timestamps, so operators can see when decision recording is configured but not actually succeeding. - Persistence health, not just persistence config — the hosted control-plane
bundlesandoverridessections now report whether file-backed state is currently healthy, plus write/error counters and the last successful or failed persistence write timestamps, so operators can see when durable state is configured but not actually sticking. - Readiness follows durability health — hosted control
/readyznow uses the same readiness judgment as thereadinesssection, so configured bundle persistence, override persistence, or audit recording failures take the control plane out of readiness instead of leaving probes green. - Canonical issue lists — runtime, agent, and hosted control status now all expose an explicit
issuessurface with sharedseverity,scope,subject,code,message, andblockingfields, so operators and SDKs can inspect concrete failures and insecure transport posture without reconstructing them from mixed booleans and free-form reasons. - CLI issue gating —
arbiter runtime-status,arbiter agent-status, andarbiter control-statusnow accept--fail-on-issues, so automation can fail fast on blocking status issues without scraping terminal output. - Issue-code contract — the status issue vocabulary is now centralized and documented, so
issues.codeis an explicit operator-facing contract instead of a scattered implementation detail. - Issue catalog surfaces — the canonical status-issue vocabulary now carries explicit runtime/agent/control surface membership and is exposed directly through
arbiter status-issuesplusGetStatusIssueCatalogon runtime, agent, and control gRPC services. - HTTP issue catalogs — runtime, agent, and hosted control now also expose scoped
GET /status/issuesJSON catalogs, so HTTP-first operators can inspect the same issue contract without gRPC tooling. - Remote CLI issue catalogs —
arbiter status-issuesnow accepts a live target plus auth/TLS flags, auto-detects runtime vs agent vs control surfaces, and prints the remote-advertised issue catalog instead of assuming the local CLI build matches the running process. - Versioned operator identity — runtime capability/status, agent status, hosted control status, and issue-catalog surfaces now advertise
operator.product,operator.build_version, andoperator.operator_contract_version; the CLI prints that contract stamp on every remote inspection command and can fail on mismatches via--fail-on-contract-mismatch, so tooling can verify build and operator-contract compatibility directly from a live process.
SDKs
- SDK surface parity — the shipped Node, Python, and Rust clients now track the current gRPC control-plane surface instead of lagging behind it. Strategy evaluation, strategy-candidate override mutation, structured
TraceStepfields, and explicitkill_switch_statenow flow through the vendored SDK contracts as well. - Runtime and agent status clients — the shipped Node, Python, and Rust wrappers now expose runtime-status and agent-status RPCs alongside runtime-capability introspection, so embedders do not need to scrape HTTP
/status. - Hosted control-status clients — the shipped Node, Python, and Rust wrappers now also expose
ControlService.GetControlStatus, so hosted control-plane introspection is not Go-only. - Status-issue catalog clients — the shipped Node, Python, and Rust wrappers now also expose
GetStatusIssueCatalog, so automation can inspect the issue vocabulary itself instead of hardcoding string lists. - SDK operator contract guards — the Node, Python, and Rust clients now expose operator-contract inspection helpers plus optional strict compatibility enforcement on runtime-capability, runtime-status, agent-status, control-status, and status-issue catalog RPCs.
- Capability-service mirrors — the Node, Python, and Rust SDK trees now mirror the runtime capability proto as well, so embedders can implement source/sink/worker plugins in those languages instead of being limited to Go interfaces.
- Capability server helpers — Node and Python now ship
CapabilityServerhelpers, and Rust shipsCapabilityPluginplus handler traits, so SDK authors can register source/sink/worker behavior without hand-writing raw gRPC service plumbing.
Docs
- Authoring house style — the README now gives a firmer opinion on
.arblayout: typed declarations first, shared governance next, one dominant decision surface per file, runtime-edge modules at the boundary, explicit split triggers, inward import direction, colocated.test.arbfiles, and canonicalgovernance -> match/bind -> effectclause order across modalities.
v1.4.0 — Unified Governance Shape and Structured Observability
- Canonical governance prelude order across rules, strategies, flags, and expert rules, with rollout before when.
- Explicit kill-switch state preserved end to end with kill_switch on/off semantics in runtime, introspection, and override surfaces.
- Typed declarations (input, feature, fact, outcome, table) now surface as one family, with stronger authoring doctrine for readable .arb modules.
- Structured observability vocabulary now runs end to end across rules, flags, strategies, expert sessions, gRPC TraceStep responses, and audit payloads.
- Override snapshots, watch events, and audit mutations now expose explicit kill_switch_state instead of forcing operators to reconstruct intent from paired bool fields.
- VM/data-context lookup improvements reduced governed-eval time and allocations across the benchmark suite.
v1.3.0 — Tags, Temporal Composition, Full IDE Experience
Rule Tagging
tag/tagsdeclarations with closed-set validation and "did you mean?" suggestionstag/tagson rules, expert rules, and flagsWithTagseval option for selective evaluation (AND semantics)
Temporal Constraint Composition
- Valid combinations documented:
cooldowncomposes with one offor/within/debounce/stable_for - Invalid combinations are compile errors with clear explanations
- Duplicate modifiers rejected
LSP — Semantic Highlighting
- Semantic tokens for fact/outcome names in assert/emit, table names in lookup, member access fields, qualified name module prefixes
LSP — Code Actions
- Add missing outcome fields (quickfix)
- Add
elseto lookup (quickfix) - Add
requiresprerequisite (refactoring) - Import quick fix for unresolved qualified names
LSP — Multi-File Diagnostics
- Errors in imported modules surface at both the error site and the import line
- Reverse dependency tracking: saving a file refreshes diagnostics for all importers
VS Code Extension
- Format on save enabled by default for
.arbfiles