Skip to content

docs: add working with controls tutorial#154

Merged
pbeckham merged 25 commits into
mainfrom
claude/friendly-wilson
Jun 17, 2026
Merged

docs: add working with controls tutorial#154
pbeckham merged 25 commits into
mainfrom
claude/friendly-wilson

Conversation

@pbeckham

@pbeckham pbeckham commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Controls is now a real feature in Kosli, in beta.
This tutorial originally documented a proposed feature ahead of development. It has since been updated to match the shipped implementation in kosli-dev/server and uses real screenshots from staging. The feature is rolled out per organization while in beta — the UI, CLI flags, and policy YAML schema may still change.

Summary

  • Adds tutorials/working_with_controls.mdx — a tutorial covering how to define controls in Kosli, record decisions against them with kosli attest decision, require controls in environment policies via for_control, enforce them with kosli assert artifact --environment, and review a control's decisions and version history.
  • Updates config/navigation.json to include the new page under a new "Controls" group in the Tutorials section.

Aligned with the shipped implementation

  • Controls are created/edited via the app UI and the controls API (POST /api/v2/controls/{org}) — there is no kosli create control/kosli list controls CLI.
  • Environment policies require controls via attestations: rules with type: decision and for_control: (not a top-level controls: key).
  • Control detail view documents the real Decisions and Versions tabs (no Coverage/Deployments views).
  • Tags are added from a control's detail page after creation; only org admins can create/edit controls.
  • kosli evaluate examples use --no-assert (it asserts on deny by default); --compliant is shown as a boolean flag (--compliant=true).
  • Real staging screenshots replace the original proposal mockups.

Closes kosli-dev/server#5355

@pbeckham pbeckham requested a review from a team as a code owner April 16, 2026 09:58
@mintlify

mintlify Bot commented Apr 16, 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 Apr 16, 2026, 9:58 AM

Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread images/tutorials/controls-list.png
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread images/tutorials/controls-compliance-coverage.png Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
@mbevc1

mbevc1 commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

Was this released yet? I cannot see this in Kosli 🤔

@pbeckham

Copy link
Copy Markdown
Contributor Author

Was this released yet? I cannot see this in Kosli 🤔

No this is a proposed feature. We are making this documentation ahead of development to facilitate discussions and get early feedback before we build it.

@mbevc1

mbevc1 commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

Okay, I assume we're not releasing this to docs yet then? I think it might confuse our customers.

Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread images/tutorials/controls-compliance-coverage.png Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
Comment thread tutorials/working_with_controls.mdx Outdated
pbeckham and others added 4 commits April 23, 2026 16:09
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…policy/v1

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…identifier

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
pbeckham and others added 2 commits June 15, 2026 14:09
Update the working-with-controls tutorial to match what is actually
built in the server and cli repos, replacing proposal-era guesses:

- Mark the feature as beta (available) rather than in development.
- Remove the non-existent `kosli create control` / `kosli list controls`
  CLI commands; document the New control form (identifier, name,
  description, links, tags) and the controls API instead.
- Drop the unbuilt Active/Stale/No-decisions status table.
- Fix `--compliant=true` (boolean flag) and add `--no-assert` to the
  `kosli evaluate` examples, which assert on deny by default.
- Replace the imaginary top-level `controls:` policy key with the real
  `attestations:` rules using `type: decision` and `for_control:`.
- Replace Decisions/Deployments/Coverage tabs with the real
  Decisions/Versions tabs and correct the decisions table columns.
- Fix broken /reference/controls link.
- Swap proposal mockups for real staging screenshots; add a decision
  detail screenshot; remove the now-orphaned coverage/deployments images.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Correct details surfaced by the controls project handovers, and switch
to US spelling throughout:

- Tags are not a create-time field — they are added later from the
  control detail page and do not version the control; note admin-only
  writes.
- Clarify the validation asymmetry: recording a decision does not
  require the control to exist, but a policy referencing an unknown
  control identifier is rejected.
- Note that multiple decisions can be recorded for a control on a trail
  and the most recent is used for enforcement.
- Match the decision detail description to the shipped UI: evaluation
  result and params live in user-data; the Rego policy is the attached
  evidence file.
- State that the feature is rolled out per organization (beta).
- organisation -> organization, judgement -> judgment.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@claude

claude Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Claude finished @pbeckham's task in 2m 45s —— View job


Review: docs: add working with controls tutorial

  • Read CLAUDE.md and doc-review skill
  • Read changed files (tutorial, navigation config, images)
  • Check navigation.json for new page entry
  • Review content quality, links, and conventions
  • Post review findings

Summary

The tutorial is well-structured and thorough after its many rounds of review. It covers the full controls lifecycle (create → decide → assert → review) with clear CLI examples, a useful Mermaid sequence diagram, and real staging screenshots. No critical issues found.

