Write the brand in lowercase where people see it
ci / fork-checks (pull_request) Successful in 47s
ci / build (pull_request) Successful in 5m4s

The name is inbuxa, lowercase, like the wordmark; INBUXA reads as an
acronym. The admin and webmail already changed. Here that's everything
the server shows people: the brand macro behind the protocol greetings,
the HTTP and SCIM realms, the startup banner and the calendar and contact
PRODID; the first-party OAuth client descriptions; the legacy-protocol
refusals; the default calendar and address book names and the SMTP
greeting default, in the code and the schema served to the admin
(checksum regenerated); startup and shutdown events; the User-Agent;
the sign-in and RSVP pages; the service units; the OpenAPI realm; the
crate descriptions and the README, where it's set in bold.

Identifiers that are uppercase for their own reasons stay: INBUXA_*
settings, SUBSPACE_INBUXA. So do code comments and the AGPL 5(a) notice
lines.

Tests follow: the IMAP ID name, the default collection names, the PRODID
in the iTIP fixtures and the CalDAV free-busy expectations, and the e2e
legacy-protocol refusals. The webdav, imap and jmap suites pass, so do
the unit tests of every crate touched, and 73 of 75 SMTP tests; of the
other two, antispam fails on main too, and queue_retry is a timing flake
that passes on its own.
This commit is contained in:
2026-09-22 20:08:10 -07:00
parent cc6f1eb298
commit a993f9ab01
43 changed files with 131 additions and 131 deletions
+1 -1
View File
@@ -47,7 +47,7 @@ pub async fn test(imap: &mut ImapConnection, _imap_check: &mut ImapConnection) {
imap.send("ID").await;
imap.assert_read(Type::Tagged, ResponseType::Ok)
.await
.assert_contains("* ID (\"name\" \"INBUXA\" \"version\" ");
.assert_contains("* ID (\"name\" \"inbuxa\" \"version\" ");
// Login should be disabled
imap.send("LOGIN [email protected] secret").await;
+2 -2
View File
@@ -45,7 +45,7 @@ pub async fn test(test: &TestServer) {
list[0],
json!({
"id": default_calendar_id,
"name": "INBUXA Calendar ([email protected])",
"name": "inbuxa Calendar ([email protected])",
"description": null,
"sortOrder": 0,
"isSubscribed": true,
@@ -310,7 +310,7 @@ pub async fn test(test: &TestServer) {
}));
response.list()[1].assert_is_equal(json!({
"id": default_calendar_id,
"name": "INBUXA Calendar ([email protected])",
"name": "inbuxa Calendar ([email protected])",
"description": (),
"sortOrder": 0,
"isSubscribed": true,
+2 -2
View File
@@ -38,7 +38,7 @@ pub async fn test(test: &TestServer) {
assert_eq!(
list[0],
json!({
"name": "INBUXA Address Book ([email protected])",
"name": "inbuxa Address Book ([email protected])",
"description": (),
"sortOrder": 0,
"isSubscribed": true,
@@ -148,7 +148,7 @@ pub async fn test(test: &TestServer) {
"id": addressbook_id,
}),
json!({
"name": "INBUXA Address Book ([email protected])",
"name": "inbuxa Address Book ([email protected])",
"description": (),
"sortOrder": 0,
"isSubscribed": true,
+1 -1
View File
@@ -106,7 +106,7 @@ async fn discovery(scim: &ScimTest) {
);
assert!(
!config.body.contains("stalw"),
"SCIM-4: documentation is INBUXA's own"
"SCIM-4: documentation is inbuxa's own"
);
let types = anonymous.get("/ResourceTypes").await;
+1 -1
View File
@@ -503,7 +503,7 @@ pub async fn branding_compat() {
let admin = std::env::var("INBUXA_COMPAT_ADMIN").expect("INBUXA_COMPAT_ADMIN");
assert!(
std::env::var("NO_INSERT").is_ok(),
"NO_INSERT must be set, or the copy of INBUXA's data is wiped"
"NO_INSERT must be set, or the copy of inbuxa's data is wiped"
);
let test = TestServerBuilder::new("branding_compat")
.await
+1 -1
View File
@@ -431,7 +431,7 @@ pub async fn masked_email_compat() {
.expect("masks JSON");
assert!(
std::env::var("NO_INSERT").is_ok(),
"NO_INSERT must be set, or the copy of INBUXA's data is wiped"
"NO_INSERT must be set, or the copy of inbuxa's data is wiped"
);
let test = TestServerBuilder::new("masked_email_compat")
+1 -1
View File
@@ -908,7 +908,7 @@ pub async fn tenant_compat() {
.expect("expected JSON");
assert!(
std::env::var("NO_INSERT").is_ok(),
"NO_INSERT must be set, or the copy of INBUXA's data is wiped"
"NO_INSERT must be set, or the copy of inbuxa's data is wiped"
);
let test = TestServerBuilder::new("tenant_compat")
+1 -1
View File
@@ -618,7 +618,7 @@ pub async fn undelete_compat() {
.expect("archived items JSON");
assert!(
std::env::var("NO_INSERT").is_ok(),
"NO_INSERT must be set, or the copy of INBUXA's data is wiped"
"NO_INSERT must be set, or the copy of inbuxa's data is wiped"
);
let test = TestServerBuilder::new("undelete_compat")
+2 -2
View File
@@ -907,7 +907,7 @@ const REPORT_10: &str = r#"<?xml version="1.0" encoding="utf-8" ?>
const REPORT_10_RESPONSE: &str = r#"BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//INBUXA//INBUXA Server//EN
PRODID:-//inbuxa//inbuxa Server//EN
BEGIN:VFREEBUSY
DTSTART:20060104T140000Z
DTEND:20060105T220000Z
@@ -928,7 +928,7 @@ const REPORT_11: &str = r#"<?xml version="1.0" encoding="utf-8" ?>
const REPORT_11_RESPONSE: &str = r#"BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//INBUXA//INBUXA Server//EN
PRODID:-//inbuxa//inbuxa Server//EN
BEGIN:VFREEBUSY
DTSTART:20060101T000000Z
DTEND:20060104T140000Z