Changelog
What shipped, when. Newest first.
5.9.0
May 30, 2026alpha
  • Every bill now has a one-tap link to its official page on leg.wa.gov, right beside the AI summary — read the real legal text in a tap, instead of relying on the machine-written summary alone.
  • Bill pages now show the date of the bill’s last action, so you can see at a glance how current the status is.
  • The methodology page now states coverage and freshness plainly: every bill is tracked (not a sample), the model is calibrated on 8,062 historical bills, and data syncs from the Legislature daily.
5.8.3
May 30, 2026alpha
  • Members page is significantly faster: the legislator stats list now loads about 3x quicker after a database tuning pass, and a member’s voting record loads with fewer round-trips.
5.8.1
May 30, 2026alpha
  • Bill detail: the score’s “X factor” chips are now tappable — tap any factor to read what it means and how it moves the score, instead of the explanation being hidden behind a desktop-only hover.
  • Finished the input-zoom fix on the remaining search and note fields (members search, watchlist notes), so no form field zooms the screen on iPhone.
5.8.0
May 30, 2026alpha
  • Accessibility pass: form fields no longer trigger an iOS zoom-in when tapped, bottom-navigation labels are more legible, and tap targets across the app now meet the 44px touch minimum.
  • Motion now fully respects your device’s “reduce motion” setting — the pulsing score and status animations stop when you’ve asked your phone to minimize movement.
  • Score colors (Sage / Teal / Amber / Stone) are now defined in one place, keeping the look consistent everywhere a score appears.
  • Screen readers now announce a score with context (“Trajectory score 65 of 99”) instead of a bare number.
5.7.1
May 29, 2026alpha
  • Repeat visits now load near-instantly: the app caches its own code and images on your device after the first visit instead of re-downloading them every time.
  • Faster behind-the-scenes data: added database indexes so the home dashboard’s bill and outcome queries return in milliseconds instead of seconds.
  • Trimmed the amount of code the app ships to your browser, and moved the servers closer to the data for lower latency.
5.7.0
May 29, 2026alpha
  • The home dashboard now paints instantly with a structured loading state instead of a single full-screen spinner — you see the brand bar, session timeline, and card layout right away while the data fills in.
  • Cut the initial home load from three back-to-back database round-trips to one: the bill list, watchlist, totals, and session-outcome counts now load together rather than in sequence.
  • Sign-in status is read locally on first paint instead of waiting on a network check, so the dashboard starts loading its data sooner.
  • Removed a stack of redundant per-session lookups that ran on every home visit, and moved the score-change indicators off the critical path so they fill in just after the page appears.
  • Switched the three brand typefaces (Playfair Display, Karla, DM Mono) to self-hosted, preloaded fonts — faster first text render and no layout shift on load.
5.6.1
May 29, 2026alpha
  • Bill detail trust fixes (T156): three lobbyist-identified credibility issues addressed. "No vote yet" on Floor Margin now shows "—" for signed, passed-chamber, and dead bills — the session is over and the absence of stored margin data is a gap, not evidence a vote never happened.
  • Negative X-factor chips (e.g. "Minority Only −10%") are now suppressed on bills that became law. They were scoring penalties applied during session and are retroactively misleading on signed legislation — a bill that passed 97-0 should not display a minority-sponsorship penalty badge. DEAD and PASSED CHAMBER bills retain all factors since they help explain why a bill stalled.
  • AI summary section redesigned for trust: badge renamed from "AI-GENERATED" (alarming) to "AI SUMMARY" (neutral); disclaimer moved above the summary text instead of buried 300 words below the fold; reviewed summaries show "REVIEWED" badge in green. The EDIT button is now gated on a separate canEditBillSummary capability rather than canEditNotes, since summary edits update the global bills table for all users.
5.6.0
May 28, 2026alpha
  • Methodology page redesigned for senior lobbyist / validity lens (T155): section order rebuilt so credibility evidence ("Why This Matters") appears before the data tables rather than after. The proof now follows the hook.
  • TL;DR card upgraded: 84% HIGH-tier pass rate now appears as a 36px Playfair Display headline stat, not buried in a sentence. Intro gains two sentences on Washington-specific session mechanics — 60-day calendar, committee chair gating power, and the Rules Committee kill switch.
  • Two calibration sections merged into one: combined 3-biennium engine truth is primary, most-recent-biennium check rendered as a sub-section below. Removed the "Engine Truth" jargon label. "How honest is this?" disclosure restructured with the key sentence pulled out as a visible callout.
  • X Factors grid changed from 2-column to single-column stack — the 2-col layout was breaking on 480px mobile with long label text. Political Dynamics signals each gain an "In practice:" callout and a new "What this model doesn't use" section explains absent signals (JLOB, whip counts, campaign finance). Signal Tiers section removed — redundant with calibration data that already defines tiers inline. Brass left-border accent added to all section labels. CTA button added at page bottom.
