Merge upstream v0.16.24

Eight conflicted files resolved, plus the lock file and the schema:

- crates/services/src/task_manager/spam_classifier.rs: upstream's rules
  update now replaces existing rules, DNSBL servers, lookups and file
  extensions, keeping only whether each is on. Taken, with one difference:
  an object an admin edited is kept as it is. Every object an update writes
  is fingerprinted (content without `enable`, SHA-256, stored under
  SUBSPACE_INBUXA "Sf"), and only one that still matches is replaced.
  Scores are never replaced, as upstream has it. The AU-1.10 summary record
  now names what was added, replaced and kept, and the bundled rules are
  marked applied only when the update fully succeeded, so a failure runs
  again on the next start. The marker becomes "3.0.2+2", which runs the
  update once on upgrade to fingerprint every rule still as bundled.
- crates/common/src/network/autoconfig/autodiscover.rs: upstream's rewrite
  (implicit TLS first, labeled SSL), with the per-protocol switches (LP-7,
  LP-14a) passed in as a filter.
- crates/store/src/backend/mysql/{search,write}.rs: upstream's chunked
  deletes (no unbounded first DELETE, stop on a short chunk, halve the
  chunk on the new chunk-too-large errors) inside the fork's query timeout.
- crates/smtp/src/lib.rs: the fork's queue spawn kept. It already fixed the
  stall upstream fixes here (a node without outboundMta stops accepting
  mail at about 1024 queued messages), and follows role changes live.
- crates/jmap/src/registry/mapping/bootstrap.rs: the log path stays
  /var/log/inbuxa/; upstream's PowerDNS mapping taken.
- crates/main/Cargo.toml: the AGPL-only license kept, version 0.16.24.
- tests/src/jmap/principal/get.rs: the fork's capabilities kept.
- resources/schema/schema.json.gz: merged as JSON; upstream relabeled the
  vendor Sieve extensions "(Stalwart)", kept as "(vnd.inbuxa)".
- Cargo.lock: upstream's, with the fork's crates added by Cargo.

Also:

- tests/src/smtp/inbound/spam_rules_kept.rs: an edited rule survives an
  update, an unedited one is updated, rules from before fingerprints are
  handled, and the audit summary says so. Upstream's own spam_rules test
  passes unchanged.
- tests/src/smtp/reporting/reschedule.rs moves to port 19058; upstream's
  new spam_rules test took 19057.
- tools/fork/renames.py renames the "(Stalwart)" labels and the default
  log path, so neither conflicts again.
- tools/fork/notice-check.py compares against the newest snapshot in the
  checked-out history instead of the upstream branch head, so moving the
  branch no longer fails other open pull requests.
- tests/src/directory/issuer.rs (since v0.16.23) stays out, and is on the
  build check's known list: it tests issuer-based directory routing, which
  the fork doesn't have (DIR-2).
