changedOutput schema / properties / contributions / items / properties / attributed_to / description
Previous value: -"Full citable attribution string, e.g. 'The Minister of State, DESNZ (Lord Whitehead) (Lab)'. Includes role-at-time of contribution for ministerial interventions."New value: +"Full citable attribution string, verbatim from Hansard, e.g. 'The Minister of State, DESNZ (Lord Whitehead) (Lab)' or 'Lord Pannick (CB)'. This is the authoritative citation text — quote it as-is rather than reconstructing it from other fields."
changedOutput schema / properties / contributions / items / properties / constituency / description
Previous value: -"Constituency (Commons only; None for Lords)"New value: +"Constituency (Commons only; None for Lords). Not currently populated from AttributedTo — see `party`'s note on why positional parsing of that string is unsafe; use parliament_find_member for authoritative constituency."
changedOutput schema / properties / contributions / items / properties / member_id / description
Previous value: -"Members API integer ID. Use as {member_id} in hansard://member/{member_id}/biography for the member's role history."New value: +"Members API integer ID. Use as {member_id} in hansard://member/{member_id}/biography for the member's role history. None for a collective or otherwise unresolved attribution (e.g. 'Hon. Members') — Hansard itself has no member to identify there."
addedOutput schema / properties / contributions / items / properties / member_name / anyOf
Added value: +[
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+]
addedOutput schema / properties / contributions / items / properties / member_name / default
Added value: +null
changedOutput schema / properties / contributions / items / properties / member_name / description
Previous value: -"Name of the contributing member (MemberName)"New value: +"Authoritative display name of the contributing member — populated ONLY when the source endpoint itself supplies a real name field, never derived by parsing `attributed_to`. Populated from Hansard's MemberName field on the search endpoints (parliament_search_hansard, parliament_member_debates). ALWAYS None from parliament_get_debate_contributions (backed by /debates/Debate/{ext}.json), because DebateItem has no MemberName field at all — only `AttributedTo` (a citation-display string) and `member_id`. AttributedTo's shape varies unpredictably (own name first, hereditary-title styling, ministerial office, chair/speaker role, annotations, collective labels — e.g. 'Lord Pannick (CB)' vs 'The Earl of Devon (CB)' vs 'Madam Deputy Speaker (Judith Cummins)' vs 'Madam Deputy Speaker' alone, all verified live) with no positional rule that reliably recovers the person's name across all of them — two earlier attempts ('use the last parenthesis', then 'unless it starts with `The `') were each falsified by a real, live counterexample. `attributed_to` is preserved in full instead of being decomposed into a guess. Resolve authoritative identity via `member_id` and parliament_find_member when this is None."
removedOutput schema / properties / contributions / items / properties / member_name / type
Removed value: -"string"
changedOutput schema / properties / contributions / items / properties / party / description
Previous value: -"Political party affiliation parsed from the trailing '(Party)' suffix in AttributedTo"New value: +"ALWAYS None. Hansard's AttributedTo is a citation-display string Hansard composes for readability, not structured party data — neither the search-contributions nor the debate-items schema declares a Party field, and the parenthesised text varies by convention (constituency, party, office, 'Maiden Speech', a virtual-attendance marker, or nothing at all) in ways that cannot be told apart by position alone. Guessing a party from it previously produced fabricated values for ministers/officeholders (e.g. party='Lucy Powell' for 'The Leader of the House of Commons (Lucy Powell)'). For a member's authoritative party, resolve `member_id` via parliament_find_member against the Members API's structured latestParty field."
changedOutput schema / properties / contributions / items / required
Previous value: -[
- "member_name",
- "attributed_to",
- "date",
- "debate_title",
- "debate_id",
- "debate_ext_id",
- "contribution_ext_id",
- "chamber_section",
- "house",
- "text",
- "url"
-]New value: +[
+ "attributed_to",
+ "date",
+ "debate_title",
+ "debate_id",
+ "debate_ext_id",
+ "contribution_ext_id",
+ "chamber_section",
+ "house",
+ "text",
+ "url"
+]