Repository navigation
v2.2.0
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