Gavelly runs 51 automated checks on every draft Grand Jury report. Below is every check, what it looks for, why it matters, and how to fix it.
Last updated: June 22, 2026
Gavelly verifies that the report contains at least one clearly labeled finding.
A grand jury report without findings has nothing for respondents to act on β findings are the factual foundation every recommendation must rest on. Without them, the report cannot compel a legal response.
Gavelly checks that each finding has a unique label (F1, F2, F3 or Finding 1, Finding 2, etc.).
Numbered findings let respondents indicate, per Penal Code Β§933.05(a), whether they agree with the finding or disagree wholly or partially. Unnumbered findings make a Β§933.05(a) response ambiguous.
Gavelly checks that finding labels form a clean sequence β no duplicate numbers, no gaps, and no mix of bare numbers with sub-lettered variants of the same number.
A duplicate label (F3 listed twice) or a gap (F1, F2, F4) makes responses under Penal Code Β§933.05(a) impossible to map cleanly. A mixed scheme (F1a, F1b, then a bare F2 alongside F2a) signals a structural problem the respondent will trip over.
Gavelly checks that findings present evidence-based assessments β not hedged opinions ('we believe', 'it seems') and not recommendations dressed as findings ('the department should X').
CGJA's 'Wording Your Findings' explicitly says findings are 'problems, criticisms, assessments, or judgments' β discoveries backed by evidence, not bare facts. The two failure modes are hedge language ('we believe', 'it seems'), which strips the report of authority, and recommendation-shaped 'should/must' language, which belongs in the Recommendations section per Pen. Code Β§933.05(b).
Gavelly verifies that the report contains at least one recommendation.
Penal Code Β§933 requires respondents to respond to each recommendation. A report with no recommendations cannot compel any action β and doesn't meet CGJA expectations for a final report.
Gavelly checks that each recommendation has a unique label (R1, R2, R3 or Recommendation 1, etc.).
Penal Code Β§933.05(b) requires the respondent to answer each recommendation with one of four specific dispositions (implemented, will be implemented with timeframe, requires further analysis, or will not be implemented because not warranted or not reasonable). Unnumbered recommendations make that per-recommendation response impossible.
Gavelly checks that recommendation labels form a clean sequence β no duplicate numbers, no gaps, and no mix of bare numbers with sub-lettered variants of the same number.
A duplicate label ('R3' listed twice) or a gap ('R1, R2, R4') breaks the per-recommendation response Penal Code Β§933.05(b) requires. A mixed scheme like 'R1a, R1b, R2a, R2b, R3, R3, R4, R5a, R5b' is the most common real-world failure: the duplicate '3' and the inconsistent sub-lettering both make the required response unmappable.
Gavelly checks that each recommendation references the specific finding(s) it addresses.
Recommendations must flow from findings β otherwise there's no evidentiary basis for the action being recommended. Linking R1 to F2, for example, shows respondents why the change is warranted.
Gavelly checks that recommendations contain clear action verbs like 'should', 'shall', or 'must'.
A recommendation without an action verb isn't actually a recommendation β it's an observation. Respondents can't agree to implement something that isn't phrased as an action.
Gavelly checks that each recommendation ends with a deadline phrase (<em>by [date]</em>, <em>no later than [date]</em>, <em>beginning FY [year]</em>, <em>within [N] months of [trigger]</em>).
The Β§933.05(b) response options include <em>will be implemented</em> with a required timeframe β that timeframe is what makes the four allowed responses comparable and trackable. A recommendation without a deadline forces the respondent to invent one or default to the catch-all <em>requires further analysis</em>, neither of which is what the jury intended.
Append a deadline phrase to each recommendation:
... by Dec 31, 2026.... no later than Jun 30, 2027.... beginning FY 2025β26.... within 90 days of receipt.This is the recommendation's action deadline (when the respondent has finished the work), distinct from the Β§933.05 response deadline (60 or 90 days from publication for the response itself, which Gavelly checks separately).
Gavelly verifies that each recommendation has a clearly identified required respondent β a governing board or elected county official.
Penal Code Β§933(a) requires grand jury reports to specify who must respond. Without identified respondents, the report has no legal force and cannot compel action.
Gavelly checks that the report separates 'Required Responses' from 'Invited Responses' in distinct sections.
CGJA guidelines draw a clear line between entities that must respond (governing boards, elected county officials) and those invited to respond (subordinate boards, department heads). Mixing the two creates confusion about who is legally obligated to respond.
Gavelly checks that required respondents are governing boards or elected county officials β not appointed staff, elected city officials (mayor, city clerk, except in San Francisco), state/federal employees, courts, legislators, or private entities. When a department head or appointed official is listed, Gavelly identifies their governing board.
Penal Code Β§933.05 limits who can be required to respond to a grand jury report. Appointed staff (city managers, police chiefs, department directors) and elected city officials like a mayor or city clerk are NOT required respondents β the response must come from their governing board (e.g. City Council, Board of Supervisors). San Francisco is the one exception, because it is a consolidated city-county.
Gavelly checks that each recommendation's required respondents include the entity named as the actor inside the recommendation text (the subject of 'should', 'shall', or 'must').
Penal Code Β§933.05 gives respondents only four prescribed dispositions for each recommendation; none of them is 'this recommendation isn't directed at us'. When a recommendation says 'the Board of Supervisors should X' but is also assigned to seven cities, those cities are forced to file responses noting they have no authority β wasted statutory effort, diluted accountability, and a real-world failure mode that is invisible to anyone reading published responses without text-mining.
Gavelly checks that the entity named as the actor inside each recommendation (the subject of 'should', 'shall', or 'must') is a government body subject to Penal Code Β§933.05 β not a private corporation, 501(c) non-profit, destination marketing organization, or generic private actor like 'the property owner' or 'the contractor'.
Penal Code Β§933.05 only binds public agencies. When a recommendation says 'Visit Lompoc Inc. shallβ¦' or 'the property owner shouldβ¦', no respondent is statutorily required (or able) to make that happen β the gov body assigned to respond has no authority over the named actor, and the Β§933.05 response codes have no path to enforcement against private entities.
Gavelly consumes its own entity matcher's verdict on each respondent and flags three cases the text-only respondent checks can't see: a respondent that could <strong>not be matched</strong> to any known government body; one matched <strong>only by name similarity at low confidence</strong> (the link may be the wrong entity β e.g. a county department's brand name force-matched to a like-named city); and one <strong>named like a non-government entity</strong> (corporation, destination-marketing org, 'the property owner').
The matcher will otherwise force <em>some</em> government entity onto almost any respondent name, silently. A respondent linked to the wrong government body β or to none β still renders on the report page with a confident-looking link, and Β§933.05 responses can only be required of the body actually named. This check is the bridge between the matcher and the published report: it raises the matcher's low-confidence / unresolvable / non-government verdict as a warning a human can act on, instead of letting a wrong assignment pass.
Gavelly checks every named respondent against a list of California local-government entity classes that typically have <strong>no governing body of their own</strong> β County Service Areas (CSAs), Mello-Roos Community Facilities Districts (CFDs), 1972 and 1982 Act assessment districts, permanent road divisions, redevelopment successor agencies, public financing authorities, tourism marketing districts, and district-dependent charter schools. When a match is found, Gavelly suggests the parent governing body (Board of Supervisors, city council, school district board) as the correct Β§933.05 respondent.
Β§933.05 only allows responses from a body that can vote and sign one. A dependent entity β one without its own governing body β cannot. Naming a CSA, CFD, or successor agency as a respondent leaves the recommendation directed at something that has no separate authority to act; the parent body that actually governs it never receives the legal hook.
For each flagged respondent:
If the report covers a detention facility, Gavelly checks that it either contains a brief compliance statement (per Β§919(b)) or a full investigation with verified facts.
Penal Code Β§919(b) requires grand juries to inquire into the condition of every jail and prison in the county. A brief compliance statement is sufficient β but if a full report is published, it must be based on verified facts, not opinion. Revealing investigation details or vote counts violates secrecy rules.
Gavelly checks that required response deadlines (60 days for elected officials, 90 days for governing boards) are specified.
Penal Code Β§933(c) sets statutory deadlines for responses. Omitting deadlines gives respondents no accountability and makes enforcement impossible.
Gavelly checks that the report (or accompanying cover letter) explains the response content prescribed by Penal Code Β§933.05 β the two-category response to each finding and the four-category response to each recommendation β and that each option uses the statutory wording. It flags truncated paraphrases, e.g. a recommendation option 4 that drops βbecause it is not warranted or is not reasonableβ, an option 3 that drops βthe scope and parameters of an analysis or studyβ, or a finding-disagreement option that drops βwith an explanationβ.
CGJA guidance says reports should indicate both the timing AND the content of required responses. Penal Code Β§933.05 prescribes exactly two response categories for findings and four for recommendations, with specific wording. Without this up front, respondents often submit non-compliant replies and the report's recommendations don't get clean accountability.
Add a 'Responding to This Report' section (or include this in the cover letter) that lays out the Β§933.05 response format using the statutory wording:
For each FINDING, the respondent must indicate one of:
For each RECOMMENDATION, the respondent must indicate one of:
Gavelly scans for signs that the report discloses witness identities, vote counts, sealed evidence, or other confidential grand jury material.
Penal Code Β§924.2 imposes lifetime secrecy on grand jurors regarding evidence, witness identities, and internal deliberations. Violating secrecy is a criminal offense and can void the report.
Gavelly verifies that the report contains an unambiguous publication date on the cover page or in the front matter (e.g. <code>Released June 30, 2025</code>) β not just a fiscal year range, and not omitted entirely.
Penal Code Β§933(c) sets 60-day (elected officers) and 90-day (governing boards) response windows calculated from the report's public release date. Without a clear date, neither the respondent, the public, nor the next grand jury can verify whether responses met the deadline. About 11% of reports in the 2020β24 corpus have wrong-era or missing publication dates.
On the cover page or in the front matter, add a single line:
Released [Month] [Day], [Year]Published [Month] [Day], [Year]Issued [Month] [Day], [Year]Use a specific date β not "Fiscal Year 2024β25" alone, which is a range, not a release date.
Gavelly checks for a methodology section describing how the investigation was conducted.
Methodology explains what records were reviewed, how many interviews were conducted, and what sites were visited β without it, readers cannot evaluate the rigor of the investigation, and respondents may question the findings' credibility.
Gavelly checks for a summary or executive summary near the start of the report.
Media, elected officials, and the public usually read the summary first. Without one, the report's key findings and recommendations may be lost in the narrative.
Gavelly checks for a background section that provides context on the subject of the investigation.
Background sections give readers the context they need to understand why the topic matters β organizational structure, recent history, budget, relevant laws. Without it, findings may not make sense to readers unfamiliar with the subject.
Gavelly verifies that the PDF's <code>/Creator</code> metadata field does not contain a browser user-agent string (e.g. <code>Mozilla/5.0 (Windows NT 10.0; ...) Chrome/87.0...</code>) or an internal-looking hostname.
When a PDF is exported through a browser-based viewer, the Creator field can leak the exact OS and Chrome version of the office workstation that generated it. Roughly 1% of CGJ reports in the 2020β24 corpus do this, with one county accounting for the majority. The leak is not dangerous on its own, but neither does it need to be public.
Two fixes work, in order of preference:
/Creator to a clean generic value.Gavelly checks that the PDF's <code>/Producer</code> metadata field does not contain an internal-network hostname (e.g. <code>GJ-Copier</code>, <code>KHCHEXEC</code>, <code>121M-BWCOPY1</code>) β which discloses the device name on the office network.
Network-attached copiers default to broadcasting their device name in PDF Producer when used to scan or rasterize a document. Several California grand jury reports in the 2020β24 corpus carry copier hostnames in this field. The fix is one-time and the leak is not dangerous, but it is unnecessary and easy to prevent.
One-time fix: rename the office copier's display name in its admin console to a generic value (e.g. Office Copier). The change applies to every PDF exported from that device thereafter.
If the report has already been scanned through the affected copier, re-exporting it from Word or Acrobat will overwrite the Producer field cleanly.
Gavelly checks the filename the report will be published under for workflow tokens (<code>_draft</code>, <code>_v2</code>, <code>_signed</code>, <code>_proof</code>, <code>_copy_of</code>, <code>final-final</code>) and for personal names of court personnel or members of the public.
Workflow tokens in a published filename imply earlier private-but-similar versions exist and indirectly disclose the office's review state. Personal names in URL paths persist in every search engine that crawls the agency's site β long after a person's role has ended. Both are easy to prevent at posting time.
Before posting:
animal-services-report-2025.pdf) that doesn't reference its drafting history.Dept5) or a case number rather than a judge's surname; use a generic submission directory rather than the submitter's name.Gavelly detects when a report appears to be a translation (e.g. body text is in Spanish but the report number references an English original) and verifies the translation includes a one-line cover note linking back to the authoritative version.
Translated PDFs are typically posted as separate files with no metadata link to the English original. Future readers β and our extractor β must guess at the relationship, which leads to broken cross-references and lost provenance.
Add a one-line cover note to each translated edition:
Use the same finding/recommendation numbering across all language editions so a respondent's response under Β§933.05 maps cleanly to either version.
Opt-in. Accessibility checks run only when you tick "Include accessibility checks (WCAG 2.1 AA)" on the upload form. They are off by default because the ADA Title II Web Accessibility Rule (WCAG 2.1 AA) compliance deadline is 4/26/2027.
Gavelly checks that the PDF contains structural tags that describe document elements (headings, paragraphs, lists, tables) to assistive technology.
Screen readers rely on tags to navigate a PDF. An untagged PDF is effectively invisible to blind users β they hear a flat stream of text with no structure. California AB 434 and federal Section 508 already require tagged PDFs, and the ADA Title II web rule (28 CFR Part 35) requires them for state and local government content by April 26, 2027.
When exporting to PDF from Microsoft Word (Desktop):
Gavelly verifies that the document's heading structure follows a logical hierarchy (H1 β H2 β H3) without skipping levels.
Screen reader users navigate by heading level. Skipping from H1 to H3 makes it impossible to build a mental map of the document, and readers miss section boundaries entirely.
In Microsoft Word (Desktop):
Tip: Open the Navigation Pane (Ctrl+F, then click the "Headings" tab) to verify your heading hierarchy.
Gavelly verifies that the document has a primary language set in its metadata (e.g., English - United States).
Screen readers use the language setting to choose the correct pronunciation engine. Without it, English text may be read with French or Spanish phonemes, making it incomprehensible.
In Microsoft Word (Desktop):
Gavelly verifies that the document has a descriptive title in its metadata (not the filename or a placeholder).
The document title appears in screen reader announcements, browser tabs, and search engine results. A missing or generic title ('Document1') makes the report unfindable and unrecognizable.
In Microsoft Word (Desktop):
Gavelly checks that the PDF contains bookmarks that let users navigate directly to sections.
Bookmarks are the primary navigation mechanism for long PDFs. Readers with motor disabilities who can't scroll rely on them. Reports longer than a few pages without bookmarks are difficult for everyone to navigate.
In Microsoft Word (Desktop):
Note: PDF bookmarks are generated from Word heading styles. Without headings, there are no bookmarks to create.
Gavelly checks that every non-decorative image has alternative text describing its content.
Blind and low-vision readers depend on alt text to understand images. A chart, map, or photograph with no alt text is invisible to them β they hear nothing.
In Microsoft Word (Desktop):
Tip: Run File β Info β Check for Issues β Check Accessibility to find all images missing alt text at once.
Gavelly checks that data tables have a designated header row so screen readers can announce column names when reading cells.
Without header rows, screen readers read data cells in isolation β users hear '$1,200' with no context about whether that's a budget, a deficit, or a fine. Header rows provide the context.
In Microsoft Word (Desktop):
Gavelly checks that the document contains selectable, searchable text rather than scanned page images.
A scanned PDF is a picture of text β screen readers see nothing, search tools find nothing, and users cannot copy-paste or resize the text. This excludes every reader with a disability.
This document appears to be a scanned image, not real text:
Gavelly checks that text color has at least a 4.5:1 contrast ratio against its background (3:1 for large text).
Readers with low vision, color blindness, or reading in bright sunlight can't distinguish low-contrast text. Light gray text on white backgrounds fails every standard.
Gavelly checks that the PDF is tagged so content can reflow for different screen sizes and zoom levels up to 400%.
Users with low vision need to zoom to 200% or more. Without reflow support, zoomed content requires horizontal scrolling, which is unusable on phones and exhausting on desktops.
When exporting to PDF from Microsoft Word (Desktop):
Note: Tagged PDFs can reflow content for different screen sizes and zoom levels.
Gavelly checks that charts, icons, table borders, and other visual elements have at least a 3:1 contrast ratio with adjacent colors.
Users with low vision need to distinguish chart lines, icon shapes, and table cell boundaries. Light gray borders on white, or pale blue bars on white, disappear for many readers.
Gavelly checks that the PDF uses proper paragraph spacing and heading styles, not manual line breaks or spaces, so assistive technology can adjust text spacing.
Users with dyslexia or low vision often need to increase letter spacing, word spacing, or line height. Documents built with manual spacing can't be adjusted without breaking the layout.
In Microsoft Word (Desktop):
Note: Tagged PDFs allow assistive technology to adjust text spacing for users who need it.
Gavelly checks that if the document references help resources (contact info, instructions), they appear in a consistent place.
Readers with cognitive disabilities rely on predictability. Help resources scattered through the document, or appearing in different places each time, create confusion.
Gavelly checks that footnote and endnote text uses a font size of at least 9pt. This check is DOCX-only β in PDFs, footnote text is part of the page and covered by the general text-spacing check.
Footnotes are often set in small fonts to save space, but text below 9pt is difficult to read for users with low vision. Grand jury reports are public documents that must be accessible to all readers.
In Microsoft Word:
Gavelly checks that the report's title is more than boilerplate. Generic strings like <code>Grand Jury Report</code>, <code>2024 Final Report</code>, or <code>[County] Civil Grand Jury Final Report 2024-25</code> are flagged because they describe the document's category, not its subject.
WCAG 2.1 SC 2.4.2 requires titles that 'describe topic or purpose,' not category. Beyond accessibility, a descriptive title is the single biggest determinant of whether a report is read by anyone outside the immediate respondent set. About 20% of CGJ reports in the 2020β24 corpus carry generic titles that no reader will remember.
Rewrite the title to describe the subject. Examples from published reports:
The same descriptive title belongs in both the cover page and the PDF /Title metadata field β one fix solves the SC 2.4.2 accessibility requirement, the discoverability problem, and the citation-manager problem at once.
Gavelly checks that the report body uses a single, consistent font, and flags any text set in a different font.
Mixed fonts usually come from text pasted out of email or another document. They look unprofessional, undercut the report's authority, and can break the reading order and reflow that screen-reader and large-print users rely on.
When you upload a DOCX, Gavelly can only verify a subset of accessibility checks. Tagging, bookmarks, reflow, and contrast can only be verified on the exported PDF.
Many accessibility requirements apply to the final PDF that readers download, not the Word source. A DOCX that looks accessible in Word can still produce an untagged PDF that fails the audit.
In Microsoft Word (Desktop), export to PDF with accessibility tags:
Gavelly scans the published filename and the document's title/metadata for internal grand-jury tracking identifiers β Request-for-Information numbers (<code>RFI 24</code>), investigation/complaint numbers (<code>Investigation No. 5</code>), <code>ID No. 1</code>, and clerk filing numbers like <code>25-00698</code>.
These are internal process identifiers. Published in a filename or title they leak the jury's internal tracking scheme into the permanent public record β and into every search engine that indexes the agency's site β with no benefit to the reader. One Santa Barbara report in the 2020β26 corpus published <code>RFI-24</code> directly in its filename.
Before posting:
sheriff-overtime-report-2026.pdf) with no tracking number.Gavelly flags personal-domain email addresses (<code>@gmail</code>, <code>@yahoo</code>, <code>@hotmail</code>, <code>@aol</code>) that appear within ~80 characters of a phone number or street address in the body of a report or response document.
Penal Code Β§924.2 protects grand jury secrecy, but the Β§933.05 response process has no equivalent statutory frame for protecting third-party PII. Private board members' personal Gmail addresses, cell phone numbers, and home addresses regularly show up in published response documents β once posted, that contact block is indexed everywhere downstream. The harm is to the individual, not the jury.
Replace the personal-contact block with the agency's public-facing contact information:
If the report has already been posted with leaked PII, ask the originating agency to republish a redacted copy. UnGovr honors per-document redaction requests on civilgrandjury.org while the agency works on republication.
Gavelly flags contact-block lines in cover letters or signatures where the official jury contact is a personal Gmail/Yahoo/Hotmail address belonging to a sitting juror.
A foreperson's personal email persists in the public record long after their term ends; future juries cannot rotate it; and bouncing public correspondence through a personal account creates real practical and security problems for the individual juror. Several California grand juries currently publish such addresses.
Use one of these alternatives:
[email protected]If no such alias exists, request one from the court before publishing β the IT lift is small and the result is durable across jury terms.
Gavelly checks the source PDF's URL path and filename for proper-noun patterns that look like a person's name β both members of the public who submitted material to the jury and assigned court personnel.
URLs are indexed by every search engine that ever crawled the agency's site. A submitter's name in a directory path (<code>/submittedplan/[NAME]/...</code>), or a judge's surname in a response filename, becomes a permanent public record of the individual's role β well beyond what either statute or convention requires.
Before posting, rename the file:
map-proposal-04.pdf) rather than the submitter's name.Dept5) or the case number rather than a judge's surname./submitted/2024/) rather than a per-person directory.Gavelly probes every external URL cited in the draft and reports any that return 4xx/5xx errors or fail to resolve. For broken government domains, Gavelly also checks the Wayback Machine and suggests an archive URL where one is available.
Roughly 52% of external URLs cited in CGJ reports from the 2020β24 corpus were unreachable when audited. A citation that points to a now-dead URL with no archive is, in practice, no citation at all β readers cannot verify the underlying claim and respondents cannot rely on the source. Encouragingly, 59 of 60 broken government links sampled had a Wayback snapshot, so most broken citations are recoverable if caught at draft time.
For each broken URL Gavelly flags:
UnGovr is also building a managed archive (per #1243) that will capture every cited URL automatically when the report is published on civilgrandjury.org β juries that prefer not to maintain their own archive will not have to.