Policy Pulse № 43
← All topics

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.

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:

ActionWeight
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:

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