5.5.9
May 28, 2026alpha
  • Watchlist PDF full redesign (T154): 19 fixes across visual language, intelligence quality, and format. Box chrome entirely removed — card shells, score boxes, status pills, and session bar replaced with text-row memo grammar consistent with the bill brief.
  • Executive Summary rebuilt to name specific bills: stage changes since last brief, urgent hearings within 7 days, cutoff pressure, and portfolio health signal. Previously the section contained two dead code blocks and never referenced a bill by name.
  • Portfolio Overview table gains a NEXT column (upcoming hearings within 30 days), trend column (+N pts since last run), and correct outcome color coding. PASSED CHAMBER rows now render in Brass-Light instead of matching LAW (Brass) — the two outcomes are now visually distinct.
  • Bill cards on pages 2+ use a new drawBillLabel separator (bill number left, trajectory tier right, full-width rule) instead of rounded rectangles. Paper size corrected to US Letter; margin tightened to 16mm to match the bill brief.
5.5.8
May 27, 2026alpha
  • Bill brief PDF formatting pass (T153): 14 fixes across typography, spacing, and edge cases. Bill title is now the dominant typographic element (12pt) — the trajectory tier word reduced to 11pt, differentiated by color rather than size.
  • Empty-state handling added to all conditional sections — bills with no AI summary, no signals, or no floor votes now show a clean fallback line instead of a blank void. Single-signal bills no longer have their signal suppressed.
  • SPONSOR / COMMITTEE column labels added so first-time readers know which column is which. Affects line now appends an ellipsis when truncated. "Day N of session" removed from header (not actionable — cutoff countdown remains).
  • Raw score annotation ("Score 74") removed from status block — the tier word alone is the signal. Stage History separator changed from > to · consistent with the rest of the document.
5.5.7
May 27, 2026alpha
  • Bill brief PDF rebuilt as a memo-style briefing document (T152): all bordered card boxes removed — the visual language is now a printed brief, not a mobile UI. The only section dividers are brass ALL-CAPS labels with a rule line.
  • Status and score merged into a single block: tier word (HIGH / MODERATE / LIMITED / VERY LOW) leads at 13pt in tier color with the raw score as inline annotation. Recommendation write-in field removed.
  • Fiscal note upgraded from a single word to a full intelligence block: impact level, state vs. local scope, strategic implication (e.g. "Priority legislation — double-referred to fiscal committees. 45% historical passage rate"), and upgrade history with date.
  • Key Signals section converted from chip boxes to text rows with directional triangle indicators and right-aligned delta percentages. Sponsor / Committee section converted to two-column text — no boxes.
5.5.6
May 27, 2026alpha
  • Bill brief PDF C-suite refinements (T151): "Who is Affected" now appears as a brass callout directly under the bill title — no longer buried in the body. A blank RECOMMENDATION field gives lobbyists a write-in action line.
  • Score one-liner now leads with the probability statement ("84% historical pass rate") instead of qualitative hedging. Tier labels translated to plain English: Majority Leadership / Senior Member / Rank-and-file.
  • Hearing date removed from the status pill (was duplicated in the Committee card). Committee card now shows a plain-language countdown: "Hearing in 3 days" or "Heard · [date]". Bill number typeset in Helvetica, not Courier.
  • "TOP X-FACTORS" renamed to "KEY SIGNALS". "PRIME SPONSOR" renamed to "SPONSOR". AI-GENERATED label moved to the footer — no longer cluttering the body.
5.5.5
May 27, 2026alpha
  • Bill brief PDF fully rebuilt (T150): one-page US letter, lobbyist-first layout. Four noise sections removed — bill timeline, political dynamics one-liner, recent amendments list, and "What to Watch" — replaced by a signal-ranked hierarchy.
  • AI summary now shows only the Executive Summary (3 lines max) and Who is Affected (1 line) instead of rendering the full multi-section briefing memo. Wall-of-text problem resolved.
  • Score display upgraded to a filled circle matching the member PDF gold standard (T147–T148). Tier label, one-liner context, and TRAJECTORY SCORE label all anchored to the right of the circle.
  • Sponsor and Committee cards tightened from 22mm to 16mm; X-Factor chips rebalanced to 3 chips in a single row. Most bills now fit comfortably in ~140–190mm, well within a single page.
  • All jsPDF font-before-wrapText discipline applied throughout (T148 pattern). Logo reduced to 14mm matching member PDF. loadSvgWithFillSwap no longer duplicated — uses the shared helper from pdf-shared.js.
5.5.4
May 26, 2026alpha
  • Member brief PDF privacy fix: family information no longer appears in the Background section. Family members are private individuals — the PDF now matches the member card which has always excluded this field.
5.5.3
May 26, 2026alpha
  • Member brief PDF audit (T148): fixed font-metric bug where bill titles were measured at the wrong font size before wrapping — titles now stay inside their column and no longer bleed into score circles.
  • High-tier category line removed from Legislative Focus; bio summary capped at 1 line (was 2); priority chips capped at 4 (was 6). Combined savings of ~12mm keep most member profiles on a single page.
  • Bill sub-row spacing tightened (1mm each × 5 bills) without losing stage/outcome/hearing-date context.
  • Font-before-wrapText fix applied throughout: background lines and bio text now split at the correct rendered size.
