Skip to content

v2.2.0

Choose a tag to compare

@marcinpsk marcinpsk released this 14 Sep 12:41
· 565 commits to main since this release

v2.2.0 (2026-09-14)

This release is published under the Apache-2.0 License.

Bug Fixes

  • Address inference and proposal review findings (75b9a51)

  • Address proposal review findings (468a96d)

  • Align Ask AI cards with the ratified workspace (6a6fdf9)

  • Harden proposal access and failures (92558b8)

  • Preserve digest permission checks (db4b1cf)

  • Preserve proposal lifecycle after conflicts and worker errors (390a859)

  • Reject invalid typed permission constraints (ce3a4f3)

  • Report malformed proposal action ids accurately (979638f)

  • api: Answer a backend delete, through a read-only Inference Backend endpoint (06bfe1a)

  • api: Drop the duplicate ValidationError import (62231ce)

  • api: Enforce proposal visibility and validate profile filters (777aee8)

  • api: Limit profile-scoped proposal history (0ee8ce6)

  • api: Preserve profile-scoped history access (e771dfe)

  • api: Restrict profile querysets and validate profile IDs (8716170)

  • inference: Apply the decidability rule at every decoded layer (ce7cc36)

  • inference: Bound retained response diagnostics (522c6d8)

  • inference: Cap the rate-limit delay a backend can ask a worker to wait (56e0fd9)

  • inference: Carry the response a failed call received, and say what may be retried (ed537b2)

  • inference: Fail a duplicated candidate snapshot as invalid configuration (4326b47)

  • inference: Fail closed on an error status, and type a decoder failure (1cb58e3)

  • inference: Keep a response body only when its content can be established (9c9d41a)

  • inference: Preserve unmapped adapter diagnostics (5b3ff76)

  • inference: Redact a credential the backend escaped into its body (2dcd1b5)

  • inference: Redact a credential whose own characters need JSON escaping (a1b9e61)

  • inference: Redact an escaped credential in a body that never parses (6786fcf)

  • inference: Treat any backslash as an escape when deciding what to keep (484af1c)

  • migrations: Regenerate resolution proposal schema (11b8188)

  • permissions: Align proposal actions with scoped writes (d6142ef)

  • permissions: Assess missing keep constraints (b2c41b4)

  • permissions: Contain existing-scope errors (852efc2)

  • permissions: Fail closed on empty constraints (9453ecd)

  • permissions: Isolate generated key aliases (58b6cb1)

  • permissions: Preserve saved-row authority (89b2011)

  • proposals: Align permissions and presentation contracts (a1d539b)

  • proposals: Bound candidate requests (c058673)

  • proposals: Bound workspace history responses (23e92dc)

  • proposals: Distinguish task queue failures (ec7b8ae)

  • proposals: Explain unusable candidate sets (d53efcd)

  • proposals: Freeze request inventory atomically (14759bc)

  • proposals: Harden reviewed boundaries (587e42e)

  • proposals: Hide scoped candidate evidence (a27da4d)

  • proposals: Keep cancellation available after drift (4cff964)

  • proposals: Report unavailable devices accurately (28bf0ab)

  • proposals: Require a candidate ID for candidate outcomes (793f9ac)

  • proposals: Require decision attribution (3ecc26e)

  • proposals: Validate lifecycle inputs and contain permission detail (395bbc7)

  • security: Pin inference connections after DNS resolution (e0e1668)

  • templates: Stop the field actions stretching across the workspace (ba04ea5)

  • tests: Carry the bounded diagnostic into the stored assertions (a047617)

  • ui: Keep proposal actions busy (4cb6f62)

  • views: Contain target loss during workspace display (dce2e2a)

  • views: Keep the proposal card in step with what acceptance permits (c7fa52b)

  • views: Make the preview-revision requirement explicit, and reject without a reader (93e564f)

  • views: Reject retired adapters and fail stranded proposals (9dd7f72)

Chores

  • deps-dev: Bump @playwright/test from 1.62.1 to 1.63.0 (4cf7c86)

  • deps-dev: Bump ruff from 0.16.5 to 0.16.6 (60f8d89)

  • deps-dev: Bump types-pyyaml (0a71428)

  • deps-dev: Bump vitest from 4.1.10 to 5.0.0 (8642e5b)

  • migrations: Remove duplicate license metadata (2520fec)

Documentation

  • Qualify the connection-test backend key requirement (07af68c)

  • api: Trim two comments to the non-obvious line (0dab429)

  • design: Ratify T8 at round 5, and record what the prerequisite had to fix (853a4d2)

  • design: Record proposal permission seam (046a2e8)

  • design: Record the ratified T8 Resolution Proposal design (b8660ef)

  • inference: Give the decidability rule its reason in one line (491d101)

  • spec: Say that an illegal action is disabled, never hidden (1eafc2e)

  • spec: State which HTTP statuses 13.3 treats as transient (df09cfc)

Features

  • Add Ask AI cards to the trace workspace (9b95bd1)

  • Expose proposal history and workspace action states (74cee98)

  • api: Expose Resolution Proposals through a read-only endpoint (6bd802f)

  • inference: Add the proposal candidate bound as a plugin setting (8917ca5)

  • inference: Add the proposal task registry and the Candidate Snapshot (f5646aa)

  • inference: Add the Resolution Proposal row and its transition service (7c52229)

  • inference: Add the strict Resolution Proposal response validator (20c04f0)

  • inference: Revalidate freshness and serialize the operator decision (7bb1d47)

  • inference: Run a Resolution Proposal through the active backend (a5e2e1e)

  • views: Add the Review Workspace commands for Resolution Proposals (f595922)

Refactoring

  • api: Scope Resolution Proposal history with the shared mixin (32c9747)

  • models: Centralize digest index synchronization (e8a31cf)

  • proposals: Make Candidate Snapshot the request interface (3a46213)

  • proposals: Share digest maintenance through the mixin (ec8345b)

Testing

  • Cover proposal object constraints (667e3f0)

  • Use persisted proposal candidates (d1ebe3b)

  • inference: Make the file-fallback mapping a module-level helper (33e0f4a)

  • inference: Pin 408 as non-transient, and shorten one rationale (ecdd2b1)

  • security: Cover pinned transport trust cases (35a8a5f)

  • trace: Guard the disposition set the summary strip counts (c28b9be)

  • views: Apply NetBox's view contract to Inference Backend (04799a0)


Detailed Changes: v2.1.0...v2.2.0