Components · Political

Commitments

The recorded-outcomes worklist — OfficialOutcomeManager. A summary strip (secured / pending / declined counts + an "on the record" Meter) tops a table you can search, filter by status, and sort by any column. Each row is one official → commitment → status — the ask, a secured / pending / declined pill, the recorded date + who logged it, an optional source link, and a per-row Update action that fires onRecord. It owns VIEW state only; the mutation lives in a host-supplied form slot.

OfficialOutcomeManager · summary strip + sorted table (Recorded ↓)
Organizing

Recorded outcomes

Where each official stands — the commitment secured, still pending, or declined

Secured
3
on the record
Pending
2
awaiting follow-up
Declined
1
of 6 tracked
On the record50%
Commitment Source
Del. Priya Nair
priya-nair OR-HD-42
Endorse the statewide spay/neuter mandate
Signed on at the Portland roundtable
Secured Source Jul 1, 2026by L. Cho
Mayor Aisha Grant
aisha-grant
Speak at the Sept adoption gala
Remarks on ending puppy mills
Secured Source Jun 30, 2026by J. Okafor
Rep. Dana Whitfield
dana-whitfield WA-07
Co-sponsor HR 1234 (Beagle Testing Ban)
Confirmed by district director
Secured Source Jun 28, 2026by J. Okafor
Sen. Marcus Ellery
marcus-ellery SD-12
Vote yes on SB 88 (shelter funding)
Leaning yes — needs one more call
Pending Jun 24, 2026by L. Cho
Councilmember Tom Vrespi
tom-vrespi
Move anti-tethering ordinance to committee
Draft with staff; awaiting agenda slot
Pending Jun 15, 2026by A. Diaz
Comm. Rosa Beltran
rosa-beltran NV-3
Public statement opposing puppy mills
Declined at the June hearing
Declined Source Jun 19, 2026by M. Reyes

The Recorded header is the active sort (descending — newest first); the top row and its Update button are pinned :hover. The summary strip counts all rows; the table shows the filtered/sorted view. Status maps onto the commitment pipeline — secured (good) · pending (warn) · declined (bad).

rows (required)
OfficialOutcomeRow[] — a serialized mirror of OfficialCommitment: personSlug / officialName / status / note / sourceUrl / recordedBy / recordedAt (ISO or Date) / optional district. The summary strip counts ALL rows; the table shows the filtered/sorted view.
status
The commitment outcome, in funnel order — secured (on the record, good) · pending (awaiting follow-up, warn) · declined (bad). The "on the record" Meter = secured ÷ tracked; sorting Status ranks by this order.
onRecord / form
onRecord(row) is a passthrough for the per-row Update action (omit to hide it). form is a ReactNode slot above the table where the host drops its own record/update form (wiring recordCommitment). This element never imports the mutation.
defaultSort / hideSummary
defaultSort (official | status | recordedAt, default recordedAt) + defaultSortDir seed the sort; hideSummary drops the stat strip; emptyLabel customises the no-match row.

Source · ds/political/OfficialOutcomeManager.tsx ("use client", VIEW state only; composed FROM ds/surface Surface) · @phauna/ds StatTile / Meter / Badge / Button / Input / NativeSelect · formalizes portal/CommitmentManager.tsx · aggregated by lib/committee-politics.ts.