kapi WorksDocs
Format referenceChecks

Checks

Every check Kapi runs on a course, with its severity, the course types it runs for and what it says.

Kapi's checker reads a course, then runs every check on it. Works Studio, Kapi's server and Check a course all run the same code, checker 2.2.0. A course's type adds the checks listed on its page.

Severity

  • Error: it blocks approval until it is fixed.
  • Warning: it does not block approval. The approver sees it.
  • Tip: advice. It does not block approval.

Some checks are stricter in a course Kapi makes from your documents. Each check's page says so.

A finding

The checker reports kapi.works.check/2. Each finding has:

  • code: the check, such as feedback_missing. A code keeps its meaning.
  • severity: error, warning or tip.
  • where: the file, a JSON Pointer to the place in it, and the page, question or text it concerns.
  • message: what is wrong, in words for people.
  • fixes: when Kapi knows the fix, the change to make.
  • docs: the address of the check's page here.

In Works Studio, Let Kapi fix takes the findings it can fix: those to write or change, apart from tips, the choices that are yours and quotes that need your documents.

Every check

CheckSeverityCourse typeWhat Kapi says
file_not_allowedErrorEvery typeThis file isn't a file a package holds. Remove it, or move it where the docs say it goes.
unsafe_pathErrorEvery typeThis path isn't safe. Use lower-case relative paths with no "..", backslashes or hidden parts.
file_typeErrorEvery typeThis file isn't the kind of file its place says. Kapi reads a file's first bytes, not its name.
not_utf8ErrorEvery typeThis file isn't saved as UTF-8 text. Save it again as UTF-8.
json_invalidErrorEvery typeThis file isn't valid JSON.
schema_invalidErrorEvery typeThis value should be as the format says.
unknown_keyErrorEvery type"…" isn't part of the format. Remove it, or check its spelling.
file_missingErrorEvery typeThe package needs this file.
over_limitErrorEvery typeThis is over the limit of ….
family_not_availableErrorEvery typeKapi doesn't have a … player yet. Courses play today.
sdk_too_newErrorEvery typeThe package needs a newer SDK than Kapi serves. Kapi serves SDK ….
player_line_unknownErrorEvery typeThere's no such player line. Use ….
id_duplicateErrorEvery typeThe … ID is used twice. Every ID must be unique.
reference_unknownErrorEvery typeThis names …, which the package doesn't declare.
role_default_missingErrorEvery typeMark exactly one role as the default, for people whose job role isn't mapped.
word_missingErrorEvery typeThe words file has no text for ….
word_ownerErrorEvery type…'s first part names nothing in the package. Start a text ID with its lesson, page or question ID, or course, common, role or assessment.
word_unusedWarningEvery type… isn't used anywhere. Remove it, or use it.
markup_not_allowedErrorEvery typeThese words use …. Words take only **strong**, _emphasis_, [label](https://host/path) links and line breaks.
link_not_httpsErrorEvery typeThe link to … must start with https://.
link_host_undeclaredErrorEvery typeThese words link to …, which kapi-works.json doesn't list in links. Add the host if people may open it.
placeholder_unknownErrorEvery type… isn't a placeholder Kapi fills. Use {company.name}, {contacts.<key>.name}, .email, .phone, .url or {learner.firstName}.
placeholder_undeclaredErrorEvery typeThese words use a placeholder, but kapi-works.json doesn't declare … in context.
placeholder_in_linkErrorEvery typeA link address can't hold a placeholder. Kapi checks every address before a learner opens it.
first_name_twin_missingErrorEvery typeThese words use {learner.firstName}, so they need a twin, …, for people whose first name isn't given.
contact_missing_wordErrorEvery typeThis contact is optional, so write … for companies that haven't filled it in.
claim_wordWarningEvery type"…" is a claim Kapi can't stand behind. Say what the course does instead.
closing_names_endingWarningEvery typeThe closing words name "…". Endings are the company's rules, so the closing should only say the learning is finished.
answer_key_invalidErrorEvery typeThe answer key ….
explanation_missingErrorEvery typeThis question has no explanation of why the answer is right.
feedback_missingErrorEvery typeChoice … has no feedback. Every choice says why it's right or wrong.
held_question_on_pageErrorEvery typeThis question is in …'s pool, so it can't also sit on a page. Kapi's test would show it again.
held_kind_not_allowedErrorEvery typeKapi's test takes choice and multi questions only.
pool_too_smallErrorEvery typeThe pool holds fewer questions than the test draws (…).
pool_smallWarningEvery typeThe pool holds less than one and a half times the draw (…), so retakes repeat questions.
question_unusedWarningEvery typeNo page or pool uses this question.
media_file_missingErrorEvery typeThe package has no file ….
media_sha256_mismatchErrorEvery typeThis file's SHA-256 doesn't match the one kapi-works.json lists for it. Use the file it lists, or list this file's SHA-256.
media_not_listedErrorEvery typeThis media file isn't listed in kapi-works.json.
alt_missingErrorEvery typeThis picture needs alt text, or mark it decorative.
captions_missingErrorEvery typeSound or video with speech needs captions.
media_too_largeErrorEvery typeThis file is over 25 MB, the most a page can carry. Make it smaller.
context_not_allowedErrorEvery type… can't be required for customers. Kapi never gives it in a customer door.
starter_words_leftErrorEvery typeThe starter's sample words are still here (…). Replace them with your own.
starter_media_leftErrorEvery typeThis is still the starter's sample file. Replace it with your own.
support_missingWarningEvery typeThis answer key has no quote from a source in support.json.
support_target_unknownErrorEvery typesupport.json names …, which is neither a question nor a text in the package.
source_not_linkedWarningEvery typeKapi can't check this quote until its source is linked to the draft.
quote_not_foundErrorEvery typeThis quote isn't in its source, word for word.
fact_not_in_sourceWarningEvery type… isn't in any source this cites. Check it against the source.
lesson_longTipEvery typeThis lesson runs about … minutes. People keep more from lessons of 4 to 7.
sentence_longTipEvery type… Shorter sentences are easier to read, especially in a second language.
few_situationsTipEvery type… Questions set in a situation check that people can use what they learned.
film_sdkErrorEvery typeThis package has a film, so kapi-works.json needs "sdk": "2.1".
narration_placeholderErrorEvery typeNarration can't hold a placeholder. Kapi records it once for every company, so say "your company" or "your IT team" instead.
pause_question_kindErrorEvery typeA film can stop only for a choice or multi question.
pause_question_elsewhereErrorEvery typeThis question also …. A question a film stops for belongs to that film only.
drawing_target_unknownErrorEvery typeThis drawing's target … names no choice of the question the scene stops for.
drawing_target_missingErrorEvery typeThe choice … of the question this scene stops for has no target in the drawing, so nobody could tap it.
lesson_without_questionWarningTraining course… has no practice question. A question in each lesson helps people keep what they read.
scenario_opening_missingErrorScenario practice… doesn't open with a situation to choose from. In scenario practice, each lesson starts with a situation and a choice.
refresher_question_firstErrorQuick refresherThis page doesn't start with its question. In a quick refresher, every page asks first and the feedback teaches.
refresher_too_longWarningQuick refresherThis refresher takes about … minutes. A quick refresher takes 8 to 12.
certificate_pool_smallErrorCertificate courseA certificate test needs a pool at least twice the size of its draw (…), so each retake asks different questions.
certificate_pass_mark_missingWarningCertificate courseThe test suggests no pass mark. The company can change it, but a certificate course should suggest one.
walkthrough_steps_missingErrorStep-by-step walkthrough… has no numbered steps. A walkthrough shows each step in order.
walkthrough_picture_missingTipStep-by-step walkthroughThese steps have no picture. A screenshot of each step helps people follow along.
change_before_missingErrorWhat changed… doesn't show the old rule. Show it once, starting "Before" and the date it changed.
change_question_missingErrorWhat changed… has no situation question about the change.
video_opening_missingErrorVideo… doesn't open with a film. In a video, each lesson starts with its film.

On this page