Skip to content

docs: update CLI and helm reference for v2.39.0 - #374

Merged
mbevc1 merged 1 commit into
mainfrom
reference-docs/v2.39.0
Aug 29, 2026
Merged

mbevc1 merged 1 commit into
mainfrom
reference-docs/v2.39.0

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated update of CLI and Helm reference documentation for release v2.39.0.

@mintlify

mintlify Bot commented Aug 29, 2026 •

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
kosli 🟢 Ready View Preview Aug 29, 2026, 10:47 AM

@claude

claude Bot commented Aug 29, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @github-actions[bot]'s task in 3m 7s —— View job


Doc review: CLI & Helm reference for v2.39.0

  • Read CLAUDE.md and the doc-review skill
  • Review substantive flag/prose changes in client_reference/
  • Check the large regenerated example-output diffs for noise vs. real change
  • Verify links, front matter, and navigation coverage
  • Post review findings

Reviewed all 29 changed files against CLAUDE.md and the doc-review skill. All are generated pages — no new files, so no config/navigation.json change is needed. One critical rendering defect, plus three prose issues and two suggestions. Four are posted inline; the rest are below.


Critical

client_reference/kosli_create_attestation-type.md:87 — the backticks the CLI added around jq this release came through as ^ characters. The published accordion title reads "...with schema and ^jq^ evaluation rules". Backticks are valid there — kosli_fingerprint.md:103, :109, :115 already use them and render fine — and the same jq → `jq` change landed cleanly in the body prose (lines 22–38), so this is specific to the accordion-title escaping path. Details and a drop-in suggestion are inline.

Because these pages come from kosli docs (.github/workflows/update-cli-docs.yml:41-45), the durable fix is in the kosli-dev/cli generator — a hand-edit here is overwritten by the next release. Fix this →

Improvement

kosli_snapshot_azure.md:22 — inline. British honours (CLAUDE.md requires American spelling; Vale's swap list doesn't cover honour and no workflow runs Vale, so nothing catches it), and the sentence restates the shared .kosli_ignore block that immediately follows on lines 23–25.

kosli_attest_jira.md:46-48 — inline. The new text contradicts line 45: that line says wrong credentials are "reported as non existing Jira issue", the new text says they're reported as "not confirmed rather than silently as missing". Also "a warning naming them is printed" is ambiguous about what gets named.

kosli_attest_sonar.md:29 — inline. Colon splice joining two independent sentences; should be a period. The rest of the --sonar-branch addition is internally consistent — flag table (line 80), mutual exclusion with --pull-request (lines 69 and 80), and the new example accordion (line 165) all agree.

Suggestion

kosli_diff_snapshots.md:254-259 — the regenerated live example now has both changed and not-changed as empty arrays (previously not-changed was populated). The flagship example for a diff command no longer demonstrates its two most interesting fields. Consider curating or pinning the snapshot pair used for this example so the output stays illustrative across regenerations.

kosli_get_snapshot.md:4266 and :6861, plus kosli_log_environment.md — the regenerated output now embeds two long multi-paragraph cyber-dojo commit messages that narrate an unfixed Kosli CLI bug: "kosli attest copies evidence with PreserveOwner ... That behaviour looks like a bug and is written up in ../kosli-cli-preserve-owner-bug.md for an issue against kosli-dev/cli." Public reference docs are now carrying an internal bug report and a local file path as sample data (and two instances of British "behaviour"). Truncating message fields in generated example output would keep this class of content off the site.

Verified clean

  • No new pages — all 29 files MODIFIED, so no config/navigation.json update required.
  • No relative links introduced; no ../ or ./ link targets in any added line.
  • No front matter added, removed, or changed on any page.
  • The three large diffs are pure data churn — JSON keys in kosli_get_snapshot.md (3068 lines), kosli_log_environment.md, kosli_list_snapshots.md and kosli_list_environments.md are identical before and after; only values, timestamps, fingerprints and commit SHAs moved.
  • The .kosli_ignore paragraph was added consistently and identically across nine attest/artifact pages — good.
  • CLI version stamp correctly bumped to v2.39.0 in client_reference/overview.md:7.

