掲示板 Forums - Sentence mastery stuck at level 2
Top > renshuu.org > Bugs / Problems Getting the posts
Top > renshuu.org > Bugs / Problems




My sentence been stuck at level 2 for like a month, i dont turn any new vector,
maybe on schedule merge something went wrong, since im doing sentence merge last month iirc.
never do that listening vector also to cause this (you can see i never have 0 listening vector mastery rating).
My theory for this is maybe on schedule before merge i did turn on and off listerning, and that vector stuck since i cannot review it anyway and then merge to main schedule, thus why only partial terms are affected, im not sure since its been a month.
can you fix it for me please, if my theory is correct please remove the listening vector.
Thanks for the report. So, you're referring to a specific sentence, or all those sentences at level 2 in the schedule?
Im not sure tbh, "specific sentence/terms" maybe, since not all terms are affected. checked some history on all tems level and complete today review, it's not limited to level 2 i guess.







just checked sentence add/remove terms > me tab and yeah something seems broken in this schedule, other schedule (words, grammar, kanji) are showing propertly.
You're right - there is something really bizarre going on.
Quick question - are you doing the structure questions only (jumble and star questions), or are you also doing the basic question type (where it shows you a sentence, then asks you if you understand it)?
Yes i also do the basic question where i pick yes or not sure or no
Gotcha, thanks. I suspect you might have run into an older issue with the holiday system where some of your terms got show off into the future. I see a lot of them in the sentence schedule that are level 2, but not scheduled for months.
If you'd like, I can reschedule them for the near future, but scatter them out across a couple of weeks so you don't get slammed at once. Would that work for you?
yes please reschedule it, im fine with scattering 100 review/day, thank you.
Alright, done! It's probably less than 100, but scattered them roughly across a week.
To add onto sentence bugs, I can load all lists without having ever studied them. They're all scheduled as reviews now. All on structure level 2.
Thought this might be related
Hey can you check my other term also please, im analyzing with renshuu APi and found a lot more terms that have this problem.
my formula for calculation is something like this in python, and i got like 3800 result? Idk how level 9/100% mastery spacing is calculated but some level 9 are maybe +30 to almost double.
from datetime import date
from pathlib import Path
from pydantic import TypeAdapter
from models import TermGrammar, TermKanji, TermSentence, TermVocab
term_list = {
"vocab": TypeAdapter(list[TermVocab]),
"kanji": TypeAdapter(list[TermKanji]),
"grammar": TypeAdapter(list[TermGrammar]),
"sent": TypeAdapter(list[TermSentence]),
}
term_mastery_spacing = {
0: 0,
13: 1,
25: 4,
38: 7,
50: 15,
63: 25,
75: 50,
88: 120,
100: 240,
}
terms = "term,id,vector,mastery,last_quizzed,next_quiz,days_diff,mastery_spacing\n"
for key, adapter in term_list.items():
data = adapter.validate_json(Path(f"./data/terms/{key}.json").read_text(encoding="utf-8"))
for term in data:
if not term.user_data:
continue
for vector in term.user_data.study_vectors.values():
if ("/" not in vector.next_quiz) or ("/" not in vector.last_quizzed):
continue
last_quizzed = date.strptime(vector.last_quizzed, "%Y/%m/%d")
next_quiz = date.strptime(vector.next_quiz, "%Y/%m/%d")
spacing = term_mastery_spacing[vector.mastery_perc]
diff = (next_quiz - last_quizzed).days
data = f"{key},{term.id},{vector.name},{vector.mastery_perc}%,{vector.last_quizzed},{vector.next_quiz},{diff},{spacing}"
if diff > (spacing + 10):
terms += data + "\n"
with open("test.csv", "w") as file:
file.write(terms)
Uh, python is not my thing. I'm happy to look into it, but I'll need specific examples.
You can see my uploaded csv
here some example
term,id,vector,mastery,last_quizzed,next_quiz,days_diff,mastery_spacing
vocab,11,Kana > Meaning,63%,2024/11/21,2025/08/12,264,25
on this row with vocab, id = 11
Like it 63% should have 25 spacing, but i got 264 diff instead? And its already expired (i should get the review by now), well idk how its calculated but i think something wrong with this.
like other obvious example
kanji, 503, Onyomi, 13%, 2026/05/24, 2029/03/08, 1019, 1
kanji, 505, Onyomi, 13%, 2026/05/24, 2029/03/08, 1019, 1
This both row, 13% that should have 1 day spacing but i got 1019 instead, this is bug like my sentence before.
you can just ignore my python tbh, to simpify it the formula is lime this
(next quiz - last quiz) > (mastery spacing+10) = days
uh for previous csv i think i make some mistake, i only update my kanji terms but not for other,
here my new csv link https://drive.google.com/file/d/1J8EBhkS00Q6u_J1UzyvxXd17KQ6IOwfV/view?usp=drivesdk
i tried to translate my python into php using claude (sorry for the bad code though since i just learn php 30 minutes ago, but i hope you can understand this better instead of my python script), i tried run this script twice and the csv produced by this code is same as my python script, it's working properly i guess.
<?php declare(strict_types=1);
const ROOT = __DIR__;
const API_LINK = 'https://api.renshuu.org/v1';
const API_KEY = 'MY API KEY';
// default renshuu mastery spacing
const TERM_MASTERY_SPACING = [
0 =?> 0,
13 => 1,
25 => 4,
38 => 7,
50 => 15,
63 => 25,
75 => 50,
88 => 120,
100 => 240,
];
// require extensions=openssl
function httpGet(string $url): string {
$context = stream_context_create([
'http' => [
'method' => 'GET',
'header' => "accept: application/json\r\nauthorization: " . API_KEY . "\r\n",
'ignore_errors' => true,
],
]);
$result = file_get_contents($url, false, $context);
if ($result === false) {
throw new RuntimeException("request failed: {$url}");
}
return $result;
}
function getAllTerms(string $term): void {
$path = ROOT . "/terms/{$term}.json";
$response = json_decode(httpGet(API_LINK . "/list/all/{$term}"), true);
$build = $response['contents']['terms'];
$totalPg = $response['contents']['total_pg'];
if ($totalPg > 1) {
for ($page = 2; $page <= $totalPg; $page++) {
$res = json_decode(httpGet(API_LINK . "/list/all/{$term}?pg={$page}"), true);
$build = array_merge($build, $res['contents']['terms']);
printf("%03d/%03d\n", $page, $totalPg);
}
}
if (!is_dir(dirname($path))) {
mkdir(dirname($path), 0777, true);
}
file_put_contents($path, json_encode($build, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
}
function analyzeTerms(): void {
$termTypes = ['vocab', 'kanji', 'grammar', 'sent'];
$csv = "term,id,vector,mastery,last_quizzed,next_quiz,days_diff,mastery_spacing\n";
foreach ($termTypes as $key) {
$data = json_decode(file_get_contents(ROOT . "/terms/{$key}.json"), true);
foreach ($data as $term) {
if (empty($term['user_data']['study_vectors'])) {
continue;
}
foreach ($term['user_data']['study_vectors'] as $vector) {
// since date contains "/" this is easier check
if (!str_contains($vector['next_quiz'], '/') || !str_contains($vector['last_quizzed'], '/')) {
continue;
}
$lastQuizzed = DateTime::createFromFormat('Y/m/d', $vector['last_quizzed']);
$nextQuiz = DateTime::createFromFormat('Y/m/d', $vector['next_quiz']);
$spacing = TERM_MASTERY_SPACING[$vector['mastery_perc']] ?? 0;
$interval = $lastQuizzed->diff($nextQuiz);
$diff = (int)$interval->format('%r%a');
$row = "{$key},{$term['id']},{$vector['name']},{$vector['mastery_perc']}%,"
. "{$vector['last_quizzed']},{$vector['next_quiz']},{$diff},{$spacing}";
// im using 30 instead now, since on 10 i got the 10k result, 30 days okay enough for delay i guess
if ($diff > ($spacing + 30)) {
$csv .= $row . "\n";
}
}
}
}
file_put_contents(ROOT . '/test.csv', $csv);
}
// fetch term into folder terms/{$termType}.json
foreach (['kanji', 'vocab', 'grammar', 'sent'] as $termType) {
getAllTerms($termType);
}
analyzeTerms();

here some sample row, where in this case on row 1 up to 66 the next_quiz is already exceed current date. and i never get the review.
on row 3714 is okay i guess its level 9 terms after all, maybe i got 2 times correct and it append more than 240 spacing? maybe this is renshuu default behavior on correct level 9 twice.
on row 3715 and 3716 this is bug obviously.
sorry for bad english, hope this help with the investigation.
I will look into this when I can, thanks!
Edit: we do have a family trip next week, so it may be awhile, but I have not forgotten this issue.
Take your time man, no pressure. Im fine even this solved months later. Just enjoy your trip.