Skip to content

v0.9.3

Latest

Choose a tag to compare

@github-actions github-actions released this 14 Sep 05:41
· 19 commits to main since this release

Axial 0.9.3

Fix

Axial's diagnostics and outcome types no longer depend on F#'s reflection-based structured printer, which NativeAOT
and trimming remove. Under NativeAOT, FiberRegistry.DumpAt, FiberDump.renderAt, telemetry fiber-status tags,
Exit.toResult failure messages, and process error rendering could throw or print the wrong text. So could any
application code calling ToString() on an Exit, Cause, or FiberStatus.

Public unions now have hand-written ToString() overrides:

  • Exit, Cause, FiberStatus, FiberId, FiberDump, LogLevel, StreamStep, and AttributeValue
  • ProcessError, ProcessEvent, InputSource, and OutputTarget; ProcessResult renders a one-line summary
  • HttpError, Method, and RequestBody; HttpResponse renders a one-line summary
  • FileSystemError, EnvironmentVariableError, and BaseRuntimeError

Error types use their existing describe text. Payloads inside Exit and Cause render with their own ToString,
so application error types should override it too.

New

AXG006 (ReflectionFormatting) in Axial.Guardrails reports formatting that needs the structured printer.
It covers ToString(), string, interpolation holes, %A, and boxed arguments to String.Format and similar
methods, applied to F# unions, records, FSharp.Core collections and options, and type parameters. It runs in
application and library projects. See the Guardrails notes for the rule and the axial-allow-reflection-format
directive.

The NativeAOT probe (scripts/run-aot-probe.sh) now renders these types, dumps a fiber registry, and runs a deep
synchronous loop, so a regression fails the release checks.