Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ dist/
# Use pnpm only — npm/yarn lockfiles are accidental
package-lock.json
yarn.lock
tmp-local-index.json
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,30 @@ scripts/ ← validate, build-index, new-preset
index.json ← auto-generated; do not edit by hand
```

## Local smoke testing against Skrebe

`scripts/build-index.ts` hardcodes the per-preset `manifestUrl` and `glossaryUrl`
in `index.json` to `https://raw.githubusercontent.com/deznode/papia-presets/main/...`.
That means pointing Skrebe at a locally-served `index.json` still sends it to
GitHub for the manifest and glossary — which defeats the point of testing
unmerged changes.

Current workaround:

1. `npx http-server . -p 8765 --cors -c-1 -s`
2. Copy `index.json` to `tmp-local-index.json` and hand-rewrite the GitHub raw
URLs to `http://localhost:8765/...`. (`tmp-local-index.json` is gitignored.)
3. In Skrebe → Settings → Advanced, set the custom catalog URL to
`http://localhost:8765/tmp-local-index.json`.

### TODO: `--base-url` flag for `build-index`

Replace the manual `tmp-local-index.json` step with
`pnpm build-index --base-url http://localhost:8765`, which writes the same
`index.json` but with every URL rooted at the given base. Five-line change in
`scripts/build-index.ts:22`. Worth doing the next time someone smoke-tests
the install flow or a second preset author needs a local dev loop.

## License

All presets and documentation in this repository are licensed under the [MIT License](./LICENSE). You're free to use, modify, and redistribute the content — including in commercial and closed-source products — with attribution as the MIT license requires.
Expand Down
39 changes: 36 additions & 3 deletions index.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,41 @@
{
"schemaVersion": 1,
"generatedAt": "2026-05-20T03:00:26.849Z",
"generatedAt": "2026-05-20T14:38:50.031Z",
"catalogName": "papia-presets",
"catalogVersion": "0.1.0",
"domains": [],
"presets": []
"domains": [
"tech"
],
"presets": [
{
"id": "skrebe-translator-workflow",
"name": "Skrebe Translator Workflow",
"description": "Core vocabulary a Skrebe user encounters while translating English into Kriolu: editor verbs (open, save, read, write), workflow nouns (document, word, sentence, project), the conjunctions that trip up Portuguese speakers (and, but, because, not, more), and second-person register distinctions. The catalog's seed preset.",
"domain": "tech",
"latestVersion": "0.1.0",
"entryCount": 20,
"dialects": [
"santiago"
],
"sourceLanguage": "en",
"targetLanguage": "kea",
"authors": [
{
"name": "Papia Studio",
"github": "@deznode"
}
],
"alupecValidated": false,
"featured": false,
"tags": [
"seed",
"translator-workflow",
"computing",
"conjunctions"
],
"manifestUrl": "https://raw.githubusercontent.com/deznode/papia-presets/main/presets/skrebe-translator-workflow/manifest.json",
"glossaryUrl": "https://raw.githubusercontent.com/deznode/papia-presets/main/presets/skrebe-translator-workflow/glossary.json",
"updatedAt": "2026-05-19"
}
]
}
6 changes: 6 additions & 0 deletions presets/skrebe-translator-workflow/.cspell.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"import": ["@papia/cspell-kea/cspell-ext.json"],
"overrides": [
{ "filename": "**/{*.kea,kea}.{md,mdx}", "dictionaries": ["kea"] }
]
}
23 changes: 23 additions & 0 deletions presets/skrebe-translator-workflow/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Changelog — skrebe-translator-workflow

