Bow Tie Kreative Writing System

Source files

Paragraph, Section, and Document Architecture

Paragraph, Section, and Document Architecture

10-paragraph-document-rules.json · version 1.0.0

The 20 rules in this file

  1. STR-001 One controlling move per paragraph IF a paragraph performs more than one unrelated rhetorical move, THEN split it at the move boundary ELSE retain. Context default
  2. STR-002 Expose the paragraph point IF the paragraph’s controlling point is absent or recoverable only after rereading, THEN state or move it to a strategic position ELSE retain an intentional delayed reveal. Heuristic
  3. STR-003 Support consequential claims IF a paragraph makes a consequential factual claim, THEN provide evidence, cite it, qualify it, or remove the claim ELSE retain. Hard constraint
  4. STR-004 Keep evidence beside the claim IF evidence is separated from the claim it supports by unrelated material, THEN move it closer or label the relation ELSE retain. Context default
  5. STR-005 Use transitions that name the relation IF adjacent paragraphs have a meaningful but unstated relation, THEN add a transition that expresses that relation ELSE retain. Context default
  6. STR-006 Delete orphan paragraphs IF a paragraph neither advances the purpose nor supports another necessary move, THEN delete or relocate it ELSE retain. Heuristic
  7. STR-007 Section answers one reader question IF a section answers multiple unrelated reader questions, THEN split and label them ELSE retain. Context default
  8. STR-008 Heading predicts content IF a heading does not accurately predict its section, THEN rename the heading or repair the section ELSE retain. Hard constraint
  9. STR-009 Maintain heading hierarchy IF heading levels skip or reflect visual size rather than logical nesting, THEN repair the hierarchy ELSE retain. Hard constraint
  10. STR-010 Front-load user value IF scanning readers must pass background before reaching the answer, action, or benefit, THEN move the needed content earlier ELSE retain intentional narrative suspense. Heuristic
  11. STR-011 Order by reader task IF the document supports an action, THEN order information by the reader’s task rather than the organization’s internal structure ELSE select chronological, causal, spatial, or importance order. Context default
  12. STR-012 Introduce lists with a clear purpose IF a list appears, THEN make its category or task clear in a heading or lead-in ELSE retain. Context default
  13. STR-013 Use numbered lists for order or rank IF list order changes meaning, sequence, priority, or reference, THEN number the items ELSE use bullets or a table. Context default
  14. STR-014 Keep list items parallel IF list items perform the same role but begin with mismatched grammatical forms, THEN align them ELSE retain justified variation. Context default
  15. STR-015 Choose table only for cross-comparison IF readers must compare repeated fields across three or more items, THEN use a table; IF order or action matters, use a list ELSE use prose. Heuristic
  16. STR-016 Provide a long-document summary IF a document is long, high-stakes, or cognitively dense, THEN add an accurate summary and navigation ELSE retain. Context default
  17. STR-017 End with the intended next state IF the document expects a decision or action, THEN end with the next action, owner, timing, and success condition ELSE close by reinforcing the controlling meaning. Context default
  18. STR-018 Separate reusable topics IF a unit has one subject, independent value, and repeated reuse, THEN make it a standalone topic with links ELSE keep it in context. Heuristic
  19. STR-019 Preserve document promise and payoff IF the opening promises information, transformation, evidence, or entertainment, THEN deliver or revise that promise ELSE retain. Hard constraint
  20. STR-020 Apply progressive disclosure IF novice and expert readers share a document, THEN put the essential path first and route detail to optional layers ELSE match one depth to the known audience. Heuristic

The file

Served verbatim at /v1/files/paragraph-document-rules.