5.5.2
May 26, 2026alpha
  • Member brief PDF precision pass: bill title column width increased to guarantee a clean gap before the score circle — no more titles running into score numbers.
  • Priority chips redrawn with top-anchored positioning; they now sit cleanly below the section rule line instead of overlapping it.
  • Page-break safety net tightened (threshold lowered by 10mm) so the footer separator no longer cuts into the last stats footnote on busy member profiles.
  • All committee abbreviations removed: "Cmte" → "Committee Passes", "V.CHAIR" → "VICE CHAIR", funnel labels written out in full.
5.5.1
May 25, 2026alpha
  • Member brief PDF layout fixes: bill titles capped at one line, committee list capped at 5 seats with "+N more" indicator — resolves overflow for busy senators.
  • Bio summary trimmed to 2 lines and bill row spacing tightened; a page-break safety net added to prevent content clipping on members with full profiles.
5.5
May 25, 2026alpha
  • Member brief PDF fully rebuilt for C-suite and lobbyist sharing: logo smaller, "CONFIDENTIAL BRIEFING" removed, Vector branding reduced to header-only.
  • Priority chips corrected for print — previous dark fill was designed for the dark UI and printed as blobs; now uses light surface fill with brass border.
  • Bill rows now show stage, outcome (SIGNED / DEAD), and upcoming hearing dates within 60 days — the single most time-sensitive fact before a meeting.
  • Electoral margin, party cohesion %, and attendance rate added — all computed from data already loaded, no new queries.
  • Committee roles (CHAIR / V.CHAIR) now shown from real seat data; stage funnel and AI attribution tag added; "Session" stat replaced with Years Served.
5.4
May 25, 2026alpha
  • Bill detail page deep audit and reorganization (T146). Layout reordered, duplicate content removed, labels corrected, accessibility improved.
  • Stage Pipeline and Key Info Grid (committee, sponsor, hearing, cutoff, fiscal) now appear immediately below the score block — before the sparkline. "Where is this bill?" is answered in the first scroll, not the last.
  • Trajectory tab labels corrected. "Momentum Index" (which was displaying the final score, not the momentum component) renamed to "Current Score". "Committee Density" (which was showing five signal component bars) renamed to "Score Components" with an accurate caption.
  • Duplicate score formula removed from the Trajectory tab. The BASE × X Factor = Final formula is already shown in the main score block above the sparkline — repeating it in the tab added noise without adding information.
  • Tab names clarified: "Signals" → "Score Breakdown", "Signal Strength" → "Pass Rates". The previous names were nearly identical and gave no indication of what each tab contained.
  • X Factor top-summary strip now only appears when a bill has 7 or more X factors — previously it showed on every bill, duplicating every factor that also appeared in the full chip list below.
  • iOS auto-zoom fixed on all three inputs and textareas (tag, notes, summary edit). Font size raised from 13px to 16px to prevent Safari's viewport zoom on focus.
  • Sparkline draw animation now respects prefers-reduced-motion — the chart appears instantly for users with reduced motion enabled.
5.3
May 25, 2026alpha
  • Search page deep audit and full rewrite (T145). Seven bugs fixed, UI rebuilt from scratch for lobbyist usability.
  • "This Week" sort now works correctly. It was previously identical to "Recent" during interim period because the 7-day date clamp was skipped. The clamp now always applies — if nothing moved in the last 7 days, the page says so honestly.
  • "Hearing Scheduled" filter renamed to "Had Hearing". The has_public_hearing field is a historical record of hearings that occurred during session — not a live schedule. The old label implied future events that no longer exist.
  • Category counts removed. They were calculated from a PostgREST query capped at 1000 rows out of ~3400 bills, so every number was wrong. The counts are gone; category names remain.
  • Category chips now scroll horizontally in a single line instead of wrapping to 5+ rows. The filter controls are now a compact 3-row header regardless of how many categories exist.
  • "Load more" pagination fixed. It was re-fetching page 0 every time due to a stale closure on the page state variable. A ref now tracks the current page so new data is fetched correctly.
  • Loading flash on initial page load fixed. The empty state briefly appeared before the first data fetch completed. Loading now starts as true to prevent the flicker.
  • Empty state messages are now context-aware: "This Week" returns "No bills had new activity in the last 7 days" rather than the generic search hint.
5.2
May 25, 2026alpha
  • Search page lobbyist UX upgrade (T144). Bill cards now show the prime sponsor with party color (blue / red) and the committee — two pieces of context lobbyists need at a glance without opening the bill.
  • Inline watch toggle added to every bill card. Tap the bookmark icon to add or remove a bill from your watchlist directly from search results — no need to open the bill detail page.
  • "Hearing Scheduled" and "This Week" quick-filter chips added below the dropdowns. One tap to surface only bills with a public hearing, or only bills that moved in the last 7 days.
  • Category chips now show live bill counts — e.g. "Environment (312)" — so you can see where the legislative volume is before filtering.
  • Bill titles now wrap to two lines instead of truncating. Short titles were fine at one line; longer titles now fully visible without opening the bill.
  • WATCHING badge gained a brass pill background for legibility — previously the text label read as metadata rather than status.
  • Bills with minority-only sponsors now show a "Minority Only" label, surfacing partisan alignment that matters to coalition-tracking work.
  • Default view now shows an eyebrow: "Top-scoring bills this session · sorted by trajectory" — clarifies what you're looking at when no filters are active.