All notable changes to this preset will be documented in this file. Format loosely follows [Keep a Changelog](https://keepachangelog.com/). Bump the version in `manifest.json` according to [semver](https://semver.org/):

- **Patch** (1.0.0 → 1.0.1) — typo fixes, note clarifications
- **Minor** (1.0.0 → 1.1.0) — new entries added, no breaking changes
- **Major** (1.0.0 → 2.0.0) — terms removed or preferred translation changed (breaks downstream approvals)

---

## [0.1.0] — 2026-05-19

### Added

- Initial draft of the catalog's seed preset (20 entries, Santiago dialect).
- 4 `must` entries codifying non-negotiable rules: the four-way "and" conjunction (`ku` / `y` / `i` / never-`e`), `but` → `ma`, `ALUPEC` (verbatim), `Kriolu` (with `Kabuverdianu` as accepted alternative).
- 13 `should` entries covering editor verbs (open, save, read, write, close, translate, help), workflow nouns (document, word, sentence, project, translation), and the second-person pronoun with register distinctions (`bo` / `nhu` / `nha`).
- 3 `avoid` entries mirroring the existing Skrebe linter calque rules: `because` → `porque`/`porkê` (ALUPEC_CALQUE_PORQUE), `not` → `não`/`nao` (ALUPEC_CALQUE_NAO), `more` → `más` (ALUPEC_CALQUE_MAS).

### Known limitations

- Four entries (`translation`, `translate`, `close`, `save`) are bootstrap calques constructed via Portuguese-to-ALUPEC mappings rather than directly attested in a published Kriolu source. They are flagged for community review in the README and will be revisited before `1.0.0`.
- No `nameKriolu` field in the manifest yet — pending a community-reviewed translation of "Skrebe Translator Workflow".
56 changes: 56 additions & 0 deletions presets/skrebe-translator-workflow/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Skrebe Translator Workflow

The catalog's seed preset — a small, dense vocabulary covering the words a Skrebe user actually encounters while translating English Markdown into Cape Verdean Kriolu. Twenty entries, Santiago dialect, MIT-licensed.

This preset exists for two reasons:

1. **Marketplace seed.** The `papia-presets` catalog needs to ship with at least one credible preset so that Skrebe's marketplace UI has something to render. This is that preset.
2. **Pedagogical anchor.** Several entries codify rules the Skrebe ALUPEC linter already enforces — the four-way "and" trap (`ku` / `y` / `i` / never `e`), the `mas` / `ma` / `más` distinction, the forbidden Portuguese calques (`porque`, `não`, `más`). Installing this preset makes the linter's vocabulary visible to translators inside the glossary panel.

## Audience

Anyone using Skrebe to translate English-source Markdown into Kriolu. The vocabulary is intentionally narrow:

- **Editor verbs**: open, save, read, write, close, translate, help
- **Workflow nouns**: document, word, sentence, project, translation
- **Function words**: the "and" conjunction family, "but", "you" (with register distinctions)
- **Calque traps**: forbidden Portuguese forms of "because", "not", "more"
- **Proper nouns**: ALUPEC, Kriolu

It is **not** a general English-Kriolu dictionary. Pair it with a domain preset (health, education, civic-government) when you need vocabulary for a specific field.

## Dialect notes

All entries reflect Santiago (Badiu) usage. Where alternative dialect forms exist (e.g. São Vicente `salva` vs. Santiago `guarda` for "save"), they are mentioned in the entry's `notes` field but not encoded as separate targets — that's for a future multi-dialect preset.

## Pedagogical highlights

- **Entry "and"** — the catalog's most-cited rule, with `ku` / `y` / `i` as the three valid choices and a notes-field warning that `e` (the copula "is") must never be used as "and". This is the single most common Portuguese-interference bug in Kriolu writing. See [ADR-0013](https://github.com/deznode/papia-studio/blob/main/docs/adr/0013-alupec-and-conjunction-design.md).
- **Entry "you"** — exercises the `register` field with `bo` (neutral), `nhu` (formal, masculine), `nha` (formal, feminine).
- **The three "avoid" entries** (`because`, `not`, `more`) mirror exactly the three calque rules the Skrebe linter already enforces: `ALUPEC_CALQUE_PORQUE`, `ALUPEC_CALQUE_NAO`, `ALUPEC_CALQUE_MAS`. Installing this preset puts those rules into the glossary panel where translators see them at lookup time, not only at lint time.

## Bootstrap-curated entries (flagged for community review)

This being the catalog's first preset, several computing-domain terms are **constructed from Portuguese-to-ALUPEC mappings** rather than attested in a published Kriolu source. They are listed below; pull requests refining them with native-speaker input are welcome.

| Entry | Proposed target | Why it's flagged |
|---|---|---|
| `translation` → `tradusan` | Mechanical mapping (PT *tradução* → ALUPEC `ç→s`, `ão→an`) | No published attestation; `tradusu` / `tradusion` are plausible alternatives |
| `translate` → `traduzi` | Regular `-i` verb pattern | Not in Peace Corps dictionary; pattern is regular but the specific lemma isn't attested |
| `close` → `fitxa` | Extended from "lock" sense | Peace Corps lists `fitxa` primarily as "lock"; the document-close sense is an extrapolation |
| `save` → `guarda` | Extended from "protect/keep" sense | Computing/UI extension of a general verb; the alternative `salva` exists |

A maintainer will ask a native Kriolu speaker to review these before tagging `1.0.0`.

## Sources

- `docs/glossary.md` in [`deznode/papia-studio`](https://github.com/deznode/papia-studio) — project-normative terms (ALUPEC, Kriolu, dialect names, ASR/TM).
- [ADR-0013](https://github.com/deznode/papia-studio/blob/main/docs/adr/0013-alupec-and-conjunction-design.md) — canonical "and" conjunction design.
- Resolução n.º 48/2005 and Decreto-Lei n.º 67/98 — Cape Verde government ALUPEC spec.
- [Peace Corps Kriolu Dictionary](https://files.peacecorps.gov/multimedia/pdf/library/CV_Kriolu.pdf) — general lexicon (entries 6, 7, 13, 14, 15, 16).
- [Omniglot Cape Verdean Creole](https://www.omniglot.com/writing/caboverdean.htm) — ALUPEC quick reference.
- `arkhe/eval/gemini-2.5-flash-baseline.json` in `deznode/papia-studio` — community-reviewed gold translations.

## License

Released under the [MIT License](../../LICENSE). See `manifest.json` for authorship.
192 changes: 192 additions & 0 deletions presets/skrebe-translator-workflow/glossary.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
{
"schemaVersion": 1,
"entries": [
{
"source": "and",
"targets": [
{ "term": "ku", "preferred": true },
{ "term": "y" },
{ "term": "i" }
],
"policy": "must",
"partOfSpeech": "conjunction",
"notes": "Four-way choice. Use `ku` to coordinate noun phrases (e.g. \"Pandas ku NumPy\", \"pai ku mai\"). Use `y` (ALUPEC spec form per Decreto-Lei n.º 67/98) or `i` (community-accepted alternative) for clausal coordination (e.g. \"El ta lé i ta skrebi\"). NEVER use `e` — that is the copula \"is\" and flips meaning: \"Fásil di lé e skrebi\" misreads as \"easy to read IS write\". See ADR-0013."
},
{
"source": "but",
"targets": [
{ "term": "ma", "preferred": true }
],
"policy": "must",
"partOfSpeech": "conjunction",
"notes": "Kriolu \"but\" is `ma`, not `mas`. The unaccented `mas` is the comparative \"more\" (\"mas grandi ki kel\" = \"bigger than that\"). The accented `más` is Portuguese interference and never used in ALUPEC. Linter rule: ALUPEC_CALQUE_MAS."
},
{
"source": "ALUPEC",
"targets": [
{ "term": "ALUPEC", "preferred": true }
],
"policy": "must",
"partOfSpeech": "abbreviation",
"notes": "Preserve verbatim, uppercase. Stands for Alfabeto Unificado para a Escrita do Caboverdiano (Resolução n.º 48/2005). Do not translate, lowercase, or hyphenate."
},
{
"source": "Kriolu",
"targets": [
{ "term": "Kriolu", "preferred": true },
{ "term": "Kabuverdianu" }
],
"policy": "must",
"partOfSpeech": "noun",
"notes": "Cape Verdean Creole, ISO 639-3 `kea`. Both `Kriolu` and `Kabuverdianu` are accepted endonyms. Do NOT use Portuguese `Crioulo` — even without the cedilla it carries PT orthography assumptions."
},
{
"source": "write",
"targets": [
{ "term": "skrebi", "preferred": true }
],
"policy": "should",
"partOfSpeech": "verb",
"notes": "The verb that gives Skrebe its name. ALUPEC starts with `sk-` (not `esc-`) and ends in `-i` (not Portuguese `-er`). Example: \"El ta skrebi tudu dia\" (\"He writes every day\")."
},
{
"source": "read",
"targets": [
{ "term": "lé", "preferred": true }
],
"policy": "should",
"partOfSpeech": "verb",
"notes": "The acute accent on the stressed vowel is mandatory. Pairs idiomatically with `skrebi`: \"Fásil di lé i skrebi\" (\"easy to read and write\"). Do not write the Portuguese infinitive `ler`."
},
{
"source": "open",
"targets": [
{ "term": "abri", "preferred": true }
],
"policy": "should",
"partOfSpeech": "verb",
"notes": "Standard verb in both general and UI senses (\"abri un dokumentu\" = \"open a document\"). Final `-i`, not Portuguese `-ir`."
},
{
"source": "save",
"targets": [
{ "term": "guarda", "preferred": true }
],
"policy": "should",
"partOfSpeech": "verb",
"notes": "Used for \"save\" in the software/UI sense. Peace Corps lists the core meaning as \"protect/keep\" — naturally extended to the file-save context. The alternative `salva` exists but reads more Portuguese. Community review encouraged."
},
{
"source": "close",
"targets": [
{ "term": "fitxa", "preferred": true }
],
"policy": "should",
"partOfSpeech": "verb",
"notes": "ALUPEC digraph `tx` (not `ch`). Peace Corps lists the primary sense as \"lock\"; the document-close sense is a natural extension. Example: \"Fitxa kel dokumentu\". Community review encouraged."
},
{
"source": "translate",
"targets": [
{ "term": "traduzi", "preferred": true }
],
"policy": "should",
"partOfSpeech": "verb",
"notes": "Kriolu drops the Portuguese infinitive ending: PT *traduzir* → Kr *traduzi*. Follows the same `-i` verb pattern as `skrebi`, `abri`, `parti`. Not directly attested in Peace Corps — bootstrap term, pending community review."
},
{
"source": "translation",
"targets": [
{ "term": "tradusan", "preferred": true }
],
"policy": "should",
"partOfSpeech": "noun",
"notes": "Bootstrap calque from PT *tradução* with ALUPEC mappings (`ç` → `s`, `ão` → `an`). Not directly attested — pending community review. Alternative forms `tradusu` and `tradusion` exist in informal usage."
},
{
"source": "document",
"targets": [
{ "term": "dokumentu", "preferred": true }
],
"policy": "should",
"partOfSpeech": "noun",
"notes": "Standard Portuguese cognate with ALUPEC mapping (`c` → `k`, final `-o` → `-u`). Used in the computing/UI sense for any text artifact (e.g. a Skrebe `.papia.json` bundle)."
},
{
"source": "word",
"targets": [
{ "term": "palávra", "preferred": true }
],
"policy": "should",
"partOfSpeech": "noun",
"notes": "Acute on the stressed vowel; directly attested in the Peace Corps wordlist. Used for linguistic units in editor UI (e.g. word count)."
},
{
"source": "sentence",
"targets": [
{ "term": "frazi", "preferred": true }
],
"policy": "should",
"partOfSpeech": "noun",
"notes": "Directly attested. Used by Skrebe's sentence-segmentation pipeline when surfaced in UI."
},
{
"source": "project",
"targets": [
{ "term": "projektu", "preferred": true }
],
"policy": "should",
"partOfSpeech": "noun",
"notes": "Directly attested. ALUPEC uses `k` (not Portuguese `c` or `-ct-`). Used for a Skrebe translation project or workspace."
},
{
"source": "help",
"targets": [
{ "term": "djuda", "preferred": true }
],
"policy": "should",
"partOfSpeech": "verb",
"notes": "ALUPEC digraph `dj-` (not Portuguese `j-`). Attested in the project eval baseline (\"Obrigadu pa djuda-m oji\" = \"thanks for helping me today\"). Works as both verb (\"to help\") and noun (\"help\"). Do NOT use the Portuguese-leaning `ajuda`."
},
{
"source": "you",
"targets": [
{ "term": "bo", "preferred": true, "register": "neutral" },
{ "term": "nhu", "register": "formal" },
{ "term": "nha", "register": "formal" }
],
"policy": "should",
"partOfSpeech": "pronoun",
"notes": "`bo` is the default 2nd-person singular. `nhu` (addressing a man) and `nha` (addressing a woman) are the respectful forms used with elders or in formal address. Avoid Portuguese `você` (Brazilian PT influence)."
},
{
"source": "because",
"targets": [
{ "term": "porque" },
{ "term": "porkê" }
],
"policy": "avoid",
"partOfSpeech": "conjunction",
"notes": "Both forms are Portuguese interference. Use Kriolu `pamodi` or `pabia` instead. Enforced by linter rule ALUPEC_CALQUE_PORQUE. Example: \"N ka kre ba pamodi sa ta txobe\" (\"I don't want to go because it's raining\")."
},
{
"source": "not",
"targets": [
{ "term": "não" },
{ "term": "nao" }
],
"policy": "avoid",
"partOfSpeech": "adverb",
"notes": "Both forms are Portuguese (the tilde in `não` is ALUPEC-forbidden anyway). Kriolu negation is `ka`, placed before the verb (\"N ka kre ba\" = \"I don't want to go\"). Enforced by linter rule ALUPEC_CALQUE_NAO."
},
{
"source": "more",
"targets": [
{ "term": "más" }
],
"policy": "avoid",
"partOfSpeech": "adverb",
"notes": "The accented `más` is Portuguese interference. Kriolu \"more\" is `mas` (unaccented): \"mas grandi ki kel\" = \"bigger than that\". Beware: this same `mas` is correct for \"more\" but NEVER for \"but\" — for \"but\" use `ma` (see the \"but\" entry)."
}
]
}
32 changes: 32 additions & 0 deletions presets/skrebe-translator-workflow/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"schemaVersion": 1,
"id": "skrebe-translator-workflow",
"name": "Skrebe Translator Workflow",
"description": "Core vocabulary a Skrebe user encounters while translating English into Kriolu: editor verbs (open, save, read, write), workflow nouns (document, word, sentence, project), the conjunctions that trip up Portuguese speakers (and, but, because, not, more), and second-person register distinctions. The catalog's seed preset.",
"domain": "tech",
"version": "0.1.0",
"license": "MIT",
"entryCount": 20,
"dialects": ["santiago"],
"sourceLanguage": "en",
"targetLanguage": "kea",
"authors": [
{
"name": "Papia Studio",
"github": "@deznode",
"url": "https://papia.studio"
}
],
"maintainers": ["@deznode"],
"sources": [
"docs/glossary.md (deznode/papia-studio) — project-normative terminology for ALUPEC, Kriolu, dialect names, and ASR/TM concepts.",
"ADR-0013 (deznode/papia-studio) — canonical four-way 'and' conjunction design (ku / y / i / never-e).",
"Resolução n.º 48/2005 and Decreto-Lei n.º 67/98 — Cape Verde government ALUPEC orthography specifications.",
"Peace Corps Kriolu Dictionary — https://files.peacecorps.gov/multimedia/pdf/library/CV_Kriolu.pdf (general lexicon attestation).",
"Omniglot Cape Verdean Creole — https://www.omniglot.com/writing/caboverdean.htm (ALUPEC quick reference).",
"Gemini 2.5 Flash translation eval baseline (deznode/papia-studio, arkhe/eval/gemini-2.5-flash-baseline.json) — community-reviewed gold translations used for regression scoring."
],
"createdAt": "2026-05-19",
"updatedAt": "2026-05-19",
"tags": ["seed", "translator-workflow", "computing", "conjunctions"]
}