Profile and stats

how this workspace sees you, and what the record measures
Generated 2026-09-29 by scripts/profile.mjs. The top half is what has been settled about you and is read by every session before it does anything else. The bottom half is measured, and it grows.

What is settled

What you are aiming at
125
days to exam
2027-02-01 — locked by you, not estimated
7/30
units done
Phase 1 — A1 foundations (U01–U10)
41/79
grammar taught
individual pieces of grammar, out of everything B1 needs
The languages you hold
Romanian is the target. The rest are what every explanation is built out of — and the order matters more than the list.
Ukrainiannative First anchor for every contrast that has one.
Russiannative Second anchor — only where it is distinctly the most illuminating.
EnglishC1 The Romance/Latinate layer, and the meta-language of this workspace.
German~A1, continuing after Romanian Concept-layer anchor. Ranked below Ukrainian; see below.
Which language a hook comes from
  1. Ukrainian first, whenever a UA contrast exists and is meaningful.
  2. Russian only where it is distinctly the best explanation — RU ы for î/â, the unstressed-о reduction that anchors ă, a RU-specific cognate Ukrainian lacks.
  3. English for the Romance/Latinate layer.
  4. German — grammatical concepts only, and only where the Slavic anchor is absent. Never for vocabulary; the A1 lexicon is too thin to carry a hook, and Ukrainian or English will almost always be closer.
