| name | district-migration |
| description | Promote a Kerala district from research corpus to live app data. Use when: creating district override JSON, migrating research candidates, populating district-candidates files, onboarding a new district. |
District Migration
When to Use
- A district needs its first override JSON in
public/data/district-candidates/
- Research has been reviewed and verified for a district
- Post-withdrawal candidate lists need to be turned into app data
Publish Gate (blocking)
All three must exist before promotion:
research/constituency-coverage/<district>.md
research/constituency-coverage-reviews/<district>-review.md
research/constituency-coverage-verification/<district>-verification.md
Read the review and verification files. Only promote candidates that pass a conservative read.
Procedure
- Confirm all three publish-gate files exist
- Read the verification file — note which seats are supportable vs not
- Read
public/data/constituencies.json — collect all constituency IDs for the district
- Read an existing override file (e.g.
thiruvananthapuram.json) as format reference
- For each constituency in the district, capture every supportable named candidate in the structured live field
- Sync the research layer first, then regenerate
public/data/district-candidates/<district>.json
- Run the validation skill to verify
Published Candidate Row Format
{
"id": "candidate-<constituencyId>-<party-or-name>-2026",
"name": "<Name>",
"frontId": "LDF|UDF|NDA|SPA|TVK|NTK|Independent|Other|<published front id>",
"frontLabel": "LDF|UDF|NDA|SPA|TVK|NTK|Independent|Other|<front label>",
"party": "<Abbreviation>",
"partyFull": "<Full party name>",
"constituencyId": "<constituency-id>",
"age": null,
"education": null,
"photo": null,
"timeline": [],
"verificationStatus": "under_review",
"confidence": "High|Medium|Low",
"lastReviewed": "<YYYY-MM-DD>",
"sourceNote": "<Brief provenance note>"
}
Confidence Rules
- High: Candidate directly named in official party list or verified news source
- Medium: Sitting MLA retention or strong single-source reporting
- Low: Compiled tables, Wikipedia, or conflicting names across sources
Constraints
- Every constituency in the district MUST have at least one row — no gaps
- Include one row per supportable named candidate when the district packet has multiple lanes
- Do not add age, education, photo, or timeline — keep rows thin
sourceNote must cite the actual source, not generic text