{
  "title": "Paragraph, Section, and Document Architecture",
  "version": "1.0.0",
  "rule_count": 20,
  "rules": [
    {
      "id": "STR-001",
      "name": "One controlling move per paragraph",
      "domain": "structure",
      "layer": "paragraph",
      "strength": "context_default",
      "human_logic": "IF a paragraph performs more than one unrelated rhetorical move, THEN split it at the move boundary ELSE retain.",
      "when": {
        "path": "paragraph.unrelated_rhetorical_move_count",
        "operator": "gt",
        "value": 1
      },
      "then": [
        {
          "action": "split",
          "target": "paragraph",
          "by": "rhetorical_move"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "Paragraph boundaries tell readers when the discourse changes jobs.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "BK-001",
        "BK-013",
        "BK-025"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-002",
      "name": "Expose the paragraph point",
      "domain": "structure",
      "layer": "paragraph",
      "strength": "heuristic",
      "human_logic": "IF the paragraph’s controlling point is absent or recoverable only after rereading, THEN state or move it to a strategic position ELSE retain an intentional delayed reveal.",
      "when": {
        "all": [
          {
            "any": [
              {
                "path": "paragraph.controlling_point",
                "operator": "missing",
                "value": true
              },
              {
                "path": "paragraph.point_requires_reread",
                "operator": "eq",
                "value": true
              }
            ]
          },
          {
            "path": "paragraph.delayed_reveal_intended",
            "operator": "eq",
            "value": false
          }
        ]
      },
      "then": [
        {
          "action": "insert",
          "target": "paragraph.controlling_sentence",
          "position": "first_or_contextually_emphatic"
        },
        {
          "action": "move",
          "target": "paragraph.existing_point",
          "when": "present_but_buried",
          "destination": "strategic_position"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "Readers need a frame for interpreting details.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "BK-008",
        "BK-013",
        "WEB-002"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-003",
      "name": "Support consequential claims",
      "domain": "structure",
      "layer": "paragraph",
      "strength": "hard_constraint",
      "human_logic": "IF a paragraph makes a consequential factual claim, THEN provide evidence, cite it, qualify it, or remove the claim ELSE retain.",
      "when": {
        "all": [
          {
            "path": "paragraph.claim.type",
            "operator": "eq",
            "value": "factual"
          },
          {
            "path": "paragraph.claim.consequence",
            "operator": "in",
            "value": [
              "medium",
              "high"
            ]
          },
          {
            "path": "paragraph.claim.support_status",
            "operator": "neq",
            "value": "adequate"
          }
        ]
      },
      "then": [
        {
          "action": "request_evidence",
          "target": "paragraph.claim"
        },
        {
          "action": "qualify",
          "target": "paragraph.claim",
          "when": "partial_evidence"
        },
        {
          "action": "delete",
          "target": "paragraph.claim",
          "when": "unsupported"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "Claim strength must not exceed available support.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "BK-026",
        "WEB-012",
        "WEB-013"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-004",
      "name": "Keep evidence beside the claim",
      "domain": "structure",
      "layer": "paragraph",
      "strength": "context_default",
      "human_logic": "IF evidence is separated from the claim it supports by unrelated material, THEN move it closer or label the relation ELSE retain.",
      "when": {
        "all": [
          {
            "path": "evidence.supported_claim_id",
            "operator": "exists"
          },
          {
            "path": "evidence.distance_from_claim",
            "operator": "gt",
            "value": 1
          }
        ]
      },
      "then": [
        {
          "action": "move",
          "target": "evidence",
          "destination": "adjacent_to_supported_claim"
        },
        {
          "action": "insert",
          "target": "evidence.relationship_label"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "Proximity reduces the risk that readers attach evidence to the wrong proposition.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "BK-025",
        "BK-026"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-005",
      "name": "Use transitions that name the relation",
      "domain": "structure",
      "layer": "paragraph",
      "strength": "context_default",
      "human_logic": "IF adjacent paragraphs have a meaningful but unstated relation, THEN add a transition that expresses that relation ELSE retain.",
      "when": {
        "all": [
          {
            "path": "paragraph.previous",
            "operator": "exists"
          },
          {
            "path": "paragraph.relation_to_previous",
            "operator": "neq",
            "value": "none"
          },
          {
            "path": "paragraph.relation_signaled",
            "operator": "eq",
            "value": false
          }
        ]
      },
      "then": [
        {
          "action": "insert",
          "target": "paragraph.transition",
          "value_from": "paragraph.relation_to_previous"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "A transition should encode logic, not merely occupy the opening.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "BK-013",
        "BK-025"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-006",
      "name": "Delete orphan paragraphs",
      "domain": "structure",
      "layer": "paragraph",
      "strength": "heuristic",
      "human_logic": "IF a paragraph neither advances the purpose nor supports another necessary move, THEN delete or relocate it ELSE retain.",
      "when": {
        "all": [
          {
            "path": "paragraph.advances_document_purpose",
            "operator": "eq",
            "value": false
          },
          {
            "path": "paragraph.supports_required_move",
            "operator": "eq",
            "value": false
          }
        ]
      },
      "then": [
        {
          "action": "delete",
          "target": "paragraph"
        },
        {
          "action": "move",
          "target": "paragraph",
          "when": "useful_elsewhere",
          "destination": "appropriate_section"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "Interesting material is still noise when it does not serve the document.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "BK-001",
        "BK-011",
        "BK-013"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-007",
      "name": "Section answers one reader question",
      "domain": "structure",
      "layer": "section",
      "strength": "context_default",
      "human_logic": "IF a section answers multiple unrelated reader questions, THEN split and label them ELSE retain.",
      "when": {
        "path": "section.unrelated_reader_question_count",
        "operator": "gt",
        "value": 1
      },
      "then": [
        {
          "action": "split",
          "target": "section",
          "by": "reader_question"
        },
        {
          "action": "generate",
          "target": "section.headings",
          "from": "reader_questions"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "Question-based sections improve findability and reuse.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "WEB-002",
        "WEB-008",
        "BK-024"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-008",
      "name": "Heading predicts content",
      "domain": "structure",
      "layer": "section",
      "strength": "hard_constraint",
      "human_logic": "IF a heading does not accurately predict its section, THEN rename the heading or repair the section ELSE retain.",
      "when": {
        "path": "section.heading_content_match",
        "operator": "eq",
        "value": false
      },
      "then": [
        {
          "action": "align",
          "target": "section.heading",
          "value_from": "section.primary_reader_question"
        },
        {
          "action": "flag",
          "target": "section",
          "message": "Choose whether the heading or content represents intended scope."
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "A misleading heading damages navigation and trust.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "WEB-002",
        "WEB-005",
        "BK-024"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-009",
      "name": "Maintain heading hierarchy",
      "domain": "structure",
      "layer": "document",
      "strength": "hard_constraint",
      "human_logic": "IF heading levels skip or reflect visual size rather than logical nesting, THEN repair the hierarchy ELSE retain.",
      "when": {
        "any": [
          {
            "path": "document.heading_level_skip",
            "operator": "eq",
            "value": true
          },
          {
            "path": "document.headings_used_for_visual_style",
            "operator": "eq",
            "value": true
          }
        ]
      },
      "then": [
        {
          "action": "restructure",
          "target": "document.heading_tree",
          "require": "logical_nesting"
        },
        {
          "action": "separate",
          "target": "presentation_from_semantics"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "Assistive technology and scanning readers depend on a coherent outline.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "WEB-005",
        "WEB-007"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-010",
      "name": "Front-load user value",
      "domain": "structure",
      "layer": "document",
      "strength": "heuristic",
      "human_logic": "IF scanning readers must pass background before reaching the answer, action, or benefit, THEN move the needed content earlier ELSE retain intentional narrative suspense.",
      "when": {
        "all": [
          {
            "path": "context.reading_condition",
            "operator": "in",
            "value": [
              "scanning",
              "mobile",
              "interrupted",
              "under_stress"
            ]
          },
          {
            "path": "document.primary_value_position",
            "operator": "neq",
            "value": "early"
          },
          {
            "path": "context.genre",
            "operator": "neq",
            "value": "narrative"
          }
        ]
      },
      "then": [
        {
          "action": "move",
          "target": "document.primary_value",
          "destination": "early"
        },
        {
          "action": "compress",
          "target": "document.preamble"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "Scanning readers decide quickly whether the content serves their need.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "WEB-002",
        "WEB-004",
        "WEB-005"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-011",
      "name": "Order by reader task",
      "domain": "structure",
      "layer": "document",
      "strength": "context_default",
      "human_logic": "IF the document supports an action, THEN order information by the reader’s task rather than the organization’s internal structure ELSE select chronological, causal, spatial, or importance order.",
      "when": {
        "path": "document.supports_reader_action",
        "operator": "eq",
        "value": true
      },
      "then": [
        {
          "action": "reorder",
          "target": "document.sections",
          "by": "reader_task_sequence"
        }
      ],
      "else": [
        {
          "action": "select",
          "target": "document.organizing_principle",
          "options": [
            "chronology",
            "causality",
            "space",
            "importance",
            "comparison"
          ]
        }
      ],
      "unless": [],
      "because": "Reader-centered order makes information usable.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "WEB-002",
        "WEB-008",
        "BK-020",
        "BK-024"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-012",
      "name": "Introduce lists with a clear purpose",
      "domain": "structure",
      "layer": "section",
      "strength": "context_default",
      "human_logic": "IF a list appears, THEN make its category or task clear in a heading or lead-in ELSE retain.",
      "when": {
        "path": "list.exists",
        "operator": "eq",
        "value": true
      },
      "then": [
        {
          "action": "verify",
          "target": "list.introduction",
          "require": "clear_category_or_task"
        },
        {
          "action": "insert",
          "target": "list.lead_in",
          "when": "missing"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "Readers need to know what the items have in common.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "WEB-003",
        "WEB-004"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-013",
      "name": "Use numbered lists for order or rank",
      "domain": "structure",
      "layer": "section",
      "strength": "context_default",
      "human_logic": "IF list order changes meaning, sequence, priority, or reference, THEN number the items ELSE use bullets or a table.",
      "when": {
        "path": "list.order_semantic",
        "operator": "eq",
        "value": true
      },
      "then": [
        {
          "action": "select",
          "target": "list.marker",
          "value": "numbered"
        }
      ],
      "else": [
        {
          "action": "select",
          "target": "list.structure",
          "options": [
            "bulleted",
            "definition_list",
            "table"
          ]
        }
      ],
      "unless": [],
      "because": "Numbering asserts order; bullets assert membership without order.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "WEB-003",
        "WEB-004",
        "BK-025"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-014",
      "name": "Keep list items parallel",
      "domain": "structure",
      "layer": "section",
      "strength": "context_default",
      "human_logic": "IF list items perform the same role but begin with mismatched grammatical forms, THEN align them ELSE retain justified variation.",
      "when": {
        "all": [
          {
            "path": "list.item_count",
            "operator": "gte",
            "value": 2
          },
          {
            "path": "list.items_same_role",
            "operator": "eq",
            "value": true
          },
          {
            "path": "list.grammatical_parallelism",
            "operator": "eq",
            "value": false
          }
        ]
      },
      "then": [
        {
          "action": "align",
          "target": "list.item_openings",
          "value_from": "clearest_item_pattern"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "Parallel structure makes lists faster to scan and compare.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "WEB-004",
        "BK-001",
        "BK-025"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-015",
      "name": "Choose table only for cross-comparison",
      "domain": "structure",
      "layer": "section",
      "strength": "heuristic",
      "human_logic": "IF readers must compare repeated fields across three or more items, THEN use a table; IF order or action matters, use a list ELSE use prose.",
      "when": {
        "all": [
          {
            "path": "content.entity_count",
            "operator": "gte",
            "value": 3
          },
          {
            "path": "content.repeated_field_count",
            "operator": "gte",
            "value": 2
          },
          {
            "path": "content.comparison_task",
            "operator": "eq",
            "value": true
          }
        ]
      },
      "then": [
        {
          "action": "convert",
          "target": "content.structure",
          "to": "table"
        }
      ],
      "else": [
        {
          "action": "select",
          "target": "content.structure",
          "by": "reader_task",
          "map": {
            "sequence": "numbered_list",
            "simple_set": "bullets",
            "explanation": "prose"
          }
        }
      ],
      "unless": [],
      "because": "Tables reveal repeated-field comparisons but impede linear reading when comparison is not the task.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "BK-025",
        "BK-026",
        "WEB-005"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-016",
      "name": "Provide a long-document summary",
      "domain": "structure",
      "layer": "document",
      "strength": "context_default",
      "human_logic": "IF a document is long, high-stakes, or cognitively dense, THEN add an accurate summary and navigation ELSE retain.",
      "when": {
        "any": [
          {
            "path": "document.word_count",
            "operator": "gte",
            "value": 2500
          },
          {
            "path": "context.stakes",
            "operator": "in",
            "value": [
              "high",
              "safety_critical"
            ]
          },
          {
            "path": "document.concept_density",
            "operator": "eq",
            "value": "high"
          }
        ]
      },
      "then": [
        {
          "action": "insert",
          "target": "document.summary",
          "position": "front",
          "include": [
            "purpose",
            "key_points",
            "actions_or_decisions"
          ]
        },
        {
          "action": "insert",
          "target": "document.navigation",
          "when": "multiple_sections"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "A summary supports orientation, memory, and selective reading.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "WEB-006",
        "BK-024"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-017",
      "name": "End with the intended next state",
      "domain": "structure",
      "layer": "document",
      "strength": "context_default",
      "human_logic": "IF the document expects a decision or action, THEN end with the next action, owner, timing, and success condition ELSE close by reinforcing the controlling meaning.",
      "when": {
        "path": "document.expected_outcome",
        "operator": "in",
        "value": [
          "decision",
          "action"
        ]
      },
      "then": [
        {
          "action": "insert",
          "target": "document.close",
          "include": [
            "next_action",
            "owner",
            "timing",
            "success_condition"
          ]
        }
      ],
      "else": [
        {
          "action": "align",
          "target": "document.close",
          "with": "controlling_meaning"
        }
      ],
      "unless": [],
      "because": "A document should route the reader into the intended outcome.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "BK-025",
        "BK-026",
        "BK-034"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-018",
      "name": "Separate reusable topics",
      "domain": "structure",
      "layer": "document",
      "strength": "heuristic",
      "human_logic": "IF a unit has one subject, independent value, and repeated reuse, THEN make it a standalone topic with links ELSE keep it in context.",
      "when": {
        "all": [
          {
            "path": "content.single_subject",
            "operator": "eq",
            "value": true
          },
          {
            "path": "content.independent_value",
            "operator": "eq",
            "value": true
          },
          {
            "path": "content.reuse_frequency",
            "operator": "gte",
            "value": 2
          }
        ]
      },
      "then": [
        {
          "action": "extract",
          "target": "content",
          "to": "reusable_topic"
        },
        {
          "action": "link",
          "target": "original_locations",
          "to": "reusable_topic"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "Topic-level reuse reduces duplication and drift.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "WEB-008",
        "BK-023",
        "BK-027"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-019",
      "name": "Preserve document promise and payoff",
      "domain": "structure",
      "layer": "document",
      "strength": "hard_constraint",
      "human_logic": "IF the opening promises information, transformation, evidence, or entertainment, THEN deliver or revise that promise ELSE retain.",
      "when": {
        "path": "document.opening_promise",
        "operator": "exists"
      },
      "then": [
        {
          "action": "verify",
          "target": "document.promise_payoff_match"
        },
        {
          "action": "repair",
          "target": "document",
          "when": "mismatch",
          "options": [
            "deliver_missing_payoff",
            "narrow_promise"
          ]
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "A broken promise damages coherence and trust.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "BK-011",
        "BK-016",
        "BK-030",
        "BK-031"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    },
    {
      "id": "STR-020",
      "name": "Apply progressive disclosure",
      "domain": "structure",
      "layer": "document",
      "strength": "heuristic",
      "human_logic": "IF novice and expert readers share a document, THEN put the essential path first and route detail to optional layers ELSE match one depth to the known audience.",
      "when": {
        "all": [
          {
            "path": "document.audience_role_count",
            "operator": "gt",
            "value": 1
          },
          {
            "path": "document.audience_roles",
            "operator": "contains",
            "value": "novice"
          },
          {
            "path": "document.audience_roles",
            "operator": "contains",
            "value": "expert"
          }
        ]
      },
      "then": [
        {
          "action": "layer",
          "target": "document",
          "levels": [
            "essential",
            "explanation",
            "reference_detail"
          ]
        },
        {
          "action": "link",
          "target": "layers"
        }
      ],
      "else": [
        {
          "action": "retain",
          "target": "current_text",
          "reason": "No triggering condition is present."
        }
      ],
      "unless": [],
      "because": "Layering lets readers choose depth without forcing one group through another group’s material.",
      "diagnostics": [],
      "examples": {},
      "source_ids": [
        "WEB-002",
        "WEB-008",
        "BK-024"
      ],
      "laka": {
        "smallest_sufficient_intervention": true,
        "primary_axes": [
          "scope",
          "depth",
          "magnitude",
          "reversibility"
        ]
      }
    }
  ]
}