Šķîþ ţö ḿàîñ çöñţéñţ

Çöñţéñţ çöñţéẋţ ļàƃ

Đéŕéñţ ŕéàđéŕš.
Ţĥé šàḿé šéŕṽîçé ƒàçţš.

Éẋþļöŕé ĥöŵ šĥàŕéđ çöñšţŕàîñţš šüŕṽîṽé àüđîéñçé-šþéçîƒîç þŕéšéñţàţîöñ. Îñšþéçţ ţĥé ŕéçöŕđéđ çĥéçķš, ţĥéîŕ þŕöṽéñàñçé àñđ ţĥé ļîḿîţš öƒ ŵĥàţ ţĥéý éšţàƃļîšĥ.

Öñé þŕöƒîļé · ƒöüŕ ŕéàđîñĝ šîţüàţîöñš

Çĥàñĝé ţĥé àüđîéñçé. Ķééþ ţĥé çöñšţŕàîñţ.

Ŕéçöŕđéđ þļàýƃàçķ
Þàŕàĝŕàþĥ

Child: Reading with a trusted adult. Familiar words and one step at a time.

Child, Violation. 1 constraint findings. Exit 3.

Ŕéçöŕđéđ îñþüţ

Talk to us on a screen

A prohibited assurance is inserted into the same file.

A video appointment is risk-free.

site/locales/en/child.json

Ŕéçöŕđéđ ŕéšüļţ

Çöñƒîĝüŕéđ ĝàţé ƒàîļéđ

1 çöñšţŕàîñţ ƒîñđîñĝš
1 àļļ ƒîñđîñĝš
3 þŕöçéšš éẋîţ

Ţĥé éẋàçţ ŵöŕđîñĝ ŕüļé đéţéçţéđ ţĥé àššüŕàñçé, éṽéñ ŵîţĥ ţĥîš àüđîéñçé’š þŕéšéñţàţîöñ öṽéŕŕîđéš.

Ƒàçţüàļ ĝüîđàñçé: üñšüþþöŕţéđ

Àþþöîñţḿéñţš, çöñšéñţ àñđ đéṽîçé àççéšš šţîļļ ŕéǫüîŕé ĥüḿàñ öŕ šéḿàñţîç ŕéṽîéŵ. À þàššîñĝ ŵöŕđîñĝ çĥéçķ đöéš ñöţ ṽéŕîƒý ţĥéšé ƒàçţš.

Đéţéŕḿîñîšţîç çöñšţŕàîñţ · applicable

Do not describe the service as guaranteed, always safe or risk-free.

(?i)\b(guarantee|always safe|risk-free)\b

Ļîţéŕàļ ŔÉ2 þàţţéŕñ ḿàţçĥîñĝ. Ñö šýñöñýḿ šéàŕçĥ öŕ ƒàçţüàļ îñƒéŕéñçé.

Šĥàŕéđ ƒàçţüàļ ĝüîđàñçé · applicable

Appointments are not recorded. Screen sharing requires consent and can be stopped. The adviser cannot control the device or open its files.

Ṽîšîƃļé îñ ţĥé ŵŕîţéŕ’š çöñţéẋţ. Šéḿàñţîç ṽéŕîƒîçàţîöñ ŕéḿàîñš öüţšîđé ţĥîš đéţéŕḿîñîšţîç ŕüñ.

