legislative-tracker
Legislative Tracker Skill
Track Washington State K-12 education legislation from leg.wa.gov using committee-based discovery. This approach queries committees directly via SOAP API to get ALL bills - not just keyword matches.
Why Committee-Based Discovery
Problem with keyword searching: Bills with unexpected wording or indirect impacts get missed. A bill about "unfunded mandates" might never mention "school" but still affect districts.
Solution: Query education committees directly. If a bill is in the House Education Committee or Senate Early Learning & K-12 Education Committee, it's education-related by definition.
Discovery Strategy
Tier 1: Direct Education Bills (Comprehensive)
Query these committees to get ALL education bills:
| Committee | Chamber | Query |
|---|---|---|
| Education | House | All bills - no filtering |
| Early Learning & K-12 Education | Senate | All bills - no filtering |
Tier 2: Indirect Impact Bills (Candidates)
Query these committees and filter via WebFetch:
| Committee | Chamber |
|---|---|
| Appropriations | House |
| Capital Budget | House |
| Labor & Workplace Standards | House |
| Ways & Means | Senate |
| Labor & Commerce | Senate |
| State Government, Tribal Affairs & Elections | Senate |
Workflow: The SOAP API returns only bill IDs. Geoffrey must:
- Get all bill IDs from Tier 2 committees (~700 bills)
- WebFetch each bill's summary page to get the title/description
- Filter for education keywords in the description
- Add matching bills to the tracked list
Filter keywords: school, student, teacher, education, k-12, district, ospi, classroom, principal, paraeducator, learning, instruction, curriculum, diploma, graduation, superintendent, levy, bond, capital, school construction
Tier 3: WebSearch Fallback
If SOAP API fails, use WebSearch:
site:leg.wa.gov "referred to Education" 2025-26
site:leg.wa.gov "Early Learning & K-12" 2025-26
site:leg.wa.gov K-12 school district bill 2025
Workflow Phases
Phase 1: Committee Discovery (SOAP)
Run the orchestrator script:
bun skills/legislative-tracker/scripts/get_bills.js
Returns two lists:
- confirmed_bills: From Tier 1 education committees (definitely education-related)
- tier2_candidates: From Tier 2 finance committees (need filtering)
Phase 2: WebFetch Confirmed Bills
For each bill in confirmed_bills:
URL: https://app.leg.wa.gov/billsummary?BillNumber={NUM}&Year=2025
Extract full details for analysis.
Phase 3: Filter Tier 2 Candidates
For each bill in tier2_candidates:
- WebFetch the bill summary page
- Check if title/description contains education keywords
- If relevant, add to tracked bills list
Education keywords: school, student, teacher, education, k-12, district, ospi, classroom, principal, paraeducator, learning, instruction, curriculum, diploma, graduation, superintendent, levy, bond, capital
Phase 4: Analysis
Apply analysis framework to all tracked bills:
- Assign priority level (HIGH/MEDIUM/LOW)
- Categorize impact type (FISCAL/OPERATIONAL/WORKFORCE/GOVERNANCE)
- Assess fiscal implications
- Flag district legislator sponsorship
Phase 4: Output
Generate report in requested format and save to Obsidian:
Path: Work/PSD/Legislative/[YYYY-MM-DD].md
Tags: #legislation #psd #work
Script Usage
Main Orchestrator
# Full discovery (both tiers)
bun skills/legislative-tracker/scripts/get_bills.js
# Education committees only (Tier 1)
bun skills/legislative-tracker/scripts/get_bills.js --tier 1
# Finance committees only (Tier 2)
bun skills/legislative-tracker/scripts/get_bills.js --tier 2
# Briefing format for morning-briefing integration
bun skills/legislative-tracker/scripts/get_bills.js --format briefing
Committee Explorer
# List all active committees
bun skills/legislative-tracker/scripts/get_committees.js
# House committees only
bun skills/legislative-tracker/scripts/get_committees.js --chamber house
# Education committees only
bun skills/legislative-tracker/scripts/get_committees.js --filter education
Single Committee Query
# Get bills in a specific committee
bun skills/legislative-tracker/scripts/get_committee_bills.js \
--committee "Education" --agency House
# Include referral history
bun skills/legislative-tracker/scripts/get_committee_bills.js \
--committee "Education" --agency House --referrals
Single Bill Lookup
# Get WebFetch URL for a specific bill
bun skills/legislative-tracker/scripts/get_bill_info.js HB 2551 --year 2025
bun skills/legislative-tracker/scripts/get_bill_info.js "SB 6247" --year 2025
Analysis Framework
Priority Levels
| Level | Symbol | Criteria |
|---|---|---|
| HIGH | 🔴 | Direct fiscal impact >$100K, immediate deadline (<7 days), new mandates affecting operations, sponsored by district legislator |
| MEDIUM | 🟡 | Moderate impact, compliance changes, deadline within 30 days |
| LOW | 🟢 | Minimal direct impact, monitoring only, distant timeline |
Impact Categories
| Category | Keywords | Description |
|---|---|---|
| FISCAL | levy, bond, funding, appropriation | Funding formulas, levies, bonds, appropriations |
| OPERATIONAL | procurement, transportation, facilities | Day-to-day operations, contracts, services |
| WORKFORCE | staff, salary, certification, benefits | Staffing, compensation, certification requirements |
| GOVERNANCE | reporting, accountability, board | Compliance, reporting, board authority |
Fiscal Impact Indicators
| Indicator | Symbol | Meaning |
|---|---|---|
| COST INCREASE | ⬆️ | Adds expense to district budget |
| COST DECREASE | ⬇️ | Reduces costs or adds revenue |
| RISK | ⚠️ | Financial uncertainty or liability exposure |
| NEUTRAL | ➡️ | No direct fiscal impact to district |
Output Formats
Briefing JSON (for morning-briefing)
{
"summary": {
"total_bills": 12,
"new_this_period": 3,
"urgent": 2,
"by_priority": { "high": 2, "medium": 5, "low": 5 }
},
"priority_items": [
{
"bill": "HB 1234",
"title": "Concerning school construction funding",
"priority": "high",
"impact": "fiscal",
"fiscal_indicator": "cost_increase",
"next_action": "House vote 2026-01-30",
"summary": "Increases capital project funding requirements by 15%"
}
],
"upcoming_deadlines": [],
"generated_at": "2026-01-27T08:00:00Z"
}
Full Report Markdown
# WA School Legislation Radar
Report Date: 2026-01-27
Session: 2025-26 Regular
Discovery: Committee-based (Tier 1 + Tier 2)
## 🚨 Priority Action Items
### 🔴 HIGH Priority
#### HB 1234 - School Construction Funding
- **Status:** Passed House, in Senate Education Committee
- **Sponsors:** Rep. Smith (26th), Rep. Jones
- **Impact:** FISCAL ⬆️
- **Summary:** Increases capital project funding requirements
- **Next Action:** Senate hearing Feb 1
## 📊 Legislative Dashboard
### Discovery Summary
| Source | Bills Found |
|--------|-------------|
| House Education | 15 |
| Senate EL/K-12 | 12 |
| Tier 2 (filtered) | 8 |
| **Total Unique** | **28** |
### By Priority
| Priority | Count | Bills |
|----------|-------|-------|
| 🔴 HIGH | 2 | HB 1234, SB 5678 |
| 🟡 MEDIUM | 5 | ... |
| 🟢 LOW | 5 | ... |
## 📋 All Tracked Bills
[Per-bill details grouped by priority level]
---
*Generated by Geoffrey Legislative Tracker*
*Discovery: Committee-based SOAP API*
Data Sources
SOAP API (Primary)
Endpoint: https://wslwebservices.leg.wa.gov/
| Service | Method | Purpose |
|---|---|---|
| CommitteeService | GetActiveHouseCommittees | List House committee names |
| CommitteeService | GetActiveSenateCommittees | List Senate committee names |
| CommitteeActionService | GetInCommittee | Bills currently in committee |
| CommitteeActionService | GetCommitteeReferralsByCommittee | All bills ever referred |
Parameters:
biennium: "2025-26"agency: "House" or "Senate"committeeName: Exact name from GetActive*Committees
WebFetch (Bill Details)
URL Pattern: https://app.leg.wa.gov/billsummary?BillNumber={NUM}&Year=2025
District Configuration
From config/topics.yaml:
district:
name: "Peninsula School District"
legislators:
- name: "Sen. Emily Randall"
district: 26
chamber: senate
- name: "Rep. Spencer Hutchins"
district: 26
chamber: house
- name: "Rep. Adison Richards"
district: 26
chamber: house
Bills sponsored by district legislators get elevated priority consideration.
Error Handling
| Scenario | Response |
|---|---|
| SOAP timeout/error | Fall back to WebSearch (Tier 3) |
| Committee not found | Check exact name via get_committees.js |
| No bills in committee | Normal - committee may not have active bills |
| Bill page unavailable | Skip bill, note in report |
Session Scope
- Current biennium: 2025-26
- Session types: Regular, Special (1st, 2nd, 3rd)
- Year parameter for URLs: 2025 (uses session start year)
Related Skills
- morning-briefing: Receives legislative JSON for audio summary
- obsidian-manager: Stores full reports to vault
- omnifocus-manager: (Optional) Could create tasks for urgent deadlines