5.1
May 25, 2026alpha
  • Search page UI quality pass (T143). Tapping the search field on iPhone no longer zooms the viewport — the input was 14px, below iOS Safari's 16px auto-zoom threshold. Now fixed.
  • Outcome and category filter chips grew from 22px to a comfortable tap height. Each chip is now at least 34px — previously easy to miss on a phone.
  • Filter chip state is now communicated to screen readers via aria-pressed. Toggle state was previously invisible to assistive technology.
  • Search and bulk-tag inputs gained visible focus rings. Removing the browser outline without a replacement violates WCAG 2.4.7; brass border highlight now appears on focus.
  • aria-label added to search and bulk-tag inputs. Placeholder text is not an accessible label.
  • Bill card stagger animation (up to 50 cards) now respects prefers-reduced-motion.
  • Empty state text contrast improved — was ~2:1 ratio against the dark background, now uses a readable mid-grey.
5.0
May 25, 2026alpha
  • Home page UI quality pass (T142). Touch targets on the refresh button, navigation links, and the leg.wa.gov external link all meet the 44px minimum — previously as small as 20px on mobile.
  • "View all", "All bills", and "All outcomes" converted from buttons to links — correct semantics for navigation, and now tappable across the full label area.
  • Category intelligence cards are now keyboard-accessible: Enter and Space activate them. Previously click-only.
  • Animations (timeline pulse dot, bill card fade-in stagger) now respect prefers-reduced-motion.
  • Momentum velocity chip now uses SVG icons (Lucide TrendingUp/TrendingDown/Minus) instead of a Unicode triangle that rendered inconsistently across Android and iOS.
  • Header horizontal padding aligned to 16px to match the sticky bar and content column — eliminates a 4px left-edge drift visible on narrow phones.
4.9
May 25, 2026alpha
  • Watchlist swipe action panel now correctly appears when a card is swiped. Root cause: the card's GPU compositing layer always rendered above the static panel regardless of CSS z-index. Fix: the card and panel now animate in lockstep — as the card slides left, the panel slides in from the right in perfect sync. No z-index, no compositing conflict.
4.8
May 25, 2026alpha
  • Watchlist swipe rebuilt from scratch. Root cause of previous failures: React synthetic touch handlers are always passive, making preventDefault() silently ignored by the browser. Fix: CSS touch-action: pan-y tells the browser to own vertical scroll and route horizontal movement to JS — no conflict possible.
  • Swipe now uses the Pointer Events API with setPointerCapture, which works identically on mobile and desktop with a single code path.
  • Swiped card gets a brass selection ring so it's clear which bill is active.
4.7
May 24, 2026alpha
  • Watchlist swipe actions replaced with a three-dot (⋮) menu button on each bill card. Tap ⋮ to reveal "Add to Report" and "Remove" — no gestures required, works the same on mobile and desktop.
  • Swipe gesture removed from watchlist cards. Multiple rounds of fixes confirmed the swipe paradigm conflicts with mobile scroll and desktop click-to-navigate; the action menu is a cleaner and more reliable solution.
4.6
May 24, 2026alpha
  • Swipe affordance moved to the left edge of watchlist cards: a thin brass bar replaces the right-edge chevrons that were hidden behind the bookmark, pencil, and external-link icons. Left edge has no icon conflict and visually points in the swipe direction.
  • Desktop swipe drag fixed: the browser's native text-selection drag no longer interrupts mid-gesture. Cursor now correctly shows "grabbing" while dragging.
4.5
May 24, 2026alpha
  • Republican Senate member bios fixed: all 19 senators now have accurate bio profiles. The previous scraper pointed to a React-only site (src.wa.gov) that returned no readable content; updated to use the correct WA Senate Republican Caucus subdomain pages (src.wastateleg.org).
  • Bio enrichment re-run for all members without summaries, covering the 19 affected Republican senators and any other members with stale or missing bio data.
  • Monthly bio sync workflow now uses the corrected URL pattern, so future enrichment runs will stay current.
4.4
May 24, 2026alpha
  • Swipe snap-back fixed: tapping Highlight or Remove now animates the card closed before the state update fires. Previously the action panel stayed visible because React re-renders and card unmounts were racing the 200ms CSS transition.
  • Desktop swipe support added: bill cards on the watchlist now respond to click-and-drag in addition to touch — drag left to reveal the action panel, release to snap open or close.
  • Swipe affordance indicator added: a faint brass double-chevron (‹‹) sits on the right edge of each watchlist card so it is clear the cards are swipeable.
