Gå til hovedinnhold

Ship gates & CI

Goal: treat content quality like any other test. A ship gate is the project's release bar — coverage thresholds over the translation lifecycle plus the bound quality gates (brand, terminology, QA). kapi check --ship evaluates all of it in one shot and exits non-zero when a gate is unmet, so a regression never merges. Ordinary builds never fail on target drift — a language that is behind is pending work; --ship is the explicit, opt-in enforcement point. The model is the kapi loop; this guide is the task. Needs a committed .kapi project.

The project view shows each locale's standing against its gate continuously — the same derivation check --ship enforces:

  1. Read the gate cells. Each locale row shows coverage per lifecycle rung (translated, reviewed, signed-off) and whether the scope clears its gate.
  2. Close the gap. Bring up to date produces what a machine can; a gate cell opens the Review queue for what needs a person.
  3. Ship when green. When every scope clears its gate, the CI check below passes by construction.
ScreenshotPending capture

The coverage grid with per-locale ship-gate cells — one scope green, one pending with the unmet threshold named.

View scene script ↗

File checks vs project gates

Two bars, one command. A bare kapi check <files> gates the files you name — a checkset over their content, findings and a severity gate, no project needed: the test runner. kapi check --ship gates the project — coverage against the recipe's ship_gates: plus the bound quality gates, across every target language: the release bar. Use the first while content is being written, the second before it ships; see Check content like tests for the file-level half.

Next