Skip to content

Releases

v1.0.2

Choose a tag to compare

@github-actions github-actions released this 16 Oct 17:50

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

Choose a tag to compare

@github-actions github-actions released this 16 Aug 12:07

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

Choose a tag to compare

@GlediLami GlediLami released this 08 Aug 17:52

v1.0.0 GA declaration. Three checklist items are waived by owner
decision
for this release, tracked for the next release:

  1. Calibration at scale: 15 ground-truth points ship today, not 30
    (the evaluation gate still passes: ECE within threshold, LOO-validated
    temperature).
  2. Signed releases: cosign keys + CI signing wiring remain open; the
    goreleaser config is ready for them.
  3. 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-only scenario (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, --apply without --yes is 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.Load now 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 serve shuts down gracefully on
    SIGINT/SIGTERM and exposes pprof behind a --pprof flag.
  • 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|text or KUBETECTIVE_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
    . Grafana kubernetes_* 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; the since= 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 as investigate.
  • The uninstall test (roadmap v1.0 #10): hack/uninstall-test.sh
    (CI job uninstall-test) clones fresh, builds per the docs, verifies
    both binaries, runs the offline benchmark, and asserts doctor fails
    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.yml at
    https://gledilami.github.io/kubetective/ - install, quickstart,
    integrations, scoring, ops, security.
  • krew submission script: hack/submit-krew.sh completes 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 --cluster scoping was bypassed by incidents that
    carry no cluster id; untagged (legacy) records no longer leak into
    scoped queries.
  • Container smoke gate: --apply outside the approval gate no longer
    selects the wrong recommended action when a preview plans several.
  • gofmt, go vet, and staticcheck clean across the tree.