chore: scaffold, CI, and the export bundle verbatim

The export bundle is the input to this port, not a sketch: the curriculum,
the tutor prompt and the five logic modules are finished and tested. They
land here byte-identical and stay that way.

  diff -r export/data data && diff -r export/lib lib
  diff -r export/prompt prompt && diff export/validate.mjs validate.mjs

data/, lib/, prompt/ and validate.mjs sit at the repo root so validate.mjs
runs verbatim with no path edits. All four are excluded from lint and
formatting — they are not ours to restyle. Types for lib/ live alongside in
types/ rather than as sibling .d.ts files, so the verbatim check stays a
plain directory diff.

CI runs the curriculum gate first, before anything else can pass:

  node validate.mjs   PASS — 0 blocking, 0 advisory

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
MechaCat02
2026-09-08 19:11:40 +02:00
commit b80deb2f6f
22 changed files with 7984 additions and 0 deletions

45
NOTICE.md Normal file
View File

@@ -0,0 +1,45 @@
# Third-party data notices
Hankan's application code is the authors'. The dictionary data it ships is not, and
carries share-alike obligations. The notices below are also surfaced in the app.
## Dictionary
Exactly one of these is used, depending on which source was vendored at build time.
`app/public/dict/manifest.json` records which one produced the shipped files.
### 한국어기초사전 (Basic Korean Dictionary) — preferred
Published by 국립국어원 (National Institute of Korean Language).
> 이 저작물은 크리에이티브 커먼즈 저작자표시-동일조건변경허락 2.0 대한민국
> 라이선스에 따라 이용할 수 있습니다.
한국어기초사전, 국립국어원 — CC BY-SA 2.0 KR
<https://creativecommons.org/licenses/by-sa/2.0/kr/>
Audio and image media referenced by the dictionary are **excluded** from that licence.
Hankan stores media URLs only and redistributes no media files.
### English Wiktionary, via kaikki.org — fallback
Extracted by wiktextract (Tatu Ylonen, LREC 2022; wiktextract itself is MIT).
Content is CC BY-SA 3.0 and GFDL, inherited from English Wiktionary.
<https://kaikki.org/dictionary/Korean/> · <https://en.wiktionary.org/>
## Frequency data
hermitdave/FrequencyWords, `content/2018/ko` — derived from OpenSubtitles2018 via OPUS.
Word list content is CC BY-SA 4.0; the project's code is MIT.
<https://github.com/hermitdave/FrequencyWords>
## A note on licence compatibility
CC BY-SA 2.0 KR and CC BY-SA 4.0 are not automatically compatible in a single derived
work. Hankan therefore keeps frequency data as a separately-attributed adjunct: it
populates the `lemma.freq_rank` column only, and is not merged into the dictionary
content itself. Both notices ship together.
Share-alike attaches to the derived dictionary data, not to Hankan's application code.