91³Ô¹ÏÍø

Watch CBS News

Uvalde County commissioners vote to release Robb Elementary school shooting records, ending legal battle

Leaders of the county where 19 students and two teachers were killed in the 2022 shooting at Robb Elementary School in Uvalde, Texas, voted Monday to release records related to the massacre, ending a yearslong legal battle over disclosure of the information.

Uvalde County commissioners voted 2-1 to release the records and to cease appealing a 2022 lawsuit filed by a group of media organizations, including The Associated Press, which sought to make the information public.

The decision by commissioners came a week after the Uvalde district's school board voted to release its records related to the deadly rampage, one of the worst school shootings in U.S. history.

The group of media organizations had sued both the county and the school district for the release of the records.

County commissioners and the school district voted to release the records after a Texas appeals court on July 16 upheld a judge's ruling that had ordered the information to be made public.

Neither the county nor the school district has said when the records will be released.

"For me, the appellate court's decision to uphold (the judge's) ruling to hand over the video coverage was just confirmation for me that … what are we hiding?" Uvalde County Commissioner Ronald Garza told AP after Monday's meeting. "I'm very happy that we're gonna release the information."

One county commissioner, Mariano Pargas Jr., who was the acting police chief on the day of the school shooting, abstained from the vote.

Family members of the victims had also pushed to make the records public.

Jesse Rizo, the uncle of 9-year-old victim Jackie Cazares, asked commissioners on Monday to release the records.

Rizo is also a member of the school board. During the board's July 21 meeting, he apologized for the delay in releasing the records.

"Will it answer everything? No. Will it give you closure? I don't think anything ever will give you that type of closure. Will it hopefully make you heal or allow you to heal? I pray that it does," Rizo said last week.

Records from the county that are expected to be released include incident and 911 reports concerning Robb Elementary and other locations; video footage; ballistics and evidence logs; and reports of law enforcement interactions with the shooter and his mother.

Records from the school district expected to be released include body-worn and security camera footage from Robb Elementary; student files for the shooter; and records involving Pete Arredondo, the former Uvalde schools police chief who was later indicted over his role in the slow response to the shooting.

Arredondo and former school officer Adrian Gonzales have pleaded not guilty to multiple charges of child abandonment and endangerment. They are set to face trial on Oct. 20.

Several officers involved, including Arredondo, were fired, and separate investigations by the Department of Justice and state lawmakers faulted law enforcement for botching their response to the massacre.

Uvalde city officials released their records in August 2024. The Texas Department of Public Safety is still fighting a separate lawsuit filed by media organizations for the release of that agency's records related to the school shooting.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });