Accessible and Cognitively Usable Writing Rules
Accessible and Cognitively Usable Writing Rules
The 15 rules in this file
- ACC-001 Use clear words for the actual audience IF a simpler word is equally accurate, respectful, and familiar, THEN use it ELSE retain the necessary precise term with support. Context default
- ACC-002 Simple tense and voice when possible IF present active construction expresses the real time and actor, THEN prefer it ELSE use the tense and voice accuracy requires. Context default
- ACC-003 No nested double negatives IF a double negative or negative inside another condition obscures polarity, THEN rewrite with one explicit positive or negative operation ELSE retain a necessary legal distinction with explanation. Hard constraint
- ACC-004 Separate each instruction IF multiple actions appear in one block and can be completed separately, THEN make each a separate step ELSE retain a single compound action. Context default
- ACC-005 Explain implied meaning when consequential IF humor, irony, metaphor, convention, or context carries a consequential instruction or conclusion, THEN state the literal meaning too ELSE retain. Hard constraint
- ACC-006 Headings and labels are unique and descriptive IF repeated or vague headings prevent out-of-context identification, THEN rename them by topic or task ELSE retain. Hard constraint
- ACC-007 Text alternatives convey function or information IF meaningful non-text content appears, THEN provide a concise equivalent of its purpose and relevant information; IF decorative, mark it ignorable ELSE block release. Hard constraint
- ACC-008 Do not encode meaning by color alone IF color distinguishes status, category, instruction, or error, THEN add text, shape, icon, pattern, or position with an accessible label ELSE retain. Hard constraint
- ACC-009 Avoid directional text without structural anchor IF instructions say above, below, left, right, or color-only location and layout can reflow, THEN name the control, section, or landmark ELSE retain stable spatial instruction. Hard constraint
- ACC-010 Error message states problem and recovery IF an error message appears, THEN state what happened, what remains safe or changed, and the next corrective action in non-blaming language ELSE retain. Hard constraint
- ACC-011 Respect user dignity IF language stereotypes, infantilizes, blames, or defines people solely by a condition without contextual reason, THEN replace it with accurate respectful language ELSE retain self-identified terms. Hard constraint
- ACC-012 Support orientation in long processes IF a process has many steps, branches, or waits, THEN show current position, total or remaining stages, completion state, and safe exit ELSE retain. Context default
- ACC-013 Allow enough reading and response time IF content disappears or a task times out, THEN let users extend, pause, resume, or retrieve it unless a documented safety or real-time exception applies ELSE retain. Hard constraint
- ACC-014 Design for screen-reader linearization IF visual layout changes reading order or relationships, THEN define a semantic linear order that preserves meaning ELSE retain. Hard constraint
- ACC-015 Test with representative disabled users IF content is consequential or broadly used, THEN combine standards checks with representative user testing and track barriers ELSE perform proportionate review. Context default
The file
Served verbatim at /v1/files/accessibility-rules.
{
"title": "Accessible and Cognitively Usable Writing Rules",
"version": "1.0.0",
"rule_count": 15,
"rules": [
{
"id": "ACC-001",
"name": "Use clear words for the actual audience",
"domain": "accessibility",
"layer": "word",
"strength": "context_default",
"human_logic": "IF a simpler word is equally accurate, respectful, and familiar, THEN use it ELSE retain the necessary precise term with support.",
"when": {
"path": "word.simple_equivalent.equal_accuracy",
"operator": "eq",
"value": true
},
"then": [
{
"action": "replace",
"target": "word",
"with": "simple_equivalent"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Plain language reduces preventable barriers without removing necessary ideas.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-002",
"WEB-006",
"WEB-009"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-002",
"name": "Simple tense and voice when possible",
"domain": "accessibility",
"layer": "sentence",
"strength": "context_default",
"human_logic": "IF present active construction expresses the real time and actor, THEN prefer it ELSE use the tense and voice accuracy requires.",
"when": {
"all": [
{
"path": "sentence.present_active_possible",
"operator": "eq",
"value": true
},
{
"path": "sentence.present_active_preserves_accuracy",
"operator": "eq",
"value": true
}
]
},
"then": [
{
"action": "convert",
"target": "sentence",
"tense": "present",
"voice": "active"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Simple tense and visible agency often improve comprehension.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-006"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-003",
"name": "No nested double negatives",
"domain": "accessibility",
"layer": "sentence",
"strength": "hard_constraint",
"human_logic": "IF a double negative or negative inside another condition obscures polarity, THEN rewrite with one explicit positive or negative operation ELSE retain a necessary legal distinction with explanation.",
"when": {
"path": "sentence.polarity_nesting_depth",
"operator": "gt",
"value": 1
},
"then": [
{
"action": "rewrite",
"target": "single_explicit_polarity"
},
{
"action": "explain",
"target": "sentence",
"when": "legal_distinction_required"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Polarity nesting raises the chance of reversing the intended action.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-006"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-004",
"name": "Separate each instruction",
"domain": "accessibility",
"layer": "section",
"strength": "context_default",
"human_logic": "IF multiple actions appear in one block and can be completed separately, THEN make each a separate step ELSE retain a single compound action.",
"when": {
"all": [
{
"path": "section.instruction_action_count",
"operator": "gt",
"value": 1
},
{
"path": "section.actions_separately_completable",
"operator": "eq",
"value": true
}
]
},
"then": [
{
"action": "split",
"target": "section.instructions",
"one": "principal_action_per_step"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Separated actions support focus, memory, and recovery.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-006",
"WEB-004"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-005",
"name": "Explain implied meaning when consequential",
"domain": "accessibility",
"layer": "paragraph",
"strength": "hard_constraint",
"human_logic": "IF humor, irony, metaphor, convention, or context carries a consequential instruction or conclusion, THEN state the literal meaning too ELSE retain.",
"when": {
"all": [
{
"path": "paragraph.implied_meaning_device",
"operator": "in",
"value": [
"humor",
"irony",
"metaphor",
"convention",
"context"
]
},
{
"path": "paragraph.implied_meaning_consequential",
"operator": "eq",
"value": true
}
]
},
"then": [
{
"action": "insert",
"target": "paragraph.literal_meaning"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Important meaning should not depend entirely on inference.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-006"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-006",
"name": "Headings and labels are unique and descriptive",
"domain": "accessibility",
"layer": "document",
"strength": "hard_constraint",
"human_logic": "IF repeated or vague headings prevent out-of-context identification, THEN rename them by topic or task ELSE retain.",
"when": {
"any": [
{
"path": "document.duplicate_heading_count",
"operator": "gt",
"value": 0
},
{
"path": "document.vague_heading_count",
"operator": "gt",
"value": 0
}
]
},
"then": [
{
"action": "rename",
"target": "document.headings",
"pattern": "specific_topic_or_task"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Screen-reader and scanning navigation often presents headings out of surrounding context.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-005",
"WEB-007"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-007",
"name": "Text alternatives convey function or information",
"domain": "accessibility",
"layer": "signal",
"strength": "hard_constraint",
"human_logic": "IF meaningful non-text content appears, THEN provide a concise equivalent of its purpose and relevant information; IF decorative, mark it ignorable ELSE block release.",
"when": {
"path": "content.non_text.exists",
"operator": "eq",
"value": true
},
"then": [
{
"action": "classify",
"target": "content.non_text",
"types": [
"meaningful",
"functional",
"decorative",
"complex"
]
},
{
"action": "provide",
"target": "content.non_text.text_alternative",
"when": "meaningful_or_functional"
},
{
"action": "mark",
"target": "content.non_text",
"when": "decorative",
"value": "ignored_by_assistive_technology"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Equivalent text lets the information or function survive a change of sensory mode.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-005",
"WEB-007"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-008",
"name": "Do not encode meaning by color alone",
"domain": "accessibility",
"layer": "signal",
"strength": "hard_constraint",
"human_logic": "IF color distinguishes status, category, instruction, or error, THEN add text, shape, icon, pattern, or position with an accessible label ELSE retain.",
"when": {
"path": "content.meaning_by_color_only",
"operator": "eq",
"value": true
},
"then": [
{
"action": "add",
"target": "content.redundant_cue",
"options": [
"text",
"shape",
"icon",
"pattern",
"position"
],
"require": "accessible_label"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Readers may not perceive or distinguish the color cue.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-007"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-009",
"name": "Avoid directional text without structural anchor",
"domain": "accessibility",
"layer": "sentence",
"strength": "hard_constraint",
"human_logic": "IF instructions say above, below, left, right, or color-only location and layout can reflow, THEN name the control, section, or landmark ELSE retain stable spatial instruction.",
"when": {
"all": [
{
"path": "sentence.spatial_reference",
"operator": "in",
"value": [
"above",
"below",
"left",
"right",
"color_only"
]
},
{
"path": "interface.layout_can_reflow",
"operator": "eq",
"value": true
}
]
},
"then": [
{
"action": "replace",
"target": "sentence.spatial_reference",
"with": "named_control_section_or_landmark"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Responsive layouts and assistive presentation can change spatial relationships.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-005",
"WEB-007"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-010",
"name": "Error message states problem and recovery",
"domain": "accessibility",
"layer": "section",
"strength": "hard_constraint",
"human_logic": "IF an error message appears, THEN state what happened, what remains safe or changed, and the next corrective action in non-blaming language ELSE retain.",
"when": {
"path": "section.type",
"operator": "eq",
"value": "error_message"
},
"then": [
{
"action": "complete",
"target": "section.error_message",
"fields": [
"problem",
"state_or_consequence",
"corrective_action"
],
"tone": "non_blame"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "An error is useful only when the reader can recover.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-004",
"WEB-006"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-011",
"name": "Respect user dignity",
"domain": "accessibility",
"layer": "document",
"strength": "hard_constraint",
"human_logic": "IF language stereotypes, infantilizes, blames, or defines people solely by a condition without contextual reason, THEN replace it with accurate respectful language ELSE retain self-identified terms.",
"when": {
"path": "document.dignity_risk",
"operator": "eq",
"value": true
},
"then": [
{
"action": "replace",
"target": "document.flagged_language",
"with": "accurate_respectful_contextual_language"
},
{
"action": "defer_to",
"target": "person_or_community_self_identification",
"when": "known"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Accessibility includes social and cognitive safety, not only mechanical readability.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-003",
"WEB-004",
"WEB-005"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-012",
"name": "Support orientation in long processes",
"domain": "accessibility",
"layer": "section",
"strength": "context_default",
"human_logic": "IF a process has many steps, branches, or waits, THEN show current position, total or remaining stages, completion state, and safe exit ELSE retain.",
"when": {
"any": [
{
"path": "process.step_count",
"operator": "gt",
"value": 7
},
{
"path": "process.branch_count",
"operator": "gt",
"value": 2
},
{
"path": "process.includes_wait",
"operator": "eq",
"value": true
}
]
},
"then": [
{
"action": "insert",
"target": "process.orientation",
"fields": [
"current_position",
"stages",
"completion_state",
"safe_exit"
]
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Orientation reduces memory demand and uncertainty.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-006",
"WEB-007"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-013",
"name": "Allow enough reading and response time",
"domain": "accessibility",
"layer": "document",
"strength": "hard_constraint",
"human_logic": "IF content disappears or a task times out, THEN let users extend, pause, resume, or retrieve it unless a documented safety or real-time exception applies ELSE retain.",
"when": {
"path": "experience.time_limit.exists",
"operator": "eq",
"value": true
},
"then": [
{
"action": "provide",
"target": "experience.time_control",
"options": [
"extend",
"pause",
"resume",
"retrieve"
]
},
{
"action": "document",
"target": "experience.exception",
"when": "essential_time_limit"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "People read, understand, and respond at different speeds.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-007"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-014",
"name": "Design for screen-reader linearization",
"domain": "accessibility",
"layer": "document",
"strength": "hard_constraint",
"human_logic": "IF visual layout changes reading order or relationships, THEN define a semantic linear order that preserves meaning ELSE retain.",
"when": {
"path": "document.visual_order_differs_from_semantic_order",
"operator": "eq",
"value": true
},
"then": [
{
"action": "reorder",
"target": "document.semantic_sequence",
"preserve": "meaning_and_relationships"
},
{
"action": "test",
"target": "document",
"method": "screen_reader_linearization"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "A visual grid becomes a sequence when read nonvisually.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-005",
"WEB-007"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
},
{
"id": "ACC-015",
"name": "Test with representative disabled users",
"domain": "accessibility",
"layer": "content_system",
"strength": "context_default",
"human_logic": "IF content is consequential or broadly used, THEN combine standards checks with representative user testing and track barriers ELSE perform proportionate review.",
"when": {
"any": [
{
"path": "context.stakes",
"operator": "in",
"value": [
"high",
"safety_critical"
]
},
{
"path": "document.audience_size",
"operator": "eq",
"value": "broad"
}
]
},
"then": [
{
"action": "test_with_reader",
"target": "content",
"include": "representative_disabled_users"
},
{
"action": "track",
"target": "barriers_and_fixes"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Conformance cannot predict every real interaction or support need.",
"diagnostics": [],
"examples": {},
"source_ids": [
"WEB-005",
"WEB-006",
"WEB-007"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
}
]
}