How a resemblance gets described
Do not call a cognate or a transferable structure "free". Say it resembles, matches, or maps directly to the known language. "Free" overstates the case — the placement probe measured a iubi (UA любити, a close resemblance) being read as iulie, "July" — and it distracts more than it helps. Retired from the ledgers and reference docs 2026-08-07 at the learner's request; frozen snapshots and append-only logs keep the old wording, as they must.
What this workspace has settled about you
Facts about how you work that a session must not re-derive, each dated from when it was settled. If one of these has gone stale, it is worth saying so — every session reads them before it reads anything else.
Keyboard
A non-Romanian layout with Option dead keys. This produces ǎ U+01CE, ş U+015F, ţ U+0163 and ś U+015B — visually equivalent look-alikes for ă ș ț. Normalize silently, score as fully correct, never flag or tally. A knowing choice, not a language fact; the hard rule is in ../../CLAUDE.md. A missing diacritic is a different thing and remains a real error: adresa for adresă is a different word. The list is open, not closed — ś U+015B (s-acute, for ș) turned up on 2026-08-09 in faceśti and numeśti, four codepoints in, and š U+0161 (s-caron, also for ș) on 2026-08-10 in ši, five in. Judge by the principle, not by the enumeration: a character that is a dead-key neighbour of the Romanian letter is the input method; a character that is simply absent is an error. Two sessions running have found a new one simply by looking, which is the strongest available evidence that the enumeration will never be complete and must not be treated as the rule.
The learner declares typos, and the declaration settles it 2026-08-09
Told that uncrainean and stundent carried an inserted n, the learner said: "both times just typos, I didn't mean to add that." That ends the question — drop them from the marking, the tally and the ledger notes, and do not re-derive them from the text later. This is the same principle as the keyboard rule above, one level up: the learner is the authority on what their hands did, and a session cannot tell a motor slip from a memory failure by looking at the output. Ask when a pattern repeats and looks mechanical; accept the answer.
Ask one typo question per message, or number them 2026-08-12
The declaration rule above is load-bearing — a declared slip leaves the marking, the tally and the ledger — so the question that invokes it must be impossible to answer ambiguously. A session asked about two items in one message (piciore, objecte); the reply was two lines, both labelled piciore, and the intended mapping was recoverable only from the order plus a same-word contradiction. It happened to be read correctly and the marking would have changed if it had not. Numbering costs nothing.
Flags their own uncertainty inline, and volunteers a second form beside a correct one 2026-08-19
Two shapes in one drill: "Ai cane? (maybe au, not sure)", and "o oglindă, ună" — where the first answer was right and ună is not a form at all. Both are output and both get read under the grade-everything rule, but they are not the same thing. An inline "not sure" is a confidence report: record it beside the mark, because a right answer the learner distrusts and a right answer they own are different states and only one of them is finished. A volunteered second form is an answer: say briefly that it is wrong, and do not let it change the mark on the item they actually answered. Neither is a request to be re-asked.
Vowel-pair order is mixed — ask, never assume 2026-08-12
Four sightings are on record with the right vowels in the wrong order: saere for seara, dimeniața for dimineața, ucarini for ucrainean, frumaos for frumoas(ă). Asked whether these are finger slips or the real thing, the learner answered "mixed, depends on the word". So this class gets no blanket treatment in either direction: a session asks about the item in front of it, drops a declared slip entirely, and codes a declared-real one as ORTH-VOW (../mechanics/error_taxonomy.md). Before this answer the whole class was uncodable and therefore absent from the tally.
Many parallel sessions, always returning cold
Placement statements, session tab names, and the Next pointer are one requirement wearing three hats. Assume nothing carries over from a previous conversation.
Two study sessions in one day is a thing that happens 2026-08-12 SES-014
SES-014 cleared the whole backlog in ~90 minutes, and SES-015 opened a few hours later on the same date. Nothing in the scheduling design expects this: tier 1 has a zero-day interval, so queue.mjs reported 47 items "due" that had all been answered that morning, and the previous session's Next pointer carried a date-based embargo ("nothing before 2026-08-13") that the queue cannot see. A session must check the last column, not just the due count, before treating the queue as work. One occurrence, recorded because the second session had to derive the whole policy from scratch mid-flow — which is exactly what this file exists to prevent.
Seventy-seven answers in one sitting was fine, and they said so unprompted 2026-08-19
A five-block queue drill was budgeted as "roughly fifty items"; multi-part questions made that 77 answers, and the session reported the gap at close-out as an overrun. The learner's reply: "to my opinion the volume was fine, actually." Take that as the calibration, not the number that was agreed. This is the only capacity reading on record for a five-block sitting, and it matters in one direction specifically: with a backlog over a hundred items, a session that quietly shrinks the block out of caution is costing real progress. What needs fixing is the unit a budget is agreed in — items against answers — not the size.
Preservation beats economy
No size limit on generated artifacts — audio embedded in every visual, nothing stripped to save bytes. Stated 2026-07-31.
Test items name the form. No personas 2026-08-09
"I don't like all those personas, this is simply distracting — phrasing the form or simply stating it in Romanian is much better." Write a avea · dumneavoastră or Ce mai ___ ? · tu, not "asked of your landlord". Invent a situation only when the situation is itself the thing being tested.
Being asked again is how the learner remembers 2026-08-09
Re-asking something whose answer was published earlier in the session is wanted, not a flaw: "it makes me remember stuff when I am being asked about it." The answer-leak rule is therefore scoped to a single message. What a re-ask may never do is carry a score or move a tier — ../mechanics/session_format.md → Re-exposure.
Marking goes in a table first, prose after 2026-08-17
"Your assessments of my answers should always come in tables first, paragraphs with details after that are welcome." One row per item — what was asked, what they wrote, the target, a short label — including withdrawn and unanswered items, so the row count matches what was asked. The diagnosis, the pattern and the teaching go below the table. The learner reads a marked set to answer "how did I do" before anything else; prose-first marking makes them hunt for their own items inside the explanation. Applies to unscored practice rounds and re-exposure, not only to graded sets.
Plain language at the moments that matter
now a mechanic, not a fact about this learner: ../mechanics/narration.md owns it (§ 3, and § 2 for the commands and paths that were never worth showing at all). It sat here as a profile bullet until 2026-08-17, which put a rule every session obeys in the one file no machinery change could reach. What is genuinely specific to this learner stays here: they audit the narration — see the next bullet — so a number said plainly is also a number they will check.
Audits the workspace mid-exercise
The learner has caught untaught material being scored, a coverage label that was false, and a script that had never run. Treat a "have we actually studied this?" question as reliable evidence that something upstream is wrong, not as a learner doubt to reassure.
Their bug reports are diagnostic, and the detail they volunteer is the useful one 2026-08-12
Told a page's audio was silent, the session's first hypothesis was that the learner was looking at the wrong copy — the chat preview rather than the real page. The learner's reply closed that off in one line and supplied the deciding fact: "none work, hosted or local … I click on sound button and it doesn't even change state." A button that does not change state is not an audio fault at all, and that single observation localised a duplicated click handler that the audio-wiring test could not see. So: take the reported symptom at face value and follow it, rather than first explaining why the learner might be looking in the wrong place. This is the same rule as the line above, one domain over — it applies to the tooling, not only to the teaching.
Prefers the two-layer reveal for practice surfaces 2026-08-10
"This page has an awesome mechanism to practice material with batch reveal filter + per element reveal … I want to have it when it is meaningful for drilling/repeating/refining material." Said of the U01 deck. The shape: a page-wide mode filter that conceals one whole side (RO→EN / EN→RO), plus a per-item reveal inside it. Reference implementation: scripts/deck.mjs → work/visuals/deck.html, which also fixes the old deck's leak (grammar rows and notes conceal with the answer). Any drill or repair sheet that quizzes material should use this shape; teach pages keep their inline guided attempts.
Prefers loops to single passes SES-007
Given the choice, the learner asks for test → analysis → correction → retest rather than one pass and a score. The preference is real; the claim that it outperformed single-pass shapes is retracted (audited 2026-08-09) — SES-007's 43% → 86% re-asked its own questions after publishing the key. What the loop demonstrably delivers is its diagnosis step; see ../mechanics/session_format.md → the repair loop.
Audits the exercise, not just the material
On 2026-08-09 the learner read a 16-item drill and said "almost all of the answers were obvious from the other questions in the same exercise" — which was true of 14 of them, and had been true of earlier sessions nobody checked. Sessions here get inspected as designs, not only as content.
Audits the plan, not only the material and the exercise 2026-08-15
Told at close-out that the next lesson was the present tense, the learner asked: "do you mean that next lesson will be this topic? I thought that it will be Articolul hotărât part 2, where we will discuss cases when it is used." They were right, and the cause was structural: U05's curriculum bullet named article usage and topics.md carried no row for it, so the aspect was invisible to routing — every Placement beat and every Next pointer is derived from that map. The session had promised the topic on its own teaching page and then pointed elsewhere. This is the third domain the learner audits, after the material and the exercise design, and it is the one the workspace has the least defence against: a missing row produces silence, not a wrong answer. Treat "I thought the next session was X" as a routing bug report, the same way a "have we actually studied this?" is treated as a coverage bug report.
Asks for forward orientation, not just current position 2026-08-15
Immediately after, the learner asked to be oriented across "the next several sessions". The placement statement answers where am I; it does not answer what is the sequence and why. Worth having the next few blocks and their dependencies ready at close-out, not only the single Next pointer.