Findings

Critical

None.

Compliance checks (all pass)

  • Navigation: tutorials/working_with_controls is correctly added to config/navigation.json under a "Controls" group
  • Frontmatter: Title and description present
  • Links: All 9 internal links resolve to existing files — no broken links
  • No relative links: All links use root-relative paths
  • Images: All 3 screenshots exist and render correctly
  • Writing style: Active voice, imperative mood, American spelling, correct Kosli terminology ("attest", "audit trail")
  • Heading case: All headings use sentence case

Improvement (2)

  1. --no-assert flag undocumented (working_with_controls.mdx:123-127): The kosli evaluate trail CLI reference doesn't list --no-assert — a reader cross-referencing will find no matching flag. Covered by the beta callout, but worth noting for when reference pages are regenerated. (inline comment)

  2. Schema URL inconsistency (working_with_controls.mdx:216): Uses docs.kosli.com/schemas/policy/v1 while the actual schema file's $id and every other docs page use kosli.mintlify.app/schemas/policy/v1. Already discussed — @pbeckham's decision to treat docs.kosli.com as canonical is sound, but the schema file itself (schemas/policy/v1.json:3) still has "$id": "https://kosli.mintlify.app/schemas/policy/v1". The site-wide migration should include updating that $id.

Suggestion (2)

  1. jq '.allow' shape assumption (working_with_controls.mdx:130): The JSON extraction assumes a top-level allow field from kosli evaluate --output json. The evaluate trails with OPA tutorial shows a different output structure. If the beta evaluate output differs from GA, a brief note on the expected JSON shape would help. (inline comment)

  2. Next-steps links as cards (working_with_controls.mdx:259-264): The closing "From here" section uses a plain bullet list. Other parts of the site use <CardGroup> / <Card> for navigation links — switching would give readers visual targets. Minor polish. (inline comment)

Overall assessment

The tutorial is in good shape for a beta feature. Content is accurate against the shipped implementation, the PDP/PEP separation is clearly explained, and the evidence-attachment workflow with kosli evaluate is a strong practical example. The main gaps are all acknowledged as beta-scope items (missing CLI reference page for attest decision, undocumented --no-assert flag, screenshot/prose identifier mismatch). No changes needed before merge — the items above are for future cleanup.


Comment thread tutorials/working_with_controls.mdx
Comment thread tutorials/working_with_controls.mdx
Comment thread tutorials/working_with_controls.mdx
Comment thread tutorials/working_with_controls.mdx
@pbeckham pbeckham marked this pull request as ready for review June 15, 2026 14:50
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread tutorials/working_with_controls.mdx
Comment thread tutorials/working_with_controls.mdx
Comment thread tutorials/working_with_controls.mdx
Comment thread tutorials/working_with_controls.mdx
Comment thread tutorials/working_with_controls.mdx
Comment thread tutorials/working_with_controls.mdx Outdated
…xist

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@pbeckham pbeckham merged commit 3aeba71 into main Jun 17, 2026
5 of 6 checks passed
@pbeckham pbeckham deleted the claude/friendly-wilson branch June 17, 2026 12:56
Comment on lines +123 to +127
kosli evaluate trail "$TRAIL_NAME" \
--policy supply-chain-policy.rego \
--flow "$FLOW_NAME" \
--no-assert \
--output json > eval-report.json

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 --no-assert flag used here is not listed in the kosli evaluate trail CLI reference — that page documents --attestations, --flow, --output, --params, --policy, and --show-input, but no --no-assert. A reader following this example who checks the reference will find no matching flag.

Since the beta callout at the top already sets expectations for undocumented CLI behavior, this isn't blocking — but worth noting for when the reference pages are regenerated.

--output json > eval-report.json

# Read the allow/deny result from the report
is_compliant=$(jq -r '.allow' eval-report.json)

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: The jq -r '.allow' extraction assumes the --output json format from kosli evaluate trail includes a top-level allow field. The evaluate trails with OPA tutorial shows a different JSON output structure (result, violations). If the beta version of kosli evaluate has a different output shape than the GA version, a brief comment or note clarifying the expected JSON structure would help readers who cross-reference the two tutorials.

Comment on lines +259 to +264
From here you can:

- Learn more about [controls](/understand_kosli/controls)
- Learn more about [environment policies](/getting_started/policies)
- Learn more about [attestations](/getting_started/attestations)
- [Evaluate trails with Rego policies](/tutorials/evaluate_trails_with_opa) to automate decision-making

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 (minor): Other tutorials in this site use <CardGroup> / <Card> components for "next steps" navigation (e.g., the Labs landing page). Replacing this bullet list with cards would give the reader visual targets and be consistent with the rest of the site — though this is polish, not critical.

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.

5 participants