Skip to content

feat(sources): close AbuseIPDB collection in Rust - #2976

Closed
jonathanhaaswriter wants to merge 3 commits into
mainfrom
claude/abuseipdb-rust-collection
Closed

feat(sources): close AbuseIPDB collection in Rust#2976
jonathanhaaswriter wants to merge 3 commits into
mainfrom
claude/abuseipdb-rust-collection

Conversation

@jonathanhaaswriter

@jonathanhaaswriter jonathanhaaswriter commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Summary

AbuseIPDB is catalog-authoritative with a complete credential-free Rust kernel (request planning, decoding, normalization, projection), but it had no bridge into the closed source-execution protocol, so durable collection still ran through the Go catalog runtime.

  • Add crates/source-runtime-next/src/abuseipdb/source_execution.rs: adapters for the reports and ip_addresses families, modeled on the Abnormal Security bridge. The bridge reads only the public filters that belong to the selected family (ip_address, max_age_in_days for reports; confidence_minimum, ip_version for ip_addresses), because the host forwards every declared selector.
  • Register the adapters in the shared dispatcher and add the abuseipdb.key credential operation: the trusted host applies the provider's Key header (credentialHeader in host.go) and the Rust contract allowlists the operation.
  • Go: bind both families in RustAuthoritativeFamily (default reports) and PreviewRustFamily; forward the four declared public filters in PublicExecutionConfigForSource; select the api_key credential alias in CredentialBinding; retire the static Go loader.
  • Ledger: rust_fail_closed kernel rules for durable pull and preview with refreshed selector digests.
  • Also carries the small follow-up to feat(sources): register seven closed Rust source execution adapters #2973 that drops the allow(dead_code) / allow(unused_imports) attributes on the seven now-registered modules.

Validation

  • cargo fmt --all; cargo test -p cerebro-source-runtime-next --locked (abuseipdb and source_execution suites); cargo clippy -p cerebro-source-runtime-next --all-targets --all-features --locked -- -D warnings
  • go test ./internal/sourceruntime/sourceworker/... ./internal/sourceregistry/... ./tools/rustcarve/... -count=1; go vet ./internal/sourceruntime/sourceworker/...
  • go run ./tools/sourceoperationauthoritycheck (clean)
  • Five new Rust tests: both-family planning, fixture decode and seal, pagination and typed provider failures, filter/cursor/duplicate/secret rejection, dispatcher registration. Two new Go tests: Key header application and AbuseIPDB public config filtering, plus selector and credential-alias table rows.

jonathanhaaswriter and others added 2 commits September 1, 2026 17:11
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
AbuseIPDB had a complete credential-free Rust kernel (request planning,
response decoding, normalization, projection) but no bridge into the closed
source-execution protocol, so durable collection for this catalog-authoritative
source still ran through the Go catalog runtime.

Add the AbuseIPDB source execution adapter set for the reports and
ip_addresses families. The bridge reads only the public filters that belong
to the selected family (ip_address and max_age_in_days for reports;
confidence_minimum and ip_version for ip_addresses), plans origin-restricted
requests under the api.abuseipdb.com/api/v2 root, and decodes bounded pages
through the kernel. Register the adapters in the shared dispatcher, add the
abuseipdb.key credential operation so the trusted host applies the provider's
Key header, forward the four declared public filters and the api_key
credential alias from Go, bind both families in the Rust-authoritative and
preview selectors, record the ledger kernel rule with refreshed digests, and
retire the static Go loader.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@jonathanhaaswriter

Copy link
Copy Markdown
Contributor Author

Superseded by merged PR #2982. A three-way merge with current main produces the exact current main tree, so this PR has no remaining unique change to integrate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant