Changeset 0.28.6 (#192)

This commit is contained in:
2026-03-15 01:33:38 +00:00
parent 6f0ad1355c
commit bffda043db
59 changed files with 3022 additions and 77 deletions

View File

@@ -1,5 +1,83 @@
# Changelog
## [0.28.6] — 2026-03-15
### Summary
Infrastructure release. Virtual scroll for long conversations, Helm chart
for Kubernetes deployment, system task type (Go function registry replacing
ad-hoc goroutines), admin broadcast notifications, server-side SSH key
generation for git credentials, task webhook trigger UI, and model
preference dedup fix.
KB auto-inject pipe filter deferred to v0.29.0 — will be built as the
reference Go implementation of the server-side filter model alongside
Starlark, ensuring the architecture is right and performant before
user code runs in it.
### New
- **Virtual scroll** — viewport-windowed message rendering for long
conversations (100+ messages). IntersectionObserver-based sentinel
triggers prepend chunks of 40 as user scrolls up. DOM capped at ~80
nodes regardless of conversation length. Streaming messages always
rendered. Transparent fallback for short conversations.
- **Helm chart** — `chart/` directory with full Kubernetes deployment.
`helm install switchboard ./chart` replaces raw manifests. Configures
backend + frontend deployments, services, ingress (Traefik), PVC,
ConfigMap, Secret. All `config.go` env vars exposed as values.
- **System task type** — `task_type: "system"` with Go function registry.
Built-in functions: `session_cleanup`, `staleness_check`,
`retention_sweep`, `health_prune`. Admin creates task, picks function
from dropdown, sets cron schedule. Executor calls registered Go function
instead of LLM. Replaces ad-hoc goroutine background jobs with visible,
configurable, auditable tasks. Permanent track — not replaced by Starlark.
`GET /admin/system-functions` returns available functions.
- **Admin broadcast** — `POST /admin/notifications/broadcast` sends
`system.announcement` notification to all active users via `NotifyMany`.
Emits `system.broadcast` WebSocket event. Admin UI compose form with
title, message, level selector (info/warning/critical).
- **Git credential key generation** — `POST /git-credentials/generate`
creates ED25519 SSH keypair server-side. Private key vault-encrypted,
never exposed. Public key + SHA256 fingerprint returned for user to add
to git host. Optional `persona_id` for per-persona commit attribution.
`GET /git-credentials/:id/public-key` for clipboard copy. Settings UI
section with generate, list, copy, delete.
- **Task webhook trigger UI** — schedule selector gains "Webhook trigger"
option. Trigger URL displayed with copy button after creation. Link
button on webhook tasks in list view. `webhook_secret` field for HMAC
signing. Task-to-task chaining documented (Task A webhook_url → Task B
trigger URL).
### Fixed
- **Model preferences NULL-in-UNIQUE** — `provider_config_id` column on
`user_model_settings` changed to `NOT NULL`. The `UNIQUE(user_id,
model_id, provider_config_id)` constraint silently allowed duplicates
when the column was NULL. Handler already enforced `binding:"required"`
— schema now matches.
- **ICD runner shape** — `S.modelPreference` gains `provider_config_id`
field (smoke tier shape assertion).
### Changed
- `ListActiveUserIDs` added to `UserStore` interface (PG + SQLite).
- `NotifTypeAnnouncement` constant added to notification types.
- Task model gains `system_function` field. Task stores updated
(taskColumns, scanTask, Create) in both PG and SQLite.
- ICD runner version bumped. New tests: model prefs (8), broadcast (3),
git credentials (6), system tasks (4).
### Docs
- `notifications.md` — broadcast endpoint, `system.broadcast` WS event.
- `admin.md` — broadcast cross-reference.
- `workspaces.md``/generate`, `/public-key` endpoints, new fields.
- `tasks.md` — system task type, function registry, chaining pattern,
`GET /admin/system-functions`.
## [0.28.5] — 2026-03-14
### Summary