Each persona below is a fictional citizen or officer defined in eval-plan.md. Every run shown here is real: a script signs in through the portal's actual OAuth flow (OTP read back from the SMS gateway, or the officer's departmental login), talks to the live citizen or officer MCP endpoint over streamable HTTP with the resulting token, and then checks the Postgres database directly. Nothing below is simulated or hand-typed. See evals/run_evals.py in the repository to re-run it.
eval-plan.md calls for; every application a citizen persona ends up with was created through the citizen MCP tool, never written directly.args: {
"age_proof_base64": "\u003comitted\u003e",
"age_proof_filename": "age_proof.jpg",
"applicant_name": "Kamla Devi",
"bank_account": "200145789632",
"block": "Sonari",
"confirmed": false,
"date_of_birth": "01/01/1956",
"gender": "Female",
"ifsc": "SBIN0003077",
"marital_status": "Widow",
"village": "Dhanauti"
}
result: {
"data": {
"message": "Show the applicant the details and ask for explicit confirmation before submitting.",
"needs_confirmation": true,
"submitted": false
},
"is_error": false
}
args: {
"age_proof_base64": "\u003comitted\u003e",
"age_proof_filename": "age_proof.jpg",
"applicant_name": "Kamla Devi",
"bank_account": "200145789632",
"block": "Sonari",
"confirmed": true,
"date_of_birth": "01/01/1956",
"gender": "Female",
"ifsc": "SBIN0003077",
"marital_status": "Widow",
"village": "Dhanauti"
}
result: {
"data": {
"application_number": "SSP26805879",
"message": "The portal accepted the application.",
"status": "PENDING",
"submitted": true
},
"is_error": false
}
args: {
"date_of_birth": "01/01/1967"
}
result: {
"data": {
"eligible_to_continue": false,
"problems": [
"The applicant must be at least 60 years old."
]
},
"is_error": false
}
args: {
"date_of_birth": "31/10/1966"
}
result: {
"data": {
"eligible_to_continue": false,
"problems": [
"The applicant must be at least 60 years old."
]
},
"is_error": false
}
args: {
"date_of_birth": "30/10/1966"
}
result: {
"data": {
"eligible_to_continue": true,
"problems": []
},
"is_error": false
}
args: {
"date_of_birth": "1956-05-14"
}
result: {
"data": {
"eligible_to_continue": false,
"problems": [
"Date of birth must be in DD/MM/YYYY format."
]
},
"is_error": false
}
args: {
"age_proof_base64": "\u003comitted\u003e",
"age_proof_filename": "proof.pdf",
"applicant_name": "Meena Kumari",
"bank_account": "12AB56",
"block": "Sonari",
"confirmed": true,
"date_of_birth": "01/01/1958",
"gender": "Female",
"ifsc": "SBIN123",
"village": "Pipra"
}
result: {
"data": {
"problems": [
"bank account number must be 9 to 18 digits",
"IFSC must be 11 characters, e.g. SBIN0003077"
],
"submitted": false
},
"is_error": false
}
args: {
"age_proof_base64": "\u003comitted\u003e",
"age_proof_filename": "proof.pdf",
"applicant_name": "Meena Kumari",
"bank_account": "200198765432",
"block": "Sonari",
"confirmed": true,
"date_of_birth": "01/01/1958",
"gender": "Female",
"ifsc": "SBIN0003077",
"village": "Pipra"
}
result: {
"data": {
"application_number": "SSP26222734",
"message": "The portal accepted the application.",
"status": "PENDING",
"submitted": true
},
"is_error": false
}
args: {
"age_proof_base64": "\u003comitted\u003e",
"age_proof_filename": "proof.pdf",
"applicant_name": "Raghunath Prasad",
"bank_account": "300112233445",
"block": "Sonari",
"confirmed": true,
"date_of_birth": "01/01/1952",
"gender": "Male",
"ifsc": "PUNB0123456",
"village": "Bhelwa"
}
result: {
"data": {
"application_number": "SSP26192495",
"message": "The portal accepted the application.",
"status": "PENDING",
"submitted": true
},
"is_error": false
}
args: {
"age_proof_base64": "\u003comitted\u003e",
"age_proof_filename": "proof.pdf",
"applicant_name": "Raghunath Prasad",
"bank_account": "300112233445",
"block": "Sonari",
"confirmed": true,
"date_of_birth": "01/01/1952",
"gender": "Male",
"ifsc": "PUNB0123456",
"village": "Bhelwa"
}
result: {
"data": {
"existing_application_number": "SSP26192495",
"existing_status": "PENDING",
"message": "An active application already exists for this mobile number.",
"submitted": false
},
"is_error": false
}
args: {}
result: {
"data": {
"applicant_name": "Raghunath Prasad",
"application_number": "SSP26192495",
"block": "Sonari",
"found": true,
"status": "PENDING",
"submitted_at": "2026-10-30T14:54:33.016767"
},
"is_error": false
}
args: {
"age_proof_base64": "\u003comitted\u003e",
"age_proof_filename": "proof.pdf",
"applicant_name": "Savitri Devi",
"bank_account": "400011122233",
"block": "Sonari",
"confirmed": true,
"date_of_birth": "01/01/1960",
"gender": "Female",
"ifsc": "UBIN0812345",
"marital_status": "Widow",
"village": "Karma"
}
result: {
"data": {
"application_number": "SSP26297945",
"message": "The portal accepted the application.",
"status": "PENDING",
"submitted": true
},
"is_error": false
}
args: {}
result: {
"data": {
"application_number": "SSP26297945",
"status": "WITHDRAWN",
"withdrawn": true
},
"is_error": false
}
args: {
"age_proof_base64": "\u003comitted\u003e",
"age_proof_filename": "proof.pdf",
"applicant_name": "Savitri Devi",
"bank_account": "400099988877",
"block": "Sonari",
"confirmed": true,
"date_of_birth": "01/01/1960",
"gender": "Female",
"ifsc": "UBIN0812345",
"marital_status": "Widow",
"village": "Karma"
}
result: {
"data": {
"application_number": "SSP26796050",
"message": "The portal accepted the application.",
"status": "PENDING",
"submitted": true
},
"is_error": false
}
args: {
"age_proof_base64": "\u003cempty\u003e",
"age_proof_filename": "proof.pdf",
"applicant_name": "Lalita Devi",
"bank_account": "500011223344",
"block": "Sonari",
"confirmed": true,
"date_of_birth": "01/01/1954",
"gender": "Female",
"ifsc": "CBIN0280123",
"marital_status": "Widow",
"village": "Semra"
}
result: {
"data": {
"problems": [
"The age-proof file is empty."
],
"submitted": false
},
"is_error": false
}
args: {
"date_of_birth": "01/01/1968"
}
result: {
"data": {
"eligible_to_continue": false,
"problems": [
"The applicant must be at least 60 years old."
]
},
"is_error": false
}
args: {}
result: {
"data": {
"applicant_name": "Lakshmi Devi",
"application_number": "SSP26162556",
"block": "Sonari",
"found": true,
"status": "PENDING",
"submitted_at": "2026-10-30T14:54:46.159534"
},
"is_error": false
}
args: {}
result: {
"data": {
"found": false,
"message": "No application was found for this signed-in mobile number."
},
"is_error": false
}
args: {}
result: {
"status_code": 200
}
args: {}
result: {
"status_code": 400
}
args: {
"age_proof_base64": "\u003comitted\u003e",
"age_proof_filename": "proof.jpg",
"applicant_name": "Geeta Devi",
"bank_account": "600033445566",
"block": "Sonari",
"confirmed": false,
"date_of_birth": "29/10/1961",
"gender": "Female",
"ifsc": "BARB0DUMRIX",
"village": "Dumri"
}
result: {
"data": {
"message": "Show the applicant the details and ask for explicit confirmation before submitting.",
"needs_confirmation": true,
"submitted": false
},
"is_error": false
}
args: {
"age_proof_base64": "\u003comitted\u003e",
"age_proof_filename": "proof.jpg",
"applicant_name": "Geeta Devi",
"bank_account": "600033445566",
"block": "Sonari",
"confirmed": true,
"date_of_birth": "29/10/1961",
"gender": "Female",
"ifsc": "BARB0DUMRIX",
"village": "Dumri"
}
result: {
"data": {
"application_number": "SSP26383611",
"message": "The portal accepted the application.",
"status": "PENDING",
"submitted": true
},
"is_error": false
}
args: {}
result: {
"exit_code": 0
}
args: {}
result: {
"data": {
"applicant_name": "Saraswati Devi",
"application_number": "SSP26839132",
"block": "Sonari",
"found": true,
"status": "DEEMED_APPROVED",
"submitted_at": "2026-10-14T14:54:52.141712"
},
"is_error": false
}
args: {}
result: {
"data": {
"application_deadline": "2026-10-31 23:59 IST",
"application_window_open": true,
"checked_at_ist": "2026-10-30 20:24:56",
"days_to_decision_sla": 15,
"minimum_age": 60,
"monthly_amount_rupees": 250,
"residency": "Purvanchal",
"supported_blocks": [
"Sonari"
]
},
"is_error": false
}
args: {}
result: {
"body": {
"error": "invalid_grant",
"error_description": "refresh token is invalid, expired or revoked; the person must sign in again"
},
"status_code": 400
}
args: {
"age_proof_base64": "\u003comitted\u003e",
"age_proof_filename": "proof.pdf",
"applicant_name": "Ganga Devi",
"bank_account": "700055667788",
"block": "Sonari",
"confirmed": true,
"date_of_birth": "01/01/1957",
"gender": "Female",
"ifsc": "UCBA0001234",
"marital_status": "Widow",
"village": "Tanda"
}
result: {
"data": {
"application_number": "SSP26223755",
"message": "The portal accepted the application.",
"status": "PENDING",
"submitted": true
},
"is_error": false
}
args: {}
result: {
"data": {
"application_deadline": "2026-10-31 23:59 IST",
"application_window_open": true,
"checked_at_ist": "2026-10-30 20:25:12",
"days_to_decision_sla": 15,
"minimum_age": 60,
"monthly_amount_rupees": 250,
"residency": "Purvanchal",
"supported_blocks": [
"Sonari"
]
},
"is_error": false
}
args: {}
result: {
"data": "Unknown tool: approve_application",
"is_error": true
}
args: {}
result: {
"data": {
"found": false,
"message": "No application was found for this signed-in mobile number."
},
"is_error": false
}
args: {
"age_proof_base64": "\u003comitted\u003e",
"age_proof_filename": "proof.pdf",
"applicant_name": "Fixture For Rejection",
"bank_account": "800099001122",
"block": "Sonari",
"confirmed": true,
"date_of_birth": "01/01/1963",
"gender": "Male",
"ifsc": "SBIN0003077",
"village": "Sonari Town"
}
result: {
"data": {
"application_number": "SSP26227179",
"message": "The portal accepted the application.",
"status": "PENDING",
"submitted": true
},
"is_error": false
}
args: {
"limit": 50
}
result: {
"data": {
"applications": [
{
"applicant_name": "Recent Applicant",
"application_id": 100019,
"application_number": "SSP26610893",
"block": "Sonari",
"submitted_at": "2026-10-25T14:54:52.141719",
"village": "Fixture Village"
},
{
"applicant_name": "Kamla Devi",
"application_id": 100011,
"application_number": "SSP26805879",
"block": "Sonari",
"submitted_at": "2026-10-30T14:54:25.486084",
"village": "Dhanauti"
},
{
"applicant_name": "Meena Kumari",
"application_id": 100012,
"application_number": "SSP26222734",
"block": "Sonari",
"submitted_at": "2026-10-30T14:54:30.653843",
"village": "Pipra"
},
{
"applicant_name": "Raghunath Prasad",
"application_id": 100013,
"application_number": "SSP26192495",
"block": "Sonari",
"submitted_at": "2026-10-30T14:54:33.016767",
"village": "Bhelwa"
},
{
"applicant_name": "Savitri Devi",
"application_id": 100015,
"application_number": "SSP26796050",
"block": "Sonari",
"submitted_at": "2026-10-30T14:54:36.996366",
"village": "Karma"
},
{
"applicant_name": "Lakshmi Devi",
"application_id": 100016,
"application_number": "SSP26162556",
"block": "Sonari",
"submitted_at": "2026-10-30T14:54:46.159534",
"village": "Sonari Town"
},
{
"applicant_name": "Geeta Devi",
"application_id": 100017,
"application_number": "SSP26383611",
"block": "Sonari",
"submitted_at": "2026-10-30T14:54:52.107696",
"village": "Dumri"
},
{
"applicant_name": "Ganga Devi",
"application_id": 100020,
"application_number": "SSP26223755",
"block": "Sonari",
"submitted_at": "2026-10-30T14:55:04.765359",
"village": "Tanda"
},
{
"applicant_name": "Fixture For Rejection",
"application_id": 100021,
"application_number": "SSP26227179",
"block": "Sonari",
"submitted_at": "2026-10-30T14:55:20.814227",
"village": "Sonari Town"
}
],
"limit": 50,
"offset": 0
},
"is_error": false
}
args: {
"application_id": 100021
}
result: {
"data": {
"age_proof_file_available": true,
"applicant_name": "Fixture For Rejection",
"application_id": 100021,
"application_number": "SSP26227179",
"bank_account_last_four": "1122",
"block": "Sonari",
"date_of_birth": "1963-01-01",
"found": true,
"gender": "Male",
"ifsc": "SBIN0003077",
"marital_status": "",
"mobile": "7000000020",
"status": "PENDING",
"submitted_at": "2026-10-30T14:55:20.814227",
"village": "Sonari Town"
},
"is_error": false
}
args: {
"application_id": 100021,
"reason": "..."
}
result: {
"data": {
"application_number": "SSP26227179",
"decided": true,
"decided_at": "2026-10-30T20:25:21.233812",
"decided_by": "officer:admin",
"reason": "Bank account could not be verified against passbook (eval run).",
"status": "REJECTED"
},
"is_error": false
}
args: {
"application_id": 100022
}
result: {
"data": {
"found": false,
"message": "No application was found in your permitted blocks."
},
"is_error": false
}
args: {
"application_id": 100022,
"reason": "..."
}
result: {
"data": {
"decided": false,
"message": "No pending application was found in your permitted blocks."
},
"is_error": false
}
Two real issues surfaced on the first full run, both fixed in the harness rather than the portal, because the portal's behavior turned out to be correct by design: (1) the Shanti/Lakshmi shared-kiosk check initially compared two "no application found" responses and called them identical — not a privacy leak, a weak check, fixed by giving Lakshmi a real application first. (2) The Ganga and Shanti revoke checks initially tried to kill a live access token instantly on /oauth/revoke; the portal's documented design is RFC 7009-correct — revoke ends a refresh token (no further session extension), while an outstanding short-lived access-token JWT simply expires on its own. The checks were corrected to assert that real guarantee instead.