IZIFIT team contribution, August and September 2026
How the counting work was checked.
The evidence behind the note Let the code compare, let the AI explain: what shipped, who checked what, and what was never measured.
The result, and its limits.
| What shipped | The app computes the counts, shows the changes above the trainer's text and gives the model the results to phrase. |
|---|---|
| Tests | Deterministic tests cover the counting. They stop at the model's input, not its wording. |
| Re-checks | Our testers re-checked the reported cases after the deployment. That is my account: I have no log of the re-checks. |
| Reports | They stopped within a day of the deployment and stayed stopped until I finished this work. I have no count of reports. |
| Not measured | No error rate, before or after. Reports stopping doesn't prove the errors did. |
What moved into code.
After launch, users in support and our testers reported wrong counts of training days, sets and reps. One production briefing described a whole added set on six of eight exercises as one more rep per set: the model had been left to compare raw set lists. A test now checks that a whole added set comes out as one more set and that the model's input says so. In a live check on a development stack, the same low-cost model stated the change.
| Date, 2026 | What moved |
|---|---|
| 14 August | Briefing: set, heaviest-set rep and weight changes since last time, each with a direction. |
| 16 August | Chat: workouts dated by completion; weekly done and due counts with a verdict. |
| 19 August | Briefing: program progress, without recovery days. |
| 25 August | Briefing: "this week" as Monday to Sunday, by the day each workout was done. |
| 22 September | Briefing screen: the app's computed changes above the trainer's text. Message after a workout: no count on a light day. |
| 27 September | Chat: calendar weeks in weekly reporting. |
The briefing's wording.
The wording was evaluated offline on a frozen set of 24 cases, made-up workouts and anonymized program text, in two languages and both coaching voices, with every output kept. Five candidate prompts ran against a baseline, and a judge model compared each pair in both orders.
The judge failed its calibration: three of eight known pairs against a required seven. It rejected the invented facts we planted, but returned evidence quotes that failed validation, favored an answer that only added encouragement, and rated one answer as a pass or a serious failure depending on the order. In the real comparison it treated the program author's claims as facts and rewarded answers that listed every change. So it only advised, and a coding agent did the review against the sources, which is not an independent human rating.
No prompt met every target. The selected one had no confirmed serious factual failure but missed the program author's reason in two of the ten cases that had one to explain. One that found that reason wrote "heavier weights than when you started," which its records didn't support: the judge accepted it and the review rejected it.
The prompt that shipped is a teammate's rewrite of the selected one, which the study didn't cover. I accepted it after user testing on the deployed app. Nothing we ran measured whether the coaching helps users.
While the app runs, the briefing's text is checked only for form: not empty, no markup, internal identifiers removed. If the model fails, the app's figures stay on screen. A wrong sentence can still reach the user, below those figures.
Next weights and old replies.
The app owns the next weight, and the trainer quotes it or points to the workout screen. That rule is an instruction. On the same question and context, the trainer kept it with no history and broke it when its own earlier replies were replayed. Labeling those replies as claims had stopped it adopting old totals, but not repeating its own advice.
We let those threads age out. Only recent messages are replayed, so old replies typically cleared within three to four weeks of ordinary use, and until then a question about weight could still get the wrong answer. A live reading days later showed threads with a clean history breaking the rule less often than flagged ones, though not never.
A detector counts prescribed weights a reply's context didn't supply. It's a word match with false alarms, so we read what it flags, and it can't see a supplied weight used wrongly. It measures and never blocks: a reply streams as it's written, so it can't be swapped midway, and chat has no app figures to fall back on.
Saved briefings.
A briefing is saved under a hash of what can change the advice, and a replaced one is kept for audit. A new prompt or model doesn't touch the hash, so the snapshot carries a version: raising it by hand changes every hash, and every live briefing regenerates when next opened. That's how the extra-set fix reached saved briefings. Those on completed workouts can't be rebuilt and stay in the chat history as written. A workout is looked up through the user's own program, so another user's comes back as not found, and a test covers it.
Evidence basis.
This account is based on IZIFIT's internal decision records, tests and evaluation reports, and on my own account of the re-checks. The note's screens and quotes are translated from Russian. IZIFIT's repository is private, so nothing here links to code, and private transcripts and user records are not published.
Discuss the checks