Skip to content

Commit 0aa7888

Browse files
committed
fix(pipeline): reject undated FCC rows and track record freshness
The old liveness tests assumed a successful fetch meant current complaint data; that assertion was wrong for a stalled cursor. The release-drift fixture also never exercised the importer's actual ok/error statuses. Updated both contracts and regenerated the signed feed after the FCC catch-up import.
1 parent ff1751d commit 0aa7888

272 files changed

Lines changed: 58521 additions & 47330 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.gitignore‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ local.properties
1414
*.apk.sha256
1515
*.aab
1616
*.aab.sha256
17+
*.md
18+
!README.md
1719
*.jks
1820
*.keystore
1921
*.pem

‎CHANGELOG.md‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ All notable changes to CallShield will be documented in this file.
44

55
## Unreleased
66

7+
- The FCC import now ignores complaints with no issue date or a future date.
8+
Its saved cursor advances to a valid complaint, and the weekly source check
9+
uses the newest complaint date so an empty fetch can't hide a stalled feed.
10+
Release checks now recognise the importer's success and failure statuses.
11+
- A catch-up import processed 500,000 FCC complaints and refreshed evidence on
12+
7,638 existing numbers. The database still holds 51,806 numbers (feed v46).
13+
714
## v1.8.1 (2026-09-25)
815

916
### Protection

‎README.md‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
---
3232

33-
CallShield blocks spam calls and texts using a **15+ layer on-device detection engine** with a gradient-boosted tree ML scorer, bounded campaign and churn evidence, conservative carrier identity metadata signals, an RCS notification filter, and real-time caller ID. Its 51,755-number database sits alongside a trending-numbers feed the app checks every 30 minutes. There are no accounts or tracking.
33+
CallShield blocks spam calls and texts using a **15+ layer on-device detection engine** with a gradient-boosted tree ML scorer, bounded campaign and churn evidence, conservative carrier identity metadata signals, an RCS notification filter, and real-time caller ID. Its 51,806-number database sits alongside a trending-numbers feed the app checks every 30 minutes. There are no accounts or tracking.
3434

3535
The database keeps `data/spam_numbers.json` as a stable legacy GitHub-raw
3636
endpoint for older clients, while current builds bundle a hash manifest and
@@ -315,7 +315,10 @@ can decay or remove only that community-only contribution. FTC and FCC runs
315315
persist bounded high-water cursors in `data/source-cursors.json`, which the
316316
importer creates on its first run. They keep caller-ID and callback-business
317317
evidence as separate roles, and don't promote unverified complaint-only rows
318-
without independent caller corroboration.
318+
without independent caller corroboration. The importer leaves out complaints
319+
with missing or future dates. `data/source-freshness.json` records the newest
320+
complaint date, and the weekly check flags an FTC or FCC feed when that date
321+
falls outside its freshness window.
319322

320323
The importer also accepts a carrier-authorized Nomorobo IRS callback-scam CSV
321324
feed without embedding credentials in the app. Pass the HTTPS URL with

‎data/README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ This directory contains the spam number database that the CallShield app pulls f
1111
- `spam_model_weights.json`: Versioned on-device GBT and logistic fallback weights
1212
- `source-manifest.json`: Feed access, license, geography, attribution, and parser contract
1313
- `source-snapshot.json`: Per-run source health, checksum, accepted/rejected counts, and failures
14-
- `source-freshness.json`: Each upstream source's last successful import, kept across runs. The weekly liveness workflow checks daily and weekly sources against `stale_after_days`. A source with an `import_flag` in the manifest only imports with that flag, so it's checked once it has been imported and the failure message names the flag
14+
- `source-freshness.json`: Each upstream source's last successful import and the newest complaint date for FTC and FCC. The weekly liveness check compares complaint dates, rather than fetch times, with `stale_after_days`. A source with an `import_flag` in the manifest is checked once it has been imported, and the failure message names the flag
1515
- `spam_domains_approved.json`: Optional maintainer approval input for domain candidates
1616
- `spam_domains_review.json`: Generated domain candidates awaiting approval
1717
- `not_spam_review.json`: Generated community false-positive review candidates

‎data/source-cursors.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
"schema_version": 1,
33
"sources": {
44
"fcc_complaints": {
5-
"timestamp": "9999-12-15T00:00:00.000",
6-
"id": "46486"
5+
"timestamp": "2026-09-26T00:00:00.000",
6+
"id": "9140121"
77
}
88
}
99
}

‎data/source-freshness.json‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
{
2-
"schema_version": 1,
2+
"schema_version": 2,
33
"last_success": {
4-
"community_reports": "2026-09-25T17:33:14+00:00",
5-
"fcc_complaints": "2026-09-25T17:33:14+00:00",
4+
"community_reports": "2026-09-26T00:59:25+00:00",
5+
"fcc_complaints": "2026-09-26T00:59:25+00:00",
66
"saracroche_prefixes": "2026-09-25T17:33:14+00:00"
7+
},
8+
"newest_record_date": {
9+
"fcc_complaints": "2026-09-26"
710
}
811
}

0 commit comments

Comments
 (0)