Skip to content
C.W.K.
Lesson 01 of 05 · published

Moments, Not Sentences

~15 min · product, design, oop, language

Level 0First Word
0 XP0/47 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

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 translatorSpark
Unit of workA sentenceA moment: place, time, situation, what was seen or heard
After the answerForgottenKept, with the turn and brain that produced it
The next encounterStarts from zeroStarts from what Dad already met
What growsNothingOne 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.
Principle: Decide what your product refuses to become before you build it. Every refusal on this list becomes a boundary the rest of this quest keeps running into.

Code

cwkSpark, backend/corpus.py: what a moment is made of (verbatim, lines 34-50)·python
MOMENT_KINDS = frozenset({"photo", "conversation", "text", "live", "recall"})
# for-pippa: the downscaled copy a turn sends Pippa. vision-lines: the
# device's located text lines with their positions, as JSON.
MEDIA_ROLES = frozenset(
    {
        "original",
        "for-pippa",
        "vision-lines",
        "recording-dad",
        "recording-other",
        "attachment",
        "translated-picture",
    }
)
TURN_KINDS = frozenset(
    {"practical", "explain", "live", "card", "relay", "version", "review", "recall", "picture", "exchange"}
)
cwkSpark, backend/turns.py: the explain turn asks for roots, never invented ones (verbatim, lines 305-313)·python
            "Name the roots of the words that carry the line where they are real and worth knowing: "
            "Latin or Greek etyma, Arabic loanwords in Spanish, hanja shared across Korean, Japanese "
            "and Chinese. Mention them in your words, and record each in the same block, one line per "
            "root, with the expression it lies under:",
            "",
            '```spark\n{"type": "root", "root": "lat. aqua", "language": "la", "gloss": "water", '
            '"expression": "agua"}\n```',
            "",
            "No root when none is real; never invent one.",

External links

Exercise

Pick a tool you use that answers and then forgets: a translator, a unit converter, a search box. Design the moment record that would let it remember. List the fields you would capture at the time of the encounter, mark which of them only the device can know, and name one class that a pile of those moments would reveal and no single moment shows.
Hint
Start from what is lost when the app closes: place, time, situation, what the person wanted. The class is whatever two moments far apart in time turn out to share, the way agua and acqua share Latin aqua.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign in — Please sign in to comment.

No comments yet — be the first.