Milestone validation
This is the test that proves you've mastered a milestone. It's strict, it's pass/fail, and it's how the roadmap actually moves forward.
When validation unlocks
A milestone has a sessions_required count — usually 3 to 5 focus sessions, depending on the milestone size. Once you've completed that many milestone_practice sessions, the milestone status flips from active to validation_ready.
The next morning, the priority engine sees validation_ready and assigns milestone_test as today's task. The Today's Task card shows a gold border and the title Milestone Validation. You can also launch a validation manually from the milestone detail page once it's unlocked.
You can't validate before the required sessions are done. The card won't appear and the milestone detail page won't expose the launch button.
What's different from a practice session
Same chat UI. Same streaming. The system prompt is what changes.
When the session type is milestone_validation, I run on this contract:
MILESTONE VALIDATION — [milestone title]. This is a PASS/FAIL test. No hints. No second chances within this session. Test ONLY: [topics]. Be strict. The candidate must score X% to advance. Ask 10-15 focused questions covering all listed topics. Score each answer.
Inside a validation:
- I don't give Socratic hints when you're wrong, even on the second attempt at the same concept.
- I don't reference your prior session history mid-flow ("you got this wrong before") because every answer in the session is being scored independently.
- I don't push deeper on incomplete answers — incomplete is wrong here.
- I cover every listed topic at least once.
At the end of the validation I emit, on their own lines outside the weakness report:
[VALIDATION_SCORE:X/100]
[PASSED:true|false]
[GAPS:topic1, topic2] (only when PASSED:false)
The session screen reads those tags and shows a Milestone Validation overlay with the verdict.
The pass threshold
Each milestone has a validation_score_required field — typically 80%. Score at or above and you pass.
When you pass:
- The milestone flips to
completed. - Your
validation_score_achievedis recorded. - Phase progress recomputes. If this was the last milestone in the phase, the next priority task becomes a phase exam.
- A share card is generated for the milestone completion.
When you fail:
- The milestone flips to
failed. - The next morning's task becomes
retry_prep— a focused session on the gaps from your failed attempt. - Your
attempt_historyaccumulates.
What happens after a second failure
This is the part that matters: I don't let you bash your head against the same approach twice.
Once you've failed the same milestone two or more times, the next attempt routes through the complete-milestone-ai restructure flow before validation runs. I read your full attempt history — every wrong answer, every classified error type, every diagnosis I wrote — and I rewrite the milestone:
- A new topic order, scoped to your specific failure pattern.
- A new
sessions_requiredcount, often higher than the original. - A
restructure_summaryand anapproach_changedescription. - A list of specific misconceptions I'm going to target before the next validation.
- A short message in my voice —
restructure_noteson the milestone — that explains, in first person, what I'm changing and why.
I update the milestone row with the new approach. The next focus session on this milestone uses the new topic order and runs against the new misconception list. The validation only re-fires once you've completed the new session count.
I never just say "try again." If you failed twice, the plan was wrong, not just the execution.
Pricing
Validation runs on the same per-turn streaming credits as a focus session, plus the closing report cost. The restructure (when it triggers) costs 2 credits to generate.
If a stream errors mid-validation, the failed credit charges are refunded automatically — see the credit transaction log on your Profile page.
Don't launch a validation if you're not ready. The strict mode will surface every gap you have. Walking in unprepared is a faster way to trigger a restructure, but it doesn't actually save you time — the restructure adds sessions to the plan.
What you see in the overlay
After a validation finishes, the session results screen surfaces a Milestone Validation Overlay with:
- The verdict —
PASSEDorNOT YET, in plain language. - Your score against the threshold.
- The gap list (when failed).
- A clear next-step button — either "Continue roadmap" or "Start retry prep tomorrow", depending on the outcome.
There's no celebration animation on a pass and no failure shaming on a fail. Just the verdict and the next move.