Releases: VersusControl/versus-incident
Releases · VersusControl/versus-incident
v1.4.1
[1.4.1] — 2026-05
Team & member management
- Define teams and members through a
new admin UI + REST API (gated byX-Gateway-Secret) and assign them
to incidents. Members have a name, an editable alias (auto-derived
from the name in the UI), and a meta block of per-channel identifiers
(Slack ID, Telegram ID, email, Viber ID, MS Teams UPN, PagerDuty user
ID, …). Teams have a name, an alias, an optional description, and an
ordered member list. Persisted via the existingstorage.Provider
(newteams+membersblobs). Incident records gain optional
assigned_team_idandassigned_member_idsfields. No automatic
routing yet — that lands in a later phase. - Enable AI SRE detect make on-call
v1.4.0
[1.4.0] — 2026-05
Added
AI SRE Agent — detect mode (end-to-end)
- Detect-mode AI pipeline: unknown / spike patterns are forwarded to the
AI SRE; findings emit incidents through the standard
services.CreateIncidentpipeline so all configured channels and the
on-call workflow trigger unchanged. - OpenAI HTTP client (
pkg/agent/ai/openai.go) using plainnet/http
against/v1/chat/completionswithresponse_format: json_object.
No SDK dependency. - Multi-file system prompt embedded via
go:embedfrom
pkg/agent/ai/prompts/{SOUL,INPUTS,OUTPUT,RULES}.md. Operators tune
the prompt by editing Markdown — no Go changes required. - AI cost & privacy controls: per-hour
RateLimiter,ResultCachewith
TTL eviction, redaction pipeline runs before any AI call. - Detect-mode audit log — bounded ring buffer (cap 500) persisted as
thedetectstorage blob; captures every AI call with prompt, raw
response, finding, outcome, latency, and model. - New admin endpoints (gated by
X-Gateway-Secret):GET /api/agent/detect,/detect/stats,/detect/:idDELETE /api/agent/detect,POST /api/agent/detect/flushGET /api/agent/ai/system-prompt
- Frequency spike detection: known patterns whose rate exceeds the EWMA
baseline are routed to the AI SRE alongside unknowns.
Data sources (AI agent)
- Loki signal source (
pkg/signalsources/loki.go) — polls
/loki/api/v1/query_rangewith stream-label filtering, configurable
query+step, basic-auth andX-Scope-OrgIDfor multi-tenant
deployments. Full test coverage. - CloudWatch Logs signal source
(pkg/signalsources/cloudwatchlogs.go) — pulls events via the AWS
SDK v2 with--log-group-nameand optional--log-stream-name-prefix
/--filter-pattern. Full test coverage. - Agent now supports
type: lokiandtype: cloudwatchlogsin
agent_sources.yamlalongside the existingfileand
elasticsearchsources.
UI
- New Detect page (table + outcome filters) and detail page (prompt,
raw response, finding). - New System Prompt page rendering the assembled system prompt.
- Dashboard AI Detect tile and chart bar (replaces the prior
Services tile). - Incident detail page redesigned: structured Summary / Suggestions
/ Sample log / Raw payload column on the left; Facts / Channels
notified / Status / Agent context column on the right. Same layout
for every incident (manual, webhook, or agent-emitted). - Two AI action cards at the top of the detail page — Analysis and
Auto Post Mortem — each with an explanation and a
coming soonpill. Reserved for future AI features. - Status page now a proper agent dashboard: runtime banner (agent
on/off, mode, source counts, AI model, poll interval), two tile rows
(patterns/services/shadow + detect/emitted/cache/errors), four
breakdown tables (shadow verdicts, detect outcomes, detect verdicts,
AI severity), and a signal-sources table read from
agent_sources.yaml.
Notification templates
- All 5 channel templates (Slack, Telegram, MS Teams, Lark, Viber) now
detectVersus Agentsource via.PatternIDand render an
agent-native block (verdict, category, frequency, baseline,
confidence, pattern, suggestions, sample log) in channel-native
formatting. - Split the prior shared
agent_message.tmplinto six per-channel
templates (agent_slack_message.tmpl,agent_telegram_message.tmpl,
agent_msteams_message.tmpl,agent_lark_message.tmpl,
agent_viber_message.tmpl,agent_email_message.tmpl) so each
channel renders in its native formatting. pkg/utils/agent_template.goexposesIsAgentIncident()and the
six template-path constants; alert dispatch picks the agent template
automatically when.PatternIDis set or.Sourcestarts with
agent:.
Examples
- Four self-contained docker-compose stacks under
examples/docker-compose/:file/— tails a host log fileloki/— Grafana + Loki + Promtail + Versuselasticsearch/— single-node ES + Versuscloudwatch/— CloudWatch Logs poller + Versus
- Each stack ships its own
docker-compose.yml,
config/{config.yaml,agent_sources.yaml}, andREADME.mdwith
test-traffic instructions. Compose files use${VAR:-default}so
docker compose upworks zero-config. - All stacks run Redis with TLS via a one-shot
redis-tls-initcontainer that mints a self-signed cert into a
shared volume — matches the app's unconditional TLS Redis config.
Test scripts
scripts/generate_noisy_logs.pyandscripts/run_noisy_logs.shnow
support--scenariowith 7 curated incident scenarios:
db-outage,cache-meltdown,disk-full,tls-expired,
oom-cascade,auth-attack,k8s-imagepull.scripts/generate_noisy_logs.pyrewritten with pluggable sinks:
--target {stdout,loki,elasticsearch,cloudwatch}. Stdlib only;
boto3is lazy-imported for the CloudWatch target.scripts/run_noisy_logs.shaccepts the same--targetflag with
per-backend env vars (LOKI_URL,ES_URL,CW_LOG_GROUP_NAME, …).
Documentation
- New
src/agent/ai-detect-mode.mdcovering configuration, pipeline
outcomes, admin endpoints, system prompt anatomy, worked example, and
cost knobs. - New Data Sources mdBook section
(src/agent/data-sources.md) covering every source type with
configuration, polling semantics, and end-to-end examples. src/userguide/admin-ui.mdupdated for the new detail/status pages.SUMMARY.mdupdated with the new entries.
CI / release
release.yamlnow builds multi-platform images
(linux/amd64+linux/arm64) using QEMU + Buildx.- CI guards
go vetagainst an emptyui/dist/by re-creating
ui/dist/.gitkeepbefore compilation (thego:embed all:dist
directive needs at least one entry).
Changed
core.AISRE.Analyzenow returns*AICallResult(finding + user
prompt + raw response + latency + model) instead of*AIFinding.
External implementations ofAISREmust be updated.- OpenAI endpoint is now hardcoded to
https://api.openai.com/v1/chat/completions. .env.examplefiles removed from the docker-compose examples —
the${VAR:-default}defaults in compose files cover every knob
and keep the quick-start to a single command.
Fixed
- Channel notifications for AI-emitted incidents previously rendered as
"Unknown Alert (Unknown) / INFO". All 5 templates now correctly
display the agent verdict, severity, and metadata. - Pattern catalog — race / correctness regressions in the catalog,
alert fan-out, and on-call status handling. - Storage — fsync the staged file before the atomic rename in the
file-backed provider so a crash mid-write can no longer leave a
zero-byteincidents.json.
Security
- Detect-mode audit log redacts samples through the same redactor used
before AI calls; raw payloads never reach the on-disk log unredacted. gateway_secretcontinues to gate every/api/agent/*endpoint;
empty secret means the admin endpoints are not registered at all
(no silent open admin surface).- Constant-time gateway-secret comparison in
pkg/controllers/agent.go— replaces the previous==check, which
was vulnerable to timing-based secret discovery on the
/api/agent/*and/api/admin/*endpoints.
[1.4.x]
See git history and previous Helm chart releases. Migration notes:
src/migration/migration-v1.4.0.md.
v1.3.9
What's Changed
- init ai sre agent by @hoalongnatsu in #120
- (docs): add docs for ai sre agent by @hoalongnatsu in #121
- (docs): update docs for ai sre agent by @hoalongnatsu in #122
- (feature): enable ai sre agent shadow mode by @hoalongnatsu in #123
- (feature): add detect service for ai sre agent by @hoalongnatsu in #124
- (feature): disable agent source by @hoalongnatsu in #125
- (docs): update docs ai sre agent by @hoalongnatsu in #126
- (docs): add SPONSORS.md by @hoalongnatsu in #127
- (docs): add CONTRIBUTING.md and ISSUE_TEMPLATE by @hoalongnatsu in #128
- (deps): fix dependabot pr by @hoalongnatsu in #141
- chore(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #129
- chore(deps): bump actions/upload-pages-artifact from 3 to 5 by @dependabot[bot] in #130
- chore(deps): bump docker/login-action from 2 to 4 by @dependabot[bot] in #131
- chore(deps): bump docker/metadata-action from 5 to 6 by @dependabot[bot] in #132
- chore(deps): bump azure/setup-helm from 3 to 5 by @dependabot[bot] in #133
- chore(deps): bump docker/setup-buildx-action from 3 to 4 by @dependabot[bot] in #134
- chore(deps): bump golang from 1.23-alpine to 1.26-alpine by @dependabot[bot] in #135
- chore(deps): bump the aws-sdk group with 4 updates by @dependabot[bot] in #136
- chore(deps): bump github.com/gofiber/fiber/v2 from 2.52.6 to 2.52.13 by @dependabot[bot] in #137
- chore(deps): bump github.com/spf13/viper from 1.19.0 to 1.21.0 by @dependabot[bot] in #139
- (feature): spike detection by @hoalongnatsu in #149
- feature: add universal MS Teams alert template by @aud1ence in #150
- feat: add storage abstraction, incident persistence, and embedded UI by @hoalongnatsu in #151
- chore(deps): bump actions/deploy-pages from 4 to 5 by @dependabot[bot] in #142
- chore(deps): bump docker/build-push-action from 4 to 7 by @dependabot[bot] in #143
- chore(deps): bump actions/configure-pages from 5 to 6 by @dependabot[bot] in #144
- chore(deps): bump actions/checkout from 3 to 6 by @dependabot[bot] in #145
- chore(deps): bump github.com/gofiber/fiber/v2 from 2.52.6 to 2.52.13 by @dependabot[bot] in #147
- chore(deps): bump github.com/spf13/viper from 1.19.0 to 1.21.0 by @dependabot[bot] in #148
- feat: add admin config UI pages, docs overhaul, and Kubernetes guide by @hoalongnatsu in #152
New Contributors
- @dependabot[bot] made their first contribution in #129
- @aud1ence made their first contribution in #150
Full Changelog: v1.3.8...v1.3.9
v1.3.8
What's Changed
- (docs): update README by @hoalongnatsu in #98
- feat: auto-handle array payloads for /api/incidents by @nghiadaulau in #103
Full Changelog: v1.3.7...v1.3.8
v1.3.7
What's Changed
- Feature/update by @hoalongnatsu in #78
- Feature/update by @hoalongnatsu in #79
- (feature): update ci/cd helm chart by @hoalongnatsu in #80
- (feature): update ci/cd helm chart by @hoalongnatsu in #81
- (feature): update ci/cd helm chart by @hoalongnatsu in #82
- (feature): update ci/cd helm chart by @hoalongnatsu in #83
- (feature): update ci/cd helm chart by @hoalongnatsu in #84
- (feature): update ci/cd helm chart by @hoalongnatsu in #85
- (feature): update ci/cd helm chart by @hoalongnatsu in #86
- (feature): update note helm chart by @hoalongnatsu in #87
- (feature): update note helm chart by @hoalongnatsu in #88
- (docs): update helm chart docs by @hoalongnatsu in #89
- (docs): update note helm chart by @hoalongnatsu in #90
- Feature/update by @hoalongnatsu in #91
- (docs): add an example for on-call rotation schedule by @hoalongnatsu in #92
- (helm): add ingress and hpa configuration by @hoalongnatsu in #93
- (docs): update README by @hoalongnatsu in #94
- (feature): support viber and proxy by @hoalongnatsu in #96
Full Changelog: v1.3.6...v1.3.7
v1.3.6
What's Changed
- (feature): enable initialized only for on-call by @hoalongnatsu in #72
- (docs): update on-call docs by @hoalongnatsu in #73
- (feature): add helm chart by @hoalongnatsu in #74
- (feature): update ci/cd helm chart by @hoalongnatsu in #75
- (feature): update ci/cd helm chart by @hoalongnatsu in #76
- Feature/update by @hoalongnatsu in #77
Full Changelog: v1.3.5...v1.3.6
v1.3.5
v1.3.4
What's Changed
- (feature): universal lark alert template by @hoalongnatsu in #69
Full Changelog: v1.3.3...v1.3.4
v1.3.3
What's Changed
- (feature): enable interactive button for ack alerts (Slack) by @hoalongnatsu in #66
- (docs): user guide for custom templates by @hoalongnatsu in #67
- (feature): update default handle ack for slack by @hoalongnatsu in #68
Full Changelog: v1.3.2...v1.3.3
v1.3.2
What's Changed
- (feature): add universal alert template by @hoalongnatsu in #65
Full Changelog: v1.3.1...v1.3.2