Two notes on scope: the PR title says "CLI and helm reference" but no helm/ files changed — presumably no chart changes in this release, worth confirming. And I could not run mint broken-links (the mint CLI isn't installed on this runner), so link resolution was checked by inspection only; all changed external links are github.com/app.kosli.com URLs from regenerated live data.

This review is advisory — no changes requested, nothing committed.
· branch reference-docs/v2.39.0

@mbevc1
mbevc1 merged commit ccf1a01 into main Aug 29, 2026
6 checks passed
@mbevc1
mbevc1 deleted the reference-docs/v2.39.0 branch August 29, 2026 10:49
```
</Accordion>
<Accordion title="create/update a custom attestation type with schema and jq evaluation rules">
<Accordion title="create/update a custom attestation type with schema and ^jq^ evaluation rules">

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 — garbled markup in the rendered accordion title.

The backticks the CLI added around jq in this release came through as ^ characters, so the published page reads "...with schema and ^jq^ evaluation rules".

Backticks are valid in an <Accordion> attribute — client_reference/kosli_fingerprint.md:103, :109 and :115 already use them and render correctly. Note the same jq → `jq` change was applied cleanly in the body prose above (lines 22–38), so this is specific to the accordion-title escaping path.

These pages are produced by kosli docs (.github/workflows/update-cli-docs.yml:41-45), so the durable fix is in the kosli-dev/cli docs generator — a hand-edit here gets overwritten by the next release. Worth an upstream issue; the suggestion below unblocks this release if you'd rather not wait.

Suggested change
<Accordion title="create/update a custom attestation type with schema and ^jq^ evaluation rules">
<Accordion>

will not match. See
https://learn.microsoft.com/en-us/azure/azure-functions/functions-app-settings#website_run_from_package

For zip-deployed apps, the fingerprint honours a `.kosli_ignore` file at the root of the deployed package.

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 — British spelling, and the sentence duplicates the paragraph below it.

Two things on this new lead-in line:

  1. honours is British. CLAUDE.md requires American spelling ("organization, behavior, color"). Vale's styles/Kosli/AmericanSpelling.yml doesn't have honour in its swap list and no workflow runs Vale, so nothing catches this automatically — but it's still a convention break on the published page.
  2. It restates what the next three lines already say. Lines 23–25 are the standard .kosli_ignore block used verbatim on eight other pages in this PR; this extra sentence in front of it is redundant except for the "zip-deployed apps" qualifier.

Suggest keeping just the qualifier, e.g. "For zip-deployed apps, the fingerprint respects a .kosli_ignore file at the root of the deployed package." followed by the shared block — or dropping the lead-in entirely. Fix belongs in the CLI's command long-description, not here.

existing Jira issues.
If you have wrong Jira credentials or wrong Jira-base-url it will be reported as non existing Jira issue.
This is because Jira returns same 404 error code in all cases.
This is because Jira returns same 404 error code in all cases. When Jira's response shows that it did not

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 — the new sentence contradicts the one before it.

Line 45 still says wrong credentials or a wrong base URL "will be reported as non existing Jira issue". The new text on 46–48 says the opposite for the credentials case: the issue is "reported as not confirmed rather than silently as missing". A reader hitting a credential failure gets two different answers about what Kosli reports.

Also, "a warning naming them is printed" is ambiguous — them reads back to "the credentials", but naming which credentials? (the username? the flag that supplied them?) Spelling out what the warning identifies would make this actionable.

Suggest reworking the paragraph upstream as a single statement, roughly: a wrong base URL still surfaces as a non-existent issue because Jira returns 404 either way, but a credential rejection is detected and reported as not confirmed, with a warning identifying the credentials — use --debug to see the status Jira returned per issue.

2. Providing the Sonar project key and either the revision or the pull-request ID of the scan (plus the SonarQube server URL if relevant).
For branch scans: if running the Kosli CLI in some CI/CD pipeline, the revision is defaulted to the commit SHA. If you are running the command locally,
or have overriden the revision in SonarQube via parameters to the Sonar scanner, you can provide the correct revision using the `--sonar-revision` flag.
If the scan ran on a branch other than the project's main branch in SonarQube, also provide the branch name using the `--sonar-branch` flag:

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.

Suggestion — colon splice.

The colon joins two independent sentences ("...using the --sonar-branch flag:" / "SonarQube searches only the main branch..."). The second clause is a rationale, not a list or elaboration the colon is introducing. A period reads correctly:

...also provide the branch name using the --sonar-branch flag. SonarQube searches only the main branch unless it is told otherwise, so without it the scan cannot be found.

The rest of the --sonar-branch addition is consistent — the flag table entry (line 80), the mutual exclusion with --pull-request (lines 69 and 80), and the new example accordion (line 165) all agree.

dangrondahl added a commit that referenced this pull request Sep 3, 2026
Reviewed the last 20 non-bot PRs (14 touched docs) against what
`doc-write` and `doc-review` actually ask for, then fixed what the
record showed was wrong. No site content changes — this is all agent
tooling.

## Why

`doc-review` produced **0 Critical, 5 Improvement and ~20 Suggestion**
findings across those 14 PRs. Its genuinely valuable catches were all
cross-file consistency checks the skill never asked for:

- a changelog entry documenting `kosli update attestation-type`, a
command with no reference page (#371)
- `template-reference/flow_template.md` out of sync with the schema the
same PR regenerated (#296)
- the one file an approvals-removal sweep missed,
`understand_kosli/how_kosli_works.md:22` (#345)

Its weakest findings were prose polish, some already fixed at branch
head. Meanwhile its written checklist was dominated by things that
always pass or are already enforced by `vale-spellcheck`.

Two structural gaps the PR record made obvious:

- **Placement was never questioned.** In #305 a pure reference page was
authored into `integrations/`, and a human reviewer had to ask for the
move — commit `9e7a121 docs: move GitHub Action reference into the
Reference section`. That question should come from the review.
- **Generated pages were handled inconsistently.** #375 got it right and
said so. #374 wrote *"the durable fix is in the `kosli-dev/cli`
generator — a hand-edit here is overwritten by the next release"* and
then emitted a `Fix this` link scoped to `repo=kosli-dev/docs` telling
an agent to edit the generated file anyway, plus 4 inline comments on
regenerated files.

## What changed

**`doc-review`** — promoted the three accidental wins to named checks,
each carrying its precedent. Added placement, redirects and anchor
stability. Added an explicit *what not to report* bar and an 8-finding
cap. Stopped hand-checking spelling. Dropped the "what looks good"
recital that the sticky comment re-renders on every push.

**Generated pages** — split into three categories rather than one
blanket ban: deterministically regenerated (edit is deleted),
agent-synced (edit survives but drifts), and hand-authored despite the
directory (`client_reference/overview.md`, `output_and_verbosity.md`).
Includes the filename→source mapping, verified upstream:
`kosli_attest_sonar.md` ← `cmd/kosli/attestSonar.go`.

Also records that **`^` is the CLI's backtick convention** in Go long
descriptions, substituted by `kosli docs`. That makes the `^jq^` defect
#374 found a generator escaping bug in the Accordion-title path, not a
typo in the Go string — so a reviewer can point at the right fix. Worth
filing upstream separately.

**`doc-write`** — added a Diátaxis→tab placement table so #305 can't
recur, plus redirects, anchor stability, and the generated-paths table.

**New `doc-structure` skill + monthly workflow** — audits navigation
shape and changelog coverage, which per-PR review structurally cannot
see, and files issues. Read-only against docs; issues are its only
write. Capped at 8 issues, deduplicating against open issues first — its
headline check reproduces the `/getting_started/attestations` summary
gap, which is already open as #364.

**New `scripts/audit_navigation.py` + 22 tests** — the audit's
mechanical checks, extracted from an inline heredoc. Three payoffs:

1. `pr-quality.yml` already runs `pytest tests/`, so **CLAUDE.md core
rule 2 is now enforced deterministically** — a page file with no
`navigation` entry fails the build. No new job needed.
2. `doc-structure.yml` can allow `Bash(python3
scripts/audit_navigation.py:*)` instead of `Bash(python3:*)`, which was
arbitrary code execution.
3. Determinism. The inline version had already shipped a bug: `sed
's|\.mdx\?$||'` is a no-op on BSD sed, so every page looked orphaned on
macOS. That case is now a regression test.

Integrity findings (orphans, dangling entries) are separated from shape
findings (single-child groups, deep nesting, Title Case labels,
oversized groups, inconsistent icons). Only integrity can fail a build —
the script cannot tell a group that should be merged from one
deliberately kept separate.

`Reference ▸ CLI Reference` is exempt from shape checks:
`update-cli-nav.py` generates it from the CLI's command tree, so a
single-child `kosli allow` group is upstream truth. Without that
exemption the audit reported 54 findings, 21 of them proposing to
reshape generated navigation — the same mistake being fixed in
`doc-review`. It now reports 33, all hand-maintained.

**New `docs-restructure` issue template** — Markdown, not a YAML form:
`gh issue create --body` doesn't apply templates mechanically and YAML
forms can't be filled from the CLI, so a form would help humans and do
nothing for the job. Its URL-impact section encodes the distinction that
decides whether a restructure is safe — a group rename changes no URLs,
a moved page file needs a `config/redirects.json` entry. `config.yml`
keeps blank issues enabled.

**`CLAUDE.md`** — documented the six automated PR checks, the
generated-page source map, the audit script, and the three skills.
Removed the pointer to a `changelog-creator` skill that doesn't exist in
this repo.

## Anti-rot pass

Swept all three skills for dated claims. Counts ("three of the last
fourteen PRs") and current-state assertions ("link-rot reports skipping
on most PRs") became durable rules. The link-rot guidance now routes
through `gh pr checks` so it self-heals if Mintlify starts running it
reliably. Past-tense `Precedent:` items were kept — they're what make
the checks concrete.

## Verification

- `python3 -m pytest tests/` — 44 passed (22 pre-existing + 22 new)
- `python3 scripts/audit_navigation.py --check` — exit 0, integrity
clean
- `mint broken-links` — no new broken links
- Both workflows parse; triggers and permissions confirmed

## Follow-ups, not in this PR

- `tutorials/working_with_controls.mdx:24` links to
`/getting_started/service-accounts`, which has never existed — the page
is `/administration/authentication/service_accounts`. Broken on `main`
since #154; `link-rot` reports `skipping`, which is why it went unseen.
- The `mintlify-docs` plugin in `kosli-plugins` still ships
near-duplicate `doc-writer`/`doc-reviewer` agents that say "update
`docs.json` navigation" — the pre-`config/` layout. Needs its own PR
there.
- The reviews twice asked for `python3` in `doc-review.yml`'s
`--allowedTools` to validate JSON payloads and fence balance. Left alone
— `Bash(python3:*)` is a security-surface call worth making
deliberately.
gsavage pushed a commit that referenced this pull request Sep 7, 2026
Reviewed the last 20 non-bot PRs (14 touched docs) against what
`doc-write` and `doc-review` actually ask for, then fixed what the
record showed was wrong. No site content changes — this is all agent
tooling.

## Why

`doc-review` produced **0 Critical, 5 Improvement and ~20 Suggestion**
findings across those 14 PRs. Its genuinely valuable catches were all
cross-file consistency checks the skill never asked for:

- a changelog entry documenting `kosli update attestation-type`, a
command with no reference page (#371)
- `template-reference/flow_template.md` out of sync with the schema the
same PR regenerated (#296)
- the one file an approvals-removal sweep missed,
`understand_kosli/how_kosli_works.md:22` (#345)

Its weakest findings were prose polish, some already fixed at branch
head. Meanwhile its written checklist was dominated by things that
always pass or are already enforced by `vale-spellcheck`.

Two structural gaps the PR record made obvious:

- **Placement was never questioned.** In #305 a pure reference page was
authored into `integrations/`, and a human reviewer had to ask for the
move — commit `9e7a121 docs: move GitHub Action reference into the
Reference section`. That question should come from the review.
- **Generated pages were handled inconsistently.** #375 got it right and
said so. #374 wrote *"the durable fix is in the `kosli-dev/cli`
generator — a hand-edit here is overwritten by the next release"* and
then emitted a `Fix this` link scoped to `repo=kosli-dev/docs` telling
an agent to edit the generated file anyway, plus 4 inline comments on
regenerated files.

## What changed

**`doc-review`** — promoted the three accidental wins to named checks,
each carrying its precedent. Added placement, redirects and anchor
stability. Added an explicit *what not to report* bar and an 8-finding
cap. Stopped hand-checking spelling. Dropped the "what looks good"
recital that the sticky comment re-renders on every push.

**Generated pages** — split into three categories rather than one
blanket ban: deterministically regenerated (edit is deleted),
agent-synced (edit survives but drifts), and hand-authored despite the
directory (`client_reference/overview.md`, `output_and_verbosity.md`).
Includes the filename→source mapping, verified upstream:
`kosli_attest_sonar.md` ← `cmd/kosli/attestSonar.go`.

Also records that **`^` is the CLI's backtick convention** in Go long
descriptions, substituted by `kosli docs`. That makes the `^jq^` defect
#374 found a generator escaping bug in the Accordion-title path, not a
typo in the Go string — so a reviewer can point at the right fix. Worth
filing upstream separately.

**`doc-write`** — added a Diátaxis→tab placement table so #305 can't
recur, plus redirects, anchor stability, and the generated-paths table.

**New `doc-structure` skill + monthly workflow** — audits navigation
shape and changelog coverage, which per-PR review structurally cannot
see, and files issues. Read-only against docs; issues are its only
write. Capped at 8 issues, deduplicating against open issues first — its
headline check reproduces the `/getting_started/attestations` summary
gap, which is already open as #364.

**New `scripts/audit_navigation.py` + 22 tests** — the audit's
mechanical checks, extracted from an inline heredoc. Three payoffs:

1. `pr-quality.yml` already runs `pytest tests/`, so **CLAUDE.md core
rule 2 is now enforced deterministically** — a page file with no
`navigation` entry fails the build. No new job needed.
2. `doc-structure.yml` can allow `Bash(python3
scripts/audit_navigation.py:*)` instead of `Bash(python3:*)`, which was
arbitrary code execution.
3. Determinism. The inline version had already shipped a bug: `sed
's|\.mdx\?$||'` is a no-op on BSD sed, so every page looked orphaned on
macOS. That case is now a regression test.

Integrity findings (orphans, dangling entries) are separated from shape
findings (single-child groups, deep nesting, Title Case labels,
oversized groups, inconsistent icons). Only integrity can fail a build —
the script cannot tell a group that should be merged from one
deliberately kept separate.

`Reference ▸ CLI Reference` is exempt from shape checks:
`update-cli-nav.py` generates it from the CLI's command tree, so a
single-child `kosli allow` group is upstream truth. Without that
exemption the audit reported 54 findings, 21 of them proposing to
reshape generated navigation — the same mistake being fixed in
`doc-review`. It now reports 33, all hand-maintained.

**New `docs-restructure` issue template** — Markdown, not a YAML form:
`gh issue create --body` doesn't apply templates mechanically and YAML
forms can't be filled from the CLI, so a form would help humans and do
nothing for the job. Its URL-impact section encodes the distinction that
decides whether a restructure is safe — a group rename changes no URLs,
a moved page file needs a `config/redirects.json` entry. `config.yml`
keeps blank issues enabled.

**`CLAUDE.md`** — documented the six automated PR checks, the
generated-page source map, the audit script, and the three skills.
Removed the pointer to a `changelog-creator` skill that doesn't exist in
this repo.

## Anti-rot pass

Swept all three skills for dated claims. Counts ("three of the last
fourteen PRs") and current-state assertions ("link-rot reports skipping
on most PRs") became durable rules. The link-rot guidance now routes
through `gh pr checks` so it self-heals if Mintlify starts running it
reliably. Past-tense `Precedent:` items were kept — they're what make
the checks concrete.

## Verification

- `python3 -m pytest tests/` — 44 passed (22 pre-existing + 22 new)
- `python3 scripts/audit_navigation.py --check` — exit 0, integrity
clean
- `mint broken-links` — no new broken links
- Both workflows parse; triggers and permissions confirmed

## Follow-ups, not in this PR

- `tutorials/working_with_controls.mdx:24` links to
`/getting_started/service-accounts`, which has never existed — the page
is `/administration/authentication/service_accounts`. Broken on `main`
since #154; `link-rot` reports `skipping`, which is why it went unseen.
- The `mintlify-docs` plugin in `kosli-plugins` still ships
near-duplicate `doc-writer`/`doc-reviewer` agents that say "update
`docs.json` navigation" — the pre-`config/` layout. Needs its own PR
there.
- The reviews twice asked for `python3` in `doc-review.yml`'s
`--allowedTools` to validate JSON payloads and fence balance. Left alone
— `Bash(python3:*)` is a security-surface call worth making
deliberately.

This branch was successfully deployed

1 active deployment
staging — ef14ed26 Deployed Aug 29, 2026 by mintlify[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant