The complaint
Spark starts from one remark Dad made on the day the app was born.
사진까지 지원하는 번역 앱은 많은데 그게 단순 번역이라는 거지. 문맥이 생기지도 않고.
"Plenty of translation apps even handle photos, but that's just plain translation. No context ever builds up." Point a phone at a menu, get the menu back in Korean, close the app. Tomorrow the same word on a different menu is a stranger again. Every encounter starts from zero, and nothing Dad met yesterday helps him today. That is the gap Spark was designed to close.
Sentences forget, moments accumulate
A translation app works in sentences: one in, one out, then it forgets. In programming terms it behaves like a pure function. That purity is why it is fast and cheap, and also why it never gets to know you.
Spark works in moments. A moment is one encounter with language: where and when it happened, the situation (a restaurant, a station, a pharmacy counter), what Dad saw or heard, and what he wanted to say. Everything I produce about it hangs off the moment with its lineage: each line I read, each card I wrote for him, each expression I suggested, and the turn and brain behind every one.
| A translator | Spark | |
|---|---|---|
| Unit of work | A sentence | A moment: place, time, situation, what was seen or heard |
| After the answer | Forgotten | Kept, with the turn and brain that produced it |
| The next encounter | Starts from zero | Starts from what Dad already met |
| What grows | Nothing | One language graph across every language |
The engine's vocabulary shows the shape in a few lines. A moment has a kind, its media files play named roles, and every result comes from a turn of a known kind (the first code block). One small honesty check while you read it: the architecture document lists three kinds of moment (photo, conversation, text), and the engine accepts five, because the live camera and quick recall make moments too. Where a document and the code disagree, this quest follows the code.
Moments are instances, roots are classes
This is where Dad's way of seeing the world comes in. A moment is an instance: this menu, this sign, this sentence at this table. Behind instances sit classes. Latin aqua is a class, and Spanish agua, Italian acqua, Portuguese água and Catalan aigua are its instances. The hanja 學 is a class too: Korean 학교 and the 学校 of Japanese and Chinese all inherit from it.
A word list per language memorizes instances one at a time. Spark asks me to reverse-engineer the classes behind them, so a new word attaches to something Dad already knows. One graph grows across every trip, where a translator would leave one flashcard pile per country. If this frame is new to you, OO Quest builds it from the ground up, and its Track 3 (Language) runs the same move on English phrasal verbs: stop collecting instances and find the mold.
The engine makes that request in plain words when Dad taps a line, and it adds the one rule that matters most (the second code block). A root that sounds plausible and is not real would mislead every later word that attaches to it, so an empty answer beats an invented one. Track 3 of this quest shows how those root lines are parsed and recorded. Track 8 shows the root pages they build, and says plainly which parts are still design.
What Spark is not
The architecture writes the negative space down, because each item is a product someone could build by accident:
- A phrasebook or flashcard deck. Every expression comes from a real moment, met there or suggested for it.
- A second Pippa. Explanations, threads and routing stay in cwkPippa. Lesson 4 is about that line.
- A crumb warehouse. Moments borrowed from other family apps stay theirs and are linked, never copied.
- An on-device translator. The real Pippa does the reading. Lesson 2 is that ruling.
- A drill. Review has no timers, streaks or scores. It is re-meeting what Dad met.
- A second voice mode. Dad's spoken talk with me is cwkPippa's voice mode, used here as it is.