Skip to main content

Change wording and local guidance

Use this page to locate a change before opening a pull request. It describes the code at the October 13, 2026 audit, commit b4be391, for issue #324. A merged feature does not establish partner approval or deployed enablement. Record those separately in the maintenance register.

I want to change…​

Paths below are relative to efile_app/efile/. State YAML means static/config/states/<jurisdiction>.yaml; shared defaults are in static/config/base-case-types.yaml. Merge into existing sections; duplicate YAML keys can replace earlier settings.

Visible elementExact location/keyDefault or fallbackScope and markupCode change?
Start page branding and helpState YAML jurisdiction.brand_name, logo, logo_alt, help_name, help_url, help_number, contact_emailBase jurisdiction settingsJurisdiction; plain labels, explicit URL fieldsNo
Start menu, upload heading, AI opt-out labeltemplates/efile/options.html, upload_documents.htmlTranslated template copyShared; template markupYes; no corresponding text hook
Upload preparation helpState YAML text.upload_documents.preparation_help / preparation_help_unflattenedUI catalog defaults below; branch depends on document_preparation.flatten_pdf_formsJurisdiction; inline MarkdownNo
Pre-upload court noticesState YAML upload_disclaimers[].name, .textConfigured snapshot; absent means no noticeJurisdiction; sanitized HTML paragraphs, emphasis, lists and links with preserved line breaks; separate from text MarkdownNo; requires source review
Confirm information court/category labels and helpState YAML text.extraction_review.court_label, court_help, case_category_label, case_category_helpUI catalogJurisdiction; labels plain, help inline MarkdownNo
Court questions and choicesState YAML court_selector.steps[].label, .help, .options; see configuration referenceFlat court list when selector absentJurisdiction; selector-specific rendering, not UIStringNo for existing selector mechanisms
Filing-code search terms, result explanations and filtersdata/filing_code_search.yaml, filing_concept_definitions.yaml, filing_code_facets.yaml, case_type_guidance.yaml, legal_glossary.yamlGeneral entry, then configured local overridesPer file's schema; maintained dataNo for existing schema; new controls need code
Existing-case confirmation heading and court-owned fieldstemplates/efile/case_confirmation.html; imported court data“Is this your court case?”; court responseShared template; court data cannot be reworded as an overrideYes for heading; do not change imported facts
Checklist labels, descriptions, side and lead variantsState YAML case_types.<id>.documents, .filer_roles, case_categories; court_specific_requirements.<court>.case_typesInherited base checklist; absent list stays emptyState/case/exact court; schema fieldsNo; checklist guide
Finder intent and form/help linksState YAML document_finder.intents.<id> (title, summary, keywords, filing_path, checklist.case_type or .case_category, filer_role, lead_filing_type_name, resources, document_resources)No-guide state when absentJurisdiction; plain copy, HTTPS resource linksNo; finder guide
Organize main document, component and confidentiality helpState YAML text.organize_documents.* and text.terms.*UI catalog belowJurisdiction; prose Markdown only where listedNo for listed hooks
People role question/help and contact introductionState YAML text.parties.role_question, .role_help, text.your_information.ledeUI catalogJurisdiction; question plain, prose MarkdownNo
Individual People/contact field labelstemplates/efile/parties.html, party_details.html, your_information.htmlTemplate/form labelsShared; ordinary translation workflowUsually yes; confirm actual renderer before changing legacy YAML labels
Fees eligibility and waiver-document instructionsState YAML fee_waiver.benefits, .income_bands[].description, .document_guidance, .source_urlBenefits/bands omitted if absent; default instruction is to include a waiver form or court orderJurisdiction; plain escaped copy, separate source URLNo; substantive source/approval review required
Case-exemption explanation on FeesState YAML fee_estimates.surcharges.platform.exemptions[].noteNo custom note unless the selected configured exemption supplies oneJurisdiction and configured exemption matching; plain escaped copyNo; does not establish unimplemented exemption coverage
Fees contacts and ordinary screen copyState YAML court_specific_requirements.<court>.contact, jurisdiction.help_*; templates/efile/payment.html for ordinary copyJurisdiction help fallback and translated template copyJurisdiction/exact court for contacts; explicit URLs; ordinary copy requires template editNo for contacts; yes for other wording
Informational message on Fees, Review or another stepState YAML filing_guidance[]No local guidance enabled by defaultJurisdiction, exact saved codes; plain text, HTTPS resourcesNo
Review heading, summaries and acknowledgmenttemplates/efile/review.html; services/disclaimers.py fetches court requirements“Review your filing”; live requirementsShared copy; court requirements are separate from curated noticesYes for ordinary copy; court owns requirements
Filing status labels/trackerservices/filings.py (STATUS_PRESENTATION, TRACKER_STAGES), templates/efile/filing_detail.htmlNeutral presentation for missing/unknown updatesShared translated copyYes
Review timing/hoursState YAML filing_timing, exact court .filing_timingUTC if timezone missing; no estimate without source/labelJurisdiction/exact court; explicit source URLsNo; email and tracker review
Submission and court-update emailsState YAML submission_notifications.enabled, .format, .templatesInherited eight-field set; disabledJurisdiction; two substitution stages, HTML wrapperNo for copy; transport/sender changes require operator work

