{
  "code": "S80",
  "name": "Scroll dial",
  "shape": "scroll-steps",
  "family": "Reading",
  "fits": "A passage that runs in order: a timeline, a sequence of decisions, the steps of a process. Prose on one side; a sticky dial follows the scroll and shows where the reader is.",
  "use_when": "Inside a long read, when the order of events is the point. Any number of steps.",
  "slots": [
    {
      "name": "steps",
      "holds": "ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)",
      "budget": "2-8 steps"
    },
    {
      "name": "dial",
      "holds": "empty <aside class=\"dial\">, built by dial.js; optional data-title",
      "budget": "fixed"
    }
  ],
  "columns": 2,
  "density": "standard",
  "surface": "paper",
  "works_on": [
    "page"
  ],
  "library": "TDW",
  "reference_libraries": [
    "Cult UI",
    "Nexvyn UI"
  ],
  "dir": "S80-scroll-dial",
  "semantic": {
    "audience_question": "Where am I in this unfolding argument or process?",
    "intent": "Read ordered prose while a local navigation device tracks the authored sections.",
    "reasoning_relation": "sequential reading and position awareness",
    "message_pattern": "At [stage], [point]; this enables [next stage].",
    "required_content": [
      "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
      "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
    ],
    "narrative_positions": [
      "context",
      "explanation",
      "evidence: choose only when the page supports the surrounding argument"
    ],
    "requires_before": [
      "Establish the problem that made the old approach insufficient."
    ],
    "enables_after": [
      "State the common lesson across the decisions and qualify what remains inference."
    ],
    "slot_roles": {
      "steps": "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
      "dial": "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
    },
    "avoid_when": [
      "An unordered feature list.",
      "A timeline whose scroll position is mistaken for elapsed time."
    ],
    "layout_specific_contract": "A passage that runs in order: a timeline, a sequence of decisions, the steps of a process. Prose on one side; a sticky dial follows the scroll and shows where the reader is.",
    "provenance": {
      "basis": "interpretation of the existing layout and slot contracts",
      "review": "Tessel model-authored guidance; implementation approved by Nic, 2026-10-10",
      "corpus_evidence_status": "not yet established",
      "guide": "../SEMANTICS.md"
    },
    "variation_rule": "Read the selected option’s actual markup, slot count and source record. Preserve this reasoning relationship only if the option still expresses it; flag a mismatch before adapting.",
    "reader_outcome": "Read ordered prose while a local navigation device tracks the authored sections.",
    "matching": {
      "audience_question": "Where am I in this unfolding argument or process?",
      "reader_outcome": "Read ordered prose while a local navigation device tracks the authored sections.",
      "reasoning_relation": "sequential reading and position awareness",
      "content_shape": {
        "composition": "A passage that runs in order: a timeline, a sequence of decisions, the steps of a process. Prose on one side; a sticky dial follows the scroll and shows where the reader is.",
        "selected_state": "A passage that runs in order: a timeline, a sequence of decisions, the steps of a process. Prose on one side; a sticky dial follows the scroll and shows where the reader is.",
        "density": "standard",
        "columns": 2,
        "column_note": "Base metadata only; selected option can replace the base geometry."
      },
      "required_slots": [
        {
          "name": "steps",
          "reader_question": "What does this distinct step, state, scenario or observation contribute?",
          "semantic_role": "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
          "content_unit_count": {
            "min": 2,
            "max": 8,
            "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
          },
          "placeholder": "[REAL CONTENT · steps · ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)]",
          "layout_budget": {
            "authored": "2-8 steps",
            "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
          },
          "markup": {
            "slot": "story",
            "occurrences": 1,
            "annotation_status": "Semantic role explicitly mapped to authored selector; do not infer a data-slot with this name.",
            "visibility_status": "Selected-state structure inspected; conditional or decorative regions can be absent in narrow/complete states.",
            "sample_word_counts": [
              386
            ],
            "selector": ".steps .step"
          }
        },
        {
          "name": "dial",
          "reader_question": "What does the dial contribute to this page’s reader outcome?",
          "semantic_role": "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy.",
          "content_unit_count": {
            "min": 1,
            "max": 1,
            "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
          },
          "placeholder": "[REAL CONTENT · dial · empty <aside class=\"dial\">, built by dial.js; optional data-title]",
          "layout_budget": {
            "authored": "fixed",
            "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
          },
          "markup": {
            "slot": "dial",
            "occurrences": 0,
            "annotation_status": "Semantic role explicitly mapped to authored selector; do not infer a data-slot with this name.",
            "visibility_status": "Selected-state structure inspected; conditional or decorative regions can be absent in narrow/complete states.",
            "selector": ".dial"
          }
        }
      ],
      "rejection_constraints": [
        "A dial used to imply live measurement or scroll position mistaken for factual progress.",
        "Hiding essential meaning behind motion or implying measurable progress from arbitrary scroll distance."
      ],
      "option_guidance": {
        "option": "default",
        "composition_delta": "A passage that runs in order: a timeline, a sequence of decisions, the steps of a process. Prose on one side; a sticky dial follows the scroll and shows where the reader is.",
        "semantic_change": "retains base content relationship; changes presentation or disclosure",
        "matching_instruction": "Select S80 default when the supplied material answers “Where am I in this unfolding argument or process?” through sequential reading and position awareness. Respect this state: A passage that runs in order: a timeline, a sequence of decisions, the steps of a process. Prose on one side; a sticky dial follows the scroll and shows where the reader is."
      },
      "provenance": {
        "status": "inferred composition evidence",
        "author_intent": "not independently confirmed",
        "basis": [
          "retained source composition where available",
          "authored layout and slot contracts",
          "static implementation inspection"
        ],
        "source_visual_count": 2,
        "source_visual_sha256": [
          "624ee5208473f4eef4422e28d04ccc9b7c2c953045f058943541e0f0829faffc",
          "7efaf3056e17507c0d84043792a44c21ccdc17a4f9bebfa3a21a6170e5870cce"
        ],
        "source_export": "private source images remain outside this draft site",
        "markup_sha256": "760eccb788de3a4e2ead5691899b93bbc05e45327163560ea9ab3758c2eb1016",
        "limits": [
          "Static parsing inventories authored nodes; it does not certify rendered visibility, responsive fit or interactive state.",
          "Budgets are authored layout guidance, not a content-writing limit or proof of fit.",
          "Matching guidance is a draft inference; it does not establish facts, endorsement, causation or source author intent."
        ]
      },
      "adaptation_rules": [
        "Choose by audience question, reasoning relation and required content before aesthetic preference.",
        "Supply every required semantic role; retain visible unknowns as labelled real-content placeholders.",
        "A number needs source, scope and units; a quotation needs faithful wording and attribution.",
        "Do not infer importance from area, colour, depth or movement unless the content explicitly defines that encoding.",
        "Keep colour token roles, structural objects, licences and source records; changing content does not authorize changing them."
      ],
      "previous_required_slots": [
        {
          "name": "steps",
          "reader_question": "What does this distinct step, state, scenario or observation contribute?",
          "semantic_role": "ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)",
          "content_unit_count": {
            "min": 2,
            "max": 8,
            "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
          },
          "placeholder": "[REAL CONTENT · steps · ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)]",
          "layout_budget": {
            "authored": "2-8 steps",
            "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
          },
          "markup": {
            "slot": "story",
            "occurrences": 1,
            "annotation_status": "present",
            "visibility_status": "not asserted from static parsing",
            "sample_word_counts": [
              386
            ]
          }
        },
        {
          "name": "dial",
          "reader_question": "What does the dial contribute to this page’s reader outcome?",
          "semantic_role": "empty <aside class=\"dial\">, built by dial.js; optional data-title",
          "content_unit_count": {
            "min": 1,
            "max": 1,
            "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
          },
          "placeholder": "[REAL CONTENT · dial · empty <aside class=\"dial\">, built by dial.js; optional data-title]",
          "layout_budget": {
            "authored": "fixed",
            "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
          },
          "markup": {
            "slot": "dial",
            "occurrences": 0,
            "annotation_status": "unannotated semantic unit; locate in authored structure",
            "visibility_status": "not asserted from static parsing"
          }
        }
      ],
      "contract_correction": {
        "date": "2026-10-13",
        "basis": "Actual selected HTML/CSS inspection; previous required slots retained for review.",
        "records": [
          {
            "code": "S80",
            "option": "default",
            "selectors": {
              "steps": ".steps .step",
              "dial": ".dial"
            }
          }
        ]
      }
    },
    "rejection_constraints": [
      "A dial used to imply live measurement or scroll position mistaken for factual progress.",
      "Hiding essential meaning behind motion or implying measurable progress from arbitrary scroll distance."
    ],
    "markup_inventory": {
      "file": "spread.html",
      "sha256": "760eccb788de3a4e2ead5691899b93bbc05e45327163560ea9ab3758c2eb1016",
      "method": "static lxml markup plus authored option description; no rendered-visibility claim",
      "all_markup_slot_counts": {
        "eyebrow": 1,
        "head": 1,
        "story": 1
      },
      "slot_evidence": {
        "eyebrow": [
          {
            "tag": "span",
            "classes": "eyebrow",
            "sample_word_count": 8,
            "repeated_children": 0
          }
        ],
        "head": [
          {
            "tag": "h2",
            "classes": "head",
            "sample_word_count": 9,
            "repeated_children": 1
          }
        ],
        "story": [
          {
            "tag": "div",
            "classes": "story",
            "sample_word_count": 386,
            "repeated_children": 3
          }
        ]
      },
      "option_selectors": [
        "section-rail"
      ],
      "linked_implementation": [
        {
          "file": "../spreads.css",
          "sha256": "32da94472b0c9131e4d5dae7d5bf0498b09202a9e66294b4e4f23e6ddfbf37ba"
        },
        {
          "file": "../dial.js",
          "sha256": "23a65cd1f32540f7875858f58b1970e580876f4d408c1cef56df84f58f89030b"
        },
        {
          "file": "../spread.js",
          "sha256": "3d99948b83f750bd4ae95dac08e3e50a395de7c149c90a6f1a1c0ea36a2634a4"
        },
        {
          "file": "../reference-options.js",
          "sha256": "c110580a1f2358278839f17ac81168f85d53c41c9b2c1a42aac74b66b836f7b5"
        }
      ]
    },
    "variations": {
      "dial-left": {
        "audience_question": "Where am I in this unfolding argument or process?",
        "intent": "Read ordered prose while a local navigation device tracks the authored sections.",
        "reader_outcome": "Read ordered prose while a local navigation device tracks the authored sections.",
        "reasoning_relation": "sequential reading and position awareness",
        "slot_roles": {
          "steps": "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
          "dial": "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
        },
        "matching": {
          "audience_question": "Where am I in this unfolding argument or process?",
          "reader_outcome": "Read ordered prose while a local navigation device tracks the authored sections.",
          "reasoning_relation": "sequential reading and position awareness",
          "content_shape": {
            "composition": "A passage that runs in order: a timeline, a sequence of decisions, the steps of a process. Prose on one side; a sticky dial follows the scroll and shows where the reader is.",
            "selected_state": "Dial on the left",
            "density": "standard",
            "columns": 2,
            "column_note": "Base metadata only; selected option can replace the base geometry."
          },
          "required_slots": [
            {
              "name": "steps",
              "reader_question": "What does this distinct step, state, scenario or observation contribute?",
              "semantic_role": "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
              "content_unit_count": {
                "min": 2,
                "max": 8,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · steps · ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)]",
              "layout_budget": {
                "authored": "2-8 steps",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "story",
                "occurrences": 1,
                "annotation_status": "Semantic role explicitly mapped to authored selector; do not infer a data-slot with this name.",
                "visibility_status": "Selected-state structure inspected; conditional or decorative regions can be absent in narrow/complete states.",
                "sample_word_counts": [
                  386
                ],
                "selector": ".steps .step"
              }
            },
            {
              "name": "dial",
              "reader_question": "What does the dial contribute to this page’s reader outcome?",
              "semantic_role": "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy.",
              "content_unit_count": {
                "min": 1,
                "max": 1,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · dial · empty <aside class=\"dial\">, built by dial.js; optional data-title]",
              "layout_budget": {
                "authored": "fixed",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "dial",
                "occurrences": 0,
                "annotation_status": "Semantic role explicitly mapped to authored selector; do not infer a data-slot with this name.",
                "visibility_status": "Selected-state structure inspected; conditional or decorative regions can be absent in narrow/complete states.",
                "selector": ".dial"
              }
            }
          ],
          "rejection_constraints": [
            "A dial used to imply live measurement or scroll position mistaken for factual progress.",
            "Hiding essential meaning behind motion or implying measurable progress from arbitrary scroll distance."
          ],
          "option_guidance": {
            "option": "dial-left",
            "composition_delta": "Dial on the left",
            "semantic_change": "retains base content relationship; changes presentation or disclosure",
            "matching_instruction": "Select S80 dial-left when the supplied material answers “Where am I in this unfolding argument or process?” through sequential reading and position awareness. Respect this state: Dial on the left"
          },
          "provenance": {
            "status": "inferred composition evidence",
            "author_intent": "not independently confirmed",
            "basis": [
              "retained source composition where available",
              "authored layout and slot contracts",
              "static implementation inspection"
            ],
            "source_visual_count": 2,
            "source_visual_sha256": [
              "624ee5208473f4eef4422e28d04ccc9b7c2c953045f058943541e0f0829faffc",
              "7efaf3056e17507c0d84043792a44c21ccdc17a4f9bebfa3a21a6170e5870cce"
            ],
            "source_export": "private source images remain outside this draft site",
            "markup_sha256": "760eccb788de3a4e2ead5691899b93bbc05e45327163560ea9ab3758c2eb1016",
            "limits": [
              "Static parsing inventories authored nodes; it does not certify rendered visibility, responsive fit or interactive state.",
              "Budgets are authored layout guidance, not a content-writing limit or proof of fit.",
              "Matching guidance is a draft inference; it does not establish facts, endorsement, causation or source author intent."
            ]
          },
          "adaptation_rules": [
            "Choose by audience question, reasoning relation and required content before aesthetic preference.",
            "Supply every required semantic role; retain visible unknowns as labelled real-content placeholders.",
            "A number needs source, scope and units; a quotation needs faithful wording and attribution.",
            "Do not infer importance from area, colour, depth or movement unless the content explicitly defines that encoding.",
            "Keep colour token roles, structural objects, licences and source records; changing content does not authorize changing them."
          ],
          "previous_required_slots": [
            {
              "name": "steps",
              "reader_question": "What does this distinct step, state, scenario or observation contribute?",
              "semantic_role": "ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)",
              "content_unit_count": {
                "min": 2,
                "max": 8,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · steps · ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)]",
              "layout_budget": {
                "authored": "2-8 steps",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "story",
                "occurrences": 1,
                "annotation_status": "present",
                "visibility_status": "not asserted from static parsing",
                "sample_word_counts": [
                  386
                ]
              }
            },
            {
              "name": "dial",
              "reader_question": "What does the dial contribute to this page’s reader outcome?",
              "semantic_role": "empty <aside class=\"dial\">, built by dial.js; optional data-title",
              "content_unit_count": {
                "min": 1,
                "max": 1,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · dial · empty <aside class=\"dial\">, built by dial.js; optional data-title]",
              "layout_budget": {
                "authored": "fixed",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "dial",
                "occurrences": 0,
                "annotation_status": "unannotated semantic unit; locate in authored structure",
                "visibility_status": "not asserted from static parsing"
              }
            }
          ],
          "contract_correction": {
            "date": "2026-10-13",
            "basis": "Actual selected HTML/CSS inspection; previous required slots retained for review.",
            "records": [
              {
                "code": "S80",
                "option": "dial-left",
                "selectors": {
                  "steps": ".steps .step",
                  "dial": ".dial"
                }
              }
            ]
          }
        },
        "narrative_profile": {
          "central_point": "A sequence of decisions becomes understandable as the reader moves through it, while a persistent cue locates the current passage.",
          "communication_job": "Retain the sequence-and-position job with the dial placed to the left.",
          "audience_value": "Offers explanation and orientation: what changed at this point, and how does it prepare the next? Position tracking does not turn chronology into proof of causation.",
          "reading_path": [
            "Read the section framing, then the first complete passage.",
            "Follow passages in their authored order; each should change the reader’s understanding.",
            "Use the dial’s caption and active rail entry as position cues; they summarise the current passage, not a second argument."
          ],
          "adaptation": {
            "required_inputs": [
              "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
              "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
            ],
            "slot_guidance": {
              "steps": "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
              "dial": "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
            },
            "can_change": [
              "Replace the fictional subject and its supported content while retaining the roles and relationship described here."
            ],
            "must_survive": [
              "Keep every passage readable in static and reduced-motion states.",
              "Labels, captions and numeric values must refer to the same step.",
              "Retain a defensible bridge between beats; sequence alone does not establish cause."
            ]
          },
          "worked_example": {
            "fictional": true,
            "scenario": "Fictional Cedar moves from an overwhelmed repair day to a repeatable workshop method.",
            "slot_fills": {
              "steps": [
                "The failed format | January | Cedar ran an open repair day; visitors waited for help because only two volunteers knew the intake process. The visible queue exposed a capability gap, not simply a lack of tables.",
                "A shared intake method | February | Volunteers wrote and rehearsed a safety-first intake checklist. This established a repeatable starting point before adding more sessions.",
                "A learning loop | March | Each session ended with a short review of the hardest intake questions. The team revised the checklist after the review rather than treating the first version as finished.",
                "A larger service | April | Cedar could then try a second venue with trained volunteers and a common checklist. The earlier investments made expansion plausible; this fictional sequence alone does not prove they caused success."
              ],
              "dial": "Derive January → February → March → April and the four passage captions from the same authored steps."
            },
            "reasoning": "Each beat explains a capability that the next beat uses, preserving the source adaptation’s retrospective capability-building reading rather than a list of unrelated dates.",
            "qualification": "Fictional teaching example. Replace invented details with authorised content and keep any source, scope, status or uncertainty that affects interpretation."
          },
          "narrative_fit": {
            "before": "Establish the problem that made the old approach insufficient.",
            "after": "State the common lesson across the decisions and qualify what remains inference.",
            "good_uses": [
              "Long-form process explanation.",
              "A dated argument whose milestones need prose."
            ],
            "poor_fits": [
              "An unordered feature list.",
              "A timeline whose scroll position is mistaken for elapsed time."
            ]
          },
          "evidence": {
            "observations": [
              "Viewed base source: running prose is accompanied by a year/caption and a small sequence rail.",
              "Current HTML contains four .step passages with data-label/data-value/data-cap and a derived .dial; the conceptual steps/dial names are not data-slot attributes.",
              "Current option markup/CSS: Retain the sequence-and-position job with the dial placed to the left.",
              "The corrected matching contract explicitly maps steps to .steps .step and dial to .dial for dial states; section-rail instead uses its active story wrapper."
            ],
            "interpretations": [
              "A sequence of decisions becomes understandable as the reader moves through it, while a persistent cue locates the current passage. This is an interpretation of the inspected composition, not a verified claim of author intent."
            ],
            "not_verified": [
              "Original author intent, historical claims, persuasion and archive-wide frequency have not been independently verified."
            ],
            "references": [
              "02_product/spreads/S80-scroll-dial/source.webp",
              "02_product/spreads-semantics-2026-10-13/dist/S80-scroll-dial/spread.html",
              "02_product/spreads-semantics-2026-10-13/dist/S80-scroll-dial/spread.json"
            ]
          },
          "review": {
            "status": "reviewed",
            "basis": "Viewed the base source capture and inspected this option’s current markup, CSS and matching contract. No distinct option-source capture was reviewed unless explicitly stated in observations. Rechecked integrated matching on 2026-10-13: required roles, example fills and repeated-item counts agree. Previously provisional because conceptual steps/dial roles lacked explicit markup mapping. The integrated contract now maps the four authored passages and derived dial explicitly; section-rail retains only its active story role. Historical issue details remain in contract-issues-reading.json. This review does not establish original author intent or verify playback."
          },
          "variation_relationship": "same-job"
        },
        "required_content": [
          "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
          "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
        ],
        "requires_before": [
          "Establish the problem that made the old approach insufficient."
        ],
        "enables_after": [
          "State the common lesson across the decisions and qualify what remains inference."
        ],
        "avoid_when": [
          "An unordered feature list.",
          "A timeline whose scroll position is mistaken for elapsed time."
        ]
      },
      "no-odo": {
        "audience_question": "Where am I in this unfolding argument or process?",
        "intent": "Read ordered prose while a local navigation device tracks the authored sections.",
        "reader_outcome": "Read ordered prose while a local navigation device tracks the authored sections.",
        "reasoning_relation": "sequential reading and position awareness",
        "slot_roles": {
          "steps": "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
          "dial": "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
        },
        "matching": {
          "audience_question": "Where am I in this unfolding argument or process?",
          "reader_outcome": "Read ordered prose while a local navigation device tracks the authored sections.",
          "reasoning_relation": "sequential reading and position awareness",
          "content_shape": {
            "composition": "A passage that runs in order: a timeline, a sequence of decisions, the steps of a process. Prose on one side; a sticky dial follows the scroll and shows where the reader is.",
            "selected_state": "No rolling number, caption and rail only",
            "density": "standard",
            "columns": 2,
            "column_note": "Base metadata only; selected option can replace the base geometry."
          },
          "required_slots": [
            {
              "name": "steps",
              "reader_question": "What does this distinct step, state, scenario or observation contribute?",
              "semantic_role": "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
              "content_unit_count": {
                "min": 2,
                "max": 8,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · steps · ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)]",
              "layout_budget": {
                "authored": "2-8 steps",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "story",
                "occurrences": 1,
                "annotation_status": "Semantic role explicitly mapped to authored selector; do not infer a data-slot with this name.",
                "visibility_status": "Selected-state structure inspected; conditional or decorative regions can be absent in narrow/complete states.",
                "sample_word_counts": [
                  386
                ],
                "selector": ".steps .step"
              }
            },
            {
              "name": "dial",
              "reader_question": "What does the dial contribute to this page’s reader outcome?",
              "semantic_role": "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy.",
              "content_unit_count": {
                "min": 1,
                "max": 1,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · dial · empty <aside class=\"dial\">, built by dial.js; optional data-title]",
              "layout_budget": {
                "authored": "fixed",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "dial",
                "occurrences": 0,
                "annotation_status": "Semantic role explicitly mapped to authored selector; do not infer a data-slot with this name.",
                "visibility_status": "Selected-state structure inspected; conditional or decorative regions can be absent in narrow/complete states.",
                "selector": ".dial"
              }
            }
          ],
          "rejection_constraints": [
            "A dial used to imply live measurement or scroll position mistaken for factual progress.",
            "Hiding essential meaning behind motion or implying measurable progress from arbitrary scroll distance."
          ],
          "option_guidance": {
            "option": "no-odo",
            "composition_delta": "No rolling number, caption and rail only",
            "semantic_change": "retains base content relationship; changes presentation or disclosure",
            "matching_instruction": "Select S80 no-odo when the supplied material answers “Where am I in this unfolding argument or process?” through sequential reading and position awareness. Respect this state: No rolling number, caption and rail only"
          },
          "provenance": {
            "status": "inferred composition evidence",
            "author_intent": "not independently confirmed",
            "basis": [
              "retained source composition where available",
              "authored layout and slot contracts",
              "static implementation inspection"
            ],
            "source_visual_count": 2,
            "source_visual_sha256": [
              "624ee5208473f4eef4422e28d04ccc9b7c2c953045f058943541e0f0829faffc",
              "7efaf3056e17507c0d84043792a44c21ccdc17a4f9bebfa3a21a6170e5870cce"
            ],
            "source_export": "private source images remain outside this draft site",
            "markup_sha256": "760eccb788de3a4e2ead5691899b93bbc05e45327163560ea9ab3758c2eb1016",
            "limits": [
              "Static parsing inventories authored nodes; it does not certify rendered visibility, responsive fit or interactive state.",
              "Budgets are authored layout guidance, not a content-writing limit or proof of fit.",
              "Matching guidance is a draft inference; it does not establish facts, endorsement, causation or source author intent."
            ]
          },
          "adaptation_rules": [
            "Choose by audience question, reasoning relation and required content before aesthetic preference.",
            "Supply every required semantic role; retain visible unknowns as labelled real-content placeholders.",
            "A number needs source, scope and units; a quotation needs faithful wording and attribution.",
            "Do not infer importance from area, colour, depth or movement unless the content explicitly defines that encoding.",
            "Keep colour token roles, structural objects, licences and source records; changing content does not authorize changing them."
          ],
          "previous_required_slots": [
            {
              "name": "steps",
              "reader_question": "What does this distinct step, state, scenario or observation contribute?",
              "semantic_role": "ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)",
              "content_unit_count": {
                "min": 2,
                "max": 8,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · steps · ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)]",
              "layout_budget": {
                "authored": "2-8 steps",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "story",
                "occurrences": 1,
                "annotation_status": "present",
                "visibility_status": "not asserted from static parsing",
                "sample_word_counts": [
                  386
                ]
              }
            },
            {
              "name": "dial",
              "reader_question": "What does the dial contribute to this page’s reader outcome?",
              "semantic_role": "empty <aside class=\"dial\">, built by dial.js; optional data-title",
              "content_unit_count": {
                "min": 1,
                "max": 1,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · dial · empty <aside class=\"dial\">, built by dial.js; optional data-title]",
              "layout_budget": {
                "authored": "fixed",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "dial",
                "occurrences": 0,
                "annotation_status": "unannotated semantic unit; locate in authored structure",
                "visibility_status": "not asserted from static parsing"
              }
            }
          ],
          "contract_correction": {
            "date": "2026-10-13",
            "basis": "Actual selected HTML/CSS inspection; previous required slots retained for review.",
            "records": [
              {
                "code": "S80",
                "option": "no-odo",
                "selectors": {
                  "steps": ".steps .step",
                  "dial": ".dial"
                }
              }
            ]
          }
        },
        "narrative_profile": {
          "central_point": "A sequence of decisions becomes understandable as the reader moves through it, while a persistent cue locates the current passage.",
          "communication_job": "Retain the sequence-and-position job using caption and rail without the rolling number.",
          "audience_value": "Offers explanation and orientation: what changed at this point, and how does it prepare the next? Position tracking does not turn chronology into proof of causation.",
          "reading_path": [
            "Read the section framing, then the first complete passage.",
            "Follow passages in their authored order; each should change the reader’s understanding.",
            "Use the dial’s caption and active rail entry as position cues; they summarise the current passage, not a second argument."
          ],
          "adaptation": {
            "required_inputs": [
              "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
              "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
            ],
            "slot_guidance": {
              "steps": "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
              "dial": "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
            },
            "can_change": [
              "Replace the fictional subject and its supported content while retaining the roles and relationship described here."
            ],
            "must_survive": [
              "Keep every passage readable in static and reduced-motion states.",
              "Labels, captions and numeric values must refer to the same step.",
              "Retain a defensible bridge between beats; sequence alone does not establish cause."
            ]
          },
          "worked_example": {
            "fictional": true,
            "scenario": "Fictional Cedar moves from an overwhelmed repair day to a repeatable workshop method.",
            "slot_fills": {
              "steps": [
                "The failed format | January | Cedar ran an open repair day; visitors waited for help because only two volunteers knew the intake process. The visible queue exposed a capability gap, not simply a lack of tables.",
                "A shared intake method | February | Volunteers wrote and rehearsed a safety-first intake checklist. This established a repeatable starting point before adding more sessions.",
                "A learning loop | March | Each session ended with a short review of the hardest intake questions. The team revised the checklist after the review rather than treating the first version as finished.",
                "A larger service | April | Cedar could then try a second venue with trained volunteers and a common checklist. The earlier investments made expansion plausible; this fictional sequence alone does not prove they caused success."
              ],
              "dial": "Derive January → February → March → April and the four passage captions from the same authored steps."
            },
            "reasoning": "Each beat explains a capability that the next beat uses, preserving the source adaptation’s retrospective capability-building reading rather than a list of unrelated dates.",
            "qualification": "Fictional teaching example. Replace invented details with authorised content and keep any source, scope, status or uncertainty that affects interpretation."
          },
          "narrative_fit": {
            "before": "Establish the problem that made the old approach insufficient.",
            "after": "State the common lesson across the decisions and qualify what remains inference.",
            "good_uses": [
              "Long-form process explanation.",
              "A dated argument whose milestones need prose."
            ],
            "poor_fits": [
              "An unordered feature list.",
              "A timeline whose scroll position is mistaken for elapsed time."
            ]
          },
          "evidence": {
            "observations": [
              "Viewed base source: running prose is accompanied by a year/caption and a small sequence rail.",
              "Current HTML contains four .step passages with data-label/data-value/data-cap and a derived .dial; the conceptual steps/dial names are not data-slot attributes.",
              "Current option markup/CSS: Retain the sequence-and-position job using caption and rail without the rolling number.",
              "The corrected matching contract explicitly maps steps to .steps .step and dial to .dial for dial states; section-rail instead uses its active story wrapper."
            ],
            "interpretations": [
              "A sequence of decisions becomes understandable as the reader moves through it, while a persistent cue locates the current passage. This is an interpretation of the inspected composition, not a verified claim of author intent."
            ],
            "not_verified": [
              "Original author intent, historical claims, persuasion and archive-wide frequency have not been independently verified."
            ],
            "references": [
              "02_product/spreads/S80-scroll-dial/source.webp",
              "02_product/spreads-semantics-2026-10-13/dist/S80-scroll-dial/spread.html",
              "02_product/spreads-semantics-2026-10-13/dist/S80-scroll-dial/spread.json"
            ]
          },
          "review": {
            "status": "reviewed",
            "basis": "Viewed the base source capture and inspected this option’s current markup, CSS and matching contract. No distinct option-source capture was reviewed unless explicitly stated in observations. Rechecked integrated matching on 2026-10-13: required roles, example fills and repeated-item counts agree. Previously provisional because conceptual steps/dial roles lacked explicit markup mapping. The integrated contract now maps the four authored passages and derived dial explicitly; section-rail retains only its active story role. Historical issue details remain in contract-issues-reading.json. This review does not establish original author intent or verify playback."
          },
          "variation_relationship": "same-job"
        },
        "required_content": [
          "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
          "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
        ],
        "requires_before": [
          "Establish the problem that made the old approach insufficient."
        ],
        "enables_after": [
          "State the common lesson across the decisions and qualify what remains inference."
        ],
        "avoid_when": [
          "An unordered feature list.",
          "A timeline whose scroll position is mistaken for elapsed time."
        ]
      },
      "no-rail": {
        "audience_question": "Where am I in this unfolding argument or process?",
        "intent": "Read ordered prose while a local navigation device tracks the authored sections.",
        "reader_outcome": "Read ordered prose while a local navigation device tracks the authored sections.",
        "reasoning_relation": "sequential reading and position awareness",
        "slot_roles": {
          "steps": "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
          "dial": "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
        },
        "matching": {
          "audience_question": "Where am I in this unfolding argument or process?",
          "reader_outcome": "Read ordered prose while a local navigation device tracks the authored sections.",
          "reasoning_relation": "sequential reading and position awareness",
          "content_shape": {
            "composition": "A passage that runs in order: a timeline, a sequence of decisions, the steps of a process. Prose on one side; a sticky dial follows the scroll and shows where the reader is.",
            "selected_state": "No rail",
            "density": "standard",
            "columns": 2,
            "column_note": "Base metadata only; selected option can replace the base geometry."
          },
          "required_slots": [
            {
              "name": "steps",
              "reader_question": "What does this distinct step, state, scenario or observation contribute?",
              "semantic_role": "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
              "content_unit_count": {
                "min": 2,
                "max": 8,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · steps · ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)]",
              "layout_budget": {
                "authored": "2-8 steps",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "story",
                "occurrences": 1,
                "annotation_status": "Semantic role explicitly mapped to authored selector; do not infer a data-slot with this name.",
                "visibility_status": "Selected-state structure inspected; conditional or decorative regions can be absent in narrow/complete states.",
                "sample_word_counts": [
                  386
                ],
                "selector": ".steps .step"
              }
            },
            {
              "name": "dial",
              "reader_question": "What does the dial contribute to this page’s reader outcome?",
              "semantic_role": "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy.",
              "content_unit_count": {
                "min": 1,
                "max": 1,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · dial · empty <aside class=\"dial\">, built by dial.js; optional data-title]",
              "layout_budget": {
                "authored": "fixed",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "dial",
                "occurrences": 0,
                "annotation_status": "Semantic role explicitly mapped to authored selector; do not infer a data-slot with this name.",
                "visibility_status": "Selected-state structure inspected; conditional or decorative regions can be absent in narrow/complete states.",
                "selector": ".dial"
              }
            }
          ],
          "rejection_constraints": [
            "A dial used to imply live measurement or scroll position mistaken for factual progress.",
            "Hiding essential meaning behind motion or implying measurable progress from arbitrary scroll distance."
          ],
          "option_guidance": {
            "option": "no-rail",
            "composition_delta": "No rail",
            "semantic_change": "retains base content relationship; changes presentation or disclosure",
            "matching_instruction": "Select S80 no-rail when the supplied material answers “Where am I in this unfolding argument or process?” through sequential reading and position awareness. Respect this state: No rail"
          },
          "provenance": {
            "status": "inferred composition evidence",
            "author_intent": "not independently confirmed",
            "basis": [
              "retained source composition where available",
              "authored layout and slot contracts",
              "static implementation inspection"
            ],
            "source_visual_count": 2,
            "source_visual_sha256": [
              "624ee5208473f4eef4422e28d04ccc9b7c2c953045f058943541e0f0829faffc",
              "7efaf3056e17507c0d84043792a44c21ccdc17a4f9bebfa3a21a6170e5870cce"
            ],
            "source_export": "private source images remain outside this draft site",
            "markup_sha256": "760eccb788de3a4e2ead5691899b93bbc05e45327163560ea9ab3758c2eb1016",
            "limits": [
              "Static parsing inventories authored nodes; it does not certify rendered visibility, responsive fit or interactive state.",
              "Budgets are authored layout guidance, not a content-writing limit or proof of fit.",
              "Matching guidance is a draft inference; it does not establish facts, endorsement, causation or source author intent."
            ]
          },
          "adaptation_rules": [
            "Choose by audience question, reasoning relation and required content before aesthetic preference.",
            "Supply every required semantic role; retain visible unknowns as labelled real-content placeholders.",
            "A number needs source, scope and units; a quotation needs faithful wording and attribution.",
            "Do not infer importance from area, colour, depth or movement unless the content explicitly defines that encoding.",
            "Keep colour token roles, structural objects, licences and source records; changing content does not authorize changing them."
          ],
          "previous_required_slots": [
            {
              "name": "steps",
              "reader_question": "What does this distinct step, state, scenario or observation contribute?",
              "semantic_role": "ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)",
              "content_unit_count": {
                "min": 2,
                "max": 8,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · steps · ordered prose blocks, each with data-label (rail), optional data-value (rolling number) and data-cap (one-line caption)]",
              "layout_budget": {
                "authored": "2-8 steps",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "story",
                "occurrences": 1,
                "annotation_status": "present",
                "visibility_status": "not asserted from static parsing",
                "sample_word_counts": [
                  386
                ]
              }
            },
            {
              "name": "dial",
              "reader_question": "What does the dial contribute to this page’s reader outcome?",
              "semantic_role": "empty <aside class=\"dial\">, built by dial.js; optional data-title",
              "content_unit_count": {
                "min": 1,
                "max": 1,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · dial · empty <aside class=\"dial\">, built by dial.js; optional data-title]",
              "layout_budget": {
                "authored": "fixed",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "dial",
                "occurrences": 0,
                "annotation_status": "unannotated semantic unit; locate in authored structure",
                "visibility_status": "not asserted from static parsing"
              }
            }
          ],
          "contract_correction": {
            "date": "2026-10-13",
            "basis": "Actual selected HTML/CSS inspection; previous required slots retained for review.",
            "records": [
              {
                "code": "S80",
                "option": "no-rail",
                "selectors": {
                  "steps": ".steps .step",
                  "dial": ".dial"
                }
              }
            ]
          }
        },
        "narrative_profile": {
          "central_point": "A sequence of decisions becomes understandable as the reader moves through it, while a persistent cue locates the current passage.",
          "communication_job": "Retain the sequence-and-position job using the current number/caption without the full rail.",
          "audience_value": "Offers explanation and orientation: what changed at this point, and how does it prepare the next? Position tracking does not turn chronology into proof of causation.",
          "reading_path": [
            "Read the section framing, then the first complete passage.",
            "Follow passages in their authored order; each should change the reader’s understanding.",
            "Use the dial’s caption and active rail entry as position cues; they summarise the current passage, not a second argument."
          ],
          "adaptation": {
            "required_inputs": [
              "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
              "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
            ],
            "slot_guidance": {
              "steps": "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
              "dial": "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
            },
            "can_change": [
              "Replace the fictional subject and its supported content while retaining the roles and relationship described here."
            ],
            "must_survive": [
              "Keep every passage readable in static and reduced-motion states.",
              "Labels, captions and numeric values must refer to the same step.",
              "Retain a defensible bridge between beats; sequence alone does not establish cause."
            ]
          },
          "worked_example": {
            "fictional": true,
            "scenario": "Fictional Cedar moves from an overwhelmed repair day to a repeatable workshop method.",
            "slot_fills": {
              "steps": [
                "The failed format | January | Cedar ran an open repair day; visitors waited for help because only two volunteers knew the intake process. The visible queue exposed a capability gap, not simply a lack of tables.",
                "A shared intake method | February | Volunteers wrote and rehearsed a safety-first intake checklist. This established a repeatable starting point before adding more sessions.",
                "A learning loop | March | Each session ended with a short review of the hardest intake questions. The team revised the checklist after the review rather than treating the first version as finished.",
                "A larger service | April | Cedar could then try a second venue with trained volunteers and a common checklist. The earlier investments made expansion plausible; this fictional sequence alone does not prove they caused success."
              ],
              "dial": "Derive January → February → March → April and the four passage captions from the same authored steps."
            },
            "reasoning": "Each beat explains a capability that the next beat uses, preserving the source adaptation’s retrospective capability-building reading rather than a list of unrelated dates.",
            "qualification": "Fictional teaching example. Replace invented details with authorised content and keep any source, scope, status or uncertainty that affects interpretation."
          },
          "narrative_fit": {
            "before": "Establish the problem that made the old approach insufficient.",
            "after": "State the common lesson across the decisions and qualify what remains inference.",
            "good_uses": [
              "Long-form process explanation.",
              "A dated argument whose milestones need prose."
            ],
            "poor_fits": [
              "An unordered feature list.",
              "A timeline whose scroll position is mistaken for elapsed time."
            ]
          },
          "evidence": {
            "observations": [
              "Viewed base source: running prose is accompanied by a year/caption and a small sequence rail.",
              "Current HTML contains four .step passages with data-label/data-value/data-cap and a derived .dial; the conceptual steps/dial names are not data-slot attributes.",
              "Current option markup/CSS: Retain the sequence-and-position job using the current number/caption without the full rail.",
              "The corrected matching contract explicitly maps steps to .steps .step and dial to .dial for dial states; section-rail instead uses its active story wrapper."
            ],
            "interpretations": [
              "A sequence of decisions becomes understandable as the reader moves through it, while a persistent cue locates the current passage. This is an interpretation of the inspected composition, not a verified claim of author intent."
            ],
            "not_verified": [
              "Original author intent, historical claims, persuasion and archive-wide frequency have not been independently verified."
            ],
            "references": [
              "02_product/spreads/S80-scroll-dial/source.webp",
              "02_product/spreads-semantics-2026-10-13/dist/S80-scroll-dial/spread.html",
              "02_product/spreads-semantics-2026-10-13/dist/S80-scroll-dial/spread.json"
            ]
          },
          "review": {
            "status": "reviewed",
            "basis": "Viewed the base source capture and inspected this option’s current markup, CSS and matching contract. No distinct option-source capture was reviewed unless explicitly stated in observations. Rechecked integrated matching on 2026-10-13: required roles, example fills and repeated-item counts agree. Previously provisional because conceptual steps/dial roles lacked explicit markup mapping. The integrated contract now maps the four authored passages and derived dial explicitly; section-rail retains only its active story role. Historical issue details remain in contract-issues-reading.json. This review does not establish original author intent or verify playback."
          },
          "variation_relationship": "same-job"
        },
        "required_content": [
          "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
          "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
        ],
        "requires_before": [
          "Establish the problem that made the old approach insufficient."
        ],
        "enables_after": [
          "State the common lesson across the decisions and qualify what remains inference."
        ],
        "avoid_when": [
          "An unordered feature list.",
          "A timeline whose scroll position is mistaken for elapsed time."
        ]
      },
      "section-rail": {
        "audience_question": "Which authored section am I reading, and where can I jump next?",
        "intent": "Navigate complete prose panels through a plain section list.",
        "reader_outcome": "Navigate complete prose panels through a plain section list.",
        "reasoning_relation": "section navigation and sequential reading",
        "slot_roles": {
          "story": "Two to eight complete authored panels, each with a unique anchor and matching navigation label; all panels remain in reading order."
        },
        "matching": {
          "audience_question": "Which authored section am I reading, and where can I jump next?",
          "reader_outcome": "Navigate complete prose panels through a plain section list.",
          "reasoning_relation": "section navigation and sequential reading",
          "content_shape": {
            "composition": "A passage that runs in order: a timeline, a sequence of decisions, the steps of a process. Prose on one side; a sticky dial follows the scroll and shows where the reader is.",
            "selected_state": "Plain sticky section list left, authored panels right; links jump to each passage and active state follows scroll. No dial or rolling number in this option; mobile list flows above the text.",
            "density": "standard",
            "columns": 2,
            "column_note": "Base metadata only; selected option can replace the base geometry."
          },
          "required_slots": [
            {
              "name": "story",
              "reader_question": "What does this distinct step, state, scenario or observation contribute?",
              "semantic_role": "Two to eight complete authored panels, each with a unique anchor and matching navigation label; all panels remain in reading order.",
              "content_unit_count": {
                "min": 1,
                "max": 1,
                "basis": "authored composition members where a repeated group is specified; otherwise one named slot; not a required amount of evidence"
              },
              "placeholder": "[REAL CONTENT · story · Complete authored panels with meaningful section labels and unambiguous reading order.]",
              "layout_budget": {
                "authored": "2-8 panels; preserve every panel in static reading",
                "policy": "Working composition guidance: preserve scope and qualification; change layout rather than truncate the argument."
              },
              "markup": {
                "slot": "story",
                "occurrences": 1,
                "annotation_status": "present",
                "visibility_status": "not asserted from static parsing",
                "sample_word_counts": [
                  386
                ]
              }
            }
          ],
          "rejection_constraints": [
            "Active state treated as saved progress or a section omitted from the full reading view.",
            "Hiding essential meaning behind motion or implying measurable progress from arbitrary scroll distance."
          ],
          "option_guidance": {
            "option": "section-rail",
            "composition_delta": "Plain sticky section list left, authored panels right; links jump to each passage and active state follows scroll. No dial or rolling number in this option; mobile list flows above the text.",
            "semantic_change": "changes content relationship",
            "matching_instruction": "Select S80 section-rail when the supplied material answers “Which authored section am I reading, and where can I jump next?” through section navigation and sequential reading. Respect this state: Plain sticky section list left, authored panels right; links jump to each passage and active state follows scroll. No dial or rolling number in this option; mobile list flows above the text."
          },
          "provenance": {
            "status": "inferred composition evidence",
            "author_intent": "not independently confirmed",
            "basis": [
              "retained source composition where available",
              "authored layout and slot contracts",
              "static implementation inspection"
            ],
            "source_visual_count": 2,
            "source_visual_sha256": [
              "624ee5208473f4eef4422e28d04ccc9b7c2c953045f058943541e0f0829faffc",
              "7efaf3056e17507c0d84043792a44c21ccdc17a4f9bebfa3a21a6170e5870cce"
            ],
            "source_export": "private source images remain outside this draft site",
            "markup_sha256": "760eccb788de3a4e2ead5691899b93bbc05e45327163560ea9ab3758c2eb1016",
            "limits": [
              "Static parsing inventories authored nodes; it does not certify rendered visibility, responsive fit or interactive state.",
              "Budgets are authored layout guidance, not a content-writing limit or proof of fit.",
              "Matching guidance is a draft inference; it does not establish facts, endorsement, causation or source author intent."
            ]
          },
          "adaptation_rules": [
            "Choose by audience question, reasoning relation and required content before aesthetic preference.",
            "Supply every required semantic role; retain visible unknowns as labelled real-content placeholders.",
            "A number needs source, scope and units; a quotation needs faithful wording and attribution.",
            "Do not infer importance from area, colour, depth or movement unless the content explicitly defines that encoding.",
            "Keep colour token roles, structural objects, licences and source records; changing content does not authorize changing them."
          ]
        },
        "narrative_profile": {
          "central_point": "Named sections remain directly navigable while the complete argument stays in the page.",
          "communication_job": "Let readers follow or jump between named authored sections through native links; the active section gives position without a rolling dial.",
          "audience_value": "Offers explanation and orientation: what changed at this point, and how does it prepare the next? Position tracking does not turn chronology into proof of causation.",
          "reading_path": [
            "Inspect the section list to understand the route.",
            "Read the panels in order or follow a relevant section link.",
            "Use the active label only to locate the current section."
          ],
          "adaptation": {
            "required_inputs": [
              "Two to eight complete authored panels, each with a unique anchor and matching navigation label; all panels remain in reading order."
            ],
            "slot_guidance": {
              "story": "Two to eight complete authored panels, each with a unique anchor and matching navigation label; all panels remain in reading order."
            },
            "can_change": [
              "Replace the fictional subject and its supported content while retaining the roles and relationship described here."
            ],
            "must_survive": [
              "Keep every passage readable in static and reduced-motion states.",
              "Labels, captions and numeric values must refer to the same step.",
              "Retain a defensible bridge between beats; sequence alone does not establish cause."
            ]
          },
          "worked_example": {
            "fictional": true,
            "scenario": "Fictional Cedar moves from an overwhelmed repair day to a repeatable workshop method.",
            "slot_fills": {
              "story": "The failed format | January | Cedar ran an open repair day; visitors waited for help because only two volunteers knew the intake process. The visible queue exposed a capability gap, not simply a lack of tables.\n\nA shared intake method | February | Volunteers wrote and rehearsed a safety-first intake checklist. This established a repeatable starting point before adding more sessions.\n\nA learning loop | March | Each session ended with a short review of the hardest intake questions. The team revised the checklist after the review rather than treating the first version as finished.\n\nA larger service | April | Cedar could then try a second venue with trained volunteers and a common checklist. The earlier investments made expansion plausible; this fictional sequence alone does not prove they caused success."
            },
            "reasoning": "Each beat explains a capability that the next beat uses, preserving the source adaptation’s retrospective capability-building reading rather than a list of unrelated dates.",
            "qualification": "Fictional teaching example. Replace invented details with authorised content and keep any source, scope, status or uncertainty that affects interpretation."
          },
          "narrative_fit": {
            "before": "Establish the problem that made the old approach insufficient.",
            "after": "State the common lesson across the decisions and qualify what remains inference.",
            "good_uses": [
              "Long-form process explanation.",
              "A dated argument whose milestones need prose."
            ],
            "poor_fits": [
              "An unordered feature list.",
              "A timeline whose scroll position is mistaken for elapsed time."
            ]
          },
          "evidence": {
            "observations": [
              "Viewed base source: running prose is accompanied by a year/caption and a small sequence rail.",
              "Current HTML contains four .step passages with data-label/data-value/data-cap and a derived .dial; the conceptual steps/dial names are not data-slot attributes.",
              "Current option markup/CSS: Let readers follow or jump between named authored sections through native links; the active section gives position without a rolling dial.",
              "Viewed source-opt-section-rail.webp: a left list sits beside stacked labelled panels.",
              "The corrected matching contract explicitly maps steps to .steps .step and dial to .dial for dial states; section-rail instead uses its active story wrapper."
            ],
            "interpretations": [
              "A sequence of decisions becomes understandable as the reader moves through it, while a persistent cue locates the current passage. This is an interpretation of the inspected composition, not a verified claim of author intent."
            ],
            "not_verified": [
              "Original author intent, historical claims, persuasion and archive-wide frequency have not been independently verified."
            ],
            "references": [
              "02_product/spreads/S80-scroll-dial/source.webp",
              "02_product/spreads-semantics-2026-10-13/dist/S80-scroll-dial/spread.html",
              "02_product/spreads-semantics-2026-10-13/dist/S80-scroll-dial/spread.json",
              "02_product/spreads/S80-scroll-dial/source-opt-section-rail.webp"
            ]
          },
          "review": {
            "status": "reviewed",
            "basis": "Viewed the base source capture and inspected this option’s current markup, CSS and matching contract. No distinct option-source capture was reviewed unless explicitly stated in observations. Rechecked integrated matching on 2026-10-13: required roles, example fills and repeated-item counts agree. Previously provisional because conceptual steps/dial roles lacked explicit markup mapping. The integrated contract now maps the four authored passages and derived dial explicitly; section-rail retains only its active story role. Historical issue details remain in contract-issues-reading.json. This review does not establish original author intent or verify playback."
          },
          "variation_relationship": "different-job"
        },
        "required_content": [
          "Two to eight complete authored panels, each with a unique anchor and matching navigation label; all panels remain in reading order."
        ],
        "requires_before": [
          "Establish the problem that made the old approach insufficient."
        ],
        "enables_after": [
          "State the common lesson across the decisions and qualify what remains inference."
        ],
        "avoid_when": [
          "An unordered feature list.",
          "A timeline whose scroll position is mistaken for elapsed time."
        ]
      }
    },
    "narrative_profile": {
      "central_point": "A sequence of decisions becomes understandable as the reader moves through it, while a persistent cue locates the current passage.",
      "communication_job": "Guide the reader through an unfolding argument without losing their place.",
      "audience_value": "Offers explanation and orientation: what changed at this point, and how does it prepare the next? Position tracking does not turn chronology into proof of causation.",
      "reading_path": [
        "Read the section framing, then the first complete passage.",
        "Follow passages in their authored order; each should change the reader’s understanding.",
        "Use the dial’s caption and active rail entry as position cues; they summarise the current passage, not a second argument."
      ],
      "adaptation": {
        "required_inputs": [
          "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
          "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
        ],
        "slot_guidance": {
          "steps": "Two to eight complete passages with a short rail label, optional numeric value and accurate caption for each.",
          "dial": "A generated position cue derived from the same passage labels and values; do not author contradictory independent copy."
        },
        "can_change": [
          "Replace the fictional subject and its supported content while retaining the roles and relationship described here."
        ],
        "must_survive": [
          "Keep every passage readable in static and reduced-motion states.",
          "Labels, captions and numeric values must refer to the same step.",
          "Retain a defensible bridge between beats; sequence alone does not establish cause."
        ]
      },
      "worked_example": {
        "fictional": true,
        "scenario": "Fictional Cedar moves from an overwhelmed repair day to a repeatable workshop method.",
        "slot_fills": {
          "steps": [
            "The failed format | January | Cedar ran an open repair day; visitors waited for help because only two volunteers knew the intake process. The visible queue exposed a capability gap, not simply a lack of tables.",
            "A shared intake method | February | Volunteers wrote and rehearsed a safety-first intake checklist. This established a repeatable starting point before adding more sessions.",
            "A learning loop | March | Each session ended with a short review of the hardest intake questions. The team revised the checklist after the review rather than treating the first version as finished.",
            "A larger service | April | Cedar could then try a second venue with trained volunteers and a common checklist. The earlier investments made expansion plausible; this fictional sequence alone does not prove they caused success."
          ],
          "dial": "Derive January → February → March → April and the four passage captions from the same authored steps."
        },
        "reasoning": "Each beat explains a capability that the next beat uses, preserving the source adaptation’s retrospective capability-building reading rather than a list of unrelated dates.",
        "qualification": "Fictional teaching example. Replace invented details with authorised content and keep any source, scope, status or uncertainty that affects interpretation."
      },
      "narrative_fit": {
        "before": "Establish the problem that made the old approach insufficient.",
        "after": "State the common lesson across the decisions and qualify what remains inference.",
        "good_uses": [
          "Long-form process explanation.",
          "A dated argument whose milestones need prose."
        ],
        "poor_fits": [
          "An unordered feature list.",
          "A timeline whose scroll position is mistaken for elapsed time."
        ]
      },
      "evidence": {
        "observations": [
          "Viewed base source: running prose is accompanied by a year/caption and a small sequence rail.",
          "Current HTML contains four .step passages with data-label/data-value/data-cap and a derived .dial; the conceptual steps/dial names are not data-slot attributes.",
          "The corrected matching contract explicitly maps steps to .steps .step and dial to .dial for dial states; section-rail instead uses its active story wrapper."
        ],
        "interpretations": [
          "A sequence of decisions becomes understandable as the reader moves through it, while a persistent cue locates the current passage. This is an interpretation of the inspected composition, not a verified claim of author intent."
        ],
        "not_verified": [
          "Original author intent, historical claims, persuasion and archive-wide frequency have not been independently verified."
        ],
        "references": [
          "02_product/spreads/S80-scroll-dial/source.webp",
          "02_product/spreads-semantics-2026-10-13/dist/S80-scroll-dial/spread.html",
          "02_product/spreads-semantics-2026-10-13/dist/S80-scroll-dial/spread.json"
        ]
      },
      "review": {
        "status": "reviewed",
        "basis": "Viewed the retained base source capture and inspected current HTML and matching slots; reviewed the fictional adaptation at layout-contract level. Rechecked integrated matching on 2026-10-13: required roles, example fills and repeated-item counts agree. Previously provisional because conceptual steps/dial roles lacked explicit markup mapping. The integrated contract now maps the four authored passages and derived dial explicitly; section-rail retains only its active story role. Historical issue details remain in contract-issues-reading.json. This review does not establish original author intent or verify playback."
      },
      "variation_relationship": "base"
    }
  },
  "options": [
    {
      "id": "dial-left",
      "what": "Dial on the left"
    },
    {
      "id": "no-odo",
      "what": "No rolling number, caption and rail only"
    },
    {
      "id": "no-rail",
      "what": "No rail"
    },
    {
      "id": "section-rail",
      "what": "Plain sticky section list left, authored panels right; links jump to each passage and active state follows scroll. No dial or rolling number in this option; mobile list flows above the text.",
      "sources": [
        {
          "ref": "Cult Feature Sticky Section",
          "url": "https://www.cult-ui.com/docs/components/feature-sticky-section"
        }
      ]
    }
  ],
  "also_seen_in": [
    "ObsidianUI Scroll Stack (https://www.obsidianui.dev/docs/scroll-stack, read 2026-09-23; removed in the 2026-09-23 site reset, no archive copy)",
    "Rare UI Animated counter (https://www.rareui.com/components/animatedcounter; MIT + Commons Clause + Attribution since 2026-09-22: a shipped page using this odometer must link rareui.com visibly)",
    "Cult Feature Sticky Section (https://www.cult-ui.com/docs/components/feature-sticky-section; captured 2026-10-10; private reference capture; independent native implementation)",
    "Nexvyn Table of Contents (https://ui.nexvyn.dev/components/table-of-contents; documentation reference only, no code copied; MIT + Commons Clause licence flag retained)"
  ],
  "source": {
    "ref": "Private deck reference; original evidence retained in the private Spreads library."
  }
}
