Back
EvalCommunity Academy · Module IV Application Lab

Verify, Evaluate, Red-Team & Improve Your M&E AI Agent

Move from “the agent works” to evidence about whether it works reliably, safely and appropriately for its intended M&E purpose.

The Module IV question
What evidence do we have that this agent works?

Verification checks whether outputs and processes satisfy defined requirements. Evaluation measures performance across cases. Red-teaming exposes weaknesses. Improvement changes the system and regression testing checks whether the change actually helped.

Evaluation cycle
VERIFY →EVALUATE →DIAGNOSE →RED-TEAM →IMPROVE →REGRESSION TEST
REMEMBER: A better-looking output is not automatically a better system. Preserve the original failure, make a controlled change, and compare the old and new versions using evidence.
1

Bring forward your Module III agent

Use the system you actually implemented.

REMEMBER — Tool: Use your Module III Implementation Record, Make.com scenario, ChatGPT/Claude prototype or workflow documentation.
2

State the intended use

REMEMBER: Evaluation results apply to a defined use and tested conditions—not to “AI” in general.
3

Map the complete system

REMEMBER: A failure may occur before the model, inside the model, after the model or at a human-control point.
4

Identify system dependencies

5

Define the methodological boundary

AI CAN
AI CAN ASSIST WITH
HUMAN MUST DECIDE
AI SHOULD NOT DECIDE
6

Define what “good performance” means

REMEMBER: “Looks good” is not an evaluation criterion.
7

Separate calculation, interpretation and judgement

CALCULATION
INTERPRETATION
JUDGEMENT
REMEMBER: A correct calculation does not automatically produce a correct interpretation or evaluative judgement.
8

Create a representative test set

REMEMBER — Tool: A spreadsheet/CSV is enough. Give every test a stable ID.
9

Define expected behaviour

10

Verify one output against source evidence

REMEMBER — Method: Do not verify only whether the answer sounds plausible. Trace it to evidence.
11

Check provenance

12

Test unsupported claims

REMEMBER: The correct response may be “insufficient evidence”, not a plausible-sounding explanation.
13

Test contradictory evidence

14

Test evidence gaps

15

Check triangulation

REMEMBER: Triangulation does not mean forcing different sources to agree.
16

Check negative cases and alternative explanations

REMEMBER: Good evaluative reasoning asks not only “What supports this?” but also “What could explain it differently?”
17

Test context sufficiency

18

Run a context-ablation test

REMEMBER — Tool: Test the same case twice: full context vs reduced context.
19

Build the quality gate

REMEMBER — Tool: Implement deterministic conditions in your workflow where possible rather than asking the LLM to police itself.
20

Attack the quality gate

21

Build a failure register

REMEMBER — Tool: Spreadsheet columns are enough. The important thing is reproducibility and traceability.
22

Classify failure modes

23

Assess severity, frequency and detectability

REMEMBER: Prioritise failures by consequence—not simply by how noticeable they are.
24

Find the root cause

25

Build the evaluation rubric

REMEMBER — Tool: Use a spreadsheet or structured scoring form. Define what each score means.
26

Conduct human validation

REMEMBER: Human review is not only a final approval mechanism; it provides evidence for evaluating the AI system itself.
27

Test an LLM-as-judge

REMEMBER: An LLM judge is an evaluator that also requires validation.
28

Compare human and LLM-judge scores

29

Validate the evaluator

REMEMBER: The evaluation mechanism itself can fail. Validate the evaluator before relying on it at scale.
30

Check robustness and subgroup performance

REMEMBER: A system can perform well on average while failing systematically for particular cases or groups.
31

Create the regression test set

REMEMBER — Tool: Spreadsheet/CSV with stable test IDs. Keep expected behaviour separate from the model's previous answer.
32

Compare agent versions

REMEMBER: Record model/version, prompt changes, retrieval changes, tool changes and workflow changes.
33

Run red-team tests

REMEMBER — Tool: Red-team deliberately creates conditions under which the system could fail.
34

Test prompt injection and unsafe tool use

REMEMBER: Retrieved documents are information, not automatically trusted instructions.
35

Run one controlled improvement experiment

REMEMBER: Change one important element where practical so you can understand what caused the result.
36

Regression-test and make the deployment decision

