---
name: wikipedia-uk-editor
description: 'Draft policy-compliant Ukrainian Wikipedia edits: translate an English article into uk, expand or source an existing uk article, or fix a maintenance backlog item, and return ready-to-paste wikitext plus an edit summary. Use when given a uk.wikipedia.org or en.wikipedia.org URL or article title to edit, translate, source, or improve, or when planning what to contribute to ukwiki next.'
license: MIT
allowed-tools: Bash, Read, Write, Edit, WebFetch, WebSearch
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, Hermes, and other Agent Skills compatible tools. Requires curl and python3 for the read-only MediaWiki API helper.
metadata:
  targets: [_source-only]
  author: Oleg Koval
  tags:
    - wikipedia
    - ukrainian
    - wikitext
    - translation
    - sourcing
    - editing
---

# Ukrainian Wikipedia Editor

Turn a URL or article title into a complete, policy-compliant Ukrainian Wikipedia edit that the human pastes into the wiki editor themselves.

## Hard Rules

1. **Never submit an edit.** No `action=edit`, no logged-in browser automation, no bot password. This skill only reads and drafts. The human pastes and saves. Automated saving without a ВП:БОТ approval risks a block.
2. **Never invent a source, a date, a number, or a citation.** Every fact added must trace to a source that was actually fetched in this session. If it cannot be sourced, it does not go in the article.
3. **Never copy-paste prose from a source.** Ukrainian Wikipedia deletes copyright violations (ВП:Авторські права) on sight. Paraphrase in Ukrainian and cite.
4. **Never translate machine-literally.** A rough MT dump is a deletion candidate. Ukrainian syntax, Ukrainian transliteration of names, Ukrainian date format (`12 березня 2024`), decimal comma.
5. **Use only template and policy names verified against the live wiki.** See `references/wikitext-uk.md`. If a template is not listed there, verify it exists before using it: the helper script has a `check` command.
6. **Disclose AI assistance** on the user page and, when substantial, in the edit summary. Undisclosed LLM output is the fastest route to scrutiny.

## Outcome

A single deliverable written to a scratch file and echoed in chat:

- the **target page** (exact ukwiki title, and whether it exists)
- the **wikitext**: always the complete final article in one `.wiki` file, ready to paste over the whole edit box; never a diff, never a БУЛО/СТАЛО list of manual replacements
- the **edit summary** in Ukrainian (≤ 200 chars)
- the **source list** with the URL, publisher, and date actually fetched for each
- **risk notes**: notability (ВП:ЗН) standing, anything a patroller will challenge, what still needs a human check

## Workflow

### 1. Classify the task

| Input | Mode |
|---|---|
| explicit newcomer task (tier + type, e.g. "Середні → Оновлювати статті") | mode set by task type (see below) |
| en.wikipedia.org URL, no uk equivalent | **Translate**: new uk article |
| uk.wikipedia.org URL, stub or thin | **Expand** |
| uk.wikipedia.org URL with `{{Без джерел}}` / `{{Джерело}}` | **Source** |
| uk.wikipedia.org URL, prose/format problems | **Cleanup** |
| "what should I edit next" | **Plan**: read `references/strategy.md`, propose a ranked list |

When a newcomer task type is given, it **overrides** the state-based guess above. The per-type scope contract in `references/newcomer-tasks.md` is binding: an assigned type is a ceiling on what the edit may touch, not a floor.

Resolve the title first: `scripts/wiki.sh` handles redirects. Never draft against the wrong title.

### 2. Read before writing

```sh
./scripts/wiki.sh get uk "Тайтл"          # current wikitext
./scripts/wiki.sh get en "Title"          # source-language wikitext
./scripts/wiki.sh langlink en "Title" uk  # does a uk version already exist?
./scripts/wiki.sh check uk "Шаблон:Особа" # does this template/page exist?
./scripts/wiki.sh tasks <type> [n]        # list candidates for a newcomer task type: copyedit|links|references|update|expand
```

