HouseLive|Changelog

Changelog

v1.0.5

13 May 2026

Fixes for issues that surfaced during today's Question Time — most importantly a server-side regression that erased older question markers as new questions were added to the minutes.

Status

  • House status badge no longer flips to "Adjourned" mid-day when APH publishes a DOCUMENTS item between Question Time and the MPI debate. The previous detector treated any DOCUMENTS heading in the last 5 minute items as proof of adjournment; DOCUMENTS is actually a routine procedure item that can appear anywhere in the day. Detector now relies on ATTENDANCE (always literally the last item of a sitting day) and the ADJOURNMENT clause, both of which are reliable end-of-day markers.

Question Time

  • Markers for earlier questions no longer disappear as new ones arrive. The structurer windows the transcript turns it sends to Claude to save tokens, but the windowing could hide the only context Claude had for an earlier question — Claude then returned null, and that null overwrote the cached placement. Cycle by cycle, the older markers got wiped. Two fixes: when an unplaced question is numerically before a placed one, the window is widened back to turn 1; and a defensive guard now refuses to overwrite an out-of-window cached placement with Claude's null. State self-heals on the next structurer cycle.
  • Question markers now find their caption block by matching the asker's opening words against block text, not by wall-time. Previously the live-rendered timestamps drifted 5+ seconds from what the server computed (live word events vs. periodic DB flushes), and the marker often landed on the Speaker's call turn instead of the member's question turn — needing a manual page refresh to land correctly. Text matching is immune to that drift, with wall-time used only as a fallback when the text isn't yet visible.
  • Interrupted-question handling clarified in the structurer prompt: if a member starts a question, gets cut off by the Speaker, and restarts, the marker now lands on whichever attempt has the fuller opening — the cleaner, more readable version of the question.
  • QT navigator up/down buttons no longer kick you to Q1 (or the most recent Q) when there's no question further in that direction. The fallback that yesterday's "first click does nothing" fix added was over-aggressive — the rAF defer alone was sufficient; the fallback now genuinely does nothing when nothing is in that direction, which is the right behaviour.

UI

  • Switching from Captions back to Minutes (on screens that only show one panel at a time) now jumps you to the latest minute item instead of dumping you at the top of the day. The conditional render was unmounting the minutes panel when you toggled it off — on remount the scroll position naturally started at zero, but the auto-scroll-to-bottom only ran once on initial page load and didn't re-fire on re-show.
  • Footer trimmed to a thin green strip. The previous "Updated HH:MM:SS · Source: aph.gov.au" line was confusing because the timestamp referred to the minutes refresh and looked wrong while viewing the captions panel. The strip turns amber if live updates have stalled, so the failure signal is still surfaced without taking up a header row.
  • Reclaimed a header row on small screens. When only one panel is visible (always the case on mobile and half-laptop viewports), the per-panel header — Minutes/Captions title, DRAFT and AI-CAPTIONS badges, and the panel-level controls — is suppressed; the controls collapse into the page sub-header alongside chamber tabs and panel toggles. The captions toolbar is portaled there via React portal so its internal state (font size, search, fullscreen) stays in the panel component. Wide screens with both panels visible keep the per-panel headers, since each panel needs its own controls.
  • Date no longer pushes the House/Fed status badges off the right edge on mobile — the leading weekday ("Tuesday, ") is stripped below the md breakpoint.
  • Tightened header heights. Chamber + panel toggle sub-header dropped from h-14 to h-11. Below the lg breakpoint, "Federation Chamber" abbreviates to "Fed" and panel-toggle labels abbreviate to "Min" / "Cap"; full labels return on wide desktop. "Question Time" badge becomes "QT".
  • Captions fullscreen button: dropped the "Full screen" / "Exit" text label and switched to the conventional arrows-pointing-out (enter) / arrows-pointing-in (exit) iconography. The previous icon was too subtle, which is why we'd added the text label as a crutch.

v1.0.4

12 May 2026

Stability hardening + Question Time correctness fixes, coming out of today's incident where both AWS prod and Fly crashed shortly after Question Time ended. The exact crash root cause is still under investigation; this release puts in place the measures that bound the blast radius of long-running-process failure modes, plus several QT-marker improvements we identified during the incident.