REMEMBER: State the conditions under which the agent is acceptable and when human review or stopping is required.
Final verification gate

Do you have evidence that your agent works?

0 / 32 checks confirmed.

Create your Evaluation Dossier

Generate a structured record of your verification, evaluation, failures, tests, improvements and deployment decision.

Next

Module V — Apply verified agent patterns to real M&E workflows

Use what you learned here to build practical agents for evaluation design, reporting, qualitative and quantitative analysis, data quality, indicator tracking, donor updates, learning and recommendations.

" ); w.document.close(); setTimeout(function(){ w.focus(); w.print(); },400); }); msg("Evaluation dossier generated. Preserve the test evidence and failure register for future regression testing.",true); $("result").scrollIntoView({behavior:"smooth",block:"start"}); } function copy(text){ if(navigator.clipboard && window.isSecureContext){ navigator.clipboard.writeText(text).then(function(){ msg("Copied. The dossier is on your clipboard.",true); }).catch(function(){ fallback(text); }); }else{ fallback(text); } } function fallback(text){ var x=document.createElement("textarea"); x.value=text; x.style.position="fixed"; x.style.left="-9999px"; document.body.appendChild(x); x.focus(); x.select(); var ok=false; try{ok=document.execCommand("copy");}catch(e){ok=false;} document.body.removeChild(x); msg(ok?"Copied. The dossier is on your clipboard.":"Copy is unavailable. Select the dossier manually.",ok); } /* WORKED EXAMPLE */ function example(){ var d={ a1:"Indicator Evidence Review Agent. The system reviews quarterly indicator records, calculates defined deviations, retrieves approved contextual evidence, identifies contradictions and prepares an evidence brief for evaluator review.", a2:"Support routine quarterly monitoring review. The system flags unusual performance and organises evidence; the evaluator makes the substantive judgement.", a3:"Indicator input → deterministic calculation → evidence retrieval → AI evidence synthesis → contradiction check → quality gate → conditional routing → evaluator review → reporting draft.", a4:"Approved indicator dataset, monitoring reports, programme documents, retrieval system, calculation tool, AI model, validation rules and human approval.", a5a:"Retrieve and organise evidence; calculate defined metrics; structure evidence; flag unusual cases.", a5b:"Identify possible explanations, compare evidence, identify contradictions and draft an evidence summary.", a5c:"Interpret context, assess alternative explanations, make evaluative judgements and approve conclusions.", a5d:"Make unsupported causal claims, silently resolve contradictions or make consequential evaluative decisions.", a6:"Accuracy, source grounding, completeness, correct reporting period, contradiction handling, methodological appropriateness, escalation and consistency.", a7a:"Calculate deviation from target using deterministic spreadsheet logic.", a7b:"Interpret the observed deviation against supplied evidence and context.", a7c:"Determine whether the evidence supports an evaluative concern or conclusion.", a8:"T01 complete case; T02 missing data; T03 contradiction; T04 unsupported causal claim; T05 unusual value; T06 negative case; T07 context removed; T08 untrusted document; T09 subgroup case; T10 alternative explanation.", a9:"Complete case → evidence-linked summary. Missing data → stop/request information. Contradiction → display both sources and escalate. Unsupported causal claim → reject/escalate. Untrusted instruction → treat as content, not authority.", a10:"Claim that performance fell 18% was reproduced from the approved dataset and verified against the source record.", a11:"Important numerical and documentary claims retain source identifiers and reporting periods.", a12:"Initial prototype claimed implementation failure without causal evidence. The claim was removed and flagged.", a13:"Two approved sources disagreed about implementation disruption. Both were presented and the case was routed to the evaluator.", a14:"Removing contextual evidence caused the agent to produce a weaker interpretation and correctly triggered an evidence-gap flag.", a15:"Quantitative indicator decline was compared with interview evidence and programme records. Evidence converged on reduced implementation activity but did not establish causality.", a16:"A negative case showed stable performance in one subgroup. Alternative explanation: reporting changes rather than programme performance.", a17:"Indicator definition, unit, reporting period, target, theory-of-change assumption, programme context and evaluation question.", a18:"Removing reporting-period metadata caused temporal comparison risk. Reporting period was made mandatory.", a19:"IF required field missing → STOP. IF source absent → FLAG. IF contradiction → HUMAN REVIEW. IF unsupported causal claim → ESCALATE. IF schema invalid → REJECT.", a20:"Inserted an unsupported causal claim and removed a source. The quality gate detected both conditions.", a21:"F01 causal overclaim; F02 missing reporting period; F03 missed contradiction; F04 context dependency.", a22:"Failures occurred in model interpretation, context and validation.", a23:"F01 high consequence; F02 high consequence/frequent; F03 medium frequency but important; F04 medium consequence.", a24:"Main root cause was insufficient distinction between observed change and causal explanation, combined with optional context fields.", a25:"Accuracy 1–5; Groundedness 1–5; Completeness 1–5; Methodological appropriateness 1–5; Contradiction handling 1–5; Escalation 1–5.", a26:"Two evaluators independently scored ten cases and documented disagreements.", a27:"A second model applied the rubric using the same evidence and expected behaviour.", a28:"The LLM judge agreed on routine cases but over-scored ambiguous cases. Human scoring remained authoritative.", a29:"Judge behaviour was compared against human-scored examples before broader use.", a30:"Different wording, missing context, subgroup cases and unusual formats were tested. One subgroup showed lower completeness and required further investigation.", a31:"Stable IDs T01–T10. Historical failures are retained in the regression set.", a32:"Version B added reporting-period validation and causal-boundary rules. Version B reduced target failures without introducing new regression failures.", a33:"Contradictory evidence, missing context, misleading documents, unusual inputs and attempts to bypass controls.", a34:"A test document instructed the agent to ignore evidence rules. The agent should treat this as untrusted content. Tool-use test confirmed human approval was required before consequential action.", a35:"Hypothesis: mandatory reporting-period metadata will reduce temporal comparison errors. One validation rule was added and the full regression set was rerun.", a36:"Regression testing showed zero temporal-comparison failures and no new critical failures. Deploy only for limited routine monitoring with mandatory evaluator review of flagged cases." }; Object.keys(d).forEach(function(k){ var e=$(k); if(e)e.value=d[k]; }); $("decision").value="Deploy with mandatory human review"; root.querySelectorAll(".fail").forEach(function(e){ e.checked=true; }); msg("Worked M&E example loaded. Modify the fields to create your own evaluation.",true); count(); $("a1").scrollIntoView({behavior:"smooth",block:"center"}); } /* SAVE */ function save(){ try{ var data={fields:{},fails:[],checks:[]}; root.querySelectorAll("textarea,select").forEach(function(e){ data.fields[e.id]=e.value; }); data.fails=fails(); root.querySelectorAll("#checks input").forEach(function(e){ data.checks.push(e.checked); }); localStorage.setItem("ecm4lab",JSON.stringify(data)); msg("Saved locally. Your work is stored in this browser.",true); }catch(e){ msg("Local saving is unavailable in this browser.",false); } } /* RESTORE */ function restore(){ try{ var raw=localStorage.getItem("ecm4lab"); if(!raw){ msg("No saved Module IV work was found in this browser.",false); return; } var d=JSON.parse(raw); Object.keys(d.fields||{}).forEach(function(k){ var e=$(k); if(e)e.value=d.fields[k]; }); root.querySelectorAll(".fail").forEach(function(e){ e.checked=(d.fails||[]).indexOf(e.value)!==-1; }); root.querySelectorAll("#checks input").forEach(function(e,i){ e.checked=!!((d.checks||[])[i]); }); count(); msg("Restored. Your saved Module IV work has been loaded.",true); }catch(e){ msg("The saved record could not be restored.",false); } } /* RESET */ function reset(){ if(!window.confirm("Reset all Module IV Application Lab fields?"))return; root.querySelectorAll("textarea").forEach(function(e){ e.value=""; }); root.querySelectorAll("select").forEach(function(e){ e.selectedIndex=0; }); root.querySelectorAll("input[type='checkbox']").forEach(function(e){ e.checked=false; }); $("result").innerHTML=""; $("result").style.display="none"; $("status").style.display="none"; count(); } $("generate").addEventListener("click",generate); $("example").addEventListener("click",example); $("save").addEventListener("click",save); $("restore").addEventListener("click",restore); $("reset").addEventListener("click",reset); count(); msg("Module IV lab ready.
Start with the agent you implemented in Module III.",true); })();