Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions changelog/index.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,85 @@ description: "Release notes for Kosli products."
rss: true
---

<Update label="August 20, 2026" description="" tags={["Platform"]}>

## Bug fixes

- **Empty attestation names refused in flow templates** — a flow template with an attestation named `""` could be saved but never satisfied, since no attestation can be reported under that name. Creating or updating a template with an empty attestation name is now rejected with a clear error. Existing records with the empty value still load.
- **Empty filenames refused when reporting artifacts** — `POST` to the artifact create endpoint with `filename: ""` is now rejected instead of storing a blank filename against the artifact's fingerprint.
- **A single malformed record no longer breaks list endpoints** — on environments, flows, artifacts, and other list endpoints, an exception rendering one record used to fail the whole response for every caller. The listing now returns successfully with a clearly-marked placeholder in place of the bad record.

</Update>

<Update label="August 19, 2026" description="v2.38.0" tags={["CLI"]}>

## New features

- **Custom attestation type summaries** — `kosli create attestation-type` and `kosli update attestation-type` now accept `--summary-json`, a JSON list of ordered `{name, expression}` entries. Each expression is a jq expression evaluated against the attestation payload, and Kosli renders the results as labeled rows on the attestation detail page. See [custom attestation types](/getting_started/attestations).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Critical — kosli update attestation-type does not exist.

The CLI only ships archive / create / get / list for attestation-type (see config/navigation.json:280-390 and the client_reference/kosli_*_attestation-type.md files). Updating a type is done by re-running kosli create attestation-type — the reference page's own example accordion is titled "create/update a custom attestation type with a summary" (client_reference/kosli_create_attestation-type.md:97). Since v2.36.0 unknown commands error and exit non-zero, so anyone copying this will hit a hard failure.

Improvement — the entry omits --summary.client_reference/kosli_create_attestation-type.md:28-36 documents --summary "NAME=EXPRESSION" (repeatable) as the primary form and describes --summary-json as "an alternative to --summary for summaries that are easier to express as JSON". This note announces only the alternative.

Suggested change
-**Custom attestation type summaries**`kosli create attestation-type`and `kosli update attestation-type` now accept `--summary-json`, a JSON list of ordered `{name, expression}` entries. Each expression is a jq expression evaluated against the attestation payload, and Kosli renders the results as labeled rows on the attestation detail page. See [custom attestation types](/getting_started/attestations).
-**Custom attestation type summaries**`kosli create attestation-type`now accepts `--summary`, a repeatable `'NAME=EXPRESSION'` entry (for example `--summary "Critical=.critical_count"`), and `--summary-json`, the same list given as a JSON array of `{name, expression}` entries. Each expression is a jq expression evaluated against the attestation payload, and Kosli renders the results as labeled rows on the attestation detail page, in the order given. The two flags cannot be combined. See [custom attestation types](/getting_started/attestations) and the [`kosli create attestation-type` reference](/client_reference/kosli_create_attestation-type).


## Bug fixes

- **`kosli begin trail` no longer wipes description and user_data on re-run** — running `kosli begin trail` without `--description` or `--user-data` used to send empty values and overwrite whatever was stored. The CLI now omits those fields when they aren't set, matching how the API behaves.
- **Docker image has a writable `/tmp`** — the scratch-based image now ships an empty `/tmp`, so operations that rely on a temp directory (directory fingerprinting, evidence tarballing) work inside the container.

[View on GitHub](https://github.com/kosli-dev/cli/releases/tag/v2.38.0)

</Update>

<Update label="August 19, 2026" description="" tags={["Platform"]}>

## Updates

- **Scaling removed from environments** — capture of scale-only changes has been retired. An instance-count-only difference no longer creates a new snapshot or annotates an artifact as scaled, and the `include_scaling` environment setting is gone. Instance counts are still recorded on snapshots saved for another reason. Scaling had no compliance value: when a workload scales up or down, the artifact, its digest, and its provenance are unchanged.

</Update>

<Update label="August 18, 2026" description="" tags={["Platform"]}>

## Bug fixes

- **`attest override --commit` no longer 500s without prior git provenance** — overriding an attestation that was reported without a commit failed with a 500 when the override supplied `--commit`. Overrides now work whether or not the original attestation had git provenance.
- **Environment listing tolerates logical environments without included environments** — a logical environment created with no `--included-environments` could 500 the org's whole environment listing. The listing now returns normally, and newly created logical environments always record an explicit (possibly empty) included-environments list.

</Update>

<Update label="August 18, 2026" description="v0.9.3" tags={["Terraform Provider"]}>

## New features

- **`summary` attribute on `kosli_custom_attestation_type`** — the resource and data source now accept an optional `summary`: a JSON list of ordered, labeled jq expressions that Kosli renders as rows on the attestation detail page. URL values render as links.

```hcl
resource "kosli_custom_attestation_type" "security_scan" {
name = "security-scan"
schema = file("${path.module}/schemas/security-scan.json")
jq_rules = [".critical_count == 0"]

summary = jsonencode([
{ name = "Critical", expression = ".critical_count" },
{ name = "Report", expression = ".report_url" },
])
}
```

See [custom attestation types](/getting_started/attestations).

[View on GitHub](https://github.com/kosli-dev/terraform-provider-kosli/releases/tag/v0.9.3)

</Update>

<Update label="August 17, 2026" description="" tags={["Platform"]}>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Improvement — out of chronological order. This August 17 block sits above the pre-existing August 18, 2026 / v2.37.0 CLI entry at line 86. Every other entry in the file is strictly reverse-chronological. Move this block below line 95 (after the v2.37.0 </Update>) so the sequence reads Aug 20 → 19 → 19 → 18 → 18 → 18 (v2.37.0) → 17 → 14.


## Updates

- **Faster snapshot responses** — `GET /api/v2/snapshots*` used to fetch each artifact's provenance one at a time and read every attestation on the artifact. Provenance lookups are now batched across a snapshot's artifacts, and only the newest attestation is read per artifact. On snapshots with a single running artifact this cuts multi-second waits down to well under a second.

## Bug fixes

- **Flows list no longer breaks on legacy `repo_url` values** — flows created before the artifact endpoint moved to strict URL validation could store a non-URL `repo_url`, which caused the flows page to return an error instead of the list. Invalid values are now repaired (scp-style Azure remotes converted to browse URLs, scheme-less hosts prefixed with `https://`, known placeholders removed) so the page loads.

</Update>

<Update label="August 18, 2026" description="v2.37.0" tags={["CLI"]}>

## Breaking changes
Expand Down