Skip to content

Commit 98689fd

Browse files
committed
chore(release): bump version to 1.7.35
1 parent ab4f5ba commit 98689fd

7 files changed

Lines changed: 50 additions & 23 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,24 @@ All notable changes to CallShield will be documented in this file.
144144
scheduled runs submit the resolved Gradle dependency graph and Dependabot tracks
145145
Gradle and GitHub Action updates.
146146

147+
## v1.7.35 — 2026-08-10
148+
149+
### Interface
150+
151+
- Database and activity surfaces now page Room-backed rows; dashboard and
152+
statistics cards use bounded SQL aggregates instead of materializing full logs.
153+
154+
### Reliability
155+
156+
- Sharded-feed version, update date, and manifest fingerprint are persisted;
157+
replayed, downgraded, malformed, and same-version-mutated manifests are
158+
rejected before replacing the local database.
159+
160+
### Build
161+
162+
- Added pinned pull-request and scheduled verification for tests, release
163+
provenance, dependency advisories, lock drift, and Gradle dependency graphs.
164+
147165
## v1.7.34 — 2026-08-10
148166

149167
### Interface

‎README.md‎

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<p align="center">
1313
<a href="https://github.com/SysAdminDoc/CallShield/releases/latest"><img src="https://img.shields.io/github/v/release/SysAdminDoc/CallShield?style=flat-square&color=a6e3a1" alt="Release"></a>
1414
<img src="https://img.shields.io/badge/Spam%20Numbers-51%2C463-f38ba8?style=flat-square" alt="51,463 Numbers">
15-
<img src="https://img.shields.io/badge/Tests-952-94e2d5?style=flat-square" alt="952 Tests">
15+
<img src="https://img.shields.io/badge/Tests-1094-94e2d5?style=flat-square" alt="1094 Tests">
1616
<img src="https://img.shields.io/badge/Android-10%2B-89b4fa?style=flat-square" alt="Android 10+">
1717
<img src="https://img.shields.io/badge/License-MIT-cba6f7?style=flat-square" alt="MIT License">
1818
<img src="https://img.shields.io/badge/API%20Keys-None-fab387?style=flat-square" alt="No required API keys">
@@ -41,19 +41,15 @@ legacy snapshot when the shard service is unavailable.
4141
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/06-more.png" width="30%" alt="Protection tools and release information">
4242
</p>
4343

44-
## v1.7.34 Highlights
44+
## v1.7.35 Highlights
4545

46-
- **Broader public spam coverage** — Saracroche, PhoneBlock, Nomorobo IRS,
47-
FCC advertiser numbers, and bounded incremental FTC/FCC windows now feed the
48-
importer with idempotent merges, role-aware spoof signals, and explicit provenance.
49-
- **Fail-open screening reliability** — lazy repository initialization errors
50-
now receive an explicit allow response instead of abandoning Telecom's call.
51-
- **Incremental database delivery** — current APKs bundle the manifest and
52-
content-addressed spam shards rather than the monolith; sync verifies hashes,
53-
downloads only changed shards, and retains the legacy raw URL for older apps.
54-
- **Explainable protection** — lookup and number-detail verdicts lead with the
55-
deciding rule, worker stop reasons surface background-quota recovery, and RTT
56-
calls bypass screening and caller-ID overlays.
46+
- **Bounded local data surfaces** — database and activity views page Room rows,
47+
while dashboard and statistics cards use bounded SQL queries and aggregates.
48+
- **Feed rollback protection** — accepted sharded-feed version, date, and
49+
fingerprint metadata reject replayed, downgraded, or mutated manifests before
50+
replacing the local database.
51+
- **Release gates in CI** — pinned pull-request and scheduled checks cover tests,
52+
provenance, dependency advisories, lock drift, and resolved dependency graphs.
5753

5854
## v1.7.32 Highlights
5955

@@ -341,7 +337,7 @@ legacy snapshot when the shard service is unavailable.
341337
- **Answered-caller trust** — numbers answered repeatedly inside the configured lookback window can ring through lower-confidence heuristic/ML suspicion while explicit block rules still win first.
342338
- **Emergency callback grace** — unknown callbacks can ring through after a local emergency call for a configurable window while explicit block rules still win first.
343339
- **SMS burst protection** - repeated unknown SMS senders or same-prefix floods can be blocked as `sms_burst`, with blocked-SMS notification actions to mark safe or report.
344-
- **952 total JVM unit tests** - the local unit suite covers detection, workers, utilities, repository contracts, and permission readiness before release.
340+
- **1094 total JVM unit tests** - the local unit suite covers detection, workers, utilities, repository contracts, and permission readiness before release.
345341
- **Gradient-Boosted Tree ML model** — 20 features, pure Kotlin, no TFLite dependency.
346342
- **Campaign burst detection** — bounded local observations retain seven days of prefix/neighbor churn, callback reuse, and source-agreement evidence while the live detector uses a one-hour window.
347343
- **Full accessibility** — content descriptions across Compose UI, 48dp minimum touch targets.
@@ -355,7 +351,7 @@ legacy snapshot when the shard service is unavailable.
355351
5. **Callback-aware** — won't block callbacks from numbers you recently called, answered repeatedly, after a local emergency call, or urgent repeated callers
356352
6. **Community-driven** — one-tap anonymous contribution via Cloudflare Worker, merged into the database by the maintainer
357353

