Repository navigation
Conversation
… characters A jury-style audit found that one beforeinput carrying the whole line was graded as a passing test (9 949 SPM, "exercise mastered"), and that an automation tool's 4 264 SPM became the personal best. It also found that SPM counted wrong keystrokes, so 7 errors on a 59-character line read 12% above 60·N/T, outside the jury's ±10%. - SPM = 60 000 × min(correct character keystrokes, text length) / elapsed ms, which is 60·N/T on a finished attempt. Accuracy is unchanged. - The input seam takes an insertText of several characters as ignored (reason "burst"), like a paste. Compositions are still judged per char. - packages/metrics gives each attempt a verdict, metrics.implausible: "burst" when the median interval between character keystrokes is under 25 ms, "tooFast" above 1 500 SPM. Such an attempt is kept and shown as "Не зараховано: набір не схожий на ручний", but counts toward nothing: the progress fold, Academy progress, XP and level, streak and daily minutes, personal best, speed trend and session sizing all skip it through curriculum's typedByHand. finish-race reads the same verdict. DERIVED_VERSION is 2. - The Formulas page (uk, en), ADR 0003 (amendment), CONTEXT.md and docs/security.md state both rules. - The e2e harness types at 45 ms a key (about 1 300 SPM) and the CDP harness waits the same by default; the product has no test escape. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
prodelt
added a commit
that referenced
this pull request
Oct 6, 2026
… best The plausibility verdict from #43 now reaches the two free-practice modes that keep their own records: a daily attempt flagged implausible clears no day, and a sprint score carrying a verdict sets no personal best. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
A jury-style audit (COMPETITION_RULES §4.4.4, §6.1, rubric B1, E1) found:
beforeinput(insertText) with the whole 59-character line gave «+10 XP, Вправу опановано» at 9 949 SPM; an automation tool'stype_text(73 chars in 1.0 s, 4 264 SPM) counted too and became the personal best.60·N/T, outside the jury's ±10 %.What
60 000 × min(correctCharKeystrokes, textLength) ÷ elapsedMs, i.e.60·N/Ton a finished attempt. A wrong key costs accuracy and time, never adds speed. Accuracy is unchanged (correct ÷ all, corrections included).insertTextcarrying more than one character isignored(reasonburst), like a paste. IME compositions are still judged character by character.packages/metrics/src/plausibility.ts, pure, unit-tested):metrics.implausible = 'burst'when the median interval between character keystrokes is < 25 ms,'tooFast'when SPM > 1 500. Intervals run char to char, so a held Shift or Backspace repeat does not shorten them.curriculum'stypedByHandis the one predicate. The progress fold (history, Confidence, Mastery Rule, which it neither advances nor resets), Academy progress, XP/level, streak and daily minutes, personal best (result comparison, profile), speed trend and session sizing skip such attempts. The result screen says «Не зараховано: набір не схожий на ручний» with the reason.finish-racemaps the same verdict totoo_fast/implausible_interval(takes effect on the next functions deploy).DERIVED_VERSIONis 2.Thresholds and why
finish-racealready used 1 500.Checks
pnpm check: typecheck and lint are green; unit tests 835 passed. The one failure is the existingtools/architecture.test.ts(CoachMarks.tsx), which another PR fixes.pnpm build: green, initial JS within the 150 KB budget (index 123.4 KB gzip).CI=1:formulas,jury,security -g "paste|counts for nothing"(new: an instant per-character series and a whole-line composition complete but are not counted): 12/12 passed. Harness consumerspath-progress,stage2,academy,exercise,result,stage1-moves,review,session,groups,csp,settings,shell, plusreal-inputoncdp: all pass except failures that are already on main. Those areresult.specscenarios 4/5/6 andstage1-moves"weakest Transition" (both expect older coach copy) and thesettingsProfile axe audit (contrast of unearned badges).Not here
submit-attemptkeeps its own older, stricter checks (a quarter of intervals < 40 ms or > 1 000 SPM rejects the upload). It stores the new verdict with the recomputed metrics.features/daily,features/sprint,features/homeandfeatures/owntextare owned by other PRs and were not touched. The sprint's own best and the daily challenge's "cleared" days do not read the verdict yet.🤖 Generated with Claude Code