91³Ô¹ÏÍø

Watch CBS News

Brady violation claim could trigger mistrial in Uvalde officer trial

Evidence presented during the first day of the trial of a former Uvalde school police officer has prompted concerns from the defense that it was not previously disclosed, raising the possibility of a Brady violation, potentially leading to a mistrial.  

What is a Brady violation?

A Brady violation occurs when the prosecution in a criminal case fails to disclose evidence that is favorable to the defense and could be material to the outcome of the case. It's named after the 1963 U.S. Supreme Court case.

Any evidence that could help the defendant's case must be disclosed, including: 

  • Evidence that casts doubt on the prosecution's witnesses 
  • Evidence that supports the defendant's innocence 
  • Evidence that could lead to a lesser sentence
  • Evidence that could have been "material" and likely changed the outcome of the case

Consequences of a violation:

  • Convictions can be overturned if a Brady violation is found.
  • Prosecutors or law enforcement could face disciplinary action.

Brady violation claim pauses jury in Uvalde officer trial  

The prosecution called the former Robb Elementary School teacher who was there the day of the shooting. She made statements during her testimony about the shooting that were not previously submitted into evidence to the defense — a potential Brady violation.

Stephanie Hale, who was teaching at Robb Elementary the day of the attack, struggled through tears to describe running with students from the playground to the school building and hiding in a classroom.

Hale said once inside, she and other teachers grabbed scissors to defend themselves if the gunman came into the room. Hale described students hiding in the dark as she crawled on her belly to reach the ones who were struggling to stay calm.

"We got together and came up with a plan: To do what we had to do to defend," the children, Hale said.

She discovered later that some of the children had grabbed safety scissors to mimic the teachers.  

But other parts of Hale's remarks from the witness stand included that she saw a gunman wearing black approaching the school from an area near where Adrian Gonzales was. 

Gonzales' attorneys said she had not disclosed that in previous witness interviews, and that it would be a key detail about the officer's location near the shooter.  

It prompted a jury pause and sparked arguments over whether jurors could now be biased. 

"I didn't know if this was something she's saying for the first time on the stand or something she said to them before," said defense attorney Nico LaHood. "The issue is where the shooter allegedly was and what our client allegedly saw. And when he saw this, if he did see it at all, it is a big deal. It is an issue in the case."

The judge agreed to consider arguments over Hale's testimony. The two sides will argue the issue in open court on Wednesday without the jury present.

The judge will make the final decision on Wednesday and witness testimony will resume Thursday morning.  

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=50747257b890e014813016b79ece0fb2'; 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(); } }); }); }); });