Files
Hankan/data/sentences.json
MechaCat02 b80deb2f6f 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>
2026-09-08 19:11:40 +02:00

765 lines
12 KiB
JSON

{
"note": "Glossed sentences. parts[] are [chunk, gloss]; the LAST chunk is the 서술어 (predicate).",
"levels": {
"A": "subject + ending word",
"B": "manhwa dialogue"
},
"sentences": [
{
"lvl": "A",
"ko": "나 배고파.",
"en": "I'm hungry.",
"parts": [
[
"나",
"I"
],
[
"배고파",
"am hungry"
]
]
},
{
"lvl": "A",
"ko": "너 어디 가?",
"en": "Where are you going?",
"parts": [
[
"너",
"you"
],
[
"어디",
"where"
],
[
"가",
"go"
]
]
},
{
"lvl": "A",
"ko": "이거 뭐야?",
"en": "What is this?",
"parts": [
[
"이거",
"this thing"
],
[
"뭐야",
"is what"
]
]
},
{
"lvl": "A",
"ko": "그 사람 누구야?",
"en": "Who is that person?",
"parts": [
[
"그",
"that"
],
[
"사람",
"person"
],
[
"누구야",
"is who"
]
]
},
{
"lvl": "A",
"ko": "우리 친구야.",
"en": "We're friends.",
"parts": [
[
"우리",
"we"
],
[
"친구야",
"are friends"
]
]
},
{
"lvl": "A",
"ko": "나 진짜 슬퍼.",
"en": "I'm really sad.",
"parts": [
[
"나",
"I"
],
[
"진짜",
"really"
],
[
"슬퍼",
"am sad"
]
]
},
{
"lvl": "A",
"ko": "이 책 좋아.",
"en": "This book is good. / I like this book.",
"parts": [
[
"이",
"this"
],
[
"책",
"book"
],
[
"좋아",
"is good"
]
]
},
{
"lvl": "A",
"ko": "저 사람 커.",
"en": "That person is big.",
"parts": [
[
"저",
"that over there"
],
[
"사람",
"person"
],
[
"커",
"is big"
]
]
},
{
"lvl": "A",
"ko": "여기 위험해.",
"en": "It's dangerous here.",
"parts": [
[
"여기",
"here"
],
[
"위험해",
"is dangerous"
]
]
},
{
"lvl": "A",
"ko": "너 왜 그래?",
"en": "What's wrong with you?",
"parts": [
[
"너",
"you"
],
[
"왜",
"why"
],
[
"그래",
"are like that"
]
]
},
{
"lvl": "A",
"ko": "밥 먹어.",
"en": "Eat. / I'm eating.",
"parts": [
[
"밥",
"rice, a meal"
],
[
"먹어",
"eat"
]
]
},
{
"lvl": "A",
"ko": "물 마셔.",
"en": "Drink some water.",
"parts": [
[
"물",
"water"
],
[
"마셔",
"drink"
]
]
},
{
"lvl": "A",
"ko": "나 갈게.",
"en": "I'm off.",
"parts": [
[
"나",
"I"
],
[
"갈게",
"will go"
]
]
},
{
"lvl": "A",
"ko": "그거 안 돼.",
"en": "That won't work.",
"parts": [
[
"그거",
"that thing"
],
[
"안",
"not"
],
[
"돼",
"becomes, works"
]
]
},
{
"lvl": "A",
"ko": "시험 언제야?",
"en": "When's the exam?",
"parts": [
[
"시험",
"exam"
],
[
"언제야",
"is when"
]
]
},
{
"lvl": "A",
"ko": "소문 들었어?",
"en": "Did you hear the rumour?",
"parts": [
[
"소문",
"rumour"
],
[
"들었어",
"heard"
]
]
},
{
"lvl": "A",
"ko": "쟤 우리 반이야.",
"en": "That kid is in our class.",
"parts": [
[
"쟤",
"that kid"
],
[
"우리",
"our"
],
[
"반이야",
"is class"
]
]
},
{
"lvl": "A",
"ko": "증거 없어.",
"en": "There's no evidence.",
"parts": [
[
"증거",
"evidence"
],
[
"없어",
"does not exist"
]
]
},
{
"lvl": "A",
"ko": "이제 끝났어.",
"en": "It's over now.",
"parts": [
[
"이제",
"now"
],
[
"끝났어",
"has ended"
]
]
},
{
"lvl": "A",
"ko": "검 들어.",
"en": "Pick up the sword.",
"parts": [
[
"검",
"sword"
],
[
"들어",
"lift, pick up"
]
]
},
{
"lvl": "B",
"ko": "나 회귀했어.",
"en": "I've regressed.",
"parts": [
[
"나",
"I"
],
[
"회귀했어",
"did regression"
]
]
},
{
"lvl": "B",
"ko": "이번엔 죽지 않아.",
"en": "This time I won't die.",
"parts": [
[
"이번엔",
"this time"
],
[
"죽지 않아",
"do not die"
]
]
},
{
"lvl": "B",
"ko": "던전이 열렸어.",
"en": "The dungeon has opened.",
"parts": [
[
"던전이",
"the dungeon"
],
[
"열렸어",
"has opened"
]
]
},
{
"lvl": "B",
"ko": "저 몬스터 보스야.",
"en": "That monster is the boss.",
"parts": [
[
"저",
"that over there"
],
[
"몬스터",
"monster"
],
[
"보스야",
"is the boss"
]
]
},
{
"lvl": "B",
"ko": "스킬 각성했어?",
"en": "Did you awaken a skill?",
"parts": [
[
"스킬",
"skill"
],
[
"각성했어",
"did awaken"
]
]
},
{
"lvl": "B",
"ko": "길드에서 연락 왔어.",
"en": "The guild got in touch.",
"parts": [
[
"길드에서",
"from the guild"
],
[
"연락",
"contact"
],
[
"왔어",
"came"
]
]
},
{
"lvl": "B",
"ko": "그 녀석 진짜 강해.",
"en": "That guy is seriously strong.",
"parts": [
[
"그",
"that"
],
[
"녀석",
"guy"
],
[
"진짜",
"really"
],
[
"강해",
"is strong"
]
]
},
{
"lvl": "B",
"ko": "도망쳐! 빨리!",
"en": "Run! Quickly!",
"parts": [
[
"도망쳐",
"run away"
],
[
"빨리",
"quickly"
]
]
},
{
"lvl": "B",
"ko": "내가 지킬게.",
"en": "I'll protect you.",
"parts": [
[
"내가",
"I (as the one doing it)"
],
[
"지킬게",
"will protect"
]
]
},
{
"lvl": "B",
"ko": "널 믿어.",
"en": "I trust you.",
"parts": [
[
"널",
"you (object)"
],
[
"믿어",
"trust"
]
]
},
{
"lvl": "B",
"ko": "잠깐만, 너 지금 뭐 했어?",
"en": "Hold on — what did you just do?",
"parts": [
[
"잠깐만",
"hold on"
],
[
"너",
"you"
],
[
"지금",
"now"
],
[
"뭐",
"what"
],
[
"했어",
"did"
]
]
},
{
"lvl": "B",
"ko": "말도 안 돼. 네가 어떻게 여기 있어?",
"en": "No way. How are you here?",
"parts": [
[
"말도 안 돼",
"that's absurd"
],
[
"네가",
"you"
],
[
"어떻게",
"how"
],
[
"여기",
"here"
],
[
"있어",
"are, exist"
]
]
},
{
"lvl": "B",
"ko": "나 너 좋아해.",
"en": "I like you.",
"parts": [
[
"나",
"I"
],
[
"너",
"you"
],
[
"좋아해",
"like"
]
]
},
{
"lvl": "B",
"ko": "우리 헤어지자.",
"en": "Let's break up.",
"parts": [
[
"우리",
"we"
],
[
"헤어지자",
"let's part"
]
]
},
{
"lvl": "B",
"ko": "오해야. 진짜야.",
"en": "It's a misunderstanding. Really.",
"parts": [
[
"오해야",
"is a misunderstanding"
],
[
"진짜야",
"is true"
]
]
},
{
"lvl": "B",
"ko": "왜 말 안 했어?",
"en": "Why didn't you say anything?",
"parts": [
[
"왜",
"why"
],
[
"말",
"words"
],
[
"안",
"not"
],
[
"했어",
"did"
]
]
},
{
"lvl": "B",
"ko": "심장이 두근두근해.",
"en": "My heart is pounding.",
"parts": [
[
"심장이",
"the heart"
],
[
"두근두근해",
"goes thump-thump"
]
]
},
{
"lvl": "B",
"ko": "그 사람이랑 계약결혼 했어.",
"en": "I did a contract marriage with him.",
"parts": [
[
"그 사람이랑",
"with that person"
],
[
"계약결혼",
"contract marriage"
],
[
"했어",
"did"
]
]
},
{
"lvl": "B",
"ko": "선배가 불렀어.",
"en": "The senior was calling for you.",
"parts": [
[
"선배가",
"the senior"
],
[
"불렀어",
"called"
]
]
},
{
"lvl": "B",
"ko": "범인은 저 사람이야.",
"en": "The culprit is that person.",
"parts": [
[
"범인은",
"as for the culprit"
],
[
"저 사람이야",
"is that person"
]
]
},
{
"lvl": "B",
"ko": "복수할 거야.",
"en": "I'm going to take revenge.",
"parts": [
[
"복수할",
"to take revenge"
],
[
"거야",
"is the plan"
]
]
},
{
"lvl": "B",
"ko": "배신자는 죽어.",
"en": "Traitors die.",
"parts": [
[
"배신자는",
"as for traitors"
],
[
"죽어",
"die"
]
]
},
{
"lvl": "B",
"ko": "형사님, 여기 좀 보세요.",
"en": "Detective, take a look over here.",
"parts": [
[
"형사님",
"detective (respectful)"
],
[
"여기",
"here"
],
[
"좀",
"just, a bit"
],
[
"보세요",
"please look"
]
]
},
{
"lvl": "B",
"ko": "괜찮아? 다쳤어?",
"en": "Are you okay? Are you hurt?",
"parts": [
[
"괜찮아",
"are you fine"
],
[
"다쳤어",
"got hurt"
]
]
}
]
}