Overview / Policy
Nothing in the gate hard-codes a legal threshold. Every rule below is read from
policy.json at runtime, and the same file drives the Python gate
and the Node Agent Skill. A test runs both over the same accounts and compares every verdict.
Version 1.0.0
Stated plainly, because an overclaim here would be the costly kind.
ALLOW is necessary for this policy, not proof a call is lawful.Rules 1–4 run before dialling. Rule 5 runs during and after the call. Each carries the property it enforces, written as a temporal-logic formula: G is “always”, F is “eventually”.
| Rule | Requirement | On failure | Authority | Property |
|---|---|---|---|---|
|
R1 call window before dialling |
Dial only between 08:00 and 21:00 in the recipient's stored local timezone. | OUTSIDE_CALL_WINDOW | FDCPA 1692c(a)(1); Regulation F 12 CFR 1006.6(b)(1)(i) | G(dial -> local_time_within(08:00, 21:00)) |
|
R2 consent on file before dialling |
Dial only when prior express consent is recorded with a consent timestamp. | NO_CONSENT | TCPA 47 U.S.C. 227(b)(1)(A) | G(dial -> consent_on_file & consent_timestamp_present) |
|
R3 not suppressed before dialling |
Never dial a number on the opt-out or do-not-call suppression list. | ON_SUPPRESSION_LIST | TCPA 47 CFR 64.1200(d); FDCPA 1692c(c) | G(suppressed(number) -> G(!dial(number))) |
|
R4 disclosure ready before dialling |
The rendered call script must contain every required disclosure element before the call is placed. | MISSING_DISCLOSURE | FDCPA 1692e(11); TCPA 47 U.S.C. 227(d)(3)(A) | G(dial -> script_contains(all disclosure_elements)) |
|
R5 live revocation during the call |
If the recipient revokes consent during the call, end the call, record the opt-out, and suppress the number. | OPT_OUT | TCPA 47 CFR 64.1200(a)(10); Regulation F 12 CFR 1006.6(c) | G(revocation_detected -> F(end_call & suppressed(number))) |
Rule 4 refuses a script missing any of these.
| caller_identity | The call names the calling entity and, when acting for a creditor, who it is calling on behalf of. |
| automated_voice_identity | The call states that the caller is an automated or AI assistant. |
| debt_collection_purpose | FDCPA 1692e(11) purpose disclosure: an attempt to collect a debt and information obtained will be used for that purpose. |
| opt_out_instruction | The call tells the recipient how to stop future calls. |
Rule 5 matches these in recipient turns only, so the agent's own “say stop calling” disclosure never counts. The list is a floor, not a ceiling: an opt-out the agent understands but that is not listed must still be honoured.
stop callingstop calling mequit callingno more callsdont call medont call againdont call this numberdo not call medo not call againdo not call this numbertake me off your listtake me off the listremove me from your listput me on your do not call liststop contacting meopt outopt me outunsubscribe me