Changelog of @hackage/shikumi 0.3.0.3

Changelog

Unreleased

0.3.0.3 — 2026-08-29

Changed

  • Every library dependency now carries a PVP upper bound: aeson, base64-bytestring, bytestring, containers, effectful, filepath, generic-lens, scientific, stm, time, vector. cabal check reported these under missing-upper-bounds. Without one, a future breaking release of a dependency enters a consumer's build plan unchecked — which is the failure the bound exists to prevent.

    Each bound admits the version this package is built and tested against and stops below the next major.

    aeson stops at <2.3 rather than <2.4: baikai-openai 0.5 constrains it to ^>=2.2, so aeson 2.3 is not reachable for this cohort and a wider bound would assert compatibility that cannot be exercised here.

0.3.0.2 — 2026-08-07

Changed

  • Upgraded the baikai provider cohort to the 0.5 series: baikai, baikai-claude, and baikai-openai now require >=0.5 && <0.6. baikai-effectful stays on the 0.3 series, floored at 0.3.0.3 — the first release whose own baikai bound admits 0.5. Dependency bounds only; no changes to the exported API.

    baikai 0.5 adds an optional model-call evidence record. shikumi does not opt in: it never sets Options.evidence, so no digest is computed and no evidence event is emitted on any call shikumi makes.

0.3.0.1 - 2026-07-20

Changed

  • Upgraded the baikai provider cohort to the 0.4 series: baikai, baikai-claude, and baikai-openai now require >=0.4 && <0.5. baikai-effectful stays on the 0.3 series. Dependency bounds only — no changes to the exported API.

0.3.0.0 - 2026-07-05

Changed

  • BREAKING Combinator and budget semantics cleanup. MajorityVote now carries its reducer, so majorityVoteBy applies its TempSchedule per sample (routed temperatures reach the wire) and exposes the sub-program's Params once instead of K times — parameter vectors saved from an old majorityVoteBy program no longer load and must be re-saved. chain takes a NonEmpty (empty is a compile error, not a runtime crash); modal and sampleTemps take/return NonEmpty. TempSpread temperatures are clamped to [0, 2] (TempFixed values pass through unclamped). A malformed numeric bound in a Constrained field (e.g. MinVal "abc") no longer crashes at schema-derivation time — the schema keyword is omitted and every decode of the field fails with a located ValidationFailure naming the bad symbol. Shikumi.LLM.Budget.tryReserve is renamed admitCall with documented optimistic-admission semantics (concurrent calls can overshoot the ceiling; no reservation is held). refine survives a failed advice-generation call, returning its best-so-far output instead of aborting.

  • BREAKING Validatable is now opt-in and enforced by the decode path in every program runner. The catch-all instance {-# OVERLAPPABLE #-} Validatable a has been removed, so a type's Validatable rule is no longer silently skipped when a program runs through runProgram, runProgramConc, streamProgram, or chainOfThought — a violated rule now surfaces as Left (ValidationFailure …). Migration: declare an instance for every Predict output type and every typed tool input. A type with no rules needs one line — instance Validatable Foo (the default validate = Right applies) or add Validatable to a deriving anyclass (…) list. runPredict, streamPredict, chainOfThought, and chainOfThoughtRaw gained a Validatable o constraint, and WithReasoning o now has a delegating Validatable instance that runs the wrapped value's rule.

  • BREAKING Derived JSON Schemas now satisfy OpenAI strict mode. A Maybe field is emitted as required-but-nullable (listed in required with a nullable schema) instead of being omitted from required, and enumSchema carries an explicit "type": "string". This changes the shape real OpenAI/Anthropic requests send; the decode path is unchanged and still tolerates a missing key or explicit null for Maybe fields.

  • Native structured-output requests are now coherent. When a program routes to a native-capable model, the request carries a system prompt describing the JSON object to produce and demos rendered as JSON — not [[ ## field ## ]] marker sections — via a new native render channel (attachNativeRender / nativeRenderPieces, swapped in by routeLLM/translateForWire). Fallback models are unchanged. parseResponse now keeps the precise native decode error for JSON reply bodies instead of masking it behind a misleading MissingField from the marker parser. Shikumi.Routing.translateForWire widened to Model -> Context -> Options -> (Context, Options).

  • streamProgram now works against real providers. routeLLM rewrites the Stream operation exactly as it rewrites Complete (ambient model, translated and stripped metadata, native Context swap), so a routed streaming call sends the real model id and wire options instead of the inert placeholder. streamPredict reuses the blocking path's effectiveSignature, schema/native stamps, and the dual-format parseResponse (both newly exported from Shikumi.Program), so a native (JSON) stream decodes correctly. Stream failures now surface out-of-band: a terminal EventError becomes a transient ProviderFailure thrown through Error ShikumiError (so retry policies fire), and the budget is charged from the terminal payload — success or error — before the throw. The event list returned by Shikumi.LLM.stream never terminates in EventError.

0.2.0.0 - 2026-06-28

Added

  • Shikumi.Compaction, with helpers for compacting older working context when a model approaches its context window.
  • Shikumi.Program.nodeInstructionsIndexed :: Program i o -> [Text]: the signature instruction of each Predict node, in foldParams/nodeFieldsIndexed order. Used by shikumi-okf to document model calls (EP-31, Milestone 5).

Changed

  • ShikumiError now distinguishes provider context-window failures with the new ContextWindowExceeded constructor.

0.1.0.1 - 2026-06-21

Fixed

  • Adapted Shikumi.Error.fromBaikaiError and streaming response reassembly to the baikai 0.2 API.

Changed

  • Constrained baikai package dependencies to the 0.2 series for Hackage builds.

0.1.0.0 - 2026-06-13

Added

  • Initial Hackage release of the shikumi core runtime.
  • Typed program and signature APIs, structured schema decoding, model routing, retries, budget tracking, multimodal helpers, streaming, refinement, rewards, and program combinators.