How the momentum score works
No black box. Here is the whole method; you can recompute any number on the site from the evidence lists.
1. Source
Every month PRS Legislative Research, a non-partisan Indian think-tank, publishes a Monthly Policy Review listing every significant government action — bills, rules, committee reports, drafts, court rulings — grouped by ministry. It is licensed CC BY 4.0, so we can reuse it with attribution. We fetch each review once (respecting their crawl delay) and keep the history.
2. Taxonomy: domain × impact × stage
Every action is classified along three independent axes, so the same Bill can be "Digital & AI" (domain), reach "Jobs" and "Education" (impacts), and sit at "Draft" (stage) without any of those labels fighting each other.
- Domain — the part of government acting, following ministry lines: Digital & AI · Work, wages & skills · Money, markets & tax · Education & exams · Law, courts & policing · Health & medicine · Business & startups · Energy & environment. Domains are what we score for momentum.
- Impact — who the action reaches: 💼 Jobs & income · 💰 Your money · 🎓 Education · 📱 Digital life · ⚖️ Rights & safety · 🏭 Running a business · 🩺 Health. An action can carry several. Impacts are a lens for filtering, never a score.
- Stage — where in the pipeline: draft/consultation → committee → in Parliament → law passed → rules notified → implementation. Shown on every action and on each journey.
- Persona — the "For you" lines for students, gig workers, founders and salaried readers, written by the editorial model.
The seven original topic pages (e.g. "Gig work & labour codes") now redirect to their domain; the old links still work.
3. Tagging
Each action is matched against a small keyword list per topic (title matches count 3×, body matches 1×, a matching PRS ministry heading adds 1). Anything scoring ≥ 4 becomes evidence for that topic. Keyword lists are public in the repo and can be argued with.
4. Weighting by what kind of action it is
A law being passed matters more than a committee recommending something. Each action gets a weight:
| Action | Weight |
|---|---|
| Law passed | ×3.0 |
| Bill introduced | ×2.0 |
| Rules notified | ×2.0 |
| Cabinet approval | ×1.8 |
| Open for comment | ×1.5 |
| Court ruling | ×1.5 |
| Committee report | ×1.2 |
| Scheme / programme | ×1.2 |
| Update | ×1.0 |
5. Momentum
For each topic we sum weights per month, then compare the average of the last 3 months against the 6 months before. The % change is what you see on each card. Labels: Heating up ≥ +50%, Cooling ≤ −33%, Quiet when recent activity is under 1 weighted point/month, otherwise Steady.
6. Confidence
A percentage on a handful of documents looks more precise than it is, so every signal carries a confidence label:
- Low — fewer than 8 tagged actions in total, or fewer than 2 in the recent window. One document can flip the label.
- Medium — fewer than 20 actions, or fewer than 3 ministries involved, or over 80% of recent activity in a single month (a parliamentary-session effect).
- High — 20+ actions, 3+ ministries, activity spread across months.
Until a second independent source is added, nothing is rated above what the evidence count allows, and every topic page states the "single source" limitation.
7. Ordering
Cards are ordered by an internal composite (45% momentum, 40% recent volume, 15% breadth), exposed as sort_score in the JSON. We deliberately don't display it as a headline number: it would imply that a topic with more activity is more important, which the data cannot support.
8. "You can still respond"
Open consultations come primarily from PRS's live Announcements table, which lists exact deadlines and the official notice. We then read the notice itself (PDF or ministry page) to pull out the submission email and the body that takes comments — a regex today, a language model later. Monthly-review items add anything the table misses; their deadlines come from PRS's text, or failing that from headlines of independent coverage (shown as "via SCC Online"). A draft older than two months with no deadline anywhere is labelled likely closed, because the Pre-Legislative Consultation Policy prescribes 30-day windows. Always verify on the notice — deadlines get extended.
9. The states
PRS also lists every Bill introduced in state legislatures (bills/states) and writes plain-English State Legislative Briefs on selected ones. We ingest this and last year's Bills, tag them to our topics with the same keyword rules, and show them beside each topic — "Centre quiet, states moving" is often the real story. PRS records the year of a state Bill, not the month, so this layer is counted per year and never blended into the monthly momentum arithmetic. From now on we also record when each Bill first appeared in our weekly fetch, so the brief can flag what is new in the states.
10. Public chatter
PRS records what government did; public chatter sits beside the score, never inside it. Weekly sources include allow-listed newsroom and government feeds, Google News search results from known outlets, GDELT, Bluesky and Mastodon. Requests are spaced and cached for six hours. X and Reddit are collected separately by Citizen's Corner, using approved API credentials without raw-response caching.
Credibility is enforced in three passes: per-post quality checks, grouping by shared links and distinctive words, then source-coverage labels. Single posts are hidden. Confirmed requires a directly collected government document or two newsroom sources; a social post linking to a newsroom does not count as an additional newsroom. One newsroom has exactly one, and Community needs three or more distinct accounts on two platforms or with engagement. Near-identical social text is collapsed. These are coverage labels, not proof that every claim in a cluster is true: news can be syndicated, and linked opinions are not verified.
Each shown conversation is then matched against the topic's recent PRS actions, so you can see whether it tracks a formal action or is running ahead of the record. This is deliberately the noisiest layer on the site and is labelled as such; it is a lens on attention, not evidence of government action.
11. What the model writes, and what it doesn't
A language model drafts the hook headlines, the persona "For you" lines, the weekly "This week in 60 seconds" note, summaries and Hindi translations — always from the items on the page, and labelled AI-drafted · source-linked. It does not touch the momentum arithmetic, the confidence rules, deadline dates or corroboration counts. Until an API key is configured, those drafts are written by a model in the editor's session and committed as seed files you can inspect in the repository.
Glossary
- Law passed
- Parliament passed it (or it got the President's assent). It is now law, though it may take effect later.
- Bill introduced
- A Bill was tabled in Parliament. It can still change, be sent to a committee, or lapse.
- Rules notified
- The government issued binding rules, regulations or a notification under an existing law. No vote needed.
- Cabinet approval
- The Union Cabinet approved a proposal — usually the step before a Bill is introduced or a scheme launches.
- Open for comment
- A draft was published for public comment. Anyone can respond before the deadline.
- Committee report
- A parliamentary committee of MPs from all parties examined an issue and made recommendations. Not binding.
- Scheme / programme
- A government programme was launched, approved or expanded.
- Court ruling
- A court ruling or stay that changes how a law works in practice.
- Update
- A statement, report or development that doesn't fit the categories above.
Citizen's Corner: How scoring works
Views in the collected sample, not what Indians think. Accounts are not verified citizens. Likes and votes are not credibility, and these discussions never change policy momentum or confidence.
Daily approved-API searches: at most 25 recent results per domain and platform, no pagination, 16 searches plus one Reddit token request. X requires India/Indian context and searches its recent window (normally seven days); Reddit searches an allow-listed set of Indian communities over a month. The English watch phrases are an incomplete policy/issue list, not discovery of every policy. Replies/reposts on X, removed/NSFW Reddit posts, promotions, hashtag walls and low-signal Reddit posts are excluded. Exact normalized copies are collapsed and each account contributes at most one new post per policy per day. Coordinated paraphrases and cross-platform duplicate accounts may still pass. Outcomes and cooldowns are stored in SQLite; gaps are never interpolated.
Daily counts are newly observed, deduplicated posts on the collection date, not total mentions or posting-date activity. A dash is a collection gap; zero means a successful search found no new qualifying posts. History starts when collection starts.
Conservative English text rules, not a sentiment score: explicit support/opposition cues, questions and discussion themes. Each shown cue needs at least three distinct platform accounts. Labels can overlap; sarcasm, mixed views, translation and attribution remain limitations. Unclassified posts still count. A news link does not verify an attached opinion.
No full social text, usernames or profile fields are stored by this collector. Source links and policy-scoped account hashes support audit and deduplication. Live observation rows expire after 90 days; published snapshots and repository history can persist. Follow source links for the current post; links may be removed. This is not factual verification or automated profiling.
Known limits
- This measures formal government action, not public attention. PRS records bills, rules, committee reports and drafts. It does not record implementation, strikes, court petitions or news coverage. A topic can be "Quiet" here while dominating headlines.
- API access and billing depend on current platform terms. Citizen's Corner uses approved X/Reddit credentials and displays per-source collection gaps. GDELT and other chatter feeds can be unavailable or throttled; a refresh is not evidence of complete coverage.
- Keyword tagging misses synonyms and can over-match generic words. Evidence is shown so you can spot this.
- Plain-English summaries are generated by an AI model or extracted from the first sentence; the linked primary document is always authoritative.