kaloko 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/qawalk.mjs CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  import { main } from '../src/cli.mjs'
3
3
 
4
- await main(process.argv.slice(2))
4
+ // the command's name before the rename to Kaloko: it still works and says so once on stderr
5
+ await main(process.argv.slice(2), { bin: 'qawalk' })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kaloko",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "Your AI agents build; Kaloko walks every screen, puts it on one canvas and records who approved what.",
5
5
  "keywords": [
6
6
  "qa",
@@ -57,6 +57,11 @@
57
57
  "run": { "type": ["string", "null"] },
58
58
  "version": { "type": ["string", "null"], "description": "The release the picture belongs to (null: the newest accepted)." },
59
59
  "image": { "type": ["string", "null"] },
60
+ "video": {
61
+ "type": "object",
62
+ "description": "Present when the accepted run has a recording of the step and the reference does not say media=image: links like image, and the length.",
63
+ "properties": { "mp4": { "type": ["string", "null"] }, "webm": { "type": ["string", "null"] }, "duration_ms": { "type": ["number", "null"] } }
64
+ },
60
65
  "canvas": { "type": ["string", "null"] }
61
66
  }
62
67
  }
@@ -226,7 +226,8 @@
226
226
  "serve": { "type": "string", "description": "kind: design. Folder with one sub-folder per step (<step>/index.html, optional <step>/<locale>/index.html) and shared files in _shared/; relative to the config." },
227
227
  "fixtures": { "type": "string", "description": "kind: design. Folder of JSON fixtures live steps may fetch instead of real APIs; relative to the config." },
228
228
  "origins": { "type": "array", "maxItems": 20, "items": { "type": "string", "pattern": "^https://(\\*\\.)?[A-Za-z0-9.-]+(:[0-9]{1,5})?/?$" }, "description": "kind: design. Origins the design loads fonts, stylesheets and images from (https://fonts.googleapis.com, https://*.cdn.example.com). The organization allows them in Settings → Security; kaloko design lint warns about one it does not allow. Scripts never load from them." },
229
- "tokens_mode": { "type": "string", "description": "kind: design. Token mode (e.g. light, dark) steps are rendered in; default: the token set's first mode." },
229
+ "default_token_mode": { "type": "string", "description": "kind: design. Token mode (e.g. light, dark) steps are rendered in and the checks use; default: the token set's first mode. tokens_mode is its older name." },
230
+ "tokens_mode": { "type": "string", "description": "kind: design. The older name of default_token_mode; still read." },
230
231
  "token_modes": { "oneOf": [{ "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,39}$" } }, { "const": false }], "description": "kind: design. Token modes of the token set to render every step in, one capture per mode (keys <viewport>.mode-<name>); tokens_mode is the default and has the plain key. Not set: every mode of the set when it has two or more, except a set of only light and dark (left to color_schemes). false: only tokens_mode." },
231
232
  "html_view": { "type": "boolean", "default": false, "description": "Experimental (#42): keep a static HTML view of every capture (assets rehosted, scripts removed, secrets scrubbed). Refused on production unless the environment is readonly." },