Šöüŕçé àñđ ŕéšöļṽéđ çöñţéẋţ
{
  "input": {
    "audience": "Children",
    "eyebrow": "Harbor Help",
    "title": "Talk to us on a screen",
    "intro": "A video appointment is a time when you can talk with a Harbor Help adviser on a screen.",
    "fact_title": "What is the same for everyone",
    "fact_body": "A video appointment is risk-free.",
    "privacy_title": "Keep your information safe",
    "privacy_body": "We will not ask for your password or bank details. Ask a trusted adult if you are unsure.",
    "action": "Ask a trusted adult to book a video appointment with you.",
    "support": "A grown-up can call the support line if you need help."
  },
  "inputSha256": "387fda81a4f4a9b8b8bc1624a1bfb50a17eef93b7064d024db4407ea3e517446",
  "context": {
    "constraints": [
      {
        "constraint": {
          "id": "harbor-help/no-unsupported-assurance",
          "version": 1,
          "source": "service-facts.md#assurances",
          "statement": "Do not describe the service as guaranteed, always safe or risk-free.",
          "kind": "prohibited_pattern",
          "regex": "(?i)\\b(guarantee|always safe|risk-free)\\b",
          "exceptions": [
            {
              "scope": {
                "channel": "policy-example"
              },
              "reason": "A reviewed policy example quotes the prohibited wording.",
              "approved_by": "fixture-author",
              "approval_ref": "service-facts.md#fixture-exception"
            }
          ]
        },
        "status": "applicable"
      },
      {
        "constraint": {
          "id": "harbor-help/recording-and-control",
          "version": 1,
          "source": "service-facts.md#recording-and-control",
          "statement": "Appointments are not recorded. Screen sharing requires consent and can be stopped. The adviser cannot control the device or open its files.",
          "kind": "guidance"
        },
        "status": "applicable"
      }
    ],
    "point": {
      "path": "site/locales/en/child.json",
      "profile": "harbor-help",
      "channel": "child",
      "collection": "child-page",
      "ref": "harbor-help/child",
      "coordinates": {
        "audience": "child",
        "channel": "child",
        "product": "harbor-help",
        "service": "harbor-help",
        "topic": "video-appointments"
      },
      "default": false
    },
    "scope": "project",
    "voice": {
      "name": "Harbor Help",
      "source": ".kapi/voice.yaml",
      "field": "profiles.harbor-help.voice",
      "guide": "# Voice Guide: Harbor Help\n\nHarbor Help explains how to get practical support. The facts stay the same for every reader; the explanation changes only to meet the reader where they are.\n\n## Shared constraints\nharbor-help/no-unsupported-assurance v1 (service-facts.md#assurances): Do not describe the service as guaranteed, always safe or risk-free. [mandatory critical pattern: (?i)\\b(guarantee|always safe|risk-free)\\b]\nharbor-help/recording-and-control v1 (service-facts.md#recording-and-control): Appointments are not recorded. Screen sharing requires consent and can be stopped. The adviser cannot control the device or open its files. [guidance; semantic verification unsupported by deterministic checks]\n\n## Tone\n- Personality: kind, clear, calm\n- Formality: informal\n- Emotion: reassuring\n- Humor: none\n- Guidelines: Use familiar words and explain one idea at a time. Tell the reader to ask a trusted adult for help with an appointment. Do not ask the reader to make an adult decision.\n\n## Style Rules\n- Use active voice\n- Sentence length: short\n- Point of view: second\n- Contractions: never\n\n## Vocabulary\n### Preferred Terms\n- **video appointment**: The service name for a scheduled conversation with an adviser.\n- **support line**: The non-emergency phone route to a person.\n- **Harbor Help**: Product name. Keep its spelling in every language.\n\n### Forbidden Terms\n- ~~video call~~ → use **video appointment**: Use the service term consistently.\n\n"
    },
    "terms": [
      {
        "concept_id": "term:harbor-help",
        "term": "Harbor Help",
        "locale": "en",
        "status": "preferred",
        "definition": "The fictional public-information service in this sample. It is a name and is never translated.",
        "domain": "product",
        "discouraged": false
      },
      {
        "concept_id": "term:harbor-help",
        "term": "Harbor Help",
        "locale": "nb",
        "status": "preferred",
        "definition": "The fictional public-information service in this sample. It is a name and is never translated.",
        "domain": "product",
        "discouraged": false
      },
      {
        "concept_id": "term:support-line",
        "term": "hjelpetelefon",
        "locale": "nb",
        "status": "preferred",
        "definition": "The phone service that helps a person use Harbor Help. It is not an emergency number.",
        "domain": "service",
        "discouraged": false
      },
      {
        "concept_id": "term:support-line",
        "term": "support line",
        "locale": "en",
        "status": "preferred",
        "definition": "The phone service that helps a person use Harbor Help. It is not an emergency number.",
        "domain": "service",
        "discouraged": false
      },
      {
        "concept_id": "term:video-appointment",
        "term": "video appointment",
        "locale": "en",
        "status": "preferred",
        "definition": "A scheduled conversation with a Harbor Help adviser over video. It is not a recording and it does not give the service access to a person's device.",
        "domain": "service",
        "discouraged": false
      },
      {
        "concept_id": "term:video-appointment",
        "term": "videomøte",
        "locale": "nb",
        "status": "preferred",
        "definition": "A scheduled conversation with a Harbor Help adviser over video. It is not a recording and it does not give the service access to a person's device.",
        "domain": "service",
        "discouraged": false
      }
    ],
    "terms_total": 6,
    "notes": [
      "project scope: concept relations, revisions and market scoping live in a connected workspace"
    ]
  }
}
Ŕàŵ çĥéçķ ŕéþöŕţ àñđ çöḿḿàñđ
{
  "command": [
    "check",
    "site/locales/en/child.json",
    "--json",
    "-p",
    "kapi.yaml"
  ],
  "exitCode": 3,
  "report": {
    "schema": "kapi.check/v1",
    "pass": false,
    "target": {
      "kind": "file",
      "file": "site/locales/en/child.json",
      "blocks": 10
    },
    "summary": {
      "findings": 1,
      "critical": 1,
      "major": 0,
      "minor": 0,
      "neutral": 0,
      "score": 75
    },
    "gate": {
      "max_critical": 0,
      "max_major": -1,
      "max_minor": -1,
      "min_score": 0,
      "failed": [
        "critical findings 1 exceed limit 0"
      ]
    },
    "findings": [
      {
        "rule": "voice.style",
        "check": "voice",
        "severity": "critical",
        "message": "Prohibited pattern: Do not describe the service as guaranteed, always safe or risk-free.",
        "location": {
          "file": "site/locales/en/child.json",
          "block": "fact_body",
          "anchor": {
            "kind": "range",
            "start": {
              "run": 0,
              "offset": 23
            },
            "end": {
              "run": 0,
              "offset": 32
            }
          },
          "snippet": "risk-free"
        },
        "metadata": {
          "constraint_id": "harbor-help/no-unsupported-assurance",
          "constraint_source": "service-facts.md#assurances",
          "constraint_version": "1",
          "pattern": "(?i)\\b(guarantee|always safe|risk-free)\\b"
        }
      }
    ],
    "execution": {
      "analyzers": [
        {
          "id": "reader.validation",
          "status": "not_requested",
          "file": "site/locales/en/child.json",
          "required": false,
          "findings": 0,
          "reason": "Reader validation was not requested."
        },
        {
          "id": "hygiene",
          "status": "passed",
          "file": "site/locales/en/child.json",
          "required": true,
          "findings": 0,
          "duration_ms": 0.083166
        },
        {
          "id": "length",
          "status": "not_requested",
          "file": "site/locales/en/child.json",
          "required": false,
          "findings": 0,
          "reason": "No length limit was configured."
        },
        {
          "id": "pattern",
          "status": "not_requested",
          "file": "site/locales/en/child.json",
          "required": false,
          "findings": 0,
          "reason": "No explicit patterns were configured."
        },
        {
          "id": "voice.rules",
          "status": "findings",
          "file": "site/locales/en/child.json",
          "required": true,
          "findings": 1,
          "duration_ms": 0.3035
        },
        {
          "id": "voice.guidance",
          "status": "unsupported",
          "file": "site/locales/en/child.json",
          "required": false,
          "findings": 0,
          "reason": "Applicable guidance requires semantic analysis; deterministic rules do not assess it."
        },
        {
          "id": "voice.similarity",
          "status": "not_requested",
          "file": "site/locales/en/child.json",
          "required": false,
          "findings": 0,
          "reason": "Similarity analysis was not requested."
        },
        {
          "id": "voice.llm",
          "status": "not_requested",
          "file": "site/locales/en/child.json",
          "required": false,
          "findings": 0,
          "reason": "This command does not run semantic review."
        }
      ],
      "timings": {
        "context_ms": 2.517125,
        "extraction_ms": 0.084959,
        "analyzers_ms": 0.386666,
        "report_ms": 0.002917,
        "total_ms": 3.304167
      }
    }
  },
  "stdout": "{\n  \"schema\": \"kapi.check/v1\",\n  \"pass\": false,\n  \"target\": {\n    \"kind\": \"file\",\n    \"file\": \"site/locales/en/child.json\",\n    \"blocks\": 10\n  },\n  \"summary\": {\n    \"findings\": 1,\n    \"critical\": 1,\n    \"major\": 0,\n    \"minor\": 0,\n    \"neutral\": 0,\n    \"score\": 75\n  },\n  \"gate\": {\n    \"max_critical\": 0,\n    \"max_major\": -1,\n    \"max_minor\": -1,\n    \"min_score\": 0,\n    \"failed\": [\n      \"critical findings 1 exceed limit 0\"\n    ]\n  },\n  \"findings\": [\n    {\n      \"rule\": \"voice.style\",\n      \"check\": \"voice\",\n      \"severity\": \"critical\",\n      \"message\": \"Prohibited pattern: Do not describe the service as guaranteed, always safe or risk-free.\",\n      \"location\": {\n        \"file\": \"site/locales/en/child.json\",\n        \"block\": \"fact_body\",\n        \"anchor\": {\n          \"kind\": \"range\",\n          \"start\": {\n            \"run\": 0,\n            \"offset\": 23\n          },\n          \"end\": {\n            \"run\": 0,\n            \"offset\": 32\n          }\n        },\n        \"snippet\": \"risk-free\"\n      },\n      \"metadata\": {\n        \"constraint_id\": \"harbor-help/no-unsupported-assurance\",\n        \"constraint_source\": \"service-facts.md#assurances\",\n        \"constraint_version\": \"1\",\n        \"pattern\": \"(?i)\\\\b(guarantee|always safe|risk-free)\\\\b\"\n      }\n    }\n  ],\n  \"execution\": {\n    \"analyzers\": [\n      {\n        \"id\": \"reader.validation\",\n        \"status\": \"not_requested\",\n        \"file\": \"site/locales/en/child.json\",\n        \"required\": false,\n        \"findings\": 0,\n        \"reason\": \"Reader validation was not requested.\"\n      },\n      {\n        \"id\": \"hygiene\",\n        \"status\": \"passed\",\n        \"file\": \"site/locales/en/child.json\",\n        \"required\": true,\n        \"findings\": 0,\n        \"duration_ms\": 0.083166\n      },\n      {\n        \"id\": \"length\",\n        \"status\": \"not_requested\",\n        \"file\": \"site/locales/en/child.json\",\n        \"required\": false,\n        \"findings\": 0,\n        \"reason\": \"No length limit was configured.\"\n      },\n      {\n        \"id\": \"pattern\",\n        \"status\": \"not_requested\",\n        \"file\": \"site/locales/en/child.json\",\n        \"required\": false,\n        \"findings\": 0,\n        \"reason\": \"No explicit patterns were configured.\"\n      },\n      {\n        \"id\": \"voice.rules\",\n        \"status\": \"findings\",\n        \"file\": \"site/locales/en/child.json\",\n        \"required\": true,\n        \"findings\": 1,\n        \"duration_ms\": 0.3035\n      },\n      {\n        \"id\": \"voice.guidance\",\n        \"status\": \"unsupported\",\n        \"file\": \"site/locales/en/child.json\",\n        \"required\": false,\n        \"findings\": 0,\n        \"reason\": \"Applicable guidance requires semantic analysis; deterministic rules do not assess it.\"\n      },\n      {\n        \"id\": \"voice.similarity\",\n        \"status\": \"not_requested\",\n        \"file\": \"site/locales/en/child.json\",\n        \"required\": false,\n        \"findings\": 0,\n        \"reason\": \"Similarity analysis was not requested.\"\n      },\n      {\n        \"id\": \"voice.llm\",\n        \"status\": \"not_requested\",\n        \"file\": \"site/locales/en/child.json\",\n        \"required\": false,\n        \"findings\": 0,\n        \"reason\": \"This command does not run semantic review.\"\n      }\n    ],\n    \"timings\": {\n      \"context_ms\": 2.517125,\n      \"extraction_ms\": 0.084959,\n      \"analyzers_ms\": 0.386666,\n      \"report_ms\": 0.002917,\n      \"total_ms\": 3.304167\n    }\n  }\n}\n",
  "stderr": "{\n  \"error\": \"quality gate failed\",\n  \"code\": \"gate\"\n}\n"
}

