Repository navigation
Releases
Releases · GlediLami/kubetective
v1.0.2
kubetective 1.0.2
Keyless-signed with cosign (sigstore); SBOMs attached to the archives and
attested on the container image. Verification instructions:
SECURITY.md.
See the CHANGELOG for what shipped.
Changelog
- e8a98cd Formula: v1.0.1
- 5f9ad61 Merge main into feat/version-output-formats
- 7d9352e Merge pull request #19 from yunasora/feat/version-output-formats
- b07308a feat(calibration): five live hard-set scenarios, and the four bugs they found
- 1389b61 feat: add machine-readable version output
- 0db0745 feat: add machine-readable version output
- e606692 feat: add machine-readable version output
- 6f17852 feat: add machine-readable version output
- 973fe70 fix(docs): repair the brew install one-liner and gate it
- 8b79ee0 fix(release): correct the verify job's asset names and image tag
- 39a8f46 fix(server): reject path-like incident ids from REST and MCP
- 4ab6649 fix: live-cluster false positives, alert namespaces, opt-in calibration
v1.0.1
kubetective 1.0.1
Keyless-signed with cosign (sigstore); SBOMs attached to the archives and
attested on the container image. Verification instructions:
SECURITY.md.
See the CHANGELOG for what shipped.
Changelog
- c5881c6 Fix typos and improve clarity in README.md
- 35f500c Formula: v1.0.0
- fca2a18 Update demo description in README
- 2ec394c demo: cursor now tracks the real text cell width while typing
- 4535303 demo: draw blank separator lines instead of skipping them — no dead rows
- 742ea62 demo: hold the final screen ~4s so readers can see the verdict
- 08a81e5 demo: keep the verdict on screen ~4s via a long final frame; add done line
- 661c1d6 demo: smooth 1-char typing frames and a distinct white cursor block
- cf7db71 demo: tighten vertical height (remove dead bottom margin, 27px line height)
- 270c5e1 demo: zoomed terminal fonts, better palette, terminal-width wrapping
- a8ac6f2 feat(benchmark): add mutation, noise and redaction gates plus a hard set
- d016f9c feat(cli): kubetective scenario new — draft a benchmark scenario from a recording
- f99fdaf feat(redact): add kubetective sanitize for sharing incident records
- 2a36979 feat(release): keyless cosign signing, SBOMs, and a verification job
- 911cec3 fix(collect): anchor git evidence to the investigation window, not wall time
- 33d0725 fix(diag): stop a unit test overwriting the real user config
- 3fe6dc3 fix(memory): stop every investigation matching itself as a past incident
- 002f43e fix(redact): rewrite nested payloads and image references in free text
- 76fa2db fix(release): give goreleaser its own Dockerfile; drop krew
- 7a8cd8e fix(release): version gate must tolerate the formula gap on a tagged build
- 315cbd0 fix(score): refuse calibration fits the benchmark cannot justify
- 36b6c42 fix: retry the deployment investigation until the crashloop hypothesis is captured
- 1633327 fix: smoke gate waits for the crash-loop evidence before the actions E2E (flake)
- aa888f8 fix: smoke retries the pod investigation until the record shows the crash state
- 4268464 fix: version gate tolerates release-in-flight formula gap; changelog notes both gate fixes
- 255157e refactor(analyze): document the weight scale, move status card onto the interface
- 43c3bc6 scenario: add the first recording from a live cluster
KubeTective v1.0.0
v1.0.0 GA declaration. Three checklist items are waived by owner
decision for this release, tracked for the next release:
- Calibration at scale: 15 ground-truth points ship today, not 30
(the evaluation gate still passes: ECE within threshold, LOO-validated
temperature).- Signed releases: cosign keys + CI signing wiring remain open; the
goreleaser config is ready for them.- External security audit: a self-review is published instead
(reports/security/review-v1.0.md); third-party review is the first
stop on the next release.
Added
v0.8- Loki log collector (--loki-url/KUBETECTIVE_LOKI_URL):
log evidence for the adaptive loop from Loki, silent degradation;
incident memory v1 (kubetective incidents similar <id>, Jaccard
overlap of failure shapes, "seen this before" note on every
investigation); read-only web UI (kubetective serve:GET /,
GET /incidents/{id}); self-telemetry (GET /metrics, expvar);
GitHub Actions CI (build/vet/test/benchmark/evaluate gates);
dns-events-onlyscenario (suite: 16 scenarios).kubetective incidents search: filter the incident store by target,
cluster, analyzer, minimum severity, and time window
(--since/--until), newest first (--limit); the linear-scan
JSONL precursor to the indexed memory (roadmap v2).- Container smoke test covers the full action-safety loop: preview plans
the restart-pod action,--applywithout--yesis rejected, and an
approved apply deletes/recreates the pod and appends the audit record -
all under the least-privilege RBAC (records persist across jobs via a
PVC). Any gate failure fails the build. - Record versioning contract:
record.Loadnow rejects records written
by a newer engine loudly (upgrade instead of silent mis-reads), with
upgrade tests pinning older/no-meta/meta-version reads. - Operational maturity:
kubetective serveshuts down gracefully on
SIGINT/SIGTERM and exposes pprof behind a--pprofflag. - Dependency license report target (
make license-report); CODEOWNERS
and a pull request template. - CLI target parsing accepts fully-qualified
kind/namespace/name
targets, the form incident records store. - Completion webhook, opt-in and HMAC-secured (
webhook_url+
webhook_secret): a signed notification after every investigation in
X-Kubetective-Signature; receivers must verify before parsing.
Notification failure never fails the investigation. - Structured logs (
--log-format json|textorKUBETECTIVE_LOG_FORMAT)
for investigations, HTTP requests, and action applies; byte-identical
output when off. - Evaluation report as a committed artifact (
reports/evaluation/latest.md,
make report): Action safety section + unsafe-action-rate = 0 gate. - Alert integrations (inbound):
kubetective alert pagerduty|grafana|slack
investigates from a webhook payload (stdin or--file), with zero
API keys. Grafanakubernetes_*alert labels (unified + legacy
shapes), PagerDuty incident titles / impacted services / Events API v2
details, and Slack slash-command text (deployment/checkout since=2h)
name the target; thesince=window is honored (precedence: flag >
payload > config > 30m). Payloads without a Kubernetes target fail with
a readable message instead of guessing. Runs the same recorded,
webhook-notified pipeline asinvestigate. - The uninstall test (roadmap v1.0 #10):
hack/uninstall-test.sh
(CI jobuninstall-test) clones fresh, builds per the docs, verifies
both binaries, runs the offline benchmark, and assertsdoctorfails
without a cluster with an actionable message - never a stack trace. - Docs site:
site/(single-page static HTML, no framework)
published to GitHub Pages by.github/workflows/pages.ymlat
https://gledilami.github.io/kubetective/ - install, quickstart,
integrations, scoring, ops, security. - krew submission script:
hack/submit-krew.shcompletes the
plugin-index submission in one command - verifies release assets
exist, fills the per-platform sha256 values, commits the manifest,
and opens the krew-index PR. It refuses to run without real release
assets (no placeholder hashes can ship). - Security hardening (from the v1.0 self-review, the only finding):
incident records are owner-only on disk (files 0600, store dir 0700;
previously umask-dependent) with a regression test.
Fixed
incidents similar --clusterscoping was bypassed by incidents that
carry no cluster id; untagged (legacy) records no longer leak into
scoped queries.- Container smoke gate:
--applyoutside the approval gate no longer
selects the wrong recommended action when a preview plans several. gofmt,go vet, andstaticcheckclean across the tree.