- Strip report: docs/fork/strip-reports/v0.16.24.{md,json}.
This commit is contained in:
2026-09-28 06:30:20 -07:00
94 changed files with 4206 additions and 1065 deletions
+724
View File
@@ -0,0 +1,724 @@
{
"ref": "v0.16.24",
"commit": "af37a234981722493b74623a983581691d2b70b6",
"removed_files": [
"crates/common/src/enterprise/alerts.rs",
"crates/common/src/enterprise/config.rs",
"crates/common/src/enterprise/license.rs",
"crates/common/src/enterprise/llm.rs",
"crates/common/src/enterprise/masked.rs",
"crates/common/src/enterprise/mod.rs",
"crates/common/src/telemetry/metrics/store.rs",
"crates/common/src/telemetry/metrics/test_data.rs",
"crates/common/src/telemetry/tracers/store.rs",
"crates/http/src/api/telemetry.rs",
"crates/jmap/src/registry/mapping/archived_item.rs",
"crates/jmap/src/registry/mapping/masked_email.rs",
"crates/jmap/src/registry/mapping/telemetry.rs",
"crates/scim-proto/src/attributes.rs",
"crates/scim-proto/src/etag.rs",
"crates/scim-proto/src/filter.rs",
"crates/scim-proto/src/json.rs",
"crates/scim-proto/src/lib.rs",
"crates/scim-proto/src/message/bulk.rs",
"crates/scim-proto/src/message/error.rs",
"crates/scim-proto/src/message/list.rs",
"crates/scim-proto/src/message/mod.rs",
"crates/scim-proto/src/message/patch.rs",
"crates/scim-proto/src/message/search.rs",
"crates/scim-proto/src/path.rs",
"crates/scim-proto/src/schema/group.rs",
"crates/scim-proto/src/schema/mod.rs",
"crates/scim-proto/src/schema/spc.rs",
"crates/scim-proto/src/schema/user.rs",
"crates/scim/src/auth.rs",
"crates/scim/src/bulk.rs",
"crates/scim/src/context.rs",
"crates/scim/src/discovery.rs",
"crates/scim/src/error.rs",
"crates/scim/src/groups/get.rs",
"crates/scim/src/groups/mod.rs",
"crates/scim/src/groups/patch.rs",
"crates/scim/src/groups/set.rs",
"crates/scim/src/lib.rs",
"crates/scim/src/query/cursor.rs",
"crates/scim/src/query/mod.rs",
"crates/scim/src/request.rs",
"crates/scim/src/users/get.rs",
"crates/scim/src/users/mod.rs",
"crates/scim/src/users/patch.rs",
"crates/scim/src/users/set.rs",
"crates/spam-filter/src/analysis/llm.rs",
"crates/store/src/backend/composite/mod.rs",
"crates/store/src/backend/composite/read_replica.rs",
"crates/store/src/backend/composite/sharded_blob.rs",
"crates/store/src/backend/composite/sharded_lookup.rs",
"crates/trc/src/serializers/binary.rs",
"tests/src/directory/oidc.rs",
"tests/src/scim/auth.rs",
"tests/src/scim/bulk.rs",
"tests/src/scim/discovery.rs",
"tests/src/scim/groups.rs",
"tests/src/scim/limits.rs",
"tests/src/scim/mod.rs",
"tests/src/scim/query.rs",
"tests/src/scim/users.rs",
"tests/src/system/archiving.rs",
"tests/src/system/tenant.rs"
],
"removed_snippets": {
"crates/common/src/auth/authentication.rs": 3,
"crates/common/src/auth/mod.rs": 2,
"crates/common/src/auth/permissions.rs": 1,
"crates/common/src/cache/directory.rs": 6,
"crates/common/src/cache/invalidate.rs": 1,
"crates/common/src/cache/principals.rs": 2,
"crates/common/src/cache/reload.rs": 1,
"crates/common/src/config/mod.rs": 2,
"crates/common/src/config/telemetry.rs": 4,
"crates/common/src/lib.rs": 2,
"crates/common/src/manager/boot.rs": 1,
"crates/common/src/network/mta.rs": 1,
"crates/common/src/scripts/plugins/llm_prompt.rs": 1,
"crates/common/src/storage/quota.rs": 2,
"crates/common/src/telemetry/metrics/mod.rs": 1,
"crates/common/src/telemetry/metrics/prometheus.rs": 1,
"crates/common/src/telemetry/mod.rs": 1,
"crates/common/src/telemetry/tracers/mod.rs": 1,
"crates/http/src/api/mod.rs": 4,
"crates/http/src/auth/permissions.rs": 1,
"crates/http/src/request.rs": 4,
"crates/jmap/src/registry/get.rs": 1,
"crates/jmap/src/registry/mapping/mod.rs": 1,
"crates/jmap/src/registry/mapping/principal.rs": 3,
"crates/jmap/src/registry/mapping/queued_message.rs": 1,
"crates/jmap/src/registry/mapping/task.rs": 1,
"crates/jmap/src/registry/mod.rs": 1,
"crates/jmap/src/registry/query.rs": 1,
"crates/jmap/src/registry/set.rs": 2,
"crates/main/src/main.rs": 1,
"crates/services/src/task_manager/alarm.rs": 1,
"crates/services/src/task_manager/imip.rs": 1,
"crates/services/src/task_manager/index.rs": 2,
"crates/services/src/task_manager/maintenance.rs": 3,
"crates/services/src/task_manager/scheduler.rs": 8,
"crates/spam-filter/src/analysis/mod.rs": 1,
"crates/spam-filter/src/analysis/score.rs": 2,
"crates/store/src/backend/mod.rs": 1,
"crates/store/src/backend/mysql/main.rs": 1,
"crates/store/src/backend/postgres/main.rs": 1,
"crates/store/src/build/blob.rs": 2,
"crates/store/src/build/lookup.rs": 1,
"crates/store/src/build/memory.rs": 2,
"crates/store/src/dispatch/blob.rs": 6,
"crates/store/src/dispatch/lookup.rs": 10,
"crates/store/src/dispatch/mod.rs": 1,
"crates/store/src/dispatch/search.rs": 6,
"crates/store/src/dispatch/store.rs": 8,
"crates/store/src/lib.rs": 6,
"crates/trc/src/serializers/mod.rs": 1
},
"cargo_edits": [
{
"file": "crates/main/Cargo.toml",
"line": 50,
"before": "default = [\"rocks\", \"enterprise\"]",
"after": "default = [\"rocks\"]"
},
{
"file": "tests/Cargo.toml",
"line": 22,
"before": "store = { path = \"../crates/store\", features = [\"test_mode\", \"enterprise\"] }",
"after": "store = { path = \"../crates/store\", features = [\"test_mode\"] }"
},
{
"file": "tests/Cargo.toml",
"line": 24,
"before": "directory = { path = \"../crates/directory\", features = [\"test_mode\", \"enterprise\"] }",
"after": "directory = { path = \"../crates/directory\", features = [\"test_mode\"] }"
},
{
"file": "tests/Cargo.toml",
"line": 25,
"before": "coordinator = { path = \"../crates/coordinator\", features = [\"test_mode\", \"enterprise\"] }",
"after": "coordinator = { path = \"../crates/coordinator\", features = [\"test_mode\"] }"
},
{
"file": "tests/Cargo.toml",
"line": 26,
"before": "jmap = { path = \"../crates/jmap\", features = [\"test_mode\", \"enterprise\"] }",
"after": "jmap = { path = \"../crates/jmap\", features = [\"test_mode\"] }"
},
{
"file": "tests/Cargo.toml",
"line": 35,
"before": "http = { path = \"../crates/http\", features = [\"test_mode\", \"enterprise\"] }",
"after": "http = { path = \"../crates/http\", features = [\"test_mode\"] }"
},
{
"file": "tests/Cargo.toml",
"line": 37,
"before": "scim = { path = \"../crates/scim\", features = [\"test_mode\", \"enterprise\"] }",
"after": "scim = { path = \"../crates/scim\", features = [\"test_mode\"] }"
},
{
"file": "tests/Cargo.toml",
"line": 39,
"before": "services = { path = \"../crates/services\", features = [\"test_mode\", \"enterprise\"] }",
"after": "services = { path = \"../crates/services\", features = [\"test_mode\"] }"
},
{
"file": "tests/Cargo.toml",
"line": 41,
"before": "smtp = { path = \"../crates/smtp\", features = [\"test_mode\", \"enterprise\"] }",
"after": "smtp = { path = \"../crates/smtp\", features = [\"test_mode\"] }"
},
{
"file": "tests/Cargo.toml",
"line": 42,
"before": "common = { path = \"../crates/common\", features = [\"test_mode\", \"enterprise\"] }",
"after": "common = { path = \"../crates/common\", features = [\"test_mode\"] }"
},
{
"file": "tests/Cargo.toml",
"line": 44,
"before": "email = { path = \"../crates/email\", features = [\"test_mode\", \"enterprise\"] }",
"after": "email = { path = \"../crates/email\", features = [\"test_mode\"] }"
},
{
"file": "tests/Cargo.toml",
"line": 45,
"before": "spam-filter = { path = \"../crates/spam-filter\", features = [\"test_mode\", \"enterprise\"] }",
"after": "spam-filter = { path = \"../crates/spam-filter\", features = [\"test_mode\"] }"
},
{
"file": "tests/Cargo.toml",
"line": 46,
"before": "trc = { path = \"../crates/trc\", features = [\"enterprise\"] }",
"after": "trc = { path = \"../crates/trc\", features = [] }"
},
{
"file": "tests/Cargo.toml",
"line": 47,
"before": "managesieve = { path = \"../crates/managesieve\", features = [\"test_mode\", \"enterprise\"] }",
"after": "managesieve = { path = \"../crates/managesieve\", features = [\"test_mode\"] }"
},
{
"file": ".github/workflows/ci.yml",
"line": 341,
"before": "cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\"",
"after": "cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\""
},
{
"file": ".github/workflows/ci.yml",
"line": 379,
"before": "# cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features \"foundationdb s3 redis nats enterprise\"",
"after": "# cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features \"foundationdb s3 redis nats\""
},
{
"file": ".github/workflows/ci.yml",
"line": 386,
"before": "cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\"",
"after": "cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\""
},
{
"file": ".github/workflows/ci.yml",
"line": 442,
"before": "cargo build --release -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\"",
"after": "cargo build --release -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\""
},
{
"file": "Dockerfile",
"line": 22,
"before": "RUN RUSTFLAGS=\"$(cat /flags.txt)\" cargo chef cook --target \"$(cat /target.txt)\" --release --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\" --recipe-path /recipe.json",
"after": "RUN RUSTFLAGS=\"$(cat /flags.txt)\" cargo chef cook --target \"$(cat /target.txt)\" --release --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\" --recipe-path /recipe.json"
},
{
"file": "Dockerfile",
"line": 24,
"before": "RUN RUSTFLAGS=\"$(cat /flags.txt)\" cargo build --target \"$(cat /target.txt)\" --release -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\"",
"after": "RUN RUSTFLAGS=\"$(cat /flags.txt)\" cargo build --target \"$(cat /target.txt)\" --release -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\""
},
{
"file": "Dockerfile.build",
"line": 111,
"before": "RUSTFLAGS=\"-L /usr/lib\" cargo chef cook --recipe-path recipe.json --zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"foundationdb s3 redis nats enterprise\"; \\",
"after": "RUSTFLAGS=\"-L /usr/lib\" cargo chef cook --recipe-path recipe.json --zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"foundationdb s3 redis nats\"; \\"
},
{
"file": "Dockerfile.build",
"line": 119,
"before": "cargo chef cook --recipe-path recipe.json --zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\"",
"after": "cargo chef cook --recipe-path recipe.json --zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\""
},
{
"file": "Dockerfile.build",
"line": 132,
"before": "RUSTFLAGS=\"-L /usr/lib\" cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"foundationdb s3 redis nats enterprise\" && \\",
"after": "RUSTFLAGS=\"-L /usr/lib\" cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"foundationdb s3 redis nats\" && \\"
},
{
"file": "Dockerfile.build",
"line": 142,
"before": "cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\" && \\",
"after": "cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\" && \\"
},
{
"file": "Dockerfile.fdb",
"line": 56,
"before": "RUN cargo build -p stalwart --no-default-features --features \"foundationdb s3 redis azure nats enterprise\" --release",
"after": "RUN cargo build -p stalwart --no-default-features --features \"foundationdb s3 redis azure nats\" --release"
}
],
"dangling_mods": [
{
"file": "crates/common/src/telemetry/metrics/mod.rs",
"line": 12,
"module": "test_data",
"lines": [
"#[cfg(any(feature = \"dev_mode\", feature = \"test_mode\"))]",
"pub mod test_data;"
]
},
{
"file": "tests/src/directory/mod.rs",
"line": 11,
"module": "oidc",
"lines": [
"pub mod oidc;"
]
},
{
"file": "tests/src/lib.rs",
"line": 27,
"module": "scim",
"lines": [
"#[cfg(test)]",
"pub mod scim;"
]
},
{
"file": "tests/src/system/mod.rs",
"line": 8,
"module": "archiving",
"lines": [
"pub mod archiving;"
]
},
{
"file": "tests/src/system/mod.rs",
"line": 19,
"module": "tenant",
"lines": [
"pub mod tenant;"
]
}
],
"problems": [
"tests/src/directory/issuer.rs:8: does not compile: unresolved import `crate::directory::oidc`",
"tests/src/directory/issuer.rs:67: does not compile: the size for values of type `str` cannot be known at compilation time",
"tests/src/directory/issuer.rs:74: does not compile: the size for values of type `str` cannot be known at compilation time"
],
"feature_gates": {
"crates/common/src/cache/reload.rs": 1,
"crates/common/src/manager/boot.rs": 1,
"crates/common/src/storage/mod.rs": 1,
"crates/common/src/storage/quota.rs": 1,
"crates/common/src/telemetry/metrics/prometheus.rs": 1,
"crates/http/src/api/mod.rs": 1,
"crates/http/src/auth/permissions.rs": 1,
"crates/jmap/src/registry/get.rs": 1,
"crates/jmap/src/registry/mapping/principal.rs": 2,
"crates/jmap/src/registry/mapping/queued_message.rs": 1,
"crates/jmap/src/registry/mapping/task.rs": 1,
"crates/jmap/src/registry/set.rs": 1,
"crates/services/src/task_manager/alarm.rs": 1,
"crates/services/src/task_manager/imip.rs": 1,
"crates/services/src/task_manager/index.rs": 1,
"crates/services/src/task_manager/maintenance.rs": 1,
"crates/services/src/task_manager/scheduler.rs": 1,
"crates/store/src/lib.rs": 1
},
"edition_checks": {},
"schema": {
"objects": [
"x:AiModel",
"x:Alert",
"x:ArchivedItem",
"x:MaskedEmail",
"x:MetricsStore",
"x:SpamLlm",
"x:Tenant",
"x:Trace",
"x:TracingStore"
],
"fields": [
"x:AcmeProvider.memberTenantId",
"x:ArfExternalReport.memberTenantId",
"x:Authentication.defaultTenantRoleIds",
"x:CalendarAlarm.template",
"x:CalendarScheduling.emailTemplate",
"x:CalendarScheduling.httpRsvpTemplate",
"x:DataRetention.archiveDeletedAccountsFor",
"x:DataRetention.archiveDeletedItemsFor",
"x:DataRetention.holdMetricsFor",
"x:DataRetention.holdTracesFor",
"x:DataRetention.metricsCollectionInterval",
"x:Dkim1Signature.memberTenantId",
"x:Dkim2Signature.memberTenantId",
"x:DmarcExternalReport.memberTenantId",
"x:Domain.allowScimProvisioning",
"x:Domain.directoryId",
"x:Domain.logo",
"x:Domain.memberTenantId",
"x:Email.maxMaskedAddresses",
"x:Enterprise.logoUrl",
"x:GroupAccount.externalId",
"x:LdapDirectory.memberTenantId",
"x:MySqlStore.readReplicas",
"x:OidcDirectory.memberTenantId",
"x:PostgreSqlStore.readReplicas",
"x:Search.indexTelemetry",
"x:Search.indexTracingFields",
"x:SqlDirectory.memberTenantId",
"x:TlsExternalReport.memberTenantId",
"x:UserAccount.externalId"
]
},
"third_party": {
"crates/common/src/network/acme/directory.rs": [
{
"line": 7,
"text": "Adapted from rustls-acme (https://github.com/FlorianUekermann/rustls-acme), licensed under MIT/Apache-2.0."
}
],
"crates/common/src/network/acme/jose.rs": [
{
"line": 7,
"text": "Adapted from rustls-acme (https://github.com/FlorianUekermann/rustls-acme), licensed under MIT/Apache-2.0."
}
],
"crates/common/src/network/acme/order.rs": [
{
"line": 7,
"text": "Adapted from rustls-acme (https://github.com/FlorianUekermann/rustls-acme), licensed under MIT/Apache-2.0."
}
],
"crates/common/src/scripts/functions/text.rs": [
{
"line": 239,
"text": "MIT licensed."
},
{
"line": 241,
"text": "Copyright (c) 2016 Titus Wormer <[email protected]>"
}
],
"crates/common/src/telemetry/tracers/journald.rs": [
{
"line": 70,
"text": "SPDX-FileCopyrightText: 2018 Benjamin Saunders <[email protected]>"
},
{
"line": 71,
"text": "SPDX-License-Identifier: MIT"
}
],
"crates/imap-proto/src/utf7.rs": [
{
"line": 7,
"text": "Ported from https://github.com/jstedfast/MailKit/blob/master/MailKit/Net/Imap/ImapEncoding.cs"
}
],
"crates/jmap/src/registry/mapping/log.rs": [
{
"line": 341,
"text": "SPDX-FileCopyrightText: 2017 Michael Coyne <[email protected]>"
},
{
"line": 343,
"text": "SPDX-License-Identifier: MIT"
},
{
"line": 346,
"text": "Adapted from https://github.com/mjc-gh/rev_lines/blob/main/src/lib.rs"
}
],
"crates/jmap-proto/src/types/date.rs": [
{
"line": 121,
"text": "Ported from http://howardhinnant.github.io/date_algorithms.html#civil_from_days"
},
{
"line": 158,
"text": "Ported from https://github.com/protocolbuffers/upb/blob/22182e6e/upb/json_decode.c#L982-L992"
}
],
"crates/nlp/src/tokenizers/japanese.rs": [
{
"line": 73,
"text": "Ported from https://github.com/woxtu/rust-tinysegmenter, MIT license"
}
],
"crates/nlp/src/tokenizers/types.rs": [
{
"line": 738,
"text": "Credits: test suite from linkify crate"
}
],
"crates/registry/src/types/datetime.rs": [
{
"line": 150,
"text": "Ported from http://howardhinnant.github.io/date_algorithms.html#civil_from_days"
},
{
"line": 188,
"text": "Ported from https://github.com/protocolbuffers/upb/blob/22182e6e/upb/json_decode.c#L982-L992"
}
],
"crates/store/src/backend/postgres/tls.rs": [
{
"line": 7,
"text": "Credits: https://github.com/jbg/tokio-postgres-rustls"
}
],
"crates/types/src/id.rs": [
{
"line": 69,
"text": "From https://github.com/archer884/crockford by J/A <[email protected]>"
},
{
"line": 70,
"text": "License: MIT/Apache 2.0"
}
],
"crates/utils/src/glob.rs": [
{
"line": 107,
"text": "Credits: Algorithm ported from https://research.swtch.com/glob"
}
]
},
"third_party_unlisted": [],
"renames": {
"\"URL to download spam filter rules from\" \u2192 \"URL to download spam filter rules from. Empty uses the rules bundled with the server.\"": {
"resources/schema/schema.json.gz": 1
},
"\"spamFilterRulesUrl\":\"https://github.com/stalwartlabs/spam-filter/releases/latest/download/spam-filter-rules.json.gz\", \u2192 ": {
"resources/schema/schema.json.gz": 1
},
"\"stalwart\" \u2192 \"inbuxa\"": {
"resources/schema/schema.json.gz": 15
},
"\"stalwart\".to_string() \u2192 \"inbuxa\".to_string()": {
"crates/jmap/src/registry/mapping/bootstrap.rs": 1,
"crates/registry/src/schema/structs_impl.rs": 12
},
"STALWART_SPAM_ \u2192 INBUXA_SPAM_": {
"crates/common/src/manager/mod.rs": 2
},
"spam_filter_rules_url: Some(\"https://github.com/stalwartlabs/spam-filter/releases/latest/download/spam-filter-rules.json.gz\".to_string()), \u2192 spam_filter_rules_url: None,": {
"crates/registry/src/schema/structs_impl.rs": 1
},
"stalwart-webui \u2192 inbuxa-webui": {
"crates/common/src/manager/application.rs": 3
},
"urn:stalwart: \u2192 urn:inbuxa:": {
"crates/dav/src/common/lock.rs": 1,
"crates/dav/src/common/uri.rs": 5,
"tests/src/webdav/lock.rs": 2
},
"urn:stalwart:jmap \u2192 urn:inbuxa:jmap:registry": {
"crates/jmap-proto/src/request/capability.rs": 3,
"tests/resources/scripts/stress_test_prepare.py": 1,
"tests/src/jmap/principal/get.rs": 2,
"tests/src/utils/jmap.rs": 1
},
"vnd.stalwart \u2192 vnd.inbuxa": {
"resources/schema/schema.json.gz": 2
},
"vnd.stalwart. \u2192 vnd.inbuxa.": {
"crates/registry/src/schema/enums_impl.rs": 4,
"tests/resources/jmap/sieve/test_mailbox.sieve": 1,
"tests/resources/smtp/sieve/awl.sieve": 1,
"tests/resources/smtp/sieve/awl_include.sieve": 1,
"tests/resources/smtp/sieve/stage_mail.sieve": 1,
"tests/resources/smtp/sieve/stage_rcpt.sieve": 1
}
},
"build": {
"errors": [
{
"file": "tests/src/directory/issuer.rs",
"line": 8,
"message": "unresolved import `crate::directory::oidc`"
},
{
"file": "tests/src/directory/issuer.rs",
"line": 67,
"message": "the size for values of type `str` cannot be known at compilation time"
},
{
"file": "tests/src/directory/issuer.rs",
"line": 74,
"message": "the size for values of type `str` cannot be known at compilation time"
}
],
"expected": [
{
"file": "tests/src/directory/mod.rs",
"line": 19,
"message": "cannot find module or crate `oidc` in this scope"
},
{
"file": "tests/src/smtp/inbound/antispam.rs",
"line": 17,
"message": "cannot find `enterprise` in `common`"
},
{
"file": "tests/src/smtp/inbound/antispam.rs",
"line": 49,
"message": "unresolved import `spam_filter::analysis::llm`"
},
{
"file": "tests/src/smtp/inbound/antispam.rs",
"line": 661,
"message": "no method named `spam_filter_analyze_llm` found for reference `&common::Server` in the current scope"
},
{
"file": "tests/src/system/mod.rs",
"line": 63,
"message": "cannot find module or crate `tenant` in this scope"
},
{
"file": "tests/src/system/mod.rs",
"line": 70,
"message": "cannot find module or crate `archiving` in this scope"
},
{
"file": "tests/src/telemetry/alerts.rs",
"line": 89,
"message": "no method named `process_alerts` found for struct `common::Server` in the current scope"
},
{
"file": "tests/src/telemetry/metrics.rs",
"line": 8,
"message": "unresolved import `common::telemetry::metrics::store`"
},
{
"file": "tests/src/telemetry/metrics.rs",
"line": 33,
"message": "no method named `insert_test_metrics` found for struct `common::Server` in the current scope"
},
{
"file": "tests/src/telemetry/metrics.rs",
"line": 190,
"message": "no method named `purge_metrics` found for reference `&store::Store` in the current scope"
},
{
"file": "tests/src/telemetry/tracing.rs",
"line": 8,
"message": "unresolved import `common::telemetry::tracers::store`"
},
{
"file": "tests/src/telemetry/tracing.rs",
"line": 35,
"message": "no method named `purge_spans` found for reference `&store::Store` in the current scope"
},
{
"file": "tests/src/telemetry/tracing.rs",
"line": 89,
"message": "no method named `purge_spans` found for reference `&store::Store` in the current scope"
},
{
"file": "tests/src/telemetry/tracing.rs",
"line": 152,
"message": "no method named `purge_spans` found for reference `&store::Store` in the current scope"
},
{
"file": "tests/src/telemetry/webhooks.rs",
"line": 11,
"message": "unresolved import `common::telemetry::tracers::store`"
},
{
"file": "tests/src/telemetry/webhooks.rs",
"line": 123,
"message": "no method named `purge_spans` found for reference `&store::Store` in the current scope"
}
],
"unused": [
{
"file": "crates/common/src/cache/invalidate.rs",
"line": 20,
"message": "unused imports: `registry::RegistryQuery` and `roaring::RoaringBitmap`"
},
{
"file": "crates/common/src/cache/principals.rs",
"line": 31,
"message": "unused import: `MaskedEmail`"
},
{
"file": "crates/common/src/cache/principals.rs",
"line": 41,
"message": "unused import: `now`"
},
{
"file": "crates/common/src/network/mta.rs",
"line": 27,
"message": "unused import: `structs::MaskedEmail`"
},
{
"file": "crates/common/src/network/mta.rs",
"line": 36,
"message": "unused import: `now`"
},
{
"file": "crates/common/src/network/mta.rs",
"line": 39,
"message": "unused import: `types::id::Id`"
},
{
"file": "crates/common/src/scripts/plugins/llm_prompt.rs",
"line": 7,
"message": "unused import: `compiler::Number`"
},
{
"file": "crates/common/src/scripts/plugins/llm_prompt.rs",
"line": 8,
"message": "unused import: `std::time::Instant`"
},
{
"file": "crates/common/src/scripts/plugins/llm_prompt.rs",
"line": 9,
"message": "unused imports: `AiEvent` and `SecurityEvent`"
},
{
"file": "crates/jmap/src/registry/mapping/principal.rs",
"line": 24,
"message": "unused imports: `RegistryObjectCounter` and `RegistryQuery`"
},
{
"file": "crates/jmap/src/registry/mapping/queued_message.rs",
"line": 25,
"message": "unused import: `ObjectType`"
},
{
"file": "crates/jmap/src/registry/mapping/queued_message.rs",
"line": 43,
"message": "unused import: `RegistryQuery`"
},
{
"file": "crates/services/src/task_manager/index.rs",
"line": 14,
"message": "unused imports: `ObjectType` and `Property`"
},
{
"file": "crates/services/src/task_manager/index.rs",
"line": 32,
"message": "unused import: `blob_hash::BlobHash`"
}
],
"known_clean": []
},
"ossify_log": "$ ossify.py crates\nProcessing Rust files in: ../inbuxa-import-work/strip-v0.16.24/tree/crates\n\nFound 958 Rust files\n\n\nSummary:\n- 50 files were completely removed\n- 2 crate roots were emptied\n- 118 proprietary snippets were removed from 50 files\n\n$ ossify.py tests\nProcessing Rust files in: ../inbuxa-import-work/strip-v0.16.24/tree/tests\n\nFound 212 Rust files\n\n\nSummary:\n- 11 files were completely removed\n- 0 crate roots were emptied\n- 0 proprietary snippets were removed from 0 files\n"
}