# Choose taught print without prescribing the next sound

## Before the child reads

Use the school's actual teaching sequence and the learner's observed entry point. A **local declaration match is not demonstrated learner readiness**. These controlled lines use selected short-vowel single-letter spellings, `sh/ch`, initial `st`, final `nd` and an optional `ck` subset. This is a limited cumulative pool, not a complete phonics program. No letter/digraph is assumed taught merely because it appears here or the child is in Year 1.

Every child-print/dictation token has an explicit reviewed grapheme map in `pack-data.json`; `a` and `is` are explicit familiar-word entries, not inferred from an ordinary short-vowel letter. Digraph `sh/ch/ck` maps to one phoneme in the selected words; `st/nd` remain separate consonant sounds. Dialect/accent and the actual taught pronunciation are reviewed locally; no voice/hearing/motor mode selects the phonics sequence. Spellings are not translated mechanically into another language's decodable code.

## Runnable local selector · no network, writes or learner records

From this pack, with Python 3.10+:

- `python3 select_print.py --list` shows only ordinary practice lines and their required code/familiar words. It declares no matching or mastery.
- Copy the empty [two-list template](profile-template.json) **outside the published leaf**. Declare only the reviewed pool labels needed here, not a full school or child record. Unknown labels are rejected. Fill only the school-confirmed `taught_graphemes` and `taught_words`; no child names, dates, health or records. `python3 select_print.py --profile <school-code.json> --day 31` reports matching/unmatched lines and missing labels. A line requires every token's map, not just its first word. The selector reads that declaration but stores nothing.
- For a short direct declaration, `python3 select_print.py --graphemes s,a,m,t,o,n --familiar a --day 31` is an **illustrative declaration**, not a real learner finding. It can match the first line only if those labels were actually taught and the child is ready. Replace with actual local labels; this example is not the school's mandated scope.
- Teacher only: `python3 select_print.py --profile <school-code.json> --held E` (or F) checks the separate fresh print and teacher-key dictation component. Held print is absent from ordinary output. Keep it away until first capture; do not rehearse it. Dictation words remain in the separate key. A route may match reading but not dictation; sample matched components individually.

No profile/declaration means no assigned independent print. No matching supplied card means **keep adult-read literature, oral vocabulary and own composition open**, teach a missing link with school materials, or prepare and key a genuinely new matched alternative before use. Do not substitute adult reading then score decoding. A child can demonstrate useful language/components without every supplied reading card being suitable.

## Paper/no-device equivalent

Choose one card, split each word using the reviewed grapheme map and familiar-word entry. Tick only labels actually taught locally. If **any** label/familiar word is untaught, do not assign that card as independent print. Check actual observed readiness next. Select another fitting card or teach prior code separately. For held cases audit both word list and complete line, plus the separate dictated word independently; no full-check gate. The blank print page supports a locally selected line; its printed prompts are adult-read, not audited child print.

Actual independent first attempt, letter/sound prompts, adult readback, encoding, oral text, composition and handwriting are separate notices. This selector does not prove independent performance; no next grapheme is prescribed. School declaration, source words and learner outcomes are different facts. Longer or faster reading is not required. Original code Apache-2.0; original prose CC BY 4.0. No actual learner profile, teaching-effect result or classroom trial supplied.