232
233
  "base_url": {
@@ -83,7 +83,7 @@ Draft and edit the Unreleased section of the changelog (`kaloko changelog draft
83
83
  config on Kaloko (`kaloko products sync`: it records no release) and list them
84
84
  (`kaloko products list`). Write, translate and fix
85
85
  guides in the docs folder, run `kaloko docs check`, and export them for a docs
86
- site (`kaloko export --format …`) into a local folder.
86
+ site (`kaloko export docs --format …`) into a local folder.
87
87
 
88
88
  ## Ask first
89
89
 
@@ -24,8 +24,9 @@ the deployment):
24
24
  2. `kaloko ci preview-url --wait 600 --github-env` finds the preview URL, the
25
25
  pull request and its base branch and puts them into `KALOKO_PREVIEW_URL`,
26
26
  `KALOKO_PR`, `KALOKO_BASE`;
27
- 3. for each scenario: `kaloko affected --check` skips it when the change does
28
- not reach any of its steps, otherwise `start --env preview`,
27
+ 3. for each scenario: `kaloko affected --fail-if-none` skips it when the change
28
+ does not reach any of its steps (workflows written earlier say `--check`,
29
+ which works the same and prints a note), otherwise `start --env preview`,
29
30
  `walk --ephemeral --affected` and `share --pr` (one comment per scenario,
30
31
  updated on later pushes).
31
32
 
@@ -52,9 +53,10 @@ include `preview`, or `start` refuses them; the command says which.
52
53
  `deployment_status` event; `VERCEL_BRANCH_URL`/`VERCEL_URL`,
53
54
  `DEPLOY_PRIME_URL`/`DEPLOY_URL` (Netlify), `CF_PAGES_URL`,
54
55
  `CI_ENVIRONMENT_URL` (GitLab), `RENDER_EXTERNAL_URL`; then the commit's GitHub
55
- deployments, skipping production, polled every 10 s up to `--wait` seconds.
56
- Only the URL goes to stdout, so `export KALOKO_PREVIEW_URL="$(kaloko ci preview-url)"`
57
- works in any CI.
56
+ deployments, skipping production, polled every 10 s up to `--wait` (seconds,
57
+ or with a unit: `--wait 10m`). Only the URL goes to stdout, so
58
+ `export KALOKO_PREVIEW_URL="$(kaloko ci preview-url)"` works in any CI;
59
+ `--json` prints the URL, its source and the pull request as one JSON object.
58
60
 
59
61
  ## Affected steps in CI
60
62
 
@@ -67,11 +69,36 @@ maps routes as well as a laptop with earlier runs. See
67
69
 
68
70
  ## Exit codes
69
71
 
70
- Every command exits with `0` when it is done, `1` when checks found problems
71
- or the command failed, and `2` on a usage error such as an unknown command or
72
- option or a missing argument. A CI step can tell a broken workflow line (2)
73
- from a failing check (1). `kaloko help <command>` or `kaloko <command> --help`
74
- shows the options of one command.
72
+ | Code | Meaning |
73
+ |---|---|
74
+ | `0` | done |
75
+ | `1` | checks found problems, or the command failed (an HTTP error from the service other than 401 too) |
76
+ | `2` | usage error: unknown command or option, missing argument |
77
+ | `3` | the Kaloko service cannot be reached (no connection: offline, DNS, refused, cut off); retrying may help |
78
+ | `4` | no token, or an invalid, expired or revoked one: `kaloko login`, or a new `KALOKO_TOKEN` secret |
79
+
80
+ A CI step can tell a broken workflow line (2) or a missing secret (4) from a
81
+ failing check (1), and retry only on 3. Checks keep 1: `docs check`, `drift`,
82
+ `design lint`, `affected --fail-if-none`, `validate`. `kaloko help <command>`
83
+ or `kaloko <command> --help` shows the options of one command.
84
+
85
+ ## Machine output
86
+
87
+ `--json` on a command that prints data makes stdout one JSON document and
88
+ nothing else: progress, notes and warnings go to stderr. An error is one line
89
+ on stderr, `{"error":{"message":"…","code":"…","next":"…"}}`, with the exit
90
+ code above (`code` is `usage`, `unreachable`, `no_token`, `unauthorized`, a
91
+ service reason such as `plan`, or `failed`). Commands with `--json` include
92
+ `start`, `status`, `evaluate`, `build`, `share` (run id and canvas URL),
93
+ `validate`, `scenarios`, `runs`, `review`, `feedback`, `auth list`,
94
+ `browser status`, `ci preview-url` and `affected`.
95
+
96
+ ```bash
97
+ url=$(npx kaloko share --json | jq -r .url)
98
+ ```
99
+
100
+ `kaloko runs --all` follows the service's pages to the last run; `--limit N`
101
+ stops after N and prints the cursor to go on with (`--cursor`) on stderr.
75
102
 
76
103
  ## Done means
77
104
 
@@ -197,7 +197,8 @@ e-mail works too). Use it when a step needs a decision from a specific person
197
197
  - Admins may name **required approvers** per scenario (Settings). Such a
198
198
  run stays `pending` until every one of them approved; `kaloko feedback`
199
199
  prints `awaiting approval from: …`, so do not treat a single approval as
200
- acceptance there.
200
+ acceptance there. Those approvers are asked on their own (mail, inbox,
201
+ Slack or Teams, one reminder); do not ping them again.
201
202
  - An accepted run has a **signed acceptance record** (Business and up): the
202
203
  run, scenario, commit and environment, who approved what and when (people
203
204
  apart from tokens and agents, approvals carried over unchanged steps with
@@ -278,6 +279,12 @@ Everything above is available over the API with an organization token:
278
279
  `{"read": "all"}` or `{"read": [ids]}`
279
280
  - `GET /api/v1/orgs/<org>/runs[?project=&scenario=&kind=&verdict=&author=&environment=&branch=&q=][&latest=1]`
280
281
  (`latest=1`: the newest run per scenario with `older`), `GET /api/v1/orgs/<org>/runs/<id>`
282
+ - Paging: runs, `comments`, `notifications`, `tokens` and `audit` take
283
+ `?limit=` and `?cursor=`. The body keeps its shape (an array stays an
284
+ array); the next page is named in the `X-Next-Cursor` header and in
285
+ `Link: <…?cursor=…>; rel="next"`, and object answers (`notifications`,
286
+ `audit`) also carry `next`. No header, no next page. `projects` and
287
+ `products` answer the complete list.
281
288
  - Clean-up: `DELETE …/runs/<id>` (trash), `POST …/runs/<id>/restore`,
282
289
  `POST …/runs/<id>/keep` with `{"keep": true|false}`,
283
290
  `POST /api/v1/orgs/<org>/runs/prune` with `{ scenario?, project?, environment?, keep_latest: 3, older_than_days?, dry_run: true }`
@@ -83,7 +83,7 @@ design/credit/late/index.html
83
83
  - `kaloko sync` sends the variants' captures with the step; the published version shows the stack index with every
84
84
  variant and its verdict, and each variant opens live in the lightbox.
85
85
  - `kaloko design lint` reports a variant folder without its `index.html` as an error.
86
- - `kaloko export --live` and `export --design` write the variant folders; the design export adds
86
+ - `kaloko export live` and `export design` write the variant folders; the design export adds
87
87
  `screenshots/<step>/<variant>/<locale>/<viewport>.webp`.
88
88
  - Not for steps whose variants are different screens of a flow: those stay separate steps.
89
89
 
@@ -126,7 +126,7 @@ and `_` works). Draw each one so it can be reviewed and built:
126
126
  Token modes: when the token set has two or more modes (resolver contexts or mode groups), every step renders in each
127
127
  mode. The walk sets the mode's tokens as custom properties on `:root` after the page's own styles and
128
128
  `data-kaloko-mode="<mode>"` on `<html>`; a page that switches themes by class can read the attribute. Captures are
129
- keyed `<viewport>.mode-<name>`; the environment's `tokens_mode` (else the first mode) is the default with the plain
129
+ keyed `<viewport>.mode-<name>`; the environment's `default_token_mode` (older name `tokens_mode`; else the first mode) is the default with the plain
130
130
  key, and the canvas switches modes like colour schemes. A set with only `light`/`dark` modes follows the colour
131
131
  scheme instead (`color_schemes: [light, dark]`), unless `token_modes` names them. `token_modes: [brand-a, brand-b]` (environment, scenario or `kaloko start
132
132
  --token-modes`) picks modes; `false` turns it off. Live view shows the default mode; other modes are screenshots.
@@ -279,7 +279,7 @@ link the screens you reuse in your notes.
279
279
 
280
280
  Development builds from the design reference:
281
281
 
282
- - `kaloko export --live [--version n] --out design/` writes the live files into a folder.
282
+ - `kaloko export live [--version n] --out design/` writes the live files into a folder.
283
283
  - MCP `get_step` (scenario, step, `ref: design`) returns the file list, a signed entry URL, the token set, the
284
284
  page structure and open comments; `list_step_changes` names the steps that changed since the last reference.
285
285
  - MCP `get_step_spec` (or `kaloko spec <step>`) returns what to build, element by element, with tokens; see
@@ -321,10 +321,11 @@ Everything exports in open formats, readable without Kaloko:
321
321
 
322
322
  | What | Command | Contents |
323
323
  |---|---|---|
324
- | a design version (or `--draft`, default the design reference) | `kaloko export --design [--version n] --out dir/` or `--out v4.zip` | the live files in the folder layout, `tokens.json` (DTCG), `scenario.yml` (`qawalk.scenario.v1`), `screenshots/<step>/<locale>/<viewport>.webp`, `kaloko.json` (what is where) and `index.html`, a start page that opens from disk |
325
- | the live files only (the handoff) | `kaloko export --live [--version n] --out design/` | the design folder as the designer wrote it |
326
- | a shared run | `kaloko export --run <id>` | `run.json`, every capture, the live HTML of design steps (per revision and merged in `live/site/`), comments and verdicts, and `index.html`: the canvas, offline from `file://` |
324
+ | a design version (or `--draft`, default the design reference) | `kaloko export design [--version n] --out dir/` or `--out v4.zip` | the live files in the folder layout, `tokens.json` (DTCG), `scenario.yml` (`qawalk.scenario.v1`), `screenshots/<step>/<locale>/<viewport>.webp`, `kaloko.json` (what is where) and `index.html`, a start page that opens from disk |
325
+ | the live files only (the handoff) | `kaloko export live [--version n] --out design/` | the design folder as the designer wrote it |
326
+ | a shared run | `kaloko export run --run <id>` | `run.json`, every capture, the live HTML of design steps (per revision and merged in `live/site/`), comments and verdicts, and `index.html`: the canvas, offline from `file://` |
327
327
 
328
+ The flag forms from before (`kaloko export --design`, `--live`, `--run <id>`) still work.
328
329
  When someone asks for the design or the evidence outside Kaloko, export; do not screenshot the canvas.
329
330
 
330
331
  ## Tokens
@@ -335,7 +336,7 @@ When someone asks for the design or the evidence outside Kaloko, export; do not
335
336
  `{ "$ref": "#/json/pointer" }`, `$extends`, `$root` and `$deprecated`. New sets: prefer the object values.
336
337
  - Modes (light, dark): a DTCG resolver `design/tokens.resolver.json` (sets plus a `theme` modifier whose
337
338
  contexts point at files) wins over `tokens.json`; `push` inlines its files. Older sets with top-level
338
- `light`/`dark` groups still work. `tokens_mode` in the environment picks the mode the checks use.
339
+ `light`/`dark` groups still work. `default_token_mode` (or `tokens_mode`) in the environment picks the mode the checks use.
339
340
  - `kaloko tokens validate` reports names with `{`, `}` or `.`, references that point nowhere and values that
340
341
  cannot be read; `push` refuses a set with problems, so does the service.
341
342
  - `kaloko tokens push` stores the set as the project's next token set version; `pull` gets it.
@@ -377,7 +378,7 @@ the step, then sync.
377
378
 
378
379
  Experimental, Business plan. `html_view: true` on an app environment keeps a static, script-free copy of each
379
380
  captured page (secrets and hidden values removed) that opens in the canvas like a live step, so the inspector
380
- works on the real product. It is refused on production pages behind a sign-in. `kaloko export --live --views
381
+ works on the real product. It is refused on production pages behind a sign-in. `kaloko export live --views
381
382
  --run <id> --out design/` turns those copies into design steps: a redesign that starts from the product.
382
383
 
383
384
  ## Bring your own design skill
@@ -13,13 +13,19 @@ A picture in Markdown names a step instead of a PNG file:
13
13
  ![Payment](kaloko:checkout/payment?version=2.4.0) the capture of release 2.4.0
14
14
  ![Payment](kaloko:checkout/payment?version=prev) the release before the one this entry belongs to
15
15
  ![Payment](kaloko:checkout/payment?locale=cs&viewport=mobile&state=dark)
16
+ ![Payment](kaloko:checkout/payment?media=video) the step's recording plays on the picture
16
17
  ![Payment](kaloko:payment) a step of the product's default_scenario
17
18
  ```
18
19
 
19
20
  `<scenario>` is the scenario id, `<step>` the node id. Without `locale` and `viewport` the reader's language and
20
21
  the product's default screen are used. `state` picks a capture variant (`dark`, `webkit`, `reduce`: the values in
21
- capture keys like `mobile.webkit.dark`). Check a reference with MCP `resolve_step_image` or
22
- `GET /api/v1/orgs/<org>/steps/resolve?ref=…`: it answers the signed image URL, the run and how the version was found
22
+ capture keys like `mobile.webkit.dark`). When the accepted run has a recording of the step (`kaloko walk --record`),
23
+ docs, changelog and training mode show the picture with a play button and play the recording on a click; exports
24
+ carry it, the PDF and the "What's new" mail show the picture. `media=video` says the step needs its recording
25
+ (`kaloko docs check` warns under `no_recording` when the run has none: walk the step with `--record` and have the
26
+ run accepted); `media=image` never plays it. Use `media=video` for interactions a picture cannot show (drag and drop,
27
+ a dialog, a language switch), not for every step. Check a reference with MCP `resolve_step_image` or
28
+ `GET /api/v1/orgs/<org>/steps/resolve?ref=…`: it answers the signed image URL (and `video` with `mp4`, `webm` and `duration_ms` when it plays), the run and how the version was found
23
29
  (`release`, `app_version`, `reference_env`, `accepted`; `exact: false` means a fallback).
