The Decision Engine
The skill-status engine sits at the center of the loop. It takes raw evidence (answered items, probe scores, observations) and turns it into an honest status per skill, per domain, and rolled up to six macro-domain tiles. It is fully deterministic: same input plus same rule version always yields the same output.
The five transformation layers
Evidence flows through five layers, each one refining the last:
| Layer | Name | What it does |
|---|---|---|
| 1. ADR | Assessment Decision Rules | Assigns each piece of evidence an interpretive Final Status Code (12 codes, e.g. confirmed_gateway_weakness, adequate_initial_signal). |
| 2. PAC / CIS | Pattern-Aware Confirmation / Confirmatory Item Selection | Decides whether a weak signal is worth confirming with a short 2-item mini-test, and how those items are picked. Broad patterns skip confirmation to avoid over-testing. |
| 3. SSR | Skill Status Rules | Combines code, pattern, and behavior into the per-skill SkillStatus (9 states) plus a confidence value. |
| 4. DDR | Domain Decision Rules | Aggregates skills into the per-domain DomainStatus (9 states), with explicit precedence. |
| 5. DSM | Domain-Status-to-Macro Map | Maps DomainStatus onto the macro tiles, including two honesty values (Partial, Contextual). |
A parallel Response Behavior Metadata stream annotates the scores with behavior flags (too-fast answers, long hesitations, repeated same option). It annotates and never overwrites.
The three outputs
SkillStatus (9 values, per skill)
adequate · monitor · weak_isolated · monitor_gateway · weak_gateway ·
weak_domain_related · broad_weakness_related ·
cautionary_weakness_with_metadata · contextual_review
DomainStatus (9 values, per domain)
adequate_domain · monitor_domain · isolated_skill_need ·
gateway_driven_domain_concern · coherent_domain_weakness ·
broad_related_domain_concern · partial_domain_profile ·
domain_weakness_with_behavior_metadata · contextual_domain_review
gateway_driven_domain_concern is the load-bearing state, since it carries the
Arabic-accuracy carve-out described below.
MacroDomainStatus (6 tiles + GLOBAL)
| Tile | Area |
|---|---|
READ_FOUND | Reading foundations |
ACC_FLU | Accuracy & fluency |
READ_COMP | Reading comprehension |
LISTEN_COMP | Listening comprehension |
LANG_COMP | Language for comprehension |
WR_SP | Writing & spelling |
GLOBAL is a meta-rollup for cross-cutting decisions only, never a dashboard tile.
Macro tiles roll up by status (worst-case-wins on Severe), never by averaging
numbers, so there is no single global percentage (V-3).
The do_not_decide_yet sentinel
This is the engine’s central safety value. When evidence is split or insufficient,
the engine refuses to commit and emits do_not_decide_yet.
do_not_decide_yet is a hard stop for every downstream consumer. Profiles,
bundles, alerts, and gamification must all halt and wait rather than act on a
not-yet-decided skill. Treating the sentinel as just another status is a bug,
because it means “do not act.”
The RTI decision layer is one of these consumers: a do_not_decide_yet skill is
one of the sentinel conditions its alert pipeline checks first, so a not-yet-decided
skill opens no alert and blocks any tier movement. See
RTI Decisions & Tiers for the full sentinel set.
The Arabic-accuracy carve-out
A small set of Arabic-orthography detail skills (shadda, tanween, hamza, madd, and similar) must never escalate a domain on their own. A child can be developing on these fine features while reading perfectly well. The engine routes them to a gentle monitor-only modifier instead of a domain concern.
This carve-out is enforced inside the engine, not bolted on afterward: these
indicators are excluded from gateway_driven_domain_concern and routed to
monitor / micro-practice only. They can inform a modifier profile, but they can
never, by themselves, raise a domain to a weakness.
Where to go next
- Skill-Status Engine guide: layer-by-layer detail and the rule tables.
- Student Profiles: how statuses compose into one named profile.
- Intervention Design: what happens once a profile is resolved.
- Glossary: every status value and ID family defined.