{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://edpol.pro/rules/editorial-language-policy.json",
  "contract": "edpol-editorial-language-policy-v1",
  "policy_version": "1.1.0",
  "status": "ready-for-consumer-adoption",
  "authority": {
    "projectId": "edpol",
    "role": "portfolio-policy-control-plane",
    "scope": "Visible editorial copy at draft, approval and publication boundaries"
  },
  "principle": "Prefer concrete facts, named actors, dates, amounts and direct actions. Remove decorative signals, generic praise, empty framing and prose that describes the writing instead of the opportunity.",
  "boundary": {
    "evaluation": "deterministic-local",
    "raw_content_sent_to_edpol": false,
    "raw_content_retained_by_edpol": false,
    "consumer_owns_content_and_decision_history": true,
    "edpol_receives": "policy version, content fingerprint, finding metadata and reviewer decision metadata"
  },
  "decision_states": ["pass", "needs-rewrite", "blocked"],
  "matching": {
    "normalization": ["unicode-casefold", "collapse-whitespace"],
    "default_operator": "substring",
    "report_exact_excerpt": true
  },
  "blocked_patterns": [
    {
      "id": "generic-opportunity-framing",
      "language": "ru",
      "phrases": [
        "возможность дня",
        "данная программа",
        "данная возможность",
        "уникальная возможность",
        "предоставляет возможность",
        "открывает новые горизонты",
        "широкий спектр возможностей"
      ],
      "reason": "The opening must name the programme and its concrete value instead of announcing that it is an opportunity."
    },
    {
      "id": "empty-source-disclaimer",
      "language": "ru",
      "phrases": [
        "условия, сроки и порядок подачи опубликованы у организатора",
        "критерии участия нужно сверить на официальной странице программы",
        "перед подачей условия нужно проверить вручную",
        "актуальные условия уточняйте у организатора"
      ],
      "reason": "A publication card must contain the checked facts; a generic verification disclaimer cannot replace them."
    },
    {
      "id": "inflated-importance",
      "language": "ru",
      "phrases": [
        "играет ключевую роль",
        "имеет важное значение",
        "важно отметить",
        "стоит отметить",
        "в современном мире",
        "динамично развивающийся",
        "инновационное решение",
        "впечатляющие результаты"
      ],
      "reason": "Replace unmeasured importance and praise with a fact, number or named requirement."
    },
    {
      "id": "mechanical-transition",
      "language": "ru",
      "phrases": [
        "таким образом",
        "в заключение",
        "подводя итог",
        "следует подчеркнуть",
        "нельзя не отметить"
      ],
      "reason": "Short service copy should not use essay transitions or self-conscious narration."
    },
    {
      "id": "generic-opportunity-framing",
      "language": "kk",
      "phrases": [
        "күн мүмкіндігі",
        "бұл бағдарлама",
        "бұл мүмкіндік",
        "бірегей мүмкіндік",
        "мүмкіндік береді",
        "жаңа мүмкіндіктер ашады"
      ],
      "reason": "The opening must name the programme and its concrete value instead of announcing that it is an opportunity."
    },
    {
      "id": "empty-source-disclaimer",
      "language": "kk",
      "phrases": [
        "қатысу талаптарын бағдарламаның ресми парағынан тексеру керек",
        "өзекті шарттарды ұйымдастырушыдан тексеріңіз",
        "өтінім берер алдында шарттарды қолмен тексеру керек"
      ],
      "reason": "A publication card must contain the checked facts; a generic verification disclaimer cannot replace them."
    },
    {
      "id": "inflated-importance",
      "language": "kk",
      "phrases": [
        "маңызды рөл атқарады",
        "атап өту маңызды",
        "қазіргі әлемде",
        "инновациялық шешім",
        "әсерлі нәтижелер"
      ],
      "reason": "Replace unmeasured importance and praise with a fact, number or named requirement."
    },
    {
      "id": "mechanical-transition",
      "language": "kk",
      "phrases": [
        "осылайша",
        "қорытындылай келе",
        "атап өткен жөн"
      ],
      "reason": "Short service copy should not use essay transitions or self-conscious narration."
    },
    {
      "id": "generic-opportunity-framing",
      "language": "en",
      "phrases": [
        "opportunity of the day",
        "this programme",
        "this program",
        "this opportunity",
        "unique opportunity",
        "provides an opportunity",
        "opens new horizons",
        "wide range of opportunities"
      ],
      "reason": "The opening must name the programme and its concrete value instead of announcing that it is an opportunity."
    },
    {
      "id": "empty-source-disclaimer",
      "language": "en",
      "phrases": [
        "check eligibility on the programme's official page",
        "check eligibility on the program's official page",
        "verify current terms with the organiser",
        "verify current terms with the organizer",
        "check the terms manually before applying"
      ],
      "reason": "A publication card must contain the checked facts; a generic verification disclaimer cannot replace them."
    },
    {
      "id": "inflated-importance",
      "language": "en",
      "phrases": [
        "plays a key role",
        "it is important to note",
        "in today's world",
        "dynamic environment",
        "innovative solution",
        "impressive results"
      ],
      "reason": "Replace unmeasured importance and praise with a fact, number or named requirement."
    },
    {
      "id": "mechanical-transition",
      "language": "en",
      "phrases": [
        "thus",
        "in conclusion",
        "to sum up",
        "it should be emphasized"
      ],
      "reason": "Short service copy should not use essay transitions or self-conscious narration."
    }
  ],
  "structural_rules": [
    {
      "id": "decorative-emoji",
      "severity": "block",
      "requirement": "Do not use decorative emoji in titles, headings, bullets or calls to action."
    },
    {
      "id": "duplicate-title",
      "severity": "block",
      "requirement": "Do not repeat the title as the first body line."
    },
    {
      "id": "unknown-value-placeholder",
      "severity": "block",
      "requirement": "Do not publish labels followed by placeholders such as 'Не указано', 'Көрсетілмеген', 'Not stated', 'unknown' or 'to be confirmed'; omit the field or verify it."
    },
    {
      "id": "actionable-ending",
      "severity": "review",
      "requirement": "End service copy with specific application actions or a direct source link, not a generic conclusion."
    }
  ],
  "publication_rule": {
    "fail_closed": true,
    "block_when": [
      "one or more blocked patterns match",
      "a blocking structural rule fails",
      "the policy version used for evaluation is missing from the decision record"
    ],
    "pass_when": [
      "no blocking finding remains",
      "the publication stores the policy version and a content fingerprint"
    ]
  },
  "consumer_requirements": {
    "evaluate_locally": true,
    "evaluate_before_publication": true,
    "store_content_fingerprint": true,
    "store_policy_version": true,
    "store_finding_ids": true,
    "network_dependency_at_publication": false,
    "allowlist": "narrow, reviewed and recorded with a reason"
  }
}
