fix(6229): remove the Profile settings page — nothing read it
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 12s
CI & Build / TypeScript typecheck (push) Successful in 53s
CI & Build / integration (push) Successful in 1m9s
CI & Build / Python tests (push) Successful in 1m55s
CI & Build / Build & push image (push) Successful in 43s

The Profile tab said an assistant used it to personalise chat and a daily
journal. Neither exists, and nothing read the profile: the page saved to
user_profiles and the backup carried it. Removed the tab, the client calls,
/api/profile, the service and the model, and migration 0123 drops the table
(downgrade recreates it empty).

Backup format v27 stops writing user_profiles; an older archive carrying the
section still restores, and the file-restore integration test now proves it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-22 10:14:40 -04:00
co-authored by Claude Opus 5.5
parent 067aa58fbc
commit 54206afa76
13 changed files with 83 additions and 453 deletions
+3 -11
View File
@@ -21,11 +21,8 @@ from scribe.services import backup
def test_backup_version_is_current():
"""The bump is the point of the test — a payload section added without
moving the version produces backups that are structurally different and
indistinguishable by inspection.
(Named for the number it asserted until v10, which is exactly the drift a
name-carrying-a-value invites; it now says what it checks.)"""
assert backup.BACKUP_VERSION == 26
indistinguishable by inspection."""
assert backup.BACKUP_VERSION == 27
def _exportable_note(**over):
@@ -164,7 +161,6 @@ def _column_guard_targets():
from scribe.models.system import RecordSystem, System
from scribe.models.task_log import TaskLog
from scribe.models.user import User
from scribe.models.user_profile import UserProfile
return {
"users": (User, backup._user_rows),
@@ -212,7 +208,6 @@ def _column_guard_targets():
"family_idea_references": (FamilyIdeaReference, backup._family_idea_reference_rows),
"family_adoptions": (FamilyAdoption, backup._family_adoption_rows),
"family_decisions": (FamilyDecision, backup._family_decision_rows),
"user_profiles": (UserProfile, backup._user_profile_rows),
}
@@ -324,7 +319,6 @@ def _import_guard_targets():
"system_usage_events": backup._build_system_usage_event,
"retrieval_tuning_events": backup._build_retrieval_tuning_event,
"moment_mappings": backup._build_moment_mapping,
"user_profiles": backup._build_user_profile,
"design_systems": backup._build_design_system,
"design_tokens": backup._build_design_token,
"repo_bindings": backup._build_repo_binding,
@@ -593,9 +587,7 @@ async def test_export_full_backup_contains_every_declared_section():
# v25: family canon.
"platforms", "project_platforms", "family_ideas",
"family_idea_platforms", "family_idea_references",
"family_adoptions", "family_decisions",
# v26: the Profile page.
"user_profiles"):
"family_adoptions", "family_decisions"):
assert key in out, f"missing export section: {key}"
assert out[key] == []