Complete M11 Creator Studio and M12 Trust & Safety for PC5
checkpoint / checkpoint (push) Failing after 3h14m9s

- Creator Studio: Visual behavior & property inspector, GLB model importer, binary persistence
- Trust & Safety: 18+ TOS confirmation (DOB removed), creator guidelines & briefing card on join, in-game reporting HUD
- Test Harness: Add --filter, --skip-backend, --skip-godot to run_checkpoint_tests.py
This commit is contained in:
2026-09-17 23:13:57 +00:00
parent 920354705a
commit 7ecf0d53bd
30 changed files with 2099 additions and 157 deletions
+39 -6
View File
@@ -213,20 +213,31 @@ func login(username: String, password: String) -> Dictionary:
## Register a new user. On success stores the returned access token.
## @param date_of_birth ISO "YYYY-MM-DD". The backend computes age from it
## and rejects under-18s (403).
## ModBison is an 18+ platform. Supports over_18 boolean or optional legacy DOB string.
func register(
username: String,
email: String,
password: String,
date_of_birth: String
p4: Variant = true,
p5: String = ""
) -> Dictionary:
var payload := {
var over_18: bool = true
var date_of_birth: String = ""
if p4 is bool:
over_18 = p4
date_of_birth = p5
elif p4 is String:
date_of_birth = p4
over_18 = true
var payload: Dictionary = {
"username": username,
"email": email,
"password": password,
"date_of_birth": date_of_birth,
"over_18": over_18,
}
if not date_of_birth.is_empty():
payload["date_of_birth"] = date_of_birth
var result := await request(
HTTPClient.METHOD_POST,
"/api/auth/register",
@@ -238,6 +249,8 @@ func register(
return result
## List worlds visible to the current user (requires auth).
## @param visibility Optional filter: "public", "private", "friends_only".
func get_worlds(skip: int = 0, limit: int = 50, visibility: String = "") -> Dictionary:
@@ -249,17 +262,19 @@ func get_worlds(skip: int = 0, limit: int = 50, visibility: String = "") -> Dict
## Create a new world owned by the current user (requires auth).
## On success, result.data is the created World object containing {"id", "name", ...}.
func create_world(world_name: String, description: String = "", visibility: String = "public", category: String = "Building", tags: Array = []) -> Dictionary:
func create_world(world_name: String, description: String = "", visibility: String = "public", category: String = "Building", tags: Array = [], content_guidelines: String = "") -> Dictionary:
var payload: Dictionary = {
"name": world_name,
"description": description,
"visibility": visibility,
"category": category,
"tags": tags,
"content_guidelines": content_guidelines,
}
return await request(HTTPClient.METHOD_POST, "/api/worlds/", JSON.stringify(payload), "application/json", true)
## Ping the backend health endpoint (no auth).
func health_check() -> Dictionary:
return await request(HTTPClient.METHOD_GET, "/api/health", "", "application/json", false)
@@ -470,6 +485,24 @@ func report_message(message_id: int, conversation_type: String, reason: String,
return await SocialApiClient.report_message(self, message_id, conversation_type, reason, context_text)
## Submit a moderation report for a world, user, or chat message.
func submit_moderation_report(target_type: String, target_id: int, reason: String, category: String = "general") -> Dictionary:
var payload := {
"target_type": target_type,
"target_id": target_id,
"reason": reason,
"category": category,
}
return await request(
HTTPClient.METHOD_POST,
"/api/moderation/reports",
JSON.stringify(payload),
"application/json",
true
)
# ---------------------------------------------------------------------------
# Discovery Features
# ---------------------------------------------------------------------------