4.3
May 24, 2026alpha
  • Member detail page restructured: bio and legislative focus now appear first — the most decision-relevant context for a lobbyist — followed by committees, intelligence signals, and contact.
  • Contact card redesigned with full-width tap targets (44px minimum height) and each method on its own row — phone and email are now distinct, tappable rows instead of inline text fragments.
  • Bio summary text bumped from 11px to 13px and italic removed — profile text now reads at comfortable body scale, consistent with bill titles elsewhere in the app.
  • "Member Background" eyebrow renamed to "Profile" — shorter and more accurate.
  • Header chip row tightened: redundant "N bills sponsored" chip removed (visible in the Sponsored Bills tab), Print Card pushed to the trailing edge with auto margin.
  • Bio loading state added: a skeleton loader now fills the profile card slot while the async bio fetch is in flight, replacing an invisible empty gap.
4.2
May 24, 2026alpha
  • Swipe actions fixed: tapping Highlight or Remove now snaps the action panel closed immediately instead of leaving it visible behind the updated card.
  • Tag and sort chips on the watchlist header now wrap to a second line on narrow viewports — consistent with the Search and Committees fix shipped in v4.1.
  • Cal Feed button converted from a styled anchor to a proper button element — fixes a VoiceOver/TalkBack announcement issue where the element was read as a "link" with no destination.
  • "What's Changed" dismiss button tap zone expanded to 44×44px — was a 16×16px character with minimal padding.
  • "N selected for report" strip gains a top border separator so it reads as a distinct action row rather than trailing copy.
4.1
May 24, 2026alpha
  • Filter chips on Search and Committees now wrap onto a second line instead of scrolling horizontally — all filters stay visible on any viewport width without swiping.
  • Committees chip tap targets raised to 28px minimum height via inline-flex alignment — meets the same 44×44px standard applied to nav and legend buttons in v4.0.