Šŵîţçĥîñĝ çàšéš đîšþļàýš ŕéçöŕđéđ îñþüţ àñđ öüţþüţ. Îţ đöéš ñöţ ŕüñ ţĥé éñĝîñé öŕ à ḿöđéļ îñ ţĥîš ƃŕöŵšéŕ. Ţĥé ŕéþàîŕ îš àñ àüţĥöŕéđ ƒîẋţüŕé, ñöţ àñ àüţöḿàţîç ƒàçţüàļ çöŕŕéçţîöñ.

Éṽîđéñçé àñđ ŕéþŕöđüçţîöñ

Recorded 2026-09-09. Öƒƒļîñé ƒîẋţüŕé, ŵîţĥ ñö þàîđ þŕöṽîđéŕ öŕ ļîṽé šéḿàñţîç ŕéṽîéŵ.

Šöüŕçé çöḿḿîţ 330e8bc8b714 .

Ŕéþŕöđüçé ļöçàļļý
make build
node samples/audience-context/run.mjs --binary bin/kapi --output /tmp/audience-results.json

Ţĥé ŕüññéŕ üšéš ţéḿþöŕàŕý þŕöĵéçţ, çöñƒîĝüŕàţîöñ àñđ þļüĝîñ đîŕéçţöŕîéš. Ŕé-ŕüñ îţ öñ ţĥé çĥéçķéđ-öüţ šöüŕçé ţö öƃţàîñ ñéŵ ḿéàšüŕéḿéñţš.

Àŕţîƒàçţ þŕöṽéñàñçé àñđ ļîḿîţàţîöñš
{
  "schema": "neokapi-audience-coverage/v1",
  "recordedAt": "2026-09-09T22:11:42.789Z",
  "sourceCommit": "330e8bc8b714045f2b501446fa58826952cd8f63",
  "sourceDirty": false,
  "sourceDiffSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "binaryVersion": "kapi version v1.2.0-rc29-249-ga7a9931e3",
  "binarySha256": "65aff04c46e7020a248d84050e9b72cd8fd69a86ae66aae3cb2436b371847fc2",
  "profileSha256": "7e17261e1c05bd240886332e88d189d9e8441aa8ff1c9c88f7eb991cf45ec262",
  "recipeSha256": "3221c25b0097011c06a0e389ef96df7e1d6aca3b000c4f2f8664b0ea9c240787",
  "scope": "Offline deterministic checks; no model, remote binding or authenticated review.",
  "limitations": [
    "Literal assurance matching does not establish factual truth.",
    "No latency benchmark or comparative productivity experiment was run.",
    "The caller must build the binary; version and hashes identify the supplied artifact."
  ]
}