Stop and report if:
- a uk article already exists for a "new translation" (then it is an **Expand** task, not a new page)
- the subject fails ВП:ЗН: do not draft an article that will be deleted; say so and propose an alternative target

### 3. Gather real sources

For **Translate**: the English article's own reference list is a source *lead*, not a source. Fetch each reference actually cited for the claims you keep. Drop claims whose sources are dead or paywalled beyond verification. Prefer Ukrainian-language sources where they exist: patrollers weigh them higher.

For **Source/Expand**: search for the specific unsourced claim, not the topic in general. Reject blogs, press releases, user-generated wikis, and the subject's own site for anything contested (ВП:АД).

Record for each source: URL, title, publisher, publication date, access date. These become `{{Cite web}}` / `{{Стаття}}` / `{{Книга}}` parameters (see `references/wikitext-uk.md`).

### 4. Draft the wikitext

Follow `references/wikitext-uk.md` for structure, citation templates, infoboxes, section names, categories, and the `{{Перекладена стаття}}` attribution template that translations legally require.

Scale to the subject: a person gets ~4–8 sourced sentences minimum, not two. Under that, it is a stub: label it `{{Заготовка}}` honestly rather than pretending it is complete.

### 5. Self-check before delivering

Run every item. Report failures rather than hiding them.

- [ ] Every non-obvious factual claim has an inline `<ref>`
- [ ] No sentence is a translated copy of a copyrighted source
- [ ] Every template used exists (checked, not assumed)
- [ ] `{{Перекладена стаття}}` present with the source revision id, if translated
- [ ] Categories present and non-empty; at least one is a real existing category
- [ ] Interwiki handled via Wikidata note, not hardcoded links
- [ ] Neutral tone (ВП:НТЗ): no promotional adjectives, no unattributed evaluation
- [ ] No original synthesis (ВП:ОД)
- [ ] Dates, numbers, and name transliterations are Ukrainian-correct
- [ ] Edit summary written in Ukrainian and states what changed and why
- [ ] The edit stayed inside the assigned task type's allowed scope
- [ ] Any maintenance template removed was actually earned: the underlying problem is genuinely fixed

### 6. Deliver

For Expand / Source / Cleanup: fetch the current wikitext, apply the changes programmatically (a small Python pass over the fetched file, asserting each anchor string matched exactly once), and write the whole resulting article out. Verify it before delivering: section list intact, every intended change landed, nothing else dropped.

Write the draft to a scratch file: the raw `.wiki` file contains nothing but article wikitext (the full final article, ready to paste over the whole edit box); the human-readable explanation of what changed goes in a separate `.md`. Print the edit summary, and tell the human exactly where to paste it:

- new article → `https://uk.wikipedia.org/wiki/Тайтл?action=edit`
- existing article → `https://uk.wikipedia.org/w/index.php?title=Тайтл&action=edit`, replace the whole edit box
- test first → `Вікіпедія:Пісочниця` or the user's own `Користувач:Ім'я/Чернетка`

End the delivery with a copy-to-clipboard command in its own fenced block, using a quoted absolute path (quoted because scratchpad paths contain characters the shell will otherwise mangle), always the raw `.wiki` file, never the `.md`:

```sh
pbcopy < "/absolute/path/to/slug.wiki"
```

Add an optional second line when the edit summary is long enough to be worth copying:

```sh
printf '%s' 'Опис редагування…' | pbcopy
```

Then stop. Do not offer to save it.

## References

- `references/strategy.md`: the contribution strategy: what to farm, in what order, and how to build standing without getting flagged
- `references/wikitext-uk.md`: verified uk templates, citation formats, article skeletons, policy shortcuts
- `references/newcomer-tasks.md`: the newcomer task tiers (Легкі/Середні/Важкі) and the binding scope contract for each task type
- `scripts/wiki.sh`: read-only MediaWiki API helper

## Verification

The skill has done its job when the human can paste the output unchanged, and the resulting edit survives patrolling with no maintenance template added.
