Files
inbuxa-server/docs/fork/strip-reports/v0.16.23.md
T
jcoffey-dev 4799d191a0
ci / fork-checks (pull_request) Successful in 18s
ci / build (pull_request) Successful in 7m11s
Fork tooling: a build check and a rename pass in the strip, a notice check in CI
strip.py compiles the stripped tree, so a dual-licensed file that only
serves an Enterprise feature fails the import instead of the merge, as
v0.16.23's tests/src/directory/issuer.rs does. Upstream's tests of the
features the fork rebuilt are expected not to compile there and are listed
in build-check-known.txt; an error anywhere else fails the run. Checked
against both imports: v0.16.22 passes with its 16 expected errors, v0.16.23
fails on issuer.rs alone. Imports the strip leaves unused are reported.

It also renames the upstream name where clients, users or operators meet
it as an identifier, from tools/fork/renames.py: wire-protocol names, the
web interface's client id, store keys, configuration defaults and the
served schema. main is renamed with the same module, so a re-import
arrives purged and those lines don't conflict.

notice-check.py fails CI when an upstream file the fork changed, measured
against the upstream branch, lacks its AGPL 5(a) notice; --fix adds it.
It runs beside the name check in a renamed fork-checks job.

Also commits v0.16.23's strip report under docs/fork/strip-reports/, which
the import in #18 left out.
2026-09-22 19:02:34 -07:00

15 KiB

Strip report: upstream v0.16.23 (9d1c75ab6843)

  • Enterprise-only files removed or emptied: 63
  • Enterprise-only snippets removed: 118 in 50 files
  • Cargo edits turning enterprise off: 25
  • Dangling module declarations removed: 5
  • Verification: clean
  • Left for the rebuilt features to replace: 19 enterprise feature gates in 18 files; 0 is_enterprise_edition() checks in 0 files
  • Third-party code: 14 files, 0 not in THIRD-PARTY.md
  • Upstream schema flags 9 objects and 30 fields as Enterprise

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

Dangling module declarations removed

  • crates/common/src/telemetry/metrics/mod.rs:12: mod test_data (#[cfg(any(feature = "dev_mode", feature = "test_mode"))] / pub mod test_data;)
  • tests/src/directory/mod.rs:11: mod oidc (pub mod oidc;)
  • tests/src/lib.rs:27: mod scim (#[cfg(test)] / pub mod scim;)
  • tests/src/system/mod.rs:8: mod archiving (pub mod archiving;)
  • tests/src/system/mod.rs:19: mod tenant (pub mod tenant;)

Cargo edits

  • crates/main/Cargo.toml:50: default = ["rocks", "enterprise"]default = ["rocks"]
  • tests/Cargo.toml:22: store = { path = "../crates/store", features = ["test_mode", "enterprise"] }store = { path = "../crates/store", features = ["test_mode"] }
  • tests/Cargo.toml:24: directory = { path = "../crates/directory", features = ["test_mode", "enterprise"] }directory = { path = "../crates/directory", features = ["test_mode"] }
  • tests/Cargo.toml:25: coordinator = { path = "../crates/coordinator", features = ["test_mode", "enterprise"] }coordinator = { path = "../crates/coordinator", features = ["test_mode"] }
  • tests/Cargo.toml:26: jmap = { path = "../crates/jmap", features = ["test_mode", "enterprise"] }jmap = { path = "../crates/jmap", features = ["test_mode"] }
  • tests/Cargo.toml:35: http = { path = "../crates/http", features = ["test_mode", "enterprise"] }http = { path = "../crates/http", features = ["test_mode"] }
  • tests/Cargo.toml:37: scim = { path = "../crates/scim", features = ["test_mode", "enterprise"] }scim = { path = "../crates/scim", features = ["test_mode"] }
  • tests/Cargo.toml:39: services = { path = "../crates/services", features = ["test_mode", "enterprise"] }services = { path = "../crates/services", features = ["test_mode"] }
  • tests/Cargo.toml:41: smtp = { path = "../crates/smtp", features = ["test_mode", "enterprise"] }smtp = { path = "../crates/smtp", features = ["test_mode"] }
  • tests/Cargo.toml:42: common = { path = "../crates/common", features = ["test_mode", "enterprise"] }common = { path = "../crates/common", features = ["test_mode"] }
  • tests/Cargo.toml:44: email = { path = "../crates/email", features = ["test_mode", "enterprise"] }email = { path = "../crates/email", features = ["test_mode"] }
  • tests/Cargo.toml:45: spam-filter = { path = "../crates/spam-filter", features = ["test_mode", "enterprise"] }spam-filter = { path = "../crates/spam-filter", features = ["test_mode"] }
  • tests/Cargo.toml:46: trc = { path = "../crates/trc", features = ["enterprise"] }trc = { path = "../crates/trc", features = [] }
  • tests/Cargo.toml:47: managesieve = { path = "../crates/managesieve", features = ["test_mode", "enterprise"] }managesieve = { path = "../crates/managesieve", features = ["test_mode"] }
  • .github/workflows/ci.yml:341: cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats enterprise"cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats"
  • .github/workflows/ci.yml:379: # cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features "foundationdb s3 redis nats enterprise"# cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features "foundationdb s3 redis nats"
  • .github/workflows/ci.yml:386: cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats enterprise"cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats"
  • .github/workflows/ci.yml:442: cargo build --release -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats enterprise"cargo build --release -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats"
  • Dockerfile:22: 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.jsonRUN 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
  • Dockerfile:24: 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"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"
  • Dockerfile.build:111: 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"; \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"; \
  • Dockerfile.build:119: 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"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"
  • Dockerfile.build:132: RUSTFLAGS="-L /usr/lib" cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features "foundationdb s3 redis nats enterprise" && \RUSTFLAGS="-L /usr/lib" cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features "foundationdb s3 redis nats" && \
  • Dockerfile.build:142: cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats enterprise" && \cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats" && \
  • Dockerfile.fdb:56: RUN cargo build -p stalwart --no-default-features --features "foundationdb s3 redis azure nats enterprise" --releaseRUN cargo build -p stalwart --no-default-features --features "foundationdb s3 redis azure nats" --release

Flagged Enterprise in upstream's 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 code

Comments in the stripped tree that name another copyright holder, another license, or a source the code came from. Files marked new aren't in THIRD-PARTY.md yet.