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>
765 lines
12 KiB
JSON
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"
|
|
]
|
|
]
|
|
}
|
|
]
|
|
} |