{
    "componentChunkName": "component---src-templates-article-post-js",
    "path": "/2026-10-28-citybloc",
    "result": {"data":{"mdx":{"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"date\": \"2026-11-03\",\n  \"title\": \"Analysis reveals Berkeley City Council voting blocs\",\n  \"subhead\": \"\",\n  \"bylineName\": [\"Esha Bansiya\"],\n  \"bylineUrl\": [\"https://www.dailycal.org/users/profile/Esha%20Bansiya/\"],\n  \"aboutStory\": \"Data for this project came from the City of Berkeley's Records Online system\",\n  \"featuredImage\": \"../images/citybloc_3.png\",\n  \"hideHeroImage\": true\n};\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\nvar Topics = makeShortcode(\"Topics\");\nvar Dissents = makeShortcode(\"Dissents\");\nvar Agreement = makeShortcode(\"Agreement\");\nvar BlocUnity = makeShortcode(\"BlocUnity\");\nvar BlocMoves = makeShortcode(\"BlocMoves\");\nvar SplitSides = makeShortcode(\"SplitSides\");\nvar MotionExplorer = makeShortcode(\"MotionExplorer\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Since December 1, 2024 the Berkeley City Council has voted on more than a thousand motions. Eight City Council members and Mayor Adena Ishii weigh in, each getting their own vote. The Daily Californian analyzed City Council meeting minutes over the past term until August to see how City Council members voted.\"), mdx(\"p\", null, \"Ninety-five percent of the 1,168 motions were unanimous. The City Council agenda process encourages disagreements to be resolved before motions make it to the full City Council meetings.\"), mdx(\"p\", null, \"The Agenda & Rules Policy Committee votes on every suggested agenda item. It can either request the author to make changes, send the item to a commission or the city manager for more analysis, send it to a policy committee for review or approve it to go on the agenda.\"), mdx(\"p\", null, \"Items are sent to a policy committee if they impact the city\\u2019s administration, operations, budget, resources or programs. The policy committee considers each item\\u2019s costs, timeline and feasibility before deciding on one of four recommendations: positive, qualified positive (pass it with changes), qualified negative (reject it unless changes are made) and negative. The author is then responsible for revising the item before resubmitting it to the full City Council.\"), mdx(\"p\", null, \"After a policy committee votes on an item, the Agenda & Rules Committee can place it on either the consent or the action calendar. Items expected to be voted on without discussion go to the consent calendar, where everything is approved together in one motion. To minimize disagreements during the full council meetings, members are encouraged to vote on individual consent items and ask questions before the final vote takes place.\"), mdx(\"p\", null, \"Seventy-five procedural & agenda items, ceremonial votes and committee votes were removed from our analysis. Of the 1093 remaining motions, only 54 motions were not unanimous. Motions are grouped into the following topics: policing & surveillance; land use & zoning; housing; advocacy & resolutions; streets & transport; budget, taxes & fees; homelessness; community grants & culture; contracts & purchasing and fire & emergency.\"), mdx(\"p\", null, \"Policing & surveillance and advocacy & resolutions had the highest percentage of dissents.\"), mdx(Topics, {\n    mdxType: \"Topics\"\n  }), mdx(\"p\", null, \"A dissent is counted if even one council member votes differently. Thirty of the 54 had only one member disagree. District 7 Councilmember Cecilia Lunaparra was the sole dissent for 15 motions, and dissented on 9 other motions with at least one other person.\"), mdx(Dissents, {\n    mdxType: \"Dissents\"\n  }), mdx(\"p\", null, \"The other council members generally made most of their dissents with other council members, often the same set of them. Coordinated dissents can form a bloc in specific groups of motions. The chart below shows how often each pair of council members voted the same for dissented motions.\"), mdx(Agreement, {\n    mdxType: \"Agreement\"\n  }), mdx(\"p\", null, \"Using hierarchical clustering, a statistical method that builds a tree linking the members who most often vote the same way, we found voting blocs that account for a majority of the split decisions.\"), mdx(\"p\", null, \"District 3 Councilmember Ben Bartlett, District 4 Councilmember Igor Tregub and Ishii form Bloc A; District 1 Councilmember Rashi Kesarwani, District 2 Councilmember Terry Taplin, District 6 Councilmember Brent Blackaby and District 8 Councilmember Mark Humbert form Bloc B and Lunaparra and District 5 Councilmember Shoshana O\\u2019Keefe do not statistically align with either bloc. Bloc A has voted the same in 70% of motions, and Bloc B has for 65% of motions.\"), mdx(BlocUnity, {\n    mdxType: \"BlocUnity\"\n  }), mdx(\"p\", null, \"While these blocs are consistent when analyzed over all contested motions, council members form different blocs when looking at subsets of contested motions in specific topics.\"), mdx(BlocMoves, {\n    mdxType: \"BlocMoves\"\n  }), mdx(\"p\", null, \"On 10 motions, the two blocs took opposite sides. The bloc splits are most visible in these decisive motions.\"), mdx(SplitSides, {\n    mdxType: \"SplitSides\"\n  }), mdx(\"p\", null, \"View the table below to see every motion and filter for specific dissenting members.\"), mdx(MotionExplorer, {\n    mdxType: \"MotionExplorer\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"date":"November 03, 2026","title":"Analysis reveals Berkeley City Council voting blocs","bylineName":["Esha Bansiya"],"bylineUrl":["https://www.dailycal.org/users/profile/Esha%20Bansiya/"],"subhead":"","aboutStory":"Data for this project came from the City of Berkeley's Records Online system","hideHeroImage":true,"jointDept":null,"featuredImage":{"childImageSharp":{"resize":{"src":"/static/682e781843fd3e3cbe84d2608510c9d5/f3583/citybloc_3.png","height":835,"width":1200},"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAADgklEQVQ4y22T20/aBxTH+Zv2tGTZ9rIsafawR7t108Y6U+clnWYxHbVSxBug9Q4i/ATFC/DjDooiF1GsgqBtp6LNWkU7Ndq6Lc3WVOWziK7bw07yzTk5D598zzk5EvfsCn3WIGPTCfTueXTOGA2Cj9peJ4U/dfNRYR2fFEoJKkuYVN7i9ewgF5E7e0cul7usr/JFSAyOMD8qDfRYZ9DYo7SPBrnz0EK5aoxr5S18WtbGx8UKPLXXsFR/zslk+yXkCvBfWB7oml1B555nJLBIlyVEjzXMgwEvpc1mbtVr+KDgLh9+c48Z9fdkekrIBvrhtz3ODrbInZ3+j0NXlNp2E71ihD4xQsdYkNoeO5XqMcqVI9xuMlEsF6hQjXK9YRSDSsZ8dyExdQGc7OWd5s7P3oMlGjFEtcpI+8gUavMUTcYJajqt3JQPUtY6QnGDiW/rBcpbh/lSasKkrmdbW8RWRwG8/f29s39cSmyhFJ2WEObAIoO+eF5yg4+SxiGkGiffNQ5R2jSMtM9BUcMwHRoBX1sN9rZaXi17eZO08zb7+Ap6jkRwRalpNTA08Qjt+AT9tmnu67xXI49SoRylRDHEDx1Wqh9aKG0do0Bh47psiETLDSYrP+OVT5kHnp++QyK4Y9T1WhE8cwjuKHpnBKnWxc0GYx5aKBvkRp2BqrZxiuRGylqG+Uqq4+u7vWxqb7Or/II/orp/jxJNb2KZXiKSyjCztMZMYh29e457Gnt+DbZgAttMkqW15wQXn7CyucPcSoaF1S1215LsJKbYSMXx+AN4PD4kgXiaLpNIKLnOuDeMY3oBrThDubwXMZzCH4oTjKd5eXhEYjnFmz//Ynt7m8PDQ57tHRNeesrsUprmZhUtLSoksXQGZyRFZHmdcHKD0NIaRu88cr0bMZRk4fEz5tKbZA+O2dk/4uD45FJHr3m+e0Dmxa8kUqs4HHZE0Y7EEV7m4bAfW2gZwRXB6InRbY1wv99DtzWM4I2jc80x5F+gc3SSAVeMJsFPo+DH6IvnnyGayrC/v8/uy30k/bYgVQoNGjGMrNuMQmvjgd5HlXoM2YCXrvEQKvM0zYKHSoUWmc7NnbZxKpQjtJmnkOu9+ONPyGaz/PIii2Q2vYkjksofJPDoZyYXnmIJJumxRhBDKezhVD5f9O3hNM5IGo0Yod8+iye2ism3QGpjm9PTs/x+/wYX1mU9OCdaywAAAABJRU5ErkJggg=="},"images":{"fallback":{"src":"/static/682e781843fd3e3cbe84d2608510c9d5/a3bb8/citybloc_3.png","srcSet":"/static/682e781843fd3e3cbe84d2608510c9d5/a52d2/citybloc_3.png 188w,\n/static/682e781843fd3e3cbe84d2608510c9d5/b9443/citybloc_3.png 375w,\n/static/682e781843fd3e3cbe84d2608510c9d5/a3bb8/citybloc_3.png 750w","sizes":"(min-width: 750px) 750px, 100vw"},"sources":[{"srcSet":"/static/682e781843fd3e3cbe84d2608510c9d5/6d6d0/citybloc_3.webp 188w,\n/static/682e781843fd3e3cbe84d2608510c9d5/029d2/citybloc_3.webp 375w,\n/static/682e781843fd3e3cbe84d2608510c9d5/60484/citybloc_3.webp 750w","type":"image/webp","sizes":"(min-width: 750px) 750px, 100vw"}]},"width":750,"height":522}}},"secondaryFeaturedImage":null,"imageAttribution":null,"imageCaption1":null,"embeddedImages":null}}},"pageContext":{"slug":"2026-10-28-citybloc"}},
    "staticQueryHashes": ["764694655"]}