Verification Standards for Exam Pages¶
This document codifies the evidence standards that every exam page in awesome-indian-exams must meet. These standards are enforced by the content gate (scripts/validate.py) and the evidence gate (scripts/evidence_gate.py).
Frontmatter last_verified Date Integrity¶
Rule 1: Official Fetch Required for Updates¶
The last_verified date in frontmatter must only be updated if official documents were successfully opened and verified during the current run with HTTP 200 status.
- A page's
last_verifieddate represents the date the official source was last fetched and confirmed. - Updating
last_verifiedwithout a successful HTTP 200 fetch from an official domain is prohibited. - The fetch must be recorded in the task receipt (
ops/done/T-XXX.md) via thefetch_urltool.
Rule 2: Evidence Text Date Must Match Frontmatter¶
The evidence status line in the page body must contain a date that exactly matches the last_verified frontmatter date.
Required format (example):
---
last_verified: 2026-09-27
verification: official
---
> **Evidence status: 🟢 official.** Every number below is from the SSC Combined Graduate Level
> Examination, 2026 notice (F. No. HQ-C11018/1/2026-C-1), fetched from ssc.gov.in on 2026-09-27.
- The date in "fetched from ... on YYYY-MM-DD" or "checked on YYYY-MM-DD" or "verified on YYYY-MM-DD" must equal
last_verified. - Any contradiction (evidence text date ≠ frontmatter
last_verified) automatically rejects the page fromverification: officialstatus. - The evidence gate (
scripts/evidence_gate.py) cross-checks the receipt's fetch records against both dates.
Rule 3: Failed Fetches Preserve Existing Content¶
If official sources fail to fetch (HTTP 403, 404, 5xx, URLError, timeout, DNS failure):
- Do not change the existing
last_verifieddate. - Downgrade
verificationtosecondaryorunverified. - Retain all existing verified content — do not remove numbers, patterns, or syllabus entries.
- Add a disclaimer at the top of the page noting the fetch failure and current status.
Example disclaimer:
> **Evidence status: 🟡 secondary.** The official portal `example.gov.in` returned HTTP 403 on 2026-10-01.
> Content retains the last verified facts from 2026-09-15. Re-verify when the portal is accessible.
Rule 4: Verification Status Definitions¶
| Status | Meaning | Requirements |
|---|---|---|
official |
Every fact traced to official document fetched this run | HTTP 200 fetch recorded in receipt; evidence text date = last_verified; all numbers sourced from fetched doc |
secondary |
Facts from official sources but not re-verified this run | Previous official content retained; fetch failed or not attempted this run |
unverified |
No official source confirmed; content may be incomplete | Placeholder or harvested content awaiting verification |
Official Sources Section¶
Under ## Official sources, only list URLs that:
1. Are on domains listed in ops/official-domains.txt
2. Were fetched with HTTP 200 during the current or a previous verified run
3. Directly support the numbers in ## At a glance and ## Exam pattern
Coaching sites, blogs, news aggregators, Telegram, Drive, Mega, Scribd, and file-dump hosts are never allowed under ## Official sources.
Content Gate Checks¶
The content gate (scripts/validate.py --strict) enforces:
- All required frontmatter keys present (
title,exam_id,conducting_body,official_site,cycle,last_verified,verification) last_verifiedis valid YYYY-MM-DD, not in the futureverificationis one ofofficial,secondary,unverified- All required sections present (
## At a glance,## Official sources,## Exam pattern,## Syllabus,## Free resources) - All links under
## Official sourcespoint to allowed official domains - No blocked hosts (Telegram, Drive, Mega, etc.) anywhere in the page
- Relative links resolve within the content folder
- Generated files (
README.md,UPDATES.md,resources/all-exams.md,resources/overlap-map.md) are in sync
Evidence Gate Checks¶
The evidence gate (scripts/evidence_gate.py) runs on agent branches and enforces:
For any exam page newly marked verification: official or with a changed last_verified:
- The task receipt must contain a ## Sources fetched (code) block with JSONL fetch records
- At least one record must have: status: 200, official: true, URL matching one under ## Official sources, fetch date within ±1 day of last_verified
- If no such record exists, the gate fails with: "marked official, but no code-recorded fetch backs it"
Agent Workflow for Verification¶
When assigned a verification task (e.g., "Verify exams/xxx/yyy.md against official notification"):
- Fetch the official notification/bulletin using the
fetch_urltool (records evidence automatically). - Extract every number (stages, questions, marks, time, negative marking, age, qualification, dates) from the fetched document only.
- Update the page with only confirmed facts. If a fact is not in the document, write "see the notification" or omit it.
- Set
last_verifiedto today's date (YYYY-MM-DD) only if the fetch succeeded (HTTP 200). - Write the evidence status line with the matching date: "fetched from
on YYYY-MM-DD". - Set
verification: officialonly if the fetch succeeded and all numbers match. - If fetch fails: keep existing
last_verified, setverification: secondaryorunverified, add disclaimer, retain all content. - Run
scripts/validate.py --strictand fix all errors before finishing.
Common Violations and Fixes¶
| Violation | Fix |
|---|---|
last_verified updated but no fetch in receipt |
Re-fetch with fetch_url, update receipt, ensure HTTP 200 |
Evidence text date ≠ last_verified |
Align both dates to the actual fetch date |
verification: official but fetch failed (403/URLError) |
Downgrade to secondary/unverified, add disclaimer, revert last_verified |
Non-official link under ## Official sources |
Remove or replace with official domain link |
| Missing evidence status line | Add > **Evidence status: ...** block with fetch date |
Stale last_verified (>120 days) |
Re-verify against current official notification |
References¶
scripts/validate.py— content gate implementationscripts/evidence_gate.py— evidence gate implementationops/official-domains.txt— allowlisted official domainsops/tasks.toml— task definitions with acceptance criteria
This standard is binding for all agent lanes. Changes require a reviewed pull request by the owner.