What the record measures

What has been measured about you
Not assumptions — each of these was found by a session and carries the evidence it was found in. This is the half of the page that grows.
The Romance layer fires unprompted; the Slavic layer does not — the learner reaches for English/Romance shapes and never for Ukrainian unless a cognate is named out loud (../snapshots/2026-07-30_placement.md). 2026-07-30
Consequence: every Slavic hook must be stated at first contact, every time.
Documenting a false friend does not inoculate against it SES-007
Drilling closed what annotation had not (SES-007).
Words are stored inside their frames and cannot always be retrieved alone SES-010
(SES-010, ERR-018). Asked for cine, cum and unde as bare items, the learner scrambled all three. Ten minutes later, with nothing taught in between, he produced Cine este profesor?, Unde locuiești? and Cum vă numiți? — all correct. Consequence: "recognition beats production" is too coarse a description of this learner. Production succeeds when the frame comes with it; what fails is the free-standing lexical entry. A session must say which of the two it is testing, because the chunk test will keep reporting success while the entry stays broken. Update (SES-011, five hours later): all five interrogatives came back correct bare and in frame, 5/5 and 4.5/5. Read that carefully — they had been drilled that morning, so it measures same-day repair, not retention. The finding above is not withdrawn; it is awaiting its first honest test at the 3-day interval.
Forms are assembled from the visible stem, not retrieved — and the strategy hides itself by mostly working SES-011
(SES-011, ERR-022; the mechanism is ERR-008's). Given faceți and asked for the tu form, the learner produced face- + -ști, borrowing an ending from ești. The identical shape produced avesti from av- + ești. But of the four verb pairs ever taught, three have stems that do not move, so assembly returns the right answer for them and looks like knowledge. It fails only where the stem changes — fac + i, not face + something. Consequence: a zone can score 88% and still be running the wrong procedure, and only an item whose stem shifts will show it. Pick test items that can distinguish the two.
A word learned in one direction is not learned in the other SES-010
(SES-010, ERR-019). a locui was read correctly as "to live", then produced for "to work" minutes later; the same asymmetry hit a înțelege / a învăța. RO→EN and EN→RO are two memories, not two views of one, and only one of them has been built. Anything that drills recognition leaves the other untouched — which is why srs.md's ladder makes the EN→RO rungs mandatory and gates tier 4 behind producing the whole package once.
Recognition and production split by a factor of five, measured in one sitting SES-014
(SES-014, 2026-08-12). A recognition sweep of the solid tier read 100% (10/10, RO→EN, at a genuine 7-day interval). Production of the newest intake read 17% (EN→RO, bare word). The same plural rule ran at 89% on securely-known words and 25% on shaky ones. This is the quantified version of the ERR-019 finding above — two memories, not two views of one — and it is what prompted the learner to ask whether the review direction should be tiered. Adopted 2026-08-12 by the housekeeping pass: srs.md's ladder now runs RO→EN at tier 1, EN→RO bare at tier 2, and the full package as the tier-3 gate into "owned". One caveat belongs with the number: the 17% set asked tier-1 words for the full article+singular+plural package, which is the tier-3 question. Part of that gap is instrument.
A word-level fact written into a ledger note does not install it SES-014
(SES-014 retro, 2026-08-12). Of 16 words introduced 2026-08-10, 3 survived to 08-12 — and all sixteen already carried a transfer hook in notes, written by the teaching session. Held-language hooks (підлога, канапа, перина, глядіти, cutlery, bureau) died at the same rate as ones in languages the learner does not speak. Consistent with SES-007's documenting a false friend does not inoculate against it. Confounded, and say so when citing it: no session ran on 08-11, so those words were met once and never reviewed before the test — the variable was intake volume and interval, not the hook. See transfer.md → The three assets.
Full transfer inventory and the traps: transfer.md.
End-of-lesson scores
Each lesson ends with a check on that day's material, read as a percentage so runs of different lengths compare. Landing inside the band is the goal, not beating it — 60–70% means the material was pitched right. Two in a row above 80% means it was too easy; below 50% means slow down. Drills, reviews and mocks have no check, so they leave no bar — the gaps are not missed sessions.
55%
70%
72.5%
77%
31%
56.3%
83.3%
33.3%
83.3%
83.3%
07-31
07-31
08-03
08-07
08-12
08-15
08-20
08-25
09-06
09-29
Grammar and vocabulary, separately — only the grammar half is graded against the band. A single blended number read pace down three lessons running while the clean grammar block inside each read pace up.
2026-09-29SES-032 grammar 83.3% · vocabulary 25%
2026-09-06SES-029 grammar 83.3% · vocabulary 62.5%
2026-08-25SES-027 grammar 33.3% · vocabulary 30%
2026-08-20SES-024 grammar 83.3% · vocabulary 12.5%
Mistakes worth drilling
Counted against the root cause rather than how it showed up, and weighted by how often it actually happened. Anything since re-tested clean drops off. The dates are the point: the same count means opposite things depending on whether the zone fired this week or has been quiet for a fortnight.
ART-DEFdefinite article (suffix) 39× last 23d ago
LEX-FFfalse friend 29× last today
NOUN-GENnoun gender/plural form 28× last 22d ago
VRB-CONJverb conjugation 28× last today
LEX-GAPthe word is not there — output is a plausible-shaped invention 22× last today
LEX-ENDthe word is there and its ending is not — a final vowel dropped, added or exchanged 13× last 22d ago
ORTH-DIAdiacritics 12× last today
ORTH-VOWvowel or diphthong choice and order 11× last 23d ago
ART-POSSpossessive article al/a/ai/ale 7× last 36d ago
ADJ-AGRadjective agreement 5× last 35d ago
NOUN-NUMthe plural produced where the singular was asked, or the reverse 3× last 47d ago
ORTH-SEQconsonants of a known word dropped or transposed — the lexeme is right, the letter sequence is not 3× last 41d ago
REGregister 3× last today
ORTH-CGsoft/hard c and g spelling 2× last 22d ago
PRONpronunciation (round-trip miss) 2× last 57d ago
Already re-tested: the word is there and its ending is not — a final vowel dropped, added or exchanged — 19 earlier mistakes answered by a 100% retest on 2026-09-06; the word is not there — output is a plausible-shaped invention — 12 earlier mistakes answered by a 94% retest on 2026-08-13; noun gender/plural form — 8 earlier mistakes answered by a 90% retest on 2026-08-12. Those stay in the record and are not counted above.
Counted against the cause, not the symptom: LEX-FF → VRB-CONJ, REG → VRB-CONJ, LEX-FF → VRB-CONJ, ORTH-DIA → PRON. A written mistake that turns out to be a sound you don't yet make is one problem, not two.
How the misses split
Every marked item ever scored, by what kind of miss it was. The middle column is the interesting one — a half mark is the right rule with the wrong letters, so two sessions can score the same and mean completely different things about what is broken.
59%
23%
18%
clean 211 right rule, wrong letters 84 wrong 64
2026-09-15ses032 5 · 9 · 3 56%
2026-09-07ses031 40 · 20 · 19 63%
2026-09-06ses030 9 · 5 · 9 50%
2026-08-20ses024 4 · 5 · 3 54%
2026-08-19ses023 55 · 10 · 12 78%
2026-08-15lesson 13 · 3 · 7 63%
2026-08-15drill 52 · 14 · 5 83%
2026-08-13drill 33 · 18 · 6 74%
What the ledger holds
Split by kind, because words and grammar patterns behave differently and one blended bar hides it. Tier 1 is shaky, tier 5 is cold storage.
Words — 213 rows
114
33
38
13
13
Grammar patterns — 55 rows
35
4
4
10
2
tier 1 · 0dtier 2 · 3dtier 3 · 7dtier 4 · 21dtier 5 · 60d
What came in, when
07-30
07-31
08-03
08-07
08-09
08-10
08-12
08-15
08-17
08-19
08-20
08-25
09-07
96 of 268 rows carry a Ukrainian or Russian anchor written into their notes, and 5 still carry an unverified ?. Read that beside the measured finding above that a hook in the notes does not, on its own, install the word.
Topic coverage, every system
Least-covered first — that ordering is the point, and it is why the hub shows only the head of this list. A system is not a unit: pronouns are spread over eight units and articles over five.
Clause syntax & connectors0/4
Consolidation & assessment0/3
Register & politeness1/3
The verb system6/16
The pronoun system4/8
The noun system2/4
Adjectives & comparison1/2
Prepositions & case-marking1/2
Lexical domains9/17
The article system4/6
Numerals & quantification2/3
Sound system & orthography8/8
Negation & sentence type3/3
How you actually study
Measured from the record, and worth setting against the stated preferences above — this workspace applies measured, not assumed to the language, and it may as well apply it here.
19/62
days studied
32 blocks across 19 distinct days — more than one in a day is normal here
22
longest gap, days
between two study days
4.0
blocks a week
across 8 calendar weeks
Which days you actually study
Mon
Tue
Wed
Thu
Fri
Sat
Sun
Weekends are study days here, which is why the weekly count runs Monday to Sunday rather than over a working week.
Pace against the plan
Units closed per week, achieved against what the remaining time asks for. A unit is closed when every part of it has been taught.
0.8
units a week, achieved
7 closed over 8.6 weeks
1.3
units a week, needed
23 units left in 125 days — behind it
~4 lessons + 2 drills
Frozen assessments
Written once and never edited, so they are the only points on this workspace that cannot have moved under you.
2026-07-30placement 4/26 — absolute beginner; Romance transfer fires, Slavic does not
False friends — 20 words that look like something they are not
Documenting one of these does not inoculate against it — that was measured, and it is why they are drilled rather than merely listed.
prostUA простий stupid
scumpUA скупий expensive/dear
vrednicUA/RU вредний diligent/worthy
mândruUA мудрий proud
boalăUA біль disease
nevastăUA невістка wife
ceasUA час clock/watch, hour
carteUA карта book
obrazUA/RU образ cheek
trupUA/RU труп body (neutral: corp)
podUA під / RU под bridge (also attic)
simpaticUA симпатичний / RU симпатичный likeable, pleasant — about character
actualactual current, topical
magazinmagazine shop
librărielibrary bookshop
camerăcamera room
sensibilsensible sensitive
eventualeventually possible, potential
calculatorcalculator computer
areare has — the third person of a avea
Every session — 32 of them, newest first
2026-09-29 · SES-032Lesson 83.3%
2026-09-07 · SES-031Drill —
2026-09-06 · SES-030Drill —
2026-09-06 · SES-029Lesson 83.3%
2026-08-26 · SES-028Weekly review and replan —
2026-08-25 · SES-027Lesson 33.3%
2026-08-24 · SES-026Drill —
2026-08-20 · SES-025Drill —
2026-08-20 · SES-024Lesson 83.3%
2026-08-19 · SES-023Drill —
2026-08-19 · SES-022Lesson —
2026-08-17 · SES-021Lesson —
2026-08-15 · SES-020Weekly review and replan, third session of the day and the first /limba-review since —
2026-08-15 · SES-019Lesson 56.3%
2026-08-15 · SES-018Drill, sweep mode, run wide and cold at the learner's request after two days off —
2026-08-13 · SES-017Drill, sweep mode —
2026-08-12 · SES-016Lesson 31%
2026-08-12 · SES-015Drill —
2026-08-12 · SES-014Drill —
2026-08-10 · SES-013Lesson —
2026-08-10 · SES-012Drill —
2026-08-09 · SES-011Drill —
2026-08-09 · SES-010Drill —
2026-08-09 · SES-009Drill —
2026-08-07 · SES-008Lesson 77%
2026-08-05 · SES-007Drill —
2026-08-03 · SES-006Review —
2026-08-03 · SES-005Lesson 72.5%
2026-07-31 · SES-004Lesson 70%
2026-07-31 · SES-003Lesson 55%
2026-07-30 · SES-002Placement calibration (first /lesson; probe, not teaching) —
2026-07-30 · SES-001Setup (scaffold session) —