Field coverage remains incomplete in #74. The partner configuration editor is separate work in #275. The current workflow is YAML → pull request → technical and content review → staging → deployment. Partners can request an edit without writing YAML: send proposed wording, jurisdiction/court scope, approved source and an annotated synthetic screenshot to their agreed project contact or open a repository issue.

Supported UI catalog​

Every key below is nested under text in State YAML. The English default lives in ui_text.py. An omitted or empty override uses that default. These hooks are jurisdiction-wide; putting text under a court does not create a court-specific override.

Key under textEnglish fallbackMarkdown links?
upload_documents.preparation_helpUpload your files as they are. We make PDF copies for court.Yes
upload_documents.preparation_help_unflattenedWe turn Word files into PDFs. You can check them next.Yes
terms.starting_document_examplepetitionNo
terms.main_documentmain documentNo
organize_documents.main_document_questionWhich PDF is the {main_document}?No
organize_documents.main_document_helpChoose the document that starts this filing, like a {starting_document_example}.Yes
organize_documents.filing_component_labelCourt filing componentNo
organize_documents.filing_component_helpThe court may call more than one PDF a “Lead Document”. This is separate from your {main_document}.Yes
organize_documents.filing_component_fixed_noteRequired by the court.No
organize_documents.filing_component_required_noteRequired by the court for this filing type.No
organize_documents.confidentiality_helpChoose confidential only when a court rule or court order requires it.Yes
organize_documents.optional_services_summaryCertified copy and courtesy email (optional)No
organize_documents.optional_services_helpA certified copy is a copy the court marks as official.Yes
organize_documents.choose_filing_type_firstSelect a filing type firstNo
organize_documents.loading_choicesLoading choices…No
organize_documents.no_document_typesNo confidentiality choices are availableNo
organize_documents.no_filing_componentsNo filing components are availableNo
extraction_review.court_labelCourt or countyNo
extraction_review.court_helpChoose the court that should receive this filing.Yes
extraction_review.case_category_labelCase categoryNo
extraction_review.case_category_helpChoose the broad category that best describes the case.Yes
your_information.ledeCheck your name and contact information.Yes
parties.role_questionWhat is your role in this case?No
parties.role_helpLook for your role next to your name on the court documents.Yes
about.project_partner_descriptionLITEfile is built with legal aid partners who help fund, build, and deploy it for self-represented litigants in their states:Yes

Make a safe wording change​

This staging example tests a supported hook. It replaces any existing state override for that key, including Illinois’s local wording, and adds a suggestion to ask the clerk. Obtain the court/legal review described below before using it as public guidance; preserve the prior override for rollback:

