{
  "tool_id": "733-servicing-compliance-clock",
  "inventory_version": "1.0.0",
  "authored_at": "2026-10-14",
  "error_direction": "undirected",
  "error_direction_rationale": "The kernel is exact per-rule date arithmetic: every deadline is the cited paragraph's own day count re-implemented (5/7/10/15/30/45/60/120/210/240-day figures taken verbatim), the business-day basis excludes exactly the legal public holidays, Saturdays and Sundays the Reg X text names, and the federal-holiday calendar is a NAMED assumption carried on every business-day output rather than a silent approximation. The one convention choice (the 120-day delinquency day-count in 1024.41(f)(1)(i)) is declared in the inventory branch and on the output itself. The honest direction is undirected.",
  "derived_from": [
    {
      "digest": "sha256:4ba07a2cda51b672bb72e4e422fd1ac373da7ff6f56d7a9d39da62e5e294af51",
      "clause_path": "12 CFR 1024.35(d), (e)(3)(i)(A)-(C), (e)(3)(ii) -- error-resolution clocks"
    },
    {
      "digest": "sha256:d514f793b947b502a5c6d7cad9ad6b9ffd005045bee33a382eee764287eeac47",
      "clause_path": "12 CFR 1024.36(c), (d)(2)(i)(A)-(B), (d)(2)(ii) -- information-request clocks"
    },
    {
      "digest": "sha256:0f43d420b6f01e8f2692dacdfced6478271d55fd3d3a91823d81d325c98dcf22",
      "clause_path": "12 CFR 1024.41(b)(2)(i), (c)(1), (f)(1)(i), (g), (i) -- loss mitigation clocks (post-IFR text)"
    },
    {
      "digest": "sha256:4fd8cc42328922cbdec7f9e16dcb01b0b14c40b9eb237600575bea7265ea2892",
      "clause_path": "12 CFR 1024.37(c)(1)(i), (d)(1), (g) -- force-placed insurance clocks"
    },
    {
      "digest": "sha256:fd6aa0f8f7de47e059706f50668cd1da5c917f93a09eff5a6e326f2e02b95ce3",
      "clause_path": "12 CFR 1026.36(c)(1)(i), (c)(1)(iii), (c)(3) -- crediting and payoff clocks"
    },
    {
      "digest": "sha256:d4c33e29695ae80e54a7e389c1046b71c74c828d536bceca2adf4758fc1ba1a8",
      "clause_path": "12 CFR 1026.20(c)(2), (d) -- ARM notice windows"
    }
  ],
  "branches": [
    {
      "id": "s35d-error-ack-5-business-days",
      "clause": "12 CFR 1024.35(d)",
      "branch": "Within five days (excluding legal public holidays, Saturdays, and Sundays) of receiving a notice of error the servicer must provide a written acknowledgment of receipt.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule error_acknowledgment; the due date lands the clock on a business day over the named federal-holiday calendar. Reachable conformance fixture: error-ack-5bd-over-thanksgiving."
    },
    {
      "id": "s35e3iC-investigation-30-business-days",
      "clause": "12 CFR 1024.35(e)(3)(i)(C)",
      "branch": "For all other asserted errors, not later than 30 days (excluding legal public holidays, Saturdays, and Sundays) after the servicer receives the notice of error, the servicer shall determine whether an error occurred.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule error_investigation, error_category 1-5, 7, 8, or 11."
    },
    {
      "id": "s35e3iA-investigation-7-business-days-payoff",
      "clause": "12 CFR 1024.35(e)(3)(i)(A)",
      "branch": "Errors asserted under paragraph (b)(6) (an inaccurate payoff balance) carry a seven-business-day response window.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule error_investigation with error_category 6. Reachable conformance fixture: error-investigation-cat6-7bd-columbus."
    },
    {
      "id": "s35e3iB-investigation-sale-bounded",
      "clause": "12 CFR 1024.35(e)(3)(i)(B)",
      "branch": "For errors asserted under paragraphs (b)(9) and (10), the response window is the earlier of the foreclosure sale date or 30 days after the notice of error.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule error_investigation with error_category 9 or 10 and a supplied foreclosure_sale_date; the deadline is cut to the day before the sale when that is earlier (deadline_bound_by_foreclosure_sale=true). Reachable conformance fixture: error-investigation-cat10-sale-bound."
    },
    {
      "id": "s35e3ii-investigation-extension",
      "clause": "12 CFR 1024.35(e)(3)(ii)",
      "branch": "For 30-day-window errors the servicer may extend the response period by an additional 15 days (excluding legal public holidays, Saturdays, and Sundays) on written notice before the end of the 30-day period; no extension is available for (b)(6), (9), or (10) errors.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "extension_notice_given=true moves the deadline 15 further business days and re-cites the extension paragraph; categories 6/9/10 are never extended. Reachable conformance fixture: error-investigation-cat3-extension."
    },
    {
      "id": "s36c-info-ack-5-business-days",
      "clause": "12 CFR 1024.36(c)",
      "branch": "Within five days (excluding legal public holidays, Saturdays, and Sundays) of receiving an information request the servicer shall acknowledge receipt in writing.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule info_request_acknowledgment."
    },
    {
      "id": "s36d2iAB-response-windows",
      "clause": "12 CFR 1024.36(d)(2)(i)(A)-(B)",
      "branch": "Owner/assignee identity requests carry a 10-business-day response window; all other information requests carry 30 business days.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule info_request_response with request_type owner_identity | other. Reachable conformance fixtures: info-request-owner-10bd, info-request-other-30bd-met."
    },
    {
      "id": "s36d2ii-response-extension",
      "clause": "12 CFR 1024.36(d)(2)(ii)",
      "branch": "For 30-day-window information requests the servicer may extend the response period by an additional 15 days on written notice; no extension is available for owner-identity requests.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "Reachable conformance fixture: info-request-other-45bd-extended-breached (extension applied, action late, cited_paragraph names the extension paragraph)."
    },
    {
      "id": "s41b2iB-loss-mit-ack-5-business-days",
      "clause": "12 CFR 1024.41(b)(2)(i)-(ii)",
      "branch": "If a loss mitigation application is received 45 days or more before a foreclosure sale, the servicer shall notify the borrower in writing within 5 days (excluding legal public holidays, Saturdays, and Sundays) that the application is complete or incomplete.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule loss_mit_acknowledgment; the 45-day applicability gate is computed from the supplied foreclosure_sale_date. Reachable conformance fixtures: loss-mit-ack-5bd-in-scope (owed) and loss-mit-ack-out-of-scope-under-45 (not owed)."
    },
    {
      "id": "s41c1-evaluation-30-days",
      "clause": "12 CFR 1024.41(c)(1)",
      "branch": "If a servicer receives a complete loss mitigation application more than 37 days before a foreclosure sale, then within 30 days of receiving it the servicer shall evaluate the application and take one of the actions the paragraph enumerates.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule loss_mit_evaluation; calendar-day basis (the paragraph says days, not business days); the 37-day gate is computed when the sale date is supplied. Reachable conformance fixture: loss-mit-evaluation-30d-in-scope."
    },
    {
      "id": "s41c1g-37-day-presale-boundary",
      "clause": "12 CFR 1024.41(c)(1); 12 CFR 1024.41(g)",
      "branch": "Applications received more than 37 days before a foreclosure sale are inside the section; applications 37 days or less before a sale are outside the section's evaluation duties and the (g) sale prohibition, per the paragraph text of (c)(1) and (g).",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule presale_37day_boundary emits the measured day count and obligation_owed; the out-of-boundary side sets state breached with the outside-1024-41 state reason (a scope verdict, not a servicer violation). Reachable conformance fixture: presale-boundary-inscope-45days; the out-of-boundary side is exercised by the reachability-adjacent proptest corpus (P5 family) and by loss-mit-ack-out-of-scope-under-45 for the same 37-day arithmetic's neighbor gate."
    },
    {
      "id": "s41f1i-120-day-pre-foreclosure-bar",
      "clause": "12 CFR 1024.41(f)(1)(i)",
      "branch": "A servicer shall not make the first notice or filing required by applicable law for any judicial or non-judicial foreclosure process unless the mortgage loan obligation is more than 120 days delinquent.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule foreclosure_referral_120day. Named day-count convention (declared on the output): days delinquent on D = D minus the delinquency date in calendar days, so the earliest lawful first-notice date is delinquency_date + 121. Reachable conformance fixture: foreclosure-120day-bar-breached."
    },
    {
      "id": "s41f1ii-iii-other-bar-exits",
      "clause": "12 CFR 1024.41(f)(1)(ii)-(iii)",
      "branch": "The pre-foreclosure review period does not bar foreclosure based on a due-on-sale clause violation or where the servicer joins the foreclosure action of a superior or subordinate lienholder.",
      "disposition": "out_of_scope_by_input",
      "assumption_of_use": {
        "value": "that the contemplated first notice or filing rests on the delinquency ground",
        "source": "the caller's foreclosure-basis determination, made before invoking the node",
        "owner": "the caller"
      },
      "note": "Due-on-sale and lienholder-joinder facts are not date/value inputs of this node; the kernel computes the (f)(1)(i) delinquency clock only and never assumes another ground."
    },
    {
      "id": "s41i-no-duplicate-processing",
      "clause": "12 CFR 1024.41(i)",
      "branch": "The section applies to a borrower's loss mitigation application unless the servicer has previously complied for a complete application and the borrower has been delinquent at all times since submitting it.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule no_duplicate_processing; the duplicative case reports the duties as not re-owed with the paragraph citation intact. Reachable conformance fixture: no-duplicate-duties-not-re-owed."
    },
    {
      "id": "s37c1i-fpi-initial-notice-45-days",
      "clause": "12 CFR 1024.37(c)(1)(i)",
      "branch": "Before assessing a force-placed insurance charge the servicer must deliver or mail the written notice at least 45 days before the charge.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule fpi_initial_notice; due_date is charge_date - 45 calendar days. Reachable conformance fixture: fpi-initial-45d-met."
    },
    {
      "id": "s37d1-fpi-reminder-window",
      "clause": "12 CFR 1024.37(d)(1)",
      "branch": "The reminder notice must be delivered at least 15 days before the charge, and may not be delivered until at least 30 days after the initial notice.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule fpi_reminder_notice emits both window edges; a delivery outside either edge breaches with the specific reason. Reachable conformance fixtures: fpi-reminder-window-met and fpi-reminder-window-breached-early."
    },
    {
      "id": "s37g-fpi-cancel-refund-15-days",
      "clause": "12 CFR 1024.37(g)",
      "branch": "Within 15 days of receiving evidence of compliant hazard coverage the servicer must cancel the force-placed insurance and refund overlapping charges.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule fpi_cancel_refund; calendar-day basis. Reachable conformance fixture: fpi-cancel-refund-15d."
    },
    {
      "id": "s1026c1i-credit-date-of-receipt",
      "clause": "12 CFR 1026.36(c)(1)(i)",
      "branch": "A servicer may not fail to credit a periodic payment as of the date of receipt (absent a no-charge delay or the (c)(1)(iii) exception).",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule payment_credit_date_of_receipt; the deadline IS the receipt date. Reachable conformance fixture: payment-credit-date-of-receipt-breached."
    },
    {
      "id": "s1026c1iii-nonconforming-5-days",
      "clause": "12 CFR 1026.36(c)(1)(iii)",
      "branch": "A payment that does not conform to written payment requirements but is accepted must be credited as of five days after receipt.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule nonconforming_payment_credit. Reachable conformance fixture: nonconforming-payment-5d-met."
    },
    {
      "id": "s1026c3-payoff-7-business-days",
      "clause": "12 CFR 1026.36(c)(3)",
      "branch": "An accurate payoff statement must be sent within a reasonable time, but in no case more than seven business days, after a written request.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule payoff_statement; the paragraph's own 'seven business days' phrase is the computed clock. Reachable conformance fixture: payoff-statement-7bd."
    },
    {
      "id": "s1026c3-payoff-reasonable-time-exceptions",
      "clause": "12 CFR 1026.36(c)(3) (reasonable-time branch)",
      "branch": "When the loan is in bankruptcy or foreclosure, is a reverse or shared-appreciation mortgage, or a natural disaster or similar circumstance intervenes, the payoff statement is due within a reasonable time rather than seven business days.",
      "disposition": "out_of_scope_by_input",
      "assumption_of_use": {
        "value": "that none of the paragraph's reasonable-time conditions applies to the request",
        "source": "the caller's loan-status determination, made before invoking the node",
        "owner": "the caller; loan-status facts (bankruptcy, foreclosure, disaster) are not date/value inputs of this node and are never assumed satisfied or unsatisfied"
      },
      "note": "The kernel computes the seven-business-day clock only. This is one of the node's declared exclusions: no bankruptcy stays."
    },
    {
      "id": "s1026c2-arm-standard-60-120",
      "clause": "12 CFR 1026.20(c)(2) (base window)",
      "branch": "Rate-adjustment disclosures with a corresponding payment change are provided at least 60 but no more than 120 days before the first payment at the adjusted level is due.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule arm_payment_change_notice, standard variant; early or late disclosure breaches with the direction named. Reachable conformance fixtures: arm-standard-60-120-met and arm-standard-too-early-breached."
    },
    {
      "id": "s1026c2-arm-fast-cycle-25-day-floor",
      "clause": "12 CFR 1026.20(c)(2) (25-day floor)",
      "branch": "For ARMs with uniformly scheduled adjustments every 60 days or more frequently, and for ARMs originated before January 10, 2015 whose contract uses an index figure less than 45 days old, the window floor drops to 25 days (still no more than 120).",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "adjustment_frequency_days <= 60 or the pre-2015 short-index flags select the variant; window_variant fast_cycle_25_day_floor. Reachable conformance fixture: arm-fast-cycle-25d-floor."
    },
    {
      "id": "s1026c2-arm-estimated-rate-consummation",
      "clause": "12 CFR 1026.20(c)(2) (estimated-rate case)",
      "branch": "For the first adjustment occurring within 60 days of consummation where the rate disclosed at consummation was an estimate, disclosures are provided as soon as practicable, but not less than 25 days before the first adjusted payment.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "window_start_date is null in this variant (no fixed floor: 'as soon as practicable'); deadline is 25 days before the adjusted payment. Reachable conformance fixture: arm-estimated-rate-consummation-case."
    },
    {
      "id": "s1026d-arm-initial-210-240",
      "clause": "12 CFR 1026.20(d)",
      "branch": "Initial rate adjustment disclosures are provided at least 210 but no more than 240 days before the first payment at the adjusted level is due.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "rule arm_initial_adjustment_notice, standard variant. Reachable conformance fixture: arm-initial-210-240-met."
    },
    {
      "id": "s1026d-arm-initial-at-consummation",
      "clause": "12 CFR 1026.20(d) (at-consummation case)",
      "branch": "If the first payment at the adjusted level is due within the first 210 days after consummation, the disclosures are provided at consummation.",
      "disposition": "represented",
      "evidence": "obligations",
      "note": "The window collapses to the consummation date itself (window_variant at_consummation_disclosure_case). Reachable conformance fixture: arm-initial-at-consummation-case."
    },
    {
      "id": "s39e-covid-forbearance-request-removed",
      "clause": "former 12 CFR 1024.39(e) (rescinded by the 2025 interim final rule, 90 FR 20791/20792, effective 2025-07-15; the retrieved 1024.41 section's amendment trail carries 90 FR 20792, May 16, 2025)",
      "branch": "The COVID-19 forbearance-request branch existed in section 1024.39(e) until the 2025 interim final rule rescinded it; the post-IFR regulation no longer contains it.",
      "disposition": "refused",
      "refusal": {
        "flag": "RULE_REMOVED_BY_2025_IFR_REFUSED",
        "payload_marker": "manual_review_required",
        "reachability_vector": {
          "events": [
            {
              "rule": "covid_forbearance_request",
              "trigger_date": "2026-10-14"
            }
          ]
        },
        "fixture": "733-servicing-compliance-clock.reachability.json#removed-1024-39e-branch-reaches-refusal"
      },
      "note": "Removed text is never computed against: the id is a named refusal (post-IFR absence by construction), asserted by the floor's P5 property for arbitrary trigger dates."
    },
    {
      "id": "invalid-or-ambiguous-date-refusal",
      "clause": "AUTHORING-STANDARD section 1 (closed refusal set); bounded-date domain",
      "branch": "A trigger or action date that is not a strict valid ISO YYYY-MM-DD calendar date within the bounded 1970-2099 horizon (e.g. 2026-02-30) is ambiguous and cannot ground a compliance clock.",
      "disposition": "refused",
      "refusal": {
        "flag": "INVALID_OR_AMBIGUOUS_DATE_REFUSED",
        "payload_marker": "manual_review_required",
        "reachability_vector": {
          "events": [
            {
              "rule": "error_acknowledgment",
              "trigger_date": "2026-02-30"
            }
          ]
        },
        "fixture": "733-servicing-compliance-clock.reachability.json#ambiguous-date-reaches-refusal"
      },
      "note": "The refused date value is located (event_index + field) and never computed on; no obligation is emitted for the refused run."
    },
    {
      "id": "unknown-rule-refusal",
      "clause": "AUTHORING-STANDARD section 1 (closed refusal set)",
      "branch": "A rule id outside the kernel's enumerated catalog has no pinned paragraph, so no clock can be computed for it.",
      "disposition": "refused",
      "refusal": {
        "flag": "UNKNOWN_RULE_REFUSED",
        "payload_marker": "manual_review_required",
        "reachability_vector": {
          "events": [
            {
              "rule": "payoff_statement_next_day",
              "trigger_date": "2026-10-14"
            }
          ]
        },
        "fixture": "733-servicing-compliance-clock.reachability.json#unknown-rule-reaches-refusal"
      }
    },
    {
      "id": "events-missing-or-over-bound-refusal",
      "clause": "AUTHORING-STANDARD section 1 (bounded corpus)",
      "branch": "The kernel computes over a bounded event corpus: a missing/empty events array, or more than 32 events in one run, is refused rather than silently truncated.",
      "disposition": "refused",
      "refusal": {
        "flag": "EVENTS_MISSING_REFUSED",
        "payload_marker": "manual_review_required",
        "reachability_vector": {},
        "fixture": "733-servicing-compliance-clock.reachability.json#events-missing-reaches-refusal"
      },
      "note": "The over-bound face (33 events -> EVENTS_EXCEED_BOUNDED_32_REFUSED) is a separate refusal flag with its own committed vector: events-over-bound-reaches-refusal."
    },
    {
      "id": "missing-required-date-refusal",
      "clause": "AUTHORING-STANDARD section 1 (closed refusal set)",
      "branch": "A rule whose deadline arithmetic needs a second date (e.g. the force-placed charge date) cannot run without it; a missing or invalid required date parameter is refused with the parameter named.",
      "disposition": "refused",
      "refusal": {
        "flag": "MISSING_REQUIRED_DATE_REFUSED",
        "payload_marker": "manual_review_required",
        "reachability_vector": {
          "events": [
            {
              "rule": "fpi_initial_notice",
              "trigger_date": "2026-10-14"
            }
          ]
        },
        "fixture": "733-servicing-compliance-clock.reachability.json#missing-required-date-reaches-refusal"
      }
    },
    {
      "id": "invalid-parameter-refusal",
      "clause": "AUTHORING-STANDARD section 1 (closed refusal set)",
      "branch": "Rule-specific enums are validated before any arithmetic: an error category outside the eleven enumerated categories, an unknown request_type, a non-positive adjustment frequency, or no-duplicate parameters without a valid prior-application date and continuous-delinquency boolean are refused.",
      "disposition": "refused",
      "refusal": {
        "flag": "INVALID_PARAMETER_REFUSED",
        "payload_marker": "manual_review_required",
        "reachability_vector": {
          "events": [
            {
              "rule": "error_investigation",
              "trigger_date": "2026-10-14",
              "error_category": 12
            }
          ]
        },
        "fixture": "733-servicing-compliance-clock.reachability.json#invalid-error-category-reaches-refusal"
      },
      "note": "The no-duplicate parameter face has its own committed vector: invalid-no-duplicate-params-reaches-refusal."
    },
    {
      "id": "business-day-calendar-named-assumption",
      "clause": "12 CFR 1024.35(d)/1024.36(c)/1024.41(b)(2)(i)(B) 'excluding legal public holidays, Saturdays, and Sundays'; 12 CFR 1026.36(c)(3) 'seven business days'",
      "branch": "The business-day basis needs a concrete holiday calendar; the paragraphs name the exclusion class but do not print a calendar.",
      "disposition": "out_of_scope_by_input",
      "assumption_of_use": {
        "value": "the U.S. federal legal public holidays under 5 U.S.C. 6103, with Saturday-to-Friday and Sunday-to-Monday observance shifts",
        "source": "declared on every business-day output as calendar: us_federal_holidays_observed -- never implicit",
        "owner": "the kernel declares it; a caller needing a state-specific or bank-specific calendar must treat the computed dates as the federal-basis clock"
      },
      "note": "No state-law holiday overlays are modeled (a declared exclusion); the calendar assumption travels with each output rather than hiding in the arithmetic."
    },
    {
      "id": "state-law-bankruptcy-heloc-exclusions",
      "clause": "node description (declared exclusions); 12 CFR 1024.41(a) (no state-law overlay created); 12 CFR 1026.36(c)(3) reasonable-time branch (bankruptcy)",
      "branch": "No state-law overlays, no bankruptcy stays, no HELOC open-edge cases.",
      "disposition": "out_of_scope_by_input",
      "assumption_of_use": {
        "value": "that the loan is a closed-end first-lien mortgage loan serviced under the cited federal paragraphs, with no state-law overlay and no bankruptcy stay in force",
        "source": "the caller's regime determination, made before invoking the node",
        "owner": "the caller"
      },
      "note": "These are declared refusals-by-scope: no input accepts a state-law overlay, stay, or HELOC draw fact, and the kernel computes nothing that would silently assume them away or satisfied."
    }
  ]
}