358-
## Detection Pipeline (v1.7.34)
354+
## Detection Pipeline (v1.7.35)
359355

360356
All detection layers implement a shared `IChecker` interface and run in priority order via `CheckerPipeline.run` — first non-null result wins, every layer is testable in isolation. Priorities are stable numbers; the ladder below is the live order.
361357

@@ -660,7 +656,7 @@ RELEASE_KEY_PASSWORD=...
660656
## Testing
661657

662658
```bash
663-
./gradlew testDebugUnitTest # 952 tests
659+
./gradlew testDebugUnitTest # 1094 tests
664660
./gradlew connectedDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.sysadmindoc.callshield.platform.TargetSdkBehaviorSmokeTest
665661
./gradlew verifyPipelineTests # Cloudflare Worker (node) + data-pipeline and translation checks (python)
666662
```
@@ -697,7 +693,7 @@ language in [issue #7](https://github.com/SysAdminDoc/CallShield/issues/7).
697693
| Community API | Cloudflare Workers |
698694
| URL Safety | Local spam-domain data; optional URLhaus (abuse.ch) |
699695
| Verification | Local Gradle, lint, and release-artifact checks |
700-
| Tests | 952 JVM unit tests (JUnit) |
696+
| Tests | 1094 JVM unit tests (JUnit) |
701697
| Strings | 1160 string resources and 29 plural groups (translation-ready) |
702698
| Accessibility | 100+ content descriptions, 48dp touch targets |
703699
| Min SDK | 29 (Android 10) |

‎app/build.gradle.kts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ android {
4848
applicationId = "com.sysadmindoc.callshield"
4949
minSdk = 29
5050
targetSdk = 36
51-
versionCode = 62
52-
versionName = "1.7.34"
51+
versionCode = 63
52+
versionName = "1.7.35"
5353
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
5454
manifestPlaceholders["appLabel"] = "@string/app_name"
5555
}

‎app/src/main/java/com/sysadmindoc/callshield/ui/screens/more/ChangelogScreen.kt‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,20 @@ fun ChangelogScreen() {
2424
modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(16.dp),
2525
verticalArrangement = Arrangement.spacedBy(0.dp),
2626
) {
27+
VersionEntry(
28+
"1.7.35",
29+
"Bounded data surfaces, feed rollback protection, and release gates",
30+
isLatest = true,
31+
changes =
32+
listOf(
33+
"Database and activity rows load in pages while statistics use SQL aggregates",
34+
"Replayed, downgraded, malformed, and mutated feed manifests cannot replace newer data",
35+
"Pull requests and scheduled runs verify dependencies, provenance, and release metadata",
36+
),
37+
)
2738
VersionEntry(
2839
"1.7.34",
2940
"Explainable protection, RTT safety, and assistive action coverage",
30-
isLatest = true,
3141
changes =
3242
listOf(
3343
"RTT calls receive an explicit allow before screening or caller-ID overlay work",

‎docs/fdroid/com.sysadmindoc.callshield.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,6 @@ AllowedAPKSigningKeys: d179d0daa9eac6b52fc19d3a7126fd6ccb911923a43a3cf0bef9f74b1
5151
AutoUpdateMode: Version
5252
UpdateCheckMode: Tags ^v[0-9]+\.[0-9]+\.[0-9]+$
5353
# Last externally prepared build: 1.7.12 (40).
54-
# Current app source: 1.7.34 (62); no matching F-Droid build has been prepared.
54+
# Current app source: 1.7.35 (63); no matching F-Droid build has been prepared.
5555
CurrentVersion: 1.7.12
5656
CurrentVersionCode: 40
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Paged database and activity surfaces, moved statistics to SQL aggregates, and
2+
rejected replayed or downgraded spam-feed manifests before replacing local data.
3+
Added pinned CI checks for dependency advisories, provenance, and release drift.

‎scripts/test_release_drift.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ def test_checkout_is_synchronized(self) -> None:
2727
now=snapshot_time + timedelta(minutes=1),
2828
)
2929
self.assertEqual([], report["issues"], report)
30-
self.assertEqual("1.7.34", report["version_name"])
31-
self.assertEqual(62, report["version_code"])
30+
self.assertEqual("1.7.35", report["version_name"])
31+
self.assertEqual(63, report["version_code"])
3232
self.assertEqual(9, report["sources"]["source_count"])
3333
self.assertEqual(3, len(report["advisories"]))
3434

0 commit comments

Comments
 (0)