{
  "clear": "An explicit Clear current work asks confirmation if any word/model mark/edited own brief is present. Cancel preserves all state. Confirm resets all8words/ranges/model/selectedmarker/unit/view/current source to initial, while keeping saved versions; a separate clearly labelled Clear saved versions requires its own confirmation. Focus remains on the invoking Clear control. No automatic clear on route or view changes.",
  "fallback": "Initial ready=false, helper controls disabled or hidden, manual instructions and native source details visible. Set ready=true only after complete successful setup and initial render. Every helper callback, including input/count/selection/source/marker/version/view/reset, must return without any helper effect when not ready. On partial setup failure reset ready=false and disable controls. Manual text fields, native2400UTF16 limit, paper prompts and native details remain available; typing—even1201ASCII below native limit—must not trigger a helper reject/restore/count/status/model/version change. No automatic helper reinitialisation may overwrite manual words.",
  "fields": [
    "task",
    "known",
    "unknown",
    "representation",
    "number_sentence",
    "strategy",
    "check",
    "message"
  ],
  "initial": "All eight learner strings empty. All100 numbered markers in the tray, no marker selected, unit label 'items', Plan view, source 'own brief', both saved versions absent. No teacher answer, model or assessment inference may be prefilled.",
  "limits": {
    "definition": "Array.from(text).length measures code points; combining marks can count separately. Native maxlength measures UTF-16 units. Preserve line breaks, punctuation, angle brackets, emoji and home-language text literally; never interpret text as markup or executable code.",
    "helper_unicode_codepoints_each": 1200,
    "native_maxlength_utf16_each": 2400
  },
  "limits_behaviour": "When helper ready and an input exceeds1200 code points, reject the proposed change as a whole; restore its immediately preceding exact string and valid selection range/direction, without changing any other field/source/model/view/version. In-limit edits preserve text and range normally. Word counts describe actual current text. Successful actions preserve native typing, selection, newline and undo as far as tested; do not claim browser-wide undo parity without actual evidence.",
  "markers": {
    "capacity": "Every destination may hold up to100 markers; total remains100. No fractional markers, cloning, disappearing items or auto-grouping. Select a marker and then a destination using buttons/list controls; drag is never required.",
    "count": 100,
    "destinations": [
      "tray",
      "group01",
      "group02",
      "group03",
      "group04",
      "group05",
      "group06",
      "group07",
      "group08",
      "group09",
      "group10"
    ],
    "identity": "Exactly100 unique markers M001–M100, each in exactly one destination. Visual marker is an abstract whole item, not a banknote, person, cultural symbol or guaranteed real object.",
    "scope": "Use markers only for whole item quantities up to100 and at most10 groups; totals of dollar costs live in labelled written fields. If the intended model needs more groups or markers, use an equivalent clearly labelled bundle model chosen by the learner or paper; never silently truncate, auto-scale or pretend an unsupported model is complete.",
    "unit_change": "Changing a unit is a reinterpretation. If any marker has left the tray or any learner word is present, ask for confirmation before committing even if all words are blank but a model exists. Cancellation preserves every word/range/marker/unit/source/view/version. Confirmation changes only the unit label and gives a plain reminder to check meaning.",
    "units": [
      "items",
      "cards",
      "labels",
      "packs",
      "own unit label"
    ]
  },
  "name": "Plan Bench",
  "nojs": "Show all full briefs and blank fields/details without script. Disable helper-only controls; paper instructions present. Verify actual JS-disabled page separately from forced failed initialization and from ready=true; none substitutes for the others.",
  "own_pages": "Eight target modules V01–V08 each provide4 full held prompts and4 corresponding new next-teaching cases to staff. Their learner own pages have4 initially blank labelled text spaces: model, number sentence and strategy, check, useful message. Every field has the same native/helper length definitions and inert-fallback rule; no teacher answer in an own space. Successful range/overflow and manual/noJS/forcedfail tests cover all8pages×4fields.",
  "paper": "Copy the complete selected brief and8labels onto paper. Use group circles/large counters, write the unit, use two dated paper versions if useful, and record source/route/view. The paper model has no100-marker software limit. Read the same teacher example and criteria; do not claim equivalent observation until actually tried.",
  "purpose": "Help a learner build a manual model and a useful explanation; it must not solve, grade or infer mastery.",
  "required_future_tests": [
    "Full mathematical/state constructor checks and a different whole Source/art review, with all20 actual renders/complete alts/40own-response white interiors inspected.",
    "Actual human native use: each full source and field, own brief, allviews, two complete saved versions, reading versus restore, blank restore, range direction, independent selections, marker moves/capacity/unit-model-only confirmation, clear/cancel/focus.",
    "All8Studio fields and8×4own fields: in-limitASCII,1200ASCII,1201ASCII,1200astral/2400UTF16, mixedArabic/combining/newline/angle-bracket text and overflow below native2400; success and forced-init-failure contexts.",
    "Forced failure after listeners attach, noJS and paper separately. Every fallback input must leave helper state/count/status inert; native maxlength is a separate browser condition.",
    "Source modal native keyboard heading/forward/reverse boundaries/interior, Back/Escape/current source; full8word/version body equality, never subset witnesses.",
    "Meaningful teacher, child/parent and funder walkthroughs with exact outcomes and limitations. No print, assistive-technology, narration or annual-standard claim from DOM checks alone."
  ],
  "sources": {
    "catalogue": "All30 full A/B/C lesson briefs, C20 individual exits for teacher selection, H10/X10 optional tasks, all32 full held prompts and a clearly marked own brief. Exact sourceID, title and full source body available through native details. No truncation or summary may replace the working brief.",
    "reading": "Native details and full textual sources must remain usable with JS disabled or helper unavailable. A successful helper may provide explicit Back/Escape, but must preserve current selected source and all learner/model/version state. Closing is not restoring an older source. On close focus returns to the source chooser; normal interior Tab navigation remains native and only unmodified boundary Tab may close when appropriate. Test heading, first/last boundary and reverse interior separately.",
    "selection": "Choosing or editing a source changes only the selected source identity/body. Preserve all learner strings, ranges, markers, unit, view and both versions. Selection does not fill any field or move any marker. Own brief text remains available when returning to own source."
  },
  "status": "Complete written contract only; no executable experience or runtime acceptance.",
  "versions": {
    "read": "Read version shows the entire literal snapshot for all8 words and complete source/model state, with clear identity and no ellipsis. Reading never changes the current work.",
    "restore": "Explicit Restore replaces the current state with the entire snapshot, including intentionally blank fields. Ask for confirmation when current work would be replaced. Cancellation leaves every component exact. After successful restore, show which version was restored and keep keyboard focus on the invoking control.",
    "save": "Each explicit Save captures all8 full strings, all8 selection ranges/directions, chosen sourceID and complete source body/own brief, selected view, all100 marker locations/selected marker and unit label. No automatic save or silent overwrite; ask before replacing a filled slot.",
    "slots": 2,
    "storage": "Memory only within this page session by default. No accounts, server writes, tracking, local storage or transmitted learner input. Plain JSON download may be an explicit reviewed feature later, not a claim here."
  },
  "views": [
    "Plan",
    "Model",
    "Check",
    "Explain"
  ]
}