Stability

  • Process now restarts itself nightly at 4 am AEST (outside sitting hours). Bounded uptime is the simplest defence against accumulated leaks; whatever compounded into today's incident won't get the chance to build up across days.
  • SSE caption stream cleanup: dangling 2-hour timeouts, listener subscriptions, and the active-connection counter now all reliably unwind when a client disconnects (graceful, abrupt, or otherwise). Previously the cleanup function inside the stream's start() was dead code — the Web Streams API never called it.
  • Heap, RSS, and active-SSE-connection counts logged every 5 minutes for post-incident diagnostics.
  • Captions panel's floating "Jump to latest" pill no longer sits underneath the green footer status bar.

Question Time correctness

  • Question Time markers now survive process restarts. The structurer's result is persisted to SQLite after each cycle and reloaded on startup, so today's markers don't vanish when the container bounces.
  • Question Time question markers now update on the live page without needing a manual refresh. The server-side SSE word events now include the real wallTime, which the client uses to keep its block timestamps aligned with the structurer's view.
  • Sequence-order validator: a question can't be placed at a turn before the previous question. Catches the kind of swap we saw on test today where Claude placed Q9 after Q11.
  • Both validators (text-pattern + sequence-order) now also re-run over any cached marker state every structurer cycle, so a wrong placement that's been cached can self-heal when new caption turns provide better context.
  • QT navigator up/down buttons no longer have the "first click does nothing" behaviour — the click handler now defers a frame and falls back to the nearest valid question ref.

Diagnostics (unchanged behaviour)

  • QT start/end transitions are now logged by the scheduler.
  • /api/qt/structure includes an inQt flag so it's easy to verify whether the server currently considers Question Time still in progress. inQt flips to false the moment APH publishes any timestamped item after the QUESTIONS item.

v1.0.3

12 May 2026

Small UI follow-ups from the faster-polling release.

  • The "Updating…" indicator in the footer no longer flashes every five seconds — only appears when a refresh actually takes longer than 400 ms, so routine cache-hit polls (most of them) stay silent
  • Federation Chamber now has a visible "Not sitting" status in the header on days it isn't meeting, instead of disappearing entirely — distinct from Live / Suspended / Adjourned / Scheduled
  • "Statement by indulgence" items now show just that as the heading — the previous behaviour of appending the full subject produced multi-line titles like "STATEMENT BY INDULGENCE – DEATH OF SPECIAL AIR SERVICE REGIMENT WARRANT OFFICER LACHLAN MUDDLE DURING A TRAINING EXERCISE AT JERVIS BAY". The subject is still in the body text
  • Question Time question markers are less likely to land on the wrong caption turn. A deterministic post-validator now catches the cases where Claude placed a marker on a short Speaker call ("The call to the Minister for X") or a formal Hansard reference ("Forde to the Minister for X") and snaps it back to the preceding member turn that actually contains "my question is to"

v1.0.2

12 May 2026

Minutes now update much faster while the House is actually sitting. The poll cadence flips between 5 seconds (when either chamber has real items in the minutes) and 60 seconds (before the House gavels in, after adjournment, or when only the pre-sitting placeholder is showing) — so new items, divisions and Q-number badges appear within seconds during a sitting, without hammering APH when nothing is happening.

  • Both the server scraper and the in-page refresh share the same live/idle decision, so client and server stay in step
  • If APH's cache-status endpoint hiccups, the poller now skips the cycle instead of falling back to a full page fetch on every tick
  • The Question Time–specific polling speed has been retired — the new live cadence is faster than it was anyway
  • Federation Chamber status no longer shows "Live" on days the chamber isn't meeting (its "not scheduled to meet today" notice is now recognised as a non-sitting state)
  • Expanded minute items no longer collapse when new items arrive — items keep stable internal IDs across scrapes

v1.0.1

12 May 2026

Question Time recognition is now driven by the live minutes. QT starts when the QUESTIONS item is published and ends when the next timestamped item arrives — replacing the previous fixed 2:00–3:30 pm window, which broke when Question Time ran late or was shifted.

  • Q-number badges, faster minutes polling and the AI question structurer all track the actual QT, not the clock
  • Window timestamps now respect AEST / AEDT correctly via the system timezone, instead of a hardcoded +11:00 offset

v1.0.0

23 April 2026

Initial corporate release of HouseLive.

  • Live draft minutes for House of Representatives and Federation Chamber
  • Live closed captions from the APH ParlView broadcast, with speaker-change detection
  • Question Time question markers placed in the caption stream via AI
  • Side-by-side Minutes and Captions panels with per-panel search and fullscreen captions mode