Back to corpus
research noteexperiment writeup candidatescore 24
NKO-2.1 Complete — Swift Phonetics Port
**Task:** Port NKoPhonetics — IPA mappings, tone marks, N'Ko Unicode ranges to Swift **Status:** ✅ COMPLETE **Date:** 2026-02-19 **Build:** `swift build` ✅ | `swift test` ✅ (106 tests, 0 failures)
Full HTML reader
Read the full artifact
Extracted abstract or opening context
**Task:** Port NKoPhonetics — IPA mappings, tone marks, N'Ko Unicode ranges to Swift **Status:** ✅ COMPLETE **Date:** 2026-02-19 **Build:** `swift build` ✅ | `swift test` ✅ (106 tests, 0 failures)
Native Swift port of `nko/phonetics.py` (820 lines Python → 1,995 lines Swift across 9 source files + 1 test file). Every class, method, constant, and enum from the Python module has a Swift-idiomatic equivalent.
| File | Lines | Purpose | |------|-------|---------| | `NKoPhonetics.swift` | 386 | Main public API — unified phonetics engine | | `CharacterTables.swift` | 344 | Canonical character data (singleton, O(1) lookup) | | `IPAMapper.swift` | 272 | IPA conversion, reverse mapping, syllabification | | `NKoDataset.swift` | 180 | Codable model for nko-unified.json | | `UnicodeRange.swift` | 137 | Unicode block constants, range checks, script detection | | `CharInfo.swift` | 100 | Immutable character info struct (frozen dataclass equivalent) | | `ToneType.swift` | 76 | Tone type enum with IPA diacritics | | `Phoneme.swift` | 53 | Phoneme struct for TTS pipeline | | `CharCategory.swift` | 38 | Character classification enum | | `PhoneticTests.swift` | 409 | 71 unit tests covering all public API |
**Location:** `shared/SwiftCore/Sources/NKoPhonetics/` **Tests:** `shared/SwiftCore/Tests/PhoneticTests.swift` **Resource:** `shared/SwiftCore/Sources/NKoPhonetics/Resources/nko-unified.json`
- **`CharInfo`** — Immutable struct: `char`, `codepoint`, `code`, `name`, `category`, `ipa`, `latin`, `toneType?`, `digitValue?`, `punctuationEquivalent?` - **`Phoneme`** — Struct: `symbol`, `sourceChar`, `audioHint`, `durationMs`, `tone?` - **`ToneType`** — Enum: `.high`, `.low`, `.rising`, `.long`, `.veryLong`, `.nasal`, `.nasalAlt`, `.mid`, `.unknown` - **`CharCategory`** — Enum: `.vowel`, `.consonant`, `.digit`, `.toneMark`, `.combining`, `.punctuation`, `.other` - **`NKoUnicode`** — Static utilities: `blockStart/End`, `isNKo(_:)`, `detectScript(_:)`, etc. - **`IPAMapper`** — Static methods: `toIPA(_:)`, `toPhonemes(_:)`, `ipaToNKo(_:)`, `syllabifyIPA(_:)` - **`NKoDataset`** — Codable model for nko-unified.json (vocabulary, proverbs, characters, meta)
Promotion decision
What has to happen next
Attach run IDs, datasets, metrics, and reproduction commands.
Why this is not always a full paper yet
Corpus pages are public-safe readers for discovered workspace artifacts. They are not automatically final papers. A corpus item becomes a polished paper only after the editable source, evidence checkpoints, references, figures, render path, and release status are attached through the paper schema.