# Merge into the existing text section of the target State YAML.
text:
organize_documents:
confidentiality_help: >-
Choose confidential only when a court rule or court order requires it.
Ask the court clerk if you need help finding the applicable rule.
  1. Record the current wording, proposed wording, target jurisdiction and reviewer in the register. Court-policy wording needs a court/legal reviewer; a technical reviewer checks configuration and rendering.
  2. Edit the existing state section. Run the checks below from efile_app. Commit the regenerated efile/config_text_strings.py alongside the YAML change so translation extraction stays current.
  3. In staging, open Organize with a synthetic document and an actual confidentiality choice. Verify the changed passage and another jurisdiction's fallback. Check mobile wrapping, accessible labels, keyboard use and translated screens for each enabled language. English is the only shipped language at this snapshot.
  4. Attach before/after evidence to the PR, obtain the recorded reviews, and deploy the same file to all instances. Existing state files reload on changed file metadata; a new jurisdiction or a change to shared base-case-types.yaml defaults requires an application restart. Revert the YAML/catalog changes together if the wording or rendering is wrong.
uv run python manage.py check --fail-level WARNING
uv run python manage.py extract_config_text
uv run python manage.py extract_config_text --check
uv run pytest -q efile/tests/test_ui_text.py efile/tests/test_filing_guidance.py

When changing translations, follow the translation workflow: run makemessages -l es after extraction, translate/review the catalog, then compilemessages. Gettext tools and an enabled application language are required; running extraction alone does not ship a translation.

Markup, escaping and placeholders​

UIString(..., links=True) permits inline Markdown links, emphasis, strong text and code when rendered as prose by the template tag. HTML is sanitized to inline tags and allowed http, https, mailto, tel protocols; headings, images and lists are not supported. Web links announce a new tab. Plain labels/questions and strings sent to JavaScript reduce Markdown to text. Do not put a link inside a control label.

{brand_name}, {state_name}, {state_code}, {court_name} and {jurisdiction_name} come from configuration. Each terms.* value supplies its last segment as a placeholder, such as {main_document}. Caller parameters can override values; interpolated prose values are escaped. Unknown placeholders remain visible and log a warning, so inspect the rendered page for braces. Use doubled braces for literal braces. UI braces are unrelated to email variables.

efile.W002 flags unknown text keys; efile.W003 flags links in unsupported keys. A key's presence in the catalog does not override every similar sentence in a template. After the copy simplification in #319, the workflow stage “Confirm filing” and page heading “Confirm information” differ; neither is a catalog hook.

Choose the right guidance mechanism​

MechanismMatching and effectLinks and translation
textSupported catalog key; changes wording, not validation or provider codesContextual gettext; sanitized inline Markdown only for links=True
filing_guidanceAll configured conditions must match; any value within a list; exact saved provider codes, including any document's filing code. Shows after saved selections, never blocksPlain titles/text, escaped HTML; separate absolute HTTPS resources open in same tab; extracted for translation
court_specific_requirements.<court>.filing_availabilityExact court or supported county prefix; exact authoritative names or explicit full-match regexes; matching rule blocks. Rechecked for supporting documents, saved drafts and submissionPlain message as configured, no Markdown/placeholders or separate text translation

See contextual guidance and availability. Code-bound guidance must be checked after catalog syncs. efile.W004 reports invalid guidance. One invalid rule suppresses all configured guidance for that jurisdiction; it does not block filings. An availability matcher needs actual selection tests beyond manage.py check.

Request an unsupported field​

Copy this template into the agreed issue or review channel. Store screenshots in a gist, capture temporary images under /tmp, and use synthetic data.

Jurisdiction / court / new or existing case:
Page heading and route:
Current label (exact words):
Proposed label and help text:
Reason and authoritative source:
Content reviewer / translator / technical reviewer (unassigned if unknown):
Screenshot gist and numbered annotation pointing to the control:
Commit, capture date, viewport, language, scenario, synthetic/live-test scope:
Expected accessible name and any related validation message:
Related implementation issue (#74 for missing hooks):