Methodology

How Propagate collects, verifies, and labels data. Every claim in this dataset is either directly documented with a primary source or explicitly labeled as analytical inference. There is no middle ground.

Verification Standards

Every bill record in Propagate must be verified against at least one primary source before inclusion. "Primary source" means an official government database, official legislature website, or a direct legal analysis citing the official record.

Acceptable Verification Sources (in order of preference)
Tier 1 — Official
  • Official state legislature website (e.g., leg.colorado.gov, lis.virginia.gov)
  • Official bill text PDFs from state legislature
  • Governor's official veto/signing message
Tier 2 — Aggregator
  • LegiScan (legiscan.com) — cross-referenced bill tracking
  • OpenStates API (openstates.org) — structured bill data
Tier 3 — Legal Analysis
  • Law firm client alerts (KL Gates, Fisher Phillips, etc.) citing official records
  • CSIS, Brookings, or similar policy institute analyses with citations
Not acceptable as sole verification
  • News articles without citation to official record
  • Wikipedia or secondary encyclopedia sources
  • Social media posts, even from official accounts
  • AI-generated summaries without primary source citation

The verified_by field records the specific sources used to confirm each bill record. The verification_date records when the verification was last performed. Contributors must update both fields when correcting or updating a record.

Inference Labeling

Propagate distinguishes between two categories of claims: documented fact (directly sourced from a primary record) and analytical inference (derived from patterns, analogies, or indirect evidence). Both are valuable — but they must never be conflated.

Documented Fact

Directly sourced from a primary record. Can be independently verified by following the cited URL.

Examples:
· Bill number confirmed via LegiScan
· Veto date from Governor's official message
· Sponsor name from official legislature record
Analytical Inference

Derived from patterns, analogies, or indirect evidence. Cannot be independently verified from a single primary source.

Examples:
· Opposition salience score estimated from bill outcome
· Coalition membership inferred from similar bills in other states
· Arguments inferred from industry pattern, not documented testimony
INFERENCE
Inference Labeling Rules
All inference must be labeled in the UI
Any data point with inference_flag=true must display the amber INFERENCE badge. No exceptions.
Inference source strings must be prefixed with 'INFERENCE'
The data_source field for inferred records must begin with 'INFERENCE —' followed by the reasoning.
Inference scores are hypotheses, not findings
Researchers citing inference-flagged data must note this in their work. Propagate does not validate inferred claims.
Inference can be upgraded to documented fact
When a primary source is found for an inferred claim, update inference_flag to false, update data_source, and update verification_date.
opposition_salience Inference Policy

The opposition_salience field is particularly susceptible to inference because formal opposition testimony records are not always publicly accessible. The following rules apply:

  • Scores based on documented testimony or lobbying disclosures: inference_flag = false
  • Scores estimated from bill outcome or analogous bills: inference_flag = true
  • Scores for bills not yet introduced (anticipated status): always inference_flag = true

verified_by Schema

Every bill record includes three verification fields that document the provenance of the data:

verified_by
stringrequired

Free-text description of the sources used to verify this record. Should name specific databases and URLs.

LegiScan + Colorado Legislature official page
verification_date
date (ISO 8601)required

Date the record was last verified against primary sources. Must be updated whenever the record is modified.

2026-04-18
verification_notes
string

Optional extended notes about the verification process, corrections made, or fields that still require verification.

CORRECTION: User originally cited VA HB 2481 (workers' comp bill). Correct bill is HB 2094.
Note on verification_notes: This field is especially important for corrections. When a bill number is corrected from an originally-cited wrong number, the correction must be documented in verification_notes with the original incorrect value and the reason for the correction. This maintains an audit trail for researchers who may have encountered the incorrect number elsewhere.

Contribution Workflow

Propagate is a static, open-source dataset. Contributions are made via GitHub Pull Request against the canonical YAML files. This model ensures all changes are peer-reviewed, versioned, and auditable.

Contribution Steps
1
Fork the repository
Fork the Propagate GitHub repository to your own account. All changes must be made in a fork, not directly on main.
2
Identify the canonical YAML file
Bill data lives in public/data/bills/{family}.yaml. The ADMT family is in admt-family.yaml. Do not modify the TypeScript data files directly — they are derived from the YAML.
3
Make your change with verification
Add or update the bill record. You MUST include verified_by (naming the specific source), verification_date (today's date), and verification_notes (explain what you changed and why). For new bills, cross-reference at least one Tier 1 or Tier 2 source.
4
Label inference explicitly
If any field is analytically inferred rather than directly documented, set inference_flag: true and prefix the data_source with 'INFERENCE —'. Do not present inferred data as documented fact.
5
Open a Pull Request
Open a PR against the main branch. In the PR description, include: (a) the bill you're adding/correcting, (b) the primary source URL you used, and (c) any inference flags you set and why.
6
Review process
PRs are reviewed for: correct bill number (cross-checked against primary source), complete verification fields, proper inference labeling, and YAML syntax validity. Incorrect bill numbers are the most common rejection reason.
Common Rejection Reasons
  • Wrong bill number. The most common error. Always verify the bill number against LegiScan or the official legislature website before submitting. Wrong session years are a frequent sub-error (e.g., TX HB 1709 in the 88th vs. 89th Legislature).
  • Missing verification fields. PRs without verified_by, verification_date, and a primary source URL will not be merged.
  • Unlabeled inference. If opposition_salience data is inferred, inference_flag must be true. Presenting inferred data as documented fact is grounds for rejection.

Known Limitations

Propagate is a research tool, not a comprehensive legislative database. The following limitations are known and should be considered when using this data:

Coverage is not exhaustive
INFERENCE

The ADMT family currently tracks 7 bills across 5 states. Many states with ADMT activity are not yet represented. 'No activity' on the Diffusion Map means 'no activity in this dataset,' not 'no activity in that state.'

opposition_salience scores are partially inferred
INFERENCE

4 of 7 ADMT bill records have inference_flag=true for opposition_salience. Formal opposition testimony records are not always publicly accessible. Scores should be treated as hypotheses pending primary source verification.

Sponsor lists may be incomplete

Primary sponsors are verified; cosponsor lists may be incomplete for some bills. The verification_notes field documents which fields still require additional verification.

Genealogy edges are analytical
INFERENCE

The genealogy tree represents Propagate's analytical judgment about bill relationships, not an official categorization. 'Direct model' vs. 'parallel development' distinctions involve interpretive judgment.

Dataset is static between updates

Propagate is updated via GitHub PR. Bills that change status (e.g., a vetoed bill that is re-introduced) will not be reflected until a contributor submits a PR with the update.