Expand description
income answer (D-8) — the ONLY in-app path to the fail-loud tri-states and the dates of birth.
Why it must exist. The D-8 migration’s recovery story was “just re-import one TOML line” — which
assumes the user still HAS the TOML. The spec tells them to delete it (plaintext hygiene), income show emits masked JSON and so cannot regenerate it, and set-pii prompts for secrets only. Without
answer, a TOML-less user faces a permanently-refusing year and no way to answer a single boolean: a
wall, landing hardest on the people who did exactly what the spec told them to.
What it deliberately does NOT own: secrets. SSNs and the IP PIN belong to set-pii, which is
no-echo. answer is an ordinary echoing prompt — routing a secret through it would print a crown jewel
into terminal scrollback.
Enums§
- Ask
- One thing
income answerasks: a MANDATORY declaration (from theFORM_QUESTIONSregistry — a bare Enter with nothing on file is refused, never accepted as an answer) or a SKIPPABLE prompt (from the coreSKIPPABLE_QUESTIONSregistry — a bare Enter leavesNone, forgoing the benefit lawfully).
Functions§
- answer_
return_ inputs income answer --year N— ask every live question, then store.- live_
questions - ★ EXACTLY the questions this return needs — the MANDATORY declarations DERIVED from the registry (so the prompt scope IS the refusal scope, by identity: the no-brick property is now true by construction, not by a second hand-written list that can drift, r1 M-1), then the skippable DOBs.
- parse_
date - Parse one date reply.
Ok(None)= the user SKIPPED (a bare Enter) — a legitimate outcome for a DOB. - parse_
yes_ no - Parse one yes/no reply.
""(a bare Enter) means “keepdefault”, and is only an ANSWER when there already is one — otherwise the caller must re-ask, because silence is exactly what D-8 forbids.