{
  "test_case_id": "A11Y-WCAG-041",
  "title": "WCAG 3.1.1 Language of Page",
  "category": "wcag_manual",
  "procedure_version": "2026.08.27-rc.9",
  "rule_type": "atomic",
  "wcag_criteria": [
    "3.1.1"
  ],
  "level": "A",
  "risk": "medium",
  "risk_basis": "Detect pages whose default human language is missing, invalid or does not match the page's predominant language. People most likely affected: people using screen readers or other language-aware assistive technology; People who rely on browsers to select fonts, dictionaries or pronunciation rules. Incorrect language processing can make content difficult or impossible to understand and can select the wrong pronunciation or script support. In the recorded web-desktop-cross-browser environment, apply the criterion to every relevant state and named normative exception; failures in critical tasks and complete processes carry the greatest user impact.",
  "review_status": "draft",
  "reviewed_at": "",
  "review_note": "Template content is subject to a hash-bound internal consistency review. Formal assessment claims require competent execution, current evidence and the applicable legal, participant and organisational authority.",
  "method_label": "WCAG check",
  "tester_level": "Accessibility tester",
  "estimated_duration": "Typically 33–48 minutes for the stated single-target assumptions; use the component breakdown when estimating a real sample.",
  "execution_class": "manual_with_automation_support",
  "automation_support": "supporting_evidence_only",
  "simulation_policy": "simulation_may_support_but_not_replace_manual_execution",
  "plain_summary": "Check that each web page exposes an accurate default human language in code.",
  "objective": "Detect pages whose default human language is missing, invalid or does not match the page's predominant language.",
  "test_subject": "Each in-scope web page, including distinct routed views that meet WCAG's definition of a web page.",
  "test_targets": [
    "The programmatically determinable default language of each selected web page."
  ],
  "applicability": "Apply to every selected web page. Do not use screen-reader pronunciation as a substitute for inspecting the programmatic language declaration.",
  "applicability_questions": [
    "Is the target a web page in the evaluated scope?",
    "What human language is used by the largest proportion of its non-proper-name content?",
    "If languages are equally used, which is encountered first?"
  ],
  "inapplicability_conditions": [
    "The evaluated subject contains no web page. A selected web page itself is not inapplicable merely because it contains little or no text."
  ],
  "assumptions": [
    "The selected scope identifies the product version, technologies, states and important user journeys being evaluated.",
    "The tester knows how to use this method and any required assistive technology.",
    "Known browser or assistive-technology limitations are recorded instead of being assigned to the product without evidence."
  ],
  "accessibility_support_assumptions": [
    "The result covers only the browsers, platforms, readers and assistive technologies that were actually tested.",
    "Do not apply a result from one technology combination to an untested combination or to every user."
  ],
  "prerequisites": [
    "The product area and test targets are agreed before testing starts.",
    "The operating system, browser, viewport and input method are recorded.",
    "Test data is safe to use and does not expose unnecessary personal information."
  ],
  "required_environment_fields": [
    "operating_system",
    "operating_system_version",
    "browser",
    "browser_version",
    "viewport_css_pixels",
    "input_method"
  ],
  "steps": [
    {
      "step_id": "S1",
      "title": "Determine the page's predominant language",
      "phase": "prepare",
      "scenario_purpose": "Establish the human-language expectation before inspecting code.",
      "user_impact": "An incorrect expectation can hide pronunciation and language-processing barriers.",
      "test_target": "The selected page or routed view.",
      "required_state": "Final rendered content for one locale and route.",
      "tool_or_command": "Browser plus an authoritative language reference when the tester cannot identify the language.",
      "action": "Record the URL, route and build. Read representative headings, controls and body content; exclude proper names. Record the language used by the largest proportion of content, or the first language encountered when proportions are equal.",
      "expected": "The expected default human language and reasoning are recorded.",
      "failure_observation": "The tester guesses from the locale selector, URL or brand rather than the page content, or cannot determine the language defensibly.",
      "evidence_to_record": "EXE-REF-001 note containing route, build, representative text samples, expected BCP 47 tag and rationale.",
      "decision_rules": {
        "passed": "The expected language is supported by representative page content.",
        "failed": "The expectation contradicts the predominant content or lacks sufficient evidence.",
        "not_applicable": "No selected target is a web page.",
        "blocked": "Language expertise or an accessible page state is unavailable."
      },
      "decision_effect": "Passed: The expected language is supported by representative page content. Failed: The expectation contradicts the predominant content or lacks sufficient evidence.",
      "recovery_or_repeat": "Escalate unfamiliar or equally mixed language content to a competent language reviewer; keep the result cannot-tell until resolved.",
      "novice_guidance": "Escalate unfamiliar or equally mixed language content to a competent language reviewer; keep the result cannot-tell until resolved.",
      "limitations_and_claim_boundary": "This scenario establishes the comparison value only; it does not decide WCAG 3.1.1."
    },
    {
      "step_id": "S2",
      "title": "Inspect the root language declaration",
      "phase": "test",
      "scenario_purpose": "Find the programmatic default-language value on the page root.",
      "user_impact": "Missing language metadata can cause assistive technology to use the wrong pronunciation rules.",
      "test_target": "The `html` element of the selected rendered page.",
      "required_state": "The same build, route and locale used in S1 after client-side rendering is complete.",
      "tool_or_command": "Firefox Developer Tools 141 or later: Inspector, select `html`, inspect computed `lang`; equivalent DOM tools may be used when recorded.",
      "action": "Inspect the rendered root `html` element. Record the effective `lang` value and the source attribute. Repeat after any client-side route change that replaces the page's predominant language.",
      "expected": "A non-empty programmatic language declaration is present on the page root.",
      "failure_observation": "No effective declaration exists, it is placed only on a nested container, or a route change leaves stale root metadata.",
      "evidence_to_record": "DOM extract or screenshot showing the root element, effective value, URL, locale and build.",
      "decision_rules": {
        "passed": "A non-empty root declaration is present for every selected route state.",
        "failed": "Any selected page lacks a programmatic root declaration.",
        "not_applicable": "The evaluated subject contains no web page.",
        "blocked": "The rendered DOM cannot be inspected with the authorised environment."
      },
      "decision_effect": "Passed: A non-empty root declaration is present for every selected route state. Failed: Any selected page lacks a programmatic root declaration.",
      "recovery_or_repeat": "Reload once without extensions; if the DOM still cannot be inspected, record the environment blocker rather than inferring the value.",
      "novice_guidance": "Reload once without extensions; if the DOM still cannot be inspected, record the environment blocker rather than inferring the value.",
      "limitations_and_claim_boundary": "This scenario establishes presence and location, not tag validity or accuracy."
    },
    {
      "step_id": "S3",
      "title": "Validate the declared language tag",
      "phase": "test",
      "scenario_purpose": "Confirm the declaration is a recognised BCP 47 language tag.",
      "user_impact": "Invalid values may be ignored or interpreted inconsistently by language-aware software.",
      "test_target": "The exact root language value captured in S2.",
      "required_state": "Unmodified declaration from the same page build.",
      "tool_or_command": "IANA Language Subtag Registry or a validator that reports its registry/version.",
      "action": "Validate the complete tag. Record whether its primary language subtag is recognised and whether any script or region subtags are syntactically valid.",
      "expected": "The declaration is a valid, recognised language tag.",
      "failure_observation": "The declaration is empty, malformed, contains an unrecognised primary subtag or cannot be validated.",
      "evidence_to_record": "Declared tag, reference or validator version, validation output and any interpretation note.",
      "decision_rules": {
        "passed": "The complete declaration validates against the named reference.",
        "failed": "The declaration is invalid or unrecognised.",
        "not_applicable": "No page target exists.",
        "blocked": "The reference needed to validate an unusual tag is unavailable."
      },
      "decision_effect": "Passed: The complete declaration validates against the named reference. Failed: The declaration is invalid or unrecognised.",
      "recovery_or_repeat": "Preserve the declaration and escalate unusual or private-use tags; do not replace uncertainty with a pass.",
      "novice_guidance": "Preserve the declaration and escalate unusual or private-use tags; do not replace uncertainty with a pass.",
      "limitations_and_claim_boundary": "Validity does not establish that the tag describes the page content."
    },
    {
      "step_id": "S4",
      "title": "Compare the declaration with page content",
      "phase": "test",
      "scenario_purpose": "Decide whether the valid declaration accurately identifies the default language.",
      "user_impact": "A valid but wrong tag can make text unintelligible when pronunciation or script handling changes.",
      "test_target": "The selected page's predominant content and root declaration.",
      "required_state": "Evidence from S1–S3 is complete and refers to the same page build.",
      "tool_or_command": "Recorded content samples and validated tag; language specialist if needed.",
      "action": "Compare the primary language represented by the declaration with the expected language from S1. Record whether regional differences matter to identification of the human language.",
      "expected": "The programmatic declaration accurately identifies the page's default human language.",
      "failure_observation": "The tag is valid but identifies another language, or the evidence is insufficient to make an accurate comparison.",
      "evidence_to_record": "Side-by-side record of expected language, declared tag, representative content and comparison decision.",
      "decision_rules": {
        "passed": "Declaration and page content identify the same default human language.",
        "failed": "Declaration identifies a different language or is missing/invalid from earlier scenarios.",
        "not_applicable": "No web page exists in scope.",
        "blocked": "The default human language remains genuinely indeterminate after escalation."
      },
      "decision_effect": "Passed: Declaration and page content identify the same default human language. Failed: Declaration identifies a different language or is missing/invalid from earlier scenarios.",
      "recovery_or_repeat": "Use cannot-tell when qualified language judgement is unavailable; record what expertise would resolve it.",
      "novice_guidance": "Use cannot-tell when qualified language judgement is unavailable; record what expertise would resolve it.",
      "limitations_and_claim_boundary": "The decision applies to this page and build only. Language changes within passages are assessed separately under WCAG 3.1.2."
    }
  ],
  "expectations": [
    {
      "expectation_id": "E1",
      "statement": "A default human-language declaration is programmatically determinable.",
      "outcome_if_unmet": "failed"
    }
  ],
  "exceptions": [
    "Use only an exception stated in the relevant standard, or an agreed out-of-scope decision. Record the reason and evidence.",
    "A tool limitation, lack of time or unavailable assistive technology is a limitation or incomplete result, not a pass."
  ],
  "outcome_definitions": {
    "passed": "The applicable test target meets every expectation in this rule or procedure.",
    "failed": "The applicable test target does not meet at least one expectation in this rule or procedure.",
    "inapplicable": "The test subject contains no target that matches this rule or procedure's applicability.",
    "cantTell": "The tester cannot fully determine applicability or whether every expectation is met.",
    "untested": "The test subject or target was not evaluated using this rule or procedure."
  },
  "examples": [
    {
      "example_id": "A11Y-WCAG-041-EX-PASSED",
      "outcome": "passed",
      "scenario": "Representative calibration example, not client evidence. Procedure: WCAG 3.1.1 Language of Page. Target: The selected page or routed view. Action: Record the URL, route and build. Read representative headings, controls and body content; exclude proper names. Record the language used by the largest proportion of content, or the first language encountered when proportions are equal. Evidence: EXE-REF-001 note containing route, build, representative text samples, expected BCP 47 tag and rationale. Observed result: The expected default human language and reasoning are recorded."
    },
    {
      "example_id": "A11Y-WCAG-041-EX-FAILED",
      "outcome": "failed",
      "scenario": "Representative calibration example, not client evidence. Procedure: WCAG 3.1.1 Language of Page. Target: The selected page or routed view. The tester completes the recorded action, but the captured evidence does not demonstrate: The expected default human language and reasoning are recorded. The failed target and state remain separate from unexecuted targets."
    },
    {
      "example_id": "A11Y-WCAG-041-EX-INAPPLICABLE",
      "outcome": "inapplicable",
      "scenario": "Representative scope example, not client evidence. No web page exists in the evaluated subject. A selected web page is not inapplicable merely because it has little text. The completed inventory is retained as the basis for the inapplicable outcome."
    },
    {
      "example_id": "A11Y-WCAG-041-EX-CANTTELL",
      "outcome": "cantTell",
      "scenario": "Representative unresolved example, not client evidence. The tester cannot identify the predominant human language or validate an unusual language tag after reasonable escalation. The record identifies the conflicting evidence and the expertise or comparison needed to resolve it."
    },
    {
      "example_id": "A11Y-WCAG-041-EX-UNTESTED",
      "outcome": "untested",
      "scenario": "Representative execution-gap example, not client evidence. The target is applicable, but a required state, environment, action or evidence item was not completed. The missing action, state or environment remains open and is not converted to a pass."
    }
  ],
  "sampling_rule": "Test every in-scope instance when practical. For a large population, document a sample that includes each template, content or control type, meaningful state and high-risk task.",
  "complete_process_requirement": "If this check is part of a user journey, test the selected journey from start to finish, including relevant errors and recovery. Record any path that was not tested.",
  "pass_criteria": "The selected web page exposes a valid programmatic declaration that accurately identifies its default human language.",
  "fail_criteria": "The page has no programmatically determinable default language, the declaration is invalid, or it identifies a different language from the page's default human language.",
  "evidence_requirements": [
    "Page URL or route, content version and selected state.",
    "Representative content samples, predominant-language decision and rationale.",
    "Root language declaration, its DOM or document location and tag-validation result.",
    "Optional exact screen-reader speech, versions and language-switching settings."
  ],
  "official_source_ids": [
    "W3C-WCAG22",
    "W3C-WCAG22-QUICKREF",
    "W3C-ACT-RULES",
    "W3C-ACT-RULES-FORMAT",
    "W3C-WCAG22-TECHNIQUES",
    "W3C-LANGUAGE-OF-PAGE"
  ],
  "act_rule_mapping": {
    "format_alignment": "This is a project-authored manual procedure, not a W3C Approved ACT Rule.",
    "approved_rule_ids": [
      "b5c3f8"
    ],
    "approved_rules": [
      {
        "rule_id": "b5c3f8",
        "title": "HTML page has lang attribute",
        "scope_note": "Checks for a language attribute on applicable HTML pages. The validity and accuracy of the declared language need separate review.",
        "applicability_summary": "Applicable HTML pages.",
        "expectation_summary": "The root html element has a non-empty lang attribute.",
        "last_verified": "2026-08-04",
        "wcag_criterion": "3.1.1",
        "status": "approved",
        "url": "https://www.w3.org/WAI/standards-guidelines/act/rules/b5c3f8/"
      }
    ],
    "mapping_status": "Supporting ACT rules identified",
    "registry_reviewed_at": "2026-08-27",
    "registry_source_id": "W3C-ACT-RULES",
    "mapping_rationale": "An ACT result can support only the part of this procedure covered by that rule. It does not replace the remaining manual or assistive-technology checks."
  },
  "technique_traceability": [
    {
      "wcag_criterion": "3.1.1",
      "understanding_url": "https://www.w3.org/WAI/WCAG22/Understanding/language-of-page.html",
      "techniques_registry_source_id": "W3C-WCAG22-TECHNIQUES",
      "technique_ids_applied": [],
      "failure_ids_applied": [],
      "selection_status": "Select relevant techniques during the test",
      "selection_note": "Techniques are examples, not extra requirements. Record any technique or common failure used, but decide the result against the success criterion."
    }
  ],
  "platform_ids": [
    "web-desktop-cross-browser"
  ],
  "review_requirement": "A qualified accessibility reviewer must confirm the scope, evidence and result before it is reported as final.",
  "known_issues": [
    "Check relevant browser, tool or assistive-technology release notes before assigning unexpected behaviour to the product.",
    "If responsibility is unclear, record the reproducible behaviour and use cannot tell until it is resolved."
  ],
  "change_log": [
    {
      "version": "2026.08.27-rc.9",
      "change": "Reworked for plain language, case-focused steps, scoped evidence and transparent draft review status."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Individually authored reference-procedure content prepared for competent review and execution."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Removed administrative filler steps, added contextual risk and result boundaries, and prepared the concise worksheet flow for internal consistency review."
    }
  ],
  "tags": [
    "sc-3.1.1",
    "wcag-2.2",
    "wcag-a",
    "wcag_manual"
  ],
  "status": "draft",
  "authoring_readiness": "content_complete",
  "short_title": "Declare the page's default language",
  "catalogue_version": "2026.08.27-rc.9",
  "identity": {
    "stable_case_id": "A11Y-WCAG-041",
    "procedure_title": "WCAG 3.1.1 Language of Page",
    "short_user_centred_title": "Declare the page's default language",
    "procedure_version": "2026.08.27-rc.9",
    "catalogue_version": "2026.08.27-rc.9",
    "status": "draft",
    "category": "wcag_manual",
    "procedure_type": "atomic",
    "execution_class": "manual_with_automation_support",
    "intended_tester_expertise": "Accessibility tester",
    "effort_model": {
      "model": "component_effort_v2",
      "small_scope_minutes": {
        "minimum": 33,
        "maximum": 48
      },
      "warning": "Add a new per-target execution and evidence allowance for each additional target class or state that could produce a different result. Add setup time for each distinct environment.",
      "calculation_guidance": "Add the recorded setup, per-target execution, evidence and technical-review components; then apply the stated variation rule.",
      "unit": "minutes",
      "setup": {
        "typical": 10,
        "includes": "Confirm scope and target, prepare safe data, establish the required state and record the tool or environment version."
      },
      "per_target_execution": {
        "typical": 8,
        "includes": "Perform the procedure once for one target in its selected states; this excludes remediation and retesting."
      },
      "evidence_capture": {
        "typical": 7,
        "includes": "Capture, name and cross-reference the minimum reproducible evidence while removing unnecessary personal or secret data."
      },
      "technical_review": {
        "typical": 8,
        "includes": "Check applicability, observations, outcome logic, evidence sufficiency and report wording before issue publication."
      },
      "typical_total_range": {
        "minimum": 33,
        "maximum": 48
      },
      "assumptions": "one page or component state; add another execution block for each materially different template or state",
      "variation": "Add a new per-target execution and evidence allowance for each additional target class or state that could produce a different result. Add setup time for each distinct environment.",
      "excludes": "Client coordination, inaccessible-environment recovery, recruitment, legal review, remediation implementation and waiting time unless the procedure states otherwise."
    },
    "related_procedures": [],
    "replaces": [],
    "replaced_by": []
  },
  "purpose_and_user_impact": {
    "barrier_detected": "Detect pages whose default human language is missing, invalid or does not match the page's predominant language.",
    "people_likely_affected": [
      "People using screen readers or other language-aware assistive technology.",
      "People who rely on browsers to select fonts, dictionaries or pronunciation rules."
    ],
    "functionality_or_information_at_risk": "Incorrect language processing can make content difficult or impossible to understand and can select the wrong pronunciation or script support.",
    "result_scope": "atomic_conformance_check",
    "claim_boundary": "This WCAG 3.1.1 Language of Page procedure determines whether the recorded targets meet WCAG 3.1.1 on web-desktop-cross-browser in the tested states. A broader conformance decision must also account for every applicable target in the declared scope, complete processes, accessibility-supported use and the other WCAG conformance requirements.",
    "why_it_matters": "Incorrect language processing can make content difficult or impossible to understand and can select the wrong pronunciation or script support. The procedure is necessary because detect pages whose default human language is missing, invalid or does not match the page's predominant language and the result can otherwise conceal a material barrier for the affected people named here."
  },
  "requirement_mappings": [
    {
      "source_id": "W3C-WCAG22",
      "requirement_id": "3.1.1",
      "requirement_level": "A",
      "requirement_type": "conformance",
      "coverage_type": "full",
      "canonical_source": "https://www.w3.org/TR/WCAG22/",
      "source_status": "W3C Recommendation",
      "source_version_or_publication_date": "WCAG 2.2; 12 December 2024 Recommendation",
      "date_verified": "2026-08-27",
      "reviewer_notes": "Primary conformance mapping: the default human language of each web page can be programmatically determined.",
      "limitations": "This procedure addresses the page default only. Language changes within parts are assessed under WCAG 3.1.2.",
      "dependent_fields": [
        "applicability_model",
        "normative_exceptions",
        "steps",
        "decision_logic"
      ],
      "mapping_role": "primary_conformance_mapping"
    },
    {
      "source_id": "W3C-ACT-RULES",
      "requirement_id": "b5c3f8",
      "requirement_level": "informative",
      "requirement_type": "secondary",
      "coverage_type": "partial",
      "canonical_source": "https://www.w3.org/WAI/standards-guidelines/act/rules/b5c3f8/",
      "source_status": "W3C-approved informative ACT rule",
      "source_version_or_publication_date": "Registry status checked 2026-08-27",
      "date_verified": "2026-08-27",
      "reviewer_notes": "Partial supporting check: the approved ACT rule evaluates whether an HTML page has a valid language attribute.",
      "limitations": "A passed ACT outcome does not by itself prove that the declared language accurately represents the page's default human language or satisfy every technology-specific branch.",
      "dependent_fields": [
        "act_rule_mapping",
        "decision_logic"
      ],
      "mapping_role": "partial_supporting_check"
    },
    {
      "source_id": "W3C-WCAG22-QUICKREF",
      "requirement_id": "W3C-WCAG22-QUICKREF",
      "requirement_level": "informative",
      "requirement_type": "advisory",
      "coverage_type": "supporting",
      "canonical_source": "https://www.w3.org/WAI/WCAG22/quickref/",
      "source_status": "living_guidance",
      "source_version_or_publication_date": "WCAG 2.2 supporting guidance",
      "date_verified": "2026-08-27",
      "reviewer_notes": "Supporting source. Procedure-level content review remains recorded separately.",
      "limitations": "This source does not override WCAG or create an additional WCAG conformance requirement.",
      "dependent_fields": [
        "prerequisites",
        "environment",
        "steps"
      ]
    },
    {
      "source_id": "W3C-ACT-RULES-FORMAT",
      "requirement_id": "W3C-ACT-RULES-FORMAT",
      "requirement_level": "informative",
      "requirement_type": "advisory",
      "coverage_type": "supporting",
      "canonical_source": "https://www.w3.org/TR/act-rules-format/",
      "source_status": "recommendation",
      "source_version_or_publication_date": "ACT Rules Format 1.1; W3C Recommendation 2026",
      "date_verified": "2026-08-27",
      "reviewer_notes": "Supporting source. Procedure-level content review remains recorded separately.",
      "limitations": "This source does not override WCAG or create an additional WCAG conformance requirement.",
      "dependent_fields": [
        "prerequisites",
        "environment",
        "steps"
      ]
    },
    {
      "source_id": "W3C-WCAG22-TECHNIQUES",
      "requirement_id": "W3C-WCAG22-TECHNIQUES",
      "requirement_level": "informative",
      "requirement_type": "advisory",
      "coverage_type": "supporting",
      "canonical_source": "https://www.w3.org/WAI/WCAG22/Techniques/",
      "source_status": "living_guidance",
      "source_version_or_publication_date": "Techniques for WCAG 2.2",
      "date_verified": "2026-08-27",
      "reviewer_notes": "Supporting source. Procedure-level content review remains recorded separately.",
      "limitations": "This source does not override WCAG or create an additional WCAG conformance requirement.",
      "dependent_fields": [
        "prerequisites",
        "environment",
        "steps"
      ]
    },
    {
      "source_id": "W3C-LANGUAGE-OF-PAGE",
      "requirement_id": "Understanding 3.1.1",
      "requirement_level": "informative",
      "requirement_type": "advisory",
      "coverage_type": "supporting",
      "canonical_source": "https://www.w3.org/WAI/WCAG22/Understanding/language-of-page.html",
      "source_status": "living_guidance",
      "source_version_or_publication_date": "Understanding WCAG 2.2 Success Criterion 3.1.1; checked 4 August 2026",
      "date_verified": "2026-08-27",
      "reviewer_notes": "Criterion-specific informative interpretation used for applicability, exceptions and decision guidance.",
      "limitations": "Understanding guidance is informative and does not add a WCAG conformance requirement.",
      "dependent_fields": [
        "purpose_and_user_impact",
        "applicability_model",
        "normative_exceptions",
        "steps",
        "decision_logic",
        "calibration_examples"
      ]
    }
  ],
  "applicability_model": {
    "test_subject": "Each in-scope web page, including distinct routed views that meet WCAG's definition of a web page.",
    "test_targets": [
      "The programmatically determinable default language of each selected web page."
    ],
    "objective_questions": [
      "Is the target a web page in the evaluated scope?",
      "What human language is used by the largest proportion of its non-proper-name content?",
      "If languages are equally used, which is encountered first?"
    ],
    "subjective_judgements": [
      "Determine the predominant human language from the page content; record the language samples and rationale when the answer is not obvious."
    ],
    "inapplicability_conditions": [
      "The evaluated subject contains no web page. A selected web page itself is not inapplicable merely because it contains little or no text."
    ],
    "scope_exclusions": [
      "Language changes within passages or interface parts belong to WCAG 3.1.2 and are not decided by this procedure."
    ],
    "required_states_and_variations": [
      "Test each distinct page or routed view in the frozen sample, including localised versions.",
      "Recheck after client-side routing if the page language or predominant content changes."
    ],
    "complete_process_dependencies": "Page-language results may feed a complete-process assessment, but each distinct page retains its own target result.",
    "conforming_alternate_version_considerations": "Rely on a conforming alternate version only after the WCAG definition and all conformance conditions are verified for both versions and the mechanism used to reach the alternate."
  },
  "normative_exceptions": [],
  "normative_exceptions_absent_reason": "WCAG 2.2 Success Criterion 3.1.1 states no exception to programmatic determination of a web page's default human language.",
  "environment": {
    "required_tester_expertise": "Accessibility tester",
    "required_platforms": [
      "web-desktop-cross-browser"
    ],
    "minimum_environment_fields": [
      "operating_system",
      "operating_system_version",
      "browser",
      "browser_version",
      "viewport_css_pixels",
      "input_method"
    ],
    "product_and_content_version_required": true,
    "viewport_and_orientation_required": true,
    "input_mode_required": true,
    "relevant_settings": [],
    "known_platform_limitations": [
      "Check relevant browser, tool or assistive-technology release notes before assigning unexpected behaviour to the product.",
      "If responsibility is unclear, record the reproducible behaviour and use cannot tell until it is resolved."
    ],
    "clean_state_requirements": [
      "Start from a documented clean or known state and record pre-existing preferences, extensions and cached data that can change the result."
    ],
    "test_data_and_privacy_constraints": [
      "Use authorised synthetic or controlled data.",
      "Do not record credentials, secrets or unnecessary personal data."
    ],
    "coverage_boundary": [
      "The result covers only the browsers, platforms, readers and assistive technologies that were actually tested.",
      "Do not apply a result from one technology combination to an untested combination or to every user."
    ]
  },
  "decision_logic": {
    "target_passed": "The selected web page exposes a valid programmatic declaration that accurately identifies its default human language.",
    "target_failed": "The page has no programmatically determinable default language, the declaration is invalid, or it identifies a different language from the page's default human language.",
    "target_inapplicable": "No web page exists in the evaluated subject. A selected web page is not inapplicable merely because it has little text.",
    "target_cant_tell": "The tester cannot identify the predominant human language or validate an unusual language tag after reasonable escalation.",
    "target_untested": "The target is applicable, but a required state, environment, action or evidence item was not completed.",
    "aggregation": "Preserve one outcome per selected page. Any failed page prevents a passed aggregate; cantTell and untested remain unresolved.",
    "wcag_requirement_decision": "A satisfied WCAG 3.1.1 decision requires all in-scope pages to meet the criterion and all WCAG conformance requirements to be handled. When no web pages exist, criterion handling occurs at report scope rather than by inventing a passed rule target.",
    "conforming_alternate_version_effect": "Apply a conforming alternate version only after its WCAG definition and every conformance condition have been verified and recorded; otherwise it does not change the decision.",
    "passed_automation_follow_up": "A passed ACT language-attribute rule still requires the manual accuracy comparison and any non-HTML technology checks. A passed automated or ACT result must never set the criterion to satisfied automatically.",
    "platform_responsibility": "When responsibility is unclear, preserve the reproducible behaviour and environment evidence and use cantTell until a qualified reviewer resolves it.",
    "claim_readiness": "A complete result may become ready_for_review. Schema validity, a passed target or a tool result cannot make it ready_for_scoped_claim without the independent evidence and governance gates."
  },
  "evidence_specification": [
    {
      "evidence_id": "EV1",
      "method": "scope_record",
      "record": "Page URL or route, content version and selected state.",
      "review_purpose": "Identify the exact page assessed.",
      "privacy_and_security": "Use a redacted extract or evidence reference. Do not include credentials, secrets or unnecessary personal data.",
      "required_for_formal_result": true
    },
    {
      "evidence_id": "EV2",
      "method": "language_judgement",
      "record": "Representative content samples, predominant-language decision and rationale.",
      "review_purpose": "Review whether the expected default language was determined defensibly.",
      "privacy_and_security": "Use a redacted extract or evidence reference. Do not include credentials, secrets or unnecessary personal data.",
      "required_for_formal_result": true
    },
    {
      "evidence_id": "EV3",
      "method": "programmatic_structure",
      "record": "Root language declaration, its DOM or document location and tag-validation result.",
      "review_purpose": "Reproduce the programmatic-determination and validity check.",
      "privacy_and_security": "Use a redacted extract or evidence reference. Do not include credentials, secrets or unnecessary personal data.",
      "required_for_formal_result": true
    },
    {
      "evidence_id": "EV4",
      "method": "supporting_assistive_technology",
      "record": "Optional exact screen-reader speech, versions and language-switching settings.",
      "review_purpose": "Review interoperability without confusing it with the normative condition.",
      "privacy_and_security": "Use a redacted extract or evidence reference. Do not include credentials, secrets or unnecessary personal data.",
      "required_for_formal_result": true
    }
  ],
  "calibration_examples": [
    {
      "example_id": "A11Y-WCAG-041-EX-PASSED",
      "outcome": "passed",
      "scenario": "An English page has `<html lang=\"en\">`; representative content confirms English is predominant.",
      "explanation": "The declaration is programmatically available, valid and accurate.",
      "fixture_id": "language-page-pass",
      "fixture_version": "1.0.0",
      "machine_testable": true
    },
    {
      "example_id": "A11Y-WCAG-041-EX-FAILED",
      "outcome": "failed",
      "scenario": "A French page has `<html lang=\"en\">`.",
      "explanation": "The declaration is present and valid but identifies the wrong default human language.",
      "fixture_id": "language-page-wrong",
      "fixture_version": "1.0.0",
      "machine_testable": true
    },
    {
      "example_id": "A11Y-WCAG-041-EX-INAPPLICABLE",
      "outcome": "inapplicable",
      "scenario": "The evaluated subject is an audio file and contains no web page.",
      "explanation": "No target matches the rule's web-page applicability.",
      "fixture_id": "",
      "fixture_version": "",
      "machine_testable": false
    },
    {
      "example_id": "A11Y-WCAG-041-EX-CANTTELL",
      "outcome": "cantTell",
      "scenario": "The page uses an unfamiliar mixed language and qualified language support is unavailable.",
      "explanation": "The predominant language cannot be determined defensibly; this is not a pass.",
      "fixture_id": "",
      "fixture_version": "",
      "machine_testable": false
    },
    {
      "example_id": "A11Y-WCAG-041-EX-UNTESTED",
      "outcome": "untested",
      "scenario": "A selected localised route was inventoried but its root declaration was not inspected.",
      "explanation": "An applicable selected target remains untested.",
      "fixture_id": "",
      "fixture_version": "",
      "machine_testable": false
    }
  ],
  "review_record": {
    "author": "",
    "method_reviewer": "",
    "independent_standards_reviewer": "",
    "accessibility_ui_reviewer": "",
    "author_date": "",
    "method_review_date": "",
    "standards_review_date": "",
    "ui_review_date": "",
    "source_versions_reviewed": [],
    "exceptions_reviewed": false,
    "known_limitations": [
      "This is a source-checked reference implementation subject to independent method and standards agent verification; formal approval remains separate."
    ],
    "open_issues": [
      "Independent method and standards agent-verification passes must confirm executability, language judgement guidance and the ACT mapping; unresolved material findings block distribution eligibility."
    ],
    "decision": "pending",
    "next_review_date": "",
    "status_transition_reason": "",
    "release_gate_id": "",
    "release_gate_completed_at": "",
    "approval_authority": "",
    "approval_date": ""
  },
  "privacy_and_security": {
    "browser_storage": "Worksheet data is stored only in this browser's local storage until the user exports or clears it.",
    "network_transmission": "The static library does not upload worksheet data.",
    "data_minimisation": "Record only evidence necessary to reproduce and review the decision.",
    "redaction": "Remove credentials, secrets and unnecessary personal or participant data before export or sharing.",
    "retention_and_deletion": "Apply the engagement retention schedule and clear local browser data when it is no longer required."
  },
  "version_history": [
    {
      "version": "2026.08.27-rc.9",
      "change": "Reworked for plain language, case-focused steps, scoped evidence and transparent draft review status."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Migrated to professional catalogue schema v3 with separated outcomes, structured authority, applicability, evidence, decision and review records."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Individually prepared WCAG 3.1.1 procedure content mapped to current normative and informative sources and checked for internal consistency; competent review, real execution and formal claim authority remain separate."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Replaced migrated boilerplate with a case-specific reference implementation and completed independent agent content verification."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Rewritten as an atomic professional-delivery flagship with component effort guidance and a complete representative worked example."
    },
    {
      "version": "2026.08.27-rc.9",
      "change": "Procedure guidance and presentation simplified without changing draft governance status."
    }
  ],
  "migration": {
    "from_schema": "accessibility-test-catalog.v2",
    "from_procedure_version": "2026.08.04.1",
    "migrated_at": "2026-08-27",
    "content_review_state": "flagship_operational_rewrite_agent_verified",
    "stable_identifier_preserved": true,
    "legacy_url_preserved": true,
    "delivery_model": "professional_delivery_v2",
    "agent_content_validation": {
      "status": "complete",
      "method": "case_specific_semantic_and_operational_checks_v1",
      "checked_fields": [
        "target",
        "state",
        "tool",
        "action",
        "expected_observation",
        "failure_observation",
        "evidence",
        "outcome_rules",
        "claim_boundary",
        "compact_examples"
      ],
      "human_approval_effect": "none"
    }
  },
  "test_type": "conformance",
  "library_layer": "atomic",
  "decision_branches": [],
  "supporting_guidance": [
    "Screen-reader pronunciation is supporting accessibility evidence, not an additional normative condition."
  ],
  "effort_guidance": {
    "unit": "minutes",
    "setup": {
      "typical": 10,
      "includes": "Confirm scope and target, prepare safe data, establish the required state and record the tool or environment version."
    },
    "per_target_execution": {
      "typical": 8,
      "includes": "Perform the procedure once for one target in its selected states; this excludes remediation and retesting."
    },
    "evidence_capture": {
      "typical": 7,
      "includes": "Capture, name and cross-reference the minimum reproducible evidence while removing unnecessary personal or secret data."
    },
    "technical_review": {
      "typical": 8,
      "includes": "Check applicability, observations, outcome logic, evidence sufficiency and report wording before issue publication."
    },
    "typical_total_range": {
      "minimum": 33,
      "maximum": 48
    },
    "assumptions": "one page or component state; add another execution block for each materially different template or state",
    "variation": "Add a new per-target execution and evidence allowance for each additional target class or state that could produce a different result. Add setup time for each distinct environment.",
    "excludes": "Client coordination, inaccessible-environment recovery, recruitment, legal review, remediation implementation and waiting time unless the procedure states otherwise."
  },
  "worked_examples": [
    {
      "example_id": "A11Y-WCAG-041-WORKED-001",
      "example_kind": "representative_synthetic_example",
      "context": "Synthetic Civic Benefits Portal application-status page, English locale, build CBP-2026.08.1.",
      "inspected": "Visible headings and controls plus the rendered root `html` element after client-side routing.",
      "observed_output": "English was predominant, but the root declared `lang=fr` after navigation from the French locale.",
      "evidence_captured": [
        "EVD-REF-001 DOM extract with route/build",
        "EVD-REF-002 representative English content samples",
        "EVD-REF-003 valid-tag check for `fr`"
      ],
      "tester_reasoning": "The tag was present and valid, but accuracy is required; a valid French declaration does not identify this English page.",
      "decision": "failed",
      "completed_finding": {
        "finding_id": "FND-REF-001",
        "title": "Application-status route retains the French page language",
        "severity": "high",
        "user_impact": "English content may be pronounced with French rules by language-aware screen readers.",
        "evidence_refs": [
          "EVD-REF-001",
          "EVD-REF-002",
          "EVD-REF-003"
        ]
      },
      "remediation_advice": "Update the route-level metadata so the root declaration becomes `en` before the English content is announced; add a route-change regression test.",
      "reviewer_feedback": "Reviewer corrected the draft from 'missing language' to 'inaccurate retained language' and removed a claim about every screen reader.",
      "final_client_report_wording": "The English application-status route declares French as its default language after a locale change. This can cause language-aware assistive technology to use inappropriate pronunciation rules. Set the rendered page root to `lang=\"en\"` for this route and verify language metadata on each locale transition.",
      "retest_outcome": "RT-REF-001: representative fixed build changed the root value to `en`; DOM and content comparison passed for the sampled route.",
      "claim_boundary": "This is a representative, synthetic worked example for training and calibration. It is not evidence from a client product, participant or real assistive-technology execution."
    }
  ]
}
