Skip to main content

Module screening

Module screening 

Source
Expand description

The call screening (docs/android.md, “Calls”): what becomes of a call from a number nobody knows. The owner’s decision of 14 October 2026: “call screening is not only distraction protection, it’s spam protection too, so it needs to be separated from don’t disturb mode and might get enabled 24/7”; its rules are the decisions 3 to 5 he took on 18 October 2026 (docs/attention.md, §10).

Apart: the people you know (your lists, your address books, the phone’s contacts, a number you called lately, Always through) are decided by the matrix of what reaches you, its Calls rows, the time and its layers (attention); everyone else by the screening alone, which neither do-not-disturb nor any state of yours switches off. What always rings (emergency numbers and their callback, the day after you call one, a second call within 15 minutes) and the blocked come before both (calls::decide).

What it screens, each kind on its own: a number in no address book (unknown), a hidden number (hidden), an automated caller (automated: ARCEP’s roots for machines), a number that cannot be a caller’s (impossible: one the plan forbids as a caller ID, 089), a number whose verification failed (unverified). The last three it keeps out at all hours, a second call too, while they go to voicemail. A number you called in the last 14 days counts as your contacts do (called). Its hours: at all hours, or only outside your work and admin hours (hours), for numbers nobody knows and hidden numbers. Whatever it lets ring by itself never rings where your contacts’ row declines (do-not-disturb, the night, a pause): only Expecting a call opens beyond (calls::decide; review of part 2, 19 October 2026). ARCEP’s list of the blocks it had attributed to no operator on a day decides nothing: a block attributed since may hold a new line. A declined call’s line only says it, while the list counts (unattributed_since).

Kept in [screening], shared with the settings; each key unsaid takes its first value: unknown and hidden numbers from your Calls rows of strangers and hidden numbers as they were before the screening was apart (never ringing where the row declined), the rest as decided. Written a key at a time, only when you change one; the first written also fixes unknown and hidden numbers at their first values, which the Calls rows then move no more (set). No preset nor any write of the matrix touches those rows (attention::screened). An older Sioul keeps the section as it is. The numbers known by their kind: data/screening-numbers.toml.

Structs§

Group
One group of prefixes, as the plan or ARCEP’s data says them.
Numbers
The numbers the screening knows by their kind (data/screening-numbers.toml).
Screening
The screening as it stands: [screening], each key unsaid at its first value.
Settings
[screening] as written, key by key: read leniently, so that a word this version does not know (a later version’s) never stops the configuration from reading; that key then takes its first value.
TablePart
What the calls’ table says of the screening (version 2), as Java reads it (Calls.Screening): the screening as it stands, and the prefixes it needs.

Enums§

Hours
When the screening screens.
Rule
What becomes of a call from a number in no address book, or of a hidden number.
Spam
What becomes of an automated caller, a number that cannot be a caller’s, a number whose verification failed.

Constants§

CALLED_DAYS
A number you called in the last this many days counts as your contacts do (a guess, research 8.3, step 6).
KEYS
The keys of [screening] and the words each takes (“bool”: on or off).
NUMBERS 🔒

Functions§

first_rule
A rule’s first value, from your Calls row of strangers or hidden numbers as it was before the screening was apart: the closest rule that never rings where the row declined. Ringing at every hour only when it rang at every time; ringing in work and admin hours when it rang in either; voicemail otherwise (review of part 2, F2: a row that rang in leisure alone once gave ringing at night). Its layers (time for you, do-not-disturb) are no part of the screening.
national
A number’s key (phones::key, “+33199001234”) in the French plan’s national form (“0199001234”), its overseas departments’ included (+262, +590, +594, +596: “+262262123456” is “0262123456”); none for any other.
set
One setting of the screening written (Settings ▸ This phone ▸ Call screening), key as “screening.unknown”: its value checked, then only that key, in place (config::set_value); the others keep their first values until you change them. Refused, said, for a key or a word it does not take.
shipped
The numbers as Sioul ships them, read once.
starts_with_any
Whether a national number starts with one of these prefixes.