Evaluate the lab-11 bot against a 40-question golden set, classify every failure as retrieval vs generation vs content, fix each class with its own tool — chunking, synonyms, KB rewrites — and re-measure to prove which fix moved which failures.
Farhan's bot from lab-11 answers ten questions respectably. His MSP wants to put it in front of client users, and "respectably on ten questions" is not an evidence base. This lab is the discipline that separates a demo from a system: a golden set of questions real users would ask — including the vocabulary they actually use, which is not the vocabulary the KB is written in — a failure taxonomy that tells you which layer broke, and targeted fixes measured by re-running the same set. This is also the skill that transfers furthest: when a vendor claims "our bot is 92% accurate," the golden-set-and-taxonomy method is how you check whose questions, measured how.
The golden set below is seeded: it contains vocabulary-mismatch questions engineered to defeat naive retrieval, multi-article questions that need stitched answers, out-of-scope questions that must be refused, and one question whose KB answer is itself wrong — because the KB you inherited in lab-11 still contains the stale split-tunnel article, and a perfect bot over wrong content gives perfect wrong answers.
~75 minutes hands-on · Advanced tier (maps to module M6). $0 — the lab-11 stack as-is (Ollama, Chroma, your ingest.py/ask.py), plus a spreadsheet or markdown table for scoring. Complete lab-11 first; this lab tunes that bot.
Save the golden set as golden-set.txt. Format: id | question | expected. Expected values: A:kb0X (answer grounded in that article), A:kb0X+kb0Y (multi-article), R (must refuse). Questions marked with the same theme deliberately vary vocabulary.
G01 | How do I reset my password? | A:kb01
G02 | Forgot my login, locked out | A:kb01
G03 | The sign-in box keeps rejecting me | A:kb01
G04 | New phone, need my authenticator back | A:kb02
G05 | Where do I re-enroll MFA? | A:kb02
G06 | The approve notification never arrives | A:kb02
G07 | What is VPN error 809? | A:kb03
G08 | VPN won't connect from my hotel | A:kb03
G09 | Remote access broken on public wifi | A:kb03
G10 | Should I turn off my firewall for the VPN? | A:kb03
G11 | How do I get to the finance share? | A:kb04
G12 | Need permissions on the team folder | A:kb04
G13 | How long till drive access is granted? | A:kb04
G14 | Why is my internet slow on VPN? | A:kb05
G15 | Are we allowed to split tunnel? | A:kb05
G16 | My Teams calls stutter on VPN, what do I do? | A:kb05
G17 | Locked out AND lost my phone | A:kb01+kb02
G18 | New starter needs drive access and VPN | A:kb03+kb04
G19 | Hotel wifi: VPN fails, then calls choppy | A:kb03+kb05
G20 | Password reset but MFA still on old phone | A:kb01+kb02
G21 | How do I request a laptop? | R
G22 | Office wifi password? | R
G23 | Can I get local admin? | R
G24 | How do I book a meeting room? | R
G25 | What's the guest printing process? | R
G26 | My email keeps asking me to sign in | A:kb01
G27 | Authenticator gone after factory reset | A:kb02
G28 | Error 809 persists after trying the KB steps | A:kb03
G29 | Who approves shared drive requests? | A:kb04
G30 | Is all my traffic monitored on VPN? | A:kb05
G31 | Can the desk unlock me before 30 minutes? | A:kb01
G32 | Temporary access pass - how long valid? | A:kb02
G33 | Which ports does the VPN need? | A:kb03
G34 | Can I ask for NTFS permissions directly? | A:kb04
G35 | Video quality bad on VPN - enable split tunnel? | A:kb05
G36 | I typed my password right three times, still locked | A:kb01
G37 | Does drive access need my manager? | A:kb04
G38 | Set up MFA without any old device | A:kb02
G39 | What changed in March on the network? | A:kb05
G40 | Expense report policy? | R
Scoring: each question earns pass (correct grounded answer with citation, or correct refusal) or a failure class: RET (wrong/no chunks retrieved), GEN (right chunks retrieved, wrong answer generated), CON (bot faithfully reported KB content that is itself wrong/stale). To assign RET vs GEN you must look at the retrieved chunks, not just the answer — add a debug print of retrieved sources to ask.py if you have not already.
eval-sheet.md: answer summary, sources retrieved, pass/RET/GEN/CON. Budget half your lab time here; the discipline is not changing anything while measuring. Expected output: a baseline pass rate typically in the 55–75% band — if you scored 95%+, check whether you graded citations and refusals strictly (G35 in particular; see step 4).eval-sheet.md. Expected output: measurable improvement concentrated exactly where your fix plan predicted — and possibly a question or two that got worse, which you report rather than quietly re-tune, because the eval sheet is evidence, not marketing.taxonomy-report.md, one page: baseline vs final pass rate; failures by class before/after; a table of which fix moved which question ids; the one fix with the best effort-to-impact ratio; and the two-sentence answer to "how would you evaluate a vendor's accuracy claim?" that this lab has earned you.The unforgivable move in evaluation is fixing and measuring simultaneously — tweaking the prompt, re-running the three questions you remember failing, and declaring improvement. Baseline first, classify, pre-commit the fix plan, change one variable, re-run the full set. Anything less is tuning to the test while grading yourself.
eval-sheet.md contains all 40 baseline results with retrieved sources logged, then a full re-measure column.Self-grading rubric (pass = 7/10): honest baseline with strict grading (0–2) · taxonomy assigned from retrieval evidence (0–2) · CON failure caught and fixed in the KB, not the bot (0–2) · vocabulary cluster fixed and attributed (0–2) · refusal wall intact post-tuning (0–1) · report maps fixes to question ids (0–1).
Pass rate is a number; the taxonomy is the insight — retrieval failures are fixed in chunking and synonyms, generation failures in prompts, content failures only in the KB itself — and the evaluator who knows which layer broke is the person every vendor accuracy claim has to get past.