24
30
 
25
31
  Never invent a step id or a version. Use ids from the scenario files and versions from `CHANGELOG.md` or git tags.
@@ -176,7 +182,7 @@ stale sections and training steps).
176
182
 
177
183
  ### Exports
178
184
 
179
- `kaloko export --format md|docusaurus|vitepress|mkdocs|html|pdf|json [--product p] [--version v] [--lang cs]`
185
+ `kaloko export docs --format md|docusaurus|vitepress|mkdocs|html|pdf|json [--product p] [--version v] [--lang cs]`
180
186
  writes the docs and the changelog with the pictures as files: Markdown with an `assets/` folder (any static site),
181
187
  a Docusaurus, VitePress or MkDocs folder with sidebars and front matter, offline HTML, a PDF (printed by the
182
188
  browser), or the changelog as JSON (`schemas/changelog.v1.json`). `--local` exports the files in the repository
@@ -17,7 +17,7 @@ rebuilt from the newest accepted run instead of screenshotting by hand.
17
17
 
18
18
  ## Stable URLs
19
19
 
20
- With an organization token (`Authorization: Bearer qwk_…`, a read-only
20
+ With an organization token (`Authorization: Bearer kal_…`, a read-only
21
21
  viewer token is enough):
22
22
 
23
23
  ```
@@ -58,7 +58,7 @@ seconds, and do the work asynchronously. Also over the API:
58
58
  ## Export into a folder
59
59
 
60
60
  ```bash
61
- npx kaloko export --scenario checkout --accepted --out docs/assets/checkout
61
+ npx kaloko export steps --scenario checkout --accepted --out docs/assets/checkout
62
62
  ```
63
63
 
64
64
  writes `steps/<step>/<locale>/<viewport>.<ext>` and `.html` plus
@@ -33,10 +33,17 @@ Ask before filing issues in bulk; one issue per real problem, not per criterion.
33
33
  ## Channels per project
34
34
 
35
35
  Slack and Teams channels are chosen per project by an admin, with the events
36
- each wants (new run, returned, accepted, comment, mention, release recorded) and
37
- quiet hours. Nothing to do from the CLI: sharing, returning and recording a
38
- release reach the right channels. Restricted projects reach only channels that
39
- name them.
36
+ each wants (new run, returned, accepted, comment, mention, release recorded,
37
+ waiting for approval) and quiet hours. Nothing to do from the CLI: sharing,
38
+ returning and recording a release reach the right channels. Restricted projects
39
+ reach only channels that name them.
40
+
41
+ Required approvers are asked by name: a run that waits for them sends each one a
42
+ Slack direct message (when their e-mail is in the workspace) with a link into
43
+ review mode, names them in channels that take "waiting for approval" (the Teams
44
+ route), and reminds them once after 24 hours by default. Do not message
45
+ approvers yourself after sharing; tell the person the run is waiting and give
46
+ the review link.
40
47
 
41
48
  ## Hosted runs
42
49
 
@@ -49,8 +56,15 @@ kaloko schedule add --scenario qa/flows/account.yml --env staging --every week -
49
56
  kaloko schedule list # next and last run, pages used this month
50
57
  kaloko schedule run <id> # starts within 15 minutes
51
58
  kaloko schedule pause|resume|remove <id>
59
+ kaloko schedule hook <id> # URL + secret that start the run after a deploy (secret shown once)
52
60
  ```
53
61
 
62
+ - Run after a deploy: `kaloko schedule hook <id>` prints a trigger URL and a
63
+ secret. A deploy (Vercel through a `deployment_status` workflow, Netlify's
64
+ outgoing webhook with the secret as JWS token) or any CI job calls
65
+ `curl -X POST <url> -H "Authorization: Bearer <secret>"`. Put the secret in the
66
+ CI or hosting secrets, never in a file you commit, and do not echo it into logs.
67
+
54
68
  - Works for: public pages, pages behind HTTP Basic (the environment's
55
69
  `access.basic` variables are sent once and stored encrypted), and signed-in
56
70
  pages through a session saved with `kaloko auth save` (`--account`, cookies only).
@@ -2,7 +2,7 @@
2
2
 
3
3
  `https://kaloko.app/mcp` speaks MCP over Streamable HTTP (JSON-RPC 2.0,
4
4
  POST only, one message per request). Authenticate with an organization API
5
- token as `Authorization: Bearer qwk_…`. The server is part of the Team plan
5
+ token as `Authorization: Bearer kal_…`. The server is part of the Team plan
6
6
  and up. A read-only token is enough to read; tools that write need a token
7
7
  with that scope, as noted below. Nothing binary crosses MCP: summaries carry the URLs of
8
8
  screenshots and files, which the same token can fetch over HTTPS.
@@ -21,12 +21,16 @@ file.
21
21
 
22
22
  ## Tools
23
23
 
24
+ List tools (`list_runs`, `list_notifications`, `list_comments`) answer one page: when more match than `limit`, the
25
+ answer's `next` holds a cursor (also as a second text block). Call the tool again with `cursor: <next>` until `next`
26
+ is null. Projects and products come complete, without pages.
27
+
24
28
  | Tool | Use it for |
25
29
  |---|---|
26
- | `list_runs` | published runs, newest first; filters `scenario`, `project`, `verdict`, `author`, `environment`, `branch`, `limit` |
30
+ | `list_runs` | published runs, newest first; filters `scenario`, `project`, `verdict`, `author`, `environment`, `branch`, `limit`; `cursor` for the next page |
27
31
  | `get_run_summary` | one run: statuses per step and locale, criteria that need attention with evidence (semantic ones with score and the evaluator's one-sentence `reason` per locale and viewport), regions ignored in pixel diffs and regions seen moving (`ignored_regions`, `unstable_regions`), screenshot URLs, verdict, baseline, canvas URL, open feedback |
28
32
  | `get_feedback` | run verdict with note, approved steps, unresolved rejections and comments, failed manual criteria (`run_id`, or `scenario` for its latest run) |
29
- | `list_notifications` | the token owner's inbox (`unread_only`, `limit`) |
33
+ | `list_notifications` | the token owner's inbox (`unread_only`, `limit`, `cursor`) |
30
34
  | `list_projects` | projects of the organization with counts; the slug is the `project` filter of `list_runs` and the value for `project:` in a scenario |
31
35
  | `get_criteria_verdicts` | reviewer verdicts on manual or overridden criteria of a run |
32
36
  | `get_stack_items` | the pages of a stack step (`run_id`, `step`; filters `status`, `criterion`, text): path, URL, title, status and failing criteria with evidence, screenshot URLs |
@@ -38,7 +42,7 @@ file.
38
42
  | `list_products` | the products the caller reads: name, modules, the projects it maps that the caller sees, the newest release, published docs (versions, languages), who reads it (and the public link), whether the caller manages it, links to its page, changelog and docs |
39
43
  | `get_changelog` | the visual changelog of a product (`product`, `version`, `resolve: true` for the pictures, `limit`): releases newest first with the entry as written and its groups; see [docs.md](docs.md) |
40
44
  | `draft_changelog_entry` | what accepted runs since the last release (or `since`) show differently, as a Keep a Changelog draft with before/after step references (`product`, `since`) |
41
- | `resolve_step_image` | one step reference (`ref` = `kaloko:<scenario>/<step>?…`, `product`, `version`, `locale`, `viewport`) as a signed image URL with its run, how the version was found and canvas links |
45
+ | `resolve_step_image` | one step reference (`ref` = `kaloko:<scenario>/<step>?…`, `product`, `version`, `locale`, `viewport`) as a signed image URL with its run, how the version was found and canvas links; `video` (mp4, webm, duration_ms) when the step's recording plays (`media=video` / `media=image` in the ref) |
42
46
  | `get_docs` | a product's published docs (`product`; without `path` the versions, languages and sidebar; with `path` one page with its Markdown, sections, stale sections and, with `resolve: true`, its pictures) |
43
47
  | `docs_check` | what needs attention in the published docs of a version: broken step references, references without an accepted picture, stale sections, missing or outdated translations, release items without a picture |
44
48
  | `list_step_changes` | documentation layer: steps whose capture or status changed since the previous accepted run or `since` (`scenario`, `since`, `accepted`); see [documentation.md](documentation.md) |
@@ -51,12 +55,13 @@ file.
51
55
 
52
56
  | Tool | Use |
53
57
  |---|---|
54
- | `list_comments` | open threads (or `state: all`) across the organization, filtered by `scenario` or `run_id`, with replies, pins, anchors, drawn regions (`region.px`: CSS pixels of the page in `region.viewport`), attached images with URLs, and who wrote them |
58
+ | `list_comments` | open threads (or `state: all`) across the organization, filtered by `scenario` or `run_id`, with replies, pins, anchors, drawn regions (`region.px`: CSS pixels of the page in `region.viewport`), attached images with URLs, and who wrote them; `limit`, `cursor` |
55
59
  | `add_comment` | comment on a step (`run_id` + `step`), the whole run (`run_id`) or the whole flow (`scenario`); `parent_id` replies; optional `pin` `{ x, y, viewport }` or `shape` (box or arrow in fractions, with `viewport` and `size`) |
56
60
  | `list_ignore_regions` | regions people drew to leave out of pixel diffs, per step, with the `ignore:` entry each becomes (`kaloko stability --pull` writes them) |
57
61
  | `add_ignore_region` | suggest such a region (`run_id`, `step`, `viewport`, `rect` in CSS px); Developer / Tester, scope upload or full |
58
62
  | `get_findings` | experimental Clef triage findings of a run (`run_id`): the kind of problem on each screen or in recording frames, with probability, severity and box, and the answers testers gave. Findings never change a verdict |
59
63
  | `answer_finding` | answers a finding (`run_id`, `node`, `locale`, `viewport`, `finding`, `kind`, `answer`: right, wrong or comment with the `comment_id` from `add_comment`); scope comment |
64
+ | `get_triage_report` | the organization's Clef numbers of the last 90 days (read-only): findings shown and answered, precision and calibration per kind, findings turned into comments, median hours to the first review with and without findings, triage requests per useful finding. Report them as they are; the go/no-go is a person's |
60
65
  | `get_signoff_record` | the signed acceptance record of an accepted run (Business): approvals with provenance, criteria, capture hashes, signature |
61
66
  | `resolve_comment` | close a thread with a `note` that says what changed (it becomes the last reply) |
62
67
  | `reopen_comment`, `edit_comment`, `delete_comment` | reopen; edit or delete your own comment |
@@ -5,7 +5,7 @@ Design steps are live pages. The same files have to work in three places:
5
5
  - **on the live origin** of the canvas (`<revision>.kaloko-usercontent.com`): a sandboxed frame with an opaque origin and
6
6
  `Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self'; frame-src 'none';
7
7
  worker-src 'none'; form-action 'none'` (no popups, no modals, no service workers);
8
- - **from disk** (`file://`): the local preview, `kaloko export --design`, and anyone who unzips an export;
8
+ - **from disk** (`file://`): the local preview, `kaloko export design`, and anyone who unzips an export;
9
9
  - **in another tool**: the export is the handoff and the way out of Kaloko.
10
10
 
11
11
  `kaloko design lint` checks a design folder against the rules below; `kaloko sync` runs it first and stops on errors