4.0
May 24, 2026alpha
  • UI cleanup pass: 14 visual and UX fixes across home, watchlist, and members pages in one PR.
  • Member detail sticky hero now correctly shields the full 0–52px region on scroll — notched iPhones no longer show content sliding behind the hamburger button.
  • Home stat strip bottom padding corrected — the session stats were partially clipped by the fixed bottom nav on taller content loads. "High Signal" (count of top-12 fetched bills) replaced with "Top Score" — a more accurate session signal.
  • Phone and email icons on member cards now use consistent SVG icons; font-size floor enforced on two remaining 8px badges.
  • DM Sans removed from the Google Fonts request — the fallback was never reached, saving ~30KB per page load.
  • Accessibility pass: bottom nav tabs now announce the active page to screen readers (aria-current). Members heatmap legend button and list chevron tap zones expanded to 44×44px — meets Apple HIG and WCAG 2.5.5 minimum.
  • Hearings page: removed a stale typeof window guard around isInterimPeriod() — the guard was causing a hydration flash on first load since the function is pure date math with no browser dependency.
  • Members heatmap popover positioning switched from window.innerWidth to calc(50vw − 160px) — eliminates a server-side rendering mismatch and centers the popover correctly on all mobile viewports.
  • Score history sparkline now responds to tap on mobile — tapping a bar shows the tooltip, tapping again (or anywhere outside) dismisses it. Previously hover-only and invisible on touch screens.
  • Votes tab on bill detail now shows a clear empty state when no roll-call votes have been recorded, instead of silently rendering nothing.
  • Committees calendar loading state upgraded from plain text to the standard VectorLoader spinner — consistent with the rest of the app.
  • Search results list fades to 50% opacity while a new fetch is in flight, giving instant feedback during the debounce window.
  • Senate accent color tokenized as --senate-accent (#c87941) — all Senate chamber indicators now share a single source of truth instead of scattered #ffa84d hardcodes.
  • Search empty state is now context-aware: cold state explains what to search; zero-results state gives targeted retry guidance.
  • Hearings empty state splits on session vs interim — active session shows committee schedule timing guidance, interim shows the next session open date.
  • Watchlist empty state improved: sharper headline, inline explanation of the + Watch gesture, and "Search Bills" CTA replaced the generic "Browse Bills" label.
3.9
May 24, 2026alpha
  • Bill detail page typography pass: 15 sub-minimum font sizes eliminated — the densest fix count of any page audited. The Trajectory tab formula bar, Momentum Index and Committee Density cards, stage pipeline labels, sparkline x-axis, and score history eyebrow all now meet the 9px floor.
  • AI badge labels (AI · EDITED, AI-GENERATED), the confidence label duplicate chip, and the X-factor "Top contributors" eyebrow all brought up to 9px.
  • Italic dropped from the floor vote verdict chip and the score history "No score change" row — consistent with the same fix applied to search and members pages.
3.8
May 24, 2026alpha
  • Members page typography pass: six sub-minimum font sizes eliminated across the heatmap popover, Top 5 callout, committee list, and member list cards — nothing now renders below 9px.
  • HIGH-tier activity disclaimer no longer italicised at minimum font size — consistent with the same fix applied to the search calibration citation.
3.7
May 23, 2026alpha
  • Search result cards no longer show the score twice — the redundant right-side number is removed, consistent with the watchlist and home page fixes.
  • "Watch All" button now shows the count of displayed bills (e.g. "+ Watch 50+") so the scope is clear before tapping.
  • Calibration citation on search results is now readable — was rendered at 10px italic in the faintest color token; now 11px in standard muted text.
  • Search scope hint ("Searches title, bill number, and AI summary") is now always visible below the input instead of appearing only after typing 3 characters.
3.6
May 23, 2026alpha
  • Home page bill cards no longer show the score twice — the redundant right-side number was removed from both the watchlist preview and the Top Trajectory list. The score badge carries it.
  • "Your Watchlist" heading and "View all →" link are now in the same row instead of appearing as two separate elements.
  • High Score stat card now dims correctly when the count is zero instead of glowing teal on a zero value.
  • Session Timeline date labels enlarged from 8px to 9px for readability on mobile.
  • Category Intelligence section now correctly labels itself during an active session instead of always reading "Interim Intelligence."
3.5
May 23, 2026alpha
  • Watchlist "What's Changed" panel now shows bill titles alongside bill numbers — no more mental lookup when 20+ bills are tracked.
  • Redundant score number removed from bill cards — the score badge already carries this; the right column now shows only action icons.
  • Filter empty state corrected: activating At Risk or a tag filter with no matching bills now shows a clear "No bills match this filter" message instead of the misleading "No bills tracked yet" CTA.
  • "What's Changed" header reformatted — "Since your last visit" is now a distinct DM Mono metadata label below the heading instead of inline body text mixed with the display font.
  • Minor polish: quick-note pencil icon raised to 70% opacity at rest (was 50%), legacy note field labeled with a NOTE eyebrow, FOR REPORT text enlarged to 9px, --brass CSS fallback literals removed.
3.4
May 23, 2026alpha
  • Score formula on bill detail now always shows the large brass number — previously it disappeared on bills without a momentum multiplier.
  • Bill title no longer appears twice on the bill detail page — the duplicate below the AI summary was removed.
  • Visual tone corrections: undefined CSS color token patched, score block gradient anchored to design tokens, refresh button more visible at rest.
3.3
May 21, 2026alpha
  • Member bio panel reordered for lobbyist use — legislative priorities and background (education, career, family) now appear at the top of the Overview tab, right after contact info, instead of buried below analytics cards (Threads 114–115).
  • Baseball card PDF redesigned with a congressional card layout — legislative focus section moves immediately after the photo/identity block, and top bills + committee assignments appear side by side in a two-column format (Thread 115).
  • Committee chip strip on member detail page relabeled "Bill Referral Committees" with a clarifying note — the data shows which committees received this member's sponsored bills, not which committees the member sits on as a seat holder (Thread 115).
3.2
May 18, 2026alpha
  • Member baseball card: tap "Print Card" on any legislator to generate a PDF briefing with photo, contact info, committee assignments, and Vector | WA intelligence metrics (Thread 112).
  • Designed for pre-meeting preparation — professional enough to leave on a desk (Thread 112).
3.1
May 18, 2026alpha
  • Member list now shows legislator photos with a blue or red party-color border instead of initials — instant face recognition without clicking through (Thread 111).
  • Opening a member panel shows a larger portrait photo so you can put a face to the briefing before your meeting (Thread 111).
3.0
May 18, 2026alpha
  • Member detail panel now shows direct phone and email for every legislator — pulled from the WA Legislature roster API (Thread 110).
  • Phone and email are stored in the database and will refresh automatically on each nightly sync going forward (Thread 110).
2.9
May 18, 2026alpha
  • Highlighted bills on the watchlist now glow with a subtle brass background and ring so it is immediately obvious which bills are selected for your PDF report (Thread 109).
  • The "Subscribe" button in the watchlist header is now labeled "Cal Feed" — it subscribes your Apple or Google Calendar to a live feed of hearing dates for your tracked bills (Thread 109).
2.8
May 18, 2026alpha
  • Committee detail bill query limit raised from 300 to 500 — defensive cap for any future session with a larger docket (Thread 108).
  • Bill count subtitle on committee detail pages now reads "X bills by score" so it is clear the list is sorted by trajectory score, not arbitrary order (Thread 108).
2.7
May 18, 2026alpha
  • Bill chips in the YOUR BILLS meetings section now navigate directly to the bill detail page — one tap from a scheduled hearing to the full bill (Thread 107).
  • Each bill chip now shows the trajectory score alongside the bill number (e.g. "HB 1271 · 74") so you can assess priority without leaving the calendar (Thread 107).
2.6
May 18, 2026alpha
  • Watchlist remove action now includes a user-id guard on the database delete — defense-in-depth against any future RLS misconfiguration (Thread 106).
  • Bottom padding on the watchlist corrected from 20px to 110px — the last bill card no longer hides behind the nav bar (Thread 106).
  • Duplicate billIds computation in the PDF export handler consolidated into a single declaration (Thread 106).
2.5
May 18, 2026alpha
  • Committee detail pages now surface your tracked bills at the top of the bill list under a "YOUR TRACKED BILLS" header — no more scanning 80 bills to find your 3 (Thread 105).
  • The bill count chip on committee detail pages shows how many of your tracked bills are in that committee at a glance (Thread 105).
2.4
May 18, 2026alpha
  • Tapping a hearing badge on the watchlist now navigates directly to the specific committee page — not just the full calendar — so you land on the exact committee that has your bill scheduled (Thread 104).
  • Watchlist load now fires a single batched query for all upcoming hearings across every tracked bill, replacing up to 25 individual queries — faster page load, fewer round-trips to the database (Thread 104).
2.3
May 18, 2026alpha
  • Committees calendar now opens with a pinned "YOUR BILLS" section for logged-in users — showing only the upcoming meetings where your tracked bills appear on the agenda, with bill number chips (HB 1234, SB 5678) listed directly on each card (Thread 103).
  • Every meeting card in the full calendar below now displays a brass "N of yours" pip when any of your watched bills are on that agenda — so you can spot relevant hearings at a glance without reading every committee name (Thread 103).
  • Both features are anon-safe and interim-safe: if you have no tracked bills, or there are no upcoming meetings, the page renders exactly as before (Thread 103).
2.2
May 15, 2026alpha
  • Swipe left on any watchlist bill card to reveal two quick actions: Highlight (brass) marks the bill for your next report, Remove deletes it from your watchlist in one tap — no more navigating to the bill detail page (Thread 102).
  • When one or more bills are highlighted, the export button switches to "Export selected (N)" and the brief covers only those bills — sharper, faster reports for lobbyist workflows (Thread 102).
  • Highlighted cards get a brass left-border accent and a "FOR REPORT" label in the top corner. Opening a second card snaps the previous one closed. Highlight state resets on refresh, keeping the list clean between sessions (Thread 102).
2.1
May 15, 2026alpha
  • Watchlist header now shows three KPI cards — Tracked, High Score, and At Risk — in the same card format used on the home dashboard, so your portfolio summary is immediately readable without scanning the bill list (Thread 96).
  • During the interim period the KPI cards shift to Tracked, Passed, and Dead — the same biennium-aware pattern the home page uses (Thread 96).
2.0
May 15, 2026alpha
  • Home dashboard now has two clearly labeled zones — "YOUR WATCHLIST" for your personal tracked bills and "SESSION INTELLIGENCE · 2025-26" for legislature-wide data — so the difference between your portfolio and the whole session is immediately obvious (Thread 95).
  • A thin rule divides the personal zone from the global zone, giving the home page a cleaner reading hierarchy without changing any of the underlying data (Thread 95).
1.9
May 15, 2026alpha
  • Bill detail score formula now shows the result (e.g. "86") at 32px in brass — visually dominant over the formula prefix — so the conclusion is immediately readable without scanning the calculation (Thread 91).
  • Momentum multiplier on the formula line (e.g. "1.29") now shows a tappable info chip explaining it is a momentum factor — how fast the bill moved relative to its stage (Thread 91).
1.8
May 12, 2026alpha
  • Bottom navigation label corrected — "Committees" now displays in full during the interim period between sessions, replacing the abbreviated "Cmtes" that appeared since launch (Thread 89).
1.7
May 12, 2026alpha
  • Anonymous users redirected to sign-in from /watchlist now see a clear explanation — "Sign in to access your watchlist" — instead of arriving at a blank login screen with no context (Thread 88).
1.6
May 12, 2026alpha
  • Home page bill count now shows the session year — "Bills (2025-26)" instead of the generic "Bills Scored," so it is clear the number is session-specific and not the full cross-biennium archive (Thread 87).
  • Category score averages on the home page now read "avg score 59" instead of the raw "avg 59," connecting the number to the 0–99 scoring system (Thread 87).
  • Side drawer role chip updated from "REGISTERED" to "EARLY ACCESS" for signed-in users during the closed beta period (Thread 87).
  • Roadmap timeline complete — the "~3,400 bills tracked" milestone now shows its date (Jan 2026) instead of "live," so every item on the timeline has a consistent date chip (Thread 87).
1.5
May 12, 2026alpha
  • Switching the session in the drawer now updates Members, Committees, Hearings, and Search instantly — no hard reload needed (Thread 86).
1.4
May 12, 2026alpha
  • 10 pages now show accurate browser tab titles — Search, Members, Committees, Hearings, Roadmap, Changelog, Install, Sign In, Watchlist, and Settings all display "Page — Vector | WA" instead of the bare site name (Thread 85).
1.3
May 12, 2026alpha
  • Consistent loading screens — every data page now shows the brass arrow loader instead of plain "Loading..." text, bringing members, search, and other surfaces in line with the watchlist (Thread 84).
  • Global session picker — the session / biennium selector moved from individual pages into the side drawer, so one tap switches the whole app to 2025-26 or any historical biennium at once (Thread 84).
  • Historical data banner — an amber strip appears automatically whenever you are viewing a past biennium, with a one-tap shortcut back to the current session (Thread 84).
  • Career View on /members — a dedicated toggle aggregates all biennia at once for legislator-level career analysis, separate from the global biennium context (Thread 84).
1.2
May 12, 2026alpha
  • Search visibility — added sitemap, robots.txt, and structured data (Organization + Legislation schema) so Google can discover and index Vector | WA before the August 2027 public launch (Thread 82).
  • All sharing links now resolve to vectorwa.com — fixed a metadata configuration bug that caused Open Graph URLs to point at an internal Vercel preview domain instead of the canonical site (Thread 82).
  • Per-page titles now follow the "Page — Vector | WA" format for cleaner browser tabs and search result snippets (Thread 82).
1.1
May 11, 2026alpha
  • Admin "Grant access" button on the waitlist page — closed-beta applicants can now be invited directly without leaving the app (Thread 78).
  • Historical legislator accuracy — the 2021-22 session picker on /members now correctly splits the roster into House and Senate, with party affiliation restored for returning legislators (Thread 79).
  • PDF briefs (watchlist multi-bill and Print Brief) finalized to Brand Guide v1.2 — real Vector | WA logo replaces the hand-drawn placeholder in the watchlist brief; legacy parchment-warm surface colors standardized; wrong days-until-next-session counts removed from both briefs (Thread 80).
1.0
May 10, 2026alpha
  • OTP login replaces magic-link flow — fixes iOS PWA authentication where Safari's WKWebView cookie split was silently breaking sign-in for installed-app users (Thread 76).
  • Closed beta waitlist form on /login — applicants acknowledge 4 beta-stage expectations before submitting; admin UI gains a Closed Beta tab with acked/un-acked sorting (Thread 73).
  • /roadmap page launched with 8 shipped milestones and 6 upcoming features; linked from footer, side drawer, and the login page (Thread 72).
  • Loading spinners added to the members list and home page during initial data fetch — both were flashing an empty shell before data arrived (Thread 75).
  • Footer freshness label color and font style corrected to match the Brand Guide v1.2 muted-text spec (Thread 77).
1.0
May 7, 2026alpha
  • Members and committees page counts now accurate for all session years — server-side SQL views replace client-side reduce loops that were silently truncating at 1,000 rows; 2025-26 shows 147 legislators and all 65 committees (Threads 69–70).
  • Methodology calibration corrected to 84% accuracy across 2,134 bills — the previous page displayed a contradictory 78.4% / 189-bill figure; denominator, tier color coding, and statistical disclosure language all updated (Thread 67).
  • /how-it-works renamed to /install with a 308 permanent redirect from the old path; hero CTA repointed to /about as the acquisition surface (Thread 71).
  • Post-close trajectory copy for bills that passed chamber but did not become law now reads correctly during the interim period instead of repeating active-session language (Thread 41 follow-up).
1.0
May 3, 2026alpha
  • Platform-aware PWA install prompt on /install — Android and desktop Chrome get a native install button, iOS users get share-sheet instructions, and already-installed state shows a confirmation pill (Thread 61).
  • Login page gains Methodology and About links below the sign-in card so anonymous visitors can explore the platform before committing to sign up (Thread 65).
  • Anonymous routes for /methodology, /about, /install, and /changelog fixed — they were incorrectly gated behind the public-layer flag and silently bouncing visitors back to /login (Thread 65 follow-up).
1.0
May 2, 2026alpha
  • Last-action-date sync bug corrected — 23 archived bills were being stamped with the current sync timestamp instead of NULL when no action history was available from the API; those bills no longer float to the top of Most Recent Action sort (Thread 57).
  • Side drawer polish — Admin link fixed (was 404ing), reference links for Disclaimers, About, and Methodology added for signed-in users, Settings gear moved to drawer footer in a dedicated bottom block (Thread 58).
  • /changelog page launched and accessible to all visitors; version label added to the drawer header in DM Mono caption; version + phase helpers added to app/lib/version.js for future phase-gate use (Threads 59–60).
1.0
May 1, 2026alpha
  • LinkedIn-style side drawer with viewer-aware menu — public, registered, and team viewers each get a tailored navigation surface (Phase 5 Thread 55).
  • Brand Guide v1.2 compliance — brass palette, three-voice typography (Playfair Display / Karla / DM Mono), and the Vector | WA logo system shipped end to end (Phase 4).
  • Calibration tables on the methodology page right-aligned for sharper data-grid presentation (Phase 5 Thread 52).
  • Service worker cache bumped to v4 to flush stale pre-Phase-4 markup on returning visitors (Phase 5 Thread 49).
  • Public bottom navigation for anonymous viewers — Search, Committees, Members, and a session-aware Outcomes / Hearings tab (Thread 29).
Go deeper
For the scoring formula and live calibration table, see the methodology page. For data sources, model uncertainty, and